another.im-ios/AnotherIM/AppData/Services/Database+Migrations.swift

118 lines
5.2 KiB
Swift
Raw Normal View History

2024-06-19 15:15:27 +00:00
import Foundation
import GRDB
extension Database {
static var migrator: DatabaseMigrator = {
var migrator = DatabaseMigrator()
// flush db on schema change (only in DEV mode)
#if DEBUG
migrator.eraseDatabaseOnSchemaChange = true
#endif
// 1st migration - basic tables
migrator.registerMigration("Add basic tables") { db in
// credentials
try db.create(table: "credentials", options: [.ifNotExists]) { table in
2024-06-19 15:15:27 +00:00
table.column("bareJid", .text).notNull().primaryKey().unique(onConflict: .replace)
table.column("pass", .text).notNull()
table.column("isActive", .boolean).notNull().defaults(to: true)
}
// rosters
try db.create(table: "rosterVersions", options: [.ifNotExists]) { table in
table.column("bareJid", .text).notNull().primaryKey().unique(onConflict: .replace)
table.column("version", .text).notNull()
}
try db.create(table: "rosters", options: [.ifNotExists]) { table in
table.column("bareJid", .text).notNull()
table.column("contactBareJid", .text).notNull()
table.column("name", .text)
table.column("subscription", .text).notNull()
table.column("ask", .boolean).notNull().defaults(to: false)
table.column("data", .text).notNull()
table.primaryKey(["bareJid", "contactBareJid"], onConflict: .replace)
table.column("locallyDeleted", .boolean).notNull().defaults(to: false)
}
// chats
try db.create(table: "chats", options: [.ifNotExists]) { table in
table.column("id", .text).notNull().primaryKey().unique(onConflict: .replace)
table.column("account", .text).notNull()
table.column("participant", .text).notNull()
table.column("type", .integer).notNull()
}
// messages
try db.create(table: "messages", options: [.ifNotExists]) { table in
table.column("id", .text).notNull().primaryKey().unique(onConflict: .replace)
2024-06-24 10:44:55 +00:00
table.column("type", .text).notNull()
table.column("date", .datetime).notNull()
2024-06-24 13:28:26 +00:00
table.column("contentType", .text).notNull()
table.column("status", .integer).notNull()
2024-06-24 13:28:26 +00:00
table.column("from", .text).notNull()
table.column("to", .text)
table.column("body", .text)
table.column("subject", .text)
table.column("thread", .text)
table.column("oobUrl", .text)
2024-07-11 13:59:24 +00:00
}
}
migrator.registerMigration("Add OMEMO tables") { db in
try db.create(table: "omemo_sessions", options: [.ifNotExists]) { table in
table.column("account", .text).notNull()
table.column("name", .text).notNull()
table.column("deviceId", .integer).notNull()
table.column("key", .text).notNull()
table.primaryKey(["account", "name", "deviceId"], onConflict: .replace)
}
try db.create(table: "omemo_identities", options: [.ifNotExists]) { table in
2024-10-23 15:07:30 +00:00
table.column("account", .text).notNull().collate(.nocase)
table.column("name", .text).notNull()
table.column("deviceId", .integer).notNull()
table.column("fingerprint", .text).notNull()
table.column("key", .blob).notNull()
table.column("own", .integer).notNull()
table.column("status", .integer).notNull()
2024-10-23 15:07:30 +00:00
table.uniqueKey(["account", "name", "fingerprint"], onConflict: .ignore)
}
try db.create(table: "omemo_pre_keys", options: [.ifNotExists]) { table in
2024-08-06 11:15:13 +00:00
table.column("account", .text).notNull()
table.column("id", .integer).notNull()
table.column("key", .blob).notNull()
table.column("markForDeletion", .boolean).notNull().defaults(to: false)
table.primaryKey(["account", "id"], onConflict: .replace)
2024-07-29 16:36:22 +00:00
}
try db.create(table: "omemo_signed_pre_keys", options: [.ifNotExists]) { table in
table.column("account", .text).notNull()
table.column("id", .integer).notNull()
table.column("key", .blob).notNull()
table.primaryKey(["account", "id"], onConflict: .replace)
}
2024-10-07 16:58:02 +00:00
do {
try db.alter(table: "messages") { table in
table.add(column: "secure", .boolean).notNull().defaults(to: false)
}
} catch {
print("Error adding columns: \(error)\nProbably already added")
2024-09-11 12:37:54 +00:00
}
2024-09-19 15:14:05 +00:00
2024-10-07 16:58:02 +00:00
do {
try db.alter(table: "chats") { table in
table.add(column: "encrypted", .boolean).notNull().defaults(to: false)
}
} catch {
print("Error adding columns: \(error)\nProbably already added")
2024-09-19 15:14:05 +00:00
}
2024-07-29 16:36:22 +00:00
}
2024-06-19 15:15:27 +00:00
// return migrator
return migrator
}()
}