Skip to content

Commit 63ef786

Browse files
committed
Fix a rare issue where duplicating a database could cause an exception if a SHOW CREATE TABLE statement failed (#2413)
1 parent f2575a3 commit 63ef786

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

Source/SPTableCopy.m

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ @implementation SPTableCopy
4444
- (BOOL)copyTable:(NSString *)tableName from:(NSString *)sourceDB to:(NSString *)targetDB
4545
{
4646
NSString *createTableResult = [self _createTableStatementFor:tableName inDatabase:sourceDB];
47-
NSMutableString *createTableStatement = [[NSMutableString alloc] initWithString:createTableResult];
4847

49-
if ([[createTableStatement substringToIndex:12] isEqualToString:@"CREATE TABLE"]) {
48+
if ([createTableResult hasPrefix:@"CREATE TABLE"]) {
49+
NSMutableString *createTableStatement = [[NSMutableString alloc] initWithString:createTableResult];
5050

5151
// Add the target DB name and the separator dot after "CREATE TABLE ".
5252
[createTableStatement insertString:@"." atIndex:13];
@@ -59,8 +59,6 @@ - (BOOL)copyTable:(NSString *)tableName from:(NSString *)sourceDB to:(NSString *
5959
return ![connection queryErrored];
6060
}
6161

62-
[createTableStatement release];
63-
6462
return NO;
6563
}
6664

@@ -151,7 +149,10 @@ - (NSString *)_createTableStatementFor:(NSString *)tableName inDatabase:(NSStrin
151149

152150
SPMySQLResult *theResult = [connection queryString:showCreateTableStatment];
153151

154-
return [theResult numberOfRows] > 0 ? [[theResult getRowAsArray] objectAtIndex:1] : @"";
152+
if([theResult numberOfRows] > 0) return [[theResult getRowAsArray] objectAtIndex:1];
153+
154+
NSLog(@"query <%@> failed to return the expected result.\n Error state: %@ (%lu)",showCreateTableStatment,[connection lastErrorMessage],[connection lastErrorID]);
155+
return nil;
155156
}
156157

157158
@end

0 commit comments

Comments
 (0)