Classes

The following classes are available globally.

  • A type-erased cursor of Element.

    This cursor forwards its next() method to an arbitrary underlying cursor having the same Element type, hiding the specifics of the underlying cursor.

    See more

    Declaration

    Swift

    public final class AnyCursor<Element> : Cursor
  • A Database connection.

    You don’t create a database directly. Instead, you use a DatabaseQueue, or a DatabasePool:

    let dbQueue = DatabaseQueue(...)
    
    // The Database is the `db` in the closure:
    try dbQueue.write { db in
        try Player(...).insert(db)
    }
    
    See more

    Declaration

    Swift

    public final class Database
  • A cursor of database values extracted from a single column. For example:

    try dbQueue.read { db in
        let urls: DatabaseValueCursor<URL> = try URL.fetchCursor(db, sql: "SELECT url FROM link")
        while let url = urls.next() { // URL
            print(url)
        }
    }
    

    Declaration

    Swift

    public final class DatabaseValueCursor<Value> : Cursor where Value : DatabaseValueConvertible
  • A cursor of optional database values extracted from a single column. For example:

    try dbQueue.read { db in
        let urls: NullableDatabaseValueCursor<URL> = try Optional<URL>.fetchCursor(db, sql: "SELECT url FROM link")
        while let url = urls.next() { // URL?
            print(url)
        }
    }
    

    Declaration

    Swift

    public final class NullableDatabaseValueCursor<Value> : Cursor where Value : DatabaseValueConvertible
  • A future database value, returned by the DatabaseWriter.concurrentRead(_:) method.

    let futureCount: Future<Int> = try writer.writeWithoutTransaction { db in
        try Player(...).insert()
    
        // Count players concurrently
        return writer.concurrentRead { db in
            return try Player.fetchCount()
        }
    }
    
    let count: Int = try futureCount.wait()
    
    See more

    Declaration

    Swift

    public class DatabaseFuture<Value>
  • A type-erased DatabaseWriter

    Instances of AnyDatabaseWriter forward their methods to an arbitrary underlying database writer.

    See more

    Declaration

    Swift

    public final class AnyDatabaseWriter : DatabaseWriter
  • Row

    A database row.

    See more

    Declaration

    Swift

    public final class Row: Equatable, Hashable, RandomAccessCollection,
        ExpressibleByDictionaryLiteral, CustomStringConvertible,
        CustomDebugStringConvertible
  • A cursor of database rows. For example:

    try dbQueue.read { db in
        let rows: RowCursor = try Row.fetchCursor(db, sql: "SELECT * FROM player")
    }
    
    See more

    Declaration

    Swift

    public final class RowCursor : Cursor
  • A statement represents an SQL query.

    It is the base class of UpdateStatement that executes update statements, and SelectStatement that fetches rows.

    See more

    Declaration

    Swift

    public class Statement
  • A subclass of Statement that fetches database rows.

    You create SelectStatement with the Database.makeSelectStatement() method:

    try dbQueue.read { db in
        let statement = try db.makeSelectStatement(sql: "SELECT COUNT(*) FROM player WHERE score > ?")
        let moreThanTwentyCount = try Int.fetchOne(statement, arguments: [20])!
        let moreThanThirtyCount = try Int.fetchOne(statement, arguments: [30])!
    }
    
    See more

    Declaration

    Swift

    public final class SelectStatement : Statement
  • A subclass of Statement that executes SQL queries.

    You create UpdateStatement with the Database.makeUpdateStatement() method:

    try dbQueue.inTransaction { db in
        let statement = try db.makeUpdateStatement(sql: "INSERT INTO player (name) VALUES (?)")
        try statement.execute(arguments: ["Arthur"])
        try statement.execute(arguments: ["Barbara"])
        return .commit
    }
    
    See more

    Declaration

    Swift

    public final class UpdateStatement : Statement
  • The FTS3TableDefinition class lets you define columns of a FTS3 virtual table.

    You don’t create instances of this class. Instead, you use the Database create(virtualTable:using:) method:

    try db.create(virtualTable: "document", using: FTS3()) { t in // t is FTS3TableDefinition
        t.column("content")
    }
    
    See more

    Declaration

    Swift

    public final class FTS3TableDefinition
  • The FTS4TableDefinition class lets you define columns of a FTS4 virtual table.

    You don’t create instances of this class. Instead, you use the Database create(virtualTable:using:) method:

    try db.create(virtualTable: "document", using: FTS4()) { t in // t is FTS4TableDefinition
        t.column("content")
    }
    

    See https://www.sqlite.org/fts3.html

    See more

    Declaration

    Swift

    public final class FTS4TableDefinition
  • The FTS4ColumnDefinition class lets you refine a column of an FTS4 virtual table.

    You get instances of this class when you create an FTS4 table:

    try db.create(virtualTable: "document", using: FTS4()) { t in
        t.column("content")      // FTS4ColumnDefinition
    }
    

    See https://www.sqlite.org/fts3.html

    See more

    Declaration

    Swift

    public final class FTS4ColumnDefinition
  • The FTS5TableDefinition class lets you define columns of a FTS5 virtual table.

    You don’t create instances of this class. Instead, you use the Database create(virtualTable:using:) method:

    try db.create(virtualTable: "document", using: FTS5()) { t in // t is FTS5TableDefinition
        t.column("content")
    }
    

    See https://www.sqlite.org/fts5.html

    See more
  • The FTS5ColumnDefinition class lets you refine a column of an FTS5 virtual table.

    You get instances of this class when you create an FTS5 table:

    try db.create(virtualTable: "document", using: FTS5()) { t in
        t.column("content")      // FTS5ColumnDefinition
    }
    

    See https://www.sqlite.org/fts5.html

    See more
  • A cursor of records. For example:

    struct Player : FetchableRecord { ... }
    try dbQueue.read { db in
        let players: RecordCursor<Player> = try Player.fetchCursor(db, sql: "SELECT * FROM player")
    }
    

    Declaration

    Swift

    public final class RecordCursor<Record> : Cursor where Record : FetchableRecord