88 lines
1.9 KiB
Swift
88 lines
1.9 KiB
Swift
//
|
|
// Copyright 2019 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
import GRDB
|
|
|
|
// TODO: We need to revise this.
|
|
@objc
|
|
public enum SDSColumnType: Int32 {
|
|
case unicodeString
|
|
case blob
|
|
case bool
|
|
case int
|
|
case int64
|
|
case double
|
|
case primaryKey
|
|
}
|
|
|
|
@objc
|
|
public class SDSColumnMetadata: NSObject {
|
|
|
|
@objc
|
|
public let columnName: String
|
|
|
|
@objc
|
|
public let columnType: SDSColumnType
|
|
|
|
@objc
|
|
public let isOptional: Bool
|
|
|
|
@objc
|
|
public let isUnique: Bool
|
|
|
|
// If true, this column isn't needed for deserialization and can be skipped in SELECT statements.
|
|
@objc
|
|
public let skipSelect: Bool
|
|
|
|
@objc
|
|
public init(columnName: String, columnType: SDSColumnType, isOptional: Bool = false, isUnique: Bool = false, skipSelect: Bool = false) {
|
|
self.columnName = columnName
|
|
self.columnType = columnType
|
|
self.isOptional = isOptional
|
|
self.isUnique = isUnique
|
|
self.skipSelect = skipSelect
|
|
}
|
|
}
|
|
|
|
// MARK: -
|
|
|
|
// TODO: Consider adding uniqueIdColumn field.
|
|
@objc
|
|
public class SDSTableMetadata: NSObject {
|
|
|
|
@objc
|
|
public let collection: String
|
|
|
|
@objc
|
|
public let tableName: String
|
|
|
|
@objc
|
|
public let columns: [SDSColumnMetadata]
|
|
|
|
public let databaseSelectionColumns: [Column]
|
|
|
|
public let selectColumnNames: [String]
|
|
|
|
@objc
|
|
public init(collection: String, tableName: String, columns: [SDSColumnMetadata]) {
|
|
self.collection = collection
|
|
self.tableName = tableName
|
|
self.columns = columns
|
|
|
|
databaseSelectionColumns = columns.filter { (columMetaData) in
|
|
return !columMetaData.skipSelect
|
|
}.map { (columMetaData) in
|
|
Column(columMetaData.columnName)
|
|
}
|
|
|
|
selectColumnNames = columns.filter { !$0.skipSelect }.map { $0.columnName }
|
|
}
|
|
|
|
public var columnNames: [String] {
|
|
return columns.map { $0.columnName }
|
|
}
|
|
}
|