lpw
2024-06-12 09e73ac42fe2feb7925d954fed88a2eaa57697f7
frameworks/FMDB.framework/Headers/FMDatabasePool.h
@@ -8,18 +8,20 @@
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class FMDatabase;
/** Pool of `<FMDatabase>` objects.
/** Pool of @c FMDatabase  objects.
 ### See also
 See also
 
 - `<FMDatabaseQueue>`
 - `<FMDatabase>`
 - @c FMDatabaseQueue
 - @c FMDatabase
 @warning Before using `FMDatabasePool`, please consider using `<FMDatabaseQueue>` instead.
 @warning Before using @c FMDatabasePool , please consider using @c FMDatabaseQueue  instead.
 If you really really really know what you're doing and `FMDatabasePool` is what
 If you really really really know what you're doing and @c FMDatabasePool  is what
 you really really need (ie, you're using a read only database), OK you can use
 it.  But just be careful not to deadlock!
@@ -28,27 +30,15 @@
 in the main.m file.
 */
@interface FMDatabasePool : NSObject {
    NSString            *_path;
    dispatch_queue_t    _lockQueue;
    NSMutableArray      *_databaseInPool;
    NSMutableArray      *_databaseOutPool;
    __unsafe_unretained id _delegate;
    NSUInteger          _maximumNumberOfDatabasesToCreate;
    int                 _openFlags;
}
@interface FMDatabasePool : NSObject
/** Database path */
@property (atomic, retain) NSString *path;
@property (atomic, copy, nullable) NSString *path;
/** Delegate object */
@property (atomic, assign) id delegate;
@property (atomic, unsafe_unretained, nullable) id delegate;
/** Maximum number of databases to create */
@@ -58,73 +48,140 @@
@property (atomic, readonly) int openFlags;
/**  Custom virtual file system name */
@property (atomic, copy, nullable) NSString *vfsName;
///---------------------
/// @name Initialization
///---------------------
/** Create pool using path.
 @param aPath The file path of the database.
 @return The `FMDatabasePool` object. `nil` on error.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
+ (instancetype)databasePoolWithPath:(NSString*)aPath;
+ (instancetype)databasePoolWithPath:(NSString * _Nullable)aPath;
/** Create pool using file URL.
 @param url The file @c NSURL  of the database.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
+ (instancetype)databasePoolWithURL:(NSURL * _Nullable)url;
/** Create pool using path and specified flags
 @param aPath The file path of the database.
 @param openFlags Flags passed to the openWithFlags method of the database
 @return The `FMDatabasePool` object. `nil` on error.
 @param openFlags Flags passed to the openWithFlags method of the database.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
+ (instancetype)databasePoolWithPath:(NSString*)aPath flags:(int)openFlags;
+ (instancetype)databasePoolWithPath:(NSString * _Nullable)aPath flags:(int)openFlags;
/** Create pool using file URL and specified flags
 @param url The file @c NSURL  of the database.
 @param openFlags Flags passed to the openWithFlags method of the database.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
+ (instancetype)databasePoolWithURL:(NSURL * _Nullable)url flags:(int)openFlags;
/** Create pool using path.
 @param aPath The file path of the database.
 @return The `FMDatabasePool` object. `nil` on error.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
- (instancetype)initWithPath:(NSString*)aPath;
- (instancetype)initWithPath:(NSString * _Nullable)aPath;
/** Create pool using file URL.
 @param url The file `NSURL of the database.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
- (instancetype)initWithURL:(NSURL * _Nullable)url;
/** Create pool using path and specified flags.
 @param aPath The file path of the database.
 @param openFlags Flags passed to the openWithFlags method of the database
 @return The `FMDatabasePool` object. `nil` on error.
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags;
- (instancetype)initWithPath:(NSString * _Nullable)aPath flags:(int)openFlags;
/** Create pool using file URL and specified flags.
 @param url The file @c NSURL  of the database.
 @param openFlags Flags passed to the openWithFlags method of the database
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
- (instancetype)initWithURL:(NSURL * _Nullable)url flags:(int)openFlags;
/** Create pool using path and specified flags.
 @param aPath The file path of the database.
 @param openFlags Flags passed to the openWithFlags method of the database
 @param vfsName The name of a custom virtual file system
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
- (instancetype)initWithPath:(NSString * _Nullable)aPath flags:(int)openFlags vfs:(NSString * _Nullable)vfsName;
/** Create pool using file URL and specified flags.
 @param url The file @c NSURL  of the database.
 @param openFlags Flags passed to the openWithFlags method of the database
 @param vfsName The name of a custom virtual file system
 @return The @c FMDatabasePool  object. @c nil  on error.
 */
