diff options
author | rowanbeentje <rowan@beent.je> | 2010-03-31 00:34:03 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2010-03-31 00:34:03 +0000 |
commit | b9f5c468900eca5748392d61a603b425492706f6 (patch) | |
tree | bee5f4c2ca46d39ec2e76972f089fba9e802be15 /Source/TableDump.m | |
parent | d060c9f395f938d1d1adeec0ce8a9444267bdebf (diff) | |
download | sequelpro-b9f5c468900eca5748392d61a603b425492706f6.tar.gz sequelpro-b9f5c468900eca5748392d61a603b425492706f6.tar.bz2 sequelpro-b9f5c468900eca5748392d61a603b425492706f6.zip |
- Improve error checking for various actions, particularly permissions errors (NULL data returned) for views and stored procedures. This should fix http://log.sequelpro.com/view/27 , http://log.sequelpro.com/view/57 , and the last of http://log.sequelpro.com/view/53
Diffstat (limited to 'Source/TableDump.m')
-rw-r--r-- | Source/TableDump.m | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/Source/TableDump.m b/Source/TableDump.m index 11196204..a905d7be 100644 --- a/Source/TableDump.m +++ b/Source/TableDump.m @@ -1843,6 +1843,39 @@ continue; } + // Retrieve the procedure CREATE syntax + MCPResult *createProcedureResult; + createProcedureResult = [mySQLConnection queryString:[NSString stringWithFormat:@"/*!50003 SHOW CREATE %@ %@ */;;", + procedureType, + [procedureName backtickQuotedString]]]; + [createProcedureResult setReturnDataAsStrings:YES]; + + if ([mySQLConnection queryErrored]) { + [errors appendString:[NSString stringWithFormat:@"%@\n", [mySQLConnection getLastErrorMessage]]]; + if ( [addErrorsSwitch state] == NSOnState ) { + [fileHandle writeData:[[NSString stringWithFormat:@"# Error: %@\n", [mySQLConnection getLastErrorMessage]] + dataUsingEncoding:NSUTF8StringEncoding]]; + } + [proceduresList release]; + continue; + } + + NSDictionary *procedureInfo = [[NSDictionary alloc] initWithDictionary:[createProcedureResult fetchRowAsDictionary]]; + NSString *createProcedure = [procedureInfo objectForKey:[NSString stringWithFormat:@"Create %@", [procedureType capitalizedString]]]; + + // A NULL result indicates a permission problem + if ([createProcedure isNSNull]) { + NSString *errorString = [NSString stringWithFormat:NSLocalizedString(@"Could not export the %@ '%@' because of a permisions error.\n", @"Procedure/function export permission error"), procedureType, procedureName]; + [errors appendString:errorString]; + if ( [addErrorsSwitch state] == NSOnState ) { + [fileHandle writeData:[[NSString stringWithFormat:@"# Error: %@\n", errorString] + dataUsingEncoding:NSUTF8StringEncoding]]; + } + [proceduresList release]; + [procedureInfo release]; + continue; + } + // Add the "drop" command if specified in the export dialog if ([addDropTableSwitch state] == NSOnState) { [metaString appendString:[NSString stringWithFormat:@"/*!50003 DROP %@ IF EXISTS %@ */;;\n", @@ -1863,17 +1896,10 @@ [[procedureDefiner objectAtIndex:1] backtickQuotedString] ]; - MCPResult *createProcedureResult; - createProcedureResult = [mySQLConnection queryString:[NSString stringWithFormat:@"/*!50003 SHOW CREATE %@ %@ */;;", - procedureType, - [procedureName backtickQuotedString]]]; - [createProcedureResult setReturnDataAsStrings:YES]; - NSDictionary *procedureInfo = [[NSDictionary alloc] initWithDictionary:[createProcedureResult fetchRowAsDictionary]]; [metaString appendString:[NSString stringWithFormat:@"/*!50003 SET SESSION SQL_MODE=\"%@\"*/;;\n", [procedureInfo objectForKey:@"sql_mode"]]]; - NSString *createProcedure = [procedureInfo objectForKey:[NSString stringWithFormat:@"Create %@", [procedureType capitalizedString]]]; NSRange procedureRange = [createProcedure rangeOfString:procedureType options:NSCaseInsensitiveSearch]; NSString *procedureBody = [createProcedure substringFromIndex:procedureRange.location]; |