diff options
-rw-r--r-- | Source/SPConstants.h | 2 | ||||
-rw-r--r-- | Source/SPConstants.m | 2 | ||||
-rw-r--r-- | Source/SPNavigatorController.m | 13 | ||||
-rw-r--r-- | Source/SPTableContent.m | 4 | ||||
-rw-r--r-- | Source/SPTablesList.m | 140 | ||||
-rw-r--r-- | Source/SPTextView.m | 4 |
6 files changed, 57 insertions, 108 deletions
diff --git a/Source/SPConstants.h b/Source/SPConstants.h index ffe37d66..e35adb75 100644 --- a/Source/SPConstants.h +++ b/Source/SPConstants.h @@ -241,6 +241,8 @@ extern NSString *SPDefaultMonospacedFontName; extern NSString *SPDefaultPasteboardDragType; extern NSString *SPFavoritesPasteboardDragType; extern NSString *SPContentFilterPasteboardDragType; +extern NSString *SPNavigatorPasteboardDragType; +extern NSString *SPNavigatorTableDataPasteboardDragType; // File extensions extern NSString *SPFileExtensionDefault; diff --git a/Source/SPConstants.m b/Source/SPConstants.m index 1f391d47..30ae2bfd 100644 --- a/Source/SPConstants.m +++ b/Source/SPConstants.m @@ -42,6 +42,8 @@ NSString *SPDefaultMonospacedFontName = @"Monaco"; NSString *SPDefaultPasteboardDragType = @"SequelProPasteboard"; NSString *SPFavoritesPasteboardDragType = @"SPFavoritesPasteboard"; NSString *SPContentFilterPasteboardDragType = @"SPContentFilterPasteboard"; +NSString *SPNavigatorPasteboardDragType = @"SPNavigatorPasteboardDragType"; +NSString *SPNavigatorTableDataPasteboardDragType = @"SPNavigatorTableDataPasteboardDragType"; // File extensions NSString *SPFileExtensionDefault = @"spf"; diff --git a/Source/SPNavigatorController.m b/Source/SPNavigatorController.m index be24948b..1c17dd25 100644 --- a/Source/SPNavigatorController.m +++ b/Source/SPNavigatorController.m @@ -39,11 +39,6 @@ static SPNavigatorController *sharedNavigatorController = nil; -#ifndef SP_REFACTOR /* pasteboard types */ -#define DragFromNavigatorPboardType @"SPDragFromNavigatorPboardType" -#define DragTableDataFromNavigatorPboardType @"SPDragTableDataFromNavigatorPboardType" -#endif - @implementation SPNavigatorController #ifndef SP_REFACTOR /* unused sort func */ @@ -146,7 +141,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte prefs = [NSUserDefaults standardUserDefaults]; [self setWindowFrameAutosaveName:@"SPNavigator"]; - [outlineSchema2 registerForDraggedTypes:[NSArray arrayWithObjects:DragTableDataFromNavigatorPboardType, DragFromNavigatorPboardType, NSStringPboardType, nil]]; + [outlineSchema2 registerForDraggedTypes:[NSArray arrayWithObjects:SPNavigatorTableDataPasteboardDragType, SPNavigatorPasteboardDragType, NSStringPboardType, nil]]; [outlineSchema2 setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES]; [outlineSchema2 setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO]; @@ -1108,7 +1103,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte - (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard { // Provide data for our custom type, and simple NSStrings. - [pboard declareTypes:[NSArray arrayWithObjects:DragTableDataFromNavigatorPboardType, DragFromNavigatorPboardType, NSStringPboardType, nil] owner:self]; + [pboard declareTypes:[NSArray arrayWithObjects:SPNavigatorTableDataPasteboardDragType, SPNavigatorPasteboardDragType, NSStringPboardType, nil] owner:self]; // Collect the actual schema paths without leading connection ID NSMutableArray *draggedItems = [NSMutableArray array]; @@ -1125,7 +1120,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:arraydata] autorelease]; [archiver encodeObject:draggedItems forKey:@"itemdata"]; [archiver finishEncoding]; - [pboard setData:arraydata forType:DragFromNavigatorPboardType]; + [pboard setData:arraydata forType:SPNavigatorPasteboardDragType]; if([draggedItems count] == 1) { NSArray *pathComponents = [[draggedItems objectAtIndex:0] componentsSeparatedByString:SPUniqueSchemaDelimiter]; @@ -1134,7 +1129,7 @@ static NSComparisonResult compareStrings(NSString *s1, NSString *s2, void* conte [pboard setString:[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ SELECT * FROM %@", [[pathComponents lastObject] backtickQuotedString], [pathComponents componentsJoinedByPeriodAndBacktickQuoted] - ] forType:DragTableDataFromNavigatorPboardType]; + ] forType:SPNavigatorTableDataPasteboardDragType]; } } // For external destinations provide a comma separated string diff --git a/Source/SPTableContent.m b/Source/SPTableContent.m index dcc56525..e3c990d3 100644 --- a/Source/SPTableContent.m +++ b/Source/SPTableContent.m @@ -51,8 +51,10 @@ #import "SPBundleHTMLOutputController.h" #import "SPCustomQuery.h" -@interface SPTableContent (Private) +@interface SPTableContent () + - (BOOL)cancelRowEditing; + @end @implementation SPTableContent diff --git a/Source/SPTablesList.m b/Source/SPTablesList.m index 5ccb9bae..6c37ee87 100644 --- a/Source/SPTablesList.m +++ b/Source/SPTablesList.m @@ -49,13 +49,20 @@ #import "SPWindowController.h" #import "SPAppController.h" -@interface SPTablesList (PrivateAPI) +// Constants +static NSString *SPAddRow = @"SPAddRow"; +static NSString *SPAddNewTable = @"SPAddNewTable"; +static NSString *SPRemoveTable = @"SPRemoveTable"; +static NSString *SPTruncateTable = @"SPTruncateTable"; +static NSString *SPDuplicateTable = @"SPDuplicateTable"; -- (void)removeTable; -- (void)truncateTable; -- (void)addTable; -- (void)copyTable; -- (void)renameTableOfType:(SPTableType)tableType from:(NSString *)oldTableName to:(NSString *)newTableName; +@interface SPTablesList () + +- (void)_removeTable; +- (void)_truncateTable; +- (void)_addTable; +- (void)_copyTable; +- (void)_renameTableOfType:(SPTableType)tableType from:(NSString *)oldTableName to:(NSString *)newTableName; @end #endif @@ -383,7 +390,7 @@ modalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) - contextInfo:@"addTable"]; + contextInfo:SPAddNewTable]; } /** @@ -471,7 +478,7 @@ [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"Are you sure you want to delete the selected %@? This operation cannot be undone.", @"delete tables/views informative message"), tblTypes]]; } - [alert beginSheetModalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:@"removeRow"]; + [alert beginSheetModalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:SPRemoveTable]; } /** @@ -518,7 +525,7 @@ modalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) - contextInfo:@"copyTable"]; + contextInfo:SPDuplicateTable]; } /** @@ -604,7 +611,7 @@ [alert setInformativeText:NSLocalizedString(@"Are you sure you want to delete ALL records in the selected tables? This operation cannot be undone.", @"truncate tables informative message")]; } - [alert beginSheetModalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:@"truncateTable"]; + [alert beginSheetModalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:SPTruncateTable]; } /** @@ -658,27 +665,27 @@ else if ([sheet respondsToSelector:@selector(window)]) [[sheet window] orderOut:nil]; - if ([contextInfo isEqualToString:@"addRow"]) { + if ([contextInfo isEqualToString:SPAddRow]) { alertSheetOpened = NO; } - else if ([contextInfo isEqualToString:@"removeRow"]) { + else if ([contextInfo isEqualToString:SPRemoveTable]) { if (returnCode == NSAlertDefaultReturn) { - [self performSelector:@selector(removeTable) withObject:nil afterDelay:0.0]; + [self performSelector:@selector(_removeTable) withObject:nil afterDelay:0.0]; } } - else if ([contextInfo isEqualToString:@"truncateTable"]) { + else if ([contextInfo isEqualToString:SPTruncateTable]) { if (returnCode == NSAlertDefaultReturn) { - [self truncateTable]; + [self _truncateTable]; } } - else if ([contextInfo isEqualToString:@"addTable"]) { + else if ([contextInfo isEqualToString:SPAddNewTable]) { if (returnCode == NSOKButton) { - [self addTable]; + [self _addTable]; } } - else if ([contextInfo isEqualToString:@"copyTable"]) { + else if ([contextInfo isEqualToString:SPDuplicateTable]) { if (returnCode == NSOKButton) { - [self copyTable]; + [self _copyTable]; } } } @@ -1449,7 +1456,7 @@ @try { // first: update the database - [self renameTableOfType:selectedTableType from:selectedTableName to:newTableName]; + [self _renameTableOfType:selectedTableType from:selectedTableName to:newTableName]; // second: update the table list if (isTableListFiltered) { @@ -1672,8 +1679,8 @@ NSPasteboard *pboard = [info draggingPasteboard]; // tables were dropped coming from the Navigator - if ( [[pboard types] containsObject:@"SPDragTableDataFromNavigatorPboardType"] ) { - NSString *query = [pboard stringForType:@"SPDragTableDataFromNavigatorPboardType"]; + if ( [[pboard types] containsObject:SPNavigatorTableDataPasteboardDragType] ) { + NSString *query = [pboard stringForType:SPNavigatorTableDataPasteboardDragType]; if(!query) return NO; [mySQLConnection queryString:query]; @@ -1984,7 +1991,7 @@ object:tableDocumentInstance]; - [tablesListView registerForDraggedTypes:[NSArray arrayWithObjects:@"SPDragTableDataFromNavigatorPboardType", nil]]; + [tablesListView registerForDraggedTypes:[NSArray arrayWithObjects:SPNavigatorTableDataPasteboardDragType, nil]]; } #endif @@ -2016,14 +2023,11 @@ #endif #ifndef SP_REFACTOR /* operations performed on whole tables */ -@end - -@implementation SPTablesList (PrivateAPI) /** * Removes the selected object (table, view, procedure, function, etc.) from the database and tableView. */ -- (void)removeTable +- (void)_removeTable { NSIndexSet *indexes = [tablesListView selectedRowIndexes]; [tablesListView selectRowIndexes:[NSIndexSet indexSet] byExtendingSelection:NO]; @@ -2117,7 +2121,7 @@ /** * Trucates the selected table(s). */ -- (void)truncateTable +- (void)_truncateTable { NSIndexSet *indexes = [tablesListView selectedRowIndexes]; @@ -2159,7 +2163,7 @@ /** * Adds a new table table to the database using the selected character set encoding and storage engine. */ -- (void)addTable +- (void)_addTable { NSString *charSetStatement = @""; NSString *engineStatement = @""; @@ -2244,7 +2248,7 @@ SPBeginAlertSheet(NSLocalizedString(@"Error adding new table", @"error adding new table message"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocumentInstance parentWindow], self, - @selector(sheetDidEnd:returnCode:contextInfo:), @"addRow", + @selector(sheetDidEnd:returnCode:contextInfo:), SPAddRow, [NSString stringWithFormat:NSLocalizedString(@"An error occurred while trying to add the new table '%@'.\n\nMySQL said: %@", @"error adding new table informative message"), tableName, [mySQLConnection getLastErrorMessage]]); if (changeEncoding) [mySQLConnection restoreStoredEncoding]; @@ -2258,7 +2262,7 @@ /** * Copies the currently selected object (table, view, procedure, function, etc.). */ -- (void)copyTable +- (void)_copyTable { NSString *tableType = @""; @@ -2444,7 +2448,7 @@ * This function ONLY changes the database. It does NOT refresh the views etc. * CAREFUL: This function raises an exception if renaming fails, and does not show an error message. */ -- (void)renameTableOfType:(SPTableType)tableType from:(NSString *)oldTableName to:(NSString *)newTableName +- (void)_renameTableOfType:(SPTableType)tableType from:(NSString *)oldTableName to:(NSString *)newTableName { // check if the name really changed if ([oldTableName isEqualToString:newTableName]) return; @@ -2456,17 +2460,21 @@ // this code should be improved in case we find out that something uses table names like mytable-1, mytable-2, etc. NSString* tempTableName; int tempNumber; - for(tempNumber=2; tempNumber<100; tempNumber++) { + + for (tempNumber=2; tempNumber<100; tempNumber++) + { tempTableName = [NSString stringWithFormat:@"%@-%d",selectedTableName,tempNumber]; if ([self isTableNameValid:tempTableName forType:tableType]) break; } + if (tempNumber==100) { // we couldn't find a temporary name [NSException raise:@"No Tempname found" format:NSLocalizedString(@"An error occured while renaming '%@'. No temporary name could be found. Please try renaming to something else first.", @"rename table error - no temporary name found"), oldTableName]; } - [self renameTableOfType:tableType from:oldTableName to:tempTableName]; - [self renameTableOfType:tableType from:tempTableName to:newTableName]; + [self _renameTableOfType:tableType from:oldTableName to:tempTableName]; + [self _renameTableOfType:tableType from:tempTableName to:newTableName]; + return; } @@ -2478,6 +2486,7 @@ if ([mySQLConnection queryErrored]) { [NSException raise:@"MySQL Error" format:NSLocalizedString(@"An error occured while renaming '%@'.\n\nMySQL said: %@", @"rename table error informative message"), oldTableName, [mySQLConnection getLastErrorMessage]]; } + return; } @@ -2524,65 +2533,4 @@ } #endif -/** - * Check tableName for length and if the tableName doesn't match - * against current database table/view names (case-insensitive). - */ -- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType -{ - return [self isTableNameValid:tableName forType:tableType ignoringSelectedTable:NO]; -} - -/** - * Check tableName for length and if the tableName doesn't match - * against current database table/view names (case-insensitive). - */ -- (BOOL)isTableNameValid:(NSString *)tableName forType:(SPTableType)tableType ignoringSelectedTable:(BOOL)ignoreSelectedTable -{ - BOOL isValid = YES; - - // delete trailing whitespaces since 'foo ' or ' ' are not valid table names - NSString *fieldStr = [tableName stringByMatching:@"(.*?)\\s*$" capture:1]; - NSString *lowercaseFieldStr = [fieldStr lowercaseString]; - - // If table name has trailing whitespaces return 'no valid' - if([fieldStr length] != [tableName length]) return NO; - - // empty table names are invalid - if([fieldStr length] == 0) return NO; - - - NSArray *similarTables; - switch (tableType) { - case SPTableTypeView: - case SPTableTypeTable: - similarTables = [self allTableAndViewNames]; - break; - case SPTableTypeProc: - similarTables = [self allProcedureNames]; - break; - case SPTableTypeFunc: - similarTables = [self allFunctionNames]; - break; - default: - // if some other table type is given, just return yes - // better a mysql error than not being able to change something at all - return YES; - } - - for(id table in similarTables) { - //compare case insensitive here - if([lowercaseFieldStr isEqualToString:[table lowercaseString]]) { - if (ignoreSelectedTable) { - // if table is the selectedTable, ignore it - // we must compare CASE SENSITIVE here! - if ([table isEqualToString:selectedTableName]) continue; - } - isValid = NO; - break; - } - } - return isValid; -} - @end diff --git a/Source/SPTextView.m b/Source/SPTextView.m index fa01709e..cb0e4d9e 100644 --- a/Source/SPTextView.m +++ b/Source/SPTextView.m @@ -3444,13 +3444,13 @@ NSInteger _alphabeticSort(id string1, id string2, void *reverse) } // Insert selected items coming from the Navigator - if ( [[pboard types] containsObject:@"SPDragFromNavigatorPboardType"] ) { + if ( [[pboard types] containsObject:SPNavigatorPasteboardDragType] ) { NSPoint draggingLocation = [sender draggingLocation]; draggingLocation = [self convertPoint:draggingLocation fromView:nil]; NSUInteger characterIndex = [self characterIndexOfPoint:draggingLocation]; [self setSelectedRange:NSMakeRange(characterIndex,0)]; - NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:[pboard dataForType:@"SPDragFromNavigatorPboardType"]] autorelease]; + NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:[pboard dataForType:SPNavigatorPasteboardDragType]] autorelease]; NSArray *draggedItems = [[NSArray alloc] initWithArray:(NSArray *)[unarchiver decodeObjectForKey:@"itemdata"]]; [unarchiver finishDecoding]; |