aboutsummaryrefslogtreecommitdiffstats
path: root/Source/TableContent.m
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2009-10-16 19:36:36 +0000
committerrowanbeentje <rowan@beent.je>2009-10-16 19:36:36 +0000
commit974049dd4fbe6b42c1a8349f72ea355cf6a38634 (patch)
treeb7782aacca3df7a4227710da313aba9e61996e4c /Source/TableContent.m
parent71a9ebd8762776e48eaf52615d76b586885c4623 (diff)
downloadsequelpro-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.m25
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];