Classes

The following classes are available globally.

Specialized Cursors

  • 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 Collation is a string comparison function used by SQLite.

    See more

    Declaration

    Swift

    public final class DatabaseCollation
    extension DatabaseCollation: Hashable
  • An SQL function or aggregate.

    See more

    Declaration

    Swift

    public final class DatabaseFunction : Hashable
  • A DatabasePool grants concurrent accesses to an SQLite database.

    See more

    Declaration

    Swift

    public final class DatabasePool : DatabaseWriter
    extension DatabasePool: DatabaseReader
  • A DatabaseQueue serializes access to an SQLite database.

    See more

    Declaration

    Swift

    public final class DatabaseQueue : DatabaseWriter
  • A type-erased DatabaseReader

    Instances of AnyDatabaseReader forward their methods to an arbitrary underlying database reader.

    See more

    Declaration

    Swift

    public final class AnyDatabaseReader : DatabaseReader
  • A DatabaseSnapshot sees an unchanging database content, as it existed at the moment it was created.

    See DatabasePool.makeSnapshot()

    For more information, read about “snapshot isolation” at https://sqlite.org/isolation.html

    See more

    Declaration

    Swift

    public class DatabaseSnapshot : DatabaseReader
  • 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

RowCursor

  • 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

SelectStatement

  • 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
    extension SelectStatement: RowLayout
  • 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

UpdateStatement

  • 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
  • A cursor of database values extracted from a single column. For example:

    try dbQueue.read { db in
        let names: ColumnCursor<String> = try String.fetchCursor(db, sql: "SELECT name FROM player")
        while let name = names.next() { // String
            print(name)
        }
    }
    

    Declaration

    Swift

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

    try dbQueue.read { db in
        let emails: FastNullableDatabaseValueCursor<String> =
            try Optional<String>.fetchCursor(db, sql: "SELECT email FROM player")
        while let email = emails.next() { // String?
            print(email ?? "<NULL>")
        }
    }
    

    Declaration

    Swift

    public final class FastNullableDatabaseValueCursor<Value>: Cursor
        where Value: DatabaseValueConvertible & StatementColumnConvertible
  • 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

TableAlias

RecordCursor

Record