aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPDatabaseDocument.m
diff options
context:
space:
mode:
authorMax <dmoagx@users.noreply.github.com>2018-05-03 22:26:12 +0200
committerMax <dmoagx@users.noreply.github.com>2018-05-03 22:26:27 +0200
commitb49edf67744ba6e54b7c0bdab7dc197cf8faac96 (patch)
tree25333e30eabfc6c40c9251322d2342ff6c21a530 /Source/SPDatabaseDocument.m
parent7f35608f0ab5f9192245a5bc8dd74da793788389 (diff)
downloadsequelpro-b49edf67744ba6e54b7c0bdab7dc197cf8faac96.tar.gz
sequelpro-b49edf67744ba6e54b7c0bdab7dc197cf8faac96.tar.bz2
sequelpro-b49edf67744ba6e54b7c0bdab7dc197cf8faac96.zip
Replace all non-cyclic NSAutoreleasepools with @autoreleasepool
Diffstat (limited to 'Source/SPDatabaseDocument.m')
-rw-r--r--Source/SPDatabaseDocument.m802
1 files changed, 390 insertions, 412 deletions
diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m
index 2ec74ae3..3a079883 100644
--- a/Source/SPDatabaseDocument.m
+++ b/Source/SPDatabaseDocument.m
@@ -5081,70 +5081,65 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (void)restoreSession
{
- NSAutoreleasePool *taskPool = [[NSAutoreleasePool alloc] init];
+ @autoreleasepool {
+ // Check and set the table
+ NSArray *tables = [tablesListInstance tables];
- // Check and set the table
- NSArray *tables = [tablesListInstance tables];
+ BOOL isSelectedTableDefined = YES;
- BOOL isSelectedTableDefined = YES;
+ if([tables indexOfObject:[spfSession objectForKey:@"table"]] == NSNotFound) {
+ isSelectedTableDefined = NO;
+ }
- if([tables indexOfObject:[spfSession objectForKey:@"table"]] == NSNotFound) {
- isSelectedTableDefined = NO;
- }
+ // Restore toolbar setting
+ if([spfSession objectForKey:@"isToolbarVisible"]) {
+ [mainToolbar setVisible:[[spfSession objectForKey:@"isToolbarVisible"] boolValue]];
+ }
- // Restore toolbar setting
- if([spfSession objectForKey:@"isToolbarVisible"]) {
- [mainToolbar setVisible:[[spfSession objectForKey:@"isToolbarVisible"] boolValue]];
- }
-
- // Reset database view encoding if differs from default
- if([spfSession objectForKey:@"connectionEncoding"] && ![[mySQLConnection encoding] isEqualToString:[spfSession objectForKey:@"connectionEncoding"]]) {
- [self setConnectionEncoding:[spfSession objectForKey:@"connectionEncoding"] reloadingViews:YES];
- }
+ // Reset database view encoding if differs from default
+ if([spfSession objectForKey:@"connectionEncoding"] && ![[mySQLConnection encoding] isEqualToString:[spfSession objectForKey:@"connectionEncoding"]]) {
+ [self setConnectionEncoding:[spfSession objectForKey:@"connectionEncoding"] reloadingViews:YES];
+ }
- if(isSelectedTableDefined) {
- // Set table content details for restore
- if([spfSession objectForKey:@"contentSortCol"])
- [tableContentInstance setSortColumnNameToRestore:[spfSession objectForKey:@"contentSortCol"] isAscending:[[spfSession objectForKey:@"contentSortColIsAsc"] boolValue]];
- if([spfSession objectForKey:@"contentPageNumber"])
- [tableContentInstance setPageToRestore:[[spfSession objectForKey:@"pageNumber"] integerValue]];
- if([spfSession objectForKey:@"contentViewport"])
- [tableContentInstance setViewportToRestore:NSRectFromString([spfSession objectForKey:@"contentViewport"])];
- if([spfSession objectForKey:@"contentFilter"])
- [tableContentInstance setFiltersToRestore:[spfSession objectForKey:@"contentFilter"]];
+ if(isSelectedTableDefined) {
+ // Set table content details for restore
+ if([spfSession objectForKey:@"contentSortCol"]) [tableContentInstance setSortColumnNameToRestore:[spfSession objectForKey:@"contentSortCol"] isAscending:[[spfSession objectForKey:@"contentSortColIsAsc"] boolValue]];
+ if([spfSession objectForKey:@"contentPageNumber"]) [tableContentInstance setPageToRestore:[[spfSession objectForKey:@"pageNumber"] integerValue]];
+ if([spfSession objectForKey:@"contentViewport"]) [tableContentInstance setViewportToRestore:NSRectFromString([spfSession objectForKey:@"contentViewport"])];
+ if([spfSession objectForKey:@"contentFilter"]) [tableContentInstance setFiltersToRestore:[spfSession objectForKey:@"contentFilter"]];
- // Select table
- [tablesListInstance selectTableAtIndex:[NSNumber numberWithInteger:[tables indexOfObject:[spfSession objectForKey:@"table"]]]];
+ // Select table
+ [tablesListInstance selectTableAtIndex:[NSNumber numberWithInteger:[tables indexOfObject:[spfSession objectForKey:@"table"]]]];
- // Restore table selection indexes
- if([spfSession objectForKey:@"contentSelection"]) {
- [tableContentInstance setSelectionToRestore:[spfSession objectForKey:@"contentSelection"]];
- }
+ // Restore table selection indexes
+ if([spfSession objectForKey:@"contentSelection"]) {
+ [tableContentInstance setSelectionToRestore:[spfSession objectForKey:@"contentSelection"]];
+ }
- [[tablesListInstance valueForKeyPath:@"tablesListView"] scrollRowToVisible:[tables indexOfObject:[spfSession objectForKey:@"selectedTable"]]];
+ [[tablesListInstance valueForKeyPath:@"tablesListView"] scrollRowToVisible:[tables indexOfObject:[spfSession objectForKey:@"selectedTable"]]];
- }
+ }
- // update UI on main thread
- SPMainQSync(^{
- // Select view
- NSString *view = [spfSession objectForKey:@"view"];
- if([view isEqualToString:@"SP_VIEW_STRUCTURE"]) [self viewStructure:self];
- else if([view isEqualToString:@"SP_VIEW_CONTENT"]) [self viewContent:self];
- else if([view isEqualToString:@"SP_VIEW_CUSTOMQUERY"]) [self viewQuery:self];
- else if([view isEqualToString:@"SP_VIEW_STATUS"]) [self viewStatus:self];
- else if([view isEqualToString:@"SP_VIEW_RELATIONS"]) [self viewRelations:self];
- else if([view isEqualToString:@"SP_VIEW_TRIGGERS"]) [self viewTriggers:self];
-
- [self updateWindowTitle:self];
- });
+ // update UI on main thread
+ SPMainQSync(^{
+ // Select view
+ NSString *view = [spfSession objectForKey:@"view"];
+ if([view isEqualToString:@"SP_VIEW_STRUCTURE"]) [self viewStructure:self];
+ else if([view isEqualToString:@"SP_VIEW_CONTENT"]) [self viewContent:self];
+ else if([view isEqualToString:@"SP_VIEW_CUSTOMQUERY"]) [self viewQuery:self];
+ else if([view isEqualToString:@"SP_VIEW_STATUS"]) [self viewStatus:self];
+ else if([view isEqualToString:@"SP_VIEW_RELATIONS"]) [self viewRelations:self];
+ else if([view isEqualToString:@"SP_VIEW_TRIGGERS"]) [self viewTriggers:self];
+
+ [self updateWindowTitle:self];
+ });
- // dealloc spfSession data
- SPClear(spfSession);
+ // dealloc spfSession data
+ SPClear(spfSession);
- // End the task
- [self endTask];
- [taskPool drain];
+ // End the task
+ [self endTask];
+ }
}
#endif
@@ -6231,112 +6226,109 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (void)_selectDatabaseAndItem:(NSDictionary *)selectionDetails
{
- NSAutoreleasePool *taskPool = [[NSAutoreleasePool alloc] init];
- NSString *targetDatabaseName = [selectionDetails objectForKey:@"database"];
+ @autoreleasepool {
+ NSString *targetDatabaseName = [selectionDetails objectForKey:@"database"];
#ifndef SP_CODA /* update history controller */
- NSString *targetItemName = [selectionDetails objectForKey:@"item"];
+ NSString *targetItemName = [selectionDetails objectForKey:@"item"];
- // Save existing scroll position and details, and ensure no duplicate entries are created as table list changes
- BOOL historyStateChanging = [spHistoryControllerInstance modifyingState];
-
- if (!historyStateChanging) {
- [spHistoryControllerInstance updateHistoryEntries];
- [spHistoryControllerInstance setModifyingState:YES];
- }
-#endif
+ // Save existing scroll position and details, and ensure no duplicate entries are created as table list changes
+ BOOL historyStateChanging = [spHistoryControllerInstance modifyingState];
- if (![targetDatabaseName isEqualToString:selectedDatabase]) {
+ if (!historyStateChanging) {
+ [spHistoryControllerInstance updateHistoryEntries];
+ [spHistoryControllerInstance setModifyingState:YES];
+ }
+#endif
- // Attempt to select the specified database, and abort on failure
+ if (![targetDatabaseName isEqualToString:selectedDatabase]) {
+ // Attempt to select the specified database, and abort on failure
#ifndef SP_CODA /* patch */
- if ([[chooseDatabaseButton onMainThread] indexOfItemWithTitle:targetDatabaseName] == NSNotFound || ![mySQLConnection selectDatabase:targetDatabaseName])
+ if ([[chooseDatabaseButton onMainThread] indexOfItemWithTitle:targetDatabaseName] == NSNotFound || ![mySQLConnection selectDatabase:targetDatabaseName])
#else
- if ( ![mySQLConnection selectDatabase:targetDatabaseName] )
+ if ( ![mySQLConnection selectDatabase:targetDatabaseName] )
#endif
- {
- // End the task first to ensure the database dropdown can be reselected
- [self endTask];
+ {
+ // End the task first to ensure the database dropdown can be reselected
+ [self endTask];
- if ([mySQLConnection isConnected]) {
+ if ([mySQLConnection isConnected]) {
- // Update the database list
- [[self onMainThread] setDatabases:self];
+ // Update the database list
+ [[self onMainThread] setDatabases:self];
- SPOnewayAlertSheet(
- NSLocalizedString(@"Error", @"error"),
- parentWindow,
- [NSString stringWithFormat:NSLocalizedString(@"Unable to select database %@.\nPlease check you have the necessary privileges to view the database, and that the database still exists.", @"message of panel when connection to db failed after selecting from popupbutton"), targetDatabaseName]
- );
- }
+ SPOnewayAlertSheet(
+ NSLocalizedString(@"Error", @"error"),
+ parentWindow,
+ [NSString stringWithFormat:NSLocalizedString(@"Unable to select database %@.\nPlease check you have the necessary privileges to view the database, and that the database still exists.", @"message of panel when connection to db failed after selecting from popupbutton"), targetDatabaseName]
+ );
+ }
- [taskPool drain];
- return;
- }
+ return;
+ }
#ifndef SP_CODA /* chooseDatabaseButton selectItemWithTitle: */
- [[chooseDatabaseButton onMainThread] selectItemWithTitle:targetDatabaseName];
+ [[chooseDatabaseButton onMainThread] selectItemWithTitle:targetDatabaseName];
#endif
- if (selectedDatabase) SPClear(selectedDatabase);
- selectedDatabase = [[NSString alloc] initWithString:targetDatabaseName];
+ if (selectedDatabase) SPClear(selectedDatabase);
+ selectedDatabase = [[NSString alloc] initWithString:targetDatabaseName];
- [databaseDataInstance resetAllData];
+ [databaseDataInstance resetAllData];
#ifndef SP_CODA /* update database encoding */
- // Update the stored database encoding, used for views, "default" table encodings, and to allow
- // or disallow use of the "View using encoding" menu
- [self detectDatabaseEncoding];
+ // Update the stored database encoding, used for views, "default" table encodings, and to allow
+ // or disallow use of the "View using encoding" menu
+ [self detectDatabaseEncoding];
#endif
-
- // Set the connection of SPTablesList to reload tables in db
- [tablesListInstance setConnection:mySQLConnection];
+
+ // Set the connection of SPTablesList to reload tables in db
+ [tablesListInstance setConnection:mySQLConnection];
#ifndef SP_CODA /* update history controller and ui manip */
- // Update the window title
- [self updateWindowTitle:self];
+ // Update the window title
+ [self updateWindowTitle:self];
- // Add a history entry
- if (!historyStateChanging) {
- [spHistoryControllerInstance setModifyingState:NO];
- [spHistoryControllerInstance updateHistoryEntries];
- }
+ // Add a history entry
+ if (!historyStateChanging) {
+ [spHistoryControllerInstance setModifyingState:NO];
+ [spHistoryControllerInstance updateHistoryEntries];
+ }
#endif
- }
+ }
#ifndef SP_CODA /* update selected table in SPTablesList */
- SPMainQSync(^{
- BOOL focusOnFilter = YES;
- if (targetItemName) focusOnFilter = NO;
-
- // If a the table has changed, update the selection
- if (![targetItemName isEqualToString:[self table]] && targetItemName) {
- focusOnFilter = ![tablesListInstance selectItemWithName:targetItemName];
- }
-
- // Ensure the window focus is on the table list or the filter as appropriate
- [tablesListInstance setTableListSelectability:YES];
- if (focusOnFilter) {
- [tablesListInstance makeTableListFilterHaveFocus];
- } else {
- [tablesListInstance makeTableListHaveFocus];
- }
- [tablesListInstance setTableListSelectability:NO];
- });
+ SPMainQSync(^{
+ BOOL focusOnFilter = YES;
+ if (targetItemName) focusOnFilter = NO;
+
+ // If a the table has changed, update the selection
+ if (![targetItemName isEqualToString:[self table]] && targetItemName) {
+ focusOnFilter = ![tablesListInstance selectItemWithName:targetItemName];
+ }
+
+ // Ensure the window focus is on the table list or the filter as appropriate
+ [tablesListInstance setTableListSelectability:YES];
+ if (focusOnFilter) {
+ [tablesListInstance makeTableListFilterHaveFocus];
+ } else {
+ [tablesListInstance makeTableListHaveFocus];
+ }
+ [tablesListInstance setTableListSelectability:NO];
+ });
#endif
- [self endTask];
+ [self endTask];
#ifndef SP_CODA /* triggered commands */
- [self _processDatabaseChangedBundleTriggerActions];
+ [self _processDatabaseChangedBundleTriggerActions];
#endif
#ifdef SP_CODA /* glue */
- if (delegate && [delegate respondsToSelector:@selector(databaseDidChange:)]) {
- [delegate performSelectorOnMainThread:@selector(databaseDidChange:) withObject:self waitUntilDone:NO];
- }
+ if (delegate && [delegate respondsToSelector:@selector(databaseDidChange:)]) {
+ [delegate performSelectorOnMainThread:@selector(databaseDidChange:) withObject:self waitUntilDone:NO];
+ }
#endif
-
- [taskPool drain];
+ }
}
#ifndef SP_CODA
@@ -6793,57 +6785,53 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (void)_loadTabTask:(NSNumber *)tabViewItemIndexNumber
{
- NSAutoreleasePool *tabLoadPool = [[NSAutoreleasePool alloc] init];
-
- // If anything other than a single table or view is selected, don't proceed.
- if (![self table] || ([tablesListInstance tableType] != SPTableTypeTable && [tablesListInstance tableType] != SPTableTypeView))
- {
- [self endTask];
- [tabLoadPool drain];
- return;
- }
+ @autoreleasepool {
+ // If anything other than a single table or view is selected, don't proceed.
+ if (![self table] || ([tablesListInstance tableType] != SPTableTypeTable && [tablesListInstance tableType] != SPTableTypeView)) {
+ [self endTask];
+ return;
+ }
- // Get the tab view index and ensure the associated view is loaded
- SPTableViewType selectedTabViewIndex = [tabViewItemIndexNumber integerValue];
+ // Get the tab view index and ensure the associated view is loaded
+ SPTableViewType selectedTabViewIndex = (SPTableViewType)[tabViewItemIndexNumber integerValue];
- switch (selectedTabViewIndex) {
- case SPTableViewStructure:
- if (!structureLoaded) {
- [tableSourceInstance loadTable:selectedTableName];
- structureLoaded = YES;
- }
- break;
- case SPTableViewContent:
- if (!contentLoaded) {
- [tableContentInstance loadTable:selectedTableName];
- contentLoaded = YES;
- }
- break;
+ switch (selectedTabViewIndex) {
+ case SPTableViewStructure:
+ if (!structureLoaded) {
+ [tableSourceInstance loadTable:selectedTableName];
+ structureLoaded = YES;
+ }
+ break;
+ case SPTableViewContent:
+ if (!contentLoaded) {
+ [tableContentInstance loadTable:selectedTableName];
+ contentLoaded = YES;
+ }
+ break;
#ifndef SP_CODA /* case SPTableViewStatus: case SPTableViewTriggers: */
- case SPTableViewStatus:
- if (!statusLoaded) {
- [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName];
- statusLoaded = YES;
- }
- break;
- case SPTableViewTriggers:
- if (!triggersLoaded) {
- [[tableTriggersInstance onMainThread] loadTriggers];
- triggersLoaded = YES;
- }
- break;
- case SPTableViewRelations:
- if (!relationsLoaded) {
- [[tableRelationsInstance onMainThread] refreshRelations:self];
- relationsLoaded = YES;
- }
- break;
+ case SPTableViewStatus:
+ if (!statusLoaded) {
+ [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName];
+ statusLoaded = YES;
+ }
+ break;
+ case SPTableViewTriggers:
+ if (!triggersLoaded) {
+ [[tableTriggersInstance onMainThread] loadTriggers];
+ triggersLoaded = YES;
+ }
+ break;
+ case SPTableViewRelations:
+ if (!relationsLoaded) {
+ [[tableRelationsInstance onMainThread] refreshRelations:self];
+ relationsLoaded = YES;
+ }
+ break;
#endif
- }
-
- [self endTask];
+ }
- [tabLoadPool drain];
+ [self endTask];
+ }
}
@@ -6852,169 +6840,169 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (void)_loadTableTask
{
- NSAutoreleasePool *loadPool = [[NSAutoreleasePool alloc] init];
- NSString *tableEncoding = nil;
+ @autoreleasepool {
+ NSString *tableEncoding = nil;
#ifndef SP_CODA /* Update the window title */
- // Update the window title
- [self updateWindowTitle:self];
+ // Update the window title
+ [self updateWindowTitle:self];
#endif
- // Reset table information caches and mark that all loaded views require their data reloading
- [tableDataInstance resetAllData];
+ // Reset table information caches and mark that all loaded views require their data reloading
+ [tableDataInstance resetAllData];
- structureLoaded = NO;
- contentLoaded = NO;
- statusLoaded = NO;
- triggersLoaded = NO;
- relationsLoaded = NO;
+ structureLoaded = NO;
+ contentLoaded = NO;
+ statusLoaded = NO;
+ triggersLoaded = NO;
+ relationsLoaded = NO;
- // Ensure status and details are fetched using UTF8
- NSString *previousEncoding = [mySQLConnection encoding];
- BOOL changeEncoding = ![previousEncoding isEqualToString:@"utf8"];
+ // Ensure status and details are fetched using UTF8
+ NSString *previousEncoding = [mySQLConnection encoding];
+ BOOL changeEncoding = ![previousEncoding isEqualToString:@"utf8"];
- if (changeEncoding) {
- [mySQLConnection storeEncodingForRestoration];
- [mySQLConnection setEncoding:@"utf8"];
- }
+ if (changeEncoding) {
+ [mySQLConnection storeEncodingForRestoration];
+ [mySQLConnection setEncoding:@"utf8"];
+ }
- // Cache status information on the working thread
- [tableDataInstance updateStatusInformationForCurrentTable];
+ // Cache status information on the working thread
+ [tableDataInstance updateStatusInformationForCurrentTable];
- // Check the current encoding against the table encoding to see whether
- // an encoding change and reset is required. This also caches table information on
- // the working thread.
- if( selectedTableType == SPTableTypeView || selectedTableType == SPTableTypeTable) {
+ // Check the current encoding against the table encoding to see whether
+ // an encoding change and reset is required. This also caches table information on
+ // the working thread.
+ if( selectedTableType == SPTableTypeView || selectedTableType == SPTableTypeTable) {
- // tableEncoding == nil indicates that there was an error while retrieving table data
- tableEncoding = [tableDataInstance tableEncoding];
+ // tableEncoding == nil indicates that there was an error while retrieving table data
+ tableEncoding = [tableDataInstance tableEncoding];
- // If encoding is set to Autodetect, update the connection character set encoding
- // based on the newly selected table's encoding - but only if it differs from the current encoding.
- if ([[[NSUserDefaults standardUserDefaults] objectForKey:SPDefaultEncoding] intValue] == SPEncodingAutodetect) {
- if (tableEncoding != nil && ![tableEncoding isEqualToString:previousEncoding]) {
- [self setConnectionEncoding:tableEncoding reloadingViews:NO];
- changeEncoding = NO;
+ // If encoding is set to Autodetect, update the connection character set encoding
+ // based on the newly selected table's encoding - but only if it differs from the current encoding.
+ if ([[[NSUserDefaults standardUserDefaults] objectForKey:SPDefaultEncoding] intValue] == SPEncodingAutodetect) {
+ if (tableEncoding != nil && ![tableEncoding isEqualToString:previousEncoding]) {
+ [self setConnectionEncoding:tableEncoding reloadingViews:NO];
+ changeEncoding = NO;
+ }
}
}
- }
- if (changeEncoding) [mySQLConnection restoreStoredEncoding];
+ if (changeEncoding) [mySQLConnection restoreStoredEncoding];
- // Notify listeners of the table change now that the state is fully set up.
- [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPTableChangedNotification object:self];
+ // Notify listeners of the table change now that the state is fully set up.
+ [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:SPTableChangedNotification object:self];
#ifndef SP_CODA /* [spHistoryControllerInstance restoreViewStates] */
-
- // Restore view states as appropriate
- [spHistoryControllerInstance restoreViewStates];
+ // Restore view states as appropriate
+ [spHistoryControllerInstance restoreViewStates];
#endif
- // Load the currently selected view if looking at a table or view
- if (tableEncoding && (selectedTableType == SPTableTypeView || selectedTableType == SPTableTypeTable))
- {
+ // Load the currently selected view if looking at a table or view
+ if (tableEncoding && (selectedTableType == SPTableTypeView || selectedTableType == SPTableTypeTable))
+ {
#ifndef SP_CODA /* load everything */
- NSInteger selectedTabViewIndex = [[self onMainThread] currentlySelectedView];
+ NSInteger selectedTabViewIndex = [[self onMainThread] currentlySelectedView];
- switch (selectedTabViewIndex) {
- case SPTableViewStructure:
+ switch (selectedTabViewIndex) {
+ case SPTableViewStructure:
#endif
- [tableSourceInstance loadTable:selectedTableName];
- structureLoaded = YES;
+ [tableSourceInstance loadTable:selectedTableName];
+ structureLoaded = YES;
#ifndef SP_CODA /* load everything */
- break;
- case SPTableViewContent:
+ break;
+ case SPTableViewContent:
#endif
- [tableContentInstance loadTable:selectedTableName];
- contentLoaded = YES;
+ [tableContentInstance loadTable:selectedTableName];
+ contentLoaded = YES;
#ifndef SP_CODA /* load everything */
- break;
- case SPTableViewStatus:
- [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName];
- statusLoaded = YES;
- break;
- case SPTableViewTriggers:
- [[tableTriggersInstance onMainThread] loadTriggers];
- triggersLoaded = YES;
- break;
- case SPTableViewRelations:
- [[tableRelationsInstance onMainThread] refreshRelations:self];
- relationsLoaded = YES;
- break;
- }
+ break;
+ case SPTableViewStatus:
+ [[extendedTableInfoInstance onMainThread] loadTable:selectedTableName];
+ statusLoaded = YES;
+ break;
+ case SPTableViewTriggers:
+ [[tableTriggersInstance onMainThread] loadTriggers];
+ triggersLoaded = YES;
+ break;
+ case SPTableViewRelations:
+ [[tableRelationsInstance onMainThread] refreshRelations:self];
+ relationsLoaded = YES;
+ break;
+ }
#endif
- }
+ }
- // Clear any views which haven't been loaded as they weren't visible. Note
- // that this should be done after reloading visible views, instead of clearing all
- // views, to reduce UI operations and avoid resetting state unnecessarily.
- // Some views (eg TableRelations) make use of the SPTableChangedNotification and
- // so don't require manual clearing.
- if (!structureLoaded) [tableSourceInstance loadTable:nil];
- if (!contentLoaded) [tableContentInstance loadTable:nil];
- if (!statusLoaded) [[extendedTableInfoInstance onMainThread] loadTable:nil];
- if (!triggersLoaded) [[tableTriggersInstance onMainThread] resetInterface];
+ // Clear any views which haven't been loaded as they weren't visible. Note
+ // that this should be done after reloading visible views, instead of clearing all
+ // views, to reduce UI operations and avoid resetting state unnecessarily.
+ // Some views (eg TableRelations) make use of the SPTableChangedNotification and
+ // so don't require manual clearing.
+ if (!structureLoaded) [tableSourceInstance loadTable:nil];
+ if (!contentLoaded) [tableContentInstance loadTable:nil];
+ if (!statusLoaded) [[extendedTableInfoInstance onMainThread] loadTable:nil];
+ if (!triggersLoaded) [[tableTriggersInstance onMainThread] resetInterface];
- // If the table row counts an inaccurate and require updating, trigger an update - no
- // action will be performed if not necessary
- [tableDataInstance updateAccurateNumberOfRowsForCurrentTableForcingUpdate:NO];
+ // If the table row counts an inaccurate and require updating, trigger an update - no
+ // action will be performed if not necessary
+ [tableDataInstance updateAccurateNumberOfRowsForCurrentTableForcingUpdate:NO];
#ifndef SP_CODA /* show Create Table syntax */
- // Update the "Show Create Syntax" window if it's already opened
- // according to the selected table/view/proc/func
- if ([[[self onMainThread] getCreateTableSyntaxWindow] isVisible]) {
- [[self onMainThread] showCreateTableSyntax:self];
- }
+ SPMainQSync(^{
+ // Update the "Show Create Syntax" window if it's already opened
+ // according to the selected table/view/proc/func
+ if ([[self getCreateTableSyntaxWindow] isVisible]) {
+ [self showCreateTableSyntax:self];
+ }
+ });
- // Add a history entry
- [spHistoryControllerInstance updateHistoryEntries];
+ // Add a history entry
+ [spHistoryControllerInstance updateHistoryEntries];
#endif
- // Empty the loading pool and exit the thread
- [self endTask];
+ // Empty the loading pool and exit the thread
+ [self endTask];
#ifndef SP_CODA /* triggered commands */
- NSArray *triggeredCommands = [SPAppDelegate bundleCommandsForTrigger:SPBundleTriggerActionTableChanged];
-
- for(NSString* cmdPath in triggeredCommands)
- {
- NSArray *data = [cmdPath componentsSeparatedByString:@"|"];
- NSMenuItem *aMenuItem = [[[NSMenuItem alloc] init] autorelease];
- [aMenuItem setTag:0];
- [aMenuItem setToolTip:[data objectAtIndex:0]];
+ NSArray *triggeredCommands = [SPAppDelegate bundleCommandsForTrigger:SPBundleTriggerActionTableChanged];
- // For HTML output check if corresponding window already exists
- BOOL stopTrigger = NO;
- if([(NSString*)[data objectAtIndex:2] length]) {
- BOOL correspondingWindowFound = NO;
- NSString *uuid = [data objectAtIndex:2];
- for(id win in [NSApp windows]) {
- if([[[[win delegate] class] description] isEqualToString:@"SPBundleHTMLOutputController"]) {
- if([[[win delegate] windowUUID] isEqualToString:uuid]) {
- correspondingWindowFound = YES;
- break;
+ for(NSString* cmdPath in triggeredCommands)
+ {
+ NSArray *data = [cmdPath componentsSeparatedByString:@"|"];
+ NSMenuItem *aMenuItem = [[[NSMenuItem alloc] init] autorelease];
+ [aMenuItem setTag:0];
+ [aMenuItem setToolTip:[data objectAtIndex:0]];
+
+ // For HTML output check if corresponding window already exists
+ BOOL stopTrigger = NO;
+ if([(NSString*)[data objectAtIndex:2] length]) {
+ BOOL correspondingWindowFound = NO;
+ NSString *uuid = [data objectAtIndex:2];
+ for(id win in [NSApp windows]) {
+ if([[[[win delegate] class] description] isEqualToString:@"SPBundleHTMLOutputController"]) {
+ if([[[win delegate] windowUUID] isEqualToString:uuid]) {
+ correspondingWindowFound = YES;
+ break;
+ }
}
}
+ if(!correspondingWindowFound) stopTrigger = YES;
}
- if(!correspondingWindowFound) stopTrigger = YES;
- }
- if(!stopTrigger) {
- id firstResponder = [[NSApp keyWindow] firstResponder];
- if([[data objectAtIndex:1] isEqualToString:SPBundleScopeGeneral]) {
- [[SPAppDelegate onMainThread] executeBundleItemForApp:aMenuItem];
- }
- else if([[data objectAtIndex:1] isEqualToString:SPBundleScopeDataTable]) {
- if([[[firstResponder class] description] isEqualToString:@"SPCopyTable"])
- [[firstResponder onMainThread] executeBundleItemForDataTable:aMenuItem];
- }
- else if([[data objectAtIndex:1] isEqualToString:SPBundleScopeInputField]) {
- if([firstResponder isKindOfClass:[NSTextView class]])
- [[firstResponder onMainThread] executeBundleItemForInputField:aMenuItem];
+ if(!stopTrigger) {
+ id firstResponder = [[NSApp keyWindow] firstResponder];
+ if([[data objectAtIndex:1] isEqualToString:SPBundleScopeGeneral]) {
+ [[SPAppDelegate onMainThread] executeBundleItemForApp:aMenuItem];
+ }
+ else if([[data objectAtIndex:1] isEqualToString:SPBundleScopeDataTable]) {
+ if([[[firstResponder class] description] isEqualToString:@"SPCopyTable"])
+ [[firstResponder onMainThread] executeBundleItemForDataTable:aMenuItem];
+ }
+ else if([[data objectAtIndex:1] isEqualToString:SPBundleScopeInputField]) {
+ if([firstResponder isKindOfClass:[NSTextView class]])
+ [[firstResponder onMainThread] executeBundleItemForInputField:aMenuItem];
+ }
}
}
- }
#endif
-
- [loadPool drain];
+ }
}
#pragma mark - SPMySQLConnection delegate methods
@@ -7329,149 +7317,144 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (void)generateHTMLForPrinting
{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- NSMutableDictionary *connection = [NSMutableDictionary dictionary];
- NSMutableDictionary *printData = [NSMutableDictionary dictionary];
+ @autoreleasepool {
+ NSMutableDictionary *connection = [NSMutableDictionary dictionary];
+ NSMutableDictionary *printData = [NSMutableDictionary dictionary];
- SPMainQSync(^{
- [connection setDictionary:[self connectionInformation]];
- [printData setObject:[self columnNames] forKey:@"columns"];
- SPTableViewType view = [self currentlySelectedView];
+ SPMainQSync(^{
+ [connection setDictionary:[self connectionInformation]];
+ [printData setObject:[self columnNames] forKey:@"columns"];
+ SPTableViewType view = [self currentlySelectedView];
- NSString *heading = @"";
+ NSString *heading = @"";
- // Table source view
- if (view == SPTableViewStructure) {
+ // Table source view
+ if (view == SPTableViewStructure) {
- NSDictionary *tableSource = [tableSourceInstance tableSourceForPrinting];
+ NSDictionary *tableSource = [tableSourceInstance tableSourceForPrinting];
- NSInteger tableType = [tablesListInstance tableType];
+ NSInteger tableType = [tablesListInstance tableType];
- switch (tableType) {
- case SPTableTypeTable:
- heading = NSLocalizedString(@"Table Structure", @"table structure print heading");
- break;
- case SPTableTypeView:
- heading = NSLocalizedString(@"View Structure", @"view structure print heading");
- break;
- }
+ 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 *rows = [[NSArray alloc] initWithArray:
+ NSArray *rows = [[NSArray alloc] initWithArray:
[[tableSource objectForKey:@"structure"] objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"structure"] count] - 1)]]
- ];
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"structure"] count] - 1)]]
+ ];
- NSArray *indexes = [[NSArray alloc] initWithArray:
+ NSArray *indexes = [[NSArray alloc] initWithArray:
[[tableSource objectForKey:@"indexes"] objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"indexes"] count] - 1)]]
- ];
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [[tableSource objectForKey:@"indexes"] count] - 1)]]
+ ];
- NSArray *indexColumns = [[tableSource objectForKey:@"indexes"] objectAtIndex:0];
+ NSArray *indexColumns = [[tableSource objectForKey:@"indexes"] objectAtIndex:0];
- [printData setObject:rows forKey:@"rows"];
- [printData setObject:indexes forKey:@"indexes"];
- [printData setObject:indexColumns forKey:@"indexColumns"];
+ [printData setObject:rows forKey:@"rows"];
+ [printData setObject:indexes forKey:@"indexes"];
+ [printData setObject:indexColumns forKey:@"indexColumns"];
- if ([indexes count]) [printData setObject:@1 forKey:@"hasIndexes"];
+ if ([indexes count]) [printData setObject:@1 forKey:@"hasIndexes"];
- [rows release];
- [indexes release];
- }
- // Table content view
- else if (view == SPTableViewContent) {
+ [rows release];
+ [indexes release];
+ }
+ // Table content view
+ else if (view == SPTableViewContent) {
- NSArray *data = [tableContentInstance currentDataResultWithNULLs:NO hideBLOBs:YES];
+ NSArray *data = [tableContentInstance currentDataResultWithNULLs:NO hideBLOBs:YES];
- heading = NSLocalizedString(@"Table Content", @"table content print heading");
+ heading = NSLocalizedString(@"Table Content", @"table content print heading");
- NSArray *rows = [[NSArray alloc] initWithArray:
+ NSArray *rows = [[NSArray alloc] initWithArray:
[data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
- ];
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
+ ];
- [printData setObject:rows forKey:@"rows"];
- [connection setValue:[tableContentInstance usedQuery] forKey:@"query"];
+ [printData setObject:rows forKey:@"rows"];
+ [connection setValue:[tableContentInstance usedQuery] forKey:@"query"];
- [rows release];
- }
- // Custom query view
- else if (view == SPTableViewCustomQuery) {
+ [rows release];
+ }
+ // Custom query view
+ else if (view == SPTableViewCustomQuery) {
- NSArray *data = [customQueryInstance currentResult];
+ NSArray *data = [customQueryInstance currentResult];
- heading = NSLocalizedString(@"Query Result", @"query result print heading");
+ heading = NSLocalizedString(@"Query Result", @"query result print heading");
- NSArray *rows = [[NSArray alloc] initWithArray:
+ NSArray *rows = [[NSArray alloc] initWithArray:
[data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
- ];
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [data count] - 1)]]
+ ];
- [printData setObject:rows forKey:@"rows"];
- [connection setValue:[customQueryInstance usedQuery] forKey:@"query"];
+ [printData setObject:rows forKey:@"rows"];
+ [connection setValue:[customQueryInstance usedQuery] forKey:@"query"];
- [rows release];
- }
- // Table relations view
- else if (view == SPTableViewRelations) {
+ [rows release];
+ }
+ // Table relations view
+ else if (view == SPTableViewRelations) {
- NSArray *data = [tableRelationsInstance relationDataForPrinting];
+ NSArray *data = [tableRelationsInstance relationDataForPrinting];
- heading = NSLocalizedString(@"Table Relations", @"toolbar item label for switching to the Table Relations tab");
+ heading = NSLocalizedString(@"Table Relations", @"toolbar item label for switching to the Table Relations tab");
- NSArray *rows = [[NSArray alloc] initWithArray:
+ NSArray *rows = [[NSArray alloc] initWithArray:
[data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
- ];
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
+ ];
- [printData setObject:rows forKey:@"rows"];
+ [printData setObject:rows forKey:@"rows"];
- [rows release];
- }
- // Table triggers view
- else if (view == SPTableViewTriggers) {
+ [rows release];
+ }
+ // Table triggers view
+ else if (view == SPTableViewTriggers) {
- NSArray *data = [tableTriggersInstance triggerDataForPrinting];
+ NSArray *data = [tableTriggersInstance triggerDataForPrinting];
- heading = NSLocalizedString(@"Table Triggers", @"toolbar item label for switching to the Table Triggers tab");
+ heading = NSLocalizedString(@"Table Triggers", @"toolbar item label for switching to the Table Triggers tab");
- NSArray *rows = [[NSArray alloc] initWithArray:
+ NSArray *rows = [[NSArray alloc] initWithArray:
[data objectsAtIndexes:
- [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
- ];
+ [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, ([data count] - 1))]]
+ ];
- [printData setObject:rows forKey:@"rows"];
+ [printData setObject:rows forKey:@"rows"];
- [rows release];
- }
+ [rows release];
+ }
- [printData setObject:heading forKey:@"heading"];
- });
+ [printData setObject:heading forKey:@"heading"];
+ });
- // Set up template engine with your chosen matcher
- MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
+ // Set up template engine with your chosen matcher
+ MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
- [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
+ [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
- [engine setObject:connection forKey:@"c"];
+ [engine setObject:connection forKey:@"c"];
- [printData setObject:([prefs boolForKey:SPUseMonospacedFonts]) ? SPDefaultMonospacedFontName : @"Lucida Grande" forKey:@"font"];
- [printData setObject:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? @"1px solid #CCCCCC" : @"none" forKey:@"gridlines"];
+ [printData setObject:([prefs boolForKey:SPUseMonospacedFonts]) ? SPDefaultMonospacedFontName : @"Lucida Grande" forKey:@"font"];
+ [printData setObject:([prefs boolForKey:SPDisplayTableViewVerticalGridlines]) ? @"1px solid #CCCCCC" : @"none" forKey:@"gridlines"];
- NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLPrintTemplate ofType:@"html"] withVariables:printData];
+ NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLPrintTemplate ofType:@"html"] withVariables:printData];
- // Check if the operation has been cancelled
- if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) {
- [self endTask];
- [pool drain];
+ // Check if the operation has been cancelled
+ if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) {
+ [self endTask];
+ return;
+ }
- [NSThread exit];
- return;
+ [self performSelectorOnMainThread:@selector(loadPrintWebViewWithHTMLString:) withObject:HTMLString waitUntilDone:NO];
}
-
- [self performSelectorOnMainThread:@selector(loadPrintWebViewWithHTMLString:) withObject:HTMLString waitUntilDone:NO];
-
- [pool drain];
}
/**
@@ -7479,38 +7462,33 @@ static int64_t SPDatabaseDocumentInstanceCounter = 0;
*/
- (void)generateTableInfoHTMLForPrinting
{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- // Set up template engine with your chosen matcher
- MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
+ @autoreleasepool {
+ // Set up template engine with your chosen matcher
+ MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
- [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
+ [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
- NSMutableDictionary *connection = [self connectionInformation];
- NSMutableDictionary *printData = [NSMutableDictionary dictionary];
+ NSMutableDictionary *connection = [self connectionInformation];
+ NSMutableDictionary *printData = [NSMutableDictionary dictionary];
- NSString *heading = NSLocalizedString(@"Table Information", @"table information print heading");
+ NSString *heading = NSLocalizedString(@"Table Information", @"table information print heading");
- [engine setObject:connection forKey:@"c"];
- [engine setObject:[[extendedTableInfoInstance onMainThread] tableInformationForPrinting] forKey:@"i"];
+ [engine setObject:connection forKey:@"c"];
+ [engine setObject:[[extendedTableInfoInstance onMainThread] tableInformationForPrinting] forKey:@"i"];
- [printData setObject:heading forKey:@"heading"];
- [printData setObject:[[NSUnarchiver unarchiveObjectWithData:[prefs objectForKey:SPCustomQueryEditorFont]] fontName] forKey:@"font"];
+ [printData setObject:heading forKey:@"heading"];
+ [printData setObject:[[NSUnarchiver unarchiveObjectWithData:[prefs objectForKey:SPCustomQueryEditorFont]] fontName] forKey:@"font"];
- NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLTableInfoPrintTemplate ofType:@"html"] withVariables:printData];
+ NSString *HTMLString = [engine processTemplateInFileAtPath:[[NSBundle mainBundle] pathForResource:SPHTMLTableInfoPrintTemplate ofType:@"html"] withVariables:printData];
- // Check if the operation has been cancelled
- if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) {
- [self endTask];
- [pool drain];
+ // Check if the operation has been cancelled
+ if ((printThread != nil) && (![NSThread isMainThread]) && ([printThread isCancelled])) {
+ [self endTask];
+ return;
+ }
- [NSThread exit];
- return;
+ [self performSelectorOnMainThread:@selector(loadPrintWebViewWithHTMLString:) withObject:HTMLString waitUntilDone:NO];
}
-
- [self performSelectorOnMainThread:@selector(loadPrintWebViewWithHTMLString:) withObject:HTMLString waitUntilDone:NO];
-
- [pool drain];
}
/**