Skip to content

Commit b2a6814

Browse files
committed
Support default expressions (like CURRENT_*)
Signed-off-by: Stephen Celis <stephen@stephencelis.com>
1 parent 9aeb90d commit b2a6814

File tree

1 file changed

+127
-17
lines changed

1 file changed

+127
-17
lines changed

SQLite Common/Schema.swift

Lines changed: 127 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,74 +71,183 @@ public final class SchemaBuilder {
7171
primaryKey: Bool = false,
7272
unique: Bool = false,
7373
check: Expression<Bool>? = nil,
74-
defaultValue: T? = nil
74+
defaultValue value: Expression<T>? = nil
7575
) {
76-
column(name, primaryKey, false, unique, check, defaultValue)
76+
column(name, primaryKey, false, unique, check, value)
7777
}
78+
79+
public func column<T: Value>(
80+
name: Expression<T>,
81+
primaryKey: Bool = false,
82+
unique: Bool = false,
83+
check: Expression<Bool>? = nil,
84+
defaultValue value: T
85+
) {
86+
column(name, primaryKey, false, unique, check, Expression(value: value))
87+
}
88+
89+
public func column<T: Value>(
90+
name: Expression<T?>,
91+
primaryKey: Bool = false,
92+
unique: Bool = false,
93+
check: Expression<Bool>? = nil,
94+
defaultValue value: Expression<T>? = nil
95+
) {
96+
column(Expression<T>(name), primaryKey, true, unique, check, value)
97+
}
98+
7899
public func column<T: Value>(
79100
name: Expression<T?>,
80101
primaryKey: Bool = false,
81102
unique: Bool = false,
82103
check: Expression<Bool>? = nil,
83-
defaultValue: T? = nil
104+
defaultValue value: T?
105+
) {
106+
column(Expression<T>(name), primaryKey, true, unique, check, value.map { Expression(value: $0) })
107+
}
108+
109+
public func column(
110+
name: Expression<String>,
111+
primaryKey: Bool = false,
112+
unique: Bool = false,
113+
check: Expression<Bool>? = nil,
114+
defaultValue value: Expression<String>? = nil,
115+
collate: Collation
84116
) {
85-
column(Expression<T>(name.SQL, name.bindings), primaryKey, true, unique, check, defaultValue)
117+
let expressions: [Expressible] = [Expression<()>("COLLATE \(collate.rawValue)")]
118+
column(name, primaryKey, false, unique, check, value, expressions)
86119
}
87120

88121
public func column(
89122
name: Expression<String>,
90123
primaryKey: Bool = false,
91124
unique: Bool = false,
92125
check: Expression<Bool>? = nil,
93-
defaultValue: String? = nil,
126+
defaultValue value: String,
127+
collate: Collation
128+
) {
129+
let expressions: [Expressible] = [Expression<()>("COLLATE \(collate.rawValue)")]
130+
column(name, primaryKey, false, unique, check, Expression(value: value), expressions)
131+
}
132+
133+
public func column(
134+
name: Expression<String?>,
135+
primaryKey: Bool = false,
136+
unique: Bool = false,
137+
check: Expression<Bool>? = nil,
138+
defaultValue value: Expression<String>? = nil,
94139
collate: Collation
95140
) {
96141
let expressions: [Expressible] = [Expression<()>("COLLATE \(collate.rawValue)")]
97-
column(name, primaryKey, false, unique, check, defaultValue, expressions)
142+
column(Expression<String>(name), primaryKey, true, unique, check, value, expressions)
98143
}
144+
99145
public func column(
100146
name: Expression<String?>,
101147
primaryKey: Bool = false,
102148
unique: Bool = false,
103149
check: Expression<Bool>? = nil,
104-
defaultValue: String? = nil,
150+
defaultValue value: String?,
105151
collate: Collation
106152
) {
107153
let expressions: [Expressible] = [Expression<()>("COLLATE \(collate.rawValue)")]
108-
column(Expression<String>(name.SQL, name.bindings), primaryKey, true, unique, check, defaultValue, expressions)
154+
column(Expression<String>(name), primaryKey, true, unique, check, Expression(value: value), expressions)
155+
}
156+
157+
public func column(
158+
name: Expression<Int>,
159+
primaryKey: Bool = false,
160+
unique: Bool = false,
161+
check: Expression<Bool>? = nil,
162+
defaultValue value: Expression<Int>? = nil,
163+
references: Expression<Int>
164+
) {
165+
assertForeignKeysEnabled()
166+
let expressions: [Expressible] = [Expression<()>("REFERENCES"), namespace(references)]
167+
column(name, primaryKey, false, unique, check, value, expressions)
109168
}
110169

