From 32d925e6fc7f890aa58a54be772a57c1fcdc856d Mon Sep 17 00:00:00 2001 From: Robert Ryan Date: Sat, 9 May 2020 09:51:29 -0700 Subject: [PATCH 1/2] Update gh-pages --- .../FMDBExecuteStatementsCallbackBlock.html | 109 - html/Categories.html | 143 + .../FMDatabase+FMDatabaseAdditions.html | 1288 -- .../NSObject(FMDatabasePoolDelegate).html | 253 + .../NSObject+FMDatabasePoolDelegate.html | 274 - html/Classes.html | 398 + html/Classes/FMDatabase.html | 12552 +++++++++------- html/Classes/FMDatabasePool.html | 3039 ++-- html/Classes/FMDatabaseQueue.html | 3004 ++-- html/Classes/FMResultSet.html | 5413 ++++--- html/Classes/FMStatement.html | 903 +- html/Constants.html | 172 + html/Enums.html | 185 + html/Enums/FMDBCheckpointMode.html | 247 + html/Enums/SqliteValueType.html | 285 + html/Type Definitions.html | 145 + html/badge.svg | 28 + html/css/highlight.css | 200 + html/css/jazzy.css | 374 + html/css/scss/_index.scss | 17 - html/css/scss/_layout.scss | 302 - html/css/scss/_normalize.scss | 581 - html/css/scss/_object.scss | 89 - html/css/scss/_print.scss | 42 - html/css/scss/_variables.scss | 12 - html/css/scss/_xcode.scss | 29 - html/css/scss/style.scss | 1 - html/css/style.css | 2 - html/docsets/FMDB.docset/Contents/Info.plist | 20 + .../Resources/Documents/Categories.html | 143 + .../NSObject(FMDatabasePoolDelegate).html | 253 + .../Contents/Resources/Documents/Classes.html | 398 + .../Documents/Classes/FMDatabase.html | 6978 +++++++++ .../Documents/Classes/FMDatabasePool.html | 1467 ++ .../Documents/Classes/FMDatabaseQueue.html | 1617 ++ .../Documents/Classes/FMResultSet.html | 2662 ++++ .../Documents/Classes/FMStatement.html | 465 + .../Resources/Documents/Constants.html | 172 + .../Contents/Resources/Documents/Enums.html | 185 + .../Documents/Enums/FMDBCheckpointMode.html | 247 + .../Documents/Enums/SqliteValueType.html | 285 + .../Resources/Documents/Type Definitions.html | 145 + .../Resources/Documents/css/highlight.css | 200 + .../Resources/Documents/css/jazzy.css | 374 + .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Contents/Resources/Documents/index.html | 584 + .../Contents/Resources/Documents/js/jazzy.js | 70 + .../Resources/Documents/js/jquery.min.js | 2 + .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 69632 bytes html/docsets/FMDB.tgz | Bin 0 -> 112509 bytes html/hierarchy.html | 114 - html/img/button_bar_background.png | Bin 2825 -> 0 bytes html/img/carat.png | Bin 0 -> 274 bytes html/img/dash.png | Bin 0 -> 1338 bytes html/img/disclosure.png | Bin 115 -> 0 bytes html/img/disclosure_open.png | Bin 131 -> 0 bytes html/img/gh.png | Bin 0 -> 1571 bytes html/img/library_background.png | Bin 183 -> 0 bytes html/img/title_background.png | Bin 177 -> 0 bytes html/index.html | 696 +- html/js/jazzy.js | 70 + html/js/jquery.min.js | 2 + html/js/script.js | 59 - html/search.json | 1 + html/undocumented.json | 180 + images/bg_hr.png | Bin 943 -> 0 bytes images/blacktocat.png | Bin 1428 -> 0 bytes images/icon_download.png | Bin 1162 -> 0 bytes images/sprite_download.png | Bin 16799 -> 0 bytes javascripts/main.js | 1 - params.json | 1 - stylesheets/pygment_trac.css | 70 - stylesheets/stylesheet.css | 429 - 76 files changed, 32339 insertions(+), 15639 deletions(-) delete mode 100644 html/Blocks/FMDBExecuteStatementsCallbackBlock.html create mode 100644 html/Categories.html delete mode 100644 html/Categories/FMDatabase+FMDatabaseAdditions.html create mode 100644 html/Categories/NSObject(FMDatabasePoolDelegate).html delete mode 100644 html/Categories/NSObject+FMDatabasePoolDelegate.html create mode 100644 html/Classes.html create mode 100644 html/Constants.html create mode 100644 html/Enums.html create mode 100644 html/Enums/FMDBCheckpointMode.html create mode 100644 html/Enums/SqliteValueType.html create mode 100644 html/Type Definitions.html create mode 100644 html/badge.svg create mode 100644 html/css/highlight.css create mode 100644 html/css/jazzy.css delete mode 100644 html/css/scss/_index.scss delete mode 100644 html/css/scss/_layout.scss delete mode 100644 html/css/scss/_normalize.scss delete mode 100644 html/css/scss/_object.scss delete mode 100644 html/css/scss/_print.scss delete mode 100644 html/css/scss/_variables.scss delete mode 100644 html/css/scss/_xcode.scss delete mode 100644 html/css/scss/style.scss delete mode 100644 html/css/style.css create mode 100644 html/docsets/FMDB.docset/Contents/Info.plist create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Categories.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Categories/NSObject(FMDatabasePoolDelegate).html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Classes.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabase.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabasePool.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabaseQueue.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMResultSet.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMStatement.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Constants.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Enums.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/FMDBCheckpointMode.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/SqliteValueType.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/Type Definitions.html create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 html/docsets/FMDB.docset/Contents/Resources/Documents/img/carat.png create mode 100755 html/docsets/FMDB.docset/Contents/Resources/Documents/img/dash.png create mode 100755 html/docsets/FMDB.docset/Contents/Resources/Documents/img/gh.png create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/index.html create mode 100755 html/docsets/FMDB.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 html/docsets/FMDB.docset/Contents/Resources/Documents/search.json create mode 100644 html/docsets/FMDB.docset/Contents/Resources/docSet.dsidx create mode 100644 html/docsets/FMDB.tgz delete mode 100644 html/hierarchy.html delete mode 100644 html/img/button_bar_background.png create mode 100755 html/img/carat.png create mode 100755 html/img/dash.png delete mode 100644 html/img/disclosure.png delete mode 100644 html/img/disclosure_open.png create mode 100755 html/img/gh.png delete mode 100644 html/img/library_background.png delete mode 100644 html/img/title_background.png create mode 100755 html/js/jazzy.js create mode 100644 html/js/jquery.min.js delete mode 100644 html/js/script.js create mode 100644 html/search.json create mode 100644 html/undocumented.json delete mode 100644 images/bg_hr.png delete mode 100644 images/blacktocat.png delete mode 100644 images/icon_download.png delete mode 100644 images/sprite_download.png delete mode 100644 javascripts/main.js delete mode 100644 params.json delete mode 100644 stylesheets/pygment_trac.css delete mode 100644 stylesheets/stylesheet.css diff --git a/html/Blocks/FMDBExecuteStatementsCallbackBlock.html b/html/Blocks/FMDBExecuteStatementsCallbackBlock.html deleted file mode 100644 index e8bec927..00000000 --- a/html/Blocks/FMDBExecuteStatementsCallbackBlock.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - FMDBExecuteStatementsCallbackBlock Block Reference - - - - - - -
-
- -

- FMDB -

- -

- ccgus -

- -
-
- - - -
-
-
-
-

FMDBExecuteStatementsCallbackBlock Block Reference

- - -
- - - - -
Declared inFMDatabase.h
- - - - - - - - - - -

Block Definition

-

FMDBExecuteStatementsCallbackBlock

- - -typedef int (^FMDBExecuteStatementsCallbackBlock) (NSDictionary *resultsDictionary) - - - - - -
- - -
-
-
- - - - \ No newline at end of file diff --git a/html/Categories.html b/html/Categories.html new file mode 100644 index 00000000..041378a1 --- /dev/null +++ b/html/Categories.html @@ -0,0 +1,143 @@ + + + + Categories Reference + + + + + + + + + + +
+
+

FMDB 2.7.7 Docs (89% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Categories

+

The following categories are available globally.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    FMDatabasePool delegate category

    + +

    This is a category that defines the protocol for the FMDatabasePool delegate

    + + See more +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @interface NSObject (FMDatabasePoolDelegate)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/html/Categories/FMDatabase+FMDatabaseAdditions.html b/html/Categories/FMDatabase+FMDatabaseAdditions.html deleted file mode 100644 index 9605063f..00000000 --- a/html/Categories/FMDatabase+FMDatabaseAdditions.html +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - FMDatabase(FMDatabaseAdditions) Category Reference - - - - - - -
-
- -

- FMDB -

- -

- ccgus -

- -
-
- - - -
-
-
-
-

FMDatabase(FMDatabaseAdditions) Category Reference

- - -
- - - - -
Declared inFMDatabaseAdditions.h
- - - - -
- -

Overview

-

Category of additions for FMDatabase class.

- -

See also

- - - -
- - - - - -
- - - - -

Return results of SQL to variable

- -
-
- -

– intForQuery: -

- -
-
- -
- - -
-

Return int value for query

-
- - - -
- (int)intForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

int value.

-
- - - - - -
-

Discussion

-

Return int value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– longForQuery: -

- -
-
- -
- - -
-

Return long value for query

-
- - - -
- (long)longForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

long value.

-
- - - - - -
-

Discussion

-

Return long value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– boolForQuery: -

- -
-
- -
- - -
-

Return BOOL value for query

-
- - - -
- (BOOL)boolForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

BOOL value.

-
- - - - - -
-

Discussion

-

Return BOOL value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– doubleForQuery: -

- -
-
- -
- - -
-

Return double value for query

-
- - - -
- (double)doubleForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

double value.

-
- - - - - -
-

Discussion

-

Return double value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– stringForQuery: -

- -
-
- -
- - -
-

Return NSString value for query

-
- - - -
- (NSString *_Nullable)stringForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

NSString value.

-
- - - - - -
-

Discussion

-

Return NSString value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– dataForQuery: -

- -
-
- -
- - -
-

Return NSData value for query

-
- - - -
- (NSData *_Nullable)dataForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

NSData value.

-
- - - - - -
-

Discussion

-

Return NSData value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– dateForQuery: -

- -
-
- -
- - -
-

Return NSDate value for query

-
- - - -
- (NSDate *_Nullable)dateForQuery:(NSString *)query, ...
- - - -
-

Parameters

- - - - - - - - - - - - -
query

The SQL query to be performed.

...

A list of parameters that will be bound to the ? placeholders in the SQL query.

-
- - - -
-

Return Value

-

NSDate value.

-
- - - - - -
-

Discussion

-

Return NSDate value for query

Note: This is not available from Swift.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
-
- - - -

Schema related operations

- -
-
- -

– tableExists: -

- -
-
- -
- - -
-

Does table exist in database?

-
- - - -
- (BOOL)tableExists:(NSString *)tableName
- - - -
-

Parameters

- - - - - - - -
tableName

The name of the table being looked for.

-
- - - -
-

Return Value

-

YES if table found; NO if not found.

-
- - - - - -
-

Discussion

-

Does table exist in database?

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– getSchema -

- -
-
- -
- - -
-

The schema of the database.

-
- - - -
- (FMResultSet *)getSchema
- - - - - -
-

Return Value

-

FMResultSet of schema; nil on error.

-
- - - - - -
-

Discussion

-

The schema of the database.

- -

This will be the schema for the entire database. For each entity, each row of the result set will include the following fields:

- -
    -
  • type - The type of entity (e.g. table, index, view, or trigger)
  • -
  • name - The name of the object
  • -
  • tbl_name - The name of the table to which the object references
  • -
  • rootpage - The page number of the root b-tree page for tables and indices
  • -
  • sql - The SQL that created the entity
  • -
- -
- - - - - -
-

See Also

- -
- - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– getTableSchema: -

- -
-
- -
- - -
-

The schema of the database.

-
- - - -
- (FMResultSet *)getTableSchema:(NSString *)tableName
- - - -
-

Parameters

- - - - - - - -
tableName

The name of the table for whom the schema will be returned.

-
- - - -
-

Return Value

-

FMResultSet of schema; nil on error.

-
- - - - - -
-

Discussion

-

The schema of the database.

- -

This will be the schema for a particular table as report by SQLite PRAGMA, for example:

- -
PRAGMA table_info('employees')
-
- -

This will report:

- -
    -
  • cid - The column ID number
  • -
  • name - The name of the column
  • -
  • type - The data type specified for the column
  • -
  • notnull - whether the field is defined as NOT NULL (i.e. values required)
  • -
  • dflt_value - The default value for the column
  • -
  • pk - Whether the field is part of the primary key of the table
  • -
- -
- - - - - -
-

See Also

- -
- - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– columnExists:inTableWithName: -

- -
-
- -
- - -
-

Test to see if particular column exists for particular table in database

-
- - - -
- (BOOL)columnExists:(NSString *)columnName inTableWithName:(NSString *)tableName
- - - -
-

Parameters

- - - - - - - - - - - - -
columnName

The name of the column.

tableName

The name of the table.

-
- - - -
-

Return Value

-

YES if column exists in table in question; NO otherwise.

-
- - - - - -
-

Discussion

-

Test to see if particular column exists for particular table in database

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– columnExists:columnName: -

- -
-
- -
- - -
-

Test to see if particular column exists for particular table in database

-
- - - -
- (BOOL)columnExists:(NSString *)tableName columnName:(NSString *)columnName
- - - -
-

Parameters

- - - - - - - - - - - - -
tableName

The name of the table.

columnName

The name of the column.

-
- - - -
-

Return Value

-

YES if column exists in table in question; NO otherwise.

-
- - - - - -
-

Discussion

-

Test to see if particular column exists for particular table in database

Warning: Deprecated - use columnExists:inTableWithName: instead.

-
- - - - - -
-

See Also

- -
- - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

– validateSQL:error: -

- -
-
- -
- - -
-

Validate SQL statement

-
- - - -
- (BOOL)validateSQL:(NSString *)sql error:(NSError *_Nullable *)error
- - - -
-

Parameters

- - - - - - - - - - - - -
sql

The SQL statement being validated.

error

This is a pointer to a NSError object that will receive the autoreleased NSError object if there was any error. If this is nil, no NSError result will be returned.

-
- - - -
-

Return Value

-

YES if validation succeeded without incident; NO otherwise.

-
- - - - - -
-

Discussion

-

Validate SQL statement

- -

This validates SQL statement by performing sqlite3_prepare_v2, but not returning the results, but instead immediately calling sqlite3_finalize.

-
- - - - - - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
-
- - - -

Application identifier tasks

- -
-
- -

  applicationID -

- -
-
- -
- - -
-

Retrieve application ID

-
- - - -
@property (nonatomic) uint32_t applicationID
- - - - - -
-

Return Value

-

The uint32_t numeric value of the application ID.

-
- - - - - -
-

Discussion

-

Retrieve application ID

-
- - - - - -
-

See Also

- -
- - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
- -

  applicationIDString -

- -
-
- -
- - -
-

Retrieve application ID string

-
- - - -
@property (nonatomic, retain) NSString *applicationIDString
- - - - - - - - - -
-

Discussion

-

Retrieve application ID string

-
- - - - - -
-

See Also

- -
- - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
-
- - - -

user version identifier tasks

- -
-
- -

  userVersion -

- -
-
- -
- - -
-

Retrieve user version

-
- - - -
@property (nonatomic) uint32_t userVersion
- - - - - - - - - -
-

Discussion

-

Retrieve user version

-
- - - - - -
-

See Also

- -
- - - -
-

Declared In

-

FMDatabaseAdditions.h

-
- - -
-
-
-
- -
- - - - - - -
- - -
-
-
- - - - \ No newline at end of file diff --git a/html/Categories/NSObject(FMDatabasePoolDelegate).html b/html/Categories/NSObject(FMDatabasePoolDelegate).html new file mode 100644 index 00000000..5b3fe74d --- /dev/null +++ b/html/Categories/NSObject(FMDatabasePoolDelegate).html @@ -0,0 +1,253 @@ + + + + NSObject(FMDatabasePoolDelegate) Category Reference + + + + + + + + + + +
+
+

FMDB 2.7.7 Docs (89% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

NSObject(FMDatabasePoolDelegate)

+
+
+
@interface NSObject (FMDatabasePoolDelegate)
+ +
+
+

FMDatabasePool delegate category

+ +

This is a category that defines the protocol for the FMDatabasePool delegate

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Asks the delegate whether database should be added to the pool.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)databasePool:(nonnull FMDatabasePool *)pool
    +    shouldAddDatabaseToPool:(nonnull FMDatabase *)database;
    + +
    +
    +

    Swift

    +
    func databasePool(_ pool: FMDatabasePool, shouldAddDatabaseToPool database: FMDatabase) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + pool + + +
    +

    The FMDatabasePool object.

    +
    +
    + + database + + +
    +

    The FMDatabase object.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if it should add database to pool; NO if not.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Tells the delegate that database was added to the pool.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)databasePool:(nonnull FMDatabasePool *)pool
    +      didAddDatabase:(nonnull FMDatabase *)database;
    + +
    +
    +

    Swift

    +
    func databasePool(_ pool: FMDatabasePool, didAdd database: FMDatabase)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + pool + + +
    +

    The FMDatabasePool object.

    +
    +
    + + database + + +
    +

    The FMDatabase object.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/html/Categories/NSObject+FMDatabasePoolDelegate.html b/html/Categories/NSObject+FMDatabasePoolDelegate.html deleted file mode 100644 index b6184c45..00000000 --- a/html/Categories/NSObject+FMDatabasePoolDelegate.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - NSObject(FMDatabasePoolDelegate) Category Reference - - - - - - -
-
- -

- FMDB -

- -

- ccgus -

- -
-
- - - -
-
-
-
-

NSObject(FMDatabasePoolDelegate) Category Reference

- - -
- - - - -
Declared inFMDatabasePool.h
- - - - -
- -

Overview

-

FMDatabasePool delegate category

- -

This is a category that defines the protocol for the FMDatabasePool delegate

-
- - - - - -
- - - - - - -
-
- -

– databasePool:shouldAddDatabaseToPool: -

- -
-
- -
- - -
-

Asks the delegate whether database should be added to the pool.

-
- - - -
- (BOOL)databasePool:(FMDatabasePool *)pool shouldAddDatabaseToPool:(FMDatabase *)database
- - - -
-

Parameters

- - - - - - - - - - - - -
pool

The FMDatabasePool object.

database

The FMDatabase object.

-
- - - -
-

Return Value

-

YES if it should add database to pool; NO if not.

-
- - - - - -
-

Discussion

-

Asks the delegate whether database should be added to the pool.

-
- - - - - - - -
-

Declared In

-

FMDatabasePool.h

-
- - -
-
-
- -

– databasePool:didAddDatabase: -

- -
-
- -
- - -
-

Tells the delegate that database was added to the pool.

-
- - - -
- (void)databasePool:(FMDatabasePool *)pool didAddDatabase:(FMDatabase *)database
- - - -
-

Parameters

- - - - - - - - - - - - -
pool

The FMDatabasePool object.

database

The FMDatabase object.

-
- - - - - - - -
-

Discussion

-

Tells the delegate that database was added to the pool.

-
- - - - - - - -
-

Declared In

-

FMDatabasePool.h

-
- - -
-
-
-
- -
- - - - - - -
- - -
-
-
- - - - \ No newline at end of file diff --git a/html/Classes.html b/html/Classes.html new file mode 100644 index 00000000..a7b81e72 --- /dev/null +++ b/html/Classes.html @@ -0,0 +1,398 @@ + + + + Classes Reference + + + + + + + + + + +
+
+

FMDB 2.7.7 Docs (89% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
    +
  • +
    + + + + FMDatabase + +
    +
    +
    +
    +
    +
    +

    A SQLite (https://sqlite.org/) Objective-C wrapper.

    + +

    Usage

    + +

    The three main classes in FMDB are:

    + +
      +
    • FMDatabase - Represents a single SQLite database. Used for executing SQL statements.

    • +
    • FMResultSet - Represents the results of executing a query on an FMDatabase .

    • +
    • FMDatabaseQueue - If you want to perform queries and updates on multiple threads, you’ll want to use this class.

    • +
    + +

    See also

    + + + +

    External links

    + +
    +

    Warning

    +

    Do not instantiate a single FMDatabase object and use it across multiple threads. Instead, use FMDatabaseQueue .

    + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @interface FMDatabase : NSObject
    + +
    +
    +

    Swift

    +
    class FMDatabase : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FMStatement + +
    +
    +
    +
    +
    +
    +

    Objective-C wrapper for sqlite3_stmt

    + +

    This is a wrapper for a SQLite sqlite3_stmt . Generally when using FMDB you will not need to interact directly with FMStatement, but rather with FMDatabase and FMResultSet only.

    + +

    See also

    + + + + See more +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @interface FMStatement : NSObject {
    +  void *_statement;
    +  NSString *_query;
    +  long _useCount;
    +  BOOL _inUse;
    +}
    + +
    +
    +

    Swift

    +
    class FMStatement : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FMDatabasePool + +
    +
    +
    +
    +
    +
    +

    Pool of FMDatabase objects.

    + +

    See also

    + +
    +

    Warning

    +

    Before using FMDatabasePool , please consider using FMDatabaseQueue instead.

    + +
    + +

    If you really really really know what you’re doing and 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!

    + +

    For an example on deadlocking, search for: + ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD + in the main.m file.

    + + See more +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @interface FMDatabasePool : NSObject
    + +
    +
    +

    Swift

    +
    class FMDatabasePool : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FMDatabaseQueue + +
    +
    +
    +
    +
    +
    +

    To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue .

    + +

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time.

    + +

    Instead, use FMDatabaseQueue . Here’s how to use it:

    + +

    First, make your queue.

    +
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
    +
    + +

    Then use it like so:

    +
    [queue inDatabase:^(FMDatabase *db) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    +
    +    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    +    while ([rs next]) {
    +        //…
    +    }
    +}];
    +
    + +

    An easy way to wrap things up in a transaction can be done like this:

    +
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    +
    +    // if (whoopsSomethingWrongHappened) {
    +    //     *rollback = YES;
    +    //     return;
    +    // }
    +
    +    // etc…
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    +}];
    +
    + +

    FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue ‘s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

    +
    +

    Warning

    +

    Do not instantiate a single FMDatabase object and use it across multiple threads. Use FMDatabaseQueue instead.

    + +
    +

    Warning

    +

    The calls to FMDatabaseQueue ’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

    + +
    + +

    @sa FMDatabase

    + + See more +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @interface FMDatabaseQueue : NSObject
    + +
    +
    +

    Swift

    +
    class FMDatabaseQueue : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + FMResultSet + +
    +
    +
    +
    +
    +
    +

    Represents the results of executing a query on an FMDatabase .

    + +

    See also

    + + + + See more +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @interface FMResultSet : NSObject
    + +
    +
    +

    Swift

    +
    class FMResultSet : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/html/Classes/FMDatabase.html b/html/Classes/FMDatabase.html index 0d4324c9..f52eb9a4 100644 --- a/html/Classes/FMDatabase.html +++ b/html/Classes/FMDatabase.html @@ -1,6110 +1,6978 @@ - - - - - FMDatabase Class Reference - - - - - - -
-
- -

- FMDB -

- -

- ccgus -

- -
-
- - - -
-
-
-
-

FMDatabase Class Reference

- - -
- - - - - - - -
Inherits fromNSObject
Declared inFMDatabase.h
- - - - -
- -

Overview

-

A SQLite (http://sqlite.org/) Objective-C wrapper.

- -

Usage

+ + + FMDatabase Class Reference + + + + + + + + + + +
+
+

FMDB 2.7.7 Docs (89% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

FMDatabase

+
+
+
@interface FMDatabase : NSObject
+ +
+
+

A SQLite (https://sqlite.org/) Objective-C wrapper.

+ +

Usage

The three main classes in FMDB are:

    -
  • FMDatabase - Represents a single SQLite database. Used for executing SQL statements.
  • -
  • FMResultSet - Represents the results of executing a query on an FMDatabase.
  • -
  • FMDatabaseQueue - If you want to perform queries and updates on multiple threads, you’ll want to use this class.
  • +
  • FMDatabase - Represents a single SQLite database. Used for executing SQL statements.

  • +
  • FMResultSet - Represents the results of executing a query on an FMDatabase .

  • +
  • FMDatabaseQueue - If you want to perform queries and updates on multiple threads, you’ll want to use this class.

- -

See also

+

See also

- -

External links

+

External links

-

Warning: Do not instantiate a single FMDatabase object and use it across multiple threads. Instead, use FMDatabaseQueue.

-
- - - - - -
- - - - -

Properties

- -
-
- -

  traceExecution -

+
  • SQLite FAQ

  • +
    +

    Warning

    +

    Do not instantiate a single FMDatabase object and use it across multiple threads. Instead, use FMDatabaseQueue .

    -
    -
    - -
    - - -
    -

    Whether should trace execution

    -
    - - - -
    @property (atomic, assign) BOOL traceExecution
    - - - - - - - - - -
    -

    Discussion

    -

    Whether should trace execution

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Whether checked out or not

    -
    - - - -
    @property (atomic, assign) BOOL checkedOut
    - - - - - - - - - -
    -

    Discussion

    -

    Whether checked out or not

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

      crashOnErrors + +
    +
    +
    + + +
    + +

    Properties

    - -
    -
    - -
    - - -
    -

    Crash on errors

    -
    - - - -
    @property (atomic, assign) BOOL crashOnErrors
    - - - - - - - - - -
    -

    Discussion

    -

    Crash on errors

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +
      +
    • +
      + + + + traceExecution + +
      +
      +
      +
      +
      +
      +

      Whether should trace execution

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL traceExecution;
      + +
      +
      +

      Swift

      +
      var traceExecution: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + checkedOut + +
      +
      +
      +
      +
      +
      +

      Whether checked out or not

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL checkedOut;
      + +
      +
      +

      Swift

      +
      var checkedOut: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + crashOnErrors + +
      +
      +
      +
      +
      +
      +

      Crash on errors

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL crashOnErrors;
      + +
      +
      +

      Swift

      +
      var crashOnErrors: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + logsErrors + +
      +
      +
      +
      +
      +
      +

      Logs errors

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL logsErrors;
      + +
      +
      +

      Swift

      +
      var logsErrors: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + cachedStatements + +
      +
      +
      +
      +
      +
      +

      Dictionary of cached statements

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) NSMutableDictionary *cachedStatements;
      + +
      +
      +

      Swift

      +
      var cachedStatements: NSMutableDictionary? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Initialization

    +
    +
    +
      +
    • +
      + + + + +databaseWithPath: + +
      +
      +
      +
      +
      +
      +

      Create a FMDatabase object.

      + +

      An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

      -
      -
      - -
      - - -
      -

      Logs errors

      -
      - - - -
      @property (atomic, assign) BOOL logsErrors
      - - - - - - - - - -
      -

      Discussion

      -

      Logs errors

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - -

        cachedStatements -

      - -
      -
      - -
      - - -
      -

      Dictionary of cached statements

      -
      - - - -
      @property (atomic, retain, nullable) NSMutableDictionary *cachedStatements
      - - - - - - - - - -
      -

      Discussion

      -

      Dictionary of cached statements

      -
      - - - +
        +
      1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.

      2. +
      3. An zero-length string. An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.

      4. +
      5. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

      6. +
      - +

      For example, to open a database in the app’s “Application Support” directory:

      +
      NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
      +NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
      +FMDatabase *db = [FMDatabase databaseWithPath:fileURL.path];
      +
      - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      - +

      (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

      + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    + (nonnull instancetype)databaseWithPath:(NSString *_Nullable)inPath;
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + inPath + + +
    +

    Path of database file

    +
    +
    +
    +
    +

    Return Value

    +

    FMDatabase object if successful; nil if failure.

    +
    +
    +

    + +
  • +
    + + + + +databaseWithURL: + +
    +
    +
    +
    +
    +
    +

    Create a FMDatabase object.

    + +

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

    - -

    Initialization

    +
      +
    1. A file system URL. The file does not have to exist on disk. If it does not exist, it is created for you.

    2. +
    3. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

    4. +
    -
    -
    - -

    + databaseWithPath: -

    +

    For example, to open a database in the app’s “Application Support” directory:

    +
    NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
    +NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
    +FMDatabase *db = [FMDatabase databaseWithURL:fileURL];
    +
    -
    -
    - -
    - - -
    -

    Create a FMDatabase object.

    -
    - - - -
    + (instancetype)databaseWithPath:(NSString *_Nullable)inPath
    - - - -
    -

    Parameters

    - - - - - - - -
    inPath

    Path of database file

    -
    - - - -
    -

    Return Value

    -

    FMDatabase object if successful; nil if failure.

    -
    - - - - - -
    -

    Discussion

    -

    Create a FMDatabase object.

    - -

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

    +

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    + (nonnull instancetype)databaseWithURL:(NSURL *_Nullable)url;
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + url + + +
    +

    The local file URL (not remote URL) of database file

    +
    +
    +
    +
    +

    Return Value

    +

    FMDatabase object if successful; nil if failure.

    +
    +
    +
    +
  • +
  • +
    + + + + -initWithPath: + +
    +
    +
    +
    +
    +
    +

    Initialize a FMDatabase object.

    + +

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

      -
    1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.
    2. -
    3. An empty string (@""). An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.
    4. -
    5. nil. An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.
    6. +
    7. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.

    8. +
    9. A zero-length string. An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.

    10. +
    11. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

    - -

    For example, to create/open a database in your Mac OS X tmp folder:

    - -
    FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
    +

    For example, to open a database in the app’s “Application Support” directory:

    +
     NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
    + NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
    + FMDatabase *db = [[FMDatabase alloc] initWithPath:fileURL.path];
     
    -

    Or, in iOS, you might open a database in the app’s Documents directory:

    +

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (nonnull instancetype)initWithPath:(NSString *_Nullable)path;
    + +
    +
    +

    Swift

    +
    init(path: String?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + path + + +
    +

    Path of database file.

    +
    +
    +
    +
    +

    Return Value

    +

    FMDatabase object if successful; nil if failure.

    +
    +
    +
    +
  • +
  • +
    + + + + -initWithURL: + +
    +
    +
    +
    +
    +
    +

    Initialize a FMDatabase object.

    + +

    An FMDatabase is created with a local file URL to a SQLite database file. This path can be one of these three:

    -
    NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    -NSString *dbPath   = [docsPath stringByAppendingPathComponent:@"test.db"];
    -FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];
    +
      +
    1. A file system URL. The file does not have to exist on disk. If it does not exist, it is created for you.

    2. +
    3. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

    4. +
    + +

    For example, to open a database in the app’s “Application Support” directory:

    +
     NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
    + NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
    + FMDatabase *db = [[FMDatabase alloc] initWithURL:fileURL];
     
    -

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
  • -
    - -

    + databaseWithURL: +

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

    + +

    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url;
    + +
    +
    +

    Swift

    +
    init(url: URL?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + url + + +
    +

    The file NSURL of database file.

    +
    +
    +
    +
    +

    Return Value

    +

    FMDatabase object if successful; nil if failure.

    +
    + +
    + + +
    +
    +
    + + +
    + +

    Opening and closing database

    +
    +
    +
      +
    • +
      + + + + isOpen + +
      +
      +
      +
      +
      +
      +

      Is the database open or not?

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) BOOL isOpen;
      + +
      +
      +

      Swift

      +
      var isOpen: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -open + +
      +
      +
      +
      +
      +
      +

      Opening a new database connection

      -
      -
      - -
      - - -
      -

      Create a FMDatabase object.

      -
      - - - -
      + (instancetype)databaseWithURL:(NSURL *_Nullable)url
      - - - -
      -

      Parameters

      - - - - - - - -
      url

      The local file URL (not remote URL) of database file

      -
      - - - -
      -

      Return Value

      -

      FMDatabase object if successful; nil if failure.

      -
      - - - - - -
      -

      Discussion

      -

      Create a FMDatabase object.

      - -

      An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

      +

      The database is opened for reading and writing, and is created if it does not already exist.

      +
      +

      See

      +

      sqlite3_open()

      -
        -
      1. A file system URL. The file does not have to exist on disk. If it does not exist, it is created for you.
      2. -
      3. nil. An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.
      4. -
      +
      +

      See

      +

      openWithFlags:

      +
      +

      See

      +

      close

      -

      For example, to create/open a database in your Mac OS X tmp folder:

      +
      -
      FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
      +                      
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)open;
      + +
      +
      +

      Swift

      +
      func open() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if successful, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -openWithFlags: + +
      +
      +
      +
      +
      +
      +

      Opening a new database connection with flags and an optional virtual file system (VFS)

      +
      SQLITE_OPEN_READONLY
       
      -

      Or, in iOS, you might open a database in the app’s Documents directory:

      +

      The database is opened in read-only mode. If the database does not already exist, an error is returned.

      +
      SQLITE_OPEN_READWRITE
      +
      -
      NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
      -NSString *dbPath   = [docsPath stringByAppendingPathComponent:@"test.db"];
      -FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];
      +

      The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.

      +
      SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
       
      -

      (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
    -
    - -

    – initWithPath: -

    +

    The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for open method.

    +
    +

    See

    +

    sqlite3_open_v2()

    -
    -
    - -
    - - -
    -

    Initialize a FMDatabase object.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)path
    - - - -
    -

    Parameters

    - - - - - - - -
    path

    Path of database file.

    -
    - - - -
    -

    Return Value

    -

    FMDatabase object if successful; nil if failure.

    -
    - - - - - -
    -

    Discussion

    -

    Initialize a FMDatabase object.

    - -

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

    - -
      -
    1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.
    2. -
    3. An empty string (@""). An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.
    4. -
    5. nil. An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.
    6. -
    +
    +

    See

    +

    open

    +
    +

    See

    +

    close

    -

    For example, to create/open a database in your Mac OS X tmp folder:

    +
    -
    FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
    +                      
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)openWithFlags:(int)flags;
    + +
    +
    +

    Swift

    +
    func open(withFlags flags: Int32) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + flags + + +
    +

    One of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX , SQLITE_OPEN_FULLMUTEX , SQLITE_OPEN_SHAREDCACHE , SQLITE_OPEN_PRIVATECACHE , and/or SQLITE_OPEN_URI flags:

    +
    +
    +
    +
    +

    Return Value

    +

    YES if successful, NO on error.

    +
    + +
    + +
  • +
    + + + + -openWithFlags:vfs: + +
    +
    +
    +
    +
    +
    +

    Opening a new database connection with flags and an optional virtual file system (VFS)

    +
    SQLITE_OPEN_READONLY
     
    -

    Or, in iOS, you might open a database in the app’s Documents directory:

    +

    The database is opened in read-only mode. If the database does not already exist, an error is returned.

    +
    SQLITE_OPEN_READWRITE
    +
    -
    NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    -NSString *dbPath   = [docsPath stringByAppendingPathComponent:@"test.db"];
    -FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];
    +

    The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.

    +
    SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
     
    -

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
  • -
    - -

    – initWithURL: -

    +

    The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for open method.

    +
    +

    See

    +

    sqlite3_open_v2()

    -
    -
    - -
    - - -
    -

    Initialize a FMDatabase object.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url
    - - - -
    -

    Parameters

    - - - - - - - -
    url

    The file NSURL of database file.

    -
    - - - -
    -

    Return Value

    -

    FMDatabase object if successful; nil if failure.

    -
    - - - - - -
    -

    Discussion

    -

    Initialize a FMDatabase object.

    - -

    An FMDatabase is created with a local file URL to a SQLite database file. This path can be one of these three:

    +
    +

    See

    +

    open

    -
      -
    1. A file system URL. The file does not have to exist on disk. If it does not exist, it is created for you.
    2. -
    3. nil. An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.
    4. -
    +
    +

    See

    +

    close

    +
    -

    For example, to create/open a database in your Mac OS X tmp folder:

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)openWithFlags:(int)flags vfs:(NSString *_Nullable)vfsName;
    + +
    +
    +

    Swift

    +
    func open(withFlags flags: Int32, vfs vfsName: String?) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + flags + + +
    +

    One of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX , SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE, SQLITE_OPEN_PRIVATECACHE , and/or SQLITE_OPEN_URI flags:

    +
    +
    + + vfsName + + +
    +

    If vfs is given the value is passed to the vfs parameter of sqlite3_open_v2.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if successful, NO on error.

    +
    + +
    + +
  • +
    + + + + -close + +
    +
    +
    +
    +
    +
    +

    Closing a database connection

    +
    +

    See

    +

    sqlite3_close()

    + +
    +

    See

    +

    open

    + +
    +

    See

    +

    openWithFlags:

    -

    FMDatabase *db = [FMDatabase databaseWithPath:@“/tmp/tmp.db”];

    +
    -

    Or, in iOS, you might open a database in the app’s Documents directory:

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)close;
    + +
    +
    +

    Swift

    +
    func close() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES if success, NO on error.

    +
    +
    +
    +
  • +
  • +
    + + + + goodConnection + +
    +
    +
    +
    +
    +
    +

    Test to see if we have a good connection to the database.

    -

    NSString docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; -NSString dbPath = [docsPath stringByAppendingPathComponent:@“test.db”]; -FMDatabase *db = [FMDatabase databaseWithPath:dbPath];

    +

    This will confirm whether:

    -

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)

    -
    - +
      +
    • is database open

    • +
    • if open, it will try a simple SELECT statement and confirm that it succeeds.

    • +
    - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @property (nonatomic, readonly) BOOL goodConnection;
    + +
    +
    +

    Swift

    +
    var goodConnection: Bool { get }
    + +
    +
    +
    +

    Return Value

    +

    YES if everything succeeds, NO on failure.

    +
    + +
  • + + +
    +
    +
    + + +
    + +

    Perform updates

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2, sqlite3_bind to bind values to ? placeholders in the SQL with the optional list of parameters, and sqlite_step to perform the update.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      +

      See

      +

      sqlite3_bind

      - +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql
      +    withErrorAndBindings:(NSError *_Nullable *_Nullable)outErr, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders. This can be followed by iptional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString , NSNumber , etc.), not fundamental C data types (e.g. int , etc.).

      +
      +
      + + outErr + + +
      +

      A reference to the NSError pointer to be updated with an auto released NSError object if an error if an error occurs. If nil , no NSError object will be returned.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use executeUpdate:withErrorAndBindings: instead

      + +
      +
      +

      Execute single update statement

      +
      +

      See

      +

      executeUpdate:withErrorAndBindings:

      + +
      +

      Warning

      +

      Deprecated: Please use <executeUpdate:withErrorAndBindings> instead.

      - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
    - - -

    Opening and closing database

    + +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)update:(nonnull NSString *)sql
    +    withErrorAndBindings:(NSError *_Nullable *_Nullable)outErr, ...;
    + +
    +
    + + + +
  • +
    + + + + -executeUpdate: + +
    +
    +
    +
    +
    +
    +

    Execute single update statement

    + +

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2, sqlite3_bind to bind values to ? placeholders in the SQL with the optional list of parameters, and sqlite_step to perform the update.

    + +

    The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    +
    +

    See

    +

    lastError

    + +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    + +
    +

    See

    +

    sqlite3_bind

    + +
    +

    Note

    +

    This technique supports the use of ? placeholders in the SQL, automatically binding any supplied value parameters to those placeholders. This approach is more robust than techniques that entail using stringWithFormat to manually build SQL statements, which can be problematic if the values happened to include any characters that needed to be quoted.

    + +
    +

    Note

    +

    You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using <executeUpdate:values:> instead.

    -
    -
    - -

    – open -

    +
    -
    -
    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeUpdate:(nonnull NSString *)sql, ...;
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed, with optional ? placeholders, followed by optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString , NSNumber , etc.), not fundamental C data types (e.g. int , etc.).

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Execute single update statement

    + +

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL. Do not use ? placeholders in the SQL if you use this method.

    +
    +

    See

    +

    executeUpdate:

    + +
    +

    See

    +

    lastError

    + +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    + +
    +

    Note

    +

    This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite ? placeholder, and then bind values to that placeholder. Thus the following command

    -
    - - -
    -

    Opening a new database connection

    -
    - - +
    +
    [db executeUpdateWithFormat:@"INSERT INTO test (name) VALUES (%@)", @"Gus"];
    +
    -
    - (BOOL)open
    +

    is actually replacing the %@ with ? placeholder, and then performing something equivalent to <executeUpdate:>

    +
    [db executeUpdate:@"INSERT INTO test (name) VALUES (?)", @"Gus"];
    +
    - - +

    There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite ? placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with pragma statements and the like. Second, note the lack of quotation marks in the SQL. The VALUES clause was not VALUES ('%@') (like you might have to do if you built a SQL statement using NSString method stringWithFormat ), but rather simply VALUES (%@).

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeUpdateWithFormat:(nonnull NSString *)format, ...;
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + format + + +
    +

    The SQL to be performed, with printf-style escape sequences, followed by optional parameters to bind to use in conjunction with the printf-style escape sequences in the SQL statement.

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Execute single update statement

    + +

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite3_bind binding any ? placeholders in the SQL with the optional list of parameters.

    + +

    The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    +
    +

    See

    +

    executeUpdate:values:error:

    + +
    +

    See

    +

    lastError

    + +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    - -
    -

    Return Value

    -

    YES if successful, NO on error.

    -
    - +
    - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeUpdate:(nonnull NSString *)sql
    +    withArgumentsInArray:(nonnull NSArray *)arguments;
    + +
    +
    +

    Swift

    +
    func executeUpdate(_ sql: String, withArgumentsIn arguments: [Any]) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed, with optional ? placeholders.

    +
    +
    + + arguments + + +
    +

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Execute single update statement

    + +

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite3_bind binding any ? placeholders in the SQL with the optional list of parameters.

    + +

    The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    + +

    This is similar to executeUpdate:withArgumentsInArray: , except that this also accepts a pointer to a NSError pointer, so that errors can be returned.

    - -
    -

    Discussion

    -

    Opening a new database connection

    +

    In Swift, this throws errors, as if it were defined as follows:

    +
    func executeUpdate(sql: String, values: [Any]?) throws -> Bool { }
    +
    +
    +

    See

    +

    lastError

    -

    The database is opened for reading and writing, and is created if it does not already exist.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +

    See

    +

    lastErrorCode

    -
    -
    +
    +

    See

    +

    lastErrorMessage

    -
    - - -
    -

    Opening a new database connection with flags and an optional virtual file system (VFS)

    -
    - - +
    -
    - (BOOL)openWithFlags:(int)flags
    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeUpdate:(nonnull NSString *)sql
    +               values:(NSArray *_Nullable)values
    +                error:(NSError *_Nullable *_Nullable)error;
    + +
    +
    +

    Swift

    +
    func executeUpdate(_ sql: String, values: [Any]?) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed, with optional ? placeholders.

    +
    +
    + + values + + +
    +

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    +
    +
    + + error + + +
    +

    A NSError object to receive any error object (if any).

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Execute single update statement

    + +

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL.

    + +

    The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    +
    +

    See

    +

    lastError

    + +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    - - -
    -

    Parameters

    - - - - - - - -
    flags

    one of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX, SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE, SQLITE_OPEN_PRIVATECACHE, and/or SQLITE_OPEN_URI flags:

    + -

    SQLITE_OPEN_READONLY

    + +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeUpdate:(nonnull NSString *)sql
    +    withParameterDictionary:(nonnull NSDictionary *)arguments;
    + +
    +
    +

    Swift

    +
    func executeUpdate(_ sql: String, withParameterDictionary arguments: [AnyHashable : Any]) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed, with optional ? placeholders.

    +
    +
    + + arguments + + +
    +

    A NSDictionary of objects keyed by column names that will be used when binding values to the ? placeholders in the SQL statement.

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + + + +
  • + +
    +
    +
    +
    +
    +

    Execute single update statement

    + +

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL.

    + +

    The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    +
    +

    See

    +

    lastError

    + +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    -

    The database is opened in read-only mode. If the database does not already exist, an error is returned.

    +
    -

    SQLITE_OPEN_READWRITE

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeUpdate:(nonnull NSString *)sql
    +           withVAList:(struct __va_list_tag *)args;
    + +
    +
    +

    Swift

    +
    func executeUpdate(_ sql: String, withVAList args: CVaListPointer) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed, with optional ? placeholders.

    +
    +
    + + args + + +
    +

    A va_list of arguments.

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • +
    + + + + -executeStatements: + +
    +
    +
    +
    +
    +
    +

    Execute multiple SQL statements

    + +

    This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the sqlite3 command line .dump command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses sqlite3_exec .

    +
    +

    See

    +

    executeStatements:withResultBlock:

    + +
    +

    See

    +

    sqlite3_exec()

    -

    The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.

    +
    -

    SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE

    - -

    The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for open method.

  • -
    - - - -
    -

    Return Value

    -

    YES if successful, NO on error.

    -
    - - - - - -
    -

    Discussion

    -

    Opening a new database connection with flags and an optional virtual file system (VFS)

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeStatements:(nonnull NSString *)sql;
    + +
    +
    +

    Swift

    +
    func executeStatements(_ sql: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + + +
  • +
  • + +
    +
    +
    +
    +
    +

    Execute multiple SQL statements with callback handler

    -
    -
    +

    This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the sqlite3 command line .dump command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses sqlite3_exec.

    +
    +

    See

    +

    executeStatements:

    -
    - - -
    -

    Opening a new database connection with flags and an optional virtual file system (VFS)

    -
    - - +
    +

    See

    +

    sqlite3_exec()

    -
    - (BOOL)openWithFlags:(int)flags vfs:(NSString *_Nullable)vfsName
    +
    - - -
    -

    Parameters

    - - - - - - - - - - - - -
    flags

    one of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX, SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE, SQLITE_OPEN_PRIVATECACHE, and/or SQLITE_OPEN_URI flags:

    + +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)executeStatements:(nonnull NSString *)sql
    +          withResultBlock:(FMDBExecuteStatementsCallbackBlock _Nullable)block;
    + +
    +
    +

    Swift

    +
    func executeStatements(_ sql: String, withResultBlock block: (([AnyHashable : Any]) -> Int32)? = nil) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + sql + + +
    +

    The SQL to be performed.

    +
    +
    + + block + + +
    +

    A block that will be called for any result sets returned by any SQL statements. + Note, if you supply this block, it must return integer value, zero upon success (this would be a good opportunity to use SQLITE_OK ), + non-zero value upon failure (which will stop the bulk execution of the SQL). If a statement returns values, the block will be called with the results from the query in NSDictionary *resultsDictionary. + This may be nil if you don’t care to receive any results.

    +
    +
    +
    +
    +

    Return Value

    +

    YES upon success; NO upon failure. If failed, you can call lastError , + lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + + + +
  • +
    + + + + lastInsertRowId + +
    +
    +
    +
    +
    +
    +

    Last insert rowid

    -

    SQLITE_OPEN_READONLY

    +

    Each entry in an SQLite table has a unique 64-bit signed integer key called the “rowid”. The rowid is always available as an undeclared column named ROWID, OID, or _ROWID_ as long as those names are not also used by explicitly declared columns. If the table has a column of type INTEGER PRIMARY KEY then that column is another alias for the rowid.

    -

    The database is opened in read-only mode. If the database does not already exist, an error is returned.

    +

    This routine returns the rowid of the most recent successful INSERT into the database from the database connection in the first argument. As of SQLite version 3.7.7, this routines records the last insert rowid of both ordinary tables and virtual tables. If no successful INSERT statements have ever occurred on that database connection, zero is returned.

    +
    +

    See

    +

    sqlite3_last_insert_rowid()

    -

    SQLITE_OPEN_READWRITE

    +
    -

    The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @property (nonatomic, readonly) int64_t lastInsertRowId;
    + +
    +
    +

    Swift

    +
    var lastInsertRowId: Int64 { get }
    + +
    +
    +
    +

    Return Value

    +

    The rowid of the last inserted row.

    +
    +
    +
    +
  • +
  • +
    + + + + changes + +
    +
    +
    +
    +
    +
    +

    The number of rows changed by prior SQL statement.

    + +

    This function returns the number of database rows that were changed or inserted or deleted by the most recently completed SQL statement on the database connection specified by the first parameter. Only changes that are directly specified by the INSERT , UPDATE , or DELETE statement are counted.

    +
    +

    See

    +

    sqlite3_changes()

    -

    SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE

    - -

    The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for open method.

  • vfsName

    If vfs is given the value is passed to the vfs parameter of sqlite3_open_v2.

    -
    - - - -
    -

    Return Value

    -

    YES if successful, NO on error.

    -
    - - - - - -
    -

    Discussion

    -

    Opening a new database connection with flags and an optional virtual file system (VFS)

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

    – close -

    +
    -
    -
    - -
    - - -
    -

    Closing a database connection

    -
    - - - -
    - (BOOL)close
    - - - - - -
    -

    Return Value

    -

    YES if success, NO on error.

    -
    - - - - - -
    -

    Discussion

    -

    Closing a database connection

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @property (nonatomic, readonly) int changes;
    + +
    +
    +

    Swift

    +
    var changes: Int32 { get }
    + +
    +
    +
    +

    Return Value

    +

    The number of rows changed by prior SQL statement.

    +
    + + +
  • + + +
    +
    + + +
    + +

    Retrieving results

    +
    +
    +
      +
    • +
      + + + + -executeQuery: + +
      +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      + +

      This method employs sqlite3_bind for any optional value parameters. This properly escapes any characters that need escape sequences (e.g. quotation marks), which eliminates simple SQL errors as well as protects against SQL injection attacks. This method natively handles NSString , NSNumber , NSNull , NSDate , and NSData objects. All other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      +

      See

      +

      sqlite3_bind

      + +
      +

      Note

      +

      You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using <executeQuery:values:> instead.

      -
      -
      - -
      - - -
      -

      Test to see if we have a good connection to the database.

      -
      - - +
      -
      @property (nonatomic, readonly) BOOL goodConnection
      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + sql + + +
      +

      The SELECT statement to be performed, with optional ? placeholders, followed by optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString , NSNumber , etc.), not fundamental C data types (e.g. int , etc.).

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      +
      +

      See

      +

      executeQuery:

      + +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      +

      Note

      +

      This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite ? placeholder, and then bind values to that placeholder. Thus the following command

      - - +
      +
      [db executeQueryWithFormat:@"SELECT * FROM test WHERE name=%@", @"Gus"];
      +
      - -
      -

      Return Value

      -

      YES if everything succeeds, NO on failure.

      -
      - +

      is actually replacing the %@ with ? placeholder, and then performing something equivalent to <executeQuery:>

      +
      [db executeQuery:@"SELECT * FROM test WHERE name=?", @"Gus"];
      +
      - +

      There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite ? placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with pragma statements and the like. Second, note the lack of quotation marks in the SQL. The WHERE clause was not WHERE name='%@' (like you might have to do if you built a SQL statement using NSString method stringWithFormat ), but rather simply WHERE name=%@.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQueryWithFormat:(nonnull NSString *)format,
      +                                                 ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + format + + +
      +

      The SQL to be performed, with printf-style escape sequences, followed by ptional parameters to bind to use in conjunction with the printf-style escape sequences in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      +
      +

      See

      +

      -executeQuery:values:error:

      + +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      - -
      -

      Discussion

      -

      Test to see if we have a good connection to the database.

      +
      -

      This will confirm whether:

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql
      +                  withArgumentsInArray:(nonnull NSArray *)arguments;
      + +
      +
      +

      Swift

      +
      func executeQuery(_ sql: String, withArgumentsIn arguments: [Any]) -> FMResultSet?
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SELECT statement to be performed, with optional ? placeholders.

      +
      +
      + + arguments + + +
      +

      A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      + +

      This is similar to <executeQuery:withArgumentsInArray:>, except that this also accepts a pointer to a NSError pointer, so that errors can be returned.

      -
        -
      • is database open
      • -
      • if open, it will try a simple SELECT statement and confirm that it succeeds.
      • -
      +

      In Swift, this throws errors, as if it were defined as follows:

      -
      - +

      func executeQuery(sql: String, values: [Any]?) throws -> FMResultSet!

      +
      +

      See

      +

      FMResultSet

      - +
      +

      See

      +

      FMResultSet next

      - +
      +

      Note

      +

      When called from Swift, only use the first two parameters, sql and values. This but throws the error.

      - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
    - - - -

    Perform updates

    + +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql
    +                                values:(NSArray *_Nullable)values
    +                                 error:(NSError *_Nullable *_Nullable)error;
    + +
    +
    +

    Swift

    +
    func executeQuery(_ sql: String, values: [Any]?) throws -> FMResultSet
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + sql + + +
    +

    The SELECT statement to be performed, with optional ? placeholders.

    +
    +
    + + values + + +
    +

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    +
    +
    + + error + + +
    +

    A NSError object to receive any error object (if any).

    +
    +
    +
    +
    +

    Return Value

    +

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + + + +
  • + +
    +
    +
    +
    +
    +

    Execute select statement

    + +

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

    + +

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

    +
    +

    See

    +

    FMResultSet

    + +
    +

    See

    +

    FMResultSet next

    -
    - -
    -
    - -
    - - -
    -

    Execute single update statement

    -
    - - - -
    - (BOOL)executeUpdate:(NSString *)sql withErrorAndBindings:(NSError *_Nullable *)outErr, ...
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    sql

    The SQL to be performed, with optional ? placeholders.

    outErr

    A reference to the NSError pointer to be updated with an auto released NSError object if an error if an error occurs. If nil, no NSError object will be returned.

    ...

    Optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString, NSNumber, etc.), not fundamental C data types (e.g. int, char *, etc.).

    -
    - - - -
    -

    Return Value

    -

    YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute single update statement

    - -

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2, sqlite3_bind to bind values to ? placeholders in the SQL with the optional list of parameters, and sqlite_step to perform the update.

    - -

    The optional values provided to this method should be objects (e.g. NSString, NSNumber, NSNull, NSDate, and NSData objects), not fundamental data types (e.g. int, long, NSInteger, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql
    +               withParameterDictionary:(NSDictionary *_Nullable)arguments;
    + +
    +
    +

    Swift

    +
    func executeQuery(_ sql: String, withParameterDictionary arguments: [AnyHashable : Any]?) -> FMResultSet?
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + sql + + +
    +

    The SELECT statement to be performed, with optional ? placeholders.

    +
    +
    + + arguments + + +
    +

    A NSDictionary of objects keyed by column names that will be used when binding values to the ? placeholders in the SQL statement.

    +
    +
    +
    +
    +

    Return Value

    +

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (FMResultSet * _Nullable)executeQuery:(NSString *)sql withVAList:(va_list)args;
    + +
    +
    +

    Swift

    +
    func executeQuery(_ sql: String, withVAList args: CVaListPointer) -> FMResultSet?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -prepare: + +
    +
    +
    +
    +
    +
    +

    Prepare SQL statement.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (nonnull FMResultSet *)prepare:(nonnull NSString *)sql;
    + +
    +
    +

    Swift

    +
    func prepare(_ sql: String) -> FMResultSet
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + sql + + +
    +

    SQL statement to prepare, generally with ? placeholders.

    +
    +
    +
    +
    +
    +
  • + + +
    +
    + + +
    + +

    Transactions

    +
    +
    +
      +
    • +
      + + + + -beginTransaction + +
      +
      +
      +
      +
      +
      +

      Begin a transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginDeferredTransaction

      + +
      +

      See

      +

      isInTransaction

      + +
      +

      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 beginExclusiveTransaction, instead, not + only to make your intent explicit, but also to future-proof your code.

      -
      -
      - -
      - - -
      -

      Execute single update statement

      -
      - - - -
      - (BOOL)update:(NSString *)sql withErrorAndBindings:(NSError *_Nullable *)outErr, ...
      - - - - - - - - - -
      -

      Discussion

      -

      Execute single update statement

      Warning: Deprecated: Please use <executeUpdate:withErrorAndBindings> instead.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Execute single update statement

      -
      - - - -
      - (BOOL)executeUpdate:(NSString *)sql, ...
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      sql

      The SQL to be performed, with optional ? placeholders.

      ...

      Optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString, NSNumber, etc.), not fundamental C data types (e.g. int, char *, etc.).

      -
      - - - -
      -

      Return Value

      -

      YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Execute single update statement

      - -

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2, sqlite3_bind to bind values to ? placeholders in the SQL with the optional list of parameters, and sqlite_step to perform the update.

      - -

      The optional values provided to this method should be objects (e.g. NSString, NSNumber, NSNull, NSDate, and NSData objects), not fundamental data types (e.g. int, long, NSInteger, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      Note: This technique supports the use of ? placeholders in the SQL, automatically binding any supplied value parameters to those placeholders. This approach is more robust than techniques that entail using stringWithFormat to manually build SQL statements, which can be problematic if the values happened to include any characters that needed to be quoted.

      Note: You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using <executeUpdate:values:> instead.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)beginTransaction;
      + +
      +
      +

      Swift

      +
      func beginTransaction() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Begin a deferred transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      isInTransaction

      -
      -
      - -
      - - -
      -

      Execute single update statement

      -
      - - - -
      - (BOOL)executeUpdateWithFormat:(NSString *)format, ...
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      format

      The SQL to be performed, with printf-style escape sequences.

      ...

      Optional parameters to bind to use in conjunction with the printf-style escape sequences in the SQL statement.

      -
      - - - -
      -

      Return Value

      -

      YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Execute single update statement

      - -

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL. Do not use ? placeholders in the SQL if you use this method.

      Note: This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite ? placeholder, and then bind values to that placeholder. Thus the following command

      - -
      [db executeUpdateWithFormat:@"INSERT INTO test (name) VALUES (%@)", @"Gus"];
      -
      +
      -

      is actually replacing the %@ with ? placeholder, and then performing something equivalent to executeUpdate:

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)beginDeferredTransaction;
      + +
      +
      +

      Swift

      +
      func beginDeferredTransaction() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Begin an immediate transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      isInTransaction

      -
      [db executeUpdate:@"INSERT INTO test (name) VALUES (?)", @"Gus"];
      -
      +
      -

      There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite ? placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with pragma statements and the like. Second, note the lack of quotation marks in the SQL. The VALUES clause was not VALUES ('%@') (like you might have to do if you built a SQL statement using NSString method stringWithFormat), but rather simply VALUES (%@).

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
    - - +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)beginImmediateTransaction;
    + +
    +
    +

    Swift

    +
    func beginImmediateTransaction() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + + + +
  • + +
    +
    +
    +
    +
    +

    Begin an exclusive transaction

    +
    +

    See

    +

    commit

    + +
    +

    See

    +

    rollback

    + +
    +

    See

    +

    beginTransaction

    + +
    +

    See

    +

    isInTransaction

    -
    -
    - -
    - - -
    -

    Execute single update statement

    -
    - - - -
    - (BOOL)executeUpdate:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sql

    The SQL to be performed, with optional ? placeholders.

    arguments

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    -
    - - - -
    -

    Return Value

    -

    YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute single update statement

    - -

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2 and sqlite3_bind binding any ? placeholders in the SQL with the optional list of parameters.

    - -

    The optional values provided to this method should be objects (e.g. NSString, NSNumber, NSNull, NSDate, and NSData objects), not fundamental data types (e.g. int, long, NSInteger, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Execute single update statement

    -
    - - - -
    - (BOOL)executeUpdate:(NSString *)sql values:(NSArray *_Nullable)values error:(NSError *_Nullable __autoreleasing *)error
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    sql

    The SQL to be performed, with optional ? placeholders.

    values

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    error

    A NSError object to receive any error object (if any).

    -
    - - - -
    -

    Return Value

    -

    YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute single update statement

    - -

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2 and sqlite3_bind binding any ? placeholders in the SQL with the optional list of parameters.

    - -

    The optional values provided to this method should be objects (e.g. NSString, NSNumber, NSNull, NSDate, and NSData objects), not fundamental data types (e.g. int, long, NSInteger, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    - -

    This is similar to executeUpdate:withArgumentsInArray:, except that this also accepts a pointer to a NSError pointer, so that errors can be returned.

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)beginExclusiveTransaction;
    + +
    +
    +

    Swift

    +
    func beginExclusiveTransaction() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • +
    + + + + -commit + +
    +
    +
    +
    +
    +
    +

    Commit a transaction

    + +

    Commit a transaction that was initiated with either <beginTransaction> or with <beginDeferredTransaction>.

    +
    +

    See

    +

    beginTransaction

    + +
    +

    See

    +

    beginDeferredTransaction

    + +
    +

    See

    +

    rollback

    + +
    +

    See

    +

    isInTransaction

    -

    In Swift, this throws errors, as if it were defined as follows:

    +
    -

    func executeUpdate(sql: String, values: [Any]?) throws -> Bool

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    - - +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)commit;
    + +
    +
    +

    Swift

    +
    func commit() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    + + +
  • +
  • +
    + + + + -rollback + +
    +
    +
    +
    +
    +
    +

    Rollback a transaction

    + +

    Rollback a transaction that was initiated with either <beginTransaction> or with <beginDeferredTransaction>.

    +
    +

    See

    +

    beginTransaction

    + +
    +

    See

    +

    beginDeferredTransaction

    + +
    +

    See

    +

    commit

    + +
    +

    See

    +

    isInTransaction

    -
    -
    - -
    - - -
    -

    Execute single update statement

    -
    - - - -
    - (BOOL)executeUpdate:(NSString *)sql withParameterDictionary:(NSDictionary *)arguments
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sql

    The SQL to be performed, with optional ? placeholders.

    arguments

    A NSDictionary of objects keyed by column names that will be used when binding values to the ? placeholders in the SQL statement.

    -
    - - - -
    -

    Return Value

    -

    YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute single update statement

    - -

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL.

    - -

    The optional values provided to this method should be objects (e.g. NSString, NSNumber, NSNull, NSDate, and NSData objects), not fundamental data types (e.g. int, long, NSInteger, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Execute single update statement

    -
    - - - -
    - (BOOL)executeUpdate:(NSString *)sql withVAList:(va_list)args
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sql

    The SQL to be performed, with optional ? placeholders.

    args

    A va_list of arguments.

    -
    - - - -
    -

    Return Value

    -

    YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute single update statement

    - -

    This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE, INSERT, or DELETE. This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL.

    - -

    The optional values provided to this method should be objects (e.g. NSString, NSNumber, NSNull, NSDate, and NSData objects), not fundamental data types (e.g. int, long, NSInteger, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)rollback;
    + +
    +
    +

    Swift

    +
    func rollback() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • +
    + + + + isInTransaction + +
    +
    +
    +
    +
    +
    +

    Identify whether currently in a transaction or not

    +
    +

    See

    + beginTransaction + +
    +

    See

    + beginDeferredTransaction + +
    +

    See

    + commit + +
    +

    See

    + rollback -
    -
    - -
    - - -
    -

    Execute multiple SQL statements

    -
    - - - -
    - (BOOL)executeStatements:(NSString *)sql
    - - - -
    -

    Parameters

    - - - - - - - -
    sql

    The SQL to be performed

    -
    - - - -
    -

    Return Value

    -

    YES upon success; NO upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute multiple SQL statements

    +
    -

    This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the sqlite3 command line .dump command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses sqlite3_exec.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @property (nonatomic, readonly) BOOL isInTransaction;
    + +
    +
    +

    Swift

    +
    var isInTransaction: Bool { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -inTransaction + +
    +
    +
    +
    +
    +
    +

    Deprecated

    +

    Use isInTransaction property instead

    + +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)inTransaction __deprecated_msg("Use isInTransaction property instead");
    + +
    +
    +

    Swift

    +
    func inTransaction() -> Bool
    + +
    +
    +
    +
    +
  • + + +
    +
    + + +
    + +

    Cached statements and result sets

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Clear cached statements

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)clearCachedStatements;
      + +
      +
      +

      Swift

      +
      func clearCachedStatements()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -closeOpenResultSets + +
      +
      +
      +
      +
      +
      +

      Close all open result sets

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)closeOpenResultSets;
      + +
      +
      +

      Swift

      +
      func closeOpenResultSets()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + hasOpenResultSets + +
      +
      +
      +
      +
      +
      +

      Whether database has any open result sets

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) BOOL hasOpenResultSets;
      + +
      +
      +

      Swift

      +
      var hasOpenResultSets: Bool { get }
      + +
      +
      +
      +

      Return Value

      +

      YES if there are open result sets; NO if not.

      +
      +
      +
      +
    • +
    • +
      + + + + shouldCacheStatements + +
      +
      +
      +
      +
      +
      +

      Whether should cache statements or not

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) BOOL shouldCacheStatements;
      + +
      +
      +

      Swift

      +
      var shouldCacheStatements: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -interrupt + +
      +
      +
      +
      +
      +
      +

      Interupt pending database operation

      -
      -
      - -
      - - -
      -

      Execute multiple SQL statements with callback handler

      -
      - - - -
      - (BOOL)executeStatements:(NSString *)sql withResultBlock:(FMDBExecuteStatementsCallbackBlock _Nullable)block
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      sql

      The SQL to be performed.

      block

      A block that will be called for any result sets returned by any SQL statements. - Note, if you supply this block, it must return integer value, zero upon success (this would be a good opportunity to use SQLITE_OK), - non-zero value upon failure (which will stop the bulk execution of the SQL). If a statement returns values, the block will be called with the results from the query in NSDictionary *resultsDictionary. - This may be nil if you don’t care to receive any results.

      -
      - - - -
      -

      Return Value

      -

      YES upon success; NO upon failure. If failed, you can call lastError, - lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Execute multiple SQL statements with callback handler

      +

      This method causes any pending database operation to abort and return at its earliest opportunity

      -

      This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the sqlite3 command line .dump command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses sqlite3_exec.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)interrupt;
      + +
      +
      +

      Swift

      +
      func interrupt() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Encryption methods

    +
    +
    +
      +
    • +
      + + + + -setKey: + +
      +
      +
      +
      +
      +
      +

      Set encryption key.

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      -
      -
      - -
      - - -
      -

      Last insert rowid

      -
      - - +
      -
      @property (nonatomic, readonly) int64_t lastInsertRowId
      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)setKey:(nonnull NSString *)key;
      + +
      +
      +

      Swift

      +
      func setKey(_ key: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + key + + +
      +

      The key to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -rekey: + +
      +
      +
      +
      +
      +
      +

      Reset encryption key

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      - - +
      - -
      -

      Return Value

      -

      The rowid of the last inserted row.

      -
      - +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)rekey:(nonnull NSString *)key;
      + +
      +
      +

      Swift

      +
      func rekey(_ key: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + key + + +
      +

      The key to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -setKeyWithData: + +
      +
      +
      +
      +
      +
      +

      Set encryption key using keyData.

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      - +
      - -
      -

      Discussion

      -

      Last insert rowid

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)setKeyWithData:(nonnull NSData *)keyData;
      + +
      +
      +

      Swift

      +
      func setKeyWith(_ keyData: Data) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + keyData + + +
      +

      The NSData to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -rekeyWithData: + +
      +
      +
      +
      +
      +
      +

      Reset encryption key using keyData.

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      -

      Each entry in an SQLite table has a unique 64-bit signed integer key called the “rowid”. The rowid is always available as an undeclared column named ROWID, OID, or _ROWID_ as long as those names are not also used by explicitly declared columns. If the table has a column of type INTEGER PRIMARY KEY then that column is another alias for the rowid.

      +
      -

      This routine returns the rowid of the most recent successful INSERT into the database from the database connection in the first argument. As of SQLite version 3.7.7, this routines records the last insert rowid of both ordinary tables and virtual tables. If no successful INSERTs have ever occurred on that database connection, zero is returned.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
    -
    - -

      changes +

    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)rekeyWithData:(nonnull NSData *)keyData;
    + +
    +
    +

    Swift

    +
    func rekey(with keyData: Data) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + keyData + + +
    +

    The NSData to be used.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if success, NO on error.

    +
    + + + + + +
    +
    + + +
    + +

    General inquiry methods

    +

    +
    +
    +
      +
    • +
      + + + + databasePath + +
      +
      +
      +
      +
      +
      +

      The path of the database file.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly, nullable) NSString *databasePath;
      + +
      +
      +

      Swift

      +
      var databasePath: String? { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + databaseURL + +
      +
      +
      +
      +
      +
      +

      The file URL of the database file.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly, nullable) NSURL *databaseURL;
      + +
      +
      +

      Swift

      +
      var databaseURL: URL? { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + sqliteHandle + +
      +
      +
      +
      +
      +
      +

      The underlying SQLite handle .

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) void *_Nonnull sqliteHandle;
      + +
      +
      +

      Swift

      +
      var sqliteHandle: UnsafeMutableRawPointer { get }
      + +
      +
      +
      +

      Return Value

      +

      The sqlite3 pointer.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Retrieving error codes

    +
    +
    +
      +
    • +
      + + + + -lastErrorMessage + +
      +
      +
      +
      +
      +
      +

      Last error message

      + +

      Returns the English-language text that describes the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

      +
      +

      See

      +

      sqlite3_errmsg()

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastError

      -
      -
      - -
      - - -
      -

      The number of rows changed by prior SQL statement.

      -
      - - - -
      @property (nonatomic, readonly) int changes
      - - - - - -
      -

      Return Value

      -

      The number of rows changed by prior SQL statement.

      -
      - - - - - -
      -

      Discussion

      -

      The number of rows changed by prior SQL statement.

      - -

      This function returns the number of database rows that were changed or inserted or deleted by the most recently completed SQL statement on the database connection specified by the first parameter. Only changes that are directly specified by the INSERT, UPDATE, or DELETE statement are counted.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - - -

      Retrieving results

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull NSString *)lastErrorMessage;
      + +
      +
      +

      Swift

      +
      func lastErrorMessage() -> String
      + +
      +
      +
      +

      Return Value

      +

      NSString of the last error message.

      +
      + +
    + +
  • +
    + + + + -lastErrorCode + +
    +
    +
    +
    +
    +
    +

    Last error code

    -
    -
    - -

    – executeQuery: -

    +

    Returns the numeric result code or extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

    +
    +

    See

    +

    sqlite3_errcode()

    -
    -
    - -
    - - -
    -

    Execute select statement

    -
    - - - -
    - (FMResultSet *_Nullable)executeQuery:(NSString *)sql, ...
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sql

    The SELECT statement to be performed, with optional ? placeholders.

    ...

    Optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString, NSNumber, etc.), not fundamental C data types (e.g. int, char *, etc.).

    -
    - - - -
    -

    Return Value

    -

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute select statement

    - -

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

    - -

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via [FMResultSet next]) from one record to the other.

    - -

    This method employs sqlite3_bind for any optional value parameters. This properly escapes any characters that need escape sequences (e.g. quotation marks), which eliminates simple SQL errors as well as protects against SQL injection attacks. This method natively handles NSString, NSNumber, NSNull, NSDate, and NSData objects. All other object types will be interpreted as text values using the object’s description method.

    Note: You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using <executeQuery:values:> instead.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +

    See

    +

    lastErrorMessage

    -
    -
    - -
    - - -
    -

    Execute select statement

    -
    - - - -
    - (FMResultSet *_Nullable)executeQueryWithFormat:(NSString *)format, ...
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    format

    The SQL to be performed, with printf-style escape sequences.

    ...

    Optional parameters to bind to use in conjunction with the printf-style escape sequences in the SQL statement.

    -
    - - - -
    -

    Return Value

    -

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute select statement

    - -

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

    - -

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via [FMResultSet next]) from one record to the other.

    Note: This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite ? placeholder, and then bind values to that placeholder. Thus the following command

    - -
    [db executeQueryWithFormat:@"SELECT * FROM test WHERE name=%@", @"Gus"];
    -
    +
    +

    See

    +

    lastError

    -

    is actually replacing the %@ with ? placeholder, and then performing something equivalent to executeQuery:

    +
    -
    [db executeQuery:@"SELECT * FROM test WHERE name=?", @"Gus"];
    -
    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (int)lastErrorCode;
    + +
    +
    +

    Swift

    +
    func lastErrorCode() -> Int32
    + +
    +
    +
    +

    Return Value

    +

    Integer value of the last error code.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Last extended error code

    -

    There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite ? placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with pragma statements and the like. Second, note the lack of quotation marks in the SQL. The WHERE clause was not WHERE name='%@' (like you might have to do if you built a SQL statement using NSString method stringWithFormat), but rather simply WHERE name=%@.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - - - -
    - -

    – executeQuery:withArgumentsInArray: -

    +

    Returns the numeric extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

    +
    +

    See

    +

    sqlite3_errcode()

    -
    -
    - -
    - - -
    -

    Execute select statement

    -
    - - - -
    - (FMResultSet *_Nullable)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sql

    The SELECT statement to be performed, with optional ? placeholders.

    arguments

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    -
    - - - -
    -

    Return Value

    -

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute select statement

    - -

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

    - -

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via [FMResultSet next]) from one record to the other.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +

    See

    +

    2. Primary Result Codes versus Extended Result Codes

    -
    -
    - -
    - - -
    -

    Execute select statement

    -
    - - - -
    - (FMResultSet *_Nullable)executeQuery:(NSString *)sql values:(NSArray *_Nullable)values error:(NSError *_Nullable __autoreleasing *)error
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    sql

    The SELECT statement to be performed, with optional ? placeholders.

    values

    A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

    error

    A NSError object to receive any error object (if any).

    -
    - - - -
    -

    Return Value

    -

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute select statement

    - -

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

    - -

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via [FMResultSet next]) from one record to the other.

    - -

    This is similar to executeQuery:withArgumentsInArray:, except that this also accepts a pointer to a NSError pointer, so that errors can be returned.

    +
    +

    See

    +

    5. Extended Result Code List

    -

    In Swift, this throws errors, as if it were defined as follows:

    +
    +

    See

    +

    lastErrorMessage

    -

    func executeQuery(sql: String, values: [Any]?) throws -> FMResultSet!

    Note: When called from Swift, only use the first two parameters, sql and values. This but throws the error.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +

    See

    +

    lastError

    -
    -
    - -
    - - -
    -

    Execute select statement

    -
    - - - -
    - (FMResultSet *_Nullable)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary *_Nullable)arguments
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sql

    The SELECT statement to be performed, with optional ? placeholders.

    arguments

    A NSDictionary of objects keyed by column names that will be used when binding values to the ? placeholders in the SQL statement.

    -
    - - - -
    -

    Return Value

    -

    A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Execute select statement

    - -

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

    - -

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via [FMResultSet next]) from one record to the other.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - - -

    Transactions

    + +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (int)lastExtendedErrorCode;
    + +
    +
    +

    Swift

    +
    func lastExtendedErrorCode() -> Int32
    + +
    +
    +
    +

    Return Value

    +

    Integer value of the last extended error code.

    +
    + + +
  • +
  • +
    + + + + -hadError + +
    +
    +
    +
    +
    +
    +

    Had error

    +
    +

    See

    +

    lastError

    + +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    -
    - -
    -
    - -
    - - -
    -

    Begin a transaction

    -
    - - - -
    - (BOOL)beginTransaction
    - - - - - -
    -

    Return Value

    -

    YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Begin a transaction

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)hadError;
    + +
    +
    +

    Swift

    +
    func hadError() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES if there was an error, NO if no error.

    +
    +
    +
    +
  • +
  • +
    + + + + -lastError + +
    +
    +
    +
    +
    +
    +

    Last error

    +
    +

    See

    +

    lastErrorCode

    + +
    +

    See

    +

    lastErrorMessage

    -
    -
    - -
    - - -
    -

    Begin a deferred transaction

    -
    - - - -
    - (BOOL)beginDeferredTransaction
    - - - - - -
    -

    Return Value

    -

    YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Begin a deferred transaction

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

    – commit -

    +
    -
    -
    - -
    - - -
    -

    Commit a transaction

    -
    - - - -
    - (BOOL)commit
    - - - - - -
    -

    Return Value

    -

    YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

    -
    - - - - - -
    -

    Discussion

    -

    Commit a transaction

    - -

    Commit a transaction that was initiated with either beginTransaction or with beginDeferredTransaction.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (nonnull NSError *)lastError;
    + +
    +
    +

    Swift

    +
    func lastError() -> Error
    + +
    +
    +
    +

    Return Value

    +

    NSError representing the last error.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @property (nonatomic) NSTimeInterval maxBusyRetryTimeInterval
    + +
    +
    +

    Swift

    +
    var maxBusyRetryTimeInterval: TimeInterval { get set }
    + +
    +
    +
    +
    +
  • + + +
    +
    + + +
    + +

    Save points

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Start save point

      +
      +

      See

      +

      releaseSavePointWithName:error:

      + +
      +

      See

      +

      rollbackToSavePointWithName:error:

      -
      -
      - -
      - - -
      -

      Rollback a transaction

      -
      - - - -
      - (BOOL)rollback
      - - - - - -
      -

      Return Value

      -

      YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Rollback a transaction

      - -

      Rollback a transaction that was initiated with either beginTransaction or with beginDeferredTransaction.

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)startSavePointWithName:(nonnull NSString *)name
      +                         error:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func startSavePoint(withName name: String) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + name + + +
      +

      Name of save point.

      +
      +
      + + outErr + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Release save point

      +
      +

      See

      +

      startSavePointWithName:error:

      + +
      +

      See

      +

      rollbackToSavePointWithName:error:

      -
      -
      - -
      - - -
      -

      Identify whether currently in a transaction or not

      -
      - - - -
      @property (nonatomic, readonly) BOOL isInTransaction
      - - - - - - - - - -
      -

      Discussion

      -

      Identify whether currently in a transaction or not

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - - -

      Cached statements and result sets

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)releaseSavePointWithName:(nonnull NSString *)name
      +                           error:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func releaseSavePoint(withName name: String) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + name + + +
      +

      Name of save point.

      +
      +
      + + outErr + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      + +
    + +
  • + +
    +
    +
    +
    +
    +

    Roll back to save point

    +
    +

    See

    +

    startSavePointWithName:error:

    + +
    +

    See

    +

    releaseSavePointWithName:error:

    -
    - -
    -
    - -
    - - -
    -

    Clear cached statements

    -
    - - - -
    - (void)clearCachedStatements
    - - - - - - - - - -
    -

    Discussion

    -

    Clear cached statements

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)rollbackToSavePointWithName:(nonnull NSString *)name
    +                              error:(NSError *_Nullable *_Nullable)outErr;
    + +
    +
    +

    Swift

    +
    func rollbackToSavePoint(withName name: String) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + name + + +
    +

    Name of save point.

    +
    +
    + + outErr + + +
    +

    A NSError object to receive any error object (if any).

    +
    +
    +
    +
    +

    Return Value

    +

    YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

    +
    +
    +
    +
  • +
  • +
    + + + + -inSavePoint: + +
    +
    +
    +
    +
    +
    +

    Start save point

    +
    +

    See

    +

    startSavePointWithName:error:

    + +
    +

    See

    +

    releaseSavePointWithName:error:

    + +
    +

    See

    +

    rollbackToSavePointWithName:error:

    -
    -
    - -
    - - -
    -

    Close all open result sets

    -
    - - - -
    - (void)closeOpenResultSets
    - - - - - - - - - -
    -

    Discussion

    -

    Close all open result sets

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Whether database has any open result sets

    -
    - - - -
    @property (nonatomic, readonly) BOOL hasOpenResultSets
    - - - - - -
    -

    Return Value

    -

    YES if there are open result sets; NO if not.

    -
    - - - - - -
    -

    Discussion

    -

    Whether database has any open result sets

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSError *_Nullable)inSavePoint:(nonnull void (^)(BOOL *_Nonnull))block;
    + +
    +
    +

    Swift

    +
    func inSavePoint(_ block: (UnsafeMutablePointer<ObjCBool>) -> Void) -> Error?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + block + + +
    +

    Block of code to perform from within save point.

    +
    +
    +
    +
    +

    Return Value

    +

    The NSError corresponding to the error, if any. If no error, returns nil .

    +
    +
    +
    +
  • + + +
    +
    + + +
    + +

    Checkpoint

    - -
    -
    - -
    - - -
    -

    Whether should cache statements or not

    -
    - - - -
    @property (nonatomic) BOOL shouldCacheStatements
    - - - - - - - - - -
    -

    Discussion

    -

    Whether should cache statements or not

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +
      +
    • +
      + + + + -checkpoint:error: + +
      +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO .

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +              name:(NSString *_Nullable)name
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO .

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +               name:(NSString *_Nullable)name
      +      logFrameCount:(int *_Nullable)logFrameCount
      +    checkpointCount:(int *_Nullable)checkpointCount
      +              error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?, logFrameCount: UnsafeMutablePointer<Int32>?, checkpointCount: UnsafeMutablePointer<Int32>?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      + + logFrameCount + + +
      +

      If not NULL , then this is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.

      +
      +
      + + checkpointCount + + +
      +

      If not NULL , then this is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO .

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    SQLite library status

    +
    +
    +
      +
    • +
      + + + + +isSQLiteThreadSafe + +
      +
      +
      +
      +
      +
      +

      Test to see if the library is threadsafe

      +
      +

      See

      +

      sqlite3_threadsafe()

      -
      -
      +
      -
      - - -
      -

      Interupt pending database operation

      -
      - - +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (BOOL)isSQLiteThreadSafe;
      + +
      +
      +

      Swift

      +
      class func isSQLiteThreadSafe() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      NO if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0.

      +
      +
      +
      +
    • +
    • +
      + + + + -limitFor:value: + +
      +
      +
      +
      +
      +
      +

      Examine/set limits

      +
      +

      See

      +

      sqlite3_limit()

      -
      - (BOOL)interrupt
      +
      - - +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)limitFor:(int)type value:(int)newLimit;
      + +
      +
      +

      Swift

      +
      func limit(for type: Int32, value newLimit: Int32) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + type + + + +
      + + newLimit + + +
      +

      The new limit value. Use -1 if you don’t want to change the limit, but rather only want to check it.

      +
      +
      +
      +
      +

      Return Value

      +

      Regardless, returns previous value.

      +
      +
      +
      +
    • +
    • +
      + + + + +sqliteLibVersion + +
      +
      +
      +
      +
      +
      +

      Run-time library version numbers

      +
      +

      See

      +

      sqlite3_libversion()

      - -
      -

      Return Value

      -

      YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - +
      - +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull NSString *)sqliteLibVersion;
      + +
      +
      +

      Swift

      +
      class func sqliteLibVersion() -> String
      + +
      +
      +
      +

      Return Value

      +

      The sqlite library version string.

      +
      +
      +
      +
    • +
    • +
      + + + + +FMDBUserVersion + +
      +
      +
      +
      +
      +
      +

      The FMDB version number as a string in the form of "2.7.7" .

      + +

      If you want to compare version number strings, you can use NSNumericSearch option:

      +
      NSComparisonResult result = [[FMDatabase FMDBUserVersion] compare:@"2.11.0" options:NSNumericSearch];
      +
      - -
      -

      Discussion

      -

      Interupt pending database operation

      +

      @returns The version number string.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull NSString *)FMDBUserVersion;
      + +
      +
      +

      Swift

      +
      class func fmdbUserVersion() -> String
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + +FMDBVersion + +
      +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use FMDBUserVersion instead

      + +
      +
      +

      The FMDB version

      + +

      This returns the FMDB as hexadecimal value, e.g., 0x0243 for version 2.4.3.

      +
      +

      Warning

      + This routine will not work if any component of the version number exceeds 15. + For example, if it is version 2.17.3 , this will max out at 0x2f3. + For this reason, we would recommend using FMDBUserVersion and with NSNumericSearch option, e.g. -

      This method causes any pending database operation to abort and return at its earliest opportunity

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
    - - - - -

    Encryption methods

    +
     NSComparisonResult result = [[FMDatabase FMDBUserVersion] compare:@"2.11.0" options:NSNumericSearch];
    +
    -
    -
    - -

    – setKey: +

    @returns The version number in hexadecimal, e.g., 0x0243 for version 2.4.3. If any component exceeds what can be + can be represented in four bits, we’ll max it out at 0xf .

    + +

    +
    +

    Declaration

    +
    +

    Objective-C

    +
    + (SInt32)FMDBVersion;
    + +
    +
    +

    Swift

    +
    class func fmdbVersion() -> Int32
    + +
    +
    + +
    + + + +
    +
    + + +
    + +

    Make SQL function

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.

      -
      -
      - -
      - - -
      -

      Set encryption key.

      -
      - - - -
      - (BOOL)setKey:(NSString *)key
      - - - -
      -

      Parameters

      - - - - - - - -
      key

      The key to be used.

      -
      - - - -
      -

      Return Value

      -

      YES if success, NO on error.

      -
      - - - - - -
      -

      Discussion

      -

      Set encryption key.

      Warning: You need to have purchased the sqlite encryption extensions for this method to work.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - -

      – rekey: -

      +

      For example:

      +
      [db makeFunctionNamed:@"RemoveDiacritics" arguments:1 block:^(void *context, int argc, void **argv) {
      +    SqliteValueType type = [self.db valueType:argv[0]];
      +    if (type == SqliteValueTypeNull) {
      +        [self.db resultNullInContext:context];
      +         return;
      +    }
      +    if (type != SqliteValueTypeText) {
      +        [self.db resultError:@"Expected text" context:context];
      +        return;
      +    }
      +    NSString *string = [self.db valueString:argv[0]];
      +    NSString *result = [string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil];
      +    [self.db resultString:result context:context];
      +}];
      +
      +FMResultSet *rs = [db executeQuery:@"SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'"];
      +NSAssert(rs, @"Error %@", [db lastErrorMessage]);
      +
      +
      +

      See

      +

      sqlite3_create_function()

      -
      -
      - -
      - - -
      -

      Reset encryption key

      -
      - - - -
      - (BOOL)rekey:(NSString *)key
      - - - -
      -

      Parameters

      - - - - - - - -
      key

      The key to be used.

      -
      - - - -
      -

      Return Value

      -

      YES if success, NO on error.

      -
      - - - - - -
      -

      Discussion

      -

      Reset encryption key

      Warning: You need to have purchased the sqlite encryption extensions for this method to work.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Set encryption key using keyData.

      -
      - - - -
      - (BOOL)setKeyWithData:(NSData *)keyData
      - - - -
      -

      Parameters

      - - - - - - - -
      keyData

      The NSData to be used.

      -
      - - - -
      -

      Return Value

      -

      YES if success, NO on error.

      -
      - - - - - -
      -

      Discussion

      -

      Set encryption key using keyData.

      Warning: You need to have purchased the sqlite encryption extensions for this method to work.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)makeFunctionNamed:(nonnull NSString *)name
      +                arguments:(int)arguments
      +                    block:(nonnull void (^)(void *_Nonnull, int,
      +                                            void *_Nonnull *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func makeFunctionNamed(_ name: String, arguments: Int32, block: @escaping (UnsafeMutableRawPointer, Int32, UnsafeMutablePointer<UnsafeMutableRawPointer>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + name + + +
      +

      Name of function.

      +
      +
      + + arguments + + +
      +

      Maximum number of parameters.

      +
      +
      + + block + + +
      +

      The block of code for the function.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use makeFunctionNamed:arguments:block:

      + +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)makeFunctionNamed:(NSString *)name maximumArguments:(int)count withBlock:(void (^)(void *context, int argc, void * _Nonnull * _Nonnull argv))block __deprecated_msg("Use makeFunctionNamed:arguments:block:");
      + +
      +
      +

      Swift

      +
      func makeFunctionNamed(_ name: String, maximumArguments count: Int32, with block: @escaping (UnsafeMutableRawPointer, Int32, UnsafeMutablePointer<UnsafeMutableRawPointer>) -> Void)
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -valueType: + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (SqliteValueType)valueType:(void *)argv;
      + +
      +
      +

      Swift

      +
      func valueType(_ argv: UnsafeMutableRawPointer) -> SqliteValueType
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -valueInt: + +
      +
      +
      +
      +
      +
      +

      Get integer value of parameter in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      -
      -
      - -
      - - -
      -

      Reset encryption key using keyData.

      -
      - - - -
      - (BOOL)rekeyWithData:(NSData *)keyData
      - - - -
      -

      Parameters

      - - - - - - - -
      keyData

      The NSData to be used.

      -
      - - - -
      -

      Return Value

      -

      YES if success, NO on error.

      -
      - - - - - -
      -

      Discussion

      -

      Reset encryption key using keyData.

      Warning: You need to have purchased the sqlite encryption extensions for this method to work.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - - -

      General inquiry methods

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)valueInt:(nonnull void *)value;
      + +
      +
      +

      Swift

      +
      func valueInt(_ value: UnsafeMutableRawPointer) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + value + + +
      +

      The argument whose value to return.

      +
      +
      +
      +
      +

      Return Value

      +

      The integer value.

      +
      + +
    + +
  • +
    + + + + -valueLong: + +
    +
    +
    +
    +
    +
    +

    Get long value of parameter in custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    -
    - -

      databasePath -

    - -
    -
    - -
    - - -
    -

    The path of the database file

    -
    - - - -
    @property (nonatomic, readonly, nullable) NSString *databasePath
    - - - - - - - - - -
    -

    Discussion

    -

    The path of the database file

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    The file URL of the database file.

    -
    - - - -
    @property (nonatomic, readonly, nullable) NSURL *databaseURL
    - - - - - - - - - -
    -

    Discussion

    -

    The file URL of the database file.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (long long)valueLong:(nonnull void *)value;
    + +
    +
    +

    Swift

    +
    func valueLong(_ value: UnsafeMutableRawPointer) -> Int64
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + value + + +
    +

    The argument whose value to return.

    +
    +
    +
    +
    +

    Return Value

    +

    The long value.

    +
    +
    +
    +
  • +
  • +
    + + + + -valueDouble: + +
    +
    +
    +
    +
    +
    +

    Get double value of parameter in custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    -
    - -
    - - -
    -

    The underlying SQLite handle

    -
    - - - -
    @property (nonatomic, readonly) void *sqliteHandle
    - - - - - -
    -

    Return Value

    -

    The sqlite3 pointer.

    -
    - - - - - -
    -

    Discussion

    -

    The underlying SQLite handle

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - - -

    Retrieving error codes

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (double)valueDouble:(nonnull void *)value;
    + +
    +
    +

    Swift

    +
    func valueDouble(_ value: UnsafeMutableRawPointer) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + value + + +
    +

    The argument whose value to return.

    +
    +
    +
    +
    +

    Return Value

    +

    The double value.

    +
    + + +
  • +
  • +
    + + + + -valueData: + +
    +
    +
    +
    +
    +
    +

    Get NSData value of parameter in custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    - -
    -
    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSData *_Nullable)valueData:(nonnull void *)value;
    + +
    +
    +

    Swift

    +
    func valueData(_ value: UnsafeMutableRawPointer) -> Data?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + value + + +
    +

    The argument whose value to return.

    +
    +
    +
    +
    +

    Return Value

    +

    The data object.

    +
    +
    +
    +
  • +
  • +
    + + + + -valueString: + +
    +
    +
    +
    +
    +
    +

    Get string value of parameter in custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    - - -
    -

    Last error message

    -
    - - +
    -
    - (NSString *)lastErrorMessage
    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSString *_Nullable)valueString:(nonnull void *)value;
    + +
    +
    +

    Swift

    +
    func valueString(_ value: UnsafeMutableRawPointer) -> String?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + value + + +
    +

    The argument whose value to return.

    +
    +
    +
    +
    +

    Return Value

    +

    The string value.

    +
    +
    +
    +
  • +
  • +
    + + + + -resultNullInContext: + +
    +
    +
    +
    +
    +
    +

    Return null value from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    - - +
    - -
    -

    Return Value

    -

    NSString of the last error message.

    -
    - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultNullInContext:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultNull(context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + context + + +
    +

    The context to which the null value will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + -resultInt:context: + +
    +
    +
    +
    +
    +
    +

    Return integer value from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    - +
    - -
    -

    Discussion

    -

    Last error message

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultInt:(int)value context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultInt(_ value: Int32, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + value + + +
    +

    The integer value to be returned.

    +
    +
    + + context + + +
    +

    The context to which the value will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + -resultLong:context: + +
    +
    +
    +
    +
    +
    +

    Return long value from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -

    Returns the English-language text that describes the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

    – lastErrorCode -

    - -
    -
    +
    -
    - - -
    -

    Last error code

    -
    - - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultLong:(long long)value context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultLong(_ value: Int64, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + value + + +
    +

    The long value to be returned.

    +
    +
    + + context + + +
    +

    The context to which the value will be returned.

    +
    +
    +
    + +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Return double value from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    - (int)lastErrorCode
    +
    - - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultDouble:(double)value context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultDouble(_ value: Double, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + value + + +
    +

    The double value to be returned.

    +
    +
    + + context + + +
    +

    The context to which the value will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + -resultData:context: + +
    +
    +
    +
    +
    +
    +

    Return NSData object from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    - -
    -

    Return Value

    -

    Integer value of the last error code.

    -
    - +
    - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultData:(nonnull NSData *)data context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultData(_ data: Data, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + data + + +
    +

    The NSData object to be returned.

    +
    +
    + + context + + +
    +

    The context to which the value will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Return string value from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    - -
    -

    Discussion

    -

    Last error code

    +
    -

    Returns the numeric result code or extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    - +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultString:(nonnull NSString *)value context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultString(_ value: String, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + value + + +
    +

    The string value to be returned.

    +
    +
    + + context + + +
    +

    The context to which the value will be returned.

    +
    +
    +
    + + +
  • +
  • +
    + + + + -resultError:context: + +
    +
    +
    +
    +
    +
    +

    Return error string from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    -
    +
    -
    - - -
    -

    Last extended error code

    -
    - - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultError:(nonnull NSString *)error context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultError(_ error: String, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + error + + +
    +

    The error string to be returned.

    +
    +
    + + context + + +
    +

    The context to which the error will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Return error code from custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    -
    - (int)lastExtendedErrorCode
    +
    - - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultErrorCode:(int)errorCode context:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultErrorCode(_ errorCode: Int32, context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + errorCode + + +
    +

    The integer error code to be returned.

    +
    +
    + + context + + +
    +

    The context to which the error will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Report memory error in custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    - -
    -

    Return Value

    -

    Integer value of the last extended error code.

    -
    - +
    - +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultErrorNoMemoryInContext:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultErrorNoMemory(context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + context + + +
    +

    The context to which the error will be returned.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Report that string or BLOB is too long to represent in custom function.

    +
    +

    See

    +

    makeFunctionNamed:arguments:block:

    - -
    -

    Discussion

    -

    Last extended error code

    +
    -

    Returns the numeric extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    - +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)resultErrorTooBigInContext:(nonnull void *)context;
    + +
    +
    +

    Swift

    +
    func resultErrorTooBig(context: UnsafeMutableRawPointer)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + context + + +
    +

    The context to which the error will be returned.

    +
    +
    +
    + + +
  • + + +
    +
    + + +
    + +

    Date formatter

    +
    +
    +
      +
    • +
      + + + + +storeableDateFormat: + +
      +
      +
      +
      +
      +
      +

      Generate an NSDateFormatter that won’t be broken by permutations of timezones or locales.

      -
      -
      - -
      - - -
      -

      Had error

      -
      - - - -
      - (BOOL)hadError
      - - - - - -
      -

      Return Value

      -

      YES if there was an error, NO if no error.

      -
      - - - - - -
      -

      Discussion

      -

      Had error

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - -

      – lastError -

      +

      Use this method to generate values to set the dateFormat property.

      -
      -
      - -
      - - -
      -

      Last error

      -
      - - - -
      - (NSError *)lastError
      - - - - - -
      -

      Return Value

      -

      NSError representing the last error.

      -
      - - - - - -
      -

      Discussion

      -

      Last error

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      - +

      Example:

      +
      myDB.dateFormat = [FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"];
      +
      +
      +

      See

      +

      hasDateFormatter

      - -

      Save points

      +
      +

      See

      +

      setDateFormat:

      -
      -
      +

      See

      +

      dateFromString:

      -
      -
      - -
      - - -
      -

      Start save point

      -
      - - - -
      - (BOOL)startSavePointWithName:(NSString *)name error:(NSError *_Nullable *)outErr
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      name

      Name of save point.

      outErr

      A NSError object to receive any error object (if any).

      -
      - - - -
      -

      Return Value

      -

      YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Start save point

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +

      See

      +

      stringFromDate:

      -
      -
      - -
      - - -
      -

      Release save point

      -
      - - - -
      - (BOOL)releaseSavePointWithName:(NSString *)name error:(NSError *_Nullable *)outErr
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      name

      Name of save point.

      outErr

      A NSError object to receive any error object (if any).

      -
      - - - -
      -

      Return Value

      -

      YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Release save point

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +

      See

      +

      storeableDateFormat:

      -
      -
      - -
      - - -
      -

      Roll back to save point

      -
      - - - -
      - (BOOL)rollbackToSavePointWithName:(NSString *)name error:(NSError *_Nullable *)outErr
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      name

      Name of save point.

      outErr

      A NSError object to receive any error object (if any).

      -
      - - - -
      -

      Return Value

      -

      YES on success; NO on failure. If failed, you can call lastError, lastErrorCode, or lastErrorMessage for diagnostic information regarding the failure.

      -
      - - - - - -
      -

      Discussion

      -

      Roll back to save point

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +

      Warning

      +

      Note that NSDateFormatter is not thread-safe, so the formatter generated by this method should be assigned to only one FMDB instance and should not be used for other purposes.

      -
      -
      - -
      - - -
      -

      Start save point

      -
      - - - -
      - (NSError *_Nullable)inSavePoint:(void ( ^ ) ( BOOL *rollback ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      Block of code to perform from within save point.

      -
      - - - -
      -

      Return Value

      -

      The NSError corresponding to the error, if any. If no error, returns nil.

      -
      - - - - - -
      -

      Discussion

      -

      Start save point

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - - -

      SQLite library status

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull NSDateFormatter *)storeableDateFormat:(nonnull NSString *)format;
      + +
      +
      +

      Swift

      +
      class func storeableDateFormat(_ format: String) -> DateFormatter
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + format + + +
      +

      A valid NSDateFormatter format string.

      +
      +
      +
      +
      +

      Return Value

      +

      A NSDateFormatter that can be used for converting dates to strings and vice versa.

      +
      + +
    + +
  • +
    + + + + -hasDateFormatter + +
    +
    +
    +
    +
    +
    +

    Test whether the database has a date formatter assigned.

    +
    +

    See

    +

    hasDateFormatter

    + +
    +

    See

    +

    setDateFormat:

    + +
    +

    See

    +

    dateFromString:

    + +
    +

    See

    +

    stringFromDate:

    + +
    +

    See

    +

    storeableDateFormat:

    -
    - -
    -
    - -
    - - -
    -

    Test to see if the library is threadsafe

    -
    - - - -
    + (BOOL)isSQLiteThreadSafe
    - - - - - -
    -

    Return Value

    -

    NO if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0.

    -
    - - - - - -
    -

    Discussion

    -

    Test to see if the library is threadsafe

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)hasDateFormatter;
    + +
    +
    +

    Swift

    +
    func hasDateFormatter() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    YES if there is a date formatter; NO if not.

    +
    +
    +
    +
  • +
  • +
    + + + + -setDateFormat: + +
    +
    +
    +
    +
    +
    +

    Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.

    +
    +

    See

    +

    hasDateFormatter

    + +
    +

    See

    +

    setDateFormat:

    + +
    +

    See

    +

    dateFromString:

    + +
    +

    See

    +

    stringFromDate:

    + +
    +

    See

    +

    storeableDateFormat:

    + +
    +

    Warning

    +

    Note there is no direct getter for the NSDateFormatter , and you should not use the formatter you pass to FMDB for other purposes, as NSDateFormatter is not thread-safe.

    -
    -
    - -
    - - -
    -

    Run-time library version numbers

    -
    - - - -
    + (NSString *)sqliteLibVersion
    - - - - - -
    -

    Return Value

    -

    The sqlite library version string.

    -
    - - - - - -
    -

    Discussion

    -

    Run-time library version numbers

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - - -

    Make SQL function

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)setDateFormat:(NSDateFormatter *_Nullable)format;
    + +
    +
    +

    Swift

    +
    func setDateFormat(_ format: DateFormatter?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + format + + +
    +

    Set to nil to use UNIX timestamps. Defaults to nil. Should be set using a formatter generated using FMDatabase:storeableDateFormat .

    +
    +
    +
    + + +
  • +
  • +
    + + + + -dateFromString: + +
    +
    +
    +
    +
    +
    +

    Convert the supplied NSString to NSDate, using the current database formatter.

    +
    +

    See

    +

    hasDateFormatter

    + +
    +

    See

    +

    setDateFormat:

    + +
    +

    See

    +

    dateFromString:

    + +
    +

    See

    +

    stringFromDate:

    + +
    +

    See

    +

    storeableDateFormat:

    -
    - -
    -
    - -
    - - -
    -

    Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.

    -
    - - - -
    - (void)makeFunctionNamed:(NSString *)name arguments:(int)arguments block:(void ( ^ ) ( void *context , int argc , void *_Nonnull *_Nonnull argv ))block
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    name

    Name of function.

    arguments

    Maximum number of parameters.

    block

    The block of code for the function.

    -
    - - - - - - - -
    -

    Discussion

    -

    Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSDate *_Nullable)dateFromString:(nonnull NSString *)s;
    + +
    +
    +

    Swift

    +
    func date(from s: String) -> Date?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + s + + +
    +

    NSString to convert to NSDate .

    +
    +
    +
    +
    +

    Return Value

    +

    The NSDate object; or nil if no formatter is set.

    +
    +
    +
    +
  • +
  • +
    + + + + -stringFromDate: + +
    +
    +
    +
    +
    +
    +

    Convert the supplied NSDate to NSString, using the current database formatter.

    +
    +

    See

    +

    hasDateFormatter

    + +
    +

    See

    +

    setDateFormat:

    + +
    +

    See

    +

    dateFromString:

    + +
    +

    See

    +

    stringFromDate:

    + +
    +

    See

    +

    storeableDateFormat:

    -

    For example:

    +
    -
    [db makeFunctionNamed:@"RemoveDiacritics" arguments:1 block:^(void *context, int argc, void **argv) {
    -    SqliteValueType type = [self.db valueType:argv[0]];
    -    if (type == SqliteValueTypeNull) {
    -        [self.db resultNullInContext:context];
    -         return;
    -    }
    -    if (type != SqliteValueTypeText) {
    -        [self.db resultError:@"Expected text" context:context];
    -        return;
    -    }
    -    NSString *string = [self.db valueString:argv[0]];
    -    NSString *result = [string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil];
    -    [self.db resultString:result context:context];
    -}];
    -
    -FMResultSet *rs = [db executeQuery:@"SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'"];
    -NSAssert(rs, @"Error %@", [db lastErrorMessage]);
    -
    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    - - +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSString *_Nullable)stringFromDate:(nonnull NSDate *)date;
    + +
    +
    +

    Swift

    +
    func string(from date: Date) -> String?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + date + + +
    +

    NSDate of date to convert to NSString .

    +
    +
    +
    +
    +

    Return Value

    +

    The NSString representation of the date; nil if no formatter is set.

    +
    + + +
  • + + +
    +
    + + +
    + +

    Return results of SQL to variable

    +
    +
    +
      +
    • +
      + + + + -intForQuery: + +
      +
      +
      +
      +
      +
      +

      Return int value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Get integer value of parameter in custom function.

      -
      - - - -
      - (int)valueInt:(void *)value
      - - - -
      -

      Parameters

      - - - - - - - -
      value

      The argument whose value to return.

      -
      - - - -
      -

      Return Value

      -

      The integer value.

      -
      - - - - - -
      -

      Discussion

      -

      Get integer value of parameter in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Get long value of parameter in custom function.

      -
      - - - -
      - (long long)valueLong:(void *)value
      - - - -
      -

      Parameters

      - - - - - - - -
      value

      The argument whose value to return.

      -
      - - - -
      -

      Return Value

      -

      The long value.

      -
      - - - - - -
      -

      Discussion

      -

      Get long value of parameter in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)intForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      int value.

      +
      +
      +
      +
    • +
    • +
      + + + + -longForQuery: + +
      +
      +
      +
      +
      +
      +

      Return long value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Get double value of parameter in custom function.

      -
      - - - -
      - (double)valueDouble:(void *)value
      - - - -
      -

      Parameters

      - - - - - - - -
      value

      The argument whose value to return.

      -
      - - - -
      -

      Return Value

      -

      The double value.

      -
      - - - - - -
      -

      Discussion

      -

      Get double value of parameter in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Get NSData value of parameter in custom function.

      -
      - - - -
      - (NSData *_Nullable)valueData:(void *)value
      - - - -
      -

      Parameters

      - - - - - - - -
      value

      The argument whose value to return.

      -
      - - - -
      -

      Return Value

      -

      The data object.

      -
      - - - - - -
      -

      Discussion

      -

      Get NSData value of parameter in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long)longForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      long value.

      +
      +
      +
      +
    • +
    • +
      + + + + -boolForQuery: + +
      +
      +
      +
      +
      +
      +

      Return BOOL value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Get string value of parameter in custom function.

      -
      - - - -
      - (NSString *_Nullable)valueString:(void *)value
      - - - -
      -

      Parameters

      - - - - - - - -
      value

      The argument whose value to return.

      -
      - - - -
      -

      Return Value

      -

      The string value.

      -
      - - - - - -
      -

      Discussion

      -

      Get string value of parameter in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Return null value from custom function.

      -
      - - - -
      - (void)resultNullInContext:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - -
      context

      The context to which the null value will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return null value from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)boolForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      BOOL value.

      +
      +
      +
      +
    • +
    • +
      + + + + -doubleForQuery: + +
      +
      +
      +
      +
      +
      +

      Return double value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Return integer value from custom function.

      -
      - - - -
      - (void)resultInt:(int)value context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      value

      The integer value to be returned.

      context

      The context to which the value will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return integer value from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Return long value from custom function.

      -
      - - - -
      - (void)resultLong:(long long)value context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      value

      The long value to be returned.

      context

      The context to which the value will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return long value from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)doubleForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      double value.

      +
      +
      +
      +
    • +
    • +
      + + + + -stringForQuery: + +
      +
      +
      +
      +
      +
      +

      Return NSString value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Return double value from custom function.

      -
      - - - -
      - (void)resultDouble:(double)value context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      value

      The double value to be returned.

      context

      The context to which the value will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return double value from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Return NSData object from custom function.

      -
      - - - -
      - (void)resultData:(NSData *)data context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      data

      The NSData object to be returned.

      context

      The context to which the value will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return NSData object from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      NSString value.

      +
      +
      +
      +
    • +
    • +
      + + + + -dataForQuery: + +
      +
      +
      +
      +
      +
      +

      Return NSData value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Return string value from custom function.

      -
      - - - -
      - (void)resultString:(NSString *)value context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      value

      The string value to be returned.

      context

      The context to which the value will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return string value from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Return error string from custom function.

      -
      - - - -
      - (void)resultError:(NSString *)error context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      error

      The error string to be returned.

      context

      The context to which the error will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return error string from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)dataForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      NSData value.

      +
      +
      +
      +
    • +
    • +
      + + + + -dateForQuery: + +
      +
      +
      +
      +
      +
      +

      Return NSDate value for query

      +
      +

      Note

      +

      This is not available from Swift.

      -
      -
      - -
      - - -
      -

      Return error code from custom function.

      -
      - - - -
      - (void)resultErrorCode:(int)errorCode context:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      errorCode

      The integer error code to be returned.

      context

      The context to which the error will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Return error code from custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Report memory error in custom function.

      -
      - - - -
      - (void)resultErrorNoMemoryInContext:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - -
      context

      The context to which the error will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Report memory error in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      NSDate value.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Schema related operations

    +
    +
    +
      +
    • +
      + + + + -tableExists: + +
      +
      +
      +
      +
      +
      +

      Does table exist in database?

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)tableExists:(nonnull NSString *)tableName;
      + +
      +
      +

      Swift

      +
      func tableExists(_ tableName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + tableName + + +
      +

      The name of the table being looked for.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if table found; NO if not found.

      +
      +
      +
      +
    • +
    • +
      + + + + -getSchema + +
      +
      +
      +
      +
      +
      +

      The schema of the database.

      + +

      This will be the schema for the entire database. For each entity, each row of the result set will include the following fields:

      + +
        +
      • type - The type of entity (e.g. table, index, view, or trigger)
      • +
      • name - The name of the object
      • +
      • tbl_name - The name of the table to which the object references
      • +
      • rootpage - The page number of the root b-tree page for tables and indices
      • +
      • sql - The SQL that created the entity

      • +
      +

      See

      +

      SQLite File Format

      -
      -
      - -
      - - -
      -

      Report that string or BLOB is too long to represent in custom function.

      -
      - - - -
      - (void)resultErrorTooBigInContext:(void *)context
      - - - -
      -

      Parameters

      - - - - - - - -
      context

      The context to which the error will be returned.

      -
      - - - - - - - -
      -

      Discussion

      -

      Report that string or BLOB is too long to represent in custom function.

      -
      - - - - - -
      -

      See Also

      - -
      - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - - -

      Date formatter

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)getSchema;
      + +
      +
      +

      Swift

      +
      func getSchema() -> FMResultSet?
      + +
      +
      +
      +

      Return Value

      +

      FMResultSet of schema; nil on error.

      +
      + +
    + +
  • +
    + + + + -getTableSchema: + +
    +
    +
    +
    +
    +
    +

    The schema of the database.

    + +

    This will be the schema for a particular table as report by SQLite PRAGMA, for example:

    +
    PRAGMA table_info('employees')
    +
    -
    -
    - -

    + storeableDateFormat: -

    +

    This will report:

    -
    -
    - -
    - - -
    -

    Generate an NSDateFormatter that won’t be broken by permutations of timezones or locales.

    -
    - - - -
    + (NSDateFormatter *)storeableDateFormat:(NSString *)format
    - - - -
    -

    Parameters

    - - - - - - - -
    format

    A valid NSDateFormatter format string.

    -
    - - - -
    -

    Return Value

    -

    A NSDateFormatter that can be used for converting dates to strings and vice versa.

    -
    - - - - - -
    -

    Discussion

    -

    Generate an NSDateFormatter that won’t be broken by permutations of timezones or locales.

    +
      +
    • cid - The column ID number
    • +
    • name - The name of the column
    • +
    • type - The data type specified for the column
    • +
    • notnull - whether the field is defined as NOT NULL (i.e. values required)
    • +
    • dflt_value - The default value for the column
    • +
    • pk - Whether the field is part of the primary key of the table

    • +
    +

    See

    +

    table_info

    -

    Use this method to generate values to set the dateFormat property.

    +
    -

    Example:

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (FMResultSet *_Nullable)getTableSchema:(nonnull NSString *)tableName;
    + +
    +
    +

    Swift

    +
    func getTableSchema(_ tableName: String) -> FMResultSet?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + tableName + + +
    +

    The name of the table for whom the schema will be returned.

    +
    +
    +
    +
    +

    Return Value

    +

    FMResultSet of schema; nil on error.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Test to see if particular column exists for particular table in database

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)columnExists:(nonnull NSString *)columnName
    +     inTableWithName:(nonnull NSString *)tableName;
    + +
    +
    +

    Swift

    +
    func columnExists(_ columnName: String, inTableWithName tableName: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + columnName + + +
    +

    The name of the column.

    +
    +
    + + tableName + + +
    +

    The name of the table.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if column exists in table in question; NO otherwise.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Deprecated

    +

    Use columnExists:inTableWithName: instead

    + +
    +
    +

    Test to see if particular column exists for particular table in database

    +
    +

    See

    +

    columnExists:inTableWithName:

    + +
    +

    Warning

    +

    Deprecated - use <columnExists:inTableWithName:> instead.

    -
    myDB.dateFormat = [FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    -

    Warning: Note that NSDateFormatter is not thread-safe, so the formatter generated by this method should be assigned to only one FMDB instance and should not be used for other purposes.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    - -
    -
    - -
    - - -
    -

    Test whether the database has a date formatter assigned.

    -
    - - - -
    - (BOOL)hasDateFormatter
    - - - - - -
    -

    Return Value

    -

    YES if there is a date formatter; NO if not.

    -
    - - - - - -
    -

    Discussion

    -

    Test whether the database has a date formatter assigned.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    - +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)columnExists:(nonnull NSString *)tableName
    +          columnName:(nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    func columnExists(_ tableName: String, columnName: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + columnName + + +
    +

    The name of the column.

    +
    +
    + + tableName + + +
    +

    The name of the table.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if column exists in table in question; NO otherwise.

    +
    + + +
  • +
  • +
    + + + + -validateSQL:error: + +
    +
    +
    +
    +
    +
    +

    Validate SQL statement

    + +

    This validates SQL statement by performing sqlite3_prepare_v2, but not returning the results, but instead immediately calling sqlite3_finalize.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)validateSQL:(nonnull NSString *)sql
    +              error:(NSError *_Nullable *_Nullable)error;
    + +
    +
    +

    Swift

    +
    func validateSQL(_ sql: String) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + sql + + +
    +

    The SQL statement being validated.

    +
    +
    + + error + + +
    +

    This is a pointer to a NSError object that will receive the autoreleased NSError object if there was any error. If this is nil , no NSError result will be returned.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if validation succeeded without incident; NO otherwise.

    +
    +
    +
    +
  • + + +
    +
    + + +
    + +

    Application identifier tasks

    +
    +
    +
      +
    • +
      + + + + applicationID + +
      +
      +
      +
      +
      +
      +

      Retrieve application ID

      +
      +

      See

      +

      setApplicationID:

      -
      -
      - -
      - - -
      -

      Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.

      -
      - - - -
      - (void)setDateFormat:(NSDateFormatter *)format
      - - - -
      -

      Parameters

      - - - - - - - -
      format

      Set to nil to use UNIX timestamps. Defaults to nil. Should be set using a formatter generated using FMDatabase::storeableDateFormat.

      -
      - - - - - - - -
      -

      Discussion

      -

      Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.

      Warning: Note there is no direct getter for the NSDateFormatter, and you should not use the formatter you pass to FMDB for other purposes, as NSDateFormatter is not thread-safe.

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Convert the supplied NSString to NSDate, using the current database formatter.

      -
      - - - -
      - (NSDate *_Nullable)dateFromString:(NSString *)s
      - - - -
      -

      Parameters

      - - - - - - - -
      s

      NSString to convert to NSDate.

      -
      - - - -
      -

      Return Value

      -

      The NSDate object; or nil if no formatter is set.

      -
      - - - - - -
      -

      Discussion

      -

      Convert the supplied NSString to NSDate, using the current database formatter.

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) uint32_t applicationID;
      + +
      +
      +

      Swift

      +
      var applicationID: UInt32 { get set }
      + +
      +
      +
      +

      Return Value

      +

      The uint32_t numeric value of the application ID.

      +
      +
      +
      +
    • +
    • +
      + + + + applicationIDString + +
      +
      +
      +
      +
      +
      +

      Retrieve application ID string

      +
      +

      See

      + setApplicationIDString: + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, retain) NSString *_Nonnull applicationIDString;
      + +
      +
      +

      Swift

      +
      var applicationIDString: String { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    user version identifier tasks

    +
    +
    +
      +
    • +
      + + + + userVersion + +
      +
      +
      +
      +
      +
      +

      Retrieve user version

      +
      +

      See

      + setUserVersion: + +
      -
      -
      - -
      - - -
      -

      Convert the supplied NSDate to NSString, using the current database formatter.

      -
      - - - -
      - (NSString *)stringFromDate:(NSDate *)date
      - - - -
      -

      Parameters

      - - - - - - - -
      date

      NSDate of date to convert to NSString.

      -
      - - - -
      -

      Return Value

      -

      The NSString representation of the date; nil if no formatter is set.

      -
      - - - - - -
      -

      Discussion

      -

      Convert the supplied NSDate to NSString, using the current database formatter.

      -
      - - - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) uint32_t userVersion;
      + +
      +
      +

      Swift

      +
      var userVersion: UInt32 { get set }
      + +
      +
      +
      +
      +
    • +
    +
    + + + +
    + + - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/html/Classes/FMDatabasePool.html b/html/Classes/FMDatabasePool.html index e3db61b9..81dac6a5 100644 --- a/html/Classes/FMDatabasePool.html +++ b/html/Classes/FMDatabasePool.html @@ -1,1610 +1,1467 @@ - - - - - FMDatabasePool Class Reference - - - - - - -
    -
    - -

    - FMDB -

    - -

    - ccgus -

    - -
    -
    - - - -
    -
    -
    -
    -

    FMDatabasePool Class Reference

    - - -
    - - - - - - - -
    Inherits fromNSObject
    Declared inFMDatabasePool.h
    - - - - -
    - -

    Overview

    -

    Pool of FMDatabase objects.

    - -

    See also

    + + + FMDatabasePool Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDatabasePool

    +
    +
    +
    @interface FMDatabasePool : NSObject
    + +
    +
    +

    Pool of FMDatabase objects.

    + +

    See also

    -

    Warning: Before using FMDatabasePool, please consider using FMDatabaseQueue instead.

    +
  • FMDatabaseQueue
  • +
  • FMDatabase

  • +
    +

    Warning

    +

    Before using FMDatabasePool , please consider using FMDatabaseQueue instead.

    -

    If you really really really know what you’re doing and 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!

    - -

    For an example on deadlocking, search for: -ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD -in the main.m file.

    -
    - - - - - -
    - - - - -

    Other Methods

    - -
    -
    - -

      path -

    - -
    -
    - -
    - - -
    -

    Database path

    -
    - - - -
    @property (atomic, copy, nullable) NSString *path
    - - - - - - - - - -
    -

    Discussion

    -

    Database path

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    Delegate object

    -
    - - - -
    @property (atomic, assign, nullable) id delegate
    - - - - - - - - - -
    -

    Discussion

    -

    Delegate object

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

      maximumNumberOfDatabasesToCreate -

    - -
    -
    - -
    - - -
    -

    Maximum number of databases to create

    -
    - - - -
    @property (atomic, assign) NSUInteger maximumNumberOfDatabasesToCreate
    - - - - - - - - - -
    -

    Discussion

    -

    Maximum number of databases to create

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

      openFlags -

    - -
    -
    - -
    - - -
    -

    Open flags

    -
    - - - -
    @property (atomic, readonly) int openFlags
    - - - - - - - - - -
    -

    Discussion

    -

    Open flags

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

      vfsName -

    - -
    -
    - -
    - - -
    -

    Custom virtual file system name

    -
    - - - -
    @property (atomic, copy, nullable) NSString *vfsName
    - - - - - - - - - -
    -

    Discussion

    -

    Custom virtual file system name

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - - - -

    Initialization

    - -
    -
    - -

    + databasePoolWithPath: -

    - -
    -
    - -
    - - -
    -

    Create pool using path.

    -
    - - - -
    + (instancetype)databasePoolWithPath:(NSString *_Nullable)aPath
    - - - -
    -

    Parameters

    - - - - - - - -
    aPath

    The file path of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using path.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    + databasePoolWithURL: -

    - -
    -
    - -
    - - -
    -

    Create pool using file URL.

    -
    - - - -
    + (instancetype)databasePoolWithURL:(NSURL *_Nullable)url
    - - - -
    -

    Parameters

    - - - - - - - -
    url

    The file NSURL of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using file URL.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    + databasePoolWithPath:flags: -

    -
    -
    - -
    - - -
    -

    Create pool using path and specified flags

    -
    - - - -
    + (instancetype)databasePoolWithPath:(NSString *_Nullable)aPath flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    aPath

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using path and specified flags

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    + databasePoolWithURL:flags: -

    - -
    -
    - -
    - - -
    -

    Create pool using file URL and specified flags

    -
    - - - -
    + (instancetype)databasePoolWithURL:(NSURL *_Nullable)url flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    url

    The file NSURL of the database.

    openFlags

    Flags passed to the openWithFlags method of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using file URL and specified flags

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    – initWithPath: -

    - -
    -
    - -
    - - -
    -

    Create pool using path.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)aPath
    - - - -
    -

    Parameters

    - - - - - - - -
    aPath

    The file path of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using path.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    – initWithURL: -

    - -
    -
    - -
    - - -
    -

    Create pool using file URL.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url
    - - - -
    -

    Parameters

    - - - - - - - -
    url

    The file `NSURL of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using file URL.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    – initWithPath:flags: -

    - -
    -
    - -
    - - -
    -

    Create pool using path and specified flags.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)aPath flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    aPath

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using path and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    – initWithURL:flags: -

    +

    If you really really really know what you’re doing and 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!

    -
    -
    - -
    - - -
    -

    Create pool using file URL and specified flags.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    url

    The file NSURL of the database.

    openFlags

    Flags passed to the openWithFlags method of the database

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using file URL and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    – initWithPath:flags:vfs: -

    - -
    -
    - -
    - - -
    -

    Create pool using path and specified flags.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)aPath flags:(int)openFlags vfs:(NSString *_Nullable)vfsName
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    aPath

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database

    vfsName

    The name of a custom virtual file system

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using path and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    – initWithURL:flags:vfs: -

    - -
    -
    - -
    - - -
    -

    Create pool using file URL and specified flags.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags vfs:(NSString *_Nullable)vfsName
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    url

    The file NSURL of the database.

    openFlags

    Flags passed to the openWithFlags method of the database

    vfsName

    The name of a custom virtual file system

    -
    - - - -
    -

    Return Value

    -

    The FMDatabasePool object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create pool using file URL and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

    + databaseClass +

    For an example on deadlocking, search for: + ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD + in the main.m file.

    + +

    +
    +
    +
      +
    • +
      + + + + path + +
      +
      +
      +
      +
      +
      +

      Database path

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (copy, nullable) NSString *path;
      + +
      +
      +

      Swift

      +
      var path: String? { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + delegate + +
      +
      +
      +
      +
      +
      +

      Delegate object

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nullable) id delegate;
      + +
      +
      +

      Swift

      +
      unowned(unsafe) var delegate: AnyObject? { get set }
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Maximum number of databases to create

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property NSUInteger maximumNumberOfDatabasesToCreate;
      + +
      +
      +

      Swift

      +
      var maximumNumberOfDatabasesToCreate: UInt { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + openFlags + +
      +
      +
      +
      +
      +
      +

      Open flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (readonly) int openFlags;
      + +
      +
      +

      Swift

      +
      var openFlags: Int32 { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + vfsName + +
      +
      +
      +
      +
      +
      +

      Custom virtual file system name

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (copy, nullable) NSString *vfsName;
      + +
      +
      +

      Swift

      +
      var vfsName: String? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Initialization

    - -
    -
    - -
    - - -
    -

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    -
    - - - -
    + (Class)databaseClass
    - - - - - -
    -

    Return Value

    -

    The Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    -
    - - - - - -
    -

    Discussion

    -

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Create pool using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + +databasePoolWithURL: + +
      +
      +
      +
      +
      +
      +

      Create pool using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithURL:(NSURL *_Nullable)url;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using path and specified flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithPath:(NSString *_Nullable)aPath
      +                                       flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using file URL and specified flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithURL:(NSURL *_Nullable)url
      +                                      flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath: + +
      +
      +
      +
      +
      +
      +

      Create pool using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +

      Swift

      +
      init(path aPath: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL: + +
      +
      +
      +
      +
      +
      +

      Create pool using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url;
      + +
      +
      +

      Swift

      +
      init(url: URL?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file `NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath:flags: + +
      +
      +
      +
      +
      +
      +

      Create pool using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)aPath
      +                               flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init(path aPath: String?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL:flags: + +
      +
      +
      +
      +
      +
      +

      Create pool using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init(url: URL?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)aPath
      +                               flags:(int)openFlags
      +                                 vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init(path aPath: String?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url
      +                              flags:(int)openFlags
      +                                vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init(url: URL?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + +databaseClass + +
      +
      +
      +
      +
      +
      +

      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.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabasePool.h

      -
      - - -
      -
    -
    -
    - - - -

    Keeping track of checked in/out databases

    - -
    -
    - -

      countOfCheckedInDatabases -

    - -
    -
    - -
    - - -
    -

    Number of checked-in databases in pool

    -
    - - - -
    @property (nonatomic, readonly) NSUInteger countOfCheckedInDatabases
    - - - - - - - - - -
    -

    Discussion

    -

    Number of checked-in databases in pool

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    - -

      countOfCheckedOutDatabases -

    -
    -
    - -
    - - -
    -

    Number of checked-out databases in pool

    -
    - - - -
    @property (nonatomic, readonly) NSUInteger countOfCheckedOutDatabases
    - - - - - - - - - -
    -

    Discussion

    -

    Number of checked-out databases in pool

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    + (nonnull Class)databaseClass;
    + +
    +
    +

    Swift

    +
    class func databaseClass() -> AnyClass
    + +
    +
    +
    +

    Return Value

    +

    The Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    +
    +
    +
    + + +
    +
    +
    + + +
    + +

    Keeping track of checked in/out databases

    - -
    -
    - -
    - - -
    -

    Total number of databases in pool

    -
    - - - -
    @property (nonatomic, readonly) NSUInteger countOfOpenDatabases
    - - - - - - - - - -
    -

    Discussion

    -

    Total number of databases in pool

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabasePool.h

    -
    - - -
    -
    -
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Number of checked-in databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) NSUInteger countOfCheckedInDatabases;
      + +
      +
      +

      Swift

      +
      var countOfCheckedInDatabases: UInt { get }
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Number of checked-out databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) NSUInteger countOfCheckedOutDatabases;
      + +
      +
      +

      Swift

      +
      var countOfCheckedOutDatabases: UInt { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + countOfOpenDatabases + +
      +
      +
      +
      +
      +
      +

      Total number of databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) NSUInteger countOfOpenDatabases;
      + +
      +
      +

      Swift

      +
      var countOfOpenDatabases: UInt { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -releaseAllDatabases + +
      +
      +
      +
      +
      +
      +

      Release all databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)releaseAllDatabases;
      + +
      +
      +

      Swift

      +
      func releaseAllDatabases()
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Perform database operations in pool

    +
    +
    +
      +
    • +
      + + + + -inDatabase: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDatabase:(nonnull void (^)(FMDatabase *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDatabase(_ block: (FMDatabase) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inTransaction: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using transaction.

      +
      +

      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.

      -
      -
      - -
      - - -
      -

      Release all databases in pool

      -
      - - - -
      - (void)releaseAllDatabases
      - - - - - - - - - -
      -

      Discussion

      -

      Release all databases in pool

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabasePool.h

      -
      - - -
      -
      -
      - - - -

      Perform database operations in pool

      -
      -
      - -

      – inDatabase: -

      - -
      -
      - -
      - - -
      -

      Synchronously perform database operations in pool.

      -
      - - - -
      - (void)inDatabase:(void ( ^ ) ( FMDatabase *db ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the FMDatabasePool pool.

      -
      - - - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations in pool.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabasePool.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                        BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using exclusive transaction.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inExclusiveTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inExclusiveTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using deferred transaction.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDeferredTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDeferredTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using immediate transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inImmediateTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inImmediateTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inSavePoint: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using save point.

      +
      +

      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 startSavePointWithName:error: instead.

      -
      -
      - -
      - - -
      -

      Synchronously perform database operations in pool using transaction.

      -
      - - - -
      - (void)inTransaction:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the FMDatabasePool pool.

      -
      - - - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations in pool using transaction.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabasePool.h

      -
      - - -
      -
      -
      - -

      – inDeferredTransaction: -

      - -
      -
      - -
      - - -
      -

      Synchronously perform database operations in pool using deferred transaction.

      -
      - - - -
      - (void)inDeferredTransaction:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the FMDatabasePool pool.

      -
      - - - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations in pool using deferred transaction.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabasePool.h

      -
      - - -
      -
      -
      -
      -
      - -
      - - -
      -

      Synchronously perform database operations in pool using save point.

      -
      - - - -
      - (NSError *_Nullable)inSavePoint:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the FMDatabasePool pool.

      -
      - - - -
      -

      Return Value

      -

      NSError object if error; nil if successful.

      -
      - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations in pool using save point.

      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.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabasePool.h

      -
      - - -
      -
      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSError *_Nullable)inSavePoint:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                    BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inSavePoint(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void) -> Error?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +

      Return Value

      +

      NSError object if error; nil if successful.

      +
      +
      +
      +
    • +
    +
    + + + +
    + + - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/html/Classes/FMDatabaseQueue.html b/html/Classes/FMDatabaseQueue.html index 93bd5b32..72a58055 100644 --- a/html/Classes/FMDatabaseQueue.html +++ b/html/Classes/FMDatabaseQueue.html @@ -1,1437 +1,1617 @@ - - - - - FMDatabaseQueue Class Reference - - - - - - -
    -
    - -

    - FMDB -

    - -

    - ccgus -

    - -
    -
    - - - -
    -
    -
    -
    -

    FMDatabaseQueue Class Reference

    - - -
    - - - - - - - -
    Inherits fromNSObject
    Declared inFMDatabaseQueue.h
    - - - - -
    - -

    Overview

    -

    To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue.

    - -

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time.

    - -

    Instead, use FMDatabaseQueue. Here’s how to use it:

    + + + FMDatabaseQueue Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDatabaseQueue

    +
    +
    +
    @interface FMDatabaseQueue : NSObject
    + +
    +
    +

    To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue .

    + +

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time.

    + +

    Instead, use FMDatabaseQueue . Here’s how to use it:

    First, make your queue.

    - -
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
    +
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
     

    Then use it like so:

    - -
    [queue inDatabase:^(FMDatabase *db) {
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    -
    -    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    -    while ([rs next]) {
    -        //…
    -    }
    -}];
    +
    [queue inDatabase:^(FMDatabase *db) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    +
    +    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    +    while ([rs next]) {
    +        //…
    +    }
    +}];
     

    An easy way to wrap things up in a transaction can be done like this:

    - -
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    -
    -    if (whoopsSomethingWrongHappened) {
    -        *rollback = YES;
    -        return;
    -    }
    -    // etc…
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    -}];
    +
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    +
    +    // if (whoopsSomethingWrongHappened) {
    +    //     *rollback = YES;
    +    //     return;
    +    // }
    +
    +    // etc…
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    +}];
     
    -

    FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue’s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

    - -

    See also

    - - -

    Warning: Do not instantiate a single FMDatabase object and use it across multiple threads. Use FMDatabaseQueue instead.

    Warning: The calls to FMDatabaseQueue’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

    -
    - - - - - -
    - - - - -

    Other Methods

    - -
    -
    - -

      path -

    - -
    -
    - -
    - - -
    -

    Path of database

    -
    - - - -
    @property (atomic, retain, nullable) NSString *path
    - - - - - - - - - -
    -

    Discussion

    -

    Path of database

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

      openFlags -

    - -
    -
    - -
    - - -
    -

    Open flags

    -
    - - - -
    @property (atomic, readonly) int openFlags
    - - - - - - - - - -
    -

    Discussion

    -

    Open flags

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

      vfsName -

    - -
    -
    - -
    - - -
    -

    Custom virtual file system name

    -
    - - - -
    @property (atomic, copy, nullable) NSString *vfsName
    +

    FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue ‘s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

    +
    +

    Warning

    +

    Do not instantiate a single FMDatabase object and use it across multiple threads. Use FMDatabaseQueue instead.

    - - +
    +

    Warning

    +

    The calls to FMDatabaseQueue ’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

    - - - - - -
    -

    Discussion

    -

    Custom virtual file system name

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - - - -

    Initialization, opening, and closing of queue

    - -
    -
    - -

    + databaseQueueWithPath: -

    - -
    -
    - -
    - - -
    -

    Create queue using path.

    -
    - - - -
    + (instancetype)databaseQueueWithPath:(NSString *_Nullable)aPath
    - - - -
    -

    Parameters

    - - - - - - - -
    aPath

    The file path of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using path.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    + databaseQueueWithURL: -

    - -
    -
    - -
    - - -
    -

    Create queue using file URL.

    -
    - - - -
    + (instancetype)databaseQueueWithURL:(NSURL *_Nullable)url
    - - - -
    -

    Parameters

    - - - - - - - -
    url

    The file NSURL of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using file URL.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    + databaseQueueWithPath:flags: -

    - -
    -
    - -
    - - -
    -

    Create queue using path and specified flags.

    -
    - - - -
    + (instancetype)databaseQueueWithPath:(NSString *_Nullable)aPath flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    aPath

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using path and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    + databaseQueueWithURL:flags: -

    - -
    -
    - -
    - - -
    -

    Create queue using file URL and specified flags.

    -
    - - - -
    + (instancetype)databaseQueueWithURL:(NSURL *_Nullable)url flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    url

    The file NSURL of the database.

    openFlags

    Flags passed to the openWithFlags method of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using file URL and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    – initWithPath: -

    - -
    -
    - -
    - - -
    -

    Create queue using path.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)aPath
    - - - -
    -

    Parameters

    - - - - - - - -
    aPath

    The file path of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using path.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    – initWithURL: -

    - -
    -
    - -
    - - -
    -

    Create queue using file URL.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url
    - - - -
    -

    Parameters

    - - - - - - - -
    url

    The file `NSURL of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using file URL.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    – initWithPath:flags: -

    - -
    -
    - -
    - - -
    -

    Create queue using path and specified flags.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)aPath flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    aPath

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using path and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    – initWithURL:flags: -

    - -
    -
    - -
    - - -
    -

    Create queue using file URL and specified flags.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    url

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database.

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using file URL and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    – initWithPath:flags:vfs: -

    - -
    -
    - -
    - - -
    -

    Create queue using path and specified flags.

    -
    - - - -
    - (instancetype)initWithPath:(NSString *_Nullable)aPath flags:(int)openFlags vfs:(NSString *_Nullable)vfsName
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    aPath

    The file path of the database.

    openFlags

    Flags passed to the openWithFlags method of the database

    vfsName

    The name of a custom virtual file system

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using path and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    – initWithURL:flags:vfs: -

    -
    -
    - -
    - - -
    -

    Create queue using file URL and specified flags.

    -
    - - - -
    - (instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags vfs:(NSString *_Nullable)vfsName
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    url

    The file `NSURL of the database.

    openFlags

    Flags passed to the openWithFlags method of the database

    vfsName

    The name of a custom virtual file system

    -
    - - - -
    -

    Return Value

    -

    The FMDatabaseQueue object. nil on error.

    -
    - - - - - -
    -

    Discussion

    -

    Create queue using file URL and specified flags.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    - -

    + databaseClass +

    @sa FMDatabase

    + + +
    +
    +
      +
    • +
      + + + + path + +
      +
      +
      +
      +
      +
      +

      Path of database

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) NSString *path;
      + +
      +
      +

      Swift

      +
      var path: String? { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + openFlags + +
      +
      +
      +
      +
      +
      +

      Open flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (readonly) int openFlags;
      + +
      +
      +

      Swift

      +
      var openFlags: Int32 { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + vfsName + +
      +
      +
      +
      +
      +
      +

      Custom virtual file system name

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (copy, nullable) NSString *vfsName;
      + +
      +
      +

      Swift

      +
      var vfsName: String? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Initialization, opening, and closing of queue

    - -
    -
    - -
    - - -
    -

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    -
    - - - -
    + (Class)databaseClass
    - - - - - -
    -

    Return Value

    -

    The Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    -
    - - - - - -
    -

    Discussion

    -

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Create queue using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithURL:(NSURL *_Nullable)url;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithPath:(NSString *_Nullable)aPath
      +                                         flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithURL:(NSURL *_Nullable)url
      +                                        flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath: + +
      +
      +
      +
      +
      +
      +

      Create queue using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +

      Swift

      +
      init?(path aPath: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL: + +
      +
      +
      +
      +
      +
      +

      Create queue using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithURL:(NSURL *_Nullable)url;
      + +
      +
      +

      Swift

      +
      init?(url: URL?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file `NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath:flags: + +
      +
      +
      +
      +
      +
      +

      Create queue using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithPath:(NSString *_Nullable)aPath
      +                                flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init?(path aPath: String?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL:flags: + +
      +
      +
      +
      +
      +
      +

      Create queue using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init?(url: URL?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithPath:(NSString *_Nullable)aPath
      +                                flags:(int)openFlags
      +                                  vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init?(path aPath: String?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithURL:(NSURL *_Nullable)url
      +                               flags:(int)openFlags
      +                                 vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init?(url: URL?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + url + + +
      +

      The file `NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + +databaseClass + +
      +
      +
      +
      +
      +
      +

      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.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabaseQueue.h

      -
      - - -
      -
    -
    - -

    – close -

    -
    -
    - -
    - - -
    -

    Close database used by queue.

    -
    - - - -
    - (void)close
    - - - - - - - - - -
    -

    Discussion

    -

    Close database used by queue.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    + (nonnull Class)databaseClass;
    + +
    +
    +

    Swift

    +
    class func databaseClass() -> AnyClass
    + +
    +
    +
    +

    Return Value

    +

    The Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    +
    +
    +

    + +
  • +
    + + + + -close + +
    +
    +
    +
    +
    +
    +

    Close database used by queue.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)close;
    + +
    +
    +

    Swift

    +
    func close()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + -interrupt + +
    +
    +
    +
    +
    +
    +

    Interupt pending database operation.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (void)interrupt;
    + +
    +
    +

    Swift

    +
    func interrupt()
    + +
    +
    +
    +
    +
  • + +
    +
    +
    + + +
    + +

    Dispatching database operations to queue

    +
    +
    +
      +
    • +
      + + + + -inDatabase: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDatabase:(nonnull void (^)(FMDatabase *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDatabase(_ block: (FMDatabase) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inTransaction: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using transactions.

      +
      +

      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.

      -
      -
      - -
      - - -
      -

      Interupt pending database operation.

      -
      - - - -
      - (void)interrupt
      - - - - - - - - - -
      -

      Discussion

      -

      Interupt pending database operation.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabaseQueue.h

      -
      - - -
      -
      -
      - - -

      Dispatching database operations to queue

      - -
      -
      - -

      – inDatabase: -

      - -
      -
      - -
      - - -
      -

      Synchronously perform database operations on queue.

      -
      - - - -
      - (void)inDatabase:(void ( ^ ) ( FMDatabase *db ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the queue of FMDatabaseQueue

      -
      - - - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations on queue.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabaseQueue.h

      -
      - - -
      -
      -
      - -

      – inTransaction: -

      - -
      -
      - -
      - - -
      -

      Synchronously perform database operations on queue, using transactions.

      -
      - - - -
      - (void)inTransaction:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the queue of FMDatabaseQueue

      -
      - - - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations on queue, using transactions.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabaseQueue.h

      -
      - - -
      -
      -
      - -

      – inDeferredTransaction: -

      - -
      -
      - -
      - - -
      -

      Synchronously perform database operations on queue, using deferred transactions.

      -
      - - - -
      - (void)inDeferredTransaction:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))block
      - - - -
      -

      Parameters

      - - - - - - - -
      block

      The code to be run on the queue of FMDatabaseQueue

      -
      - - - - - - - -
      -

      Discussion

      -

      Synchronously perform database operations on queue, using deferred transactions.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabaseQueue.h

      -
      - - -
      -
      -
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                        BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using deferred transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDeferredTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDeferredTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using exclusive transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inExclusiveTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inExclusiveTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using immediate transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inImmediateTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inImmediateTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inSavePoint: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations using save point.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSError *_Nullable)inSavePoint:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                    BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inSavePoint(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void) -> Error?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Checkpoint

    - -
    -
    - -
    - - -
    -

    Synchronously perform database operations using save point.

    -
    - - - -
    - (NSError *_Nullable)inSavePoint:(void ( ^ ) ( FMDatabase *db , BOOL *rollback ))block
    - - - -
    -

    Parameters

    - - - - - - - -
    block

    The code to be run on the queue of FMDatabaseQueue

    -
    - - - - - - - -
    -

    Discussion

    -

    Synchronously perform database operations using save point.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabaseQueue.h

    -
    - - -
    -
    +
    +
    +
      +
    • +
      + + + + -checkpoint:error: + +
      +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +              name:(NSString *_Nullable)name
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +               name:(NSString *_Nullable)name
      +      logFrameCount:(int *_Nullable)logFrameCount
      +    checkpointCount:(int *_Nullable)checkpointCount
      +              error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?, logFrameCount: UnsafeMutablePointer<Int32>?, checkpointCount: UnsafeMutablePointer<Int32>?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      + + logFrameCount + + +
      +

      If not NULL, then this is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.

      +
      +
      + + checkpointCount + + +
      +

      If not NULL, then this is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO.

      +
      +
      +
      +
    • +
    +
    + + + +
    + + - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/html/Classes/FMResultSet.html b/html/Classes/FMResultSet.html index 4e4a1592..d052154b 100644 --- a/html/Classes/FMResultSet.html +++ b/html/Classes/FMResultSet.html @@ -1,2873 +1,2662 @@ - - - - - FMResultSet Class Reference - - - - - - -
    -
    - -

    - FMDB -

    - -

    - ccgus -

    - -
    -
    - - - -
    -
    -
    -
    -

    FMResultSet Class Reference

    - - -
    - - - - - - - -
    Inherits fromNSObject
    Declared inFMResultSet.h
    - - - - -
    - -

    Overview

    -

    Represents the results of executing a query on an FMDatabase.

    - -

    See also

    + + + FMResultSet Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMResultSet

    +
    +
    +
    @interface FMResultSet : NSObject
    + +
    +
    +

    Represents the results of executing a query on an FMDatabase .

    + +

    See also

    -
    - - - - - -
    - - - - -

    Properties

    - -
    -
    - -

      query + +
    +
    +
      +
    • +
      + + + + parentDB + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, retain, nullable) FMDatabase *parentDB
      + +
      +
      +

      Swift

      +
      var parentDB: FMDatabase? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Properties

    - -
    -
    - -
    - - -
    -

    Executed query

    -
    - - - -
    @property (atomic, retain, nullable) NSString *query
    - - - - - - - - - -
    -

    Discussion

    -

    Executed query

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +
      +
    • +
      + + + + query + +
      +
      +
      +
      +
      +
      +

      Executed query

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) NSString *query;
      + +
      +
      +

      Swift

      +
      var query: String? { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + columnNameToIndexMap + +
      +
      +
      +
      +
      +
      +

      NSMutableDictionary mapping column names to numeric index

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (readonly) NSMutableDictionary *_Nonnull columnNameToIndexMap;
      + +
      +
      +

      Swift

      +
      var columnNameToIndexMap: NSMutableDictionary { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + statement + +
      +
      +
      +
      +
      +
      +

      FMStatement used by result set.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) FMStatement *statement;
      + +
      +
      +

      Swift

      +
      var statement: FMStatement? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Creating and closing a result set

    - -
    -
    - -
    - - -
    -

    NSMutableDictionary mapping column names to numeric index

    -
    - - - -
    @property (readonly) NSMutableDictionary *columnNameToIndexMap
    - - - - - - - - - -
    -

    Discussion

    -

    NSMutableDictionary mapping column names to numeric index

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +
      +
    • +
      + + + + -close + +
      +
      +
      +
      +
      +
      +

      Close result set

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)close;
      + +
      +
      +

      Swift

      +
      func close()
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Iterating through the result set

    +
    +
    +
      +
    • +
      + + + + -next + +
      +
      +
      +
      +
      +
      +

      Retrieve next row for result set.

      -
      -
      - -
      - - -
      -

      FMStatement used by result set.

      -
      - - - -
      @property (atomic, retain, nullable) FMStatement *statement
      - - - - - - - - - -
      -

      Discussion

      -

      FMStatement used by result set.

      -
      - - - - - - - -
      -

      Declared In

      -

      FMResultSet.h

      -
      - - -
      -
      -
      -
      - - - -

      Creating and closing database

      - -
      -
      - -

      + resultSetWithStatement:usingParentDatabase: -

      - -
      -
      - -
      - - -
      -

      Create result set from FMStatement

      -
      - - - -
      + (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase *)aDB
      - - - -
      -

      Parameters

      - - - - - - - - - - - - -
      statement

      A FMStatement to be performed

      aDB

      A FMDatabase to be used

      -
      - - - -
      -

      Return Value

      -

      A FMResultSet on success; nil on failure

      -
      - - - - - -
      -

      Discussion

      -

      Create result set from FMStatement

      -
      - - - - - - - -
      -

      Declared In

      -

      FMResultSet.h

      -
      - - -
      -
      -
      - -

      – close -

      - -
      -
      - -
      - - -
      -

      Close result set

      -
      - - - -
      - (void)close
      - - - - - - - - - -
      -

      Discussion

      -

      Close result set

      -
      - - - - - +

      You must always invoke next or nextWithError before attempting to access the values returned in a query, even if you’re only expecting one.

      +
      +

      See

      +

      hasAnotherRow

      - -
      -

      Declared In

      -

      FMResultSet.h

      -
      - - -
      -
      -
      - - - -

      Iterating through the result set

      - -
      -
      - -

      – next -

      - -
      -
      -
      - - -
      -

      Retrieve next row for result set.

      -
      - - - -
      - (BOOL)next
      - - - - - -
      -

      Return Value

      -

      YES if row successfully retrieved; NO if end of result set reached

      -
      - - - - - -
      -

      Discussion

      -

      Retrieve next row for result set.

      +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)next;
      + +
      +
      +

      Swift

      +
      func next() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if row successfully retrieved; NO if end of result set reached

      +
      +
    +

    + +
  • +
    + + + + -nextWithError: + +
    +
    +
    +
    +
    +
    +

    Retrieve next row for result set.

    You must always invoke next or nextWithError before attempting to access the values returned in a query, even if you’re only expecting one.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
  • -
    - -

    – nextWithError: -

    +
    +

    See

    +

    hasAnotherRow

    -
    -
    - -
    - - -
    -

    Retrieve next row for result set.

    -
    - - - -
    - (BOOL)nextWithError:(NSError *_Nullable *)outErr
    - - - -
    -

    Parameters

    - - - - - - - -
    outErr

    A ‘NSError’ object to receive any error object (if any).

    -
    - - - -
    -

    Return Value

    -

    ‘YES’ if row successfully retrieved; ‘NO’ if end of result set reached

    -
    - - - - - -
    -

    Discussion

    -

    Retrieve next row for result set.

    - -

    You must always invoke next or nextWithError before attempting to access the values returned in a query, even if you’re only expecting one.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – hasAnotherRow -

    - -
    -
    - -
    - - -
    -

    Did the last call to next succeed in retrieving another row?

    -
    - - - -
    - (BOOL)hasAnotherRow
    - - - - - -
    -

    Return Value

    -

    YES if the last call to next succeeded in retrieving another record; NO if not.

    -
    - - - - - -
    -

    Discussion

    -

    Did the last call to next succeed in retrieving another row?

    Warning: The hasAnotherRow method must follow a call to next. If the previous database interaction was something other than a call to next, then this method may return NO, whether there is another row of data or not.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - - - -

    Retrieving information from result set

    - -
    -
    - -

      columnCount -

    -
    -
    - -
    - - -
    -

    How many columns in result set

    -
    - - - -
    @property (nonatomic, readonly) int columnCount
    - - - - - -
    -

    Return Value

    -

    Integer value of the number of columns.

    -
    - - - - - -
    -

    Discussion

    -

    How many columns in result set

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – columnIndexForName: -

    - -
    -
    - -
    - - -
    -

    Column index for column name

    -
    - - - -
    - (int)columnIndexForName:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    Zero-based index for column.

    -
    - - - - - -
    -

    Discussion

    -

    Column index for column name

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – columnNameForIndex: -

    - -
    -
    - -
    - - -
    -

    Column name for column index

    -
    - - - -
    - (NSString *_Nullable)columnNameForIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    columnName NSString value of the name of the column.

    -
    - - - - - -
    -

    Discussion

    -

    Column name for column index

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – intForColumn: -

    - -
    -
    - -
    - - -
    -

    Result set integer value for column.

    -
    - - - -
    - (int)intForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    int value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set integer value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – intForColumnIndex: -

    - -
    -
    - -
    - - -
    -

    Result set integer value for column.

    -
    - - - -
    - (int)intForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    int value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set integer value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)nextWithError:(NSError *_Nullable *_Nullable)outErr;
    + +
    +
    +

    Swift

    +
    func nextWithError() throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + outErr + + +
    +

    A ‘NSError’ object to receive any error object (if any).

    +
    +
    +
    +
    +

    Return Value

    +

    ‘YES’ if row successfully retrieved; ‘NO’ if end of result set reached

    +
    + +
    + +
  • +
    + + + + -step + +
    +
    +
    +
    +
    +
    +

    Perform SQL statement.

    +
    +

    See

    +

    hasAnotherRow

    -
    -
    - -
    - - -
    -

    Result set long value for column.

    -
    - - - -
    - (long)longForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    long value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set long value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – longForColumnIndex: -

    - -
    -
    - -
    - - -
    -

    Result set long value for column.

    -
    - - - -
    - (long)longForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    long value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set long value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – longLongIntForColumn: -

    - -
    -
    - -
    - - -
    -

    Result set long long int value for column.

    -
    - - - -
    - (long long int)longLongIntForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    long long int value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set long long int value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – longLongIntForColumnIndex: -

    - -
    -
    - -
    - - -
    -

    Result set long long int value for column.

    -
    - - - -
    - (long long int)longLongIntForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    long long int value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set long long int value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – unsignedLongLongIntForColumn: -

    - -
    -
    - -
    - - -
    -

    Result set unsigned long long int value for column.

    -
    - - - -
    - (unsigned long long int)unsignedLongLongIntForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    unsigned long long int value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set unsigned long long int value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – unsignedLongLongIntForColumnIndex: -

    - -
    -
    - -
    - - -
    -

    Result set unsigned long long int value for column.

    -
    - - - -
    - (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    unsigned long long int value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set unsigned long long int value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – boolForColumn: -

    - -
    -
    - -
    - - -
    -

    Result set BOOL value for column.

    -
    - - - -
    - (BOOL)boolForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    BOOL value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set BOOL value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – boolForColumnIndex: -

    - -
    -
    - -
    - - -
    -

    Result set BOOL value for column.

    -
    - - - -
    - (BOOL)boolForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    BOOL value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set BOOL value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Result set double value for column.

    -
    - - - -
    - (double)doubleForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    double value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set double value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)step;
    + +
    +
    +

    Swift

    +
    func step() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    ‘YES’ if successful; ‘NO’ if not.

    +
    +
    +
    +
  • +
  • +
    + + + + -stepWithError: + +
    +
    +
    +
    +
    +
    +

    Perform SQL statement.

    +
    +

    See

    +

    hasAnotherRow

    -
    -
    - -
    - - -
    -

    Result set double value for column.

    -
    - - - -
    - (double)doubleForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    double value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set double value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Result set NSString value for column.

    -
    - - - -
    - (NSString *_Nullable)stringForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    String value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSString value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)stepWithError:(NSError *_Nullable *_Nullable)outErr;
    + +
    +
    +

    Swift

    +
    func stepWithError() throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + outErr + + +
    +

    A ‘NSError’ object to receive any error object (if any).

    +
    +
    +
    +
    +

    Return Value

    +

    ‘YES’ if successful; ‘NO’ if not.

    +
    +
    +
    +
  • +
  • +
    + + + + -hasAnotherRow + +
    +
    +
    +
    +
    +
    +

    Did the last call to <next> succeed in retrieving another row?

    +
    +

    See

    +

    next

    + +
    +

    Warning

    +

    The hasAnotherRow method must follow a call to <next>. If the previous database interaction was something other than a call to next, then this method may return NO, whether there is another row of data or not.

    -
    -
    - -
    - - -
    -

    Result set NSString value for column.

    -
    - - - -
    - (NSString *_Nullable)stringForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    String value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSString value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – dateForColumn: -

    - -
    -
    - -
    - - -
    -

    Result set NSDate value for column.

    -
    - - - -
    - (NSDate *_Nullable)dateForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    Date value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSDate value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Result set NSDate value for column.

    -
    - - - -
    - (NSDate *_Nullable)dateForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    Date value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSDate value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)hasAnotherRow;
    + +
    +
    +

    Swift

    +
    func hasAnotherRow() -> Bool
    + +
    +
    +
    +

    Return Value

    +

    ‘YES’ if there is another row; ‘NO’ if not.

    +
    +
    +
    +
  • + +
    +
    +
    + + +
    + +

    Retrieving information from result set

    - -
    -
    - -
    - - -
    -

    Result set NSData value for column.

    -
    - - - -
    - (NSData *_Nullable)dataForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    Data value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSData value for column.

    +
    +
    +
      +
    • +
      + + + + columnCount + +
      +
      +
      +
      +
      +
      +

      How many columns in result set

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) int columnCount;
      + +
      +
      +

      Swift

      +
      var columnCount: Int32 { get }
      + +
      +
      +
      +

      Return Value

      +

      Integer value of the number of columns.

      +
      +
      +
      +
    • +
    • +
      + + + + -columnIndexForName: + +
      +
      +
      +
      +
      +
      +

      Column index for column name

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)columnIndexForName:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func columnIndex(forName columnName: String) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Zero-based index for column.

      +
      +
      +
      +
    • +
    • +
      + + + + -columnNameForIndex: + +
      +
      +
      +
      +
      +
      +

      Column name for column index

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)columnNameForIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func columnName(for columnIdx: Int32) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      columnName NSString value of the name of the column.

      +
      +
      +
      +
    • +
    • +
      + + + + -intForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set integer value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)intForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func int(forColumn columnName: String) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      int value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -intForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set integer value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)intForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func int(forColumnIndex columnIdx: Int32) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      int value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -longForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set long value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long)longForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func long(forColumn columnName: String) -> Int
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      long value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -longForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set long value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long)longForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func long(forColumnIndex columnIdx: Int32) -> Int
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      long value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long long)longLongIntForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func longLongInt(forColumn columnName: String) -> Int64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long long)longLongIntForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func longLongInt(forColumnIndex columnIdx: Int32) -> Int64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set unsigned long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (unsigned long long)unsignedLongLongIntForColumn:
      +    (nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func unsignedLongLongInt(forColumn columnName: String) -> UInt64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      unsigned long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set unsigned long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (unsigned long long)unsignedLongLongIntForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func unsignedLongLongInt(forColumnIndex columnIdx: Int32) -> UInt64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      unsigned long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -boolForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set BOOL value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)boolForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func bool(forColumn columnName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      BOOL value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -boolForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set BOOL value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)boolForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func bool(forColumnIndex columnIdx: Int32) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      BOOL value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -doubleForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set double value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)doubleForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func double(forColumn columnName: String) -> Double
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      double value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set double value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)doubleForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func double(forColumnIndex columnIdx: Int32) -> Double
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      double value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -stringForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSString value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func string(forColumn columnName: String) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      String value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set NSString value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func string(forColumnIndex columnIdx: Int32) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      String value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dateForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSDate value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func date(forColumn columnName: String) -> Date?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Date value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dateForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set NSDate value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func date(forColumnIndex columnIdx: Int32) -> Date?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      Date value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dataForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSData value for column.

      This is useful when storing binary data in table (such as image or the like).

      -
      - - - - - - - -
      -

      Declared In

      -

      FMResultSet.h

      -
      - - -
      -
    -
    - -

    – dataForColumnIndex: -

    -
    -
    - -
    - - -
    -

    Result set NSData value for column.

    -
    - - - -
    - (NSData *_Nullable)dataForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    Data value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSData value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSData *_Nullable)dataForColumn:(nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    func data(forColumn columnName: String) -> Data?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnName + + +
    +

    NSString value of the name of the column.

    +
    +
    +
    +
    +

    Return Value

    +

    Data value of the result set’s column.

    +
    + +
    + +
  • +
    + + + + -dataForColumnIndex: + +
    +
    +
    +
    +
    +
    +

    Result set NSData value for column.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSData *_Nullable)dataForColumnIndex:(int)columnIdx;
    + +
    +
    +

    Swift

    +
    func data(forColumnIndex columnIdx: Int32) -> Data?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnIdx + + +
    +

    Zero-based index for column.

    +
    +
    +
    +
    +

    Return Value

    +

    Data value of the result set’s column.

    +
    +
    +
    +
  • +
  • +
    + + + + -UTF8StringForColumn: + +
    +
    +
    +
    +
    +
    +

    Result set (const unsigned char *) value for column.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (const unsigned char *_Nullable)UTF8StringForColumn:
    +    (nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    func utf8String(forColumn columnName: String) -> UnsafePointer<UInt8>?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnName + + +
    +

    NSString value of the name of the column.

    +
    +
    +
    +
    +

    Return Value

    +

    (const unsigned char *) value of the result set’s column.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Deprecated

    +

    Use UTF8StringForColumn instead

    + +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (const unsigned char * _Nullable)UTF8StringForColumnName:(NSString*)columnName __deprecated_msg("Use UTF8StringForColumn instead");
    + +
    +
    +

    Swift

    +
    func utf8String(forColumnName columnName: String) -> UnsafePointer<UInt8>?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Result set (const unsigned char *) value for column.

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (const unsigned char *_Nullable)UTF8StringForColumnIndex:(int)columnIdx;
    + +
    +
    +

    Swift

    +
    func utf8String(forColumnIndex columnIdx: Int32) -> UnsafePointer<UInt8>?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnIdx + + +
    +

    Zero-based index for column.

    +
    +
    +
    +
    +

    Return Value

    +

    (const unsigned char *) value of the result set’s column.

    +
    +
    +
    +
  • +
  • +
    + + + + -objectForColumn: + +
    +
    +
    +
    +
    +
    +

    Result set object for column.

    +
    +

    See

    +

    objectForKeyedSubscript:

    -
    -
    - -
    - - -
    -

    Result set (const unsigned char *) value for column.

    -
    - - - -
    - (const unsigned char *_Nullable)UTF8StringForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    (const unsigned char *) value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set (const unsigned char *) value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Result set (const unsigned char *) value for column.

    -
    - - - -
    - (const unsigned char *_Nullable)UTF8StringForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    (const unsigned char *) value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set (const unsigned char *) value for column.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (id _Nullable)objectForColumn:(nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    func object(forColumn columnName: String) -> Any?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnName + + +
    +

    Name of the column.

    +
    +
    +
    +
    +

    Return Value

    +

    Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

    +
    +
    +
    +
  • +
  • +
    + + + + -objectForColumnName: + +
    +
    +
    +
    +
    +
    +

    Deprecated

    +

    Use objectForColumn instead

    + +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (id _Nullable)objectForColumnName:(NSString*)columnName __deprecated_msg("Use objectForColumn instead");
    + +
    +
    +

    Swift

    +
    func object(forColumnName columnName: String) -> Any?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Result set object for column.

    +
    +

    See

    +

    objectAtIndexedSubscript:

    -
    -
    - -
    - - -
    -

    Result set object for column.

    -
    - - - -
    - (id _Nullable)objectForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    Name of the column.

    -
    - - - -
    -

    Return Value

    -

    Either NSNumber, NSString, NSData, or NSNull. If the column was NULL, this returns [NSNull null] object.

    -
    - - - - - -
    -

    Discussion

    -

    Result set object for column.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – objectForColumnIndex: -

    - -
    -
    - -
    - - -
    -

    Result set object for column.

    -
    - - - -
    - (id _Nullable)objectForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    Either NSNumber, NSString, NSData, or NSNull. If the column was NULL, this returns [NSNull null] object.

    -
    - - - - - -
    -

    Discussion

    -

    Result set object for column.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Result set object for column.

    -
    - - - -
    - (id _Nullable)objectForKeyedSubscript:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    Either NSNumber, NSString, NSData, or NSNull. If the column was NULL, this returns [NSNull null] object.

    -
    - - - - - -
    -

    Discussion

    -

    Result set object for column.

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (id _Nullable)objectForColumnIndex:(int)columnIdx;
    + +
    +
    +

    Swift

    +
    func object(forColumnIndex columnIdx: Int32) -> Any?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnIdx + + +
    +

    Zero-based index for column.

    +
    +
    +
    +
    +

    Return Value

    +

    Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Result set object for column.

    This method allows the use of the “boxed” syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:

    - -
    id result = rs[@"employee_name"];
    +
    id result = rs[@"employee_name"];
     

    This simplified syntax is equivalent to calling:

    - -
    id result = [rs objectForKeyedSubscript:@"employee_name"];
    +
    id result = [rs objectForKeyedSubscript:@"employee_name"];
     

    which is, it turns out, equivalent to calling:

    - -
    id result = [rs objectForColumnName:@"employee_name"];
    +
    id result = [rs objectForColumnName:@"employee_name"];
     
    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
  • -
    - -

    – objectAtIndexedSubscript: -

    -
    -
    - -
    - - -
    -

    Result set object for column.

    -
    - - - -
    - (id _Nullable)objectAtIndexedSubscript:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    Either NSNumber, NSString, NSData, or NSNull. If the column was NULL, this returns [NSNull null] object.

    -
    - - - - - -
    -

    Discussion

    -

    Result set object for column.

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (id _Nullable)objectForKeyedSubscript:(nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    subscript(columnName: String) -> Any? { get }
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnName + + +
    +

    NSString value of the name of the column.

    +
    +
    +
    +
    +

    Return Value

    +

    Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

    +
    + +
    + +
  • + +
    +
    +
    +
    +
    +

    Result set object for column.

    This method allows the use of the “boxed” syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:

    - -
    id result = rs[0];
    +
    id result = rs[0];
     

    This simplified syntax is equivalent to calling:

    - -
    id result = [rs objectForKeyedSubscript:0];
    +
    id result = [rs objectForKeyedSubscript:0];
     

    which is, it turns out, equivalent to calling:

    - -
    id result = [rs objectForColumnName:0];
    +
    id result = [rs objectForColumnName:0];
     
    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
  • -
    - -

    – dataNoCopyForColumn: -

    -
    -
    - -
    - - -
    -

    Result set NSData value for column.

    -
    - - - -
    - (NSData *_Nullable)dataNoCopyForColumn:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    Data value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSData value for column.

    Warning: If you are going to use this data after you iterate over the next row, or after you close the -result set, make sure to make a copy of the data first (or just use dataForColumn:/dataForColumnIndex:) -If you don’t, you’re going to be in a world of hurt when you try and use the data.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (id _Nullable)objectAtIndexedSubscript:(int)columnIdx;
    + +
    +
    +

    Swift

    +
    subscript(columnIdx: Int32) -> Any? { get }
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnIdx + + +
    +

    Zero-based index for column.

    +
    +
    +
    +
    +

    Return Value

    +

    Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

    +
    + +
    + +
  • +
    + + + + -dataNoCopyForColumn: + +
    +
    +
    +
    +
    +
    +

    Result set NSData value for column.

    +
    +

    Warning

    +

    If you are going to use this data after you iterate over the next row, or after you close the +result set, make sure to make a copy of the data first (or just use <dataForColumn:>/<dataForColumnIndex:>) +If you don’t, you’re going to be in a world of hurt when you try and use the data.

    -
    -
    - -
    - - -
    -

    Result set NSData value for column.

    -
    - - - -
    - (NSData *_Nullable)dataNoCopyForColumnIndex:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    Data value of the result set’s column.

    -
    - - - - - -
    -

    Discussion

    -

    Result set NSData value for column.

    Warning: If you are going to use this data after you iterate over the next row, or after you close the -result set, make sure to make a copy of the data first (or just use dataForColumn:/dataForColumnIndex:) -If you don’t, you’re going to be in a world of hurt when you try and use the data.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Is the column NULL?

    -
    - - - -
    - (BOOL)columnIndexIsNull:(int)columnIdx
    - - - -
    -

    Parameters

    - - - - - - - -
    columnIdx

    Zero-based index for column.

    -
    - - - -
    -

    Return Value

    -

    YES if column is NULL; NO if not NULL.

    -
    - - - - - -
    -

    Discussion

    -

    Is the column NULL?

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSData *_Nullable)dataNoCopyForColumn:(nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    func dataNoCopy(forColumn columnName: String) -> Data?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnName + + +
    +

    NSString value of the name of the column.

    +
    +
    +
    +
    +

    Return Value

    +

    Data value of the result set’s column.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Result set NSData value for column.

    +
    +

    Warning

    +

    If you are going to use this data after you iterate over the next row, or after you close the +result set, make sure to make a copy of the data first (or just use <dataForColumn:>/<dataForColumnIndex:>) +If you don’t, you’re going to be in a world of hurt when you try and use the data.

    -
    -
    - -
    - - -
    -

    Is the column NULL?

    -
    - - - -
    - (BOOL)columnIsNull:(NSString *)columnName
    - - - -
    -

    Parameters

    - - - - - - - -
    columnName

    NSString value of the name of the column.

    -
    - - - -
    -

    Return Value

    -

    YES if column is NULL; NO if not NULL.

    -
    - - - - - -
    -

    Discussion

    -

    Is the column NULL?

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -

    Returns a dictionary of the row results mapped to case sensitive keys of the column names.

    -
    - - - -
    @property (nonatomic, readonly, nullable) NSDictionary *resultDictionary
    - - - - - - - - - -
    -

    Discussion

    -

    Returns a dictionary of the row results mapped to case sensitive keys of the column names.

    Warning: The keys to the dictionary are case sensitive of the column names.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - -

    – resultDict -

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSData *_Nullable)dataNoCopyForColumnIndex:(int)columnIdx;
    + +
    +
    +

    Swift

    +
    func dataNoCopy(forColumnIndex columnIdx: Int32) -> Data?
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnIdx + + +
    +

    Zero-based index for column.

    +
    +
    +
    +
    +

    Return Value

    +

    Data value of the result set’s column.

    +
    +
    +
    +
  • +
  • +
    + + + + -columnIndexIsNull: + +
    +
    +
    +
    +
    +
    +

    Is the column NULL ?

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)columnIndexIsNull:(int)columnIdx;
    + +
    +
    +

    Swift

    +
    func columnIndexIsNull(_ columnIdx: Int32) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnIdx + + +
    +

    Zero-based index for column.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if column is NULL ; NO if not NULL .

    +
    +
    +
    +
  • +
  • +
    + + + + -columnIsNull: + +
    +
    +
    +
    +
    +
    +

    Is the column NULL ?

    + +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (BOOL)columnIsNull:(nonnull NSString *)columnName;
    + +
    +
    +

    Swift

    +
    func columnIsNull(_ columnName: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + columnName + + +
    +

    NSString value of the name of the column.

    +
    +
    +
    +
    +

    Return Value

    +

    YES if column is NULL ; NO if not NULL .

    +
    +
    +
    +
  • +
  • +
    + + + + resultDictionary + +
    +
    +
    +
    +
    +
    +

    Returns a dictionary of the row results mapped to case sensitive keys of the column names.

    +
    +

    Warning

    + The keys to the dictionary are case sensitive of the column names. -
    -
    - -
    - - -
    -

    Returns a dictionary of the row results

    -
    - - - -
    - (NSDictionary *_Nullable)resultDict
    - - - - - - - - - -
    -

    Discussion

    -

    Returns a dictionary of the row results

    Warning: Deprecated: Please use resultDictionary instead. Also, beware that resultDictionary is case sensitive!

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    -
    - - -

    Key value coding magic

    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    @property (nonatomic, readonly, nullable) NSDictionary *resultDictionary;
    + +
    +
    +

    Swift

    +
    var resultDictionary: [AnyHashable : Any]? { get }
    + +
    +
    + + +
  • +
  • +
    + + + + -resultDict + +
    +
    +
    +
    +
    +
    +

    Deprecated

    +

    Use resultDictionary instead

    + +
    +
    +

    Returns a dictionary of the row results

    +
    +

    See

    +

    resultDictionary

    + +
    +

    Warning

    +

    Deprecated: Please use <resultDictionary> instead. Also, beware that <resultDictionary> is case sensitive!

    -
    - -
    -
    - -
    - - -
    -

    Performs setValue to yield support for key value observing.

    -
    - - - -
    - (void)kvcMagic:(id)object
    - - - -
    -

    Parameters

    - - - - - - - -
    object

    The object for which the values will be set. This is the key-value-coding compliant object that you might, for example, observe.

    -
    - - - - - - - -
    -

    Discussion

    -

    Performs setValue to yield support for key value observing.

    -
    - - - - - - - -
    -

    Declared In

    -

    FMResultSet.h

    -
    - - -
    -
    +
    +
    +

    Declaration

    +
    +

    Objective-C

    +
    - (NSDictionary *_Nullable)resultDict;
    + +
    +
    +

    Swift

    +
    func resultDict() -> [AnyHashable : Any]?
    + +
    +
    +
    +
    +
  • + + +
    +
    + + +
    + +

    Key value coding magic

    +

    +
    +
    +
      +
    • +
      + + + + -kvcMagic: + +
      +
      +
      +
      +
      +
      +

      Performs setValue to yield support for key value observing.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)kvcMagic:(nonnull id)object;
      + +
      +
      +

      Swift

      +
      func kvcMagic(_ object: Any)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + object + + +
      +

      The object for which the values will be set. This is the key-value-coding compliant object that you might, for example, observe.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Binding values

    +

    +
    +
    +
      +
    • +
      + + + + -bindWithArray: + +
      +
      +
      +
      +
      +
      +

      Bind array of values to prepared statement.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)bindWithArray:(nonnull NSArray *)array;
      + +
      +
      +

      Swift

      +
      func bind(with array: [Any]) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + array + + +
      +

      Array of values to bind to SQL statement.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -bindWithDictionary: + +
      +
      +
      +
      +
      +
      +

      Bind dictionary of values to prepared statement.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)bindWithDictionary:(nonnull NSDictionary *)dictionary;
      + +
      +
      +

      Swift

      +
      func bind(with dictionary: [AnyHashable : Any]) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + dictionary + + +
      +

      Dictionary of values to bind to SQL statement.

      +
      +
      +
      +
      +
      +
    • +
    +
    + + + +
    + + - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/html/Classes/FMStatement.html b/html/Classes/FMStatement.html index 5796db10..618c4b1f 100644 --- a/html/Classes/FMStatement.html +++ b/html/Classes/FMStatement.html @@ -1,460 +1,465 @@ - - - - - FMStatement Class Reference - - - - - - -
    -
    - -

    - FMDB -

    - -

    - ccgus -

    - -
    -
    - - - -
    -
    -
    -
    -

    FMStatement Class Reference

    - - -
    - - - - - - - -
    Inherits fromNSObject
    Declared inFMDatabase.h
    - - - - -
    - -

    Overview

    -

    Objective-C wrapper for sqlite3_stmt

    - -

    This is a wrapper for a SQLite sqlite3_stmt. Generally when using FMDB you will not need to interact directly with FMStatement, but rather with FMDatabase and FMResultSet only.

    - -

    See also

    + + + FMStatement Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMStatement

    +
    +
    +
    @interface FMStatement : NSObject {
    +  void *_statement;
    +  NSString *_query;
    +  long _useCount;
    +  BOOL _inUse;
    +}
    + +
    +
    +

    Objective-C wrapper for sqlite3_stmt

    + +

    This is a wrapper for a SQLite sqlite3_stmt . Generally when using FMDB you will not need to interact directly with FMStatement, but rather with FMDatabase and FMResultSet only.

    + +

    See also

    -
    - - - - - -
    - - - - -

    Properties

    - -
    -
    - -

      useCount -

    - -
    -
    - -
    - - -
    -

    Usage count

    -
    - - - -
    @property (atomic, assign) long useCount
    - - - - - - - - - -
    -

    Discussion

    -

    Usage count

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

      query -

    - -
    -
    - -
    - - -
    -

    SQL statement

    -
    - - - -
    @property (atomic, retain) NSString *query
    - - - - - - - - - -
    -

    Discussion

    -

    SQL statement

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

      statement -

    - -
    -
    - -
    - - -
    -

    SQLite sqlite3_stmt

    -
    - - - -
    @property (atomic, assign) void *statement
    - - - - - - - - - -
    -

    Discussion

    -

    SQLite sqlite3_stmt

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    -
    - -

      inUse + +
    +
    +
      +
    • +
      + + + + _statement + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      void *_statement
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + _query + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      NSString *_query
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + _useCount + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      long _useCount
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + _inUse + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      BOOL _inUse
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Properties

    +
    +
    +
      +
    • +
      + + + + useCount + +
      +
      +
      +
      +
      +
      +

      Usage count

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property long useCount;
      + +
      +
      +

      Swift

      +
      var useCount: Int { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + query + +
      +
      +
      +
      +
      +
      +

      SQL statement

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain) NSString *_Nonnull query;
      + +
      +
      +

      Swift

      +
      var query: String { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + statement + +
      +
      +
      +
      +
      +
      +

      SQLite sqlite3_stmt

      +
      +

      See

      + sqlite3_stmt -
      -
      - -
      - - -
      -

      Indication of whether the statement is in use

      -
      - - - -
      @property (atomic, assign) BOOL inUse
      - - - - - - - - - -
      -

      Discussion

      -

      Indication of whether the statement is in use

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - - - -

      Closing and Resetting

      - -
      -
      - -

      – close -

      -
      -
      - -
      - - -
      -

      Close statement

      -
      - - - -
      - (void)close
      - - - - - - - - - -
      -

      Discussion

      -

      Close statement

      -
      - - - - - - - -
      -

      Declared In

      -

      FMDatabase.h

      -
      - - -
      -
      -
      - -

      – reset +

      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property void *_Nonnull statement;
      + +
      +
      +

      Swift

      +
      var statement: UnsafeMutableRawPointer { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + inUse + +
      +
      +
      +
      +
      +
      +

      Indication of whether the statement is in use

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL inUse;
      + +
      +
      +

      Swift

      +
      var inUse: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Closing and Resetting

    - -
    -
    - -
    - - -
    -

    Reset statement

    -
    - - - -
    - (void)reset
    - - - - - - - - - -
    -

    Discussion

    -

    Reset statement

    -
    - - - - - - - -
    -

    Declared In

    -

    FMDatabase.h

    -
    - - -
    -
    +
    +
    +
      +
    • +
      + + + + -close + +
      +
      +
      +
      +
      +
      +

      Close statement

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)close;
      + +
      +
      +

      Swift

      +
      func close()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -reset + +
      +
      +
      +
      +
      +
      +

      Reset statement

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)reset;
      + +
      +
      +

      Swift

      +
      func reset()
      + +
      +
      +
      +
      +
    • +
    +
    +
    + + +

    + + - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/html/Constants.html b/html/Constants.html new file mode 100644 index 00000000..34712348 --- /dev/null +++ b/html/Constants.html @@ -0,0 +1,172 @@ + + + + Constants Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Constants

    +

    The following constants are available globally.

    + +
    +
    +
    +
      +
    • +
      + + + + FMDBVersionNumber + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FOUNDATION_EXPORT double FMDBVersionNumber
      + +
      +
      +

      Swift

      +
      var FMDBVersionNumber: Double
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + FMDBVersionString + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FOUNDATION_EXPORT const unsigned char FMDBVersionString[]
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/Enums.html b/html/Enums.html new file mode 100644 index 00000000..6da8b957 --- /dev/null +++ b/html/Enums.html @@ -0,0 +1,185 @@ + + + + Enumerations Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Enumerations

    +

    The following enumerations are available globally.

    + +
    +
    +
    +
      +
    • +
      + + + + FMDBCheckpointMode + +
      +
      +
      +
      +
      +
      +

      Enumeration used in checkpoint methods.

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      enum FMDBCheckpointMode {}
      + +
      +
      +

      Swift

      +
      enum FMDBCheckpointMode : Int32
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueType + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      NS_ENUM(int, SqliteValueType) {
      +    SqliteValueTypeInteger = 1,
      +    SqliteValueTypeFloat   = 2,
      +    SqliteValueTypeText    = 3,
      +    SqliteValueTypeBlob    = 4,
      +    SqliteValueTypeNull    = 5
      +}
      + +
      +
      +

      Swift

      +
      enum SqliteValueType : Int32
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/Enums/FMDBCheckpointMode.html b/html/Enums/FMDBCheckpointMode.html new file mode 100644 index 00000000..afc4e2c5 --- /dev/null +++ b/html/Enums/FMDBCheckpointMode.html @@ -0,0 +1,247 @@ + + + + FMDBCheckpointMode Enumeration Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDBCheckpointMode

    +
    +
    +
    enum FMDBCheckpointMode {}
    + +
    +
    +

    Enumeration used in checkpoint methods.

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModePassive  = 0
      + +
      +
      +

      Swift

      +
      case passive = 0
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModeFull     = 1
      + +
      +
      +

      Swift

      +
      case full = 1
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModeRestart  = 2
      + +
      +
      +

      Swift

      +
      case restart = 2
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModeTruncate = 3
      + +
      +
      +

      Swift

      +
      case truncate = 3
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/Enums/SqliteValueType.html b/html/Enums/SqliteValueType.html new file mode 100644 index 00000000..cf5fd142 --- /dev/null +++ b/html/Enums/SqliteValueType.html @@ -0,0 +1,285 @@ + + + + SqliteValueType Enumeration Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    SqliteValueType

    +
    +
    +
    NS_ENUM(int, SqliteValueType) {
    +    SqliteValueTypeInteger = 1,
    +    SqliteValueTypeFloat   = 2,
    +    SqliteValueTypeText    = 3,
    +    SqliteValueTypeBlob    = 4,
    +    SqliteValueTypeNull    = 5
    +}
    + +
    +
    +

    Undocumented

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeInteger = 1
      + +
      +
      +

      Swift

      +
      case integer = 1
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeFloat + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeFloat   = 2
      + +
      +
      +

      Swift

      +
      case float = 2
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeText + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeText    = 3
      + +
      +
      +

      Swift

      +
      case text = 3
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeBlob + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeBlob    = 4
      + +
      +
      +

      Swift

      +
      case blob = 4
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeNull + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeNull    = 5
      + +
      +
      +

      Swift

      +
      case null = 5
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/Type Definitions.html b/html/Type Definitions.html new file mode 100644 index 00000000..c81400f3 --- /dev/null +++ b/html/Type Definitions.html @@ -0,0 +1,145 @@ + + + + Type Definitions Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Type Definitions

    +

    The following type definitions are available globally.

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Callback block used by executeStatements:withResultBlock:

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      typedef int (^FMDBExecuteStatementsCallbackBlock)(NSDictionary *_Nonnull)
      + +
      +
      +

      Swift

      +
      typealias FMDBExecuteStatementsCallbackBlock = ([AnyHashable : Any]) -> Int32
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/badge.svg b/html/badge.svg new file mode 100644 index 00000000..b28dab66 --- /dev/null +++ b/html/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 89% + + + 89% + + + diff --git a/html/css/highlight.css b/html/css/highlight.css new file mode 100644 index 00000000..d0db0e13 --- /dev/null +++ b/html/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/html/css/jazzy.css b/html/css/jazzy.css new file mode 100644 index 00000000..c3090c05 --- /dev/null +++ b/html/css/jazzy.css @@ -0,0 +1,374 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 2; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 2; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .main-content .section-name p { + margin-bottom: inherit; + line-height: inherit; } + .main-content .section-name code { + background-color: inherit; + padding: inherit; + color: inherit; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section-name-container { + position: relative; + display: inline-block; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 35px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 20px; } + .item .discouraged { + text-decoration: line-through; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } diff --git a/html/css/scss/_index.scss b/html/css/scss/_index.scss deleted file mode 100644 index 6a57ec5d..00000000 --- a/html/css/scss/_index.scss +++ /dev/null @@ -1,17 +0,0 @@ -.index-container { - -webkit-flex-direction: column; - flex-direction: column; - - @media (min-width: $desktop-min-width) { - display: flex; - -webkit-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - } - - .index-column { - -webkit-flex: 1 1 33%; - flex: 1 1 33%; - } -} diff --git a/html/css/scss/_layout.scss b/html/css/scss/_layout.scss deleted file mode 100644 index da46aef0..00000000 --- a/html/css/scss/_layout.scss +++ /dev/null @@ -1,302 +0,0 @@ -* { - box-sizing: border-box; -} - -.clear { - clear: both; -} - -.clearfix { - &:before, &:after { - clear: both; - display: table; - content: ""; - } -} - -.xcode .hide-in-xcode { - display: none; -} - -body { - font: 62.5% $body-font; - background: $body-background; - - @media (max-width: $mobile-max-width) { - background-color: $content-background; - } -} - -h1, h2, h3 { - font-weight: 300; - color: #808080; -} - -h1 { - font-size: 2em; - color: #000; -} - -h4 { - font-size: 13px; - line-height: 1.5; - margin: 21px 0 0 0; -} - -a { - color: $tint-color; - text-decoration: none; -} - -pre, code { - font-family: $code-font; - word-wrap: break-word; -} - -pre > code, .method-declaration code { - display: inline-block; - font-size: .85em; - padding: 4px 0 4px 10px; - border-left: 5px solid rgba(0, 155, 51, .2); - - &:before { - content: "Objective-C"; - display: block; - - font: 9px/1 $body-font; - color: #009b33; - text-transform: uppercase; - letter-spacing: 2px; - padding-bottom: 6px; - } -} - -pre > code { - font-size: inherit; -} - -table, th, td { - border: 1px solid #e9e9e9; -} - -table { - width: 100%; -} - -th, td { - padding: 7px; - - > :first-child { - margin-top: 0; - } - - > :last-child { - margin-bottom: 0; - } -} - -.container { - @extend .clearfix; - - max-width: 980px; - padding: 0 10px; - margin: 0 auto; - - @media (max-width: $mobile-max-width) { - padding: 0; - } -} - -header { - position: fixed; - top: 0; - left: 0; - width: 100%; - z-index: 2; - - background: #414141; - color: #fff; - font-size: 1.1em; - line-height: 25px; - letter-spacing: .05em; - - #library-title { - float: left; - } - - #developer-home { - float: right; - } - - h1 { - font-size: inherit; - font-weight: inherit; - margin: 0; - } - - p { - margin: 0; - } - - h1, a { - color: inherit; - } - - @media (max-width: $mobile-max-width) { - .container { - padding: 0 10px; - } - } -} - -aside { - position: fixed; - top: 25px; - left: 0; - width: 100%; - height: 25px; - z-index: 2; - - font-size: 1.1em; - - #header-buttons { - background: rgba(255, 255, 255, .8); - margin: 0 1px; - padding: 0; - list-style: none; - text-align: right; - line-height: 32px; - - li { - display: inline-block; - cursor: pointer; - padding: 0 10px; - } - - label, select { - cursor: inherit; - } - - #on-this-page { - position: relative; - - .chevron { - display: inline-block; - width: 14px; - height: 4px; - position: relative; - - .chevy { - background: #878787; - height: 2px; - position: absolute; - width: 10px; - - &.chevron-left { - left: 0; - transform: rotateZ(45deg) scale(0.6); - } - - &.chevron-right { - right: 0; - transform: rotateZ(-45deg) scale(0.6); - } - } - } - - #jump-to { - opacity: 0; - font-size: 16px; - - position: absolute; - top: 5px; - left: 0; - width: 100%; - height: 100%; - } - } - } -} - -article { - margin-top: 25px; - - #content { - @extend .clearfix; - - background: $content-background; - border: 1px solid $content-border; - padding: 15px 25px 30px 25px; - - font-size: 1.4em; - line-height: 1.45; - - position: relative; - - @media (max-width: $mobile-max-width) { - padding: 15px 10px 20px 10px; - border: none; - } - - .navigation-top { - position: absolute; - top: 15px; - right: 25px; - } - - .title { - margin: 21px 0 0 0; - padding: 15px 0; - } - - p { - color: #414141; - margin: 0 0 15px 0; - } - - th, td { - p:last-child { - margin-bottom: 0; - } - } - - main { - ul { - list-style: none; - margin-left: 24px; - margin-bottom: 12px; - padding: 0; - - li { - position: relative; - padding-left: 1.3em; - - &:before { - content: "\02022"; - - color: #414141; - font-size: 1.08em; - line-height: 1; - - position: absolute; - left: 0; - padding-top: 2px; - } - } - } - } - - footer { - @extend .clearfix; - - .footer-copyright { - margin: 70px 25px 10px 0; - } - - p { - font-size: .71em; - color: #a0a0a0; - } - } - } -} diff --git a/html/css/scss/_normalize.scss b/html/css/scss/_normalize.scss deleted file mode 100644 index 9b8848a5..00000000 --- a/html/css/scss/_normalize.scss +++ /dev/null @@ -1,581 +0,0 @@ -/* ========================================================================== - Normalize.scss settings - ========================================================================== */ -/** - * Includes legacy browser support IE6/7 - * - * Set to false if you want to drop support for IE6 and IE7 - */ - -$legacy_browser_support: false !default; - -/* Base - ========================================================================== */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - * 3. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using - * `em` units. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ - @if $legacy_browser_support { - *font-size: 100%; /* 3 */ - } -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ - @if $legacy_browser_support { - *display: inline; - *zoom: 1; - } -} - -/** - * Prevents modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a { - &:active, &:hover { - outline: 0; - }; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -@if $legacy_browser_support { - blockquote { - margin: 1em 40px; - } -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -@if $legacy_browser_support { - h2 { - font-size: 1.5em; - margin: 0.83em 0; - } - - h3 { - font-size: 1.17em; - margin: 1em 0; - } - - h4 { - font-size: 1em; - margin: 1.33em 0; - } - - h5 { - font-size: 0.83em; - margin: 1.67em 0; - } - - h6 { - font-size: 0.67em; - margin: 2.33em 0; - } -} - -/** - * Addresses styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -@if $legacy_browser_support { - - /** - * Addresses margins set differently in IE 6/7. - */ - - p, - pre { - *margin: 1em 0; - } - - /* - * Addresses CSS quotes not supported in IE 6/7. - */ - - q { - *quotes: none; - } - - /* - * Addresses `quotes` property not supported in Safari 4. - */ - - q:before, - q:after { - content: ''; - content: none; - } -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -@if $legacy_browser_support { - - /* ========================================================================== - Lists - ========================================================================== */ - - /* - * Addresses margins set differently in IE 6/7. - */ - - dl, - menu, - ol, - ul { - *margin: 1em 0; - } - - dd { - *margin: 0 0 0 40px; - } - - /* - * Addresses paddings set differently in IE 6/7. - */ - - menu, - ol, - ul { - *padding: 0 0 0 40px; - } - - /* - * Corrects list images handled incorrectly in IE 7. - */ - - nav ul, - nav ol { - *list-style: none; - *list-style-image: none; - } - -} - -/* Embedded content - ========================================================================== */ - -/** - * 1. Remove border when inside `a` element in IE 8/9/10. - * 2. Improves image quality when scaled in IE 7. - */ - -img { - border: 0; - @if $legacy_browser_support { - *-ms-interpolation-mode: bicubic; /* 2 */ - } -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - @if $legacy_browser_support { - _font-family: 'courier new', monospace; - } - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - * 4. Improves appearance and consistency in all browsers. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ - @if $legacy_browser_support { - vertical-align: baseline; /* 3 */ - *vertical-align: middle; /* 3 */ - } -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - * 4. Removes inner spacing in IE 7 without affecting normal text inputs. - * Known issue: inner spacing remains in IE 6. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ - @if $legacy_browser_support { - *overflow: visible; /* 4 */ - } -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - * Known issue: excess padding remains in IE 6. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ - @if $legacy_browser_support { - *height: 13px; /* 3 */ - *width: 13px; /* 3 */ - } -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - * 3. Corrects text not wrapping in Firefox 3. - * 4. Corrects alignment displayed oddly in IE 6/7. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ - @if $legacy_browser_support { - white-space: normal; /* 3 */ - *margin-left: -7px; /* 4 */ - } -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/html/css/scss/_object.scss b/html/css/scss/_object.scss deleted file mode 100644 index 22eebd87..00000000 --- a/html/css/scss/_object.scss +++ /dev/null @@ -1,89 +0,0 @@ -.section-specification { - table { - width: auto; - - th { - text-align: left; - } - } -} - -.method-title { - margin-left: -15px; - margin-bottom: 8px; - transition: margin-left .3s ease-out; - - .section-method.hide & { - margin-left: 0; - } - - code { - font-weight: 400; - font-size: .85em; - } -} - -.method-info { - background: $object-background; - border-bottom: 1px solid $object-border; - margin: 0 -25px; - padding: 20px 25px 0 25px; - transition: height .3s ease-out; - - position: relative; - - .pointy-thing { - background: $content-background; - height: 10px; - border-bottom: 1px solid $object-border; - margin: -20px -25px 16px -25px; - - &:before { - display: inline-block; - content: ""; - - background: $object-background; - border: 1px solid $object-border; - border-bottom: 0; - border-right: 0; - - position: absolute; - left: 21px; - top: 3px; - width: 12px; - height: 12px; - transform: rotate(45deg); - } - } - - .method-subsection { - margin-bottom: 15px; - - .argument-name { - width: 1px; - text-align: right; - - code { - color: #808080; - font-style: italic; - font-weight: 400; - } - } - } -} - -.section-method { - &.hide .method-info { - height: 0 !important; - overflow: hidden; - display: none; - } - - &.hide.animating .method-info { - display: block; - } - - &.animating .method-info { - overflow: hidden; - } -} diff --git a/html/css/scss/_print.scss b/html/css/scss/_print.scss deleted file mode 100644 index 61bdf99f..00000000 --- a/html/css/scss/_print.scss +++ /dev/null @@ -1,42 +0,0 @@ -@media print { - body { - background: #fff; - padding: 8px; - } - - header { - position: static; - background: #fff; - color: #000; - } - - aside { - display: none; - } - - .container { - max-width: none; - padding: 0; - } - - article { - margin-top: 0; - - #content { - border: 0; - background: #fff; - padding: 15px 0 0 0; - - .title { - margin-top: 0; - padding-top: 0; - } - } - } - - .method-info { - &, & .pointy-thing { - background: #fff; - } - } -} diff --git a/html/css/scss/_variables.scss b/html/css/scss/_variables.scss deleted file mode 100644 index 38e072d3..00000000 --- a/html/css/scss/_variables.scss +++ /dev/null @@ -1,12 +0,0 @@ -$body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; -$code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; - -$body-background: #f2f2f2; -$content-background: #fff; -$content-border: #e9e9e9; -$tint-color: #08c; -$object-background: #f9f9f9; -$object-border: #e9e9e9; - -$mobile-max-width: 650px; -$desktop-min-width: 768px; \ No newline at end of file diff --git a/html/css/scss/_xcode.scss b/html/css/scss/_xcode.scss deleted file mode 100644 index 340b1f6b..00000000 --- a/html/css/scss/_xcode.scss +++ /dev/null @@ -1,29 +0,0 @@ -.xcode { - header, aside { - display: none; - } - - .container { - padding: 0; - } - - article { - margin-top: 0; - - #content { - border: 0; - margin: 0; - } - } - - .method-info { - &, .section-method.hide & { - max-height: auto; - overflow: visible; - - &.hiding { - display: block; - } - } - } -} diff --git a/html/css/scss/style.scss b/html/css/scss/style.scss deleted file mode 100644 index 648a6086..00000000 --- a/html/css/scss/style.scss +++ /dev/null @@ -1 +0,0 @@ -@import "variables", "normalize", "layout", "index", "object", "print", "xcode"; diff --git a/html/css/style.css b/html/css/style.css deleted file mode 100644 index d9d59dd0..00000000 --- a/html/css/style.css +++ /dev/null @@ -1,2 +0,0 @@ -html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}.clear{clear:both}.clearfix:before,.container:before,article #content:before,article #content footer:before,.clearfix:after,.container:after,article #content:after,article #content footer:after{clear:both;display:table;content:""}.xcode .hide-in-xcode{display:none}body{font:62.5% -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;background:#f2f2f2}@media (max-width: 650px){body{background-color:#fff}}h1,h2,h3{font-weight:300;color:#808080}h1{font-size:2em;color:#000}h4{font-size:13px;line-height:1.5;margin:21px 0 0 0}a{color:#08c;text-decoration:none}pre,code{font-family:"Source Code Pro",Monaco,Menlo,Consolas,monospace;word-wrap:break-word}pre>code,.method-declaration code{display:inline-block;font-size:.85em;padding:4px 0 4px 10px;border-left:5px solid rgba(0,155,51,0.2)}pre>code:before,.method-declaration code:before{content:"Objective-C";display:block;font:9px/1 -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;color:#009b33;text-transform:uppercase;letter-spacing:2px;padding-bottom:6px}pre>code{font-size:inherit}table,th,td{border:1px solid #e9e9e9}table{width:100%}th,td{padding:7px}th>:first-child,td>:first-child{margin-top:0}th>:last-child,td>:last-child{margin-bottom:0}.container{max-width:980px;padding:0 10px;margin:0 auto}@media (max-width: 650px){.container{padding:0}}header{position:fixed;top:0;left:0;width:100%;z-index:2;background:#414141;color:#fff;font-size:1.1em;line-height:25px;letter-spacing:.05em}header #library-title{float:left}header #developer-home{float:right}header h1{font-size:inherit;font-weight:inherit;margin:0}header p{margin:0}header h1,header a{color:inherit}@media (max-width: 650px){header .container{padding:0 10px}}aside{position:fixed;top:25px;left:0;width:100%;height:25px;z-index:2;font-size:1.1em}aside #header-buttons{background:rgba(255,255,255,0.8);margin:0 1px;padding:0;list-style:none;text-align:right;line-height:32px}aside #header-buttons li{display:inline-block;cursor:pointer;padding:0 10px}aside #header-buttons label,aside #header-buttons select{cursor:inherit}aside #header-buttons #on-this-page{position:relative}aside #header-buttons #on-this-page .chevron{display:inline-block;width:14px;height:4px;position:relative}aside #header-buttons #on-this-page .chevron .chevy{background:#878787;height:2px;position:absolute;width:10px}aside #header-buttons #on-this-page .chevron .chevy.chevron-left{left:0;transform:rotateZ(45deg) scale(0.6)}aside #header-buttons #on-this-page .chevron .chevy.chevron-right{right:0;transform:rotateZ(-45deg) scale(0.6)}aside #header-buttons #on-this-page #jump-to{opacity:0;font-size:16px;position:absolute;top:5px;left:0;width:100%;height:100%}article{margin-top:25px}article #content{background:#fff;border:1px solid #e9e9e9;padding:15px 25px 30px 25px;font-size:1.4em;line-height:1.45;position:relative}@media (max-width: 650px){article #content{padding:15px 10px 20px 10px;border:none}}article #content .navigation-top{position:absolute;top:15px;right:25px}article #content .title{margin:21px 0 0 0;padding:15px 0}article #content p{color:#414141;margin:0 0 15px 0}article #content th p:last-child,article #content td p:last-child{margin-bottom:0}article #content main ul{list-style:none;margin-left:24px;margin-bottom:12px;padding:0}article #content main ul li{position:relative;padding-left:1.3em}article #content main ul li:before{content:"\02022";color:#414141;font-size:1.08em;line-height:1;position:absolute;left:0;padding-top:2px}article #content footer .footer-copyright{margin:70px 25px 10px 0}article #content footer p{font-size:.71em;color:#a0a0a0}.index-container{-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.index-container{display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap}}.index-container .index-column{-webkit-flex:1 1 33%;flex:1 1 33%}.section-specification table{width:auto}.section-specification table th{text-align:left}.method-title{margin-left:-15px;margin-bottom:8px;transition:margin-left .3s ease-out}.section-method.hide .method-title{margin-left:0}.method-title code{font-weight:400;font-size:.85em}.method-info{background:#f9f9f9;border-bottom:1px solid #e9e9e9;margin:0 -25px;padding:20px 25px 0 25px;transition:height .3s ease-out;position:relative}.method-info .pointy-thing{background:#fff;height:10px;border-bottom:1px solid #e9e9e9;margin:-20px -25px 16px -25px}.method-info .pointy-thing:before{display:inline-block;content:"";background:#f9f9f9;border:1px solid #e9e9e9;border-bottom:0;border-right:0;position:absolute;left:21px;top:3px;width:12px;height:12px;-webkit-transform:rotate(45deg);transform:rotate(45deg) }.method-info .method-subsection{margin-bottom:15px}.method-info .method-subsection .argument-name{width:1px;text-align:right}.method-info .method-subsection .argument-name code{color:#808080;font-style:italic;font-weight:400}.section-method.hide .method-info{height:0 !important;overflow:hidden;display:none}.section-method.hide.animating .method-info{display:block}.section-method.animating .method-info{overflow:hidden}@media print{body{background:#fff;padding:8px}header{position:static;background:#fff;color:#000}aside{display:none}.container{max-width:none;padding:0}article{margin-top:0}article #content{border:0;background:#fff;padding:15px 0 0 0}article #content .title{margin-top:0;padding-top:0}.method-info,.method-info .pointy-thing{background:#fff}}.xcode header,.xcode aside{display:none}.xcode .container{padding:0}.xcode article{margin-top:0}.xcode article #content{border:0;margin:0}.xcode .method-info,.section-method.hide .xcode .method-info{max-height:auto;overflow:visible}.xcode .method-info.hiding,.section-method.hide .xcode .method-info.hiding{display:block} - diff --git a/html/docsets/FMDB.docset/Contents/Info.plist b/html/docsets/FMDB.docset/Contents/Info.plist new file mode 100644 index 00000000..e3c0deaa --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.fmdb + CFBundleName + FMDB + DocSetPlatformFamily + fmdb + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Categories.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Categories.html new file mode 100644 index 00000000..041378a1 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Categories.html @@ -0,0 +1,143 @@ + + + + Categories Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Categories

    +

    The following categories are available globally.

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      FMDatabasePool delegate category

      + +

      This is a category that defines the protocol for the FMDatabasePool delegate

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @interface NSObject (FMDatabasePoolDelegate)
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Categories/NSObject(FMDatabasePoolDelegate).html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Categories/NSObject(FMDatabasePoolDelegate).html new file mode 100644 index 00000000..5b3fe74d --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Categories/NSObject(FMDatabasePoolDelegate).html @@ -0,0 +1,253 @@ + + + + NSObject(FMDatabasePoolDelegate) Category Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    NSObject(FMDatabasePoolDelegate)

    +
    +
    +
    @interface NSObject (FMDatabasePoolDelegate)
    + +
    +
    +

    FMDatabasePool delegate category

    + +

    This is a category that defines the protocol for the FMDatabasePool delegate

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Asks the delegate whether database should be added to the pool.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)databasePool:(nonnull FMDatabasePool *)pool
      +    shouldAddDatabaseToPool:(nonnull FMDatabase *)database;
      + +
      +
      +

      Swift

      +
      func databasePool(_ pool: FMDatabasePool, shouldAddDatabaseToPool database: FMDatabase) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + pool + + +
      +

      The FMDatabasePool object.

      +
      +
      + + database + + +
      +

      The FMDatabase object.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if it should add database to pool; NO if not.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Tells the delegate that database was added to the pool.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)databasePool:(nonnull FMDatabasePool *)pool
      +      didAddDatabase:(nonnull FMDatabase *)database;
      + +
      +
      +

      Swift

      +
      func databasePool(_ pool: FMDatabasePool, didAdd database: FMDatabase)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + pool + + +
      +

      The FMDatabasePool object.

      +
      +
      + + database + + +
      +

      The FMDatabase object.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 00000000..a7b81e72 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,398 @@ + + + + Classes Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Classes

    +

    The following classes are available globally.

    + +
    +
    +
    +
      +
    • +
      + + + + FMDatabase + +
      +
      +
      +
      +
      +
      +

      A SQLite (https://sqlite.org/) Objective-C wrapper.

      + +

      Usage

      + +

      The three main classes in FMDB are:

      + +
        +
      • FMDatabase - Represents a single SQLite database. Used for executing SQL statements.

      • +
      • FMResultSet - Represents the results of executing a query on an FMDatabase .

      • +
      • FMDatabaseQueue - If you want to perform queries and updates on multiple threads, you’ll want to use this class.

      • +
      + +

      See also

      + + + +

      External links

      + +
      +

      Warning

      +

      Do not instantiate a single FMDatabase object and use it across multiple threads. Instead, use FMDatabaseQueue .

      + +
      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @interface FMDatabase : NSObject
      + +
      +
      +

      Swift

      +
      class FMDatabase : NSObject
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + FMStatement + +
      +
      +
      +
      +
      +
      +

      Objective-C wrapper for sqlite3_stmt

      + +

      This is a wrapper for a SQLite sqlite3_stmt . Generally when using FMDB you will not need to interact directly with FMStatement, but rather with FMDatabase and FMResultSet only.

      + +

      See also

      + + + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @interface FMStatement : NSObject {
      +  void *_statement;
      +  NSString *_query;
      +  long _useCount;
      +  BOOL _inUse;
      +}
      + +
      +
      +

      Swift

      +
      class FMStatement : NSObject
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + FMDatabasePool + +
      +
      +
      +
      +
      +
      +

      Pool of FMDatabase objects.

      + +

      See also

      + +
      +

      Warning

      +

      Before using FMDatabasePool , please consider using FMDatabaseQueue instead.

      + +
      + +

      If you really really really know what you’re doing and 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!

      + +

      For an example on deadlocking, search for: + ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD + in the main.m file.

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @interface FMDatabasePool : NSObject
      + +
      +
      +

      Swift

      +
      class FMDatabasePool : NSObject
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + FMDatabaseQueue + +
      +
      +
      +
      +
      +
      +

      To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue .

      + +

      Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time.

      + +

      Instead, use FMDatabaseQueue . Here’s how to use it:

      + +

      First, make your queue.

      +
      FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
      +
      + +

      Then use it like so:

      +
      [queue inDatabase:^(FMDatabase *db) {
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
      +
      +    FMResultSet *rs = [db executeQuery:@"select * from foo"];
      +    while ([rs next]) {
      +        //…
      +    }
      +}];
      +
      + +

      An easy way to wrap things up in a transaction can be done like this:

      +
      [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
      +
      +    // if (whoopsSomethingWrongHappened) {
      +    //     *rollback = YES;
      +    //     return;
      +    // }
      +
      +    // etc…
      +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
      +}];
      +
      + +

      FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue ‘s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

      +
      +

      Warning

      +

      Do not instantiate a single FMDatabase object and use it across multiple threads. Use FMDatabaseQueue instead.

      + +
      +

      Warning

      +

      The calls to FMDatabaseQueue ’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

      + +
      + +

      @sa FMDatabase

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @interface FMDatabaseQueue : NSObject
      + +
      +
      +

      Swift

      +
      class FMDatabaseQueue : NSObject
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + FMResultSet + +
      +
      +
      +
      +
      +
      +

      Represents the results of executing a query on an FMDatabase .

      + +

      See also

      + + + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @interface FMResultSet : NSObject
      + +
      +
      +

      Swift

      +
      class FMResultSet : NSObject
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabase.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabase.html new file mode 100644 index 00000000..f52eb9a4 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabase.html @@ -0,0 +1,6978 @@ + + + + FMDatabase Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDatabase

    +
    +
    +
    @interface FMDatabase : NSObject
    + +
    +
    +

    A SQLite (https://sqlite.org/) Objective-C wrapper.

    + +

    Usage

    + +

    The three main classes in FMDB are:

    + +
      +
    • FMDatabase - Represents a single SQLite database. Used for executing SQL statements.

    • +
    • FMResultSet - Represents the results of executing a query on an FMDatabase .

    • +
    • FMDatabaseQueue - If you want to perform queries and updates on multiple threads, you’ll want to use this class.

    • +
    + +

    See also

    + + + +

    External links

    + +
    +

    Warning

    +

    Do not instantiate a single FMDatabase object and use it across multiple threads. Instead, use FMDatabaseQueue .

    + +
    + +
    +
    +
    +
    + + +
    + +

    Properties

    +

    +
    +
    +
      +
    • +
      + + + + traceExecution + +
      +
      +
      +
      +
      +
      +

      Whether should trace execution

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL traceExecution;
      + +
      +
      +

      Swift

      +
      var traceExecution: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + checkedOut + +
      +
      +
      +
      +
      +
      +

      Whether checked out or not

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL checkedOut;
      + +
      +
      +

      Swift

      +
      var checkedOut: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + crashOnErrors + +
      +
      +
      +
      +
      +
      +

      Crash on errors

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL crashOnErrors;
      + +
      +
      +

      Swift

      +
      var crashOnErrors: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + logsErrors + +
      +
      +
      +
      +
      +
      +

      Logs errors

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL logsErrors;
      + +
      +
      +

      Swift

      +
      var logsErrors: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + cachedStatements + +
      +
      +
      +
      +
      +
      +

      Dictionary of cached statements

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) NSMutableDictionary *cachedStatements;
      + +
      +
      +

      Swift

      +
      var cachedStatements: NSMutableDictionary? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Initialization

    +

    +
    +
    +
      +
    • +
      + + + + +databaseWithPath: + +
      +
      +
      +
      +
      +
      +

      Create a FMDatabase object.

      + +

      An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

      + +
        +
      1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.

      2. +
      3. An zero-length string. An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.

      4. +
      5. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

      6. +
      + +

      For example, to open a database in the app’s “Application Support” directory:

      +
      NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
      +NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
      +FMDatabase *db = [FMDatabase databaseWithPath:fileURL.path];
      +
      + +

      (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databaseWithPath:(NSString *_Nullable)inPath;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + inPath + + +
      +

      Path of database file

      +
      +
      +
      +
      +

      Return Value

      +

      FMDatabase object if successful; nil if failure.

      +
      +
      +
      +
    • +
    • +
      + + + + +databaseWithURL: + +
      +
      +
      +
      +
      +
      +

      Create a FMDatabase object.

      + +

      An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

      + +
        +
      1. A file system URL. The file does not have to exist on disk. If it does not exist, it is created for you.

      2. +
      3. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

      4. +
      + +

      For example, to open a database in the app’s “Application Support” directory:

      +
      NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
      +NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
      +FMDatabase *db = [FMDatabase databaseWithURL:fileURL];
      +
      + +

      (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databaseWithURL:(NSURL *_Nullable)url;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The local file URL (not remote URL) of database file

      +
      +
      +
      +
      +

      Return Value

      +

      FMDatabase object if successful; nil if failure.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath: + +
      +
      +
      +
      +
      +
      +

      Initialize a FMDatabase object.

      + +

      An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

      + +
        +
      1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.

      2. +
      3. A zero-length string. An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.

      4. +
      5. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

      6. +
      + +

      For example, to open a database in the app’s “Application Support” directory:

      +
       NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
      + NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
      + FMDatabase *db = [[FMDatabase alloc] initWithPath:fileURL.path];
      +
      + +

      (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)path;
      + +
      +
      +

      Swift

      +
      init(path: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + path + + +
      +

      Path of database file.

      +
      +
      +
      +
      +

      Return Value

      +

      FMDatabase object if successful; nil if failure.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL: + +
      +
      +
      +
      +
      +
      +

      Initialize a FMDatabase object.

      + +

      An FMDatabase is created with a local file URL to a SQLite database file. This path can be one of these three:

      + +
        +
      1. A file system URL. The file does not have to exist on disk. If it does not exist, it is created for you.

      2. +
      3. nil . An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.

      4. +
      + +

      For example, to open a database in the app’s “Application Support” directory:

      +
       NSURL *folder  = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
      + NSURL *fileURL = [folder URLByAppendingPathComponent:@"test.db"];
      + FMDatabase *db = [[FMDatabase alloc] initWithURL:fileURL];
      +
      + +

      (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://sqlite.org/inmemorydb.html)

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url;
      + +
      +
      +

      Swift

      +
      init(url: URL?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file NSURL of database file.

      +
      +
      +
      +
      +

      Return Value

      +

      FMDatabase object if successful; nil if failure.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Opening and closing database

    +

    +
    +
    +
      +
    • +
      + + + + isOpen + +
      +
      +
      +
      +
      +
      +

      Is the database open or not?

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) BOOL isOpen;
      + +
      +
      +

      Swift

      +
      var isOpen: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -open + +
      +
      +
      +
      +
      +
      +

      Opening a new database connection

      + +

      The database is opened for reading and writing, and is created if it does not already exist.

      +
      +

      See

      +

      sqlite3_open()

      + +
      +

      See

      +

      openWithFlags:

      + +
      +

      See

      +

      close

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)open;
      + +
      +
      +

      Swift

      +
      func open() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if successful, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -openWithFlags: + +
      +
      +
      +
      +
      +
      +

      Opening a new database connection with flags and an optional virtual file system (VFS)

      +
      SQLITE_OPEN_READONLY
      +
      + +

      The database is opened in read-only mode. If the database does not already exist, an error is returned.

      +
      SQLITE_OPEN_READWRITE
      +
      + +

      The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.

      +
      SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
      +
      + +

      The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for open method.

      +
      +

      See

      +

      sqlite3_open_v2()

      + +
      +

      See

      +

      open

      + +
      +

      See

      +

      close

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)openWithFlags:(int)flags;
      + +
      +
      +

      Swift

      +
      func open(withFlags flags: Int32) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + flags + + +
      +

      One of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX , SQLITE_OPEN_FULLMUTEX , SQLITE_OPEN_SHAREDCACHE , SQLITE_OPEN_PRIVATECACHE , and/or SQLITE_OPEN_URI flags:

      +
      +
      +
      +
      +

      Return Value

      +

      YES if successful, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -openWithFlags:vfs: + +
      +
      +
      +
      +
      +
      +

      Opening a new database connection with flags and an optional virtual file system (VFS)

      +
      SQLITE_OPEN_READONLY
      +
      + +

      The database is opened in read-only mode. If the database does not already exist, an error is returned.

      +
      SQLITE_OPEN_READWRITE
      +
      + +

      The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.

      +
      SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
      +
      + +

      The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for open method.

      +
      +

      See

      +

      sqlite3_open_v2()

      + +
      +

      See

      +

      open

      + +
      +

      See

      +

      close

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)openWithFlags:(int)flags vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      func open(withFlags flags: Int32, vfs vfsName: String?) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + flags + + +
      +

      One of the following three values, optionally combined with the SQLITE_OPEN_NOMUTEX , SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE, SQLITE_OPEN_PRIVATECACHE , and/or SQLITE_OPEN_URI flags:

      +
      +
      + + vfsName + + +
      +

      If vfs is given the value is passed to the vfs parameter of sqlite3_open_v2.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if successful, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -close + +
      +
      +
      +
      +
      +
      +

      Closing a database connection

      +
      +

      See

      +

      sqlite3_close()

      + +
      +

      See

      +

      open

      + +
      +

      See

      +

      openWithFlags:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)close;
      + +
      +
      +

      Swift

      +
      func close() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + goodConnection + +
      +
      +
      +
      +
      +
      +

      Test to see if we have a good connection to the database.

      + +

      This will confirm whether:

      + +
        +
      • is database open

      • +
      • if open, it will try a simple SELECT statement and confirm that it succeeds.

      • +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) BOOL goodConnection;
      + +
      +
      +

      Swift

      +
      var goodConnection: Bool { get }
      + +
      +
      +
      +

      Return Value

      +

      YES if everything succeeds, NO on failure.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Perform updates

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2, sqlite3_bind to bind values to ? placeholders in the SQL with the optional list of parameters, and sqlite_step to perform the update.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      +

      See

      +

      sqlite3_bind

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql
      +    withErrorAndBindings:(NSError *_Nullable *_Nullable)outErr, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders. This can be followed by iptional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString , NSNumber , etc.), not fundamental C data types (e.g. int , etc.).

      +
      +
      + + outErr + + +
      +

      A reference to the NSError pointer to be updated with an auto released NSError object if an error if an error occurs. If nil , no NSError object will be returned.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use executeUpdate:withErrorAndBindings: instead

      + +
      +
      +

      Execute single update statement

      +
      +

      See

      +

      executeUpdate:withErrorAndBindings:

      + +
      +

      Warning

      +

      Deprecated: Please use <executeUpdate:withErrorAndBindings> instead.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)update:(nonnull NSString *)sql
      +    withErrorAndBindings:(NSError *_Nullable *_Nullable)outErr, ...;
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -executeUpdate: + +
      +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2, sqlite3_bind to bind values to ? placeholders in the SQL with the optional list of parameters, and sqlite_step to perform the update.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      +

      See

      +

      sqlite3_bind

      + +
      +

      Note

      +

      This technique supports the use of ? placeholders in the SQL, automatically binding any supplied value parameters to those placeholders. This approach is more robust than techniques that entail using stringWithFormat to manually build SQL statements, which can be problematic if the values happened to include any characters that needed to be quoted.

      + +
      +

      Note

      +

      You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using <executeUpdate:values:> instead.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders, followed by optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString , NSNumber , etc.), not fundamental C data types (e.g. int , etc.).

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL. Do not use ? placeholders in the SQL if you use this method.

      +
      +

      See

      +

      executeUpdate:

      + +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      +

      Note

      +

      This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite ? placeholder, and then bind values to that placeholder. Thus the following command

      + +
      +
      [db executeUpdateWithFormat:@"INSERT INTO test (name) VALUES (%@)", @"Gus"];
      +
      + +

      is actually replacing the %@ with ? placeholder, and then performing something equivalent to <executeUpdate:>

      +
      [db executeUpdate:@"INSERT INTO test (name) VALUES (?)", @"Gus"];
      +
      + +

      There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite ? placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with pragma statements and the like. Second, note the lack of quotation marks in the SQL. The VALUES clause was not VALUES ('%@') (like you might have to do if you built a SQL statement using NSString method stringWithFormat ), but rather simply VALUES (%@).

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdateWithFormat:(nonnull NSString *)format, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + format + + +
      +

      The SQL to be performed, with printf-style escape sequences, followed by optional parameters to bind to use in conjunction with the printf-style escape sequences in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite3_bind binding any ? placeholders in the SQL with the optional list of parameters.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      executeUpdate:values:error:

      + +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql
      +    withArgumentsInArray:(nonnull NSArray *)arguments;
      + +
      +
      +

      Swift

      +
      func executeUpdate(_ sql: String, withArgumentsIn arguments: [Any]) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders.

      +
      +
      + + arguments + + +
      +

      A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite3_bind binding any ? placeholders in the SQL with the optional list of parameters.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      + +

      This is similar to executeUpdate:withArgumentsInArray: , except that this also accepts a pointer to a NSError pointer, so that errors can be returned.

      + +

      In Swift, this throws errors, as if it were defined as follows:

      +
      func executeUpdate(sql: String, values: [Any]?) throws -> Bool { }
      +
      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql
      +               values:(NSArray *_Nullable)values
      +                error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func executeUpdate(_ sql: String, values: [Any]?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders.

      +
      +
      + + values + + +
      +

      A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      + + error + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql
      +    withParameterDictionary:(nonnull NSDictionary *)arguments;
      + +
      +
      +

      Swift

      +
      func executeUpdate(_ sql: String, withParameterDictionary arguments: [AnyHashable : Any]) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders.

      +
      +
      + + arguments + + +
      +

      A NSDictionary of objects keyed by column names that will be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute single update statement

      + +

      This method executes a single SQL update statement (i.e. any SQL that does not return results, such as UPDATE , INSERT , or DELETE . This method employs sqlite3_prepare_v2 and sqlite_step to perform the update. Unlike the other executeUpdate methods, this uses printf-style formatters (e.g. %s, %d, etc.) to build the SQL.

      + +

      The optional values provided to this method should be objects (e.g. NSString , NSNumber , NSNull , NSDate , and NSData objects), not fundamental data types (e.g. int , long , NSInteger , etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeUpdate:(nonnull NSString *)sql
      +           withVAList:(struct __va_list_tag *)args;
      + +
      +
      +

      Swift

      +
      func executeUpdate(_ sql: String, withVAList args: CVaListPointer) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed, with optional ? placeholders.

      +
      +
      + + args + + +
      +

      A va_list of arguments.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • +
      + + + + -executeStatements: + +
      +
      +
      +
      +
      +
      +

      Execute multiple SQL statements

      + +

      This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the sqlite3 command line .dump command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses sqlite3_exec .

      +
      +

      See

      +

      executeStatements:withResultBlock:

      + +
      +

      See

      +

      sqlite3_exec()

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeStatements:(nonnull NSString *)sql;
      + +
      +
      +

      Swift

      +
      func executeStatements(_ sql: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute multiple SQL statements with callback handler

      + +

      This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the sqlite3 command line .dump command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses sqlite3_exec.

      +
      +

      See

      +

      executeStatements:

      + +
      +

      See

      +

      sqlite3_exec()

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)executeStatements:(nonnull NSString *)sql
      +          withResultBlock:(FMDBExecuteStatementsCallbackBlock _Nullable)block;
      + +
      +
      +

      Swift

      +
      func executeStatements(_ sql: String, withResultBlock block: (([AnyHashable : Any]) -> Int32)? = nil) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL to be performed.

      +
      +
      + + block + + +
      +

      A block that will be called for any result sets returned by any SQL statements. + Note, if you supply this block, it must return integer value, zero upon success (this would be a good opportunity to use SQLITE_OK ), + non-zero value upon failure (which will stop the bulk execution of the SQL). If a statement returns values, the block will be called with the results from the query in NSDictionary *resultsDictionary. + This may be nil if you don’t care to receive any results.

      +
      +
      +
      +
      +

      Return Value

      +

      YES upon success; NO upon failure. If failed, you can call lastError , + lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • +
      + + + + lastInsertRowId + +
      +
      +
      +
      +
      +
      +

      Last insert rowid

      + +

      Each entry in an SQLite table has a unique 64-bit signed integer key called the “rowid”. The rowid is always available as an undeclared column named ROWID, OID, or _ROWID_ as long as those names are not also used by explicitly declared columns. If the table has a column of type INTEGER PRIMARY KEY then that column is another alias for the rowid.

      + +

      This routine returns the rowid of the most recent successful INSERT into the database from the database connection in the first argument. As of SQLite version 3.7.7, this routines records the last insert rowid of both ordinary tables and virtual tables. If no successful INSERT statements have ever occurred on that database connection, zero is returned.

      + + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) int64_t lastInsertRowId;
      + +
      +
      +

      Swift

      +
      var lastInsertRowId: Int64 { get }
      + +
      +
      +
      +

      Return Value

      +

      The rowid of the last inserted row.

      +
      +
      +
      +
    • +
    • +
      + + + + changes + +
      +
      +
      +
      +
      +
      +

      The number of rows changed by prior SQL statement.

      + +

      This function returns the number of database rows that were changed or inserted or deleted by the most recently completed SQL statement on the database connection specified by the first parameter. Only changes that are directly specified by the INSERT , UPDATE , or DELETE statement are counted.

      +
      +

      See

      +

      sqlite3_changes()

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) int changes;
      + +
      +
      +

      Swift

      +
      var changes: Int32 { get }
      + +
      +
      +
      +

      Return Value

      +

      The number of rows changed by prior SQL statement.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Retrieving results

    +

    +
    +
    +
      +
    • +
      + + + + -executeQuery: + +
      +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      + +

      This method employs sqlite3_bind for any optional value parameters. This properly escapes any characters that need escape sequences (e.g. quotation marks), which eliminates simple SQL errors as well as protects against SQL injection attacks. This method natively handles NSString , NSNumber , NSNull , NSDate , and NSData objects. All other object types will be interpreted as text values using the object’s description method.

      +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      +

      See

      +

      sqlite3_bind

      + +
      +

      Note

      +

      You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using <executeQuery:values:> instead.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + sql + + +
      +

      The SELECT statement to be performed, with optional ? placeholders, followed by optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString , NSNumber , etc.), not fundamental C data types (e.g. int , etc.).

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      +
      +

      See

      +

      executeQuery:

      + +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      +

      Note

      +

      This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite ? placeholder, and then bind values to that placeholder. Thus the following command

      + +
      +
      [db executeQueryWithFormat:@"SELECT * FROM test WHERE name=%@", @"Gus"];
      +
      + +

      is actually replacing the %@ with ? placeholder, and then performing something equivalent to <executeQuery:>

      +
      [db executeQuery:@"SELECT * FROM test WHERE name=?", @"Gus"];
      +
      + +

      There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite ? placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with pragma statements and the like. Second, note the lack of quotation marks in the SQL. The WHERE clause was not WHERE name='%@' (like you might have to do if you built a SQL statement using NSString method stringWithFormat ), but rather simply WHERE name=%@.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQueryWithFormat:(nonnull NSString *)format,
      +                                                 ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + format + + +
      +

      The SQL to be performed, with printf-style escape sequences, followed by ptional parameters to bind to use in conjunction with the printf-style escape sequences in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      +
      +

      See

      +

      -executeQuery:values:error:

      + +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql
      +                  withArgumentsInArray:(nonnull NSArray *)arguments;
      + +
      +
      +

      Swift

      +
      func executeQuery(_ sql: String, withArgumentsIn arguments: [Any]) -> FMResultSet?
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SELECT statement to be performed, with optional ? placeholders.

      +
      +
      + + arguments + + +
      +

      A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      + +

      This is similar to <executeQuery:withArgumentsInArray:>, except that this also accepts a pointer to a NSError pointer, so that errors can be returned.

      + +

      In Swift, this throws errors, as if it were defined as follows:

      + +

      func executeQuery(sql: String, values: [Any]?) throws -> FMResultSet!

      +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      +

      Note

      +

      When called from Swift, only use the first two parameters, sql and values. This but throws the error.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql
      +                                values:(NSArray *_Nullable)values
      +                                 error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func executeQuery(_ sql: String, values: [Any]?) throws -> FMResultSet
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + sql + + +
      +

      The SELECT statement to be performed, with optional ? placeholders.

      +
      +
      + + values + + +
      +

      A NSArray of objects to be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      + + error + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Execute select statement

      + +

      Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the lastErrorMessage and lastErrorMessage methods to determine why a query failed.

      + +

      In order to iterate through the results of your query, you use a while() loop. You also need to “step” (via <[FMResultSet next]>) from one record to the other.

      +
      +

      See

      +

      FMResultSet

      + +
      +

      See

      +

      FMResultSet next

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)executeQuery:(nonnull NSString *)sql
      +               withParameterDictionary:(NSDictionary *_Nullable)arguments;
      + +
      +
      +

      Swift

      +
      func executeQuery(_ sql: String, withParameterDictionary arguments: [AnyHashable : Any]?) -> FMResultSet?
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SELECT statement to be performed, with optional ? placeholders.

      +
      +
      + + arguments + + +
      +

      A NSDictionary of objects keyed by column names that will be used when binding values to the ? placeholders in the SQL statement.

      +
      +
      +
      +
      +

      Return Value

      +

      A FMResultSet for the result set upon success; nil upon failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet * _Nullable)executeQuery:(NSString *)sql withVAList:(va_list)args;
      + +
      +
      +

      Swift

      +
      func executeQuery(_ sql: String, withVAList args: CVaListPointer) -> FMResultSet?
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -prepare: + +
      +
      +
      +
      +
      +
      +

      Prepare SQL statement.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull FMResultSet *)prepare:(nonnull NSString *)sql;
      + +
      +
      +

      Swift

      +
      func prepare(_ sql: String) -> FMResultSet
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + sql + + +
      +

      SQL statement to prepare, generally with ? placeholders.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Transactions

    +

    +
    +
    +
      +
    • +
      + + + + -beginTransaction + +
      +
      +
      +
      +
      +
      +

      Begin a transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginDeferredTransaction

      + +
      +

      See

      +

      isInTransaction

      + +
      +

      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 beginExclusiveTransaction, instead, not + only to make your intent explicit, but also to future-proof your code.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)beginTransaction;
      + +
      +
      +

      Swift

      +
      func beginTransaction() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Begin a deferred transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      isInTransaction

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)beginDeferredTransaction;
      + +
      +
      +

      Swift

      +
      func beginDeferredTransaction() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Begin an immediate transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      isInTransaction

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)beginImmediateTransaction;
      + +
      +
      +

      Swift

      +
      func beginImmediateTransaction() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Begin an exclusive transaction

      +
      +

      See

      +

      commit

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      isInTransaction

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)beginExclusiveTransaction;
      + +
      +
      +

      Swift

      +
      func beginExclusiveTransaction() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • +
      + + + + -commit + +
      +
      +
      +
      +
      +
      +

      Commit a transaction

      + +

      Commit a transaction that was initiated with either <beginTransaction> or with <beginDeferredTransaction>.

      +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      beginDeferredTransaction

      + +
      +

      See

      +

      rollback

      + +
      +

      See

      +

      isInTransaction

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)commit;
      + +
      +
      +

      Swift

      +
      func commit() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • +
      + + + + -rollback + +
      +
      +
      +
      +
      +
      +

      Rollback a transaction

      + +

      Rollback a transaction that was initiated with either <beginTransaction> or with <beginDeferredTransaction>.

      +
      +

      See

      +

      beginTransaction

      + +
      +

      See

      +

      beginDeferredTransaction

      + +
      +

      See

      +

      commit

      + +
      +

      See

      +

      isInTransaction

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)rollback;
      + +
      +
      +

      Swift

      +
      func rollback() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • +
      + + + + isInTransaction + +
      +
      +
      +
      +
      +
      +

      Identify whether currently in a transaction or not

      +
      +

      See

      + beginTransaction + +
      +

      See

      + beginDeferredTransaction + +
      +

      See

      + commit + +
      +

      See

      + rollback + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) BOOL isInTransaction;
      + +
      +
      +

      Swift

      +
      var isInTransaction: Bool { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -inTransaction + +
      +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use isInTransaction property instead

      + +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)inTransaction __deprecated_msg("Use isInTransaction property instead");
      + +
      +
      +

      Swift

      +
      func inTransaction() -> Bool
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Cached statements and result sets

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Clear cached statements

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)clearCachedStatements;
      + +
      +
      +

      Swift

      +
      func clearCachedStatements()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -closeOpenResultSets + +
      +
      +
      +
      +
      +
      +

      Close all open result sets

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)closeOpenResultSets;
      + +
      +
      +

      Swift

      +
      func closeOpenResultSets()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + hasOpenResultSets + +
      +
      +
      +
      +
      +
      +

      Whether database has any open result sets

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) BOOL hasOpenResultSets;
      + +
      +
      +

      Swift

      +
      var hasOpenResultSets: Bool { get }
      + +
      +
      +
      +

      Return Value

      +

      YES if there are open result sets; NO if not.

      +
      +
      +
      +
    • +
    • +
      + + + + shouldCacheStatements + +
      +
      +
      +
      +
      +
      +

      Whether should cache statements or not

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) BOOL shouldCacheStatements;
      + +
      +
      +

      Swift

      +
      var shouldCacheStatements: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -interrupt + +
      +
      +
      +
      +
      +
      +

      Interupt pending database operation

      + +

      This method causes any pending database operation to abort and return at its earliest opportunity

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)interrupt;
      + +
      +
      +

      Swift

      +
      func interrupt() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Encryption methods

    +

    +
    +
    +
      +
    • +
      + + + + -setKey: + +
      +
      +
      +
      +
      +
      +

      Set encryption key.

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)setKey:(nonnull NSString *)key;
      + +
      +
      +

      Swift

      +
      func setKey(_ key: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + key + + +
      +

      The key to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -rekey: + +
      +
      +
      +
      +
      +
      +

      Reset encryption key

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)rekey:(nonnull NSString *)key;
      + +
      +
      +

      Swift

      +
      func rekey(_ key: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + key + + +
      +

      The key to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -setKeyWithData: + +
      +
      +
      +
      +
      +
      +

      Set encryption key using keyData.

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)setKeyWithData:(nonnull NSData *)keyData;
      + +
      +
      +

      Swift

      +
      func setKeyWith(_ keyData: Data) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + keyData + + +
      +

      The NSData to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -rekeyWithData: + +
      +
      +
      +
      +
      +
      +

      Reset encryption key using keyData.

      +
      +

      Warning

      +

      You need to have purchased the sqlite encryption extensions for this method to work.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)rekeyWithData:(nonnull NSData *)keyData;
      + +
      +
      +

      Swift

      +
      func rekey(with keyData: Data) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + keyData + + +
      +

      The NSData to be used.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if success, NO on error.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    General inquiry methods

    +

    +
    +
    +
      +
    • +
      + + + + databasePath + +
      +
      +
      +
      +
      +
      +

      The path of the database file.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly, nullable) NSString *databasePath;
      + +
      +
      +

      Swift

      +
      var databasePath: String? { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + databaseURL + +
      +
      +
      +
      +
      +
      +

      The file URL of the database file.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly, nullable) NSURL *databaseURL;
      + +
      +
      +

      Swift

      +
      var databaseURL: URL? { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + sqliteHandle + +
      +
      +
      +
      +
      +
      +

      The underlying SQLite handle .

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) void *_Nonnull sqliteHandle;
      + +
      +
      +

      Swift

      +
      var sqliteHandle: UnsafeMutableRawPointer { get }
      + +
      +
      +
      +

      Return Value

      +

      The sqlite3 pointer.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Retrieving error codes

    +

    +
    +
    +
      +
    • +
      + + + + -lastErrorMessage + +
      +
      +
      +
      +
      +
      +

      Last error message

      + +

      Returns the English-language text that describes the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

      +
      +

      See

      +

      sqlite3_errmsg()

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastError

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull NSString *)lastErrorMessage;
      + +
      +
      +

      Swift

      +
      func lastErrorMessage() -> String
      + +
      +
      +
      +

      Return Value

      +

      NSString of the last error message.

      +
      +
      +
      +
    • +
    • +
      + + + + -lastErrorCode + +
      +
      +
      +
      +
      +
      +

      Last error code

      + +

      Returns the numeric result code or extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

      +
      +

      See

      +

      sqlite3_errcode()

      + +
      +

      See

      +

      lastErrorMessage

      + +
      +

      See

      +

      lastError

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)lastErrorCode;
      + +
      +
      +

      Swift

      +
      func lastErrorCode() -> Int32
      + +
      +
      +
      +

      Return Value

      +

      Integer value of the last error code.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Last extended error code

      + +

      Returns the numeric extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.

      +
      +

      See

      +

      sqlite3_errcode()

      + +
      +

      See

      +

      lastErrorMessage

      + +
      +

      See

      +

      lastError

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)lastExtendedErrorCode;
      + +
      +
      +

      Swift

      +
      func lastExtendedErrorCode() -> Int32
      + +
      +
      +
      +

      Return Value

      +

      Integer value of the last extended error code.

      +
      +
      +
      +
    • +
    • +
      + + + + -hadError + +
      +
      +
      +
      +
      +
      +

      Had error

      +
      +

      See

      +

      lastError

      + +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)hadError;
      + +
      +
      +

      Swift

      +
      func hadError() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if there was an error, NO if no error.

      +
      +
      +
      +
    • +
    • +
      + + + + -lastError + +
      +
      +
      +
      +
      +
      +

      Last error

      +
      +

      See

      +

      lastErrorCode

      + +
      +

      See

      +

      lastErrorMessage

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull NSError *)lastError;
      + +
      +
      +

      Swift

      +
      func lastError() -> Error
      + +
      +
      +
      +

      Return Value

      +

      NSError representing the last error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) NSTimeInterval maxBusyRetryTimeInterval
      + +
      +
      +

      Swift

      +
      var maxBusyRetryTimeInterval: TimeInterval { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Save points

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Start save point

      +
      +

      See

      +

      releaseSavePointWithName:error:

      + +
      +

      See

      +

      rollbackToSavePointWithName:error:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)startSavePointWithName:(nonnull NSString *)name
      +                         error:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func startSavePoint(withName name: String) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + name + + +
      +

      Name of save point.

      +
      +
      + + outErr + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Release save point

      +
      +

      See

      +

      startSavePointWithName:error:

      + +
      +

      See

      +

      rollbackToSavePointWithName:error:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)releaseSavePointWithName:(nonnull NSString *)name
      +                           error:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func releaseSavePoint(withName name: String) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + name + + +
      +

      Name of save point.

      +
      +
      + + outErr + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Roll back to save point

      +
      +

      See

      +

      startSavePointWithName:error:

      + +
      +

      See

      +

      releaseSavePointWithName:error:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)rollbackToSavePointWithName:(nonnull NSString *)name
      +                              error:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func rollbackToSavePoint(withName name: String) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + name + + +
      +

      Name of save point.

      +
      +
      + + outErr + + +
      +

      A NSError object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success; NO on failure. If failed, you can call lastError , lastErrorCode , or lastErrorMessage for diagnostic information regarding the failure.

      +
      +
      +
      +
    • +
    • +
      + + + + -inSavePoint: + +
      +
      +
      +
      +
      +
      +

      Start save point

      +
      +

      See

      +

      startSavePointWithName:error:

      + +
      +

      See

      +

      releaseSavePointWithName:error:

      + +
      +

      See

      +

      rollbackToSavePointWithName:error:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSError *_Nullable)inSavePoint:(nonnull void (^)(BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inSavePoint(_ block: (UnsafeMutablePointer<ObjCBool>) -> Void) -> Error?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      Block of code to perform from within save point.

      +
      +
      +
      +
      +

      Return Value

      +

      The NSError corresponding to the error, if any. If no error, returns nil .

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Checkpoint

    +

    +
    +
    +
      +
    • +
      + + + + -checkpoint:error: + +
      +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO .

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +              name:(NSString *_Nullable)name
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO .

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +               name:(NSString *_Nullable)name
      +      logFrameCount:(int *_Nullable)logFrameCount
      +    checkpointCount:(int *_Nullable)checkpointCount
      +              error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?, logFrameCount: UnsafeMutablePointer<Int32>?, checkpointCount: UnsafeMutablePointer<Int32>?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      + + logFrameCount + + +
      +

      If not NULL , then this is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.

      +
      +
      + + checkpointCount + + +
      +

      If not NULL , then this is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO .

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    SQLite library status

    +

    +
    +
    +
      +
    • +
      + + + + +isSQLiteThreadSafe + +
      +
      +
      +
      +
      +
      +

      Test to see if the library is threadsafe

      + + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (BOOL)isSQLiteThreadSafe;
      + +
      +
      +

      Swift

      +
      class func isSQLiteThreadSafe() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      NO if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0.

      +
      +
      +
      +
    • +
    • +
      + + + + -limitFor:value: + +
      +
      +
      +
      +
      +
      +

      Examine/set limits

      +
      +

      See

      +

      sqlite3_limit()

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)limitFor:(int)type value:(int)newLimit;
      + +
      +
      +

      Swift

      +
      func limit(for type: Int32, value newLimit: Int32) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + type + + + +
      + + newLimit + + +
      +

      The new limit value. Use -1 if you don’t want to change the limit, but rather only want to check it.

      +
      +
      +
      +
      +

      Return Value

      +

      Regardless, returns previous value.

      +
      +
      +
      +
    • +
    • +
      + + + + +sqliteLibVersion + +
      +
      +
      +
      +
      +
      +

      Run-time library version numbers

      + + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull NSString *)sqliteLibVersion;
      + +
      +
      +

      Swift

      +
      class func sqliteLibVersion() -> String
      + +
      +
      +
      +

      Return Value

      +

      The sqlite library version string.

      +
      +
      +
      +
    • +
    • +
      + + + + +FMDBUserVersion + +
      +
      +
      +
      +
      +
      +

      The FMDB version number as a string in the form of "2.7.7" .

      + +

      If you want to compare version number strings, you can use NSNumericSearch option:

      +
      NSComparisonResult result = [[FMDatabase FMDBUserVersion] compare:@"2.11.0" options:NSNumericSearch];
      +
      + +

      @returns The version number string.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull NSString *)FMDBUserVersion;
      + +
      +
      +

      Swift

      +
      class func fmdbUserVersion() -> String
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + +FMDBVersion + +
      +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use FMDBUserVersion instead

      + +
      +
      +

      The FMDB version

      + +

      This returns the FMDB as hexadecimal value, e.g., 0x0243 for version 2.4.3.

      +
      +

      Warning

      + This routine will not work if any component of the version number exceeds 15. + For example, if it is version 2.17.3 , this will max out at 0x2f3. + For this reason, we would recommend using FMDBUserVersion and with NSNumericSearch option, e.g. + +
      +
       NSComparisonResult result = [[FMDatabase FMDBUserVersion] compare:@"2.11.0" options:NSNumericSearch];
      +
      + +

      @returns The version number in hexadecimal, e.g., 0x0243 for version 2.4.3. If any component exceeds what can be + can be represented in four bits, we’ll max it out at 0xf .

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (SInt32)FMDBVersion;
      + +
      +
      +

      Swift

      +
      class func fmdbVersion() -> Int32
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Make SQL function

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.

      + +

      For example:

      +
      [db makeFunctionNamed:@"RemoveDiacritics" arguments:1 block:^(void *context, int argc, void **argv) {
      +    SqliteValueType type = [self.db valueType:argv[0]];
      +    if (type == SqliteValueTypeNull) {
      +        [self.db resultNullInContext:context];
      +         return;
      +    }
      +    if (type != SqliteValueTypeText) {
      +        [self.db resultError:@"Expected text" context:context];
      +        return;
      +    }
      +    NSString *string = [self.db valueString:argv[0]];
      +    NSString *result = [string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil];
      +    [self.db resultString:result context:context];
      +}];
      +
      +FMResultSet *rs = [db executeQuery:@"SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'"];
      +NSAssert(rs, @"Error %@", [db lastErrorMessage]);
      +
      + + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)makeFunctionNamed:(nonnull NSString *)name
      +                arguments:(int)arguments
      +                    block:(nonnull void (^)(void *_Nonnull, int,
      +                                            void *_Nonnull *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func makeFunctionNamed(_ name: String, arguments: Int32, block: @escaping (UnsafeMutableRawPointer, Int32, UnsafeMutablePointer<UnsafeMutableRawPointer>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + name + + +
      +

      Name of function.

      +
      +
      + + arguments + + +
      +

      Maximum number of parameters.

      +
      +
      + + block + + +
      +

      The block of code for the function.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use makeFunctionNamed:arguments:block:

      + +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)makeFunctionNamed:(NSString *)name maximumArguments:(int)count withBlock:(void (^)(void *context, int argc, void * _Nonnull * _Nonnull argv))block __deprecated_msg("Use makeFunctionNamed:arguments:block:");
      + +
      +
      +

      Swift

      +
      func makeFunctionNamed(_ name: String, maximumArguments count: Int32, with block: @escaping (UnsafeMutableRawPointer, Int32, UnsafeMutablePointer<UnsafeMutableRawPointer>) -> Void)
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -valueType: + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (SqliteValueType)valueType:(void *)argv;
      + +
      +
      +

      Swift

      +
      func valueType(_ argv: UnsafeMutableRawPointer) -> SqliteValueType
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -valueInt: + +
      +
      +
      +
      +
      +
      +

      Get integer value of parameter in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)valueInt:(nonnull void *)value;
      + +
      +
      +

      Swift

      +
      func valueInt(_ value: UnsafeMutableRawPointer) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + value + + +
      +

      The argument whose value to return.

      +
      +
      +
      +
      +

      Return Value

      +

      The integer value.

      +
      +
      +
      +
    • +
    • +
      + + + + -valueLong: + +
      +
      +
      +
      +
      +
      +

      Get long value of parameter in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long long)valueLong:(nonnull void *)value;
      + +
      +
      +

      Swift

      +
      func valueLong(_ value: UnsafeMutableRawPointer) -> Int64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + value + + +
      +

      The argument whose value to return.

      +
      +
      +
      +
      +

      Return Value

      +

      The long value.

      +
      +
      +
      +
    • +
    • +
      + + + + -valueDouble: + +
      +
      +
      +
      +
      +
      +

      Get double value of parameter in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)valueDouble:(nonnull void *)value;
      + +
      +
      +

      Swift

      +
      func valueDouble(_ value: UnsafeMutableRawPointer) -> Double
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + value + + +
      +

      The argument whose value to return.

      +
      +
      +
      +
      +

      Return Value

      +

      The double value.

      +
      +
      +
      +
    • +
    • +
      + + + + -valueData: + +
      +
      +
      +
      +
      +
      +

      Get NSData value of parameter in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)valueData:(nonnull void *)value;
      + +
      +
      +

      Swift

      +
      func valueData(_ value: UnsafeMutableRawPointer) -> Data?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + value + + +
      +

      The argument whose value to return.

      +
      +
      +
      +
      +

      Return Value

      +

      The data object.

      +
      +
      +
      +
    • +
    • +
      + + + + -valueString: + +
      +
      +
      +
      +
      +
      +

      Get string value of parameter in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)valueString:(nonnull void *)value;
      + +
      +
      +

      Swift

      +
      func valueString(_ value: UnsafeMutableRawPointer) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + value + + +
      +

      The argument whose value to return.

      +
      +
      +
      +
      +

      Return Value

      +

      The string value.

      +
      +
      +
      +
    • +
    • +
      + + + + -resultNullInContext: + +
      +
      +
      +
      +
      +
      +

      Return null value from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultNullInContext:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultNull(context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + context + + +
      +

      The context to which the null value will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -resultInt:context: + +
      +
      +
      +
      +
      +
      +

      Return integer value from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultInt:(int)value context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultInt(_ value: Int32, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + value + + +
      +

      The integer value to be returned.

      +
      +
      + + context + + +
      +

      The context to which the value will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -resultLong:context: + +
      +
      +
      +
      +
      +
      +

      Return long value from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultLong:(long long)value context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultLong(_ value: Int64, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + value + + +
      +

      The long value to be returned.

      +
      +
      + + context + + +
      +

      The context to which the value will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Return double value from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultDouble:(double)value context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultDouble(_ value: Double, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + value + + +
      +

      The double value to be returned.

      +
      +
      + + context + + +
      +

      The context to which the value will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -resultData:context: + +
      +
      +
      +
      +
      +
      +

      Return NSData object from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultData:(nonnull NSData *)data context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultData(_ data: Data, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + data + + +
      +

      The NSData object to be returned.

      +
      +
      + + context + + +
      +

      The context to which the value will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Return string value from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultString:(nonnull NSString *)value context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultString(_ value: String, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + value + + +
      +

      The string value to be returned.

      +
      +
      + + context + + +
      +

      The context to which the value will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -resultError:context: + +
      +
      +
      +
      +
      +
      +

      Return error string from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultError:(nonnull NSString *)error context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultError(_ error: String, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + error + + +
      +

      The error string to be returned.

      +
      +
      + + context + + +
      +

      The context to which the error will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Return error code from custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultErrorCode:(int)errorCode context:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultErrorCode(_ errorCode: Int32, context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + errorCode + + +
      +

      The integer error code to be returned.

      +
      +
      + + context + + +
      +

      The context to which the error will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Report memory error in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultErrorNoMemoryInContext:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultErrorNoMemory(context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + context + + +
      +

      The context to which the error will be returned.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Report that string or BLOB is too long to represent in custom function.

      +
      +

      See

      +

      makeFunctionNamed:arguments:block:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)resultErrorTooBigInContext:(nonnull void *)context;
      + +
      +
      +

      Swift

      +
      func resultErrorTooBig(context: UnsafeMutableRawPointer)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + context + + +
      +

      The context to which the error will be returned.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Date formatter

    +

    +
    +
    +
      +
    • +
      + + + + +storeableDateFormat: + +
      +
      +
      +
      +
      +
      +

      Generate an NSDateFormatter that won’t be broken by permutations of timezones or locales.

      + +

      Use this method to generate values to set the dateFormat property.

      + +

      Example:

      +
      myDB.dateFormat = [FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"];
      +
      +
      +

      See

      +

      hasDateFormatter

      + +
      +

      See

      +

      setDateFormat:

      + +
      +

      See

      +

      dateFromString:

      + +
      +

      See

      +

      stringFromDate:

      + +
      +

      See

      +

      storeableDateFormat:

      + +
      +

      Warning

      +

      Note that NSDateFormatter is not thread-safe, so the formatter generated by this method should be assigned to only one FMDB instance and should not be used for other purposes.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull NSDateFormatter *)storeableDateFormat:(nonnull NSString *)format;
      + +
      +
      +

      Swift

      +
      class func storeableDateFormat(_ format: String) -> DateFormatter
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + format + + +
      +

      A valid NSDateFormatter format string.

      +
      +
      +
      +
      +

      Return Value

      +

      A NSDateFormatter that can be used for converting dates to strings and vice versa.

      +
      +
      +
      +
    • +
    • +
      + + + + -hasDateFormatter + +
      +
      +
      +
      +
      +
      +

      Test whether the database has a date formatter assigned.

      +
      +

      See

      +

      hasDateFormatter

      + +
      +

      See

      +

      setDateFormat:

      + +
      +

      See

      +

      dateFromString:

      + +
      +

      See

      +

      stringFromDate:

      + +
      +

      See

      +

      storeableDateFormat:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)hasDateFormatter;
      + +
      +
      +

      Swift

      +
      func hasDateFormatter() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if there is a date formatter; NO if not.

      +
      +
      +
      +
    • +
    • +
      + + + + -setDateFormat: + +
      +
      +
      +
      +
      +
      +

      Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.

      +
      +

      See

      +

      hasDateFormatter

      + +
      +

      See

      +

      setDateFormat:

      + +
      +

      See

      +

      dateFromString:

      + +
      +

      See

      +

      stringFromDate:

      + +
      +

      See

      +

      storeableDateFormat:

      + +
      +

      Warning

      +

      Note there is no direct getter for the NSDateFormatter , and you should not use the formatter you pass to FMDB for other purposes, as NSDateFormatter is not thread-safe.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)setDateFormat:(NSDateFormatter *_Nullable)format;
      + +
      +
      +

      Swift

      +
      func setDateFormat(_ format: DateFormatter?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + format + + +
      +

      Set to nil to use UNIX timestamps. Defaults to nil. Should be set using a formatter generated using FMDatabase:storeableDateFormat .

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -dateFromString: + +
      +
      +
      +
      +
      +
      +

      Convert the supplied NSString to NSDate, using the current database formatter.

      +
      +

      See

      +

      hasDateFormatter

      + +
      +

      See

      +

      setDateFormat:

      + +
      +

      See

      +

      dateFromString:

      + +
      +

      See

      +

      stringFromDate:

      + +
      +

      See

      +

      storeableDateFormat:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateFromString:(nonnull NSString *)s;
      + +
      +
      +

      Swift

      +
      func date(from s: String) -> Date?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + s + + +
      +

      NSString to convert to NSDate .

      +
      +
      +
      +
      +

      Return Value

      +

      The NSDate object; or nil if no formatter is set.

      +
      +
      +
      +
    • +
    • +
      + + + + -stringFromDate: + +
      +
      +
      +
      +
      +
      +

      Convert the supplied NSDate to NSString, using the current database formatter.

      +
      +

      See

      +

      hasDateFormatter

      + +
      +

      See

      +

      setDateFormat:

      + +
      +

      See

      +

      dateFromString:

      + +
      +

      See

      +

      stringFromDate:

      + +
      +

      See

      +

      storeableDateFormat:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringFromDate:(nonnull NSDate *)date;
      + +
      +
      +

      Swift

      +
      func string(from date: Date) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + date + + +
      +

      NSDate of date to convert to NSString .

      +
      +
      +
      +
      +

      Return Value

      +

      The NSString representation of the date; nil if no formatter is set.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Return results of SQL to variable

    +

    +
    +
    +
      +
    • +
      + + + + -intForQuery: + +
      +
      +
      +
      +
      +
      +

      Return int value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)intForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      int value.

      +
      +
      +
      +
    • +
    • +
      + + + + -longForQuery: + +
      +
      +
      +
      +
      +
      +

      Return long value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long)longForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      long value.

      +
      +
      +
      +
    • +
    • +
      + + + + -boolForQuery: + +
      +
      +
      +
      +
      +
      +

      Return BOOL value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)boolForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      BOOL value.

      +
      +
      +
      +
    • +
    • +
      + + + + -doubleForQuery: + +
      +
      +
      +
      +
      +
      +

      Return double value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)doubleForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      double value.

      +
      +
      +
      +
    • +
    • +
      + + + + -stringForQuery: + +
      +
      +
      +
      +
      +
      +

      Return NSString value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      NSString value.

      +
      +
      +
      +
    • +
    • +
      + + + + -dataForQuery: + +
      +
      +
      +
      +
      +
      +

      Return NSData value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)dataForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      NSData value.

      +
      +
      +
      +
    • +
    • +
      + + + + -dateForQuery: + +
      +
      +
      +
      +
      +
      +

      Return NSDate value for query

      +
      +

      Note

      +

      This is not available from Swift.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateForQuery:(nonnull NSString *)query, ...;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + query + + +
      +

      The SQL query to be performed, followed by a list of parameters that will be bound to the ? placeholders in the SQL query.

      +
      +
      +
      +
      +

      Return Value

      +

      NSDate value.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Schema related operations

    +

    +
    +
    +
      +
    • +
      + + + + -tableExists: + +
      +
      +
      +
      +
      +
      +

      Does table exist in database?

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)tableExists:(nonnull NSString *)tableName;
      + +
      +
      +

      Swift

      +
      func tableExists(_ tableName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + tableName + + +
      +

      The name of the table being looked for.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if table found; NO if not found.

      +
      +
      +
      +
    • +
    • +
      + + + + -getSchema + +
      +
      +
      +
      +
      +
      +

      The schema of the database.

      + +

      This will be the schema for the entire database. For each entity, each row of the result set will include the following fields:

      + +
        +
      • type - The type of entity (e.g. table, index, view, or trigger)
      • +
      • name - The name of the object
      • +
      • tbl_name - The name of the table to which the object references
      • +
      • rootpage - The page number of the root b-tree page for tables and indices
      • +
      • sql - The SQL that created the entity

      • +
      +

      See

      +

      SQLite File Format

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)getSchema;
      + +
      +
      +

      Swift

      +
      func getSchema() -> FMResultSet?
      + +
      +
      +
      +

      Return Value

      +

      FMResultSet of schema; nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -getTableSchema: + +
      +
      +
      +
      +
      +
      +

      The schema of the database.

      + +

      This will be the schema for a particular table as report by SQLite PRAGMA, for example:

      +
      PRAGMA table_info('employees')
      +
      + +

      This will report:

      + +
        +
      • cid - The column ID number
      • +
      • name - The name of the column
      • +
      • type - The data type specified for the column
      • +
      • notnull - whether the field is defined as NOT NULL (i.e. values required)
      • +
      • dflt_value - The default value for the column
      • +
      • pk - Whether the field is part of the primary key of the table

      • +
      +

      See

      +

      table_info

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (FMResultSet *_Nullable)getTableSchema:(nonnull NSString *)tableName;
      + +
      +
      +

      Swift

      +
      func getTableSchema(_ tableName: String) -> FMResultSet?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + tableName + + +
      +

      The name of the table for whom the schema will be returned.

      +
      +
      +
      +
      +

      Return Value

      +

      FMResultSet of schema; nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Test to see if particular column exists for particular table in database

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)columnExists:(nonnull NSString *)columnName
      +     inTableWithName:(nonnull NSString *)tableName;
      + +
      +
      +

      Swift

      +
      func columnExists(_ columnName: String, inTableWithName tableName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + columnName + + +
      +

      The name of the column.

      +
      +
      + + tableName + + +
      +

      The name of the table.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if column exists in table in question; NO otherwise.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use columnExists:inTableWithName: instead

      + +
      +
      +

      Test to see if particular column exists for particular table in database

      +
      +

      See

      +

      columnExists:inTableWithName:

      + +
      +

      Warning

      +

      Deprecated - use <columnExists:inTableWithName:> instead.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)columnExists:(nonnull NSString *)tableName
      +          columnName:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func columnExists(_ tableName: String, columnName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + columnName + + +
      +

      The name of the column.

      +
      +
      + + tableName + + +
      +

      The name of the table.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if column exists in table in question; NO otherwise.

      +
      +
      +
      +
    • +
    • +
      + + + + -validateSQL:error: + +
      +
      +
      +
      +
      +
      +

      Validate SQL statement

      + +

      This validates SQL statement by performing sqlite3_prepare_v2, but not returning the results, but instead immediately calling sqlite3_finalize.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)validateSQL:(nonnull NSString *)sql
      +              error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func validateSQL(_ sql: String) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + sql + + +
      +

      The SQL statement being validated.

      +
      +
      + + error + + +
      +

      This is a pointer to a NSError object that will receive the autoreleased NSError object if there was any error. If this is nil , no NSError result will be returned.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if validation succeeded without incident; NO otherwise.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Application identifier tasks

    +

    +
    +
    +
      +
    • +
      + + + + applicationID + +
      +
      +
      +
      +
      +
      +

      Retrieve application ID

      +
      +

      See

      +

      setApplicationID:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) uint32_t applicationID;
      + +
      +
      +

      Swift

      +
      var applicationID: UInt32 { get set }
      + +
      +
      +
      +

      Return Value

      +

      The uint32_t numeric value of the application ID.

      +
      +
      +
      +
    • +
    • +
      + + + + applicationIDString + +
      +
      +
      +
      +
      +
      +

      Retrieve application ID string

      +
      +

      See

      + setApplicationIDString: + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, retain) NSString *_Nonnull applicationIDString;
      + +
      +
      +

      Swift

      +
      var applicationIDString: String { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    user version identifier tasks

    +

    +
    +
    +
      +
    • +
      + + + + userVersion + +
      +
      +
      +
      +
      +
      +

      Retrieve user version

      +
      +

      See

      + setUserVersion: + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic) uint32_t userVersion;
      + +
      +
      +

      Swift

      +
      var userVersion: UInt32 { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabasePool.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabasePool.html new file mode 100644 index 00000000..81dac6a5 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabasePool.html @@ -0,0 +1,1467 @@ + + + + FMDatabasePool Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDatabasePool

    +
    +
    +
    @interface FMDatabasePool : NSObject
    + +
    +
    +

    Pool of FMDatabase objects.

    + +

    See also

    + +
    +

    Warning

    +

    Before using FMDatabasePool , please consider using FMDatabaseQueue instead.

    + +
    + +

    If you really really really know what you’re doing and 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!

    + +

    For an example on deadlocking, search for: + ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD + in the main.m file.

    + +
    +
    +
    +
      +
    • +
      + + + + path + +
      +
      +
      +
      +
      +
      +

      Database path

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (copy, nullable) NSString *path;
      + +
      +
      +

      Swift

      +
      var path: String? { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + delegate + +
      +
      +
      +
      +
      +
      +

      Delegate object

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nullable) id delegate;
      + +
      +
      +

      Swift

      +
      unowned(unsafe) var delegate: AnyObject? { get set }
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Maximum number of databases to create

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property NSUInteger maximumNumberOfDatabasesToCreate;
      + +
      +
      +

      Swift

      +
      var maximumNumberOfDatabasesToCreate: UInt { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + openFlags + +
      +
      +
      +
      +
      +
      +

      Open flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (readonly) int openFlags;
      + +
      +
      +

      Swift

      +
      var openFlags: Int32 { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + vfsName + +
      +
      +
      +
      +
      +
      +

      Custom virtual file system name

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (copy, nullable) NSString *vfsName;
      + +
      +
      +

      Swift

      +
      var vfsName: String? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Initialization

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Create pool using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + +databasePoolWithURL: + +
      +
      +
      +
      +
      +
      +

      Create pool using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithURL:(NSURL *_Nullable)url;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using path and specified flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithPath:(NSString *_Nullable)aPath
      +                                       flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using file URL and specified flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull instancetype)databasePoolWithURL:(NSURL *_Nullable)url
      +                                      flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath: + +
      +
      +
      +
      +
      +
      +

      Create pool using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +

      Swift

      +
      init(path aPath: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL: + +
      +
      +
      +
      +
      +
      +

      Create pool using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url;
      + +
      +
      +

      Swift

      +
      init(url: URL?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file `NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath:flags: + +
      +
      +
      +
      +
      +
      +

      Create pool using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)aPath
      +                               flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init(path aPath: String?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL:flags: + +
      +
      +
      +
      +
      +
      +

      Create pool using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init(url: URL?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithPath:(NSString *_Nullable)aPath
      +                               flags:(int)openFlags
      +                                 vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init(path aPath: String?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create pool using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nonnull instancetype)initWithURL:(NSURL *_Nullable)url
      +                              flags:(int)openFlags
      +                                vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init(url: URL?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabasePool object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + +databaseClass + +
      +
      +
      +
      +
      +
      +

      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.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull Class)databaseClass;
      + +
      +
      +

      Swift

      +
      class func databaseClass() -> AnyClass
      + +
      +
      +
      +

      Return Value

      +

      The Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Keeping track of checked in/out databases

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Number of checked-in databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) NSUInteger countOfCheckedInDatabases;
      + +
      +
      +

      Swift

      +
      var countOfCheckedInDatabases: UInt { get }
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Number of checked-out databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) NSUInteger countOfCheckedOutDatabases;
      + +
      +
      +

      Swift

      +
      var countOfCheckedOutDatabases: UInt { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + countOfOpenDatabases + +
      +
      +
      +
      +
      +
      +

      Total number of databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) NSUInteger countOfOpenDatabases;
      + +
      +
      +

      Swift

      +
      var countOfOpenDatabases: UInt { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -releaseAllDatabases + +
      +
      +
      +
      +
      +
      +

      Release all databases in pool

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)releaseAllDatabases;
      + +
      +
      +

      Swift

      +
      func releaseAllDatabases()
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Perform database operations in pool

    +

    +
    +
    +
      +
    • +
      + + + + -inDatabase: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDatabase:(nonnull void (^)(FMDatabase *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDatabase(_ block: (FMDatabase) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inTransaction: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using transaction.

      +
      +

      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.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                        BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using exclusive transaction.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inExclusiveTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inExclusiveTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using deferred transaction.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDeferredTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDeferredTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using immediate transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inImmediateTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inImmediateTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inSavePoint: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations in pool using save point.

      +
      +

      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 startSavePointWithName:error: instead.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSError *_Nullable)inSavePoint:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                    BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inSavePoint(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void) -> Error?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the FMDatabasePool pool.

      +
      +
      +
      +
      +

      Return Value

      +

      NSError object if error; nil if successful.

      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabaseQueue.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabaseQueue.html new file mode 100644 index 00000000..72a58055 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMDatabaseQueue.html @@ -0,0 +1,1617 @@ + + + + FMDatabaseQueue Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDatabaseQueue

    +
    +
    +
    @interface FMDatabaseQueue : NSObject
    + +
    +
    +

    To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue .

    + +

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time.

    + +

    Instead, use FMDatabaseQueue . Here’s how to use it:

    + +

    First, make your queue.

    +
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
    +
    + +

    Then use it like so:

    +
    [queue inDatabase:^(FMDatabase *db) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    +
    +    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    +    while ([rs next]) {
    +        //…
    +    }
    +}];
    +
    + +

    An easy way to wrap things up in a transaction can be done like this:

    +
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    +
    +    // if (whoopsSomethingWrongHappened) {
    +    //     *rollback = YES;
    +    //     return;
    +    // }
    +
    +    // etc…
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    +}];
    +
    + +

    FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue ‘s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

    +
    +

    Warning

    +

    Do not instantiate a single FMDatabase object and use it across multiple threads. Use FMDatabaseQueue instead.

    + +
    +

    Warning

    +

    The calls to FMDatabaseQueue ’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

    + +
    + +

    @sa FMDatabase

    + +
    +
    +
    +
      +
    • +
      + + + + path + +
      +
      +
      +
      +
      +
      +

      Path of database

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) NSString *path;
      + +
      +
      +

      Swift

      +
      var path: String? { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + openFlags + +
      +
      +
      +
      +
      +
      +

      Open flags

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (readonly) int openFlags;
      + +
      +
      +

      Swift

      +
      var openFlags: Int32 { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + vfsName + +
      +
      +
      +
      +
      +
      +

      Custom virtual file system name

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (copy, nullable) NSString *vfsName;
      + +
      +
      +

      Swift

      +
      var vfsName: String? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Initialization, opening, and closing of queue

    +

    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Create queue using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithURL:(NSURL *_Nullable)url;
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithPath:(NSString *_Nullable)aPath
      +                                         flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nullable instancetype)databaseQueueWithURL:(NSURL *_Nullable)url
      +                                        flags:(int)openFlags;
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath: + +
      +
      +
      +
      +
      +
      +

      Create queue using path.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithPath:(NSString *_Nullable)aPath;
      + +
      +
      +

      Swift

      +
      init?(path aPath: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL: + +
      +
      +
      +
      +
      +
      +

      Create queue using file URL.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithURL:(NSURL *_Nullable)url;
      + +
      +
      +

      Swift

      +
      init?(url: URL?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + url + + +
      +

      The file `NSURL of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithPath:flags: + +
      +
      +
      +
      +
      +
      +

      Create queue using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithPath:(NSString *_Nullable)aPath
      +                                flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init?(path aPath: String?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + -initWithURL:flags: + +
      +
      +
      +
      +
      +
      +

      Create queue using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithURL:(NSURL *_Nullable)url flags:(int)openFlags;
      + +
      +
      +

      Swift

      +
      init?(url: URL?, flags openFlags: Int32)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + url + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database.

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using path and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithPath:(NSString *_Nullable)aPath
      +                                flags:(int)openFlags
      +                                  vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init?(path aPath: String?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + aPath + + +
      +

      The file path of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create queue using file URL and specified flags.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (nullable instancetype)initWithURL:(NSURL *_Nullable)url
      +                               flags:(int)openFlags
      +                                 vfs:(NSString *_Nullable)vfsName;
      + +
      +
      +

      Swift

      +
      init?(url: URL?, flags openFlags: Int32, vfs vfsName: String?)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + url + + +
      +

      The file `NSURL of the database.

      +
      +
      + + openFlags + + +
      +

      Flags passed to the openWithFlags method of the database

      +
      +
      + + vfsName + + +
      +

      The name of a custom virtual file system

      +
      +
      +
      +
      +

      Return Value

      +

      The FMDatabaseQueue object. nil on error.

      +
      +
      +
      +
    • +
    • +
      + + + + +databaseClass + +
      +
      +
      +
      +
      +
      +

      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.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      + (nonnull Class)databaseClass;
      + +
      +
      +

      Swift

      +
      class func databaseClass() -> AnyClass
      + +
      +
      +
      +

      Return Value

      +

      The Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

      +
      +
      +
      +
    • +
    • +
      + + + + -close + +
      +
      +
      +
      +
      +
      +

      Close database used by queue.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)close;
      + +
      +
      +

      Swift

      +
      func close()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -interrupt + +
      +
      +
      +
      +
      +
      +

      Interupt pending database operation.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)interrupt;
      + +
      +
      +

      Swift

      +
      func interrupt()
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Dispatching database operations to queue

    +

    +
    +
    +
      +
    • +
      + + + + -inDatabase: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDatabase:(nonnull void (^)(FMDatabase *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDatabase(_ block: (FMDatabase) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inTransaction: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using transactions.

      +
      +

      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.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                        BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using deferred transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inDeferredTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inDeferredTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using exclusive transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inExclusiveTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inExclusiveTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Synchronously perform database operations on queue, using immediate transactions.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)inImmediateTransaction:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                 BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inImmediateTransaction(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -inSavePoint: + +
      +
      +
      +
      +
      +
      +

      Synchronously perform database operations using save point.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSError *_Nullable)inSavePoint:(nonnull void (^)(FMDatabase *_Nonnull,
      +                                                    BOOL *_Nonnull))block;
      + +
      +
      +

      Swift

      +
      func inSavePoint(_ block: (FMDatabase, UnsafeMutablePointer<ObjCBool>) -> Void) -> Error?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + block + + +
      +

      The code to be run on the queue of FMDatabaseQueue

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Checkpoint

    +

    +
    +
    +
      +
    • +
      + + + + -checkpoint:error: + +
      +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +              name:(NSString *_Nullable)name
      +             error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Performs a WAL checkpoint

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode
      +               name:(NSString *_Nullable)name
      +      logFrameCount:(int *_Nullable)logFrameCount
      +    checkpointCount:(int *_Nullable)checkpointCount
      +              error:(NSError *_Nullable *_Nullable)error;
      + +
      +
      +

      Swift

      +
      func checkpoint(_ checkpointMode: FMDBCheckpointMode, name: String?, logFrameCount: UnsafeMutablePointer<Int32>?, checkpointCount: UnsafeMutablePointer<Int32>?) throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + +
      + + checkpointMode + + +
      +

      The checkpoint mode for sqlite3_wal_checkpoint_v2

      +
      +
      + + name + + +
      +

      The db name for sqlite3_wal_checkpoint_v2

      +
      +
      + + error + + +
      +

      The NSError corresponding to the error, if any.

      +
      +
      + + logFrameCount + + +
      +

      If not NULL, then this is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.

      +
      +
      + + checkpointCount + + +
      +

      If not NULL, then this is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.

      +
      +
      +
      +
      +

      Return Value

      +

      YES on success, otherwise NO.

      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMResultSet.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMResultSet.html new file mode 100644 index 00000000..d052154b --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMResultSet.html @@ -0,0 +1,2662 @@ + + + + FMResultSet Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMResultSet

    +
    +
    +
    @interface FMResultSet : NSObject
    + +
    +
    +

    Represents the results of executing a query on an FMDatabase .

    + +

    See also

    + + + +
    +
    +
    +
      +
    • +
      + + + + parentDB + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, retain, nullable) FMDatabase *parentDB
      + +
      +
      +

      Swift

      +
      var parentDB: FMDatabase? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Properties

    +

    +
    +
    +
      +
    • +
      + + + + query + +
      +
      +
      +
      +
      +
      +

      Executed query

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) NSString *query;
      + +
      +
      +

      Swift

      +
      var query: String? { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + columnNameToIndexMap + +
      +
      +
      +
      +
      +
      +

      NSMutableDictionary mapping column names to numeric index

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (readonly) NSMutableDictionary *_Nonnull columnNameToIndexMap;
      + +
      +
      +

      Swift

      +
      var columnNameToIndexMap: NSMutableDictionary { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + statement + +
      +
      +
      +
      +
      +
      +

      FMStatement used by result set.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain, nullable) FMStatement *statement;
      + +
      +
      +

      Swift

      +
      var statement: FMStatement? { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Creating and closing a result set

    +

    +
    +
    +
      +
    • +
      + + + + -close + +
      +
      +
      +
      +
      +
      +

      Close result set

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)close;
      + +
      +
      +

      Swift

      +
      func close()
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Iterating through the result set

    +

    +
    +
    +
      +
    • +
      + + + + -next + +
      +
      +
      +
      +
      +
      +

      Retrieve next row for result set.

      + +

      You must always invoke next or nextWithError before attempting to access the values returned in a query, even if you’re only expecting one.

      +
      +

      See

      +

      hasAnotherRow

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)next;
      + +
      +
      +

      Swift

      +
      func next() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      YES if row successfully retrieved; NO if end of result set reached

      +
      +
      +
      +
    • +
    • +
      + + + + -nextWithError: + +
      +
      +
      +
      +
      +
      +

      Retrieve next row for result set.

      + +

      You must always invoke next or nextWithError before attempting to access the values returned in a query, even if you’re only expecting one.

      +
      +

      See

      +

      hasAnotherRow

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)nextWithError:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func nextWithError() throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + outErr + + +
      +

      A ‘NSError’ object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      ‘YES’ if row successfully retrieved; ‘NO’ if end of result set reached

      +
      +
      +
      +
    • +
    • +
      + + + + -step + +
      +
      +
      +
      +
      +
      +

      Perform SQL statement.

      +
      +

      See

      +

      hasAnotherRow

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)step;
      + +
      +
      +

      Swift

      +
      func step() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      ‘YES’ if successful; ‘NO’ if not.

      +
      +
      +
      +
    • +
    • +
      + + + + -stepWithError: + +
      +
      +
      +
      +
      +
      +

      Perform SQL statement.

      +
      +

      See

      +

      hasAnotherRow

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)stepWithError:(NSError *_Nullable *_Nullable)outErr;
      + +
      +
      +

      Swift

      +
      func stepWithError() throws
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + outErr + + +
      +

      A ‘NSError’ object to receive any error object (if any).

      +
      +
      +
      +
      +

      Return Value

      +

      ‘YES’ if successful; ‘NO’ if not.

      +
      +
      +
      +
    • +
    • +
      + + + + -hasAnotherRow + +
      +
      +
      +
      +
      +
      +

      Did the last call to <next> succeed in retrieving another row?

      +
      +

      See

      +

      next

      + +
      +

      Warning

      +

      The hasAnotherRow method must follow a call to <next>. If the previous database interaction was something other than a call to next, then this method may return NO, whether there is another row of data or not.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)hasAnotherRow;
      + +
      +
      +

      Swift

      +
      func hasAnotherRow() -> Bool
      + +
      +
      +
      +

      Return Value

      +

      ‘YES’ if there is another row; ‘NO’ if not.

      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Retrieving information from result set

    +

    +
    +
    +
      +
    • +
      + + + + columnCount + +
      +
      +
      +
      +
      +
      +

      How many columns in result set

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly) int columnCount;
      + +
      +
      +

      Swift

      +
      var columnCount: Int32 { get }
      + +
      +
      +
      +

      Return Value

      +

      Integer value of the number of columns.

      +
      +
      +
      +
    • +
    • +
      + + + + -columnIndexForName: + +
      +
      +
      +
      +
      +
      +

      Column index for column name

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)columnIndexForName:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func columnIndex(forName columnName: String) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Zero-based index for column.

      +
      +
      +
      +
    • +
    • +
      + + + + -columnNameForIndex: + +
      +
      +
      +
      +
      +
      +

      Column name for column index

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)columnNameForIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func columnName(for columnIdx: Int32) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      columnName NSString value of the name of the column.

      +
      +
      +
      +
    • +
    • +
      + + + + -intForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set integer value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)intForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func int(forColumn columnName: String) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      int value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -intForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set integer value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (int)intForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func int(forColumnIndex columnIdx: Int32) -> Int32
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      int value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -longForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set long value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long)longForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func long(forColumn columnName: String) -> Int
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      long value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -longForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set long value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long)longForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func long(forColumnIndex columnIdx: Int32) -> Int
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      long value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long long)longLongIntForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func longLongInt(forColumn columnName: String) -> Int64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (long long)longLongIntForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func longLongInt(forColumnIndex columnIdx: Int32) -> Int64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set unsigned long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (unsigned long long)unsignedLongLongIntForColumn:
      +    (nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func unsignedLongLongInt(forColumn columnName: String) -> UInt64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      unsigned long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set unsigned long long int value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (unsigned long long)unsignedLongLongIntForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func unsignedLongLongInt(forColumnIndex columnIdx: Int32) -> UInt64
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      unsigned long long int value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -boolForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set BOOL value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)boolForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func bool(forColumn columnName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      BOOL value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -boolForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set BOOL value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)boolForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func bool(forColumnIndex columnIdx: Int32) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      BOOL value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -doubleForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set double value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)doubleForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func double(forColumn columnName: String) -> Double
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      double value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set double value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (double)doubleForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func double(forColumnIndex columnIdx: Int32) -> Double
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      double value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -stringForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSString value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func string(forColumn columnName: String) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      String value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set NSString value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSString *_Nullable)stringForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func string(forColumnIndex columnIdx: Int32) -> String?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      String value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dateForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSDate value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func date(forColumn columnName: String) -> Date?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Date value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dateForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set NSDate value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDate *_Nullable)dateForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func date(forColumnIndex columnIdx: Int32) -> Date?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      Date value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dataForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSData value for column.

      + +

      This is useful when storing binary data in table (such as image or the like).

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)dataForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func data(forColumn columnName: String) -> Data?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Data value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -dataForColumnIndex: + +
      +
      +
      +
      +
      +
      +

      Result set NSData value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)dataForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func data(forColumnIndex columnIdx: Int32) -> Data?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      Data value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -UTF8StringForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set (const unsigned char *) value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (const unsigned char *_Nullable)UTF8StringForColumn:
      +    (nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func utf8String(forColumn columnName: String) -> UnsafePointer<UInt8>?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      (const unsigned char *) value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use UTF8StringForColumn instead

      + +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (const unsigned char * _Nullable)UTF8StringForColumnName:(NSString*)columnName __deprecated_msg("Use UTF8StringForColumn instead");
      + +
      +
      +

      Swift

      +
      func utf8String(forColumnName columnName: String) -> UnsafePointer<UInt8>?
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set (const unsigned char *) value for column.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (const unsigned char *_Nullable)UTF8StringForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func utf8String(forColumnIndex columnIdx: Int32) -> UnsafePointer<UInt8>?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      (const unsigned char *) value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -objectForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set object for column.

      +
      +

      See

      +

      objectForKeyedSubscript:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (id _Nullable)objectForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func object(forColumn columnName: String) -> Any?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      Name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

      +
      +
      +
      +
    • +
    • +
      + + + + -objectForColumnName: + +
      +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use objectForColumn instead

      + +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (id _Nullable)objectForColumnName:(NSString*)columnName __deprecated_msg("Use objectForColumn instead");
      + +
      +
      +

      Swift

      +
      func object(forColumnName columnName: String) -> Any?
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set object for column.

      +
      +

      See

      +

      objectAtIndexedSubscript:

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (id _Nullable)objectForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func object(forColumnIndex columnIdx: Int32) -> Any?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set object for column.

      + +

      This method allows the use of the “boxed” syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:

      +
      id result = rs[@"employee_name"];
      +
      + +

      This simplified syntax is equivalent to calling:

      +
      id result = [rs objectForKeyedSubscript:@"employee_name"];
      +
      + +

      which is, it turns out, equivalent to calling:

      +
      id result = [rs objectForColumnName:@"employee_name"];
      +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (id _Nullable)objectForKeyedSubscript:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      subscript(columnName: String) -> Any? { get }
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set object for column.

      + +

      This method allows the use of the “boxed” syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:

      +
      id result = rs[0];
      +
      + +

      This simplified syntax is equivalent to calling:

      +
      id result = [rs objectForKeyedSubscript:0];
      +
      + +

      which is, it turns out, equivalent to calling:

      +
      id result = [rs objectForColumnName:0];
      +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (id _Nullable)objectAtIndexedSubscript:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      subscript(columnIdx: Int32) -> Any? { get }
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      Either NSNumber , NSString , NSData , or NSNull . If the column was NULL , this returns [NSNull null] object.

      +
      +
      +
      +
    • +
    • +
      + + + + -dataNoCopyForColumn: + +
      +
      +
      +
      +
      +
      +

      Result set NSData value for column.

      +
      +

      Warning

      +

      If you are going to use this data after you iterate over the next row, or after you close the +result set, make sure to make a copy of the data first (or just use <dataForColumn:>/<dataForColumnIndex:>) +If you don’t, you’re going to be in a world of hurt when you try and use the data.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)dataNoCopyForColumn:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func dataNoCopy(forColumn columnName: String) -> Data?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      Data value of the result set’s column.

      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Result set NSData value for column.

      +
      +

      Warning

      +

      If you are going to use this data after you iterate over the next row, or after you close the +result set, make sure to make a copy of the data first (or just use <dataForColumn:>/<dataForColumnIndex:>) +If you don’t, you’re going to be in a world of hurt when you try and use the data.

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSData *_Nullable)dataNoCopyForColumnIndex:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func dataNoCopy(forColumnIndex columnIdx: Int32) -> Data?
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      Data value of the result set’s column.

      +
      +
      +
      +
    • +
    • +
      + + + + -columnIndexIsNull: + +
      +
      +
      +
      +
      +
      +

      Is the column NULL ?

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)columnIndexIsNull:(int)columnIdx;
      + +
      +
      +

      Swift

      +
      func columnIndexIsNull(_ columnIdx: Int32) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnIdx + + +
      +

      Zero-based index for column.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if column is NULL ; NO if not NULL .

      +
      +
      +
      +
    • +
    • +
      + + + + -columnIsNull: + +
      +
      +
      +
      +
      +
      +

      Is the column NULL ?

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)columnIsNull:(nonnull NSString *)columnName;
      + +
      +
      +

      Swift

      +
      func columnIsNull(_ columnName: String) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + columnName + + +
      +

      NSString value of the name of the column.

      +
      +
      +
      +
      +

      Return Value

      +

      YES if column is NULL ; NO if not NULL .

      +
      +
      +
      +
    • +
    • +
      + + + + resultDictionary + +
      +
      +
      +
      +
      +
      +

      Returns a dictionary of the row results mapped to case sensitive keys of the column names.

      +
      +

      Warning

      + The keys to the dictionary are case sensitive of the column names. + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (nonatomic, readonly, nullable) NSDictionary *resultDictionary;
      + +
      +
      +

      Swift

      +
      var resultDictionary: [AnyHashable : Any]? { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -resultDict + +
      +
      +
      +
      +
      +
      +

      Deprecated

      +

      Use resultDictionary instead

      + +
      +
      +

      Returns a dictionary of the row results

      +
      +

      See

      +

      resultDictionary

      + +
      +

      Warning

      +

      Deprecated: Please use <resultDictionary> instead. Also, beware that <resultDictionary> is case sensitive!

      + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (NSDictionary *_Nullable)resultDict;
      + +
      +
      +

      Swift

      +
      func resultDict() -> [AnyHashable : Any]?
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Key value coding magic

    +

    +
    +
    +
      +
    • +
      + + + + -kvcMagic: + +
      +
      +
      +
      +
      +
      +

      Performs setValue to yield support for key value observing.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)kvcMagic:(nonnull id)object;
      + +
      +
      +

      Swift

      +
      func kvcMagic(_ object: Any)
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + object + + +
      +

      The object for which the values will be set. This is the key-value-coding compliant object that you might, for example, observe.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Binding values

    +

    +
    +
    +
      +
    • +
      + + + + -bindWithArray: + +
      +
      +
      +
      +
      +
      +

      Bind array of values to prepared statement.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)bindWithArray:(nonnull NSArray *)array;
      + +
      +
      +

      Swift

      +
      func bind(with array: [Any]) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + array + + +
      +

      Array of values to bind to SQL statement.

      +
      +
      +
      +
      +
      +
    • +
    • +
      + + + + -bindWithDictionary: + +
      +
      +
      +
      +
      +
      +

      Bind dictionary of values to prepared statement.

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (BOOL)bindWithDictionary:(nonnull NSDictionary *)dictionary;
      + +
      +
      +

      Swift

      +
      func bind(with dictionary: [AnyHashable : Any]) -> Bool
      + +
      +
      +
      +

      Parameters

      + + + + + + + +
      + + dictionary + + +
      +

      Dictionary of values to bind to SQL statement.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMStatement.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMStatement.html new file mode 100644 index 00000000..618c4b1f --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Classes/FMStatement.html @@ -0,0 +1,465 @@ + + + + FMStatement Class Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMStatement

    +
    +
    +
    @interface FMStatement : NSObject {
    +  void *_statement;
    +  NSString *_query;
    +  long _useCount;
    +  BOOL _inUse;
    +}
    + +
    +
    +

    Objective-C wrapper for sqlite3_stmt

    + +

    This is a wrapper for a SQLite sqlite3_stmt . Generally when using FMDB you will not need to interact directly with FMStatement, but rather with FMDatabase and FMResultSet only.

    + +

    See also

    + + + +
    +
    +
    +
      +
    • +
      + + + + _statement + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      void *_statement
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + _query + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      NSString *_query
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + _useCount + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      long _useCount
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + _inUse + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      BOOL _inUse
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Properties

    +

    +
    +
    +
      +
    • +
      + + + + useCount + +
      +
      +
      +
      +
      +
      +

      Usage count

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property long useCount;
      + +
      +
      +

      Swift

      +
      var useCount: Int { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + query + +
      +
      +
      +
      +
      +
      +

      SQL statement

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property (retain) NSString *_Nonnull query;
      + +
      +
      +

      Swift

      +
      var query: String { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + statement + +
      +
      +
      +
      +
      +
      +

      SQLite sqlite3_stmt

      +
      +

      See

      + sqlite3_stmt + +
      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property void *_Nonnull statement;
      + +
      +
      +

      Swift

      +
      var statement: UnsafeMutableRawPointer { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + inUse + +
      +
      +
      +
      +
      +
      +

      Indication of whether the statement is in use

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      @property BOOL inUse;
      + +
      +
      +

      Swift

      +
      var inUse: Bool { get set }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + + +
    + +

    Closing and Resetting

    +

    +
    +
    +
      +
    • +
      + + + + -close + +
      +
      +
      +
      +
      +
      +

      Close statement

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)close;
      + +
      +
      +

      Swift

      +
      func close()
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + -reset + +
      +
      +
      +
      +
      +
      +

      Reset statement

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      - (void)reset;
      + +
      +
      +

      Swift

      +
      func reset()
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Constants.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Constants.html new file mode 100644 index 00000000..34712348 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Constants.html @@ -0,0 +1,172 @@ + + + + Constants Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Constants

    +

    The following constants are available globally.

    + +
    +
    +
    +
      +
    • +
      + + + + FMDBVersionNumber + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FOUNDATION_EXPORT double FMDBVersionNumber
      + +
      +
      +

      Swift

      +
      var FMDBVersionNumber: Double
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + FMDBVersionString + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FOUNDATION_EXPORT const unsigned char FMDBVersionString[]
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 00000000..6da8b957 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,185 @@ + + + + Enumerations Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Enumerations

    +

    The following enumerations are available globally.

    + +
    +
    +
    +
      +
    • +
      + + + + FMDBCheckpointMode + +
      +
      +
      +
      +
      +
      +

      Enumeration used in checkpoint methods.

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      enum FMDBCheckpointMode {}
      + +
      +
      +

      Swift

      +
      enum FMDBCheckpointMode : Int32
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueType + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + + See more +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      NS_ENUM(int, SqliteValueType) {
      +    SqliteValueTypeInteger = 1,
      +    SqliteValueTypeFloat   = 2,
      +    SqliteValueTypeText    = 3,
      +    SqliteValueTypeBlob    = 4,
      +    SqliteValueTypeNull    = 5
      +}
      + +
      +
      +

      Swift

      +
      enum SqliteValueType : Int32
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/FMDBCheckpointMode.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/FMDBCheckpointMode.html new file mode 100644 index 00000000..afc4e2c5 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/FMDBCheckpointMode.html @@ -0,0 +1,247 @@ + + + + FMDBCheckpointMode Enumeration Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    FMDBCheckpointMode

    +
    +
    +
    enum FMDBCheckpointMode {}
    + +
    +
    +

    Enumeration used in checkpoint methods.

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModePassive  = 0
      + +
      +
      +

      Swift

      +
      case passive = 0
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModeFull     = 1
      + +
      +
      +

      Swift

      +
      case full = 1
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModeRestart  = 2
      + +
      +
      +

      Swift

      +
      case restart = 2
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      FMDBCheckpointModeTruncate = 3
      + +
      +
      +

      Swift

      +
      case truncate = 3
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/SqliteValueType.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/SqliteValueType.html new file mode 100644 index 00000000..cf5fd142 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Enums/SqliteValueType.html @@ -0,0 +1,285 @@ + + + + SqliteValueType Enumeration Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    SqliteValueType

    +
    +
    +
    NS_ENUM(int, SqliteValueType) {
    +    SqliteValueTypeInteger = 1,
    +    SqliteValueTypeFloat   = 2,
    +    SqliteValueTypeText    = 3,
    +    SqliteValueTypeBlob    = 4,
    +    SqliteValueTypeNull    = 5
    +}
    + +
    +
    +

    Undocumented

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeInteger = 1
      + +
      +
      +

      Swift

      +
      case integer = 1
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeFloat + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeFloat   = 2
      + +
      +
      +

      Swift

      +
      case float = 2
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeText + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeText    = 3
      + +
      +
      +

      Swift

      +
      case text = 3
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeBlob + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeBlob    = 4
      + +
      +
      +

      Swift

      +
      case blob = 4
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + SqliteValueTypeNull + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      SqliteValueTypeNull    = 5
      + +
      +
      +

      Swift

      +
      case null = 5
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/Type Definitions.html b/html/docsets/FMDB.docset/Contents/Resources/Documents/Type Definitions.html new file mode 100644 index 00000000..c81400f3 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/Type Definitions.html @@ -0,0 +1,145 @@ + + + + Type Definitions Reference + + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    Type Definitions

    +

    The following type definitions are available globally.

    + +
    +
    +
    +
      +
    • + +
      +
      +
      +
      +
      +

      Callback block used by executeStatements:withResultBlock:

      + +
      +
      +

      Declaration

      +
      +

      Objective-C

      +
      typedef int (^FMDBExecuteStatementsCallbackBlock)(NSDictionary *_Nonnull)
      + +
      +
      +

      Swift

      +
      typealias FMDBExecuteStatementsCallbackBlock = ([AnyHashable : Any]) -> Int32
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/css/highlight.css b/html/docsets/FMDB.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 00000000..d0db0e13 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/css/jazzy.css b/html/docsets/FMDB.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 00000000..c3090c05 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,374 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 2; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 2; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .main-content .section-name p { + margin-bottom: inherit; + line-height: inherit; } + .main-content .section-name code { + background-color: inherit; + padding: inherit; + color: inherit; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section-name-container { + position: relative; + display: inline-block; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 35px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 20px; } + .item .discouraged { + text-decoration: line-through; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/img/carat.png b/html/docsets/FMDB.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/img/dash.png b/html/docsets/FMDB.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 ShohtYzipXxh2)4xTk + + + FMDB Reference + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    + +

    FMDB v2.7

    + + + +

    CocoaPods Compatible +Carthage Compatible

    + +

    This is an Objective-C wrapper around SQLite.

    +

    The FMDB Mailing List:

    + +

    https://groups.google.com/group/fmdb

    +

    Read the SQLite FAQ:

    + +

    https://www.sqlite.org/faq.html

    + +

    Since FMDB is built on top of SQLite, you’re going to want to read this page top to bottom at least once. And while you’re there, make sure to bookmark the SQLite Documentation page: https://www.sqlite.org/docs.html

    +

    Contributing

    + +

    Do you have an awesome idea that deserves to be in FMDB? You might consider pinging ccgus first to make sure he hasn’t already ruled it out for some reason. Otherwise pull requests are great, and make sure you stick to the local coding conventions. However, please be patient and if you haven’t heard anything from ccgus for a week or more, you might want to send a note asking what’s up.

    +

    Installing

    +

    CocoaPods

    + +

    FMDB can be installed using CocoaPods.

    + +

    If you haven’t done so already, you might want to initialize the project, to have it produce a Podfile template for you:

    +
    $ pod init
    +
    + +

    Then, edit the Podfile, adding FMDB:

    +
    # Uncomment the next line to define a global platform for your project
    +# platform :ios, '9.0'
    +
    +target 'MyApp' do
    +    # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
    +    use_frameworks!
    +
    +    # Pods for MyApp2
    +
    +    pod 'FMDB'
    +    # pod 'FMDB/FTS'   # FMDB with FTS
    +    # pod 'FMDB/standalone'   # FMDB with latest SQLite amalgamation source
    +    # pod 'FMDB/standalone/FTS'   # FMDB with latest SQLite amalgamation source and FTS
    +    # pod 'FMDB/SQLCipher'   # FMDB with SQLCipher
    +end
    +
    + +

    Then install the pods:

    +
    $ pod install
    +
    + +

    Then open the .xcworkspace rather than the .xcodeproj.

    + +

    For more information on Cocoapods visit https://cocoapods.org.

    + +

    If using FMDB with SQLCipher you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the -DSQLITE_HAS_CODEC flag.

    +

    Carthage

    + +

    Once you make sure you have the latest version of Carthage, you can open up a command line terminal, navigate to your project’s main directory, and then do the following commands:

    +
    $ echo ' github "ccgus/fmdb" ' > ./Cartfile
    +$ carthage update
    +
    + +

    You can then configure your project as outlined in Carthage’s Getting Started (i.e. for iOS, adding the framework to the “Link Binary with Libraries” in your target and adding the copy-frameworks script; in macOS, adding the framework to the list of “Embedded Binaries”).

    +

    FMDB Class Reference:

    + +

    https://ccgus.github.io/fmdb/html/index.html

    +

    Automatic Reference Counting (ARC) or Manual Memory Management?

    + +

    You can use either style in your Cocoa project. FMDB will figure out which you are using at compile time and do the right thing.

    +

    What’s New in FMDB 2.7

    + +

    FMDB 2.7 attempts to support a more natural interface. This represents a fairly significant change for Swift developers (audited for nullability; shifted to properties in external interfaces where possible rather than methods; etc.). For Objective-C developers, this should be a fairly seamless transition (unless you were using the ivars that were previously exposed in the public interface, which you shouldn’t have been doing, anyway!).

    +

    Nullability and Swift Optionals

    + +

    FMDB 2.7 is largely the same as prior versions, but has been audited for nullability. For Objective-C users, this simply means that if you perform a static analysis of your FMDB-based project, you may receive more meaningful warnings as you review your project, but there are likely to be few, if any, changes necessary in your code.

    + +

    For Swift users, this nullability audit results in changes that are not entirely backward compatible with FMDB 2.6, but is a little more Swifty. Before FMDB was audited for nullability, Swift was forced to defensively assume that variables were optional, but the library now more accurately knows which properties and method parameters are optional, and which are not.

    + +

    This means, though, that Swift code written for FMDB 2.7 may require changes. For example, consider the following Swift 3/Swift 4 code for FMDB 2.6:

    +
    queue.inTransaction { db, rollback in
    +    do {
    +        guard let db == db else {
    +            // handle error here
    +            return
    +        }
    +
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [1])
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [2])
    +    } catch {
    +        rollback?.pointee = true
    +    }
    +}
    +
    + +

    Because FMDB 2.6 was not audited for nullability, Swift inferred that db and rollback were optionals. But, now, in FMDB 2.7, Swift now knows that, for example, neither db nor rollback above can be nil, so they are no longer optionals. Thus it becomes:

    +
    queue.inTransaction { db, rollback in
    +    do {
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [1])
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [2])
    +    } catch {
    +        rollback.pointee = true
    +    }
    +}
    +
    +

    Custom Functions

    + +

    In the past, when writing custom functions, you would have to generally include your own @autoreleasepool block to avoid problems when writing functions that scanned through a large table. Now, FMDB will automatically wrap it in an autorelease pool, so you don’t have to.

    + +

    Also, in the past, when retrieving the values passed to the function, you had to drop down to the SQLite C API and include your own sqlite3_value_XXX calls. There are now FMDatabase methods, valueInt, valueString, etc., so you can stay within Swift and/or Objective-C, without needing to call the C functions yourself. Likewise, when specifying the return values, you no longer need to call sqlite3_result_XXX C API, but rather you can use FMDatabase methods, resultInt, resultString, etc. There is a new enum for valueType called SqliteValueType, which can be used for checking the type of parameter passed to the custom function.

    + +

    Thus, you can do something like (as of Swift 3):

    +
    db.makeFunctionNamed("RemoveDiacritics", arguments: 1) { context, argc, argv in
    +    guard db.valueType(argv[0]) == .text || db.valueType(argv[0]) == .null else {
    +        db.resultError("Expected string parameter", context: context)
    +        return
    +    }
    +
    +    if let string = db.valueString(argv[0])?.folding(options: .diacriticInsensitive, locale: nil) {
    +        db.resultString(string, context: context)
    +    } else {
    +        db.resultNull(context: context)
    +    }
    +}
    +
    + +

    And you can then use that function in your SQL (in this case, matching both “Jose” and “José”):

    +
    SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'
    +
    + +

    Note, the method makeFunctionNamed:maximumArguments:withBlock: has been renamed to makeFunctionNamed:arguments:block:, to more accurately reflect the functional intent of the second parameter.

    +

    API Changes

    + +

    In addition to the makeFunctionNamed noted above, there are a few other API changes. Specifically,

    + +
      +
    • To become consistent with the rest of the API, the methods objectForColumnName and UTF8StringForColumnName have been renamed to objectForColumn and UTF8StringForColumn.

    • +
    • Note, the objectForColumn (and the associted subscript operator) now returns nil if an invalid column name/index is passed to it. It used to return NSNull.

    • +
    • To avoid confusion with FMDatabaseQueue method inTransaction, which performs transactions, the FMDatabase method to determine whether you are in a transaction or not, inTransaction, has been replaced with a read-only property, isInTransaction.

    • +
    • Several functions have been converted to properties, namely, databasePath, maxBusyRetryTimeInterval, shouldCacheStatements, sqliteHandle, hasOpenResultSets, lastInsertRowId, changes, goodConnection, columnCount, resultDictionary, applicationID, applicationIDString, userVersion, countOfCheckedInDatabases, countOfCheckedOutDatabases, and countOfOpenDatabases. For Objective-C users, this has little material impact, but for Swift users, it results in a slightly more natural interface. Note: For Objective-C developers, previously versions of FMDB exposed many ivars (but we hope you weren’t using them directly, anyway!), but the implmentation details for these are no longer exposed.

    • +
    +

    URL Methods

    + +

    In keeping with Apple’s shift from paths to URLs, there are now NSURL renditions of the various init methods, previously only accepting paths.

    +

    Usage

    + +

    There are three main classes in FMDB:

    + +
      +
    1. FMDatabase - Represents a single SQLite database. Used for executing SQL statements.
    2. +
    3. FMResultSet - Represents the results of executing a query on an FMDatabase.
    4. +
    5. FMDatabaseQueue - If you’re wanting to perform queries and updates on multiple threads, you’ll want to use this class. It’s described in the “Thread Safety” section below.
    6. +
    +

    Database Creation

    + +

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

    + +
      +
    1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.
    2. +
    3. An empty string (@""). An empty database is created at a temporary location. This database is deleted when the FMDatabase connection is closed.
    4. +
    5. NULL. An in-memory database is created. This database will be destroyed when the FMDatabase connection is closed.
    6. +
    + +

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://www.sqlite.org/inmemorydb.html)

    +
    NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.db"];
    +FMDatabase *db = [FMDatabase databaseWithPath:path];
    +
    +

    Opening

    + +

    Before you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database.

    +
    if (![db open]) {
    +    // [db release];   // uncomment this line in manual referencing code; in ARC, this is not necessary/permitted
    +    db = nil;
    +    return;
    +}
    +
    +

    Executing Updates

    + +

    Any sort of SQL statement which is not a SELECT statement qualifies as an update. This includes CREATE, UPDATE, INSERT, ALTER, COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE statements (plus many more). Basically, if your SQL statement does not begin with SELECT, it is an update statement.

    + +

    Executing updates returns a single value, a BOOL. A return value of YES means the update was successfully executed, and a return value of NO means that some error was encountered. You may invoke the -lastErrorMessage and -lastErrorCode methods to retrieve more information.

    +

    Executing Queries

    + +

    A SELECT statement is a query and is executed via one of the -executeQuery... methods.

    + +

    Executing queries returns an FMResultSet object if successful, and nil upon failure. You should use the -lastErrorMessage and -lastErrorCode methods to determine why a query failed.

    + +

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” from one record to the other. With FMDB, the easiest way to do that is like this:

    +
    FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];
    +while ([s next]) {
    +    //retrieve values for each record
    +}
    +
    + +

    You must always invoke -[FMResultSet next] before attempting to access the values returned in a query, even if you’re only expecting one:

    +
    FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
    +if ([s next]) {
    +    int totalCount = [s intForColumnIndex:0];
    +}
    +
    + +

    FMResultSet has many methods to retrieve data in an appropriate format:

    + +
      +
    • intForColumn:
    • +
    • longForColumn:
    • +
    • longLongIntForColumn:
    • +
    • boolForColumn:
    • +
    • doubleForColumn:
    • +
    • stringForColumn:
    • +
    • dateForColumn:
    • +
    • dataForColumn:
    • +
    • dataNoCopyForColumn:
    • +
    • UTF8StringForColumn:
    • +
    • objectForColumn:
    • +
    + +

    Each of these methods also has a {type}ForColumnIndex: variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column’s name.

    + +

    Typically, there’s no need to -close an FMResultSet yourself, since that happens when either the result set is exhausted. However, if you only pull out a single request or any other number of requests which don’t exhaust the result set, you will need to call the -close method on the FMResultSet.

    +

    Closing

    + +

    When you have finished executing queries and updates on the database, you should -close the FMDatabase connection so that SQLite will relinquish any resources it has acquired during the course of its operation.

    +
    [db close];
    +
    +

    Transactions

    + +

    FMDatabase can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement.

    +

    Multiple Statements and Batch Stuff

    + +

    You can use FMDatabase‘s executeStatements:withResultBlock: to do multiple statements in a string:

    +
    NSString *sql = @"create table bulktest1 (id integer primary key autoincrement, x text);"
    +                 "create table bulktest2 (id integer primary key autoincrement, y text);"
    +                 "create table bulktest3 (id integer primary key autoincrement, z text);"
    +                 "insert into bulktest1 (x) values ('XXX');"
    +                 "insert into bulktest2 (y) values ('YYY');"
    +                 "insert into bulktest3 (z) values ('ZZZ');";
    +
    +success = [db executeStatements:sql];
    +
    +sql = @"select count(*) as count from bulktest1;"
    +       "select count(*) as count from bulktest2;"
    +       "select count(*) as count from bulktest3;";
    +
    +success = [self.db executeStatements:sql withResultBlock:^int(NSDictionary *dictionary) {
    +    NSInteger count = [dictionary[@"count"] integerValue];
    +    XCTAssertEqual(count, 1, @"expected one record for dictionary %@", dictionary);
    +    return 0;
    +}];
    +
    +

    Data Sanitization

    + +

    When providing a SQL statement to FMDB, you should not attempt to “sanitize” any values before insertion. Instead, you should use the standard SQLite binding syntax:

    +
    INSERT INTO myTable VALUES (?, ?, ?, ?)
    +
    + +

    The ? character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an NSArray, NSDictionary, or a va_list), which are properly escaped for you.

    + +

    And, to use that SQL with the ? placeholders from Objective-C:

    +
    NSInteger identifier = 42;
    +NSString *name = @"Liam O'Flaherty (\"the famous Irish author\")";
    +NSDate *date = [NSDate date];
    +NSString *comment = nil;
    +
    +BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", @(identifier), name, date, comment ?: [NSNull null]];
    +if (!success) {
    +    NSLog(@"error = %@", [db lastErrorMessage]);
    +}
    +
    + +
    +

    Note: Fundamental data types, like the NSInteger variable identifier, should be as a NSNumber objects, achieved by using the @ syntax, shown above. Or you can use the [NSNumber numberWithInt:identifier] syntax, too.

    + +

    Likewise, SQL NULL values should be inserted as [NSNull null]. For example, in the case of comment which might be nil (and is in this example), you can use the comment ?: [NSNull null] syntax, which will insert the string if comment is not nil, but will insert [NSNull null] if it is nil.

    +
    + +

    In Swift, you would use executeUpdate(values:), which not only is a concise Swift syntax, but also throws errors for proper error handling:

    +
    do {
    +    let identifier = 42
    +    let name = "Liam O'Flaherty (\"the famous Irish author\")"
    +    let date = Date()
    +    let comment: String? = nil
    +
    +    try db.executeUpdate("INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", values: [identifier, name, date, comment ?? NSNull()])
    +} catch {
    +    print("error = \(error)")
    +}
    +
    + +
    +

    Note: In Swift, you don’t have to wrap fundamental numeric types like you do in Objective-C. But if you are going to insert an optional string, you would probably use the comment ?? NSNull() syntax (i.e., if it is nil, use NSNull, otherwise use the string).

    +
    + +

    Alternatively, you may use named parameters syntax:

    +
    INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)
    +
    + +

    The parameters must start with a colon. SQLite itself supports other characters, but internally the dictionary keys are prefixed with a colon, do not include the colon in your dictionary keys.

    +
    NSDictionary *arguments = @{@"identifier": @(identifier), @"name": name, @"date": date, @"comment": comment ?: [NSNull null]};
    +BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)" withParameterDictionary:arguments];
    +if (!success) {
    +    NSLog(@"error = %@", [db lastErrorMessage]);
    +}
    +
    + +

    The key point is that one should not use NSString method stringWithFormat to manually insert values into the SQL statement, itself. Nor should one Swift string interpolation to insert values into the SQL. Use ? placeholders for values to be inserted into the database (or used in WHERE clauses in SELECT statements).

    + +

    Using FMDatabaseQueue and Thread Safety.

    + +

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you’ll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. This would suck.

    + +

    So don’t instantiate a single FMDatabase object and use it across multiple threads.

    + +

    Instead, use FMDatabaseQueue. Instantiate a single FMDatabaseQueue and use it across multiple threads. The FMDatabaseQueue object will synchronize and coordinate access across the multiple threads. Here’s how to use it:

    + +

    First, make your queue.

    +
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
    +
    + +

    Then use it like so:

    +
    [queue inDatabase:^(FMDatabase *db) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
    +
    +    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    +    while ([rs next]) {
    +        
    +    }
    +}];
    +
    + +

    An easy way to wrap things up in a transaction can be done like this:

    +
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
    +
    +    if (whoopsSomethingWrongHappened) {
    +        *rollback = YES;
    +        return;
    +    }
    +
    +    // etc ...
    +}];
    +
    + +

    The Swift equivalent would be:

    +
    queue.inTransaction { db, rollback in
    +    do {
    +        try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [1])
    +        try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [2])
    +        try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [3])
    +
    +        if whoopsSomethingWrongHappened {
    +            rollback.pointee = true
    +            return
    +        }
    +
    +        // etc ...
    +    } catch {
    +        rollback.pointee = true
    +        print(error)
    +    }
    +}
    +
    + +

    (Note, as of Swift 3, use pointee. But in Swift 2.3, use memory rather than pointee.)

    + +

    FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue’s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

    + +

    Note: The calls to FMDatabaseQueue’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

    +

    Making custom sqlite functions, based on blocks.

    + +

    You can do this! For an example, look for -makeFunctionNamed: in main.m

    +

    Swift

    + +

    You can use FMDB in Swift projects too.

    + +

    To do this, you must:

    + +
      +
    1. Copy the relevant .m and .h files from the FMDB src folder into your project.
    2. +
    + +

    You can copy all of them (which is easiest), or only the ones you need. Likely you will need FMDatabase and FMResultSet at a minimum. FMDatabaseAdditions provides some very useful convenience methods, so you will likely want that, too. If you are doing multithreaded access to a database, FMDatabaseQueue is quite useful, too. If you choose to not copy all of the files from the src directory, though, you may want to update FMDB.h to only reference the files that you included in your project.

    + +

    Note, if you’re copying all of the files from the src folder into to your project (which is recommended), you may want to drag the individual files into your project, not the folder, itself, because if you drag the folder, you won’t be prompted to add the bridging header (see next point).

    + +
      +
    1. If prompted to create a “bridging header”, you should do so. If not prompted and if you don’t already have a bridging header, add one.
    2. +
    + +

    For more information on bridging headers, see Swift and Objective-C in the Same Project.

    + +
      +
    1. In your bridging header, add a line that says:

      +
      #import "FMDB.h"
      +
    2. +
    3. Use the variations of executeQuery and executeUpdate with the sql and values parameters with try pattern, as shown below. These renditions of executeQuery and executeUpdate both throw errors in true Swift fashion.

    4. +
    + +

    If you do the above, you can then write Swift code that uses FMDatabase. For example, as of Swift 3:

    +
    let fileURL = try! FileManager.default
    +    .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    +    .appendingPathComponent("test.sqlite")
    +
    +let database = FMDatabase(url: fileURL)
    +
    +guard database.open() else {
    +    print("Unable to open database")
    +    return
    +}
    +
    +do {
    +    try database.executeUpdate("create table test(x text, y text, z text)", values: nil)
    +    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"])
    +    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["e", "f", "g"])
    +
    +    let rs = try database.executeQuery("select x, y, z from test", values: nil)
    +    while rs.next() {
    +        if let x = rs.string(forColumn: "x"), let y = rs.string(forColumn: "y"), let z = rs.string(forColumn: "z") {
    +            print("x = \(x); y = \(y); z = \(z)")
    +        }
    +    }
    +} catch {
    +    print("failed: \(error.localizedDescription)")
    +}
    +
    +database.close()
    +
    +

    History

    + +

    The history and changes are availbe on its GitHub page and are summarized in the “CHANGES_AND_TODO_LIST.txt” file.

    +

    Contributors

    + +

    The contributors to FMDB are contained in the “Contributors.txt” file.

    +

    Additional projects using FMDB, which might be interesting to the discerning developer.

    + + +

    Quick notes on FMDB’s coding style

    + +

    Spaces, not tabs. Square brackets, not dot notation. Look at what FMDB already does with curly brackets and such, and stick to that style.

    +

    Reporting bugs

    + +

    Reduce your bug down to the smallest amount of code possible. You want to make it super easy for the developers to see and reproduce your bug. If it helps, pretend that the person who can fix your bug is active on shipping 3 major products, works on a handful of open source projects, has a newborn baby, and is generally very very busy.

    + +

    And we’ve even added a template function to main.m (FMDBReportABugFunction) in the FMDB distribution to help you out:

    + +
      +
    • Open up fmdb project in Xcode.
    • +
    • Open up main.m and modify the FMDBReportABugFunction to reproduce your bug. + +
        +
      • Setup your table(s) in the code.
      • +
      • Make your query or update(s).
      • +
      • Add some assertions which demonstrate the bug.
      • +
    • +
    + +

    Then you can bring it up on the FMDB mailing list by showing your nice and compact FMDBReportABugFunction, or you can report the bug via the github FMDB bug reporter.

    + +

    Optional:

    + +

    Figure out where the bug is, fix it, and send a patch in or bring that up on the mailing list. Make sure all the other tests run after your modifications.

    +

    Support

    + +

    The support channels for FMDB are the mailing list (see above), filing a bug here, or maybe on Stack Overflow. So that is to say, support is provided by the community and on a voluntary basis.

    + +

    FMDB development is overseen by Gus Mueller of Flying Meat. If FMDB been helpful to you, consider purchasing an app from FM or telling all your friends about it.

    +

    License

    + +

    The license for FMDB is contained in the “License.txt” file.

    + +

    If you happen to come across either Gus Mueller or Rob Ryan in a bar, you might consider purchasing a drink of their choosing if FMDB has been useful to you.

    + +

    (The drink is for them of course, shame on you for trying to keep it.)

    + +
    +
    + +
    +
    + + + diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/js/jazzy.js b/html/docsets/FMDB.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 00000000..1e55d6ef --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,70 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/html/docsets/FMDB.docset/Contents/Resources/Documents/js/jquery.min.js b/html/docsets/FMDB.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 00000000..a1c07fd8 --- /dev/null +++ b/html/docsets/FMDB.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0Callback block used by executeStatements:withResultBlock:

    "},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeInteger":{"name":"SqliteValueTypeInteger","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeFloat":{"name":"SqliteValueTypeFloat","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeText":{"name":"SqliteValueTypeText","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeBlob":{"name":"SqliteValueTypeBlob","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeNull":{"name":"SqliteValueTypeNull","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModePassive":{"name":"FMDBCheckpointModePassive","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModeFull":{"name":"FMDBCheckpointModeFull","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModeRestart":{"name":"FMDBCheckpointModeRestart","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModeTruncate":{"name":"FMDBCheckpointModeTruncate","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html":{"name":"FMDBCheckpointMode","abstract":"

    Enumeration used in checkpoint methods.

    "},"Enums/SqliteValueType.html":{"name":"SqliteValueType","abstract":"

    Undocumented

    "},"Constants.html#/c:@FMDBVersionNumber":{"name":"FMDBVersionNumber","abstract":"

    Undocumented

    "},"Constants.html#/c:@FMDBVersionString":{"name":"FMDBVersionString","abstract":"

    Undocumented

    "},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)parentDB":{"name":"parentDB","abstract":"

    Undocumented

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)query":{"name":"query","abstract":"

    Executed query

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)columnNameToIndexMap":{"name":"columnNameToIndexMap","abstract":"

    NSMutableDictionary mapping column names to numeric index

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)statement":{"name":"statement","abstract":"

    FMStatement used by result set.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)close":{"name":"-close","abstract":"

    Close result set

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)next":{"name":"-next","abstract":"

    Retrieve next row for result set.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)nextWithError:":{"name":"-nextWithError:","abstract":"

    Retrieve next row for result set.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)step":{"name":"-step","abstract":"

    Perform SQL statement.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)stepWithError:":{"name":"-stepWithError:","abstract":"

    Perform SQL statement.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)hasAnotherRow":{"name":"-hasAnotherRow","abstract":"

    Did the last call to <next> succeed in retrieving another row?

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)columnCount":{"name":"columnCount","abstract":"

    How many columns in result set

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnIndexForName:":{"name":"-columnIndexForName:","abstract":"

    Column index for column name

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnNameForIndex:":{"name":"-columnNameForIndex:","abstract":"

    Column name for column index

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)intForColumn:":{"name":"-intForColumn:","abstract":"

    Result set integer value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)intForColumnIndex:":{"name":"-intForColumnIndex:","abstract":"

    Result set integer value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longForColumn:":{"name":"-longForColumn:","abstract":"

    Result set long value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longForColumnIndex:":{"name":"-longForColumnIndex:","abstract":"

    Result set long value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longLongIntForColumn:":{"name":"-longLongIntForColumn:","abstract":"

    Result set long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longLongIntForColumnIndex:":{"name":"-longLongIntForColumnIndex:","abstract":"

    Result set long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)unsignedLongLongIntForColumn:":{"name":"-unsignedLongLongIntForColumn:","abstract":"

    Result set unsigned long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)unsignedLongLongIntForColumnIndex:":{"name":"-unsignedLongLongIntForColumnIndex:","abstract":"

    Result set unsigned long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)boolForColumn:":{"name":"-boolForColumn:","abstract":"

    Result set BOOL value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)boolForColumnIndex:":{"name":"-boolForColumnIndex:","abstract":"

    Result set BOOL value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)doubleForColumn:":{"name":"-doubleForColumn:","abstract":"

    Result set double value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)doubleForColumnIndex:":{"name":"-doubleForColumnIndex:","abstract":"

    Result set double value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)stringForColumn:":{"name":"-stringForColumn:","abstract":"

    Result set NSString value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)stringForColumnIndex:":{"name":"-stringForColumnIndex:","abstract":"

    Result set NSString value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dateForColumn:":{"name":"-dateForColumn:","abstract":"

    Result set NSDate value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dateForColumnIndex:":{"name":"-dateForColumnIndex:","abstract":"

    Result set NSDate value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataForColumn:":{"name":"-dataForColumn:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataForColumnIndex:":{"name":"-dataForColumnIndex:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)UTF8StringForColumn:":{"name":"-UTF8StringForColumn:","abstract":"

    Result set (const unsigned char *) value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)UTF8StringForColumnName:":{"name":"-UTF8StringForColumnName:","abstract":"

    Undocumented

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)UTF8StringForColumnIndex:":{"name":"-UTF8StringForColumnIndex:","abstract":"

    Result set (const unsigned char *) value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForColumn:":{"name":"-objectForColumn:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForColumnName:":{"name":"-objectForColumnName:","abstract":"

    Undocumented

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForColumnIndex:":{"name":"-objectForColumnIndex:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForKeyedSubscript:":{"name":"-objectForKeyedSubscript:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectAtIndexedSubscript:":{"name":"-objectAtIndexedSubscript:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataNoCopyForColumn:":{"name":"-dataNoCopyForColumn:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataNoCopyForColumnIndex:":{"name":"-dataNoCopyForColumnIndex:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnIndexIsNull:":{"name":"-columnIndexIsNull:","abstract":"

    Is the column NULL ?

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnIsNull:":{"name":"-columnIsNull:","abstract":"

    Is the column NULL ?

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)resultDictionary":{"name":"resultDictionary","abstract":"

    Returns a dictionary of the row results mapped to case sensitive keys of the column names.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)resultDict":{"name":"-resultDict","abstract":"

    Returns a dictionary of the row results

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)kvcMagic:":{"name":"-kvcMagic:","abstract":"

    Performs setValue to yield support for key value observing.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)bindWithArray:":{"name":"-bindWithArray:","abstract":"

    Bind array of values to prepared statement.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)bindWithDictionary:":{"name":"-bindWithDictionary:","abstract":"

    Bind dictionary of values to prepared statement.

    ","parent_name":"FMResultSet"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(py)path":{"name":"path","abstract":"

    Path of database

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(py)openFlags":{"name":"openFlags","abstract":"

    Open flags

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(py)vfsName":{"name":"vfsName","abstract":"

    Custom virtual file system name

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithPath:":{"name":"+databaseQueueWithPath:","abstract":"

    Create queue using path.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithURL:":{"name":"+databaseQueueWithURL:","abstract":"

    Create queue using file URL.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithPath:flags:":{"name":"+databaseQueueWithPath:flags:","abstract":"

    Create queue using path and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithURL:flags:":{"name":"+databaseQueueWithURL:flags:","abstract":"

    Create queue using file URL and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithPath:":{"name":"-initWithPath:","abstract":"

    Create queue using path.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithURL:":{"name":"-initWithURL:","abstract":"

    Create queue using file URL.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithPath:flags:":{"name":"-initWithPath:flags:","abstract":"

    Create queue using path and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithURL:flags:":{"name":"-initWithURL:flags:","abstract":"

    Create queue using file URL and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithPath:flags:vfs:":{"name":"-initWithPath:flags:vfs:","abstract":"

    Create queue using path and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithURL:flags:vfs:":{"name":"-initWithURL:flags:vfs:","abstract":"

    Create queue using file URL and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseClass":{"name":"+databaseClass","abstract":"

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)close":{"name":"-close","abstract":"

    Close database used by queue.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)interrupt":{"name":"-interrupt","abstract":"

    Interupt pending database operation.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inDatabase:":{"name":"-inDatabase:","abstract":"

    Synchronously perform database operations on queue.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inTransaction:":{"name":"-inTransaction:","abstract":"

    Synchronously perform database operations on queue, using transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inDeferredTransaction:":{"name":"-inDeferredTransaction:","abstract":"

    Synchronously perform database operations on queue, using deferred transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inExclusiveTransaction:":{"name":"-inExclusiveTransaction:","abstract":"

    Synchronously perform database operations on queue, using exclusive transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inImmediateTransaction:":{"name":"-inImmediateTransaction:","abstract":"

    Synchronously perform database operations on queue, using immediate transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inSavePoint:":{"name":"-inSavePoint:","abstract":"

    Synchronously perform database operations using save point.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)checkpoint:error:":{"name":"-checkpoint:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)checkpoint:name:error:":{"name":"-checkpoint:name:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)checkpoint:name:logFrameCount:checkpointCount:error:":{"name":"-checkpoint:name:logFrameCount:checkpointCount:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)path":{"name":"path","abstract":"

    Database path

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)delegate":{"name":"delegate","abstract":"

    Delegate object

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)maximumNumberOfDatabasesToCreate":{"name":"maximumNumberOfDatabasesToCreate","abstract":"

    Maximum number of databases to create

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)openFlags":{"name":"openFlags","abstract":"

    Open flags

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)vfsName":{"name":"vfsName","abstract":"

    Custom virtual file system name

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithPath:":{"name":"+databasePoolWithPath:","abstract":"

    Create pool using path.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithURL:":{"name":"+databasePoolWithURL:","abstract":"

    Create pool using file URL.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithPath:flags:":{"name":"+databasePoolWithPath:flags:","abstract":"

    Create pool using path and specified flags

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithURL:flags:":{"name":"+databasePoolWithURL:flags:","abstract":"

    Create pool using file URL and specified flags

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithPath:":{"name":"-initWithPath:","abstract":"

    Create pool using path.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithURL:":{"name":"-initWithURL:","abstract":"

    Create pool using file URL.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithPath:flags:":{"name":"-initWithPath:flags:","abstract":"

    Create pool using path and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithURL:flags:":{"name":"-initWithURL:flags:","abstract":"

    Create pool using file URL and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithPath:flags:vfs:":{"name":"-initWithPath:flags:vfs:","abstract":"

    Create pool using path and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithURL:flags:vfs:":{"name":"-initWithURL:flags:vfs:","abstract":"

    Create pool using file URL and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databaseClass":{"name":"+databaseClass","abstract":"

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)countOfCheckedInDatabases":{"name":"countOfCheckedInDatabases","abstract":"

    Number of checked-in databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)countOfCheckedOutDatabases":{"name":"countOfCheckedOutDatabases","abstract":"

    Number of checked-out databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)countOfOpenDatabases":{"name":"countOfOpenDatabases","abstract":"

    Total number of databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)releaseAllDatabases":{"name":"-releaseAllDatabases","abstract":"

    Release all databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inDatabase:":{"name":"-inDatabase:","abstract":"

    Synchronously perform database operations in pool.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inTransaction:":{"name":"-inTransaction:","abstract":"

    Synchronously perform database operations in pool using transaction.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inExclusiveTransaction:":{"name":"-inExclusiveTransaction:","abstract":"

    Synchronously perform database operations in pool using exclusive transaction.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inDeferredTransaction:":{"name":"-inDeferredTransaction:","abstract":"

    Synchronously perform database operations in pool using deferred transaction.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inImmediateTransaction:":{"name":"-inImmediateTransaction:","abstract":"

    Synchronously perform database operations on queue, using immediate transactions.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inSavePoint:":{"name":"-inSavePoint:","abstract":"

    Synchronously perform database operations in pool using save point.

    ","parent_name":"FMDatabasePool"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_statement":{"name":"_statement","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_query":{"name":"_query","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_useCount":{"name":"_useCount","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_inUse":{"name":"_inUse","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)useCount":{"name":"useCount","abstract":"

    Usage count

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)query":{"name":"query","abstract":"

    SQL statement

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)statement":{"name":"statement","abstract":"

    SQLite sqlite3_stmt

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)inUse":{"name":"inUse","abstract":"

    Indication of whether the statement is in use

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(im)close":{"name":"-close","abstract":"

    Close statement

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(im)reset":{"name":"-reset","abstract":"

    Reset statement

    ","parent_name":"FMStatement"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)traceExecution":{"name":"traceExecution","abstract":"

    Whether should trace execution

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)checkedOut":{"name":"checkedOut","abstract":"

    Whether checked out or not

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)crashOnErrors":{"name":"crashOnErrors","abstract":"

    Crash on errors

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)logsErrors":{"name":"logsErrors","abstract":"

    Logs errors

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)cachedStatements":{"name":"cachedStatements","abstract":"

    Dictionary of cached statements

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)databaseWithPath:":{"name":"+databaseWithPath:","abstract":"

    Create a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)databaseWithURL:":{"name":"+databaseWithURL:","abstract":"

    Create a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)initWithPath:":{"name":"-initWithPath:","abstract":"

    Initialize a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)initWithURL:":{"name":"-initWithURL:","abstract":"

    Initialize a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)isOpen":{"name":"isOpen","abstract":"

    Is the database open or not?

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)open":{"name":"-open","abstract":"

    Opening a new database connection

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)openWithFlags:":{"name":"-openWithFlags:","abstract":"

    Opening a new database connection with flags and an optional virtual file system (VFS)

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)openWithFlags:vfs:":{"name":"-openWithFlags:vfs:","abstract":"

    Opening a new database connection with flags and an optional virtual file system (VFS)

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)close":{"name":"-close","abstract":"

    Closing a database connection

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)goodConnection":{"name":"goodConnection","abstract":"

    Test to see if we have a good connection to the database.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withErrorAndBindings:":{"name":"-executeUpdate:withErrorAndBindings:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)update:withErrorAndBindings:":{"name":"-update:withErrorAndBindings:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:":{"name":"-executeUpdate:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdateWithFormat:":{"name":"-executeUpdateWithFormat:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withArgumentsInArray:":{"name":"-executeUpdate:withArgumentsInArray:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:values:error:":{"name":"-executeUpdate:values:error:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withParameterDictionary:":{"name":"-executeUpdate:withParameterDictionary:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withVAList:":{"name":"-executeUpdate:withVAList:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeStatements:":{"name":"-executeStatements:","abstract":"

    Execute multiple SQL statements

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeStatements:withResultBlock:":{"name":"-executeStatements:withResultBlock:","abstract":"

    Execute multiple SQL statements with callback handler

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)lastInsertRowId":{"name":"lastInsertRowId","abstract":"

    Last insert rowid

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)changes":{"name":"changes","abstract":"

    The number of rows changed by prior SQL statement.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:":{"name":"-executeQuery:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQueryWithFormat:":{"name":"-executeQueryWithFormat:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:withArgumentsInArray:":{"name":"-executeQuery:withArgumentsInArray:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:values:error:":{"name":"-executeQuery:values:error:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:withParameterDictionary:":{"name":"-executeQuery:withParameterDictionary:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:withVAList:":{"name":"-executeQuery:withVAList:","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)prepare:":{"name":"-prepare:","abstract":"

    Prepare SQL statement.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginTransaction":{"name":"-beginTransaction","abstract":"

    Begin a transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginDeferredTransaction":{"name":"-beginDeferredTransaction","abstract":"

    Begin a deferred transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginImmediateTransaction":{"name":"-beginImmediateTransaction","abstract":"

    Begin an immediate transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginExclusiveTransaction":{"name":"-beginExclusiveTransaction","abstract":"

    Begin an exclusive transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)commit":{"name":"-commit","abstract":"

    Commit a transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rollback":{"name":"-rollback","abstract":"

    Rollback a transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)isInTransaction":{"name":"isInTransaction","abstract":"

    Identify whether currently in a transaction or not

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)inTransaction":{"name":"-inTransaction","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)clearCachedStatements":{"name":"-clearCachedStatements","abstract":"

    Clear cached statements

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)closeOpenResultSets":{"name":"-closeOpenResultSets","abstract":"

    Close all open result sets

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)hasOpenResultSets":{"name":"hasOpenResultSets","abstract":"

    Whether database has any open result sets

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)shouldCacheStatements":{"name":"shouldCacheStatements","abstract":"

    Whether should cache statements or not

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)interrupt":{"name":"-interrupt","abstract":"

    Interupt pending database operation

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)setKey:":{"name":"-setKey:","abstract":"

    Set encryption key.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rekey:":{"name":"-rekey:","abstract":"

    Reset encryption key

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)setKeyWithData:":{"name":"-setKeyWithData:","abstract":"

    Set encryption key using keyData.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rekeyWithData:":{"name":"-rekeyWithData:","abstract":"

    Reset encryption key using keyData.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)databasePath":{"name":"databasePath","abstract":"

    The path of the database file.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)databaseURL":{"name":"databaseURL","abstract":"

    The file URL of the database file.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)sqliteHandle":{"name":"sqliteHandle","abstract":"

    The underlying SQLite handle .

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastErrorMessage":{"name":"-lastErrorMessage","abstract":"

    Last error message

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastErrorCode":{"name":"-lastErrorCode","abstract":"

    Last error code

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastExtendedErrorCode":{"name":"-lastExtendedErrorCode","abstract":"

    Last extended error code

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)hadError":{"name":"-hadError","abstract":"

    Had error

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastError":{"name":"-lastError","abstract":"

    Last error

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)maxBusyRetryTimeInterval":{"name":"maxBusyRetryTimeInterval","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)startSavePointWithName:error:":{"name":"-startSavePointWithName:error:","abstract":"

    Start save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)releaseSavePointWithName:error:":{"name":"-releaseSavePointWithName:error:","abstract":"

    Release save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rollbackToSavePointWithName:error:":{"name":"-rollbackToSavePointWithName:error:","abstract":"

    Roll back to save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)inSavePoint:":{"name":"-inSavePoint:","abstract":"

    Start save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)checkpoint:error:":{"name":"-checkpoint:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)checkpoint:name:error:":{"name":"-checkpoint:name:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)checkpoint:name:logFrameCount:checkpointCount:error:":{"name":"-checkpoint:name:logFrameCount:checkpointCount:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)isSQLiteThreadSafe":{"name":"+isSQLiteThreadSafe","abstract":"

    Test to see if the library is threadsafe

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)limitFor:value:":{"name":"-limitFor:value:","abstract":"

    Examine/set limits

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)sqliteLibVersion":{"name":"+sqliteLibVersion","abstract":"

    Run-time library version numbers

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)FMDBUserVersion":{"name":"+FMDBUserVersion","abstract":"

    The FMDB version number as a string in the form of "2.7.7" .

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)FMDBVersion":{"name":"+FMDBVersion","abstract":"

    The FMDB version

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)makeFunctionNamed:arguments:block:":{"name":"-makeFunctionNamed:arguments:block:","abstract":"

    Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)makeFunctionNamed:maximumArguments:withBlock:":{"name":"-makeFunctionNamed:maximumArguments:withBlock:","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueType:":{"name":"-valueType:","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueInt:":{"name":"-valueInt:","abstract":"

    Get integer value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueLong:":{"name":"-valueLong:","abstract":"

    Get long value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueDouble:":{"name":"-valueDouble:","abstract":"

    Get double value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueData:":{"name":"-valueData:","abstract":"

    Get NSData value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueString:":{"name":"-valueString:","abstract":"

    Get string value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultNullInContext:":{"name":"-resultNullInContext:","abstract":"

    Return null value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultInt:context:":{"name":"-resultInt:context:","abstract":"

    Return integer value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultLong:context:":{"name":"-resultLong:context:","abstract":"

    Return long value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultDouble:context:":{"name":"-resultDouble:context:","abstract":"

    Return double value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultData:context:":{"name":"-resultData:context:","abstract":"

    Return NSData object from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultString:context:":{"name":"-resultString:context:","abstract":"

    Return string value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultError:context:":{"name":"-resultError:context:","abstract":"

    Return error string from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultErrorCode:context:":{"name":"-resultErrorCode:context:","abstract":"

    Return error code from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultErrorNoMemoryInContext:":{"name":"-resultErrorNoMemoryInContext:","abstract":"

    Report memory error in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultErrorTooBigInContext:":{"name":"-resultErrorTooBigInContext:","abstract":"

    Report that string or BLOB is too long to represent in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)storeableDateFormat:":{"name":"+storeableDateFormat:","abstract":"

    Generate an NSDateFormatter that won’t be broken by permutations of timezones or locales.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)hasDateFormatter":{"name":"-hasDateFormatter","abstract":"

    Test whether the database has a date formatter assigned.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)setDateFormat:":{"name":"-setDateFormat:","abstract":"

    Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)dateFromString:":{"name":"-dateFromString:","abstract":"

    Convert the supplied NSString to NSDate, using the current database formatter.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)stringFromDate:":{"name":"-stringFromDate:","abstract":"

    Convert the supplied NSDate to NSString, using the current database formatter.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)intForQuery:":{"name":"-intForQuery:","abstract":"

    Return int value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)longForQuery:":{"name":"-longForQuery:","abstract":"

    Return long value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)boolForQuery:":{"name":"-boolForQuery:","abstract":"

    Return BOOL value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)doubleForQuery:":{"name":"-doubleForQuery:","abstract":"

    Return double value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)stringForQuery:":{"name":"-stringForQuery:","abstract":"

    Return NSString value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)dataForQuery:":{"name":"-dataForQuery:","abstract":"

    Return NSData value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)dateForQuery:":{"name":"-dateForQuery:","abstract":"

    Return NSDate value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)tableExists:":{"name":"-tableExists:","abstract":"

    Does table exist in database?

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)getSchema":{"name":"-getSchema","abstract":"

    The schema of the database.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)getTableSchema:":{"name":"-getTableSchema:","abstract":"

    The schema of the database.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)columnExists:inTableWithName:":{"name":"-columnExists:inTableWithName:","abstract":"

    Test to see if particular column exists for particular table in database

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)columnExists:columnName:":{"name":"-columnExists:columnName:","abstract":"

    Test to see if particular column exists for particular table in database

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)validateSQL:error:":{"name":"-validateSQL:error:","abstract":"

    Validate SQL statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)applicationID":{"name":"applicationID","abstract":"

    Retrieve application ID

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)applicationIDString":{"name":"applicationIDString","abstract":"

    Retrieve application ID string

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)userVersion":{"name":"userVersion","abstract":"

    Retrieve user version

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html":{"name":"FMDatabase","abstract":"

    A SQLite (https://sqlite.org/) Objective-C wrapper.

    "},"Classes/FMStatement.html":{"name":"FMStatement","abstract":"

    Objective-C wrapper for sqlite3_stmt

    "},"Classes/FMDatabasePool.html":{"name":"FMDatabasePool","abstract":"

    Pool of FMDatabase objects.

    "},"Classes/FMDatabaseQueue.html":{"name":"FMDatabaseQueue","abstract":"

    To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue .

    "},"Classes/FMResultSet.html":{"name":"FMResultSet","abstract":"

    Represents the results of executing a query on an FMDatabase .

    "},"Categories/NSObject%28FMDatabasePoolDelegate%29.html#/c:objc(cs)NSObject(im)databasePool:shouldAddDatabaseToPool:":{"name":"-databasePool:shouldAddDatabaseToPool:","abstract":"

    Asks the delegate whether database should be added to the pool.

    ","parent_name":"NSObject(FMDatabasePoolDelegate)"},"Categories/NSObject%28FMDatabasePoolDelegate%29.html#/c:objc(cs)NSObject(im)databasePool:didAddDatabase:":{"name":"-databasePool:didAddDatabase:","abstract":"

    Tells the delegate that database was added to the pool.

    ","parent_name":"NSObject(FMDatabasePoolDelegate)"},"Categories/NSObject%28FMDatabasePoolDelegate%29.html":{"name":"NSObject(FMDatabasePoolDelegate)","abstract":"

    FMDatabasePool delegate category

    "},"Categories.html":{"name":"Categories","abstract":"

    The following categories are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Constants.html":{"name":"Constants","abstract":"

    The following constants are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"

    The following type definitions are available globally.

    "}} \ No newline at end of file diff --git a/html/docsets/FMDB.docset/Contents/Resources/docSet.dsidx b/html/docsets/FMDB.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..93cf3c53436f44e04bbf81a9a1f1632308a95749 GIT binary patch literal 69632 zcmeHwdwd*Mb^qPb&g^QRF}CU~iefpou@z-)jANW^p0+GIvL!zx*_LJbvC@vDwO70H zKIB(SdP_-5N@+v-pd_VG0-&@QaRt(ZTKGgT06L4IMl* z*gLdu=io%I@>K8seZ9ITdpG3M3-V39?<@NPE7t(_rgC~ZC+nWo{VJ#g z#<%Yn9@OJ)$Yy}t_~7or(cS~2LnGTqkM`~zJbF_vlIa~EoETSVslOsY_G_OAGMD0C zLCG(R|1kdj_;=#ph<{D_;uYTJy?PM2eh%-$^X??#OeI6Y>4AJEQ-JU$j4M z3A829mOxtqZ3(m`(3U`30&NMjCD4{YOA_cTNLv%M&zH>Rv*jb%^85j~drZyd(sQNM zh+Lj8WCn8SQb{gt+BLE>4R@dEl6blQ&vQm-<3YC0$XenK+Ho#aJPkUf!)$qBq}AyN%2W>kN=z4l2Y;CBU!nc)6;Q2;bX$UM@>wSE`crh%`vCJ~t-v16A=Pf{vQeLEy`cd+ z0DD^G&(27jVb5V;u|6Fq+$o5Mrjgb%17r1RHP4fRLq0Nx+qQ&{&)frrTxB88tlTVf z)~H;nrunV%@26p_Xkg7Sq;+PJ?NdgaUJiIzuL><+*HryqM0H(u@r!(-$^_35LA0C~Z&B z)v!!s$8=D_rEz1){F`J)*RbT1-`*8beZoj7cM=iijC2UBTglrygId*FzzBY^7 zn{Hd0o^qJl$ae~Gnq%ig9MOkHhb>h2PR3@K@gm&hm|@7zsPk&SzJ#4u%`L@YTA;vi z2)z%FrnmYu5^NRVjCgS@)-h&-Jy?=%P0(Zw`nA|>ZmFt8d4T$)-3fY|4N=dO0d}-? z;5*d~h*j)$o7Xwt40gvQX&^zjRQWyt$Drog8lSAwxv*H@g{{D+3OFp++taSq&Mv5) zxQrcptCgOv6+9-ZLq2&HyLDd;>Q{p9@fkeY_Eae{ElMp)Eq5e_Hk?Kpi6&{Z*m#V> zTnG*a>&Qby`l0m8(k}mu|Jshvbj*sA;xoek7v3I!G=6*R+p)LBZuH$3{aAFEJmmjy z)^yAtA|UVPq_o$!4}^ zGJM|UQ$Flc<_g6uXb<;|?Vmm^&y+V*)r9!oPB|yf!Bc&f!KA$aJED4&$alCB1D?WT zJG7ZtEEJmFG+Ci;;l~4A5eUlN-pmH;)w6h*>VorH zu27QqFUonX(xqB6MgxJ_Ad$!Rh>65ykQq`j<7(<#8(^&rdnkMRVm&CW@-|RfnFh6d zOiF-)xJI@3uxW0BkCRqm;C(0!DVy(3qcIb)fFn`~p1VjW=eE2^@V zU)|}Rb;qU-h&+^+?ts0U#wlCTafra=?^G!dQ@ukcG!CAW^rltZODritDmcB4Rl=ap(l~Lkt^Q- zJ-x3mP*}VG^NCly*duP^$~PODuJ|&OOTAv#MtIEdj4u;bQrAXRI_`MUNThDsD|RO? z;T~xLF6YgCYp1GLwCP&BNZEqn%jCDYL}u8~!|fFia;avu!RkJSS^(TYD?{9yV~~P! zE5_#QBlnT`&&OBAo{k-femDAH^t#9gBDaJ;9{#!TSU4VfCUib@Q|HG!bDgV${}8+w z+#L8^;9TH(=}Bpy_+R2%#Et&H^iOuY&@nIki||IF+xL`jgnR=aoB5pXlL$^^$&yh$ z?ox`jXs0$v1Sc{xE$4m9L?(55y~@p1n3YexM&-st%Q-h@pxJd2!8^b!eFZqRRw8%@ zXr$wu55p~Eiu%_`1opMtl9hZZJC~O;!-f1D{u|1pb&eQ$rKU`<`Gc2z@}J7%=%rZPPe zL9G{0=+Cf``*XF7X$66!I?w=CL%ETpDMCC=t^~IN`y3}gs<@3xi*kv`1 zFuPYM)x>WdR})_zS}qdMs@f}6o0cI{s*b%%BCC3+SmIW;F8Y#&kzEEup@()?N6C1B z_2H59q6>UGxINc^OnWY$#rqEz(Cqz#af$Tw(2m7)5i|fhceudg5IbTb+0=7LXS%4| zNemS7Agz3v|6kI!_jg;K-4Qio?5iwH%dksm219xFbrF&DcWobI=8T8Y=6oEYd=2I+ z3;3_J$yC5EmY7lN>*=%VYbM0df>kf#(8uoS4p z;{otk0Ba>rDXN%h2{r*;w9C{>@an5d&Qz#xMN`q;roRychl z_%5->|C|0>JHF5{C%i0BA?$n1H%49pF!!Gm`y~Rl>SF*SX1~b6QqGgl7A8i3$MH(HEV8;L(Y}5nMt!wc1i>-7p)c0$=V&yb~Vs}7YCRYC26gJ`xdn$ji}`v%0ytL=|LOY z5oNGPwo9bDhc1IbkLP&nfuOZv2Db-u*wqE+_WUmNJM{os!#a4EM7nxtcoDo> zJ-|hn**jI`#&q_IIxS4y!S${x9s5hzrq8&%x(dwb?QDe=lV_G@M$&WH8O!?JG_Zy+ zejBJ`5;Tx3GLI9y!Zr`Sra`L^>6Ap0J#=~X8^uG!+MLaSL(elqP2Q@idz53fN0w~L z6;9?Bwvesl*FzYH+9LuwsNyy_W`b)0Gs?V5mz(pimk7ER*wJ*}n=;nh*;H|>${qNc zgAM8SGSi@d=}~36G*iqjT1_;X>k6PftBJUHGn_8LCLyUj0qRR|pZ1WX74Y;HRU@xa z9Pq+uz!q)(b!yw0O5Lew?Z8fLRxiR#h0c438L0SLwRhC?fpI(w)kIv}r1lP*C)~-f z7U29wwZ&{6a4t(bu-T-#z~NBTu0Pn2b56(xYw9L-fiskOL?SiYU*!TX{yiB>P*XG3 z)Qwdxs%5UY(81vOe;qkY;_ryBjXfT_Ir?05HuCMr9dP=8DBKx(B6OtlYn_$gOTkOQ zMBu5wUhw+Qir*6-60h|??7y+&BOND%|112gaEe3i|k;W1bjOWN=pZ5nUpPRvB38J{Xo^mrO`c6JJ51o+mJ)aeB_ zuJDMg^8s~FOb<4dV`?l^Gx6qePe4P;onbT3I@k__wRB0|p3CvFnx@iCc0?P*!fBw^ zL)Xt>*qHsZ=*6H>vu>4nQ8V<|)uj%>GK5W7j#zwMNzk`ocV{ zzddxbk@%4JEUUD2$fxGmVIiR%zw7Gyn&DJ;=4M#MS#6M46*`SIea(~%sul5w3@U+6rIlW& zNsiI>hycU7c#4@NZPEHU_OIrYd(HGjU8lDK-+Pj27Pnex>m=-kR~zCww#iYfD=4V8J#a8*_19X-ZWdCN5Qo9l%~L!yC6iH!8n zyB5;tvkR34MW2;`+D=%+~aE#EfPs(R_%u@?rIo%ltCj0@jHN=(tV_?CC=i!RSDG zIeAY|K|D3CUHvpZmo&|n{$#Q=rd`?Do*`;YoGlQu#a$ZJ=-Te+J)mogTRy1vnbyuk zEwF2MD#{#S=aW@Uo=;k!raz&Ce4EL2m8?r=Y*5K7kv-=ZjYqGUnZXod@Jxv zfo|!&(kAi4;&%UE`4{8wir*RgYV5vPBKpzjROAPd2ZAI16&+8Ia~;Qo9}B-HO!)qv z?-79fo^&R-UtE>APe>LEit&P>b>Nkw?yUrD5O}C0u!w}28xSlgrG>b`0i}1;>#uO(^7rQ3)&*d_ocm6l8}yXz!D+ znj8_8xTu~vK3d?&TX~cx)dNlq#Ci^Ha6NH-wBnJs(TH>mu52||KixBS4vG$iYGud{ zoIFS+=@5iPv8&A>t~lHCnH_Nb2BD#9TUa#cqt>cekjXF9sfWc|(le1*kjXDiNMM!_ z5MWYkyf`)BTMt40^c=eMZpJXfwrfW%o?4hTZE?pcNH^Is-DY-K>@00db+O8=?TY0A zx3;*WRc>v|Yte0*TU*pTj~;nd*WZIBj2_vKEo-+tyJpo6v~Ut5xI)xLps8w(Yw8PI z=(!r!{^N+>)f9fyZKk2;2usQU{#ah@cNJtNNU> z805Wa+|9D;H{Q**AfhVR_(`MyanSUe-CA{TT0B+!vv~i%fm|l>r{c5mSI0gTyAazL z{c807=;p}hBQ&xq{E_gnFbO>tnhd?F^N%|ZbV|YZ2YUmL1@=f^ln#o|i^Kje`pX?J zcD%LYF31y5@qNp8k-P|i&3y6{d{HqbFOT*EGJ?>0o*fS@a5PB4Llr~gSSi|_-)c#^ zK`&8HWL5HZ*hLCXtQeHWSQSGE887G?0I5L1r4_?G8L6VkEvGdvsM`YPD7e331SUfz zjzAq0eND|hZwqqQp-oWmhy|DDP6IhFh@^%oxWjh$T%MUv=jY@)7t-}=j`!cn`^PCd z#rDuB#7_hpM98&J2Djj$OzkUx2Dm01X#N$(=C3*#v0<9-xfJfW5%^b5tnXS@Pf7uZjwfs!ai)`+Y2(OCD3Z3C(8O{ zMagA_JX_R!4oTI6gysy_Y)-E#(1Zr_7=*MVec)&@SAdLRg?t{&w82c@@x*9^*-bmq z%l|@sm%Vy(E$HeLM?DHY$`Hh3c@l4yS@&S6&g!|cHNdq3O;Yeo#z>GRA`aW%NMMjk z7&_q`!*+qVhl(K6o=e%%evpLYhEiTX3{eEpp)H^trs|nWG!Q61=^(@e1vg^0H{jpa zwTWmFnPHru;5>|}jWn|h><&)rt+TY?FsC4{K3*#?GZ1iGe-j0UbCMF~921{0g<^Hw zo@Su2`@k$00zrVqK#9#K&Noq2h@)?S-hy#kis{n){=7?E1IpNCrM}F5fSDsY7X{ic zFoG1>HNtqgBM+1o=G6)0QJX6^At zQ0(nJ7g#WnY#wrfStZyU7Hpi^`(x)D23Bbru*ALY_nfO2?WAeEvv{OExTHiosi;{O zT`=Qm691|`! zIQsKo=+L7eZ4~MWAuKky;h(p9Sv9Fdv_T@D<&mV-LKfN7BSJXr*M|eX;4@5qrCM#53EHPZjP#*SM?wiL5MgC?)>`7eaX+xbJ#+7uTDe`+- zlwodeGG5TMT)18`pDDSnjhD@|#rq$d098Ad+Q8)LdL}Q;8=Y_#$a@Y+=rwRWyeDoJe+&+zE$Mfr^TM7Kr| z@`M_gmVNDXG$=2V$JK7QSd8i~|u#s-7c2ts~t zw+JU1!R?WT+z&e2Y=RC6$%XV8c^Aaj!b2#|Et!;R)~jhznLf>xCaonJV-Nf&23{3taR^$x{vkT0hstKOcPG|%n|G-n~X+FAF+G+Y`9${Ofs5pAMbHcR) zdmWGIZYp%?7;B5Rg~xO^m0Fr@ja8OcVTxx_W(-OuX^_fCi zdKtRYZ%@L@7^l*_1d(F9&0N5m=W*apAtPZFQZpfM!;p5^3k*&do<(dGw}=q5*vtkF zPbGG+sXMTd5IH4|tXdGXOq$i`qj<{JQg05PFUyd7p^zVd<3KCvI>~=+64$J}L)bN< zsau)T2{|teWu|Cc-tFW>R;z z7}q*fmN2Zf4O!?qS1PV`XHBA4Fwk@$k2BP`J-C5o0OZr$_mGjo z3j#No_&)hx1_A6;u29^dsu1L_3nJmJV5~240MpOgTpD=&Gms5i2U1m zOmw|oxY{;7nI(<6onYsNeJ@KV8Mi?sP55SKSp%5t>!p|JhhgHeLWn9Wl_?ZTrGP|!u7VNQU zQl}||+6HIhZc9a7Z7IxEQNT`7h`fzffqG(I(NS;?QwYSZT4QR{mD8@H_iTbW1A=k0 zIfENP)Hb(pGStwJt)U&qy%fTAqg}&K#;oByg^1p;G3tXHYmi7u6RB6X7E?yYVF36}iE5Zz6HC$_E_=25YO+X4kzA?^85?xgWafj`&U90cY ztq^@SabJ@AmO2FFug_D6)D1~$6G|0PnU#?hr&qi~afr^UYsQ+O5Tct|BWv8aC4mw} zj1v?ha^sSs7j&tVo^!>3(q0Va2!%l0>w0KFS!?b|=QBAQ%g!eIiyq_`~qkl_UU=+PxYJ6brWV?oN$^(+W!m*UA{B;&C6 zF>`Gr(maLi(`-tdfyl#<2MxrQsmjeUAseg-3Tdd>lxXk~cSyp3ah$GIye+e(A-$Ko z<0-&|GeXxW3lZOPIIJ{(eTd$mj7$%**Duo5s(a+LJeSSe#ocjO+nRWbv{z5kF0hds zl6H7`x=M8dWVNyhx#NbS4crNOy}HUWg1TSg4Ux*h!gpCrEP z$&g_|SqiQEI80&frR z4t+QD{?JtC%N-vQ-q-nP=l;NZfi2c8lR$D0bT)@;fsU?pFlMHp4L;3le$%NeKfU2&T2uF$EJ2d32u$@fie< z0yL0cQ>%;Tvnvpwf&A)m3B8;JqkpnvX&7P11H&SC4}Sjw@`0 zxp%J!8Qp!%WXuYw?dWZeQ(D;u?uB__Lc;uwzJ@X1nUReRBwr?2Il`()+Ycjfv@x(| zYGb?=!V7nmBx`Np8yQPM`LS{bsg zfxc=Qw;#)WMa2mdGAY6)DqXx_t+4ifBWyENO6gl?(E-*9tMwlnSgj1J%-%m&7pv(i zGOTMxCCu3ATdb??VV%&XZoD(Ga;zW1+;spU0}UXX?4AfXq4rJm-^!PF?y$@*lB%&hy(Cca02Z99|_zc zy&%0=+9*CNE{a|Lr~PSvtmF4PZWcZ%oDc-a1GvMtg1kVU0MMGBtu!wZu)KvEb@gb- zrqdesu+^z}3tbQiSl(9O!`@iqHLas2X-*_yN8GF#aX&pH60p>*QmH|KEf0q%Bu2x7 zw(g8t$yi#^_ zc?#*wSQJTR=%~hA)p6wX+MyQQc?!AA*afZO3D7O0Etz&r>rgXS7jue2LNj*vV@em{ zkeCVO0EHZ8?1n{48sQvRNm_B3Dv8PhNxhkzLsUJ)1Wl_K0~xTd0}B?ICLnmILu3QS z1clUO?9Ktc#tgM?p{p2E6f%z~mv@SNpi6Mgh-lxX@&ujpO2oOE zr~3^Ysa_GDaAd;D(0vAun5&2{XCi!4RwM4{~SdAf4Js>zFp9kKwAQB3A829mOxtqZ3%cG z0Uia()>FdaM$ZcekPm4ws<@L2o`2o&z}-5?A97cHUERy`kRt*9 zF0mLXxU+9$eFuI~+WX|mG0Z$H`jTgsW=7I;*%`~WdX$G(vANFB%FsbmL%97IVzSJW z4NUhzJ6Eaa_sPl;8#Hl>6Tm($0__`zlGWZPzsudj;VVtu=NwgoApa;!a38`FdLi%t zyE}C0X|L2#57omH|LKdIx1s^%x@tC7B^4cJG?;Ce? zL98p;fzB>qTS1&go*JUcX)Ss#xEwlz)Yh~@%`tbGYT~*oXxH-0X zy^!NK&?S*T1a*v+S~Gz98VV`lAX2Ip7?sC2RfGMO*fDq&Ekh82?sckukUyhn3)vIv zXbH@pyZajjN+PXrM%7{BX*ZS0X0~TC`~=U{T3}<=N^EJp zLP+BPR6+G9(N%PjrH`L8R!H&1)zxXdz$&V0RIWtLYLQIRf@0wRA>)Q9MvHu6P C>=D@j literal 0 HcmV?d00001 diff --git a/html/docsets/FMDB.tgz b/html/docsets/FMDB.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7301f54c00886f2711750b868b9686f0e429d1c3 GIT binary patch literal 112509 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�D#vzdcSY!OK&ctjDO{pflEvm|gaKu8LM)CBk6w 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 - - - - - FMDB Hierarchy - - - - - - -

    -
    - -

    - FMDB -

    - -

    - ccgus -

    - -
    -
    - - - -
    -
    -
    -
    -

    FMDB Hierarchy

    - - -
    -

    Class Hierarchy

    - - - -
    - - - - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/html/img/button_bar_background.png b/html/img/button_bar_background.png deleted file mode 100644 index 71d1019bc0c5c571dea84ff9775aa243444d2d4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2825 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 b18@fb!nF!3r##!100000NkvXXu0mjf;Lkd# diff --git a/html/img/carat.png b/html/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/html/img/dash.png b/html/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 zcmaJ>U2NM_6t){^r>#wcfL0VSTvuX@)$vd4#5N6WVkc|1rR}naMb)(7I5(};#!el# zbtCASsp?W-qE8zSJoFVdA%-T$WL8RI_B? zd+t5o`T5Q{p6=<|U$?VqCxRe#u}(PwSIl{LRKstfSbPYV7pzFiI$~t4QN;vEC}X4n z7RxDpAOV!j*w8ni4MAK3S~6v&;)g`l$axh<$7|>E5RD*h?RH*K2Y`j8L7%1v@%vZi za7@bt@uOUvisvQJuXPqpaHQCkREqd6M>0WG?6AwXR*T65ziuw$&~q$MS$o zfPyh>s<0l}mI@eh_hd(oB8*1tHZ@ojWl%QM;T+Jdm>k66jW?rZ#Atx!qns4-g&E4v z(=;FQ%W^avW?3J{L@2IeV>_(Ca)Lk1vm70uX*$9Rewm8!AxRF0BcZTNSFka?U@5u^ zDtpMY2lVtCmQm<8@|YxHuf`Qs(;a!QQ=g4=WngL}AQLr> z9JWrdsBIHKHXF!fSydodRsaOc@jgNkSU^x9kY&;UP<}3pZ{joC5f_Tevd>4eG~;)Y z=eZ~qp=5#aaUn*E3OES^BApKTU&mCAU>iEyt^S9?)&v0^j*SWDqjRZr20>6rTPSJ& zlzz0f);`}+^~w}lP1PK7Ew3f7ot#*uJ@>1Yo3J0TdsRKpA+*n9JnDXDrM~YvF`;uS|vAh|-QdmRf4AqG=`U z#v1n_Lxg8;&z#YCU2K`_W{-A zUf_|V)B9U(WZ~PP>)O(JZ|Vc-*qP&Q{3kI32qDJxGG#}JO_`KyqCDY z*KXE?%k|6ufBPK!<6_I4f7W}-SGbGsdN0tg!V=WD=wjWz$u?adUkEVRH#$H4{$dk9 P&=dwwS3j3^P63kI32qDKAeK#}JO|$v@6N$mnnQFZs`y zVdCMs<^KgT?B%tdsPGFGRJ=dLFZ%0zg1x*>$p86_dQT3$|8Vc2oeOUWM@HOU=Rfsq fB8n*;t{e<2Cp(|jRn^)AG?l^A)z4*}Q$iB}AA>A0 diff --git a/html/img/gh.png b/html/img/gh.png new file mode 100755 index 0000000000000000000000000000000000000000..628da97c70890c73e59204f5b140c4e67671e92d GIT binary patch literal 1571 zcmaJ>c~BE~6izDPQq)#Nu*KOf(n^(VHY9;fiINM65``pc+9*v(mL$bwfCjbc%v9V{8r9iX|O%>Nr%pLD2qT{mty}c=LVleeamv znz3SOSm@kP8jThvOOq(56Yzh*fz(booe!uZij=BJC6+_lbvQ~B8nA2>kXdv_RDtRY z`5QXWWEySCe6vbTs^#f?J!WC*{1~RgVx!nJTJjQyO{dRANgx|FnymtGbD9%JmCh9^y)##j7{Dcqfn*1ta$rG89pJF6w-S7Z037$rr|y0;1Onp_ zGFJdT6Q!1C0AdVB0WOmpuV=AgAQ550Tn+-mivTtYPJmz*#75#_n9oV%!#rSOfmAfy zki%C~=fTp1{O#BLpJ|0jj#m6#|LRWit-vq3PE1z9ZqyvET4sX$-Icqy7t z<=aq5ff86AuBZBu6EjJsYWM0uejufWFTwPA7Su}0Bm$7KFb!q{Um_8~A{LUG#1l(l zSehUda@kU8LIRg9fkk2tZ;~ss5~R+mM<==F7hLHpxqLB>>PQS%Vc7b~?q!%T5+h8Q z4G=4Nzyi5WZ?^gkasJ{?Xhm`JC#WG6$1K2jb@=9&D3EgD#3UhGh#*21rJjulVXjCF zvp76q62jt0zzMG5C7DlfMgPl%C^3+~wf|}Lq=}jz|MmIcQjh1Ok6NjD$Em^Iv26D> z8tt_TnM9~^Tt8mflRGPOrrX|HtT3gG4LEuuk{g2Rn}QgJIa?gZo))!!=o_l9bvD%A zZ`aHajl8#~u?!4f7F#*b*->A=R2L)6!>saz?h>#wTXT-I(XmQ zx{84skS>k=i~i`(6k4C7;Zpfx%dCPVjPayMf8pugtGM=~s=Id1l#8MZJ1-73wV#Q3 zR3>v3%}jbQs1f_Z0xo;%=LILlA+nTpKI4ha%xWW}uqHrNao~&T4AY6m`P$_n-6h*g zhoX+e4n%~gl_lhe#s+AMb7d{5WzvYTa%6Q~si@@4{;s(0zU|H&P3fE+t{7X`S#Cj@ zC#vd}^4pcBD*77Ny5=j$h8EL2_t$O38$SQiJ6fPjJMimypr~MB2(&P0aI|h}$64<0 z>_~duqNjaT=DM^6+N{&B_lED;F2wrl?!4Lk*2((x!fmrcsw+=cI^qttuZ9C}-m~5E z-ryYVpL%^xR#&(0YI5hz<(}F7-p)?FPcyJO-zVO>%9ZDXJH8pnY;GJYFDQ>vd#j_* zRrd}L(r=!g+1#nQwsO?kpS`Qq8`NxE+Zy{gf7*_7J*U2V_|NpLo{iasj7VCg_V9&| ShohtYzipXxh2)4xTkF!HD`A7 zGAIf#2eRk&s%13)vlW+lq|A78-&7mDt%)5zO3YC!PX6C6d@N^ihs=xXE6;3R6D_$Y ZpF#6xy3}8Re4y=ES4z)+>iz|hdl!0_`wkbcR)P-?)y@G60U!DwdS5Kjv*DdV!92v z7!-Jp7=8I~ult4BS5`!1y1 - - - - - FMDB Reference - - - - - - -
    -
    - -

    - FMDB -

    - -

    - ccgus -

    - -
    -
    - - - -
    -
    -
    -
    -

    FMDB Reference

    - - - -
    - - - - - - - - - -
    - - -
    -
    -
    -
    - - - - \ No newline at end of file + + + FMDB Reference + + + + + + + + + +
    +
    +

    FMDB 2.7.7 Docs (89% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    + +

    FMDB v2.7

    + + + +

    CocoaPods Compatible +Carthage Compatible

    + +

    This is an Objective-C wrapper around SQLite.

    +

    The FMDB Mailing List:

    + +

    https://groups.google.com/group/fmdb

    +

    Read the SQLite FAQ:

    + +

    https://www.sqlite.org/faq.html

    + +

    Since FMDB is built on top of SQLite, you’re going to want to read this page top to bottom at least once. And while you’re there, make sure to bookmark the SQLite Documentation page: https://www.sqlite.org/docs.html

    +

    Contributing

    + +

    Do you have an awesome idea that deserves to be in FMDB? You might consider pinging ccgus first to make sure he hasn’t already ruled it out for some reason. Otherwise pull requests are great, and make sure you stick to the local coding conventions. However, please be patient and if you haven’t heard anything from ccgus for a week or more, you might want to send a note asking what’s up.

    +

    Installing

    +

    CocoaPods

    + +

    FMDB can be installed using CocoaPods.

    + +

    If you haven’t done so already, you might want to initialize the project, to have it produce a Podfile template for you:

    +
    $ pod init
    +
    + +

    Then, edit the Podfile, adding FMDB:

    +
    # Uncomment the next line to define a global platform for your project
    +# platform :ios, '9.0'
    +
    +target 'MyApp' do
    +    # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
    +    use_frameworks!
    +
    +    # Pods for MyApp2
    +
    +    pod 'FMDB'
    +    # pod 'FMDB/FTS'   # FMDB with FTS
    +    # pod 'FMDB/standalone'   # FMDB with latest SQLite amalgamation source
    +    # pod 'FMDB/standalone/FTS'   # FMDB with latest SQLite amalgamation source and FTS
    +    # pod 'FMDB/SQLCipher'   # FMDB with SQLCipher
    +end
    +
    + +

    Then install the pods:

    +
    $ pod install
    +
    + +

    Then open the .xcworkspace rather than the .xcodeproj.

    + +

    For more information on Cocoapods visit https://cocoapods.org.

    + +

    If using FMDB with SQLCipher you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the -DSQLITE_HAS_CODEC flag.

    +

    Carthage

    + +

    Once you make sure you have the latest version of Carthage, you can open up a command line terminal, navigate to your project’s main directory, and then do the following commands:

    +
    $ echo ' github "ccgus/fmdb" ' > ./Cartfile
    +$ carthage update
    +
    + +

    You can then configure your project as outlined in Carthage’s Getting Started (i.e. for iOS, adding the framework to the “Link Binary with Libraries” in your target and adding the copy-frameworks script; in macOS, adding the framework to the list of “Embedded Binaries”).

    +

    FMDB Class Reference:

    + +

    https://ccgus.github.io/fmdb/html/index.html

    +

    Automatic Reference Counting (ARC) or Manual Memory Management?

    + +

    You can use either style in your Cocoa project. FMDB will figure out which you are using at compile time and do the right thing.

    +

    What’s New in FMDB 2.7

    + +

    FMDB 2.7 attempts to support a more natural interface. This represents a fairly significant change for Swift developers (audited for nullability; shifted to properties in external interfaces where possible rather than methods; etc.). For Objective-C developers, this should be a fairly seamless transition (unless you were using the ivars that were previously exposed in the public interface, which you shouldn’t have been doing, anyway!).

    +

    Nullability and Swift Optionals

    + +

    FMDB 2.7 is largely the same as prior versions, but has been audited for nullability. For Objective-C users, this simply means that if you perform a static analysis of your FMDB-based project, you may receive more meaningful warnings as you review your project, but there are likely to be few, if any, changes necessary in your code.

    + +

    For Swift users, this nullability audit results in changes that are not entirely backward compatible with FMDB 2.6, but is a little more Swifty. Before FMDB was audited for nullability, Swift was forced to defensively assume that variables were optional, but the library now more accurately knows which properties and method parameters are optional, and which are not.

    + +

    This means, though, that Swift code written for FMDB 2.7 may require changes. For example, consider the following Swift 3/Swift 4 code for FMDB 2.6:

    +
    queue.inTransaction { db, rollback in
    +    do {
    +        guard let db == db else {
    +            // handle error here
    +            return
    +        }
    +
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [1])
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [2])
    +    } catch {
    +        rollback?.pointee = true
    +    }
    +}
    +
    + +

    Because FMDB 2.6 was not audited for nullability, Swift inferred that db and rollback were optionals. But, now, in FMDB 2.7, Swift now knows that, for example, neither db nor rollback above can be nil, so they are no longer optionals. Thus it becomes:

    +
    queue.inTransaction { db, rollback in
    +    do {
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [1])
    +        try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [2])
    +    } catch {
    +        rollback.pointee = true
    +    }
    +}
    +
    +

    Custom Functions

    + +

    In the past, when writing custom functions, you would have to generally include your own @autoreleasepool block to avoid problems when writing functions that scanned through a large table. Now, FMDB will automatically wrap it in an autorelease pool, so you don’t have to.

    + +

    Also, in the past, when retrieving the values passed to the function, you had to drop down to the SQLite C API and include your own sqlite3_value_XXX calls. There are now FMDatabase methods, valueInt, valueString, etc., so you can stay within Swift and/or Objective-C, without needing to call the C functions yourself. Likewise, when specifying the return values, you no longer need to call sqlite3_result_XXX C API, but rather you can use FMDatabase methods, resultInt, resultString, etc. There is a new enum for valueType called SqliteValueType, which can be used for checking the type of parameter passed to the custom function.

    + +

    Thus, you can do something like (as of Swift 3):

    +
    db.makeFunctionNamed("RemoveDiacritics", arguments: 1) { context, argc, argv in
    +    guard db.valueType(argv[0]) == .text || db.valueType(argv[0]) == .null else {
    +        db.resultError("Expected string parameter", context: context)
    +        return
    +    }
    +
    +    if let string = db.valueString(argv[0])?.folding(options: .diacriticInsensitive, locale: nil) {
    +        db.resultString(string, context: context)
    +    } else {
    +        db.resultNull(context: context)
    +    }
    +}
    +
    + +

    And you can then use that function in your SQL (in this case, matching both “Jose” and “José”):

    +
    SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'
    +
    + +

    Note, the method makeFunctionNamed:maximumArguments:withBlock: has been renamed to makeFunctionNamed:arguments:block:, to more accurately reflect the functional intent of the second parameter.

    +

    API Changes

    + +

    In addition to the makeFunctionNamed noted above, there are a few other API changes. Specifically,

    + +
      +
    • To become consistent with the rest of the API, the methods objectForColumnName and UTF8StringForColumnName have been renamed to objectForColumn and UTF8StringForColumn.

    • +
    • Note, the objectForColumn (and the associted subscript operator) now returns nil if an invalid column name/index is passed to it. It used to return NSNull.

    • +
    • To avoid confusion with FMDatabaseQueue method inTransaction, which performs transactions, the FMDatabase method to determine whether you are in a transaction or not, inTransaction, has been replaced with a read-only property, isInTransaction.

    • +
    • Several functions have been converted to properties, namely, databasePath, maxBusyRetryTimeInterval, shouldCacheStatements, sqliteHandle, hasOpenResultSets, lastInsertRowId, changes, goodConnection, columnCount, resultDictionary, applicationID, applicationIDString, userVersion, countOfCheckedInDatabases, countOfCheckedOutDatabases, and countOfOpenDatabases. For Objective-C users, this has little material impact, but for Swift users, it results in a slightly more natural interface. Note: For Objective-C developers, previously versions of FMDB exposed many ivars (but we hope you weren’t using them directly, anyway!), but the implmentation details for these are no longer exposed.

    • +
    +

    URL Methods

    + +

    In keeping with Apple’s shift from paths to URLs, there are now NSURL renditions of the various init methods, previously only accepting paths.

    +

    Usage

    + +

    There are three main classes in FMDB:

    + +
      +
    1. FMDatabase - Represents a single SQLite database. Used for executing SQL statements.
    2. +
    3. FMResultSet - Represents the results of executing a query on an FMDatabase.
    4. +
    5. FMDatabaseQueue - If you’re wanting to perform queries and updates on multiple threads, you’ll want to use this class. It’s described in the “Thread Safety” section below.
    6. +
    +

    Database Creation

    + +

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

    + +
      +
    1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.
    2. +
    3. An empty string (@""). An empty database is created at a temporary location. This database is deleted when the FMDatabase connection is closed.
    4. +
    5. NULL. An in-memory database is created. This database will be destroyed when the FMDatabase connection is closed.
    6. +
    + +

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: https://www.sqlite.org/inmemorydb.html)

    +
    NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.db"];
    +FMDatabase *db = [FMDatabase databaseWithPath:path];
    +
    +

    Opening

    + +

    Before you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database.

    +
    if (![db open]) {
    +    // [db release];   // uncomment this line in manual referencing code; in ARC, this is not necessary/permitted
    +    db = nil;
    +    return;
    +}
    +
    +

    Executing Updates

    + +

    Any sort of SQL statement which is not a SELECT statement qualifies as an update. This includes CREATE, UPDATE, INSERT, ALTER, COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE statements (plus many more). Basically, if your SQL statement does not begin with SELECT, it is an update statement.

    + +

    Executing updates returns a single value, a BOOL. A return value of YES means the update was successfully executed, and a return value of NO means that some error was encountered. You may invoke the -lastErrorMessage and -lastErrorCode methods to retrieve more information.

    +

    Executing Queries

    + +

    A SELECT statement is a query and is executed via one of the -executeQuery... methods.

    + +

    Executing queries returns an FMResultSet object if successful, and nil upon failure. You should use the -lastErrorMessage and -lastErrorCode methods to determine why a query failed.

    + +

    In order to iterate through the results of your query, you use a while() loop. You also need to “step” from one record to the other. With FMDB, the easiest way to do that is like this:

    +
    FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];
    +while ([s next]) {
    +    //retrieve values for each record
    +}
    +
    + +

    You must always invoke -[FMResultSet next] before attempting to access the values returned in a query, even if you’re only expecting one:

    +
    FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
    +if ([s next]) {
    +    int totalCount = [s intForColumnIndex:0];
    +}
    +
    + +

    FMResultSet has many methods to retrieve data in an appropriate format:

    + +
      +
    • intForColumn:
    • +
    • longForColumn:
    • +
    • longLongIntForColumn:
    • +
    • boolForColumn:
    • +
    • doubleForColumn:
    • +
    • stringForColumn:
    • +
    • dateForColumn:
    • +
    • dataForColumn:
    • +
    • dataNoCopyForColumn:
    • +
    • UTF8StringForColumn:
    • +
    • objectForColumn:
    • +
    + +

    Each of these methods also has a {type}ForColumnIndex: variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column’s name.

    + +

    Typically, there’s no need to -close an FMResultSet yourself, since that happens when either the result set is exhausted. However, if you only pull out a single request or any other number of requests which don’t exhaust the result set, you will need to call the -close method on the FMResultSet.

    +

    Closing

    + +

    When you have finished executing queries and updates on the database, you should -close the FMDatabase connection so that SQLite will relinquish any resources it has acquired during the course of its operation.

    +
    [db close];
    +
    +

    Transactions

    + +

    FMDatabase can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement.

    +

    Multiple Statements and Batch Stuff

    + +

    You can use FMDatabase‘s executeStatements:withResultBlock: to do multiple statements in a string:

    +
    NSString *sql = @"create table bulktest1 (id integer primary key autoincrement, x text);"
    +                 "create table bulktest2 (id integer primary key autoincrement, y text);"
    +                 "create table bulktest3 (id integer primary key autoincrement, z text);"
    +                 "insert into bulktest1 (x) values ('XXX');"
    +                 "insert into bulktest2 (y) values ('YYY');"
    +                 "insert into bulktest3 (z) values ('ZZZ');";
    +
    +success = [db executeStatements:sql];
    +
    +sql = @"select count(*) as count from bulktest1;"
    +       "select count(*) as count from bulktest2;"
    +       "select count(*) as count from bulktest3;";
    +
    +success = [self.db executeStatements:sql withResultBlock:^int(NSDictionary *dictionary) {
    +    NSInteger count = [dictionary[@"count"] integerValue];
    +    XCTAssertEqual(count, 1, @"expected one record for dictionary %@", dictionary);
    +    return 0;
    +}];
    +
    +

    Data Sanitization

    + +

    When providing a SQL statement to FMDB, you should not attempt to “sanitize” any values before insertion. Instead, you should use the standard SQLite binding syntax:

    +
    INSERT INTO myTable VALUES (?, ?, ?, ?)
    +
    + +

    The ? character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an NSArray, NSDictionary, or a va_list), which are properly escaped for you.

    + +

    And, to use that SQL with the ? placeholders from Objective-C:

    +
    NSInteger identifier = 42;
    +NSString *name = @"Liam O'Flaherty (\"the famous Irish author\")";
    +NSDate *date = [NSDate date];
    +NSString *comment = nil;
    +
    +BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", @(identifier), name, date, comment ?: [NSNull null]];
    +if (!success) {
    +    NSLog(@"error = %@", [db lastErrorMessage]);
    +}
    +
    + +
    +

    Note: Fundamental data types, like the NSInteger variable identifier, should be as a NSNumber objects, achieved by using the @ syntax, shown above. Or you can use the [NSNumber numberWithInt:identifier] syntax, too.

    + +

    Likewise, SQL NULL values should be inserted as [NSNull null]. For example, in the case of comment which might be nil (and is in this example), you can use the comment ?: [NSNull null] syntax, which will insert the string if comment is not nil, but will insert [NSNull null] if it is nil.

    +
    + +

    In Swift, you would use executeUpdate(values:), which not only is a concise Swift syntax, but also throws errors for proper error handling:

    +
    do {
    +    let identifier = 42
    +    let name = "Liam O'Flaherty (\"the famous Irish author\")"
    +    let date = Date()
    +    let comment: String? = nil
    +
    +    try db.executeUpdate("INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", values: [identifier, name, date, comment ?? NSNull()])
    +} catch {
    +    print("error = \(error)")
    +}
    +
    + +
    +

    Note: In Swift, you don’t have to wrap fundamental numeric types like you do in Objective-C. But if you are going to insert an optional string, you would probably use the comment ?? NSNull() syntax (i.e., if it is nil, use NSNull, otherwise use the string).

    +
    + +

    Alternatively, you may use named parameters syntax:

    +
    INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)
    +
    + +

    The parameters must start with a colon. SQLite itself supports other characters, but internally the dictionary keys are prefixed with a colon, do not include the colon in your dictionary keys.

    +
    NSDictionary *arguments = @{@"identifier": @(identifier), @"name": name, @"date": date, @"comment": comment ?: [NSNull null]};
    +BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)" withParameterDictionary:arguments];
    +if (!success) {
    +    NSLog(@"error = %@", [db lastErrorMessage]);
    +}
    +
    + +

    The key point is that one should not use NSString method stringWithFormat to manually insert values into the SQL statement, itself. Nor should one Swift string interpolation to insert values into the SQL. Use ? placeholders for values to be inserted into the database (or used in WHERE clauses in SELECT statements).

    + +

    Using FMDatabaseQueue and Thread Safety.

    + +

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don’t share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you’ll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. This would suck.

    + +

    So don’t instantiate a single FMDatabase object and use it across multiple threads.

    + +

    Instead, use FMDatabaseQueue. Instantiate a single FMDatabaseQueue and use it across multiple threads. The FMDatabaseQueue object will synchronize and coordinate access across the multiple threads. Here’s how to use it:

    + +

    First, make your queue.

    +
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
    +
    + +

    Then use it like so:

    +
    [queue inDatabase:^(FMDatabase *db) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
    +
    +    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    +    while ([rs next]) {
    +        
    +    }
    +}];
    +
    + +

    An easy way to wrap things up in a transaction can be done like this:

    +
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
    +    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
    +
    +    if (whoopsSomethingWrongHappened) {
    +        *rollback = YES;
    +        return;
    +    }
    +
    +    // etc ...
    +}];
    +
    + +

    The Swift equivalent would be:

    +
    queue.inTransaction { db, rollback in
    +    do {
    +        try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [1])
    +        try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [2])
    +        try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [3])
    +
    +        if whoopsSomethingWrongHappened {
    +            rollback.pointee = true
    +            return
    +        }
    +
    +        // etc ...
    +    } catch {
    +        rollback.pointee = true
    +        print(error)
    +    }
    +}
    +
    + +

    (Note, as of Swift 3, use pointee. But in Swift 2.3, use memory rather than pointee.)

    + +

    FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue’s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won’t step on each other’s toes, and every one is happy.

    + +

    Note: The calls to FMDatabaseQueue’s methods are blocking. So even though you are passing along blocks, they will not be run on another thread.

    +

    Making custom sqlite functions, based on blocks.

    + +

    You can do this! For an example, look for -makeFunctionNamed: in main.m

    +

    Swift

    + +

    You can use FMDB in Swift projects too.

    + +

    To do this, you must:

    + +
      +
    1. Copy the relevant .m and .h files from the FMDB src folder into your project.
    2. +
    + +

    You can copy all of them (which is easiest), or only the ones you need. Likely you will need FMDatabase and FMResultSet at a minimum. FMDatabaseAdditions provides some very useful convenience methods, so you will likely want that, too. If you are doing multithreaded access to a database, FMDatabaseQueue is quite useful, too. If you choose to not copy all of the files from the src directory, though, you may want to update FMDB.h to only reference the files that you included in your project.

    + +

    Note, if you’re copying all of the files from the src folder into to your project (which is recommended), you may want to drag the individual files into your project, not the folder, itself, because if you drag the folder, you won’t be prompted to add the bridging header (see next point).

    + +
      +
    1. If prompted to create a “bridging header”, you should do so. If not prompted and if you don’t already have a bridging header, add one.
    2. +
    + +

    For more information on bridging headers, see Swift and Objective-C in the Same Project.

    + +
      +
    1. In your bridging header, add a line that says:

      +
      #import "FMDB.h"
      +
    2. +
    3. Use the variations of executeQuery and executeUpdate with the sql and values parameters with try pattern, as shown below. These renditions of executeQuery and executeUpdate both throw errors in true Swift fashion.

    4. +
    + +

    If you do the above, you can then write Swift code that uses FMDatabase. For example, as of Swift 3:

    +
    let fileURL = try! FileManager.default
    +    .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    +    .appendingPathComponent("test.sqlite")
    +
    +let database = FMDatabase(url: fileURL)
    +
    +guard database.open() else {
    +    print("Unable to open database")
    +    return
    +}
    +
    +do {
    +    try database.executeUpdate("create table test(x text, y text, z text)", values: nil)
    +    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"])
    +    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["e", "f", "g"])
    +
    +    let rs = try database.executeQuery("select x, y, z from test", values: nil)
    +    while rs.next() {
    +        if let x = rs.string(forColumn: "x"), let y = rs.string(forColumn: "y"), let z = rs.string(forColumn: "z") {
    +            print("x = \(x); y = \(y); z = \(z)")
    +        }
    +    }
    +} catch {
    +    print("failed: \(error.localizedDescription)")
    +}
    +
    +database.close()
    +
    +

    History

    + +

    The history and changes are availbe on its GitHub page and are summarized in the “CHANGES_AND_TODO_LIST.txt” file.

    +

    Contributors

    + +

    The contributors to FMDB are contained in the “Contributors.txt” file.

    +

    Additional projects using FMDB, which might be interesting to the discerning developer.

    + + +

    Quick notes on FMDB’s coding style

    + +

    Spaces, not tabs. Square brackets, not dot notation. Look at what FMDB already does with curly brackets and such, and stick to that style.

    +

    Reporting bugs

    + +

    Reduce your bug down to the smallest amount of code possible. You want to make it super easy for the developers to see and reproduce your bug. If it helps, pretend that the person who can fix your bug is active on shipping 3 major products, works on a handful of open source projects, has a newborn baby, and is generally very very busy.

    + +

    And we’ve even added a template function to main.m (FMDBReportABugFunction) in the FMDB distribution to help you out:

    + +
      +
    • Open up fmdb project in Xcode.
    • +
    • Open up main.m and modify the FMDBReportABugFunction to reproduce your bug. + +
        +
      • Setup your table(s) in the code.
      • +
      • Make your query or update(s).
      • +
      • Add some assertions which demonstrate the bug.
      • +
    • +
    + +

    Then you can bring it up on the FMDB mailing list by showing your nice and compact FMDBReportABugFunction, or you can report the bug via the github FMDB bug reporter.

    + +

    Optional:

    + +

    Figure out where the bug is, fix it, and send a patch in or bring that up on the mailing list. Make sure all the other tests run after your modifications.

    +

    Support

    + +

    The support channels for FMDB are the mailing list (see above), filing a bug here, or maybe on Stack Overflow. So that is to say, support is provided by the community and on a voluntary basis.

    + +

    FMDB development is overseen by Gus Mueller of Flying Meat. If FMDB been helpful to you, consider purchasing an app from FM or telling all your friends about it.

    +

    License

    + +

    The license for FMDB is contained in the “License.txt” file.

    + +

    If you happen to come across either Gus Mueller or Rob Ryan in a bar, you might consider purchasing a drink of their choosing if FMDB has been useful to you.

    + +

    (The drink is for them of course, shame on you for trying to keep it.)

    + +
    +
    + +
    +
    + + + diff --git a/html/js/jazzy.js b/html/js/jazzy.js new file mode 100755 index 00000000..1e55d6ef --- /dev/null +++ b/html/js/jazzy.js @@ -0,0 +1,70 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/html/js/jquery.min.js b/html/js/jquery.min.js new file mode 100644 index 00000000..a1c07fd8 --- /dev/null +++ b/html/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0Callback block used by executeStatements:withResultBlock:

    "},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeInteger":{"name":"SqliteValueTypeInteger","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeFloat":{"name":"SqliteValueTypeFloat","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeText":{"name":"SqliteValueTypeText","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeBlob":{"name":"SqliteValueTypeBlob","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/SqliteValueType.html#/c:@E@SqliteValueType@SqliteValueTypeNull":{"name":"SqliteValueTypeNull","abstract":"

    Undocumented

    ","parent_name":"SqliteValueType"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModePassive":{"name":"FMDBCheckpointModePassive","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModeFull":{"name":"FMDBCheckpointModeFull","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModeRestart":{"name":"FMDBCheckpointModeRestart","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html#/c:@E@FMDBCheckpointMode@FMDBCheckpointModeTruncate":{"name":"FMDBCheckpointModeTruncate","abstract":"

    Undocumented

    ","parent_name":"FMDBCheckpointMode"},"Enums/FMDBCheckpointMode.html":{"name":"FMDBCheckpointMode","abstract":"

    Enumeration used in checkpoint methods.

    "},"Enums/SqliteValueType.html":{"name":"SqliteValueType","abstract":"

    Undocumented

    "},"Constants.html#/c:@FMDBVersionNumber":{"name":"FMDBVersionNumber","abstract":"

    Undocumented

    "},"Constants.html#/c:@FMDBVersionString":{"name":"FMDBVersionString","abstract":"

    Undocumented

    "},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)parentDB":{"name":"parentDB","abstract":"

    Undocumented

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)query":{"name":"query","abstract":"

    Executed query

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)columnNameToIndexMap":{"name":"columnNameToIndexMap","abstract":"

    NSMutableDictionary mapping column names to numeric index

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)statement":{"name":"statement","abstract":"

    FMStatement used by result set.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)close":{"name":"-close","abstract":"

    Close result set

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)next":{"name":"-next","abstract":"

    Retrieve next row for result set.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)nextWithError:":{"name":"-nextWithError:","abstract":"

    Retrieve next row for result set.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)step":{"name":"-step","abstract":"

    Perform SQL statement.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)stepWithError:":{"name":"-stepWithError:","abstract":"

    Perform SQL statement.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)hasAnotherRow":{"name":"-hasAnotherRow","abstract":"

    Did the last call to <next> succeed in retrieving another row?

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)columnCount":{"name":"columnCount","abstract":"

    How many columns in result set

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnIndexForName:":{"name":"-columnIndexForName:","abstract":"

    Column index for column name

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnNameForIndex:":{"name":"-columnNameForIndex:","abstract":"

    Column name for column index

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)intForColumn:":{"name":"-intForColumn:","abstract":"

    Result set integer value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)intForColumnIndex:":{"name":"-intForColumnIndex:","abstract":"

    Result set integer value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longForColumn:":{"name":"-longForColumn:","abstract":"

    Result set long value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longForColumnIndex:":{"name":"-longForColumnIndex:","abstract":"

    Result set long value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longLongIntForColumn:":{"name":"-longLongIntForColumn:","abstract":"

    Result set long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)longLongIntForColumnIndex:":{"name":"-longLongIntForColumnIndex:","abstract":"

    Result set long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)unsignedLongLongIntForColumn:":{"name":"-unsignedLongLongIntForColumn:","abstract":"

    Result set unsigned long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)unsignedLongLongIntForColumnIndex:":{"name":"-unsignedLongLongIntForColumnIndex:","abstract":"

    Result set unsigned long long int value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)boolForColumn:":{"name":"-boolForColumn:","abstract":"

    Result set BOOL value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)boolForColumnIndex:":{"name":"-boolForColumnIndex:","abstract":"

    Result set BOOL value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)doubleForColumn:":{"name":"-doubleForColumn:","abstract":"

    Result set double value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)doubleForColumnIndex:":{"name":"-doubleForColumnIndex:","abstract":"

    Result set double value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)stringForColumn:":{"name":"-stringForColumn:","abstract":"

    Result set NSString value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)stringForColumnIndex:":{"name":"-stringForColumnIndex:","abstract":"

    Result set NSString value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dateForColumn:":{"name":"-dateForColumn:","abstract":"

    Result set NSDate value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dateForColumnIndex:":{"name":"-dateForColumnIndex:","abstract":"

    Result set NSDate value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataForColumn:":{"name":"-dataForColumn:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataForColumnIndex:":{"name":"-dataForColumnIndex:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)UTF8StringForColumn:":{"name":"-UTF8StringForColumn:","abstract":"

    Result set (const unsigned char *) value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)UTF8StringForColumnName:":{"name":"-UTF8StringForColumnName:","abstract":"

    Undocumented

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)UTF8StringForColumnIndex:":{"name":"-UTF8StringForColumnIndex:","abstract":"

    Result set (const unsigned char *) value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForColumn:":{"name":"-objectForColumn:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForColumnName:":{"name":"-objectForColumnName:","abstract":"

    Undocumented

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForColumnIndex:":{"name":"-objectForColumnIndex:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectForKeyedSubscript:":{"name":"-objectForKeyedSubscript:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)objectAtIndexedSubscript:":{"name":"-objectAtIndexedSubscript:","abstract":"

    Result set object for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataNoCopyForColumn:":{"name":"-dataNoCopyForColumn:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)dataNoCopyForColumnIndex:":{"name":"-dataNoCopyForColumnIndex:","abstract":"

    Result set NSData value for column.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnIndexIsNull:":{"name":"-columnIndexIsNull:","abstract":"

    Is the column NULL ?

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)columnIsNull:":{"name":"-columnIsNull:","abstract":"

    Is the column NULL ?

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(py)resultDictionary":{"name":"resultDictionary","abstract":"

    Returns a dictionary of the row results mapped to case sensitive keys of the column names.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)resultDict":{"name":"-resultDict","abstract":"

    Returns a dictionary of the row results

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)kvcMagic:":{"name":"-kvcMagic:","abstract":"

    Performs setValue to yield support for key value observing.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)bindWithArray:":{"name":"-bindWithArray:","abstract":"

    Bind array of values to prepared statement.

    ","parent_name":"FMResultSet"},"Classes/FMResultSet.html#/c:objc(cs)FMResultSet(im)bindWithDictionary:":{"name":"-bindWithDictionary:","abstract":"

    Bind dictionary of values to prepared statement.

    ","parent_name":"FMResultSet"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(py)path":{"name":"path","abstract":"

    Path of database

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(py)openFlags":{"name":"openFlags","abstract":"

    Open flags

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(py)vfsName":{"name":"vfsName","abstract":"

    Custom virtual file system name

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithPath:":{"name":"+databaseQueueWithPath:","abstract":"

    Create queue using path.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithURL:":{"name":"+databaseQueueWithURL:","abstract":"

    Create queue using file URL.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithPath:flags:":{"name":"+databaseQueueWithPath:flags:","abstract":"

    Create queue using path and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseQueueWithURL:flags:":{"name":"+databaseQueueWithURL:flags:","abstract":"

    Create queue using file URL and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithPath:":{"name":"-initWithPath:","abstract":"

    Create queue using path.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithURL:":{"name":"-initWithURL:","abstract":"

    Create queue using file URL.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithPath:flags:":{"name":"-initWithPath:flags:","abstract":"

    Create queue using path and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithURL:flags:":{"name":"-initWithURL:flags:","abstract":"

    Create queue using file URL and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithPath:flags:vfs:":{"name":"-initWithPath:flags:vfs:","abstract":"

    Create queue using path and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)initWithURL:flags:vfs:":{"name":"-initWithURL:flags:vfs:","abstract":"

    Create queue using file URL and specified flags.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(cm)databaseClass":{"name":"+databaseClass","abstract":"

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)close":{"name":"-close","abstract":"

    Close database used by queue.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)interrupt":{"name":"-interrupt","abstract":"

    Interupt pending database operation.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inDatabase:":{"name":"-inDatabase:","abstract":"

    Synchronously perform database operations on queue.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inTransaction:":{"name":"-inTransaction:","abstract":"

    Synchronously perform database operations on queue, using transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inDeferredTransaction:":{"name":"-inDeferredTransaction:","abstract":"

    Synchronously perform database operations on queue, using deferred transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inExclusiveTransaction:":{"name":"-inExclusiveTransaction:","abstract":"

    Synchronously perform database operations on queue, using exclusive transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inImmediateTransaction:":{"name":"-inImmediateTransaction:","abstract":"

    Synchronously perform database operations on queue, using immediate transactions.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)inSavePoint:":{"name":"-inSavePoint:","abstract":"

    Synchronously perform database operations using save point.

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)checkpoint:error:":{"name":"-checkpoint:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)checkpoint:name:error:":{"name":"-checkpoint:name:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabaseQueue.html#/c:objc(cs)FMDatabaseQueue(im)checkpoint:name:logFrameCount:checkpointCount:error:":{"name":"-checkpoint:name:logFrameCount:checkpointCount:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabaseQueue"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)path":{"name":"path","abstract":"

    Database path

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)delegate":{"name":"delegate","abstract":"

    Delegate object

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)maximumNumberOfDatabasesToCreate":{"name":"maximumNumberOfDatabasesToCreate","abstract":"

    Maximum number of databases to create

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)openFlags":{"name":"openFlags","abstract":"

    Open flags

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)vfsName":{"name":"vfsName","abstract":"

    Custom virtual file system name

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithPath:":{"name":"+databasePoolWithPath:","abstract":"

    Create pool using path.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithURL:":{"name":"+databasePoolWithURL:","abstract":"

    Create pool using file URL.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithPath:flags:":{"name":"+databasePoolWithPath:flags:","abstract":"

    Create pool using path and specified flags

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databasePoolWithURL:flags:":{"name":"+databasePoolWithURL:flags:","abstract":"

    Create pool using file URL and specified flags

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithPath:":{"name":"-initWithPath:","abstract":"

    Create pool using path.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithURL:":{"name":"-initWithURL:","abstract":"

    Create pool using file URL.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithPath:flags:":{"name":"-initWithPath:flags:","abstract":"

    Create pool using path and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithURL:flags:":{"name":"-initWithURL:flags:","abstract":"

    Create pool using file URL and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithPath:flags:vfs:":{"name":"-initWithPath:flags:vfs:","abstract":"

    Create pool using path and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)initWithURL:flags:vfs:":{"name":"-initWithURL:flags:vfs:","abstract":"

    Create pool using file URL and specified flags.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(cm)databaseClass":{"name":"+databaseClass","abstract":"

    Returns the Class of ‘FMDatabase’ subclass, that will be used to instantiate database object.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)countOfCheckedInDatabases":{"name":"countOfCheckedInDatabases","abstract":"

    Number of checked-in databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)countOfCheckedOutDatabases":{"name":"countOfCheckedOutDatabases","abstract":"

    Number of checked-out databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(py)countOfOpenDatabases":{"name":"countOfOpenDatabases","abstract":"

    Total number of databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)releaseAllDatabases":{"name":"-releaseAllDatabases","abstract":"

    Release all databases in pool

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inDatabase:":{"name":"-inDatabase:","abstract":"

    Synchronously perform database operations in pool.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inTransaction:":{"name":"-inTransaction:","abstract":"

    Synchronously perform database operations in pool using transaction.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inExclusiveTransaction:":{"name":"-inExclusiveTransaction:","abstract":"

    Synchronously perform database operations in pool using exclusive transaction.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inDeferredTransaction:":{"name":"-inDeferredTransaction:","abstract":"

    Synchronously perform database operations in pool using deferred transaction.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inImmediateTransaction:":{"name":"-inImmediateTransaction:","abstract":"

    Synchronously perform database operations on queue, using immediate transactions.

    ","parent_name":"FMDatabasePool"},"Classes/FMDatabasePool.html#/c:objc(cs)FMDatabasePool(im)inSavePoint:":{"name":"-inSavePoint:","abstract":"

    Synchronously perform database operations in pool using save point.

    ","parent_name":"FMDatabasePool"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_statement":{"name":"_statement","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_query":{"name":"_query","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_useCount":{"name":"_useCount","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement@_inUse":{"name":"_inUse","abstract":"

    Undocumented

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)useCount":{"name":"useCount","abstract":"

    Usage count

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)query":{"name":"query","abstract":"

    SQL statement

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)statement":{"name":"statement","abstract":"

    SQLite sqlite3_stmt

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(py)inUse":{"name":"inUse","abstract":"

    Indication of whether the statement is in use

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(im)close":{"name":"-close","abstract":"

    Close statement

    ","parent_name":"FMStatement"},"Classes/FMStatement.html#/c:objc(cs)FMStatement(im)reset":{"name":"-reset","abstract":"

    Reset statement

    ","parent_name":"FMStatement"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)traceExecution":{"name":"traceExecution","abstract":"

    Whether should trace execution

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)checkedOut":{"name":"checkedOut","abstract":"

    Whether checked out or not

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)crashOnErrors":{"name":"crashOnErrors","abstract":"

    Crash on errors

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)logsErrors":{"name":"logsErrors","abstract":"

    Logs errors

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)cachedStatements":{"name":"cachedStatements","abstract":"

    Dictionary of cached statements

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)databaseWithPath:":{"name":"+databaseWithPath:","abstract":"

    Create a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)databaseWithURL:":{"name":"+databaseWithURL:","abstract":"

    Create a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)initWithPath:":{"name":"-initWithPath:","abstract":"

    Initialize a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)initWithURL:":{"name":"-initWithURL:","abstract":"

    Initialize a FMDatabase object.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)isOpen":{"name":"isOpen","abstract":"

    Is the database open or not?

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)open":{"name":"-open","abstract":"

    Opening a new database connection

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)openWithFlags:":{"name":"-openWithFlags:","abstract":"

    Opening a new database connection with flags and an optional virtual file system (VFS)

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)openWithFlags:vfs:":{"name":"-openWithFlags:vfs:","abstract":"

    Opening a new database connection with flags and an optional virtual file system (VFS)

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)close":{"name":"-close","abstract":"

    Closing a database connection

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)goodConnection":{"name":"goodConnection","abstract":"

    Test to see if we have a good connection to the database.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withErrorAndBindings:":{"name":"-executeUpdate:withErrorAndBindings:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)update:withErrorAndBindings:":{"name":"-update:withErrorAndBindings:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:":{"name":"-executeUpdate:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdateWithFormat:":{"name":"-executeUpdateWithFormat:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withArgumentsInArray:":{"name":"-executeUpdate:withArgumentsInArray:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:values:error:":{"name":"-executeUpdate:values:error:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withParameterDictionary:":{"name":"-executeUpdate:withParameterDictionary:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeUpdate:withVAList:":{"name":"-executeUpdate:withVAList:","abstract":"

    Execute single update statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeStatements:":{"name":"-executeStatements:","abstract":"

    Execute multiple SQL statements

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeStatements:withResultBlock:":{"name":"-executeStatements:withResultBlock:","abstract":"

    Execute multiple SQL statements with callback handler

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)lastInsertRowId":{"name":"lastInsertRowId","abstract":"

    Last insert rowid

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)changes":{"name":"changes","abstract":"

    The number of rows changed by prior SQL statement.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:":{"name":"-executeQuery:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQueryWithFormat:":{"name":"-executeQueryWithFormat:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:withArgumentsInArray:":{"name":"-executeQuery:withArgumentsInArray:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:values:error:":{"name":"-executeQuery:values:error:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:withParameterDictionary:":{"name":"-executeQuery:withParameterDictionary:","abstract":"

    Execute select statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)executeQuery:withVAList:":{"name":"-executeQuery:withVAList:","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)prepare:":{"name":"-prepare:","abstract":"

    Prepare SQL statement.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginTransaction":{"name":"-beginTransaction","abstract":"

    Begin a transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginDeferredTransaction":{"name":"-beginDeferredTransaction","abstract":"

    Begin a deferred transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginImmediateTransaction":{"name":"-beginImmediateTransaction","abstract":"

    Begin an immediate transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)beginExclusiveTransaction":{"name":"-beginExclusiveTransaction","abstract":"

    Begin an exclusive transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)commit":{"name":"-commit","abstract":"

    Commit a transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rollback":{"name":"-rollback","abstract":"

    Rollback a transaction

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)isInTransaction":{"name":"isInTransaction","abstract":"

    Identify whether currently in a transaction or not

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)inTransaction":{"name":"-inTransaction","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)clearCachedStatements":{"name":"-clearCachedStatements","abstract":"

    Clear cached statements

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)closeOpenResultSets":{"name":"-closeOpenResultSets","abstract":"

    Close all open result sets

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)hasOpenResultSets":{"name":"hasOpenResultSets","abstract":"

    Whether database has any open result sets

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)shouldCacheStatements":{"name":"shouldCacheStatements","abstract":"

    Whether should cache statements or not

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)interrupt":{"name":"-interrupt","abstract":"

    Interupt pending database operation

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)setKey:":{"name":"-setKey:","abstract":"

    Set encryption key.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rekey:":{"name":"-rekey:","abstract":"

    Reset encryption key

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)setKeyWithData:":{"name":"-setKeyWithData:","abstract":"

    Set encryption key using keyData.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rekeyWithData:":{"name":"-rekeyWithData:","abstract":"

    Reset encryption key using keyData.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)databasePath":{"name":"databasePath","abstract":"

    The path of the database file.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)databaseURL":{"name":"databaseURL","abstract":"

    The file URL of the database file.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)sqliteHandle":{"name":"sqliteHandle","abstract":"

    The underlying SQLite handle .

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastErrorMessage":{"name":"-lastErrorMessage","abstract":"

    Last error message

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastErrorCode":{"name":"-lastErrorCode","abstract":"

    Last error code

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastExtendedErrorCode":{"name":"-lastExtendedErrorCode","abstract":"

    Last extended error code

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)hadError":{"name":"-hadError","abstract":"

    Had error

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)lastError":{"name":"-lastError","abstract":"

    Last error

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)maxBusyRetryTimeInterval":{"name":"maxBusyRetryTimeInterval","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)startSavePointWithName:error:":{"name":"-startSavePointWithName:error:","abstract":"

    Start save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)releaseSavePointWithName:error:":{"name":"-releaseSavePointWithName:error:","abstract":"

    Release save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)rollbackToSavePointWithName:error:":{"name":"-rollbackToSavePointWithName:error:","abstract":"

    Roll back to save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)inSavePoint:":{"name":"-inSavePoint:","abstract":"

    Start save point

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)checkpoint:error:":{"name":"-checkpoint:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)checkpoint:name:error:":{"name":"-checkpoint:name:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)checkpoint:name:logFrameCount:checkpointCount:error:":{"name":"-checkpoint:name:logFrameCount:checkpointCount:error:","abstract":"

    Performs a WAL checkpoint

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)isSQLiteThreadSafe":{"name":"+isSQLiteThreadSafe","abstract":"

    Test to see if the library is threadsafe

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)limitFor:value:":{"name":"-limitFor:value:","abstract":"

    Examine/set limits

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)sqliteLibVersion":{"name":"+sqliteLibVersion","abstract":"

    Run-time library version numbers

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)FMDBUserVersion":{"name":"+FMDBUserVersion","abstract":"

    The FMDB version number as a string in the form of "2.7.7" .

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)FMDBVersion":{"name":"+FMDBVersion","abstract":"

    The FMDB version

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)makeFunctionNamed:arguments:block:":{"name":"-makeFunctionNamed:arguments:block:","abstract":"

    Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)makeFunctionNamed:maximumArguments:withBlock:":{"name":"-makeFunctionNamed:maximumArguments:withBlock:","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueType:":{"name":"-valueType:","abstract":"

    Undocumented

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueInt:":{"name":"-valueInt:","abstract":"

    Get integer value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueLong:":{"name":"-valueLong:","abstract":"

    Get long value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueDouble:":{"name":"-valueDouble:","abstract":"

    Get double value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueData:":{"name":"-valueData:","abstract":"

    Get NSData value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)valueString:":{"name":"-valueString:","abstract":"

    Get string value of parameter in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultNullInContext:":{"name":"-resultNullInContext:","abstract":"

    Return null value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultInt:context:":{"name":"-resultInt:context:","abstract":"

    Return integer value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultLong:context:":{"name":"-resultLong:context:","abstract":"

    Return long value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultDouble:context:":{"name":"-resultDouble:context:","abstract":"

    Return double value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultData:context:":{"name":"-resultData:context:","abstract":"

    Return NSData object from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultString:context:":{"name":"-resultString:context:","abstract":"

    Return string value from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultError:context:":{"name":"-resultError:context:","abstract":"

    Return error string from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultErrorCode:context:":{"name":"-resultErrorCode:context:","abstract":"

    Return error code from custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultErrorNoMemoryInContext:":{"name":"-resultErrorNoMemoryInContext:","abstract":"

    Report memory error in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)resultErrorTooBigInContext:":{"name":"-resultErrorTooBigInContext:","abstract":"

    Report that string or BLOB is too long to represent in custom function.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(cm)storeableDateFormat:":{"name":"+storeableDateFormat:","abstract":"

    Generate an NSDateFormatter that won’t be broken by permutations of timezones or locales.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)hasDateFormatter":{"name":"-hasDateFormatter","abstract":"

    Test whether the database has a date formatter assigned.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)setDateFormat:":{"name":"-setDateFormat:","abstract":"

    Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)dateFromString:":{"name":"-dateFromString:","abstract":"

    Convert the supplied NSString to NSDate, using the current database formatter.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)stringFromDate:":{"name":"-stringFromDate:","abstract":"

    Convert the supplied NSDate to NSString, using the current database formatter.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)intForQuery:":{"name":"-intForQuery:","abstract":"

    Return int value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)longForQuery:":{"name":"-longForQuery:","abstract":"

    Return long value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)boolForQuery:":{"name":"-boolForQuery:","abstract":"

    Return BOOL value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)doubleForQuery:":{"name":"-doubleForQuery:","abstract":"

    Return double value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)stringForQuery:":{"name":"-stringForQuery:","abstract":"

    Return NSString value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)dataForQuery:":{"name":"-dataForQuery:","abstract":"

    Return NSData value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)dateForQuery:":{"name":"-dateForQuery:","abstract":"

    Return NSDate value for query

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)tableExists:":{"name":"-tableExists:","abstract":"

    Does table exist in database?

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)getSchema":{"name":"-getSchema","abstract":"

    The schema of the database.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)getTableSchema:":{"name":"-getTableSchema:","abstract":"

    The schema of the database.

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)columnExists:inTableWithName:":{"name":"-columnExists:inTableWithName:","abstract":"

    Test to see if particular column exists for particular table in database

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)columnExists:columnName:":{"name":"-columnExists:columnName:","abstract":"

    Test to see if particular column exists for particular table in database

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(im)validateSQL:error:":{"name":"-validateSQL:error:","abstract":"

    Validate SQL statement

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)applicationID":{"name":"applicationID","abstract":"

    Retrieve application ID

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)applicationIDString":{"name":"applicationIDString","abstract":"

    Retrieve application ID string

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html#/c:objc(cs)FMDatabase(py)userVersion":{"name":"userVersion","abstract":"

    Retrieve user version

    ","parent_name":"FMDatabase"},"Classes/FMDatabase.html":{"name":"FMDatabase","abstract":"

    A SQLite (https://sqlite.org/) Objective-C wrapper.

    "},"Classes/FMStatement.html":{"name":"FMStatement","abstract":"

    Objective-C wrapper for sqlite3_stmt

    "},"Classes/FMDatabasePool.html":{"name":"FMDatabasePool","abstract":"

    Pool of FMDatabase objects.

    "},"Classes/FMDatabaseQueue.html":{"name":"FMDatabaseQueue","abstract":"

    To perform queries and updates on multiple threads, you’ll want to use FMDatabaseQueue .

    "},"Classes/FMResultSet.html":{"name":"FMResultSet","abstract":"

    Represents the results of executing a query on an FMDatabase .

    "},"Categories/NSObject%28FMDatabasePoolDelegate%29.html#/c:objc(cs)NSObject(im)databasePool:shouldAddDatabaseToPool:":{"name":"-databasePool:shouldAddDatabaseToPool:","abstract":"

    Asks the delegate whether database should be added to the pool.

    ","parent_name":"NSObject(FMDatabasePoolDelegate)"},"Categories/NSObject%28FMDatabasePoolDelegate%29.html#/c:objc(cs)NSObject(im)databasePool:didAddDatabase:":{"name":"-databasePool:didAddDatabase:","abstract":"

    Tells the delegate that database was added to the pool.

    ","parent_name":"NSObject(FMDatabasePoolDelegate)"},"Categories/NSObject%28FMDatabasePoolDelegate%29.html":{"name":"NSObject(FMDatabasePoolDelegate)","abstract":"

    FMDatabasePool delegate category

    "},"Categories.html":{"name":"Categories","abstract":"

    The following categories are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Constants.html":{"name":"Constants","abstract":"

    The following constants are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"

    The following type definitions are available globally.

    "}} \ No newline at end of file diff --git a/html/undocumented.json b/html/undocumented.json new file mode 100644 index 00000000..652841ca --- /dev/null +++ b/html/undocumented.json @@ -0,0 +1,180 @@ +{ + "warnings": [ + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDB.h", + "line": 3, + "symbol": "FMDBVersionNumber", + "symbol_kind": "sourcekitten.source.lang.objc.decl.constant", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDB.h", + "line": 4, + "symbol": "FMDBVersionString", + "symbol_kind": "sourcekitten.source.lang.objc.decl.constant", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 50, + "symbol": "FMDBCheckpointMode.FMDBCheckpointModePassive", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 51, + "symbol": "FMDBCheckpointMode.FMDBCheckpointModeFull", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 52, + "symbol": "FMDBCheckpointMode.FMDBCheckpointModeRestart", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 53, + "symbol": "FMDBCheckpointMode.FMDBCheckpointModeTruncate", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 698, + "symbol": "FMDatabase.-executeQuery:withVAList:", + "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 805, + "symbol": "FMDatabase.-inTransaction", + "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 995, + "symbol": "FMDatabase.maxBusyRetryTimeInterval", + "symbol_kind": "sourcekitten.source.lang.objc.decl.property", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1195, + "symbol": "FMDatabase.-makeFunctionNamed:maximumArguments:withBlock:", + "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1197, + "symbol": "SqliteValueType", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1197, + "symbol": "SqliteValueType", + "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1198, + "symbol": "SqliteValueType.SqliteValueTypeInteger", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1199, + "symbol": "SqliteValueType.SqliteValueTypeFloat", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1200, + "symbol": "SqliteValueType.SqliteValueTypeText", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1201, + "symbol": "SqliteValueType.SqliteValueTypeBlob", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1202, + "symbol": "SqliteValueType.SqliteValueTypeNull", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1205, + "symbol": "FMDatabase.-valueType:", + "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1457, + "symbol": "FMStatement._statement", + "symbol_kind": "sourcekitten.source.lang.objc.decl.ivar", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1458, + "symbol": "FMStatement._query", + "symbol_kind": "sourcekitten.source.lang.objc.decl.ivar", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1459, + "symbol": "FMStatement._useCount", + "symbol_kind": "sourcekitten.source.lang.objc.decl.ivar", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMDatabase.h", + "line": 1460, + "symbol": "FMStatement._inUse", + "symbol_kind": "sourcekitten.source.lang.objc.decl.ivar", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMResultSet.h", + "line": 29, + "symbol": "FMResultSet.parentDB", + "symbol_kind": "sourcekitten.source.lang.objc.decl.property", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMResultSet.h", + "line": 321, + "symbol": "FMResultSet.-UTF8StringForColumnName:", + "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/rryan/Desktop/fmdb/src/fmdb/FMResultSet.h", + "line": 343, + "symbol": "FMResultSet.-objectForColumnName:", + "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance", + "warning": "undocumented" + } + ], + "source_directory": "/Users/rryan/Desktop/fmdb" +} \ No newline at end of file diff --git a/images/bg_hr.png b/images/bg_hr.png deleted file mode 100644 index 7973bd69888c7e10ccad1111d555ceabb7cd99b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD diff --git a/images/blacktocat.png b/images/blacktocat.png deleted file mode 100644 index 6e264fe57a2e35a2855405ac7d4102c3f6ddcdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=eg`=5?o13Glvx}*rp{t>#shg3DvyriZv5}jZ ztD`wguSMv>2~2MaLa!4}y`ZF!TL84#CABECEH%ZgC_h&L>}9J=EN(GzcCm0X zaRr%YgxxI=y(w7S0@dq`Q?EYIG5Vm0MT%&c5HR(CnDAr^T6f1avxRvmvnsN+?-j}Z~1)Zr#rqzrt`edmo44*B<0=C4>mrxHF6$p zVws~UocMfeI`gB8pYMLYTzA87`NOI2w2B*JM5L`^AkN4AFQu&S+6ULTPjv;vzl4& z-eaK_F|D4~l3hzBSF~icNT@MID=v+_X`vpuvf=8+S(|^vlRdHe0<)v-^wiVR3w=TQ)uFA9F z>vmqc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=$skw`#i#v$3O_v5UEZv#YC% zp@9obuSMv>2~2MaLa!N4y`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-@<(X&zK> z3U0TU;MA)Rbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+3t#h8?05D7Z^K@|xskoK& z=l_5E!ww8;ZH!Ed#V+%1n6Rkg{=V8A2QTsNE8^> zvHmCezoM^A29GnE>#ih4F*YzTGbm`! V-6~#faTQcLc)I$ztaD0e0svxP=aVwVK4enmt9g0IKZo#d%7nk4^w@~b(uifvD z``(=MFknn*JH!$I|dc`^>cnF`118Y;wG!- z_Q~1W&C?8M1t(?cY;HxR=xAnRrDFqjVB?XVPEmW7Xl zg^(qUggBL`m+-3rM=LioDlf+`P9R|~F`ECdEBt!??=}Yw)qjY%If&8xr&D?=>QvIs zKr1Rfc1|`6PJT`*elB({9$ot`v%N~NfxMmE%)Ho~K(zmD zLBu>zoJ}(rGZvvZq7h0XXh{f z9Yu9pXE$e%t+NZ2^d~+l6*CJvr+?S~A+Mq$tmp)CGjp=AQj`&+d9}c9XJ;wQ&CM;t zBP+;Tt70}MZ%2E#K>`3(=RTj4U-+kfyU+w*uuI2yk3)lau%kk05?ukdhi;`oX(Qd(Zie|+td0lF!B(ZgdEn&k}~O&w^8 z>?^KhaE^p%K#G;csY3icy5ewJ$krr-^7@+4EHpGa#pDKa+M{G(JcMAk2y@ zAD4bbfGckvCZKO$D4eZfeFQD1|6@RV6@1dY-!HZip7n9y6F|ybPIQY;UY&domoq^$ znnL$MBL=odWST@B_g;kDOd=z~0LQJ9!zQ&qM$$&IgTXny;Z0Zk5gd0m95{LV4p;Lg z8+Ex$iXYRl_%@~x>ANvXi<@~XA@B=8i|)%}?buwZ+!X?a3Y8yVnUE0Qeo6SMC8Aws z%oTAu9Q2kmVDg4^0;oI}|4=6MK~4_-4;-B-+44!cYW9I=iC^WT=PRN#<7uR2G;gX^m~zA)LhEquX)c?AGh2jr8?EN4OcXVV z;~SPr3a2dln~!dJXklj=nG><%dSc7eo7xW;2yhgKuf<^15ZR7 zUEEA3kE=8gb=FL$&gf{@0wF=_TtZ_KqgzL6nv?JpI3FKMS`Li6q^-nGqp!0~jK z&Hlv0L(YyC>gE8|dPLM;-oe__-3N@b41Zvsb@qTCV*MRwZe!@b(0!)+0&c{o0{S%1 zW01+)!2R+C-F1r-pJk9*5|M`f2tOqLoQ4Z)CPSKaQ67mtJB zf~Z+z98vUy`wi2tN08e*72TJeg@}!3N6n#{y$O;{GJyaQd8jpTz`TBE2V)#ocq31~ z!DHeRdw(Lais)#Qn#!mvBe^;hCsL}okh7kvm@s!By?Ue6nbAR#le#~q-&gU@yQ!Pi zv}<+lsMJe!7w*Fk(j+S<-1mdt#8d3U%X}W3q|sxS?#FO{$Wv`+`VYS@0I!j(gykt8 zjVk0ac&Y+o3M9%E3piX?>%J3K(71|O$W&KS^usI8M>t51StG2gAwVis9RKVT#W@=p zzJ=9< z;LTNs0;5@f?4#MJA-0s3Z3|8M^gxY*RS{C2Ich`|AIFCJ%5YKaz#L^PFm_E zo@OVpm!ESz&S%FC3((q#q%aX0S)Gb?CWjz+8Y1Qk+VMd=v|K}y)zfqhVpgiFUYT|u ztHh3AgN83Je|(%tq*5S%yaM0 z{Oq1@nou^|=X^xJi6muVAJQ?)Seg`OiQXXs(8zc>zH(f=gfjHho)iq!#Ob5-xlH=T zXY5(nYBg?p9;7*c?LGENVQX$tnlCE0rs7&8(whLtMvpJ==b0~bqFxvaalqIOJqv^$ zE=|+JotCVREY1M|92FXGuzq5Xot#~}zPuQH{3-4ihzBwMc>a77x%vlk7hp$WEBt`Q zInf=VkVI#DR)MsphZBrTlvNzbJoxTizvNhs;#G&|7v3QW=z#S_?QfR?C)7?>zI$x5*H38H#y94`6XM#84uhuOkiOWQ zDVnfMs~SPqvCfv>jk3u*P%fi|%~$W)P7v(j^rZ{f=OBPz;os`U?KK6=k^MjvMoOHNL|+Nb%; zclDh8@cko=nq5^CZTCpwkDb`;g?vcADHCwl<8TkR{V?Qr=M5Ssq9}=5X=|sKRC0G4ckVGg}HQV?XrymN&Do2h;IK~_{KX&+$s-$N2_}FP>iT+i^4k5D zFQw1VyvSB_LTs)yu6GOHu?EZD$$h(buHxg|vKDxbKb1ygl>P4J7|Y?Y9$ev2#&){G zc3h2Ff2k!uMI;cDnQ5@amRLc7rJ!~97sQKv=f8})fexlU7>l|oZ5uAf1XW%ww0m|634J{>o#6qtVhg@F<0bw6E51KgTaTFqu@IE0_M^Ba zYEwd}WOD{Fz48tS&lJsbWEe362uJf58?onE&1f}B$=@!P^7kIP9S$QKtIMcXd*I=q zFiZ{w=J&`c&IF$CX1Dm3#nck)UgzQ)ZDIM&Y^~hF;`)eHCRyzlpgnGfK9PWmHK{h!zv9q1d@0}x4S*i^C%VWe*H6@e zEE|?ysUR17UXhCnXMfU^mGTmN1;!K<=e$#cjd1=h)j)r2?Pc0#8ya$EYf z;7p+hK4$@C)wX^s|BQ8ga`ZYHspd_i7R}MWz?_9DuScwbf;r4X|NiQT;Hk#p>J~rw z`n+RTH%jGei%y@iJ?QSq#hsVwBW6?ZVzsDmlF*^Pzq8+E-C0J4@34vRcM8v{Ip7#g z<0^@3Lyh_mmDfym-^-|d26f+U<3fDT#ZJer#ufLeAsgJ`9{gLG{XF4SSpt$q7Sp6d z8M9c{vpobO3|}s%OZ=}i>R}-mC;7j_Z^Nt>4j~-YK64mHzv*U2MTa*1rXs-I`b*7r zHlSt4W`)L@t+5-&1VJdf;3Ty|^G@o^n2ALR8YWF^ah<8{p}o{N=DlAT|E3PEf}TG6K(UssQ!AV z+IsY54dHEp#RYlRn97Qk=-@|7d3N~s@#LNp*`5|XKd%4}Hm86i&Sr%}_}#ZVfDaX< z2E5UeMnZk9zj}oTfp~t^Z;3&pCP1We6nh;Jcvdzyg7KUt+=|H-{njmTWvUr_{SARt z-5r2Ld9Ky9bthe0pl)Z0798I1Iq+9yLQp1!Ew*LZNLLfXmz{@{F&zrv%dQt=m-xtq z5gIgU%xBP)xktKf9#2MrTF9@ktDxJeHp97G<#7hP$7sPypSUaDg1ALK$?lJ+Pg(oE zFK0S+-wUrvb7HU~aJ^typ@W7Zjy`mwu+-?%_g{x4S*eD|p;j1Tq)6ZsvJ2j|4_COK zHoxnL^8K)cx?y%9OI*(L7FqE;o;FYJz%PKk%&P;8ze7Qt&nGX|?9v#g+j_YJr$7~n z;gV;?grS0{3I%YxRk<>rx_=Yb{+RE2Waxw@6h%wVHAMdsb52gNF=r6nTBCCwphO~N z@Mh+Zcf>kV+%t1*f;wH5sYpRaMWZ%fU!^9?L*%BPQ5cylYReTsW*$=?Z1}J71ST`J z(VhuMzf_5o7)OxKR95uo%pF?px2Dg&#dMmVW!-BlemiohUTb7cpk%*@%x&3XE3So3 zl9a0~hwsyvnJc%8}Sip)Hp5#)Z@9p@v}@_$Y;&d z3EA=_6+P8$%@!hi;$zq9@L74{gP+p-g<;S4_`rx2Z4yP&#m#5!j1MC#JrN{qp^5qq z-kF(LK0=~g^5!J?M4s=tVsIhS+gU>3r(da6vq|Ea^*ipd(#^`<_W8f`nUi#P0<@|l zi_}Xyh$z2FCI?(>Ox?ls5sjh3GY6=LMcgqT@7`O*&_^m7j-R5#&l;1j`wp-AhYPX1 zMz4=pYg1=bQIIDhtw^5HJ|+8+`l1_pp2?!{mxpht&4_}4o4e(WQ6pT#uZVPh862vs$WG<6TVIe9t@IE(eAyZwx)`XtHzNB7NbYwl2LpGnr#d)Lx;bk-{>=U- zU^!(JY&%(Dbi^r}e)4#--M@eGSr@1(IPoYa@ zQZS%&Ft?SsqUMU1d!xXlMzaO?x2U($vF*_Tf7RQE&Wv{VDYr!4Ldd&&y@f8#Isr`l zBI7zEy?X+s8A_{#dbRuu##U6-IuJ|0-_nRGvr8XZkv0E>Axl_BxIV@GRhzU=3xmgs z7t2l$j_1Xg@2zmvU&sIE?o^5k>4UEDqfk19y_0(>Rkb#F)1Jmo!R~V~c%3_`fRKf( z+*Z!J-^LKc>qLWyK;4{(Tu9(M| zj(>DYad4l8iFxUy5`4{s&9@|ti6?Cf@Axp|D{AiaTuX4bw^{ugD+*7f+svF5Z^0+C|OQkI|aCZ*P0X=FFkmao_pq{_;VPBPE6e zck-Q?JoTm&@NadJ#cvMsWLl1BxE#ECyG@Ca{MwSE5L;#`EK?#83??D&H6xPdLyZ}w z)dyS%BGlp1Xd_f`rwKYu{1$57!lm_1hM{&?PeS*=Y9WcpqNJexcN>|#7>`_k5PJIpc`w||MFXxqmUsl>$$BbJVDG@rqV)ExE z%du4Kr;M29@Ym=ajtM|!XJ_~HhuWu~_a+4>`M}yv4=oor7?vOl7{bzzUp=yxSCXSd z15j+1Q7zXu;+Ckx8O+M6b|ZV-WXe!ZgBvfWP=}FyZMl>xwgTg!r!FHlm$1)Y%N`^5 z0&nZOi6ieTR8D7{pIJrPV3&$Cd0Q8o$3UwvPV{O8(K#;t#1v~RQ+-ME@`ehk*~LiL zA69D(Q;7DJ0uA=JqARQo1PatUjv}`RHYQu^FHSaR`PUdDniOGVKgJqtgx9*Yn8Xc_ z{}!%<<3F@pggPsviG6_GRzLHyLKJz>s$p2L07$be z&(~)r5{`K{^36{C`{EYM;7#mU?_1J43GnIU<8mea)Wk+-PvHH$NUV@!Yu#eaeZKlE zLt0k+%QQ1+AY<^415M5McZeO6D%fP8n>WI&8*M}BWKL_Og92AenwbUUJ5wH$U2#12 zi3|){``@`{bKcLuP^*cdg|r0byEJm3?+zmLilbT4QjjXti4y3bQHLsubE{3r^~(!` zI5dBTPhoDOYb>4E&tO`m9iO8wWa?KpI>&Gr4Z)RoqK*#1T`me(W379?05R`w@L_BG zm)%vcZtI!TD)J($`y%zl+E0t+Wnxl(V9fJqXk0p)g(Z#~+d9fd_+bAnZAfjUio6M3 z9zH(y<}On?01oy$sObo{-)*nF>0RnYz*-YtySuf}LNRfhn9YP!@ORI+obUEvb>Gnv zymotjN&!lr{EFl`9^R~vB`wqG^n|>o0D7bTEqIIw<1>q(VuD^UjDIlczW+6x?pgQI z{zrZ$R|VDi@*55&$E~;F&m=YXzjUs8IovMl09lGibV@s`OuNO5J11moe2c4Z9A9=j z_oTa+B!ntFIAEDv9BqR+g5C!$R^e#S==J=D*$VS_Pidd^_x%}Jl(Owb=w0FNCzOKA zu(V(HD?*x@$u|-dtpha3zBZ>j8lLj4oNgFwGuOUQKW6wgu-0swT!cGMpK1G9ui`efd3=bH2EG z5srbg|eJ)iXLY z;pmT{w`-`?hDl~7Bxag#M`amvO%5D~h5T+_`0oM&zmwGB+qVieS)uuB*Cxz;8XqqH z?p~&UF!eJ;ipju(^?V*Y{BSC;GUju&Tu-{UeKXr>4}UCiv>-O3GKHMS^kD6~@)hU! zaD5-y_`%aSlg+I4{p19`=pNEAnNd|&bKN$k`L8hk1n z6|fvsu3oB_dh3{0sr@~9`n^7%JhY`iGHQpv;Dk`&4K-g#POWc`TLH74wuQCnG^A>E zY#!_Q<8kwsE&`$^_eCG~j(iH0Hjg=B23Qnya>A9F1UO1;;_E4}`2lJC58;Ep6M!ya z*(7)aszaDPyw!Gyd0d4OsfAhTXWMxC%gnQiOs{5y`t8ZLx0Zz5j?<^bNK6~}2F$12 zjp{5E!y@cOW|!0r^iSY7D8!S)uZySZEo;wzURrcD`KGKawPPjKW%2F?j-~QCB={%2 z<#ahZUIGqp=%zr$j&L10Wqd*|+P;~|t-!SNee#W&`o9}BcO_g+qDQVJ1|+=Gu4u_S zkb~QYBuwM96*l7=1jgZ%&w5?AMg`H*?eyAE;)feeR593cCw2H(_yTRXqxPyp8(_`o zukwSVCavjLyd{4|k!4AC;)f_Z9*KtK{=3 zhRuH#@IwI<8EZ-3vsULfuupib_sC5>jPCaAuF6eGK$9ln%te;-y z`q|~jFps&h@#g~K^@!ZDpL1V@klE)B@aDN(_$Fa~Pp36z;rJfA2zMPa;4-Ywa3Mza z$7#&mMr|r$cQ2Lx!k;mnx4U&8&$uD3vXQ;8!CubzdN7-JO;dRy4UronM?9E83qaEd_unf{kx2>BlOqiHY(h^ z%m(a?`Wh3*g`9>#yxTyOvp=e+qFZ+k>;7L`li9Oni>I2!I;|sf0JlUTLD&tZCVhsY={r3@tA+hN4;zd*Pj<~bWba%b4G&(gP= z^}AbVj8cKzOQyAy+@?K!?Ms6UySts&9o+m`YZner(=rx%ny!-MI*o*dvQcdRMg}_{ zt1l9>e$qtgC%&=JqIddgN#b&3B|A5z6t>ayOHn?Pm@dW{>q+^8c9IWT=C8ml>~;(* zu92=2eA{h`sSmQqjcYLtvdKR`=X>~0cZ~oaMBBoUF@SbQ_>iGvTrfB5J)ZZr5sgMz zbl(T7!`G!Gsv3YG?H&o4_*C6cto$aqm)O{4(PZxr@lP`x!pfgwfAgJ& zv7*k#a&_L1ut-jMZ#_;b-%mNsqZ4IG(K0BHW~)@z>NIA=>}vAtg5My-RpMkP{rbbb zo@-44YNm+P2fVG32PTZ)@M&oTh*aOZR5?pCXd`$}TJrOtcs8MX0xAG&ySK*YcDn-Q zZt3_>1ii%CQT5_8{0?fqZ8veE=n;RO7OS@q68pBZ!n0SXQ)uG?S@xaOU3BJ-*wS|5 zSDu(Xd0bYkkW0l259mGw@spX^FuO9Db`HK2$ivXmS?AMQTn-}^Q=z7u3j%vQO= z8r}?ftai&Fv{%NYB(3iW$V`xQP~9$IP8%bocS%{^dA=Rn!i5BHl9dvf?htu2s%dKU zP+}6{MQgBus$1gt@r=%X#1DL)sec>tbKGfXc05 zJek~E6dfV^*fGZz3M&t}ephq9hqbIRSDSULwi&q=jn!GS!|OEkt})lt`b-F;Q+{Yu zs~!z*gd#_D9EBqM{r@`QN$U+rbx}E z@}vrk2G{&yW^GtGJ(S487ESTG>UaFIp3}uz`|iU#w1B(F5|!p$&dqR>CM?}jnb2ii z@1Q~1$oNO=yrqkkF1|`t|M!o62+x$Q<0qYJ`N}^uysb-|MqOs^8hzhJ4(GbB`HWxW>^VkX=;Ec^{sgBJX z0jZ!|gIKTmO##ek2ZH!M=b^QSGXCGl%xX795vUA0iDu|>PMN1-W5v?#KaUg&c4ivo zqWa#@;6KgA8SZ2xE0SZ9Q2Kg8h{y{iHqO@H5Y0w6^S3t&<5cGNW>D}^gzRl6SY!uzs^^4!@B;et-l zgyb9h@ZF4{+vZL(6a)A8*=EU=)cU<~Vy=dHAo~nBMr%=k=jn(Dlc0Mh)p~y&R0w*P zY)R9kCAB9iSDqHJ@MA*M;=qD{CT%^Q zF-UmCzQS*9S>rfC*RR;ffB)38HX}!^eO*>+dhQ<+YHXiqzxZ?8mB6VUPZ2nD!^n?c z@PV7DJ3DH6poSxS;e}DwbZ0~U;|=GZb_F{Dx4fx}gQ~1p>o(lc)0>RT6$>HG`)?cA zLEc&y_X;=qB6&Y9UEje4U+GfY`z_>5=z`;t(KvMjVu?B25?i*A@+c9_Cs1G;Mh|^; zm351x7F6=vn=wJqER^(tq`flikpfy|x4xHL6N`m)qZUPWL0)W2UEuoY#BuzE8ay}l<cM|q&BN@eZbaik9U6Tj z)htHc3>G1O`KA5s9xnG(;}fbho}{>ZZyXXNf+g&N$g9u^U>0=h^(E^$S0(TzDY5LB zaPzW$&?J&Y&1t#eaAv+zw+m&x7CBg=H)S_Rb!a&Ep5V!MHmEIx(wpo10Jo z5IyjtWG@^+UWsmeI|%Iyf`0oT_8?6QF?-+Y*2By#Kv+Ab@1Ew!NF$#6d+=TqBnSI5 z5`RY~7uuLP-zM;KdXV_J`Q2$F1;l6gj_bB!7{5obSlp#Fp!~?N6MHzJ>$}XDS5O5P z=IVX22{CXr33*I{cFGN}%saPo@qY1QcQj1`Wqp0?fp;&`0J#4pS2DFfo6|fly?_v7 zf_&R2n@8<02>o2F+N8EtY#H|9t3?2Z&TxzIW)`{hhl$X3eluZzdW}UEtyl#pz$@3K z7mYC&d^wT^&r~VcyvdUXp~azR>^bXX*G0&7liFrIH$cR?Oyrpmgr z>;FUE6*6L)<(b94j}t1G3@{?pA3S+%d?VEtGI4jZa;H~0Z}0OY&c7D4nj_xNIv?|f zVq<_Y*K7Md#YW0iAcsOX2KCS3rH0^xIn5`)qp}M%#t)?~NsVCZD>9{juzr>Kl|Ypf&rsQChczq0or_<<7k#>o z2J!rr@Cy$PDcv#G^xZN+Y{P0f+U49@{K|k6mH*4dqhKO1>H^u4h!*S)CT7)h5h{~C z*2{mtuno8oXGV$a=R(SgM)#8*SKs=Zb?$$A;MRfp_?Bi+90r56~vWlDd@7ZheJQp50OkmPe#%#T6kPO=Xh~TCZ{0PbcBYe2#&MJBB#FGxah> zF@DkV`r0+bikn;W3gaiKe+2Yl3cECM1@z|J0X|O>(j0wmUt^Da@Aw@wt{6goA!(^I9jZ7a49;=m$i8R(?-| z+NFlllLj*9O!Ya(#EqT{%nN}vi9w*OZTd+R@on1`$7rq`Ar_OlViKWbYuK18F9q&@ zih>h1wPaG>h5f9>$H%AtK!htbE|Ga9^^J#u5)jKR1eJ#9BB%gG*RkJcmf*@E#)aVl zxnbFTR6CrXNj8I!M1sRnI!@|Nn2cm9Kv1}|!nJnK7l7a%;uL$B!o>sA&YS#w8P($f z*Aj`gq1NNbSk9!$lM6Q7-2Np0)UbTOC!vCd;B)#X5(yA^ivsnms#z%WW4NkxU^1!5 z$U7rmF)?4#19oTA4zCM(+j&sFmwd@U6bcYW)T~=eBcwi2Fm#7vc&#;b41q0_B8-Q` z^w6N8Nyt?h8U-Q(tI?!_c*ciDSBjp$6@=u~k=HsqZM1uyZES$A#y1enS0>-~%OD{S zs|dXDxzjJr@mS77gb>G{pG2PpN1U-WuU@iIor;}b^^FxJUs;l|-J{y{!tVF;UZ!QE ziHsw@=o!?mVit`{KE_bFU=6`}V2&Z3f@5)U-$7@@|W~f%(1ljZgIK>=e{NSQ?=DynS5Vd=2X5o4k%Hae+;5mhAW zf##U)s+32fM6q>pxln4Zg+e$40HBzs84`Dv=22<{qaOZ))f-$csrp;NSX?pxNvQ#l z0JT}9)JHo%+uZaJA7c#C3>po|1rC3z3{hHRdFp0N;#wqhf2N7nV*I>jS!@n>i43Lk zT{qj)_e;*~CM9>$w5a`6K|G+Wfq(qi)GZ+l*eJ~`Ke6iUSR=8elJIqyOp&uSJ)wrX z{45kmSWKDnKz~TOjldmgOe(qRfTOgRu&s+1crEEt3+GRSEqEs+Uy!}=k6#^=$Wdsr zG<3w#_!B#=CiBRT;(klzCJy~j&Jn7xn;&Y@%As#UiB|#)(=E|aYEI3}uDlLxmIjO= zIx*{jEo1Tx{vnNK{gllO=M0ss?dO?@Z!|G*dkZx?oV9T(cvO~LoDQ4D zR)d}GBCNlDaAcUXVB_49G{cR3K%i68pTw1J>ia5~2b&E_x+TI3DMM)9>n(^*hCfuB zyL7eUPWXtFcwY_V<8DseJ+c(i1Mh_yi5Y}t5Cm(A+S3?(bvk??%tk|N^nR7YMxAbk##4`Iv9SX_OT zax9m4kRHuoD+){OU%X$T?<~iULWFo`6aj7*qUjHE&p(p6ba z)!EP(lCvb0!-`Gb--u#yFV0%-Wz4ZPHpsV8v|{X1d`&4DNj24OJCTElJAs4!4vcUU znw~SX_8P4Yy*?@RFI-cz=}-diZRO(T+FN>NIoe7>!L7$iZ4q?Dg~GrNN>S`|iLCvp zlW*vyfPc|yMubf)jRua!7<6bTG3{fktOgk_g3+)S*IMqm-gS)H2 z(FSbEm7#VeCQ8a-=Q02+fZ#WPuv?jafkfI|+-oyJSH!)}KlAi+{%t!6;Avpuk_BPl z5*K7eMW~LD_Y=F>x1wiKEO7jlHM59C3>8H**j8oAEMYs?K@;mxK>|bw34viQAj!0~ zSHgC20&5JdP+AnwjPTRkMD}+x=|eb|>D6Q4vy3U+OjvB&=eWi#4PUvq{%-*XkY_ zWP(hU0}j)W`k!jJg%qGvnjM82w#c>mv4JT|xR7{^jn4%n;}`KaT%2T8v^Q+kK5;s8 zGW9Jb?TmC--h>NiAt$!?= z*8YJ-%FR4;6ztlTX6G5 zw75#P6D(4X@aLBi)-~|8=O*2t>N_|Nzh##1Wz#YJJ~I4wEKz!R$JH*tHkdkTu#&qG zcE+nwy8A&vUP9pGhw#)b26t5orbDO@b4iMM&0EsM*Np5H$W#72@b?~04@m@CAF)Uc z&9^U)$@H2bs0BM2#*pe zrq_pjRsg>c+SAlk?3unzj+Ls=F2Td| zAepnMJ8#9XocqogEgC?EP~Y=$mm~Q>{O1 z!uL(uVW;IKt(O0S483t22L*Uw5y*je#bSD|^za-;<|Jqj`z3lLwLtZ{BVtO9I@RIC z@;S0hTI(jqjgS2o>?i0o!H>i`oHC8L3bgYVFG2LUI{L6o_xP8u=RGLnjN%t)4{M0n zqEm=fO+cAFqWW*V%YYmyL7poh-4OalMSme}sPnLxpe}d|WFGe0t9}SujE5&Up*KW_ zQ^8m{O1QN;;G=Hwq!D=J*R^(rk%4%1Lr3dxzv*Zb%L%bNqnoX+tDLjn#~cut`NMtt z##4=N=bxXWe~xSYZde|=Qdo2|U+1VGaI$|jQp{a3`=)mTV)9pOcW@hSozNsCb^t-KR23IP{T$_GE?f(41eZo^e zafKwLx54OcW|a$QJ!;^fX=HC^+M54~-Kw`gr&QwU@JL#-z~yh(V@z;VaPUxtcIBAi z`X$lT^Icch9QH5e+sSUvByzeRK`k_pCGd9i5wfbL@VWO{+i}e{$wkYv&J^w0}Gp>}x~c9oa1Xwv-~uq!=EvW|{zD-!U>Uu|HT4*~JOPoH=lqc^6wE}|Et z0GVw9)B9h#F)Mf_Ujl%Lr~{Nu7fE@K#hm#rpA+&+qDP1cWvXW2wc;KlBRKG=mI>ND zPJZ4QK)|h}T>XfV_oJrIz_$-xB2So5+N+CQ-A!|b7>b|3-!5H6QWmR6paB7tqF<>w38j+4jIcWg^(L26^&kM}?RBsKjPb3K_!-Voy-w*1FOwr2pKSJ(0 zC!6}vG8Z?d_}Avr5gpm6eP?W=sicxB0&k-}0uy0{NLu#5DiTt3`0G z0%p5qXrga|moi6hMb4Y6+&#dff6j}#@qF8?>?AlBsWFdwlE&C2pAaof9`#vRomH8V zm8B(72c{VO7OJ<&qRl26VYtmh1Ifm@5YQr%QO)=4dRTh{v2{L23xaL2Nc>o1sc9)} zA;xQHi01`Quk2lrGhbI9ia5UCv(zDO9<(Z-S1)I*_6ylz&Q339c(b17%+xo4?>Wn6 z($TUrAo#lQQ^k=Hr{;H=l!B!4thaqSymZ!aHIW!M)Qo!@NT^>{muF@R)xC=4keDKj z3~2%FPxLBC)21I!8T@@u7+!GvZFE~~>NDNT%f9$sD+L+Sg-jZi3e88M&APzj+Ai@B zXJ&N1Th2JYlI|#TCQG;T8%r%%$ZZld7iB_4aBKy z7xdrR=^l}HqA zd+mI)Mi456z^)UFpHJ;d}l z_d&aZxxw4fHG*37-_WQ^_snjyoFT2h`Sq7k5I3_dPDhO%r%JRNO?HPBWE1igFbuy- z0;jy^qK_fHhEw$dsE~c_P_HZ)`NEg{P9a+xO{Clz1}jZr;ywdN?M{S2T&?B`TTV`n zqrJT$Av8eoI=T1G!So^1dp2v`^5m6^s;5Yub~tZ{yE{ZtpOZ6bmf>={l4Q9+Z_*M? zlZKY~N+EkDAJmH{Q|y~GwlU*FM(EtxFw_k11_!vC)dm6{%UA9 z5YEby?`;fLl?@v)0<=d_VVLS~_%UxqQ(t;Qu5xsI`ySwNm%s4~XbSOUAVQXY1g6Ab zDjhXbC>LC0eoVh;QyJN2@Qph*oSE8M4d~u(m%OO%D5jt6eCu{evxdZrBFlrLD5Ke^ zR$dgQ^kx`1)WUBqtOz1J3kEZ0=a@B+Sk zFZBTPzY{>HjN;qoBk#UDN8JcKS0RB^j602YS6jPG8On!#&Klowy-C zKb*SA6l$|z(mT{8yslnwzRk_=p^++r-_iC|_yXLtWXQX&2gVgw*H|aC^gZ02bxpJ< z2uER6my>xJKR{k*0CtBnC7#`&NBC_FN4aH&RPL*9^2mHST6;QIj>|2lV;3cNUTi*I zQ?ZN}^o??DCoQjV$==~GAKYt?rr42{Wtul6A9?zjOe-Tl5LcCc|c<9aZ6smsY&k{MaGQs^7oDT zRFRJ2-VNujT~8lBNHMm^pW;VPxvcvQk$Wn1TczA*Z++aZ$Aq0CAHVQ)^O_)^e3bO3 z5v6b5e%iA~F@+nw*wq-2x}aB$srZ#Jm==E5*!ESkR1Vx38_0jvwDGtnuxP&c@$AD+ zZZ~@8zRfs3xDUnPpz48#e>ZliD5@#1N`8H)I)lqs$n0}7$-!#(M2aNQmdNQO7t!Wl zUkOx!-i8wrD~=Sn!JouI7DI zO70F7iGL_iFPoJ5<@G1I_lY2QpNfOYf?d6Y?j)#)@UNsiWf}aRY9H)B(6z|0c2l~3 z@jDKj@z5jy22}hX2{o7>rK>FWbCMe3P%G7-L9Q6MI;4+a2 diff --git a/javascripts/main.js b/javascripts/main.js deleted file mode 100644 index d8135d37..00000000 --- a/javascripts/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log('This would be the main JS file.'); diff --git a/params.json b/params.json deleted file mode 100644 index bf9c8003..00000000 --- a/params.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Fmdb","body":"# FMDB\r\nThis is an Objective-C wrapper around SQLite: http://sqlite.org/\r\n\r\n\r\n## The FMDB Mailing List:\r\nhttp://groups.google.com/group/fmdb\r\n\r\n## Read the SQLite FAQ:\r\nhttp://www.sqlite.org/faq.html\r\n\r\nSince FMDB is built on top of SQLite, you're going to want to read this page top to bottom at least once. And while you're there, make sure to bookmark the SQLite Documentation page: http://www.sqlite.org/docs.html\r\n\r\n## Automatic Reference Counting (ARC) or Manual Memory Management?\r\nYou can use either style in your Cocoa project. FMDB Will figure out which you are using at compile time and do the right thing.\r\n\r\n## Usage\r\nThere are three main classes in FMDB:\r\n\r\n1. `FMDatabase` - Represents a single SQLite database. Used for executing SQL statements.\r\n2. `FMResultSet` - Represents the results of executing a query on an `FMDatabase`.\r\n3. `FMDatabaseQueue` - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the \"Thread Safety\" section below.\r\n\r\n### Database Creation\r\nAn `FMDatabase` is created with a path to a SQLite database file. This path can be one of these three:\r\n\r\n1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.\r\n2. An empty string (`@\"\"`). An empty database is created at a temporary location. This database is deleted with the `FMDatabase` connection is closed.\r\n3. `NULL`. An in-memory database is created. This database will be destroyed with the `FMDatabase` connection is closed.\r\n\r\n(For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)\r\n\r\n\tFMDatabase *db = [FMDatabase databaseWithPath:@\"/tmp/tmp.db\"];\r\n\t\r\n### Opening\r\n\r\nBefore you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database.\r\n\r\n\tif (![db open]) {\r\n\t\t[db release];\r\n\t\treturn;\r\n\t}\r\n\t\r\n### Executing Updates\r\n\r\nAny sort of SQL statement which is not a `SELECT` statement qualifies as an update. This includes `CREATE`, `PRAGMA`, `UPDATE`, `INSERT`, `ALTER`, `COMMIT`, `BEGIN`, `DETACH`, `DELETE`, `DROP`, `END`, `EXPLAIN`, `VACUUM`, and `REPLACE` statements (plus many more). Basically, if your SQL statement does not begin with `SELECT`, it is an update statement.\r\n\r\nExecuting updates returns a single value, a `BOOL`. A return value of `YES` means the update was successfully executed, and a return value of `NO` means that some error was encountered. If you use the `-[FMDatabase executeUpdate:error:withArgumentsInArray:orVAList:]` method to execute an update, you may supply an `NSError **` that will be filled in if execution fails. Otherwise you may invoke the `-lastErrorMessage` and `-lastErrorCode` methods to retrieve more information.\r\n\r\n### Executing Queries\r\n\r\nA `SELECT` statement is a query and is executed via one of the `-executeQuery...` methods.\r\n\r\nExecuting queries returns an `FMResultSet` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `-lastErrorMessage` and `-lastErrorCode` methods to determine why a query failed.\r\n\r\nIn order to iterate through the results of your query, you use a `while()` loop. You also need to \"step\" from one record to the other. With FMDB, the easiest way to do that is like this:\r\n\r\n\tFMResultSet *s = [db executeQuery:@\"SELECT * FROM myTable\"];\r\n\twhile ([s next]) {\r\n\t\t//retrieve values for each record\r\n\t}\r\n\t\r\nYou must always invoke `-[FMResultSet next]` before attempting to access the values returned in a query, even if you're only expecting one:\r\n\r\n\tFMResultSet *s = [db executeQuery:@\"SELECT COUNT(*) FROM myTable\"];\r\n\tif ([s next]) {\r\n\t\tint totalCount = [s intForColumnIndex:0];\r\n\t}\r\n\t\r\n`FMResultSet` has many methods to retrieve data in an appropriate format:\r\n\r\n- `intForColumn:`\r\n- `longForColumn:`\r\n- `longLongIntForColumn:`\r\n- `boolForColumn:`\r\n- `doubleForColumn:`\r\n- `stringForColumn:`\r\n- `dateForColumn:`\r\n- `dataForColumn:`\r\n- `dataNoCopyForColumn:`\r\n- `UTF8StringForColumnIndex:`\r\n- `objectForColumn:`\r\n\r\nEach of these methods also has a `{type}ForColumnIndex:` variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column's name.\r\n\r\nTypically, there's no need to `-close` an `FMResultSet` yourself, since that happens when either the result set is deallocated, or the parent database is closed.\r\n\r\n### Closing\r\n\r\nWhen you have finished executing queries and updates on the database, you should `-close` the `FMDatabase` connection so that SQLite will relinquish any resources it has acquired during the course of its operation.\r\n\r\n\t[db close];\r\n\t\r\n### Transactions\r\n\r\n`FMDatabase` can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement.\r\n\r\n### Data Sanitization\r\n\r\nWhen providing a SQL statement to FMDB, you should not attempt to \"sanitize\" any values before insertion. Instead, you should use the standard SQLite binding syntax:\r\n\r\n\tINSERT INTO myTable VALUES (?, ?, ?)\r\n\t\r\nThe `?` character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an `NSArray`, `NSDictionary`, or a `va_list`), which are properly escaped for you.\r\n\r\nAlternatively, you may use named parameters syntax:\r\n\r\n INSERT INTO myTable VALUES (:id, :name, :value)\r\n \r\nThe parameters *must* start with a colon. SQLite itself supports other characters, but internally the Dictionary keys are prefixed with a colon, do **not** include the colon in your dictionary keys.\r\n\r\n NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:@\"My Name\", @\"name\", nil];\r\n [db executeUpdate:@\"INSERT INTO myTable (name) VALUES (:name)\" withParameterDictionary:argsDict];\r\n\r\nThus, you SHOULD NOT do this (or anything like this):\r\n\r\n\t[db executeUpdate:[NSString stringWithFormat:@\"INSERT INTO myTable VALUES (%@)\", @\"this has \\\" lots of ' bizarre \\\" quotes '\"]];\r\n\t\r\nInstead, you SHOULD do:\r\n\r\n\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @\"this has \\\" lots of ' bizarre \\\" quotes '\"];\r\n\t\r\nAll arguments provided to the `-executeUpdate:` method (or any of the variants that accept a `va_list` as a parameter) must be objects. The following will not work (and will result in a crash):\r\n\r\n\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", 42];\r\n\t\r\nThe proper way to insert a number is to box it in an `NSNumber` object:\r\n\r\n\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:42]];\r\n\t\r\nAlternatively, you can use the `-execute*WithFormat:` variant to use `NSString`-style substitution:\r\n\r\n\t[db executeUpdateWithFormat:@\"INSERT INTO myTable VALUES (%d)\", 42];\r\n\t\r\nInternally, the `-execute*WithFormat:` methods are properly boxing things for you. The following percent modifiers are recognized: `%@`, `%c`, `%s`, `%d`, `%D`, `%i`, `%u`, `%U`, `%hi`, `%hu`, `%qi`, `%qu`, `%f`, `%g`, `%ld`, `%lu`, `%lld`, and `%llu`. Using a modifier other than those will have unpredictable results. If, for some reason, you need the `%` character to appear in your SQL statement, you should use `%%`.\r\n\r\n\r\n

    Using FMDatabaseQueue and Thread Safety.

    \r\n\r\nUsing a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. *This would suck*.\r\n\r\n**So don't instantiate a single FMDatabase object and use it across multiple threads.**\r\n\r\nInstead, use FMDatabaseQueue. It's your friend and it's here to help. Here's how to use it:\r\n\r\nFirst, make your queue.\r\n\r\n\tFMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];\r\n\r\nThen use it like so:\r\n\r\n [queue inDatabase:^(FMDatabase *db) {\r\n\t\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:1]];\r\n\t\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:2]];\r\n\t\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:3]];\r\n\t\t\r\n\t\tFMResultSet *rs = [db executeQuery:@\"select * from foo\"];\r\n while ([rs next]) {\r\n …\r\n }\r\n }];\r\n\r\nAn easy way to wrap things up in a transaction can be done like this:\r\n\r\n [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {\r\n [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:1]];\r\n\t\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:2]];\r\n\t\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:3]];\r\n\t\t\r\n\t\tif (whoopsSomethingWrongHappened) {\r\n\t\t *rollback = YES;\r\n\t\t return;\r\n\t\t}\r\n\t\t// etc…\r\n\t\t[db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:4]];\r\n }];\r\n\r\n\r\nFMDatabaseQueue will make a serialized GCD queue in the background and execute the blocks you pass to the GCD queue. This means if you call your FMDatabaseQueue's methods from multiple threads at the same time GDC will execute them in the order they are received. This means queries and updates won't step on each other's toes, and every one is happy.\r\n\r\n## Making custom sqlite functions, based on blocks.\r\n\r\nYou can do this! For an example, look for \"makeFunctionNamed:\" in main.m\r\n\r\n## History\r\n\r\nThe history and changes are availbe on its [GitHub page](https://github.com/ccgus/fmdb) and are summarized in the \"CHANGES_AND_TODO_LIST.txt\" file.\r\n\r\n## Contributors\r\n\r\nThe contributors to FMDB are contained in the \"Contributors.txt\" file.\r\n\r\n## License\r\n\r\nThe license for FMDB is contained in the \"License.txt\" file.","tagline":"A Cocoa / Objective-C wrapper around SQLite","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css deleted file mode 100644 index e65cedff..00000000 --- a/stylesheets/pygment_trac.css +++ /dev/null @@ -1,70 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f0f3f3; } -.highlight .c { color: #0099FF; font-style: italic } /* Comment */ -.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ -.highlight .k { color: #006699; font-weight: bold } /* Keyword */ -.highlight .o { color: #555555 } /* Operator */ -.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #009999 } /* Comment.Preproc */ -.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ -.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ -.highlight .go { color: #AAAAAA } /* Generic.Output */ -.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #99CC66 } /* Generic.Traceback */ -.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #006699 } /* Keyword.Pseudo */ -.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #FF6600 } /* Literal.Number */ -.highlight .s { color: #CC3300 } /* Literal.String */ -.highlight .na { color: #330099 } /* Name.Attribute */ -.highlight .nb { color: #336666 } /* Name.Builtin */ -.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ -.highlight .no { color: #336600 } /* Name.Constant */ -.highlight .nd { color: #9999FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #CC00FF } /* Name.Function */ -.highlight .nl { color: #9999FF } /* Name.Label */ -.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #003333 } /* Name.Variable */ -.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ -.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ -.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ -.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ -.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ -.highlight .sc { color: #CC3300 } /* Literal.String.Char */ -.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ -.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ -.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ -.highlight .sx { color: #CC3300 } /* Literal.String.Other */ -.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ -.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ -.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ -.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #003333 } /* Name.Variable.Class */ -.highlight .vg { color: #003333 } /* Name.Variable.Global */ -.highlight .vi { color: #003333 } /* Name.Variable.Instance */ -.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ - -.type-csharp .highlight .k { color: #0000FF } -.type-csharp .highlight .kt { color: #0000FF } -.type-csharp .highlight .nf { color: #000000; font-weight: normal } -.type-csharp .highlight .nc { color: #2B91AF } -.type-csharp .highlight .nn { color: #000000 } -.type-csharp .highlight .s { color: #A31515 } -.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css deleted file mode 100644 index bfc79143..00000000 --- a/stylesheets/stylesheet.css +++ /dev/null @@ -1,429 +0,0 @@ -/******************************************************************************* -Slate Theme for Github Pages -by Jason Costello, @jsncostello -*******************************************************************************/ - -@import url(pygment_trac.css); - -/******************************************************************************* -MeyerWeb Reset -*******************************************************************************/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -ol, ul { - list-style: none; -} - -blockquote, q { -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -a:focus { - outline: none; -} - -/******************************************************************************* -Theme Styles -*******************************************************************************/ - -body { - box-sizing: border-box; - color:#373737; - background: #212121; - font-size: 16px; - font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; - line-height: 1.5; - -webkit-font-smoothing: antialiased; -} - -h1, h2, h3, h4, h5, h6 { - margin: 10px 0; - font-weight: 700; - color:#222222; - font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; - letter-spacing: -1px; -} - -h1 { - font-size: 36px; - font-weight: 700; -} - -h2 { - padding-bottom: 10px; - font-size: 32px; - background: url('../images/bg_hr.png') repeat-x bottom; -} - -h3 { - font-size: 24px; -} - -h4 { - font-size: 21px; -} - -h5 { - font-size: 18px; -} - -h6 { - font-size: 16px; -} - -p { - margin: 10px 0 15px 0; -} - -footer p { - color: #f2f2f2; -} - -a { - text-decoration: none; - color: #007edf; - text-shadow: none; - - transition: color 0.5s ease; - transition: text-shadow 0.5s ease; - -moz-transition: color 0.5s ease; - -moz-transition: text-shadow 0.5s ease; - -o-transition: color 0.5s ease; - -o-transition: text-shadow 0.5s ease; - -ms-transition: color 0.5s ease; - -ms-transition: text-shadow 0.5s ease; -} - -#main_content a:hover { - color: #0069ba; - text-shadow: #0090ff 0px 0px 2px; -} - -footer a:hover { - color: #43adff; - text-shadow: #0090ff 0px 0px 2px; -} - -em { - font-style: italic; -} - -strong { - font-weight: bold; -} - -img { - position: relative; - margin: 0 auto; - max-width: 739px; - padding: 5px; - margin: 10px 0 10px 0; - border: 1px solid #ebebeb; - - box-shadow: 0 0 5px #ebebeb; - -webkit-box-shadow: 0 0 5px #ebebeb; - -moz-box-shadow: 0 0 5px #ebebeb; - -o-box-shadow: 0 0 5px #ebebeb; - -ms-box-shadow: 0 0 5px #ebebeb; -} - -pre, code { - width: 100%; - color: #222; - background-color: #fff; - - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - font-size: 14px; - - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - - - -} - -pre { - width: 100%; - padding: 10px; - box-shadow: 0 0 10px rgba(0,0,0,.1); - overflow: auto; -} - -code { - padding: 3px; - margin: 0 3px; - box-shadow: 0 0 10px rgba(0,0,0,.1); -} - -pre code { - display: block; - box-shadow: none; -} - -blockquote { - color: #666; - margin-bottom: 20px; - padding: 0 0 0 20px; - border-left: 3px solid #bbb; -} - -ul, ol, dl { - margin-bottom: 15px -} - -ul li { - list-style: inside; - padding-left: 20px; -} - -ol li { - list-style: decimal inside; - padding-left: 20px; -} - -dl dt { - font-weight: bold; -} - -dl dd { - padding-left: 20px; - font-style: italic; -} - -dl p { - padding-left: 20px; - font-style: italic; -} - -hr { - height: 1px; - margin-bottom: 5px; - border: none; - background: url('../images/bg_hr.png') repeat-x center; -} - -table { - border: 1px solid #373737; - margin-bottom: 20px; - text-align: left; - } - -th { - font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; - padding: 10px; - background: #373737; - color: #fff; - } - -td { - padding: 10px; - border: 1px solid #373737; - } - -form { - background: #f2f2f2; - padding: 20px; -} - -img { - width: 100%; - max-width: 100%; -} - -/******************************************************************************* -Full-Width Styles -*******************************************************************************/ - -.outer { - width: 100%; -} - -.inner { - position: relative; - max-width: 640px; - padding: 20px 10px; - margin: 0 auto; -} - -#forkme_banner { - display: block; - position: absolute; - top:0; - right: 10px; - z-index: 10; - padding: 10px 50px 10px 10px; - color: #fff; - background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; - font-weight: 700; - box-shadow: 0 0 10px rgba(0,0,0,.5); - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; -} - -#header_wrap { - background: #212121; - background: -moz-linear-gradient(top, #373737, #212121); - background: -webkit-linear-gradient(top, #373737, #212121); - background: -ms-linear-gradient(top, #373737, #212121); - background: -o-linear-gradient(top, #373737, #212121); - background: linear-gradient(top, #373737, #212121); -} - -#header_wrap .inner { - padding: 50px 10px 30px 10px; -} - -#project_title { - margin: 0; - color: #fff; - font-size: 42px; - font-weight: 700; - text-shadow: #111 0px 0px 10px; -} - -#project_tagline { - color: #fff; - font-size: 24px; - font-weight: 300; - background: none; - text-shadow: #111 0px 0px 10px; -} - -#downloads { - position: absolute; - width: 210px; - z-index: 10; - bottom: -40px; - right: 0; - height: 70px; - background: url('../images/icon_download.png') no-repeat 0% 90%; -} - -.zip_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom left; -} - -.tar_download_link { - display: block; - float: right; - width: 90px; - height:70px; - text-indent: -5000px; - overflow: hidden; - background: url(../images/sprite_download.png) no-repeat bottom right; - margin-left: 10px; -} - -.zip_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top left; -} - -.tar_download_link:hover { - background: url(../images/sprite_download.png) no-repeat top right; -} - -#main_content_wrap { - background: #f2f2f2; - border-top: 1px solid #111; - border-bottom: 1px solid #111; -} - -#main_content { - padding-top: 40px; -} - -#footer_wrap { - background: #212121; -} - - - -/******************************************************************************* -Small Device Styles -*******************************************************************************/ - -@media screen and (max-width: 480px) { - body { - font-size:14px; - } - - #downloads { - display: none; - } - - .inner { - min-width: 320px; - max-width: 480px; - } - - #project_title { - font-size: 32px; - } - - h1 { - font-size: 28px; - } - - h2 { - font-size: 24px; - } - - h3 { - font-size: 21px; - } - - h4 { - font-size: 18px; - } - - h5 { - font-size: 14px; - } - - h6 { - font-size: 12px; - } - - code, pre { - min-width: 320px; - max-width: 480px; - font-size: 11px; - } - -} From e302faa1af2793568becd399119bdbef4e1df2cf Mon Sep 17 00:00:00 2001 From: Robert Ryan Date: Sat, 9 May 2020 10:30:31 -0700 Subject: [PATCH 2/2] Replace duplicate/outdated index.html with redirect --- index.html | 304 ++--------------------------------------------------- 1 file changed, 6 insertions(+), 298 deletions(-) diff --git a/index.html b/index.html index 5d3be712..2841d5aa 100644 --- a/index.html +++ b/index.html @@ -1,305 +1,13 @@ - - - - - - - - Fmdb + + + Page Redirection - - - -
    -
    - Fork Me on GitHub - -

    Fmdb

    -

    A Cocoa / Objective-C wrapper around SQLite

    - -
    - Download this project as a .zip file - Download this project as a tar.gz file -
    -
    -
    - - -
    -
    -

    FMDB

    - -

    This is an Objective-C wrapper around SQLite: http://sqlite.org/

    - -

    Also refer to the FMDB Class Reference documentation.

    - -

    The FMDB Mailing List:

    - -

    http://groups.google.com/group/fmdb

    - -

    Read the SQLite FAQ:

    - -

    http://www.sqlite.org/faq.html

    - -

    Since FMDB is built on top of SQLite, you're going to want to read this page top to bottom at least once. And while you're there, make sure to bookmark the SQLite Documentation page: http://www.sqlite.org/docs.html

    - -

    Automatic Reference Counting (ARC) or Manual Memory Management?

    - -

    You can use either style in your Cocoa project. FMDB Will figure out which you are using at compile time and do the right thing.

    - -

    Usage

    - -

    There are three main classes in FMDB:

    - -
      -
    1. -FMDatabase - Represents a single SQLite database. Used for executing SQL statements.
    2. -
    3. -FMResultSet - Represents the results of executing a query on an FMDatabase.
    4. -
    5. -FMDatabaseQueue - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below.
    6. -

    Database Creation

    - -

    An FMDatabase is created with a path to a SQLite database file. This path can be one of these three:

    - -
      -
    1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.
    2. -
    3. An empty string (@""). An empty database is created at a temporary location. This database is deleted with the FMDatabase connection is closed.
    4. -
    5. -NULL. An in-memory database is created. This database will be destroyed with the FMDatabase connection is closed.
    6. -

    (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)

    - -
    FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
    -
    - -

    Opening

    - -

    Before you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database.

    - -
    if (![db open]) {
    -    [db release];
    -    return;
    -}
    -
    - -

    Executing Updates

    - -

    Any sort of SQL statement which is not a SELECT statement qualifies as an update. This includes CREATE, PRAGMA, UPDATE, INSERT, ALTER, COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE statements (plus many more). Basically, if your SQL statement does not begin with SELECT, it is an update statement.

    - -

    Executing updates returns a single value, a BOOL. A return value of YES means the update was successfully executed, and a return value of NO means that some error was encountered. If you use the -[FMDatabase executeUpdate:error:withArgumentsInArray:orVAList:] method to execute an update, you may supply an NSError ** that will be filled in if execution fails. Otherwise you may invoke the -lastErrorMessage and -lastErrorCode methods to retrieve more information.

    - -

    Executing Queries

    - -

    A SELECT statement is a query and is executed via one of the -executeQuery... methods.

    - -

    Executing queries returns an FMResultSet object if successful, and nil upon failure. Like executing updates, there is a variant that accepts an NSError ** parameter. Otherwise you should use the -lastErrorMessage and -lastErrorCode methods to determine why a query failed.

    - -

    In order to iterate through the results of your query, you use a while() loop. You also need to "step" from one record to the other. With FMDB, the easiest way to do that is like this:

    - -
    FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];
    -while ([s next]) {
    -    //retrieve values for each record
    -}
    -
    - -

    You must always invoke -[FMResultSet next] before attempting to access the values returned in a query, even if you're only expecting one:

    - -
    FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
    -if ([s next]) {
    -    int totalCount = [s intForColumnIndex:0];
    -}
    -
    - -

    FMResultSet has many methods to retrieve data in an appropriate format:

    - -
      -
    • intForColumn:
    • -
    • longForColumn:
    • -
    • longLongIntForColumn:
    • -
    • boolForColumn:
    • -
    • doubleForColumn:
    • -
    • stringForColumn:
    • -
    • dateForColumn:
    • -
    • dataForColumn:
    • -
    • dataNoCopyForColumn:
    • -
    • UTF8StringForColumnIndex:
    • -
    • objectForColumn:
    • -

    Each of these methods also has a {type}ForColumnIndex: variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column's name.

    - -

    Typically, there's no need to -close an FMResultSet yourself, since that happens when either the result set is deallocated, or the parent database is closed.

    - -

    Closing

    - -

    When you have finished executing queries and updates on the database, you should -close the FMDatabase connection so that SQLite will relinquish any resources it has acquired during the course of its operation.

    - -
    [db close];
    -
    - -

    Transactions

    - -

    FMDatabase can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement.

    - -

    Data Sanitization

    - -

    When providing a SQL statement to FMDB, you should not attempt to "sanitize" any values before insertion. Instead, you should use the standard SQLite binding syntax:

    - -
    INSERT INTO myTable VALUES (?, ?, ?)
    -
    - -

    The ? character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an NSArray, NSDictionary, or a va_list), which are properly escaped for you.

    - -

    Alternatively, you may use named parameters syntax:

    - -
    INSERT INTO myTable VALUES (:id, :name, :value)
    -
    - -

    The parameters must start with a colon. SQLite itself supports other characters, but internally the Dictionary keys are prefixed with a colon, do not include the colon in your dictionary keys.

    - -
    NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:@"My Name", @"name", nil];
    -[db executeUpdate:@"INSERT INTO myTable (name) VALUES (:name)" withParameterDictionary:argsDict];
    -
    - -

    Thus, you SHOULD NOT do this (or anything like this):

    - -
    [db executeUpdate:[NSString stringWithFormat:@"INSERT INTO myTable VALUES (%@)", @"this has \" lots of ' bizarre \" quotes '"]];
    -
    - -

    Instead, you SHOULD do:

    - -
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @"this has \" lots of ' bizarre \" quotes '"];
    -
    - -

    All arguments provided to the -executeUpdate: method (or any of the variants that accept a va_list as a parameter) must be objects. The following will not work (and will result in a crash):

    - -
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", 42];
    -
    - -

    The proper way to insert a number is to box it in an NSNumber object:

    - -
    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:42]];
    -
    - -

    Alternatively, you can use the -execute*WithFormat: variant to use NSString-style substitution:

    - -
    [db executeUpdateWithFormat:@"INSERT INTO myTable VALUES (%d)", 42];
    -
    - -

    Internally, the -execute*WithFormat: methods are properly boxing things for you. The following percent modifiers are recognized: %@, %c, %s, %d, %D, %i, %u, %U, %hi, %hu, %qi, %qu, %f, %g, %ld, %lu, %lld, and %llu. Using a modifier other than those will have unpredictable results. If, for some reason, you need the % character to appear in your SQL statement, you should use %%.

    - -

    Using FMDatabaseQueue and Thread Safety.

    - -

    Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object per thread. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. This would suck.

    - -

    So don't instantiate a single FMDatabase object and use it across multiple threads.

    - -

    Instead, use FMDatabaseQueue. It's your friend and it's here to help. Here's how to use it:

    - -

    First, make your queue.

    - -
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
    -
    - -

    Then use it like so:

    - -
    [queue inDatabase:^(FMDatabase *db) {
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    -
    -    FMResultSet *rs = [db executeQuery:@"select * from foo"];
    -    while ([rs next]) {
    -        …
    -    }
    -}];
    -
    - -

    An easy way to wrap things up in a transaction can be done like this:

    - -
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
    -
    -    if (whoopsSomethingWrongHappened) {
    -        *rollback = YES;
    -        return;
    -    }
    -    // etc…
    -    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    -}];
    -
    - -

    FMDatabaseQueue will make a serialized GCD queue in the background and execute the blocks you pass to the GCD queue. This means if you call your FMDatabaseQueue's methods from multiple threads at the same time GDC will execute them in the order they are received. This means queries and updates won't step on each other's toes, and every one is happy.

    - -

    Making custom sqlite functions, based on blocks.

    -

    You can do this! For an example, look for makeFunctionNamed: in main.m

    - -

    Swift

    -

    You can use FMDB in Swift projects, too. To do this, you should:

    - -
      -
    1. Copy the FMDB .m and .h files into your project.
    2. -
    3. If prompted to create a "bridging header", you should do so. If not prompted and if you don't already have a bridging header, add one. For more information on bridging headers, see Swift and Objective-C in the Same Project.
    4. -
    5. In your bridging header, add a line that says:
      -
      #import "FMDB.h" 
    6. -
    7. Use the variations of executeQuery and executeUpdate with the sql and values parameters with try pattern, as shown below. -

    - -

    These renditions of executeQuery and executeUpdate both throw errors in true Swift 2 fashion. If you do the above, you can then write Swift code that uses FMDatabase. For example:

    - -
    let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) 
    -let fileURL = documents.URLByAppendingPathComponent("test.sqlite")
    -let database = FMDatabase(path: fileURL.path) 
    -
    -if !database.open() { 
    -    print("Unable to open database")
    -    return 
    -} 
    -
    -do { 
    -    try database.executeUpdate("create table test(x text, y text, z text)", values: nil)
    -    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"]) 
    -    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["e", "f", "g"]) 
    -    
    -    let rs = try database.executeQuery("select x, y, z from test", values: nil) 
    -    while rs.next() {
    -        let x = rs.stringForColumn("x") 
    -        let y = rs.stringForColumn("y") 
    -        let z = rs.stringForColumn("z") 
    -        print("x = \(x); y = \(y); z = \(z)") 
    -    } 
    -} catch let error as NSError { 
    -    print("failed: \(error.localizedDescription)") 
    -} 
    -
    -database.close()
    -

    History

    - -

    The history and changes are availbe on its GitHub page and are summarized in the "CHANGES_AND_TODO_LIST.txt" file.

    - -

    Contributors

    - -

    The contributors to FMDB are contained in the "Contributors.txt" file.

    - -

    License

    - -

    The license for FMDB is contained in the "License.txt" file.

    -
    -
    - - - - - - +

    If not redirected automatically, follow this link.