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
This commit is contained in:
Richard Frith-MacDonald 2006-06-23 19:36:52 +00:00
parent db2d235c42
commit a4b1bbfc99

View file

@ -2035,43 +2035,48 @@ static unsigned int maxConnections = 8;
return _db; return _db;
} }
- (void) execute - (void) execute
{ {
if (_count > 0) if (_count > 0)
{ {
BOOL wrapped = NO;
NSMutableString *sql = [_info objectAtIndex: 0];
NS_DURING NS_DURING
{ {
if (_count > 1 && [_db isInTransaction] == NO) 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]; [_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 NS_HANDLER
{ {
if ([_db isInTransaction] == YES) if (wrapped == YES)
{ {
NS_DURING [sql replaceCharactersInRange: NSMakeRange([sql length] - 7, 7)
{ withString: @""];
[_db rollback]; [sql replaceCharactersInRange: NSMakeRange(0, 6)
} withString: @""];
NS_HANDLER
{
NSLog(@"Exception rolling back transaction: %@",
localException);
}
NS_ENDHANDLER
} }
[localException raise]; [localException raise];
} }
NS_ENDHANDLER NS_ENDHANDLER
} }
} }
- (void) reset - (void) reset
{ {
[_info removeAllObjects]; [_info removeAllObjects];