diff --git a/src/fmdb/FMDatabase.h b/src/fmdb/FMDatabase.h index ab3b6966..e85c281f 100644 --- a/src/fmdb/FMDatabase.h +++ b/src/fmdb/FMDatabase.h @@ -86,7 +86,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary NSTimeInterval _startBusyRetryTime; NSMutableDictionary *_cachedStatements; - NSMutableSet *_openResultSets; + NSHashTable *_openResultSets; NSMutableSet *_openFunctions; NSDateFormatter *_dateFormat; diff --git a/src/fmdb/FMDatabase.m b/src/fmdb/FMDatabase.m index 566f6b12..4bde1b0c 100644 --- a/src/fmdb/FMDatabase.m +++ b/src/fmdb/FMDatabase.m @@ -34,7 +34,7 @@ - (instancetype)initWithPath:(NSString*)aPath { if (self) { _databasePath = [aPath copy]; - _openResultSets = [[NSMutableSet alloc] init]; + _openResultSets = [NSHashTable weakObjectsHashTable]; _db = nil; _logsErrors = YES; _crashOnErrors = NO; @@ -283,23 +283,15 @@ - (BOOL)hasOpenResultSets { - (void)closeOpenResultSets { //Copy the set so we don't get mutation errors - NSSet *openSetCopy = FMDBReturnAutoreleased([_openResultSets copy]); - for (NSValue *rsInWrappedInATastyValueMeal in openSetCopy) { - FMResultSet *rs = (FMResultSet *)[rsInWrappedInATastyValueMeal pointerValue]; - + NSHashTable *openSetCopy = FMDBReturnAutoreleased([_openResultSets copy]); + for (FMResultSet *rs in openSetCopy) { [rs setParentDB:nil]; [rs close]; - [_openResultSets removeObject:rsInWrappedInATastyValueMeal]; + [_openResultSets removeObject:rs]; } } -- (void)resultSetDidClose:(FMResultSet *)resultSet { - NSValue *setValue = [NSValue valueWithNonretainedObject:resultSet]; - - [_openResultSets removeObject:setValue]; -} - #pragma mark Cached statements - (void)clearCachedStatements { @@ -858,8 +850,7 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arr rs = [FMResultSet resultSetWithStatement:statement usingParentDatabase:self]; [rs setQuery:sql]; - NSValue *openResultSet = [NSValue valueWithNonretainedObject:rs]; - [_openResultSets addObject:openResultSet]; + [_openResultSets addObject:rs]; [statement setUseCount:[statement useCount] + 1]; diff --git a/src/fmdb/FMResultSet.m b/src/fmdb/FMResultSet.m index 9d6c6e17..3073a56d 100644 --- a/src/fmdb/FMResultSet.m +++ b/src/fmdb/FMResultSet.m @@ -2,11 +2,6 @@ #import "FMDatabase.h" #import "unistd.h" -@interface FMDatabase () -- (void)resultSetDidClose:(FMResultSet *)resultSet; -@end - - @implementation FMResultSet @synthesize query=_query; @synthesize statement=_statement; @@ -47,10 +42,6 @@ - (void)close { [_statement reset]; FMDBRelease(_statement); _statement = nil; - - // we don't need this anymore... (i think) - //[_parentDB setInUse:NO]; - [_parentDB resultSetDidClose:self]; _parentDB = nil; }