111170
public func column(
112171
name: Expression<Int>,
113172
primaryKey: Bool = false,
114173
unique: Bool = false,
115174
check: Expression<Bool>? = nil,
116-
defaultValue: Int? = nil,
175+
defaultValue value: Int,
176+
references: Expression<Int>
177+
) {
178+
assertForeignKeysEnabled()
179+
let expressions: [Expressible] = [Expression<()>("REFERENCES"), namespace(references)]
180+
column(name, primaryKey, false, unique, check, Expression(value: value), expressions)
181+
}
182+
183+
public func column(
184+
name: Expression<Int?>,
185+
primaryKey: Bool = false,
186+
unique: Bool = false,
187+
check: Expression<Bool>? = nil,
188+
defaultValue value: Expression<Int>? = nil,
117189
references: Expression<Int>
118190
) {
119191
assertForeignKeysEnabled()
120192
let expressions: [Expressible] = [Expression<()>("REFERENCES"), namespace(references)]
121-
column(name, primaryKey, false, unique, check, defaultValue, expressions)
193+
column(Expression<Int>(name), primaryKey, true, unique, check, value, expressions)
122194
}
195+
123196
public func column(
124197
name: Expression<Int?>,
125198
primaryKey: Bool = false,
126199
unique: Bool = false,
127200
check: Expression<Bool>? = nil,
128-
defaultValue: Int? = nil,
201+
defaultValue value: Int?,
129202
references: Expression<Int>
130203
) {
131204
assertForeignKeysEnabled()
132205
let expressions: [Expressible] = [Expression<()>("REFERENCES"), namespace(references)]
133-
column(Expression<Int>(name.SQL, name.bindings), primaryKey, true, unique, check, defaultValue, expressions)
206+
column(Expression<Int>(name), primaryKey, true, unique, check, Expression(value: value), expressions)
207+
}
208+
209+
public func column(
210+
name: Expression<Int>,
211+
primaryKey: Bool = false,
212+
unique: Bool = false,
213+
check: Expression<Bool>? = nil,
214+
defaultValue: Expression<Int>? = nil,
215+
references: Query
216+
) {
217+
return column(
218+
name,
219+
primaryKey: primaryKey,
220+
unique: unique,
221+
check: check,
222+
defaultValue: defaultValue,
223+
references: Expression(references.tableName)
224+
)
134225
}
135226

136227
public func column(
137228
name: Expression<Int>,
138229
primaryKey: Bool = false,
139230
unique: Bool = false,
140231
check: Expression<Bool>? = nil,
141-
defaultValue: Int? = nil,
232+
defaultValue: Int,
233+
references: Query
234+
) {
235+
return column(
236+
name,
237+
primaryKey: primaryKey,
238+
unique: unique,
239+
check: check,
240+
defaultValue: defaultValue,
241+
references: Expression(references.tableName)
242+
)
243+
}
244+
245+
public func column(
246+
name: Expression<Int?>,
247+
primaryKey: Bool = false,
248+
unique: Bool = false,
249+
check: Expression<Bool>? = nil,
250+
defaultValue: Expression<Int>? = nil,
142251
references: Query
143252
) {
144253
return column(
@@ -150,12 +259,13 @@ public final class SchemaBuilder {
150259
references: Expression(references.tableName)
151260
)
152261
}
262+
153263
public func column(
154264
name: Expression<Int?>,
155265
primaryKey: Bool = false,
156266
unique: Bool = false,
157267
check: Expression<Bool>? = nil,
158-
defaultValue: Int? = nil,
268+
defaultValue: Int?,
159269
references: Query
160270
) {
161271
return column(
@@ -174,15 +284,15 @@ public final class SchemaBuilder {
174284
_ null: Bool,
175285
_ unique: Bool,
176286
_ check: Expression<Bool>?,
177-
_ defaultValue: T?,
287+
_ defaultValue: Expression<T>?,
178288
_ expressions: [Expressible]? = nil
179289
) {
180-
var parts: [Expressible] = [name, Expression<()>(T.datatype)]
290+
var parts: [Expressible] = [Expression<()>(name), Expression<()>(T.datatype)]
181291
if primaryKey { parts.append(Expression<()>("PRIMARY KEY")) }
182292
if !null { parts.append(Expression<()>("NOT NULL")) }
183293
if unique { parts.append(Expression<()>("UNIQUE")) }
184294
if let check = check { parts.append(Expression<()>("CHECK \(check.SQL)", check.bindings)) }
185-
if let defaultValue = defaultValue { parts.append(Expression<()>("DEFAULT ?", [defaultValue])) }
295+
if let value = defaultValue { parts.append(Expression<()>("DEFAULT \(value.SQL)", value.bindings)) }
186296
if let expressions = expressions { parts += expressions }
187297
columns.append(SQLite.join(" ", parts))
188298
}

0 commit comments

Comments
 (0)