-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathDelete.swift
42 lines (35 loc) · 975 Bytes
/
Delete.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import Schemata
/// A type-erased delete action.
internal struct AnyDelete: Hashable {
internal var schema: AnySchema
internal var predicate: AnyExpression?
internal init(_ schema: AnySchema, _ predicate: AnyExpression?) {
self.schema = schema
self.predicate = predicate
}
}
extension AnyDelete {
internal func makeSQL() -> SQL.Delete {
return SQL.Delete(
table: SQL.Table(schema.name),
predicate: predicate?.sql
)
}
}
/// An action that deletes model entities.
public struct Delete<Model: PersistDB.Model>: Hashable {
public var predicate: Predicate<Model>?
public init(_ predicate: Predicate<Model>?) {
self.predicate = predicate
}
}
extension Delete {
internal var delete: AnyDelete {
return AnyDelete(Model.anySchema, predicate?.expression)
}
}
extension Delete {
internal func makeSQL() -> SQL.Delete {
return delete.makeSQL()
}
}