You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/SessionUtilitiesKit/Database/Migrations/_001_InitialSetupMigration....

78 lines
3.0 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
//
// stringlint:ignore
import Foundation
import GRDB
enum _001_InitialSetupMigration: Migration {
static let target: TargetMigrations.Identifier = .utilitiesKit
static let identifier: String = "initialSetup"
static let minExpectedRunDuration: TimeInterval = 0.1
static let createdTables: [(TableRecord & FetchableRecord).Type] = [
Identity.self, Job.self, JobDependencies.self, Setting.self
]
static func migrate(_ db: Database, using dependencies: Dependencies) throws {
try db.create(table: "identity") { t in
t.column("variant", .text)
.notNull()
.unique()
.primaryKey()
t.column("data", .blob).notNull()
}
try db.create(table: "job") { t in
t.column("id", .integer)
.notNull()
.primaryKey(autoincrement: true)
t.column("failureCount", .integer)
.notNull()
.defaults(to: 0)
t.column("variant", .integer)
.notNull()
.indexed() // Quicker querying
t.column("behaviour", .integer)
.notNull()
.indexed() // Quicker querying
t.column("shouldBlock", .boolean)
.notNull()
.indexed() // Quicker querying
.defaults(to: false)
t.column("shouldSkipLaunchBecomeActive", .boolean)
.notNull()
.defaults(to: false)
t.column("nextRunTimestamp", .double)
.notNull()
.indexed() // Quicker querying
.defaults(to: 0)
t.column("threadId", .text)
.indexed() // Quicker querying
t.column("interactionId", .text)
.indexed() // Quicker querying
t.column("details", .blob)
}
try db.create(table: "jobDependencies") { t in
t.column("jobId", .integer)
.notNull()
.references("job", onDelete: .cascade) // Delete if Job deleted
t.column("dependantId", .integer)
.indexed() // Quicker querying
.references("job", onDelete: .setNull) // Delete if Job deleted
t.primaryKey(["jobId", "dependantId"])
}
try db.create(table: "setting") { t in
t.column("key", .text)
.notNull()
.unique()
.primaryKey()
t.column("value", .blob).notNull()
}
Storage.update(progress: 1, for: self, in: target, using: dependencies)
}
}