// // FMDatabasePool.h // fmdb // // Created by August Mueller on 6/22/11. // Copyright 2011 Flying Meat Inc. All rights reserved. // #import #import "sqlite3.h" @class FMDatabase; @interface FMDatabasePool : NSObject { NSString *_path; dispatch_queue_t _lockQueue; NSMutableArray *_databaseInPool; NSMutableArray *_databaseOutPool; __unsafe_unretained id _delegate; NSUInteger _maximumNumberOfDatabasesToCreate; } @property (retain) NSString *path; @property (assign) id delegate; @property (assign) NSUInteger maximumNumberOfDatabasesToCreate; + (id)databasePoolWithPath:(NSString*)aPath; - (id)initWithPath:(NSString*)aPath; - (void)pushDatabaseBackInPool:(FMDatabase*)db; - (FMDatabase*)db; - (NSUInteger)countOfCheckedInDatabases; - (NSUInteger)countOfCheckedOutDatabases; - (NSUInteger)countOfOpenDatabases; - (void)releaseAllDatabases; - (void)inDatabase:(void (^)(FMDatabase *db))block; - (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; - (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; #if SQLITE_VERSION_NUMBER >= 3007000 // NOTE: you can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock. // If you need to nest, use FMDatabase's startSavePointWithName:error: instead. - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block; #endif @end @interface NSObject (FMDatabasePoolDelegate) - (BOOL)databasePool:(FMDatabasePool*)pool shouldAddDatabaseToPool:(FMDatabase*)database; @end