aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <dmoagx@users.noreply.github.com>2018-04-21 01:52:12 +0200
committerMax <dmoagx@users.noreply.github.com>2018-04-21 01:52:12 +0200
commit0a2228435cae7db15af7574eb829eab5799f7704 (patch)
tree28c91c7884eeb396cdfd2a2604e7e64f38bd60de
parent5a531bc5343f35ce5396b21bd707174f3477fb71 (diff)
downloadsequelpro-0a2228435cae7db15af7574eb829eab5799f7704.tar.gz
sequelpro-0a2228435cae7db15af7574eb829eab5799f7704.tar.bz2
sequelpro-0a2228435cae7db15af7574eb829eab5799f7704.zip
Fix some threading issues during print output generation (#3025)
-rw-r--r--Source/SPDatabaseDocument.m182
1 files changed, 91 insertions, 91 deletions
diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m
index b67728c2..ffca5976 100644
--- a/Source/SPDatabaseDocument.m
+++ b/Source/SPDatabaseDocument.m
@@ -7414,130 +7414,130 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- // Set up template engine with your chosen matcher
- MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
-
- [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
+ NSMutableDictionary *connection = [NSMutableDictionary dictionary];
+ NSMutableDictionary *printData = [NSMutableDictionary dictionary];
- NSMutableDictionary *connection = [self connectionInformation];
+ SPMainQSync(^{
+ [connection setDictionary:[self connectionInformation]];
+ [printData setObject:[self columnNames] forKey:@"columns"];
+ SPTableViewType view = [self currentlySelectedView];
- NSString *heading = @"";
- NSArray *rows, *indexes, *indexColumns = nil;
+ NSString *heading = @"";
- NSArray *columns = [self columnNames];
+ // Table source view
+ if (view == SPTableViewStructure) {
- NSMutableDictionary *printData = [NSMutableDictionary dictionary];
+ NSDictionary *tableSource = [tableSourceInstance tableSourceForPrinting];
- SPTableViewType view = [self currentlySelectedView];
+ NSInteger tableType = [tablesListInstance tableType];
- // Table source view
- if (view == SPTableViewStructure) {
+ switch (tableType) {
+ case SPTableTypeTable:
+ heading = NSLocalizedString(@"Table Structure", @"table structure print heading");
+ break;
+ case SPTableTypeView:
+ heading = NSLocalizedString(@"View Structure", @"view structure print heading");
+ break;
+ }
- NSDictionary *tableSource = [tableSourceInstance tableSourceForPrinting];
+ NSArray *rows = [[NSArray alloc] initWithArray:
+ [[tableSource objectForKey:@"structure"] objectsAtIndexes:
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"structure"] count] - 1)]]
+ ];
- NSInteger tableType = [tablesListInstance tableType];
+ NSArray *indexes = [[NSArray alloc] initWithArray:
+ [[tableSource objectForKey:@"indexes"] objectsAtIndexes:
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"indexes"] count] - 1)]]
+ ];
- switch (tableType) {
- case SPTableTypeTable:
- heading = NSLocalizedString(@"Table Structure", @"table structure print heading");
- break;
- case SPTableTypeView:
- heading = NSLocalizedString(@"View Structure", @"view structure print heading");
- break;
- }
+ NSArray *indexColumns = [[tableSource objectForKey:@"indexes"] objectAtIndex:0];
- rows = [[NSArray alloc] initWithArray:
- [[tableSource objectForKey:@"structure"] objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"structure"] count] - 1)]]
- ];
+ [printData setObject:rows forKey:@"rows"];
+ [printData setObject:indexes forKey:@"indexes"];
+ [printData setObject:indexColumns forKey:@"indexColumns"];
- indexes = [[NSArray alloc] initWithArray:
- [[tableSource objectForKey:@"indexes"] objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"indexes"] count] - 1)]]
- ];
+ if ([indexes count]) [printData setObject:@1 forKey:@"hasIndexes"];
- indexColumns = [[tableSource objectForKey:@"indexes"] objectAtIndex:0];
+ [rows release];
+ [indexes release];
+ }
+ // Table content view
+ else if (view == SPTableViewContent) {
- [printData setObject:rows forKey:@"rows"];
- [printData setObject:indexes forKey:@"indexes"];
- [printData setObject:indexColumns forKey:@"indexColumns"];
+ NSArray *data = [tableContentInstance currentDataResultWithNULLs:NO hideBLOBs:YES];
- if ([indexes count]) [printData setObject:@1 forKey:@"hasIndexes"];
+ heading = NSLocalizedString(@"Table Content", @"table content print heading");
- [rows release];
- [indexes release];
- }
- // Table content view
- else if (view == SPTableViewContent) {
+ NSArray *rows = [[NSArray alloc] initWithArray:
+ [data objectsAtIndexes:
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
+ ];
- NSArray *data = [tableContentInstance currentDataResultWithNULLs:NO hideBLOBs:YES];
+ [printData setObject:rows forKey:@"rows"];
+ [connection setValue:[tableContentInstance usedQuery] forKey:@"query"];
- heading = NSLocalizedString(@"Table Content", @"table content print heading");
+ [rows release];
+ }
+ // Custom query view
+ else if (view == SPTableViewCustomQuery) {
- rows = [[NSArray alloc] initWithArray:
- [data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
- ];
+ NSArray *data = [customQueryInstance currentResult];
- [printData setObject:rows forKey:@"rows"];
- [connection setValue:[tableContentInstance usedQuery] forKey:@"query"];
+ heading = NSLocalizedString(@"Query Result", @"query result print heading");
- [rows release];
- }
- // Custom query view
- else if (view == SPTableViewCustomQuery) {
+ NSArray *rows = [[NSArray alloc] initWithArray:
+ [data objectsAtIndexes:
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
+ ];
- NSArray *data = [customQueryInstance currentResult];
+ [printData setObject:rows forKey:@"rows"];
+ [connection setValue:[customQueryInstance usedQuery] forKey:@"query"];
- heading = NSLocalizedString(@"Query Result", @"query result print heading");
+ [rows release];
+ }
+ // Table relations view
+ else if (view == SPTableViewRelations) {
- rows = [[NSArray alloc] initWithArray:
- [data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
- ];
+ NSArray *data = [tableRelationsInstance relationDataForPrinting];
- [printData setObject:rows forKey:@"rows"];
- [connection setValue:[customQueryInstance usedQuery] forKey:@"query"];
+ heading = NSLocalizedString(@"Table Relations", @"toolbar item label for switching to the Table Relations tab");
- [rows release];
- }
- // Table relations view
- else if (view == SPTableViewRelations) {
+ NSArray *rows = [[NSArray alloc] initWithArray:
+ [data objectsAtIndexes:
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
+ ];
- NSArray *data = [tableRelationsInstance relationDataForPrinting];
+ [printData setObject:rows forKey:@"rows"];
- heading = NSLocalizedString(@"Table Relations", @"toolbar item label for switching to the Table Relations tab");
+ [rows release];
+ }
+ // Table triggers view
+ else if (view == SPTableViewTriggers) {
- rows = [[NSArray alloc] initWithArray:
- [data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
- ];
+ NSArray *data = [tableTriggersInstance triggerDataForPrinting];
- [printData setObject:rows forKey:@"rows"];
+ heading = NSLocalizedString(@"Table Triggers", @"toolbar item label for switching to the Table Triggers tab");
- [rows release];
- }
- // Table triggers view
- else if (view == SPTableViewTriggers) {
+ NSArray *rows = [[NSArray alloc] initWithArray:
+ [data objectsAtIndexes:
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
+ ];
- NSArray *data = [tableTriggersInstance triggerDataForPrinting];
+ [printData setObject:rows forKey:@"rows"];
- heading = NSLocalizedString(@"Table Triggers", @"toolbar item label for switching to the Table Triggers tab");
+ [rows release];
+ }
- rows = [[NSArray alloc] initWithArray:
- [data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
- ];
+ [printData setObject:heading forKey:@"heading"];
+ });
- [printData setObject:rows forKey:@"rows"];
+ // Set up template engine with your chosen matcher
+ MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
- [rows release];
- }
+ [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
[engine setObject:connection forKey:@"c"];
- [printData setObject:heading forKey:@"heading"];
- [printData setObject:columns forKey:@"columns"];
[printData setObject:([prefs boolForKey:SPUseMonospacedFonts]) ? SPDefaultMonospacedFontName : @"Lucida Grande" forKey:@"font"];
[printData setObject:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? @"1px solid #CCCCCC" : @"none" forKey:@"gridlines"];
@@ -7643,12 +7643,12 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (NSMutableDictionary *)connectionInformation
{
+ NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *versionForPrint = [NSString stringWithFormat:@"%@ %@ (%@ %@)",
- [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"],
- [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"],
- NSLocalizedString(@"build", @"build label"),
- [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]
- ];
+ [infoDict objectForKey:@"CFBundleName"],
+ [infoDict objectForKey:@"CFBundleShortVersionString"],
+ NSLocalizedString(@"build", @"build label"),
+ [infoDict objectForKey:@"CFBundleVersion"]];
NSMutableDictionary *connection = [NSMutableDictionary dictionary];