From f36685ae1bee7b9274de27414ab8b64dbc57770f Mon Sep 17 00:00:00 2001 From: drx777 Date: Wed, 28 Apr 2010 17:11:41 +0000 Subject: This changeset implements renaming and duplicating databases on a server. Details as follows: * altered MCPConnection listTablesFromDB:like: to return NSArray * altered MCPConnection listFieldsFromTable:like: to use backtick quoted strings for table and fieldnames * added MCPConnection listTablesFromDB for a complete table list * added SPStringAdditions.h to various files to prevent warnings * added sheets for duplicate/rename DB in DBView.xib * added duplicate/rename menu items to MainMenu.xib * added outlets in TableDocument: databaseNewSheet databaseRenameSheet databaseCopyNameField databaseRenameNameField copyOnlyStructureButton copyDatabaseButton renameDatabaseButton * added methods in TableDocument: getConnection, copyDatabase, renameDatabase, _copyDatabase, _renameDatabase * added OCMock Framework for object mocking in tests * added group Others/DatabaseActions --- Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h | 3 +- Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m | 41 ++++++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) (limited to 'Frameworks/MCPKit') diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h index 10d46df2..60c9dcb6 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.h @@ -288,7 +288,8 @@ void performThreadedKeepAlive(void *ptr); - (MCPResult *)listDBsLike:(NSString *)dbsName; - (MCPResult *)listTables; - (MCPResult *)listTablesLike:(NSString *)tablesName; -- (MCPResult *)listTablesFromDB:(NSString *)dbName like:(NSString *)tablesName; +- (NSArray *)listTablesFromDB:(NSString *)dbName; +- (NSArray *)listTablesFromDB:(NSString *)dbName like:(NSString *)tablesName; - (MCPResult *)listFieldsFromTable:(NSString *)tableName; - (MCPResult *)listFieldsFromTable:(NSString *)tableName like:(NSString *)fieldsName; diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m index 27ae11ae..a8eb923a 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m @@ -33,6 +33,7 @@ #import "MCPStreamingResult.h" #import "MCPConnectionProxy.h" #import "MCPStringAdditions.h" +#import "SPStringAdditions.h" #import "RegexKitLite.h" #include @@ -1847,26 +1848,41 @@ void performThreadedKeepAlive(void *ptr) return theResult; } +- (NSArray *)listTablesFromDB:(NSString *)dbName { + return [self listTablesFromDB:dbName like:nil]; +} + /** * List tables in DB specified by dbName and corresponding to pattern. * This method indeed issues a !{SHOW TABLES FROM dbName LIKE ...} query to the server. * This is done this way to make sure the selected DB is not changed by this method. */ -- (MCPResult *)listTablesFromDB:(NSString *)dbName like:(NSString *)tablesName -{ +- (NSArray *)listTablesFromDB:(NSString *)dbName like:(NSString *)tablesName { MCPResult *theResult; - if ((tablesName == nil) || ([tablesName isEqualToString:@""])) { - NSString *theQuery = [NSString stringWithFormat:@"SHOW TABLES FROM %@", dbName]; + NSString *theQuery = [NSString stringWithFormat:@"SHOW TABLES FROM %@", + [dbName backtickQuotedString]]; theResult = [self queryString:theQuery]; - } - else { - NSString *theQuery = [NSString stringWithFormat:@"SHOW TABLES FROM %@ LIKE '%@'", dbName, tablesName]; + } else { + NSString *theQuery = [NSString stringWithFormat:@"SHOW TABLES FROM %@ LIKE '%@'", + [dbName backtickQuotedString], + [tablesName backtickQuotedString]]; theResult = [self queryString:theQuery]; } [theResult setReturnDataAsStrings:YES]; - - return theResult; + NSString *theTableName; + NSMutableArray *theDBTables = [NSMutableArray array]; + + // NSLog(@"num of fields: %@; num of rows: %@", [theResult numOfFields], [theResult numOfRows]); + if ([theResult numOfRows] > 0) { + int i; + for ( i = 0 ; i < [theResult numOfRows] ; i++ ) { + theTableName = [[theResult fetchRowAsArray] objectAtIndex:0]; + [theDBTables addObject:theTableName]; + } + } + + return theDBTables; } /** @@ -1887,11 +1903,14 @@ void performThreadedKeepAlive(void *ptr) MCPResult *theResult; if ((fieldsName == nil) || ([fieldsName isEqualToString:@""])) { - NSString *theQuery = [NSString stringWithFormat:@"SHOW COLUMNS FROM %@", tableName]; + NSString *theQuery = [NSString stringWithFormat:@"SHOW COLUMNS FROM %@", + [tableName backtickQuotedString]]; theResult = [self queryString:theQuery]; } else { - NSString *theQuery = [NSString stringWithFormat:@"SHOW COLUMNS FROM %@ LIKE '%@'", tableName, fieldsName]; + NSString *theQuery = [NSString stringWithFormat:@"SHOW COLUMNS FROM %@ LIKE '%@'", + [tableName backtickQuotedString], + [fieldsName backtickQuotedString]]; theResult = [self queryString:theQuery]; } [theResult setReturnDataAsStrings:YES]; -- cgit v1.2.3