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;
}
- (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];