From a4b1bbfc9914313f9fda5c7e4e3354f5216d5ba0 Mon Sep 17 00:00:00 2001 From: Richard Frith-MacDonald Date: Fri, 23 Jun 2006 19:36:52 +0000 Subject: [PATCH] combine begin and commit with update statements, for improved performance in small transactions. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/sqlclient/trunk@23100 72102866-910b-0410-8b05-ffd578937521 --- SQLClient.m | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/SQLClient.m b/SQLClient.m index 9657a22..d4449c0 100644 --- a/SQLClient.m +++ b/SQLClient.m @@ -2035,43 +2035,48 @@ static unsigned int maxConnections = 8; return _db; } + - (void) execute { if (_count > 0) { + BOOL wrapped = NO; + NSMutableString *sql = [_info objectAtIndex: 0]; + NS_DURING { if (_count > 1 && [_db isInTransaction] == NO) { - [_db begin]; + wrapped = YES; + [sql replaceCharactersInRange: NSMakeRange(0, 0) + withString: @"begin;"]; + [sql replaceCharactersInRange: NSMakeRange([sql length], 0) + withString: @";commit"]; } [_db simpleExecute: _info]; - if ([_db isInTransaction] == YES) + if (wrapped == YES) { - [_db commit]; + wrapped = NO; + [sql replaceCharactersInRange: NSMakeRange([sql length] - 7, 7) + withString: @""]; + [sql replaceCharactersInRange: NSMakeRange(0, 6) + withString: @""]; } } NS_HANDLER { - if ([_db isInTransaction] == YES) + if (wrapped == YES) { - NS_DURING - { - [_db rollback]; - } - NS_HANDLER - { - NSLog(@"Exception rolling back transaction: %@", - localException); - } - NS_ENDHANDLER + [sql replaceCharactersInRange: NSMakeRange([sql length] - 7, 7) + withString: @""]; + [sql replaceCharactersInRange: NSMakeRange(0, 6) + withString: @""]; } [localException raise]; } NS_ENDHANDLER } } - - (void) reset { [_info removeAllObjects];