forked from chuckpreslar/codex
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdelete_manager.go
More file actions
97 lines (82 loc) · 2.86 KB
/
Copy pathdelete_manager.go
File metadata and controls
97 lines (82 loc) · 2.86 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package codex
// DeleteManager manages a tree that compiles to a SQL delete statement.
type DeleteManager struct {
Tree *DeleteStatementNode // The AST for the SQL DELETE statement.
Adapter adapter // The SQL adapter.
}
var _ Scoper = (*DeleteManager)(nil)
func (self *DeleteManager) Scopes(scopes ...ScopeFunc) *DeleteManager {
for _, scope := range scopes {
scope(self)
}
return self
}
func (self *DeleteManager) Scope(expr interface{}, args ...interface{}) {
self.Where(expr, args...)
}
// Delete appends the expression to the Trees Wheres slice.
// alias Where
func (self *DeleteManager) Delete(expr interface{}, args ...interface{}) *DeleteManager {
return self.Where(expr, args...)
}
// Where appends an sql WHERE condition to the current tree's Wheres slice,
//
// Where("a") // no args -> Group(Literal("a"))
// Where("a = ?", 123) // with args -> Group(Literal("a = ?", 123))
// Where("a = ? AND b = ?", 123, true) // with args -> Group(Literal("a = ? AND b = ?", 123, true))
// Where(Equal(Column("a"), Column("b"))) // no args -> Group(Equal(Column("a"), Column("b")))
func (self *DeleteManager) Where(expr interface{}, args ...interface{}) *DeleteManager {
if str, ok := expr.(string); ok {
expr = Literal(str, args...)
}
// enclose expr in Grouping - except if expr is already a Grouping
if _, ok := expr.(*GroupingNode); !ok {
expr = Grouping(expr)
}
self.Tree.Wheres = append(self.Tree.Wheres, expr)
return self
}
// Limit Sets the Tree's Limit to the given integer.
func (self *DeleteManager) Limit(expr interface{}) *DeleteManager {
self.Tree.Limit = Limit(expr)
return self
}
// Selection returns a *SelectManager while keeping
// wheres, limit and adapter
func (self *DeleteManager) Selection() *SelectManager {
m := Selection(self.Tree.Table)
m.Tree.Wheres = self.Tree.Wheres
m.Tree.Limit = self.Tree.Limit
m.Adapter = self.Adapter
return m
}
// Modification returns an *UpdateManager while keeping
// wheres, limit and adapter
func (self *DeleteManager) Modification() *UpdateManager {
m := Modification(self.Tree.Table)
m.Tree.Wheres = self.Tree.Wheres
m.Tree.Limit = self.Tree.Limit
m.Adapter = self.Adapter
return m
}
// Insertion returns a *InsertManager while keeping
// relation and adapter
func (self *DeleteManager) Insertion() *InsertManager {
m := Insertion(self.Tree.Table)
m.Adapter = self.Adapter
return m
}
// ToSql calls a visitor's Accept method based on the manager's SQL adapter.
func (self *DeleteManager) ToSql() (string, []interface{}, error) {
return VisitorFor(self.Adapter).Accept(self.Tree)
}
func (self *DeleteManager) Table() *TableNode {
return self.Tree.Table
}
// DeleteManager factory methods.
func Deletion(relation *TableNode) (m *DeleteManager) {
m = new(DeleteManager)
m.Tree = DeleteStatement(relation)
m.Adapter = relation.Adapter
return
}