...
1 package exp
2
3 type (
4 DeleteClauses interface {
5 HasFrom() bool
6 clone() *deleteClauses
7
8 CommonTables() []CommonTableExpression
9 CommonTablesAppend(cte CommonTableExpression) DeleteClauses
10
11 From() IdentifierExpression
12 SetFrom(table IdentifierExpression) DeleteClauses
13
14 Where() ExpressionList
15 ClearWhere() DeleteClauses
16 WhereAppend(expressions ...Expression) DeleteClauses
17
18 Order() ColumnListExpression
19 HasOrder() bool
20 ClearOrder() DeleteClauses
21 SetOrder(oes ...OrderedExpression) DeleteClauses
22 OrderAppend(...OrderedExpression) DeleteClauses
23 OrderPrepend(...OrderedExpression) DeleteClauses
24
25 Limit() interface{}
26 HasLimit() bool
27 ClearLimit() DeleteClauses
28 SetLimit(limit interface{}) DeleteClauses
29
30 Returning() ColumnListExpression
31 HasReturning() bool
32 SetReturning(cl ColumnListExpression) DeleteClauses
33 }
34 deleteClauses struct {
35 commonTables []CommonTableExpression
36 from IdentifierExpression
37 where ExpressionList
38 order ColumnListExpression
39 limit interface{}
40 returning ColumnListExpression
41 }
42 )
43
44 func NewDeleteClauses() DeleteClauses {
45 return &deleteClauses{}
46 }
47
48 func (dc *deleteClauses) HasFrom() bool {
49 return dc.from != nil
50 }
51
52 func (dc *deleteClauses) clone() *deleteClauses {
53 return &deleteClauses{
54 commonTables: dc.commonTables,
55 from: dc.from,
56
57 where: dc.where,
58 order: dc.order,
59 limit: dc.limit,
60 returning: dc.returning,
61 }
62 }
63
64 func (dc *deleteClauses) CommonTables() []CommonTableExpression {
65 return dc.commonTables
66 }
67
68 func (dc *deleteClauses) CommonTablesAppend(cte CommonTableExpression) DeleteClauses {
69 ret := dc.clone()
70 ret.commonTables = append(ret.commonTables, cte)
71 return ret
72 }
73
74 func (dc *deleteClauses) From() IdentifierExpression {
75 return dc.from
76 }
77
78 func (dc *deleteClauses) SetFrom(table IdentifierExpression) DeleteClauses {
79 ret := dc.clone()
80 ret.from = table
81 return ret
82 }
83
84 func (dc *deleteClauses) Where() ExpressionList {
85 return dc.where
86 }
87
88 func (dc *deleteClauses) ClearWhere() DeleteClauses {
89 ret := dc.clone()
90 ret.where = nil
91 return ret
92 }
93
94 func (dc *deleteClauses) WhereAppend(expressions ...Expression) DeleteClauses {
95 if len(expressions) == 0 {
96 return dc
97 }
98 ret := dc.clone()
99 if ret.where == nil {
100 ret.where = NewExpressionList(AndType, expressions...)
101 } else {
102 ret.where = ret.where.Append(expressions...)
103 }
104 return ret
105 }
106
107 func (dc *deleteClauses) Order() ColumnListExpression {
108 return dc.order
109 }
110
111 func (dc *deleteClauses) HasOrder() bool {
112 return dc.order != nil
113 }
114
115 func (dc *deleteClauses) ClearOrder() DeleteClauses {
116 ret := dc.clone()
117 ret.order = nil
118 return ret
119 }
120
121 func (dc *deleteClauses) SetOrder(oes ...OrderedExpression) DeleteClauses {
122 ret := dc.clone()
123 ret.order = NewOrderedColumnList(oes...)
124 return ret
125 }
126
127 func (dc *deleteClauses) OrderAppend(oes ...OrderedExpression) DeleteClauses {
128 if dc.order == nil {
129 return dc.SetOrder(oes...)
130 }
131 ret := dc.clone()
132 ret.order = ret.order.Append(NewOrderedColumnList(oes...).Columns()...)
133 return ret
134 }
135
136 func (dc *deleteClauses) OrderPrepend(oes ...OrderedExpression) DeleteClauses {
137 if dc.order == nil {
138 return dc.SetOrder(oes...)
139 }
140 ret := dc.clone()
141 ret.order = NewOrderedColumnList(oes...).Append(ret.order.Columns()...)
142 return ret
143 }
144
145 func (dc *deleteClauses) Limit() interface{} {
146 return dc.limit
147 }
148
149 func (dc *deleteClauses) HasLimit() bool {
150 return dc.limit != nil
151 }
152
153 func (dc *deleteClauses) ClearLimit() DeleteClauses {
154 ret := dc.clone()
155 ret.limit = nil
156 return ret
157 }
158
159 func (dc *deleteClauses) SetLimit(limit interface{}) DeleteClauses {
160 ret := dc.clone()
161 ret.limit = limit
162 return ret
163 }
164
165 func (dc *deleteClauses) Returning() ColumnListExpression {
166 return dc.returning
167 }
168
169 func (dc *deleteClauses) HasReturning() bool {
170 return dc.returning != nil && !dc.returning.IsEmpty()
171 }
172
173 func (dc *deleteClauses) SetReturning(cl ColumnListExpression) DeleteClauses {
174 ret := dc.clone()
175 ret.returning = cl
176 return ret
177 }
178
View as plain text