- (instancetype)initWithURL:(NSURL * _Nullable)url flags:(int)openFlags vfs:(NSString * _Nullable)vfsName;
/** Returns the Class of 'FMDatabase' subclass, that will be used to instantiate database object.
 Subclasses can override this method to return specified Class of 'FMDatabase' subclass.
 @return The Class of 'FMDatabase' subclass, that will be used to instantiate database object.
 */
+ (Class)databaseClass;
///------------------------------------------------
/// @name Keeping track of checked in/out databases
///------------------------------------------------
/** Number of checked-in databases in pool
 @returns Number of databases
 */
- (NSUInteger)countOfCheckedInDatabases;
@property (nonatomic, readonly) NSUInteger countOfCheckedInDatabases;
/** Number of checked-out databases in pool
 @returns Number of databases
 */
- (NSUInteger)countOfCheckedOutDatabases;
@property (nonatomic, readonly) NSUInteger countOfCheckedOutDatabases;
/** Total number of databases in pool
 @returns Number of databases
 */
- (NSUInteger)countOfOpenDatabases;
@property (nonatomic, readonly) NSUInteger countOfOpenDatabases;
/** Release all databases in pool */
@@ -136,35 +193,57 @@
/** Synchronously perform database operations in pool.
 @param block The code to be run on the `FMDatabasePool` pool.
 @param block The code to be run on the @c FMDatabasePool  pool.
 */
- (void)inDatabase:(void (^)(FMDatabase *db))block;
- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block;
/** Synchronously perform database operations in pool using transaction.
 @param block The code to be run on the @c FMDatabasePool  pool.
 @warning   Unlike SQLite's `BEGIN TRANSACTION`, this method currently performs
            an exclusive transaction, not a deferred transaction. This behavior
            is likely to change in future versions of FMDB, whereby this method
            will likely eventually adopt standard SQLite behavior and perform
            deferred transactions. If you really need exclusive tranaction, it is
            recommended that you use `inExclusiveTransaction`, instead, not only
            to make your intent explicit, but also to future-proof your code.
  */
 @param block The code to be run on the `FMDatabasePool` pool.
- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
/** Synchronously perform database operations in pool using exclusive transaction.
 @param block The code to be run on the @c FMDatabasePool  pool.
 */
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block;
- (void)inExclusiveTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
/** Synchronously perform database operations in pool using deferred transaction.
 @param block The code to be run on the `FMDatabasePool` pool.
 @param block The code to be run on the @c FMDatabasePool  pool.
 */
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block;
- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
/** Synchronously perform database operations on queue, using immediate transactions.
 @param block The code to be run on the queue of @c FMDatabaseQueue
 */
- (void)inImmediateTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
/** Synchronously perform database operations in pool using save point.
 @param block The code to be run on the `FMDatabasePool` pool.
 @param block The code to be run on the @c FMDatabasePool  pool.
 
 @return `NSError` object if error; `nil` if successful.
 @return @c NSError  object if error; @c nil  if successful.
 @warning 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 startSavePointWithName:error:]>` instead.
 @warning 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 @c startSavePointWithName:error:  instead.
*/
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block;
- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
@end
@@ -178,10 +257,10 @@
/** Asks the delegate whether database should be added to the pool. 
 
 @param pool     The `FMDatabasePool` object.
 @param database The `FMDatabase` object.
 @param pool     The @c FMDatabasePool  object.
 @param database The @c FMDatabase  object.
 
 @return `YES` if it should add database to pool; `NO` if not.
 @return @c YES if it should add database to pool; @c NO if not.
 
 */
@@ -189,8 +268,8 @@
/** Tells the delegate that database was added to the pool.
 
 @param pool     The `FMDatabasePool` object.
 @param database The `FMDatabase` object.
 @param pool     The @c FMDatabasePool  object.
 @param database The @c FMDatabase  object.
 */
@@ -198,3 +277,4 @@
@end
NS_ASSUME_NONNULL_END