diff --git a/Sources/Fluent/Entity/Entity.swift b/Sources/Fluent/Entity/Entity.swift index 465e554d..cb23e036 100644 --- a/Sources/Fluent/Entity/Entity.swift +++ b/Sources/Fluent/Entity/Entity.swift @@ -122,7 +122,7 @@ extension Entity { /// See Entity.idType public static var idType: IdentifierType { - return database?.driver.idType ?? .uuid + return database?.driver.idType ?? .int } /// See Entity.idKey diff --git a/Sources/Fluent/SQL/GeneralSQLSerializer.swift b/Sources/Fluent/SQL/GeneralSQLSerializer.swift index 30d28ce7..31b3900b 100644 --- a/Sources/Fluent/SQL/GeneralSQLSerializer.swift +++ b/Sources/Fluent/SQL/GeneralSQLSerializer.swift @@ -371,7 +371,7 @@ open class GeneralSQLSerializer: SQLSerializer { var clause: [String] = [] clause += sql(column.name) - clause += sql(column.type) + clause += sql(column.type, primaryKey: column.primaryKey) if !column.optional { clause += "NOT NULL" @@ -402,7 +402,7 @@ open class GeneralSQLSerializer: SQLSerializer { } - open func sql(_ type: Schema.Field.DataType) -> String { + open func sql(_ type: Schema.Field.DataType, primaryKey: Bool) -> String { switch type { case .id(let type): let typeString: String @@ -414,7 +414,11 @@ open class GeneralSQLSerializer: SQLSerializer { case .custom(let dataType): typeString = dataType } - return typeString + " PRIMARY KEY" + if primaryKey { + return typeString + " PRIMARY KEY" + } else { + return typeString + } case .int: return "INTEGER" case .string(_): diff --git a/Sources/Fluent/Schema/Schema+Creator.swift b/Sources/Fluent/Schema/Schema+Creator.swift index bd39cb2c..230d7bd3 100644 --- a/Sources/Fluent/Schema/Schema+Creator.swift +++ b/Sources/Fluent/Schema/Schema+Creator.swift @@ -13,7 +13,8 @@ extension Schema { public func id(for entityType: E.Type) { fields += Field( name: E.idKey, - type: .id(type: E.idType) + type: .id(type: E.idType), + primaryKey: true ) } diff --git a/Sources/Fluent/Schema/Schema+Field.swift b/Sources/Fluent/Schema/Schema+Field.swift index c8956d82..1ef2ace0 100644 --- a/Sources/Fluent/Schema/Schema+Field.swift +++ b/Sources/Fluent/Schema/Schema+Field.swift @@ -2,11 +2,12 @@ extension Schema { /// Various types of fields /// that can be used in a Schema. public struct Field { - public var name: String - public var type: DataType - public var optional: Bool - public var unique: Bool - public var `default`: Node? + public let name: String + public let type: DataType + public let optional: Bool + public let unique: Bool + public let `default`: Node? + public let primaryKey: Bool public enum DataType { case id(type: IdentifierType) @@ -23,13 +24,15 @@ extension Schema { type: DataType, optional: Bool = false, unique: Bool = false, - default: Node? = nil + default: Node? = nil, + primaryKey: Bool = false ) { self.name = name self.type = type self.optional = optional self.unique = unique self.default = `default` + self.primaryKey = primaryKey } public init( @@ -37,7 +40,8 @@ extension Schema { type: DataType, optional: Bool = false, unique: Bool = false, - default: NodeRepresentable? = nil + default: NodeRepresentable? = nil, + primaryKey: Bool = false ) { let node: Node? @@ -52,7 +56,8 @@ extension Schema { type: type, optional: optional, unique: unique, - default: node + default: node, + primaryKey: primaryKey ) } }