DatabaseMigrator
public struct DatabaseMigrator
A DatabaseMigrator registers and applies database migrations.
Migrations are named blocks of SQL statements that are guaranteed to be applied in order, once and only once.
When a user upgrades your application, only non-applied migration are run.
Usage:
var migrator = DatabaseMigrator()
// v1.0 database
migrator.registerMigration("createAuthors") { db in
try db.execute("""
CREATE TABLE authors (
id INTEGER PRIMARY KEY,
creationDate TEXT,
name TEXT NOT NULL
)
""")
}
migrator.registerMigration("createBooks") { db in
try db.execute("""
CREATE TABLE books (
uuid TEXT PRIMARY KEY,
authorID INTEGER NOT NULL
REFERENCES authors(id)
ON DELETE CASCADE ON UPDATE CASCADE,
title TEXT NOT NULL
)
""")
}
// v2.0 database
migrator.registerMigration("AddBirthYearToAuthors") { db in
try db.execute("ALTER TABLE authors ADD COLUMN birthYear INT")
}
try migrator.migrate(dbQueue)
-
A new migrator.
Declaration
Swift
public init()
-
Registers a migration.
migrator.registerMigration("createPlayers") { db in try db.execute(""" CREATE TABLE players ( id INTEGER PRIMARY KEY, creationDate TEXT, name TEXT NOT NULL ) """) }
Precondition
No migration with the same same as already been registered.Declaration
Swift
public mutating func registerMigration(_ identifier: String, migrate: @escaping (Database) throws -> Void)
Parameters
identifier
The migration identifier.
block
The migration block that performs SQL statements.
-
Undocumented
Declaration
Swift
public mutating func registerMigrationWithDeferredForeignKeyCheck(_ identifier: String, migrate: @escaping (Database) throws -> Void)
-
Iterate migrations in the same order as they were registered. If a migration has not yet been applied, its block is executed in a transaction.
Throws
An eventual error thrown by the registered migration blocks.Declaration
Swift
public func migrate(_ writer: DatabaseWriter) throws
Parameters
db
A DatabaseWriter (DatabaseQueue or DatabasePool) where migrations should apply.
-
Iterate migrations in the same order as they were registered, up to the provided target. If a migration has not yet been applied, its block is executed in a transaction.
- targetIdentifier: The identifier of a registered migration.
Throws
An eventual error thrown by the registered migration blocks.Declaration
Swift
public func migrate(_ writer: DatabaseWriter, upTo targetIdentifier: String) throws
Parameters
db
A DatabaseWriter (DatabaseQueue or DatabasePool) where migrations should apply.