session-ios/SessionUtilitiesKit/Database/Types/TypedTableDefinition.swift
Morgan Pretty a1b4554cdb Migrated the SessionSnodeKit from YapDatabase to GRDB
Changed the min OS version to iOS 13.0 (support for 'Identifiable')
Removed the alternate approaches to fetching the userKeyPair and userPublicKeyHexString (no consistently routed through the caching method)
Migrated the 'OWSIdentityManager' logic to use the new 'Identity' type
Added the 'Setting' table and got the pattern working fairly nicely (unfortunately there isn't a good way to avoid key collision without proper enums)
Updated the SessionSnodeKit to migration it's data from YDB to GRDB
Updated the SessionSnodeKit to use GRDB throughout it's logic
2022-04-01 17:22:45 +11:00

41 lines
1.4 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
import GRDB
/// This is a convenience wrapper around the GRDB `TableDefinition` class which allows for shorthand
/// when creating tables
public class TypedTableDefinition<T> where T: TableRecord, T: ColumnExpressible {
let definition: TableDefinition
init(definition: TableDefinition) {
self.definition = definition
}
@discardableResult public func column(_ key: T.Columns, _ type: Database.ColumnType? = nil) -> ColumnDefinition {
return definition.column(key.name, type)
}
public func primaryKey(_ columns: [T.Columns], onConflict: Database.ConflictResolution? = nil) {
definition.primaryKey(columns.map { $0.name }, onConflict: onConflict)
}
public func foreignKey<Other>(
_ columns: [T.Columns],
references table: Other.Type,
columns destinationColumns: [Other.Columns]? = nil,
onDelete: Database.ForeignKeyAction? = nil,
onUpdate: Database.ForeignKeyAction? = nil,
deferred: Bool = false
) where Other: TableRecord, Other: ColumnExpressible {
return definition.foreignKey(
columns.map { $0.name },
references: table.databaseTableName,
columns: destinationColumns?.map { $0.name },
onDelete: onDelete,
onUpdate: onUpdate,
deferred: deferred
)
}
}