diff options
author | rowanbeentje <rowan@beent.je> | 2009-10-16 19:36:36 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2009-10-16 19:36:36 +0000 |
commit | 974049dd4fbe6b42c1a8349f72ea355cf6a38634 (patch) | |
tree | b7782aacca3df7a4227710da313aba9e61996e4c /Source/TableContent.m | |
parent | 71a9ebd8762776e48eaf52615d76b586885c4623 (diff) | |
download | sequelpro-974049dd4fbe6b42c1a8349f72ea355cf6a38634.tar.gz sequelpro-974049dd4fbe6b42c1a8349f72ea355cf6a38634.tar.bz2 sequelpro-974049dd4fbe6b42c1a8349f72ea355cf6a38634.zip |
- Improve on r1423 by avoiding stringWithFormat: within the query construction loop, enormously reducing memory usage in big loops
- Use 64k chunks instead of 256k chunks - seems to give *much* better performance, possibly due to MySQL parsing/cache sizes (?)
- When restoring the query console to allow updates again after a loop, trigger a refresh of the view if the console is visible
Diffstat (limited to 'Source/TableContent.m')
-rw-r--r-- | Source/TableContent.m | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/Source/TableContent.m b/Source/TableContent.m index 734b4d96..19f77db4 100644 --- a/Source/TableContent.m +++ b/Source/TableContent.m @@ -1869,21 +1869,26 @@ [deleteQuery appendString:@"("]; for(NSString *primaryKeyFieldName in primaryKeyFieldNames) { - [deleteQuery appendFormat:@"%@=", [primaryKeyFieldName backtickQuotedString]]; id keyValue = [NSArrayObjectAtIndex(tableValues, index) objectAtIndex:[[[tableDataInstance columnWithName:primaryKeyFieldName] objectForKey:@"datacolumnindex"] intValue]]; - if([keyValue isKindOfClass:[NSData class]]) - [deleteQuery appendString:[NSString stringWithFormat:@"X'%@'", [mySQLConnection prepareBinaryData:keyValue]]]; - else - [deleteQuery appendString:[NSString stringWithFormat:@"'%@'", [keyValue description]]]; - - [deleteQuery appendString:@" AND "]; + [deleteQuery appendString:[primaryKeyFieldName backtickQuotedString]]; + if ([keyValue isKindOfClass:[NSData class]]) { + [deleteQuery appendString:@"=X'"]; + [deleteQuery appendString:[mySQLConnection prepareBinaryData:keyValue]]; + } else { + [deleteQuery appendString:@"='"]; + [deleteQuery appendString:[mySQLConnection prepareString:[keyValue description]]]; + } + [deleteQuery appendString:@"' AND "]; } - [deleteQuery setString:[NSString stringWithFormat:@"%@)", [deleteQuery substringToIndex:([deleteQuery length]-5)]]]; + + // Remove the trailing AND and add the closing bracket + [deleteQuery deleteCharactersInRange:NSMakeRange([deleteQuery length]-5, 5)]; + [deleteQuery appendString:@")"]; - // Split deletion query into 256k chunks - if([deleteQuery length] > 256000) { + // Split deletion query into 64k chunks + if([deleteQuery length] > 64000) { [mySQLConnection queryString:deleteQuery]; // Remember affected rows for error checking affectedRows += [mySQLConnection affectedRows]; |