1 package exp_test
2
3 import (
4 "testing"
5
6 "github.com/doug-martin/goqu/v9/exp"
7 "github.com/stretchr/testify/suite"
8 )
9
10 type updateClausesSuite struct {
11 suite.Suite
12 }
13
14 func TestUpdateClausesSuite(t *testing.T) {
15 suite.Run(t, new(updateClausesSuite))
16 }
17
18 func (ucs *updateClausesSuite) TestHasTable() {
19 c := exp.NewUpdateClauses()
20 c2 := c.SetTable(exp.NewIdentifierExpression("", "test", ""))
21
22 ucs.False(c.HasTable())
23
24 ucs.True(c2.HasTable())
25 }
26
27 func (ucs *updateClausesSuite) TestTable() {
28 c := exp.NewUpdateClauses()
29 ti := exp.NewIdentifierExpression("", "a", "")
30 c2 := c.SetTable(ti)
31
32 ucs.Nil(c.Table())
33
34 ucs.Equal(ti, c2.Table())
35 }
36
37 func (ucs *updateClausesSuite) TestSetTable() {
38 c := exp.NewUpdateClauses()
39 ti := exp.NewIdentifierExpression("", "a", "")
40 c2 := c.SetTable(ti)
41
42 ucs.Nil(c.Table())
43
44 ucs.Equal(ti, c2.Table())
45 }
46
47 func (ucs *updateClausesSuite) TestSetValues() {
48 c := exp.NewUpdateClauses()
49 r := exp.Record{"a": "a1", "b": "b1"}
50 c2 := c.SetSetValues(r)
51
52 ucs.Nil(c.SetValues())
53
54 ucs.Equal(r, c2.SetValues())
55 }
56
57 func (ucs *updateClausesSuite) TestSetSetValues() {
58 r := exp.Record{"a": "a1", "b": "b1"}
59 c := exp.NewUpdateClauses().SetSetValues(r)
60 r2 := exp.Record{"a": "a2", "b": "b2"}
61 c2 := c.SetSetValues(r2)
62
63 ucs.Equal(r, c.SetValues())
64
65 ucs.Equal(r2, c2.SetValues())
66 }
67
68 func (ucs *updateClausesSuite) TestFrom() {
69 c := exp.NewUpdateClauses()
70 ce := exp.NewColumnListExpression("a", "b")
71 c2 := c.SetFrom(ce)
72
73 ucs.Nil(c.From())
74
75 ucs.Equal(ce, c2.From())
76 }
77
78 func (ucs *updateClausesSuite) TestSetFrom() {
79 ce1 := exp.NewColumnListExpression("a", "b")
80 c := exp.NewUpdateClauses().SetFrom(ce1)
81 ce2 := exp.NewColumnListExpression("a", "b")
82 c2 := c.SetFrom(ce2)
83
84 ucs.Equal(ce1, c.From())
85
86 ucs.Equal(ce2, c2.From())
87 }
88
89 func (ucs *updateClausesSuite) TestWhere() {
90 w := exp.Ex{"a": 1}
91
92 c := exp.NewUpdateClauses()
93 c2 := c.WhereAppend(w)
94
95 ucs.Nil(c.Where())
96
97 ucs.Equal(exp.NewExpressionList(exp.AndType, w), c2.Where())
98 }
99
100 func (ucs *updateClausesSuite) TestClearWhere() {
101 w := exp.Ex{"a": 1}
102
103 c := exp.NewUpdateClauses().WhereAppend(w)
104 c2 := c.ClearWhere()
105
106 ucs.Equal(exp.NewExpressionList(exp.AndType, w), c.Where())
107
108 ucs.Nil(c2.Where())
109 }
110
111 func (ucs *updateClausesSuite) TestWhereAppend() {
112 w := exp.Ex{"a": 1}
113 w2 := exp.Ex{"b": 2}
114
115 c := exp.NewUpdateClauses()
116 c2 := c.WhereAppend(w)
117
118 c3 := c.WhereAppend(w).WhereAppend(w2)
119
120 c4 := c.WhereAppend(w, w2)
121
122 ucs.Nil(c.Where())
123
124 ucs.Equal(exp.NewExpressionList(exp.AndType, w), c2.Where())
125 ucs.Equal(exp.NewExpressionList(exp.AndType, w).Append(w2), c3.Where())
126 ucs.Equal(exp.NewExpressionList(exp.AndType, w, w2), c4.Where())
127 }
128
129 func (ucs *updateClausesSuite) TestOrder() {
130 oe := exp.NewIdentifierExpression("", "", "a").Desc()
131
132 c := exp.NewUpdateClauses()
133 c2 := c.SetOrder(oe)
134
135 ucs.Nil(c.Order())
136
137 ucs.Equal(exp.NewColumnListExpression(oe), c2.Order())
138 }
139
140 func (ucs *updateClausesSuite) TestHasOrder() {
141 oe := exp.NewIdentifierExpression("", "", "a").Desc()
142
143 c := exp.NewUpdateClauses()
144 c2 := c.SetOrder(oe)
145
146 ucs.False(c.HasOrder())
147
148 ucs.True(c2.HasOrder())
149 }
150
151 func (ucs *updateClausesSuite) TestClearOrder() {
152 oe := exp.NewIdentifierExpression("", "", "a").Desc()
153
154 c := exp.NewUpdateClauses().SetOrder(oe)
155 c2 := c.ClearOrder()
156
157 ucs.Equal(exp.NewColumnListExpression(oe), c.Order())
158
159 ucs.Nil(c2.Order())
160 }
161
162 func (ucs *updateClausesSuite) TestSetOrder() {
163 oe := exp.NewIdentifierExpression("", "", "a").Desc()
164 oe2 := exp.NewIdentifierExpression("", "", "b").Desc()
165
166 c := exp.NewUpdateClauses().SetOrder(oe)
167 c2 := c.SetOrder(oe2)
168
169 ucs.Equal(exp.NewColumnListExpression(oe), c.Order())
170
171 ucs.Equal(exp.NewColumnListExpression(oe2), c2.Order())
172 }
173
174 func (ucs *updateClausesSuite) TestOrderAppend() {
175 oe := exp.NewIdentifierExpression("", "", "a").Desc()
176 oe2 := exp.NewIdentifierExpression("", "", "b").Desc()
177
178 c := exp.NewUpdateClauses().SetOrder(oe)
179 c2 := c.OrderAppend(oe2)
180
181 ucs.Equal(exp.NewColumnListExpression(oe), c.Order())
182
183 ucs.Equal(exp.NewColumnListExpression(oe, oe2), c2.Order())
184 }
185
186 func (ucs *updateClausesSuite) TestOrderPrepend() {
187 oe := exp.NewIdentifierExpression("", "", "a").Desc()
188 oe2 := exp.NewIdentifierExpression("", "", "b").Desc()
189
190 c := exp.NewUpdateClauses().SetOrder(oe)
191 c2 := c.OrderPrepend(oe2)
192
193 ucs.Equal(exp.NewColumnListExpression(oe), c.Order())
194
195 ucs.Equal(exp.NewColumnListExpression(oe2, oe), c2.Order())
196 }
197
198 func (ucs *updateClausesSuite) TestLimit() {
199 l := 1
200
201 c := exp.NewUpdateClauses()
202 c2 := c.SetLimit(l)
203
204 ucs.Nil(c.Limit())
205
206 ucs.Equal(l, c2.Limit())
207 }
208
209 func (ucs *updateClausesSuite) TestHasLimit() {
210 l := 1
211
212 c := exp.NewUpdateClauses()
213 c2 := c.SetLimit(l)
214
215 ucs.False(c.HasLimit())
216
217 ucs.True(c2.HasLimit())
218 }
219
220 func (ucs *updateClausesSuite) TestCLearLimit() {
221 l := 1
222
223 c := exp.NewUpdateClauses().SetLimit(l)
224 c2 := c.ClearLimit()
225
226 ucs.True(c.HasLimit())
227
228 ucs.False(c2.HasLimit())
229 }
230
231 func (ucs *updateClausesSuite) TestSetLimit() {
232 l := 1
233 l2 := 2
234
235 c := exp.NewUpdateClauses().SetLimit(l)
236 c2 := c.SetLimit(2)
237
238 ucs.Equal(l, c.Limit())
239
240 ucs.Equal(l2, c2.Limit())
241 }
242
243 func (ucs *updateClausesSuite) TestCommonTables() {
244 cte := exp.NewCommonTableExpression(true, "test", newTestAppendableExpression(`SELECT * FROM "foo"`, []interface{}{}))
245
246 c := exp.NewUpdateClauses()
247 c2 := c.CommonTablesAppend(cte)
248
249 ucs.Nil(c.CommonTables())
250
251 ucs.Equal([]exp.CommonTableExpression{cte}, c2.CommonTables())
252 }
253
254 func (ucs *updateClausesSuite) TestAddCommonTablesAppend() {
255 cte := exp.NewCommonTableExpression(true, "test", testSQLExpression("test_cte"))
256 cte2 := exp.NewCommonTableExpression(true, "test", testSQLExpression("test_cte2"))
257
258 c := exp.NewUpdateClauses().CommonTablesAppend(cte)
259 c2 := c.CommonTablesAppend(cte2)
260
261 ucs.Equal([]exp.CommonTableExpression{cte}, c.CommonTables())
262
263 ucs.Equal([]exp.CommonTableExpression{cte, cte2}, c2.CommonTables())
264 }
265
266 func (ucs *updateClausesSuite) TestReturning() {
267 cl := exp.NewColumnListExpression(exp.NewIdentifierExpression("", "", "col"))
268
269 c := exp.NewUpdateClauses()
270 c2 := c.SetReturning(cl)
271
272 ucs.Nil(c.Returning())
273
274 ucs.Equal(cl, c2.Returning())
275 }
276
277 func (ucs *updateClausesSuite) TestHasReturning() {
278 cl := exp.NewColumnListExpression(exp.NewIdentifierExpression("", "", "col"))
279
280 c := exp.NewUpdateClauses()
281 c2 := c.SetReturning(cl)
282
283 ucs.False(c.HasReturning())
284
285 ucs.True(c2.HasReturning())
286 }
287
288 func (ucs *updateClausesSuite) TestSetReturning() {
289 cl := exp.NewColumnListExpression(exp.NewIdentifierExpression("", "", "col"))
290 cl2 := exp.NewColumnListExpression(exp.NewIdentifierExpression("", "", "col2"))
291
292 c := exp.NewUpdateClauses().SetReturning(cl)
293 c2 := c.SetReturning(cl2)
294
295 ucs.Equal(cl, c.Returning())
296
297 ucs.Equal(cl2, c2.Returning())
298 }
299
View as plain text