mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Added the rest of the interaction structure to the database (testing some migration logic now - still needs to be finalised) Updated the YDBToGRDB migrations to wrap their inserts in autorelease pools (helps memory slightly, unfortunately it's caching the YDB data which uses the most memory but we have opted for speed over RAM at the moment) Updated the MockDataGenerator so it should now "chunk" the code generation (crazy large figures were previously resulting in excessive memory usage)
45 lines
1.6 KiB
Swift
45 lines
1.6 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 uniqueKey(_ columns: [T.Columns], onConflict: Database.ConflictResolution? = nil) {
|
|
definition.uniqueKey(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
|
|
)
|
|
}
|
|
}
|