Configuration

The configuration of a database connection.

Configuration.swift:16Configuration.md
struct Configuration

Overview

You create a Configuration before opening a database connection:

var config = Configuration()
config.readonly = true
config.maximumReaderCount = 2  // (DatabasePool only) The default is 5

let dbQueue = try DatabaseQueue( // or DatabasePool
    path: "/path/to/database.sqlite",
    configuration: config)

See Database Connections.

Frequent Use Cases

Tracing SQL Statements

You can setup a tracing function that prints out all executed SQL requests with prepareDatabase(_:) and trace(options:_:):

var config = Configuration()
config.prepareDatabase { db in
    db.trace { print("SQL> \($0)") }
}

let dbQueue = try DatabaseQueue(
    path: "/path/to/database.sqlite",
    configuration: config)

// Prints "SQL> SELECT COUNT(*) FROM player"
let playerCount = dbQueue.read { db in
    try Player.fetchCount(db)
}

Public Statement Arguments

Debugging is easier when database errors and tracing functions expose the values sent to the database. Since those values may contain sensitive information, verbose logging is disabled by default. You turn it on with publicStatementArguments:

var config = Configuration()
#if DEBUG
// Protect sensitive information by enabling
// verbose debugging in DEBUG builds only.
config.publicStatementArguments = true
#endif

let dbQueue = try DatabaseQueue(
    path: "/path/to/database.sqlite",
    configuration: config)

do {
    try dbQueue.write { db in
        user.name = ...
        user.location = ...
        user.address = ...
        user.phoneNumber = ...
        try user.save(db)
    }
} catch {
    // Prints sensitive information in debug builds only
    print(error)
}

Creating a Configuration

  • init()

    Creates a factory configuration.

Configuring SQLite Connections

Configuring GRDB Connections

Configuring the Quality of Service