python-sql 1.6.0__py3-none-any.whl → 1.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,10 +6,10 @@ from array import array
6
6
 
7
7
  from sql import Flavor, Literal, Null, Table
8
8
  from sql.operators import (
9
- Abs, And, Between, Div, Equal, Exists, FloorDiv, Greater, GreaterEqual,
10
- ILike, In, Is, IsDistinct, IsNot, IsNotDistinct, Less, LessEqual, Like,
11
- LShift, Mod, Mul, Neg, Not, NotBetween, NotEqual, NotILike, NotIn, NotLike,
12
- Operator, Or, Pos, Pow, RShift, Sub)
9
+ Abs, And, Any, Between, Div, Equal, Exists, FloorDiv, Greater,
10
+ GreaterEqual, ILike, In, Is, IsDistinct, IsNot, IsNotDistinct, Less,
11
+ LessEqual, Like, LShift, Mod, Mul, Neg, Not, NotBetween, NotEqual,
12
+ NotILike, NotIn, NotLike, Operator, Or, Pos, Pow, RShift, Sub)
13
13
 
14
14
 
15
15
  class TestOperators(unittest.TestCase):
@@ -25,34 +25,34 @@ class TestOperators(unittest.TestCase):
25
25
  def test_and(self):
26
26
  for and_ in [And((self.table.c1, self.table.c2)),
27
27
  self.table.c1 & self.table.c2]:
28
- self.assertEqual(str(and_), '("c1" AND "c2")')
28
+ self.assertEqual(str(and_), '"c1" AND "c2"')
29
29
  self.assertEqual(and_.params, ())
30
30
 
31
31
  and_ = And((Literal(True), self.table.c2))
32
- self.assertEqual(str(and_), '(%s AND "c2")')
32
+ self.assertEqual(str(and_), '%s AND "c2"')
33
33
  self.assertEqual(and_.params, (True,))
34
34
 
35
35
  and_ = And((Literal(True), 'foo'))
36
- self.assertEqual(str(and_), '(%s AND %s)')
36
+ self.assertEqual(str(and_), '%s AND %s')
37
37
  self.assertEqual(and_.params, (True, 'foo'))
38
38
 
39
39
  def test_operator_operators(self):
40
40
  and_ = And((Literal(True), self.table.c1))
41
41
  and2 = and_ & And((Literal(True), self.table.c2))
42
- self.assertEqual(str(and2), '((%s AND "c1") AND %s AND "c2")')
42
+ self.assertEqual(str(and2), '(%s AND "c1") AND %s AND "c2"')
43
43
  self.assertEqual(and2.params, (True, True))
44
44
 
45
45
  and3 = and_ & Literal(True)
46
- self.assertEqual(str(and3), '((%s AND "c1") AND %s)')
46
+ self.assertEqual(str(and3), '(%s AND "c1") AND %s')
47
47
  self.assertEqual(and3.params, (True, True))
48
48
 
49
49
  or_ = Or((Literal(True), self.table.c1))
50
50
  or2 = or_ | Or((Literal(True), self.table.c2))
51
- self.assertEqual(str(or2), '((%s OR "c1") OR %s OR "c2")')
51
+ self.assertEqual(str(or2), '(%s OR "c1") OR %s OR "c2"')
52
52
  self.assertEqual(or2.params, (True, True))
53
53
 
54
54
  or3 = or_ | Literal(True)
55
- self.assertEqual(str(or3), '((%s OR "c1") OR %s)')
55
+ self.assertEqual(str(or3), '(%s OR "c1") OR %s')
56
56
  self.assertEqual(or3.params, (True, True))
57
57
 
58
58
  def test_operator_compat_column(self):
@@ -63,152 +63,152 @@ class TestOperators(unittest.TestCase):
63
63
  def test_or(self):
64
64
  for or_ in [Or((self.table.c1, self.table.c2)),
65
65
  self.table.c1 | self.table.c2]:
66
- self.assertEqual(str(or_), '("c1" OR "c2")')
66
+ self.assertEqual(str(or_), '"c1" OR "c2"')
67
67
  self.assertEqual(or_.params, ())
68
68
 
69
69
  def test_not(self):
70
70
  for not_ in [Not(self.table.c), ~self.table.c]:
71
- self.assertEqual(str(not_), '(NOT "c")')
71
+ self.assertEqual(str(not_), 'NOT "c"')
72
72
  self.assertEqual(not_.params, ())
73
73
 
74
74
  not_ = Not(Literal(False))
75
- self.assertEqual(str(not_), '(NOT %s)')
75
+ self.assertEqual(str(not_), 'NOT %s')
76
76
  self.assertEqual(not_.params, (False,))
77
77
 
78
78
  def test_neg(self):
79
79
  for neg in [Neg(self.table.c1), -self.table.c1]:
80
- self.assertEqual(str(neg), '(- "c1")')
80
+ self.assertEqual(str(neg), '- "c1"')
81
81
  self.assertEqual(neg.params, ())
82
82
 
83
83
  def test_pos(self):
84
84
  for pos in [Pos(self.table.c1), +self.table.c1]:
85
- self.assertEqual(str(pos), '(+ "c1")')
85
+ self.assertEqual(str(pos), '+ "c1"')
86
86
  self.assertEqual(pos.params, ())
87
87
 
88
88
  def test_less(self):
89
89
  for less in [Less(self.table.c1, self.table.c2),
90
90
  self.table.c1 < self.table.c2,
91
91
  ~GreaterEqual(self.table.c1, self.table.c2)]:
92
- self.assertEqual(str(less), '("c1" < "c2")')
92
+ self.assertEqual(str(less), '"c1" < "c2"')
93
93
  self.assertEqual(less.params, ())
94
94
 
95
95
  less = Less(Literal(0), self.table.c2)
96
- self.assertEqual(str(less), '(%s < "c2")')
96
+ self.assertEqual(str(less), '%s < "c2"')
97
97
  self.assertEqual(less.params, (0,))
98
98
 
99
99
  def test_greater(self):
100
100
  for greater in [Greater(self.table.c1, self.table.c2),
101
101
  self.table.c1 > self.table.c2,
102
102
  ~LessEqual(self.table.c1, self.table.c2)]:
103
- self.assertEqual(str(greater), '("c1" > "c2")')
103
+ self.assertEqual(str(greater), '"c1" > "c2"')
104
104
  self.assertEqual(greater.params, ())
105
105
 
106
106
  def test_less_equal(self):
107
107
  for less in [LessEqual(self.table.c1, self.table.c2),
108
108
  self.table.c1 <= self.table.c2,
109
109
  ~Greater(self.table.c1, self.table.c2)]:
110
- self.assertEqual(str(less), '("c1" <= "c2")')
110
+ self.assertEqual(str(less), '"c1" <= "c2"')
111
111
  self.assertEqual(less.params, ())
112
112
 
113
113
  def test_greater_equal(self):
114
114
  for greater in [GreaterEqual(self.table.c1, self.table.c2),
115
115
  self.table.c1 >= self.table.c2,
116
116
  ~Less(self.table.c1, self.table.c2)]:
117
- self.assertEqual(str(greater), '("c1" >= "c2")')
117
+ self.assertEqual(str(greater), '"c1" >= "c2"')
118
118
  self.assertEqual(greater.params, ())
119
119
 
120
120
  def test_equal(self):
121
121
  for equal in [Equal(self.table.c1, self.table.c2),
122
122
  self.table.c1 == self.table.c2,
123
123
  ~NotEqual(self.table.c1, self.table.c2)]:
124
- self.assertEqual(str(equal), '("c1" = "c2")')
124
+ self.assertEqual(str(equal), '"c1" = "c2"')
125
125
  self.assertEqual(equal.params, ())
126
126
 
127
127
  equal = Equal(Literal('foo'), Literal('bar'))
128
- self.assertEqual(str(equal), '(%s = %s)')
128
+ self.assertEqual(str(equal), '%s = %s')
129
129
  self.assertEqual(equal.params, ('foo', 'bar'))
130
130
 
131
131
  equal = Equal(self.table.c1, Null)
132
- self.assertEqual(str(equal), '("c1" IS NULL)')
132
+ self.assertEqual(str(equal), '"c1" IS NULL')
133
133
  self.assertEqual(equal.params, ())
134
134
 
135
135
  equal = Equal(Literal('test'), Null)
136
- self.assertEqual(str(equal), '(%s IS NULL)')
136
+ self.assertEqual(str(equal), '%s IS NULL')
137
137
  self.assertEqual(equal.params, ('test',))
138
138
 
139
139
  equal = Equal(Null, self.table.c1)
140
- self.assertEqual(str(equal), '("c1" IS NULL)')
140
+ self.assertEqual(str(equal), '"c1" IS NULL')
141
141
  self.assertEqual(equal.params, ())
142
142
 
143
143
  equal = Equal(Null, Literal('test'))
144
- self.assertEqual(str(equal), '(%s IS NULL)')
144
+ self.assertEqual(str(equal), '%s IS NULL')
145
145
  self.assertEqual(equal.params, ('test',))
146
146
 
147
147
  def test_not_equal(self):
148
148
  for equal in [NotEqual(self.table.c1, self.table.c2),
149
149
  self.table.c1 != self.table.c2,
150
150
  ~Equal(self.table.c1, self.table.c2)]:
151
- self.assertEqual(str(equal), '("c1" != "c2")')
151
+ self.assertEqual(str(equal), '"c1" != "c2"')
152
152
  self.assertEqual(equal.params, ())
153
153
 
154
154
  equal = NotEqual(self.table.c1, Null)
155
- self.assertEqual(str(equal), '("c1" IS NOT NULL)')
155
+ self.assertEqual(str(equal), '"c1" IS NOT NULL')
156
156
  self.assertEqual(equal.params, ())
157
157
 
158
158
  equal = NotEqual(Null, self.table.c1)
159
- self.assertEqual(str(equal), '("c1" IS NOT NULL)')
159
+ self.assertEqual(str(equal), '"c1" IS NOT NULL')
160
160
  self.assertEqual(equal.params, ())
161
161
 
162
162
  def test_between(self):
163
163
  for between in [Between(self.table.c1, 1, 2),
164
164
  ~NotBetween(self.table.c1, 1, 2)]:
165
- self.assertEqual(str(between), '("c1" BETWEEN %s AND %s)')
165
+ self.assertEqual(str(between), '"c1" BETWEEN %s AND %s')
166
166
  self.assertEqual(between.params, (1, 2))
167
167
 
168
168
  between = Between(
169
169
  self.table.c1, self.table.c2, self.table.c3, symmetric=True)
170
170
  self.assertEqual(
171
- str(between), '("c1" BETWEEN SYMMETRIC "c2" AND "c3")')
171
+ str(between), '"c1" BETWEEN SYMMETRIC "c2" AND "c3"')
172
172
  self.assertEqual(between.params, ())
173
173
 
174
174
  def test_not_between(self):
175
175
  for between in [NotBetween(self.table.c1, 1, 2),
176
176
  ~Between(self.table.c1, 1, 2)]:
177
- self.assertEqual(str(between), '("c1" NOT BETWEEN %s AND %s)')
177
+ self.assertEqual(str(between), '"c1" NOT BETWEEN %s AND %s')
178
178
  self.assertEqual(between.params, (1, 2))
179
179
 
180
180
  between = NotBetween(
181
181
  self.table.c1, self.table.c2, self.table.c3, symmetric=True)
182
182
  self.assertEqual(
183
- str(between), '("c1" NOT BETWEEN SYMMETRIC "c2" AND "c3")')
183
+ str(between), '"c1" NOT BETWEEN SYMMETRIC "c2" AND "c3"')
184
184
  self.assertEqual(between.params, ())
185
185
 
186
186
  def test_is_distinct(self):
187
187
  for distinct in [IsDistinct(self.table.c1, self.table.c2),
188
188
  ~IsNotDistinct(self.table.c1, self.table.c2)]:
189
- self.assertEqual(str(distinct), '("c1" IS DISTINCT FROM "c2")')
189
+ self.assertEqual(str(distinct), '"c1" IS DISTINCT FROM "c2"')
190
190
  self.assertEqual(distinct.params, ())
191
191
 
192
192
  def test_is_not_distinct(self):
193
193
  for distinct in [IsNotDistinct(self.table.c1, self.table.c2),
194
194
  ~IsDistinct(self.table.c1, self.table.c2)]:
195
- self.assertEqual(str(distinct), '("c1" IS NOT DISTINCT FROM "c2")')
195
+ self.assertEqual(str(distinct), '"c1" IS NOT DISTINCT FROM "c2"')
196
196
  self.assertEqual(distinct.params, ())
197
197
 
198
198
  def test_is(self):
199
199
  for is_ in [Is(self.table.c1, None),
200
200
  ~IsNot(self.table.c1, None)]:
201
- self.assertEqual(str(is_), '("c1" IS UNKNOWN)')
201
+ self.assertEqual(str(is_), '"c1" IS UNKNOWN')
202
202
  self.assertEqual(is_.params, ())
203
203
 
204
204
  for is_ in [Is(self.table.c1, True),
205
205
  ~IsNot(self.table.c1, True)]:
206
- self.assertEqual(str(is_), '("c1" IS TRUE)')
206
+ self.assertEqual(str(is_), '"c1" IS TRUE')
207
207
  self.assertEqual(is_.params, ())
208
208
 
209
209
  for is_ in [Is(self.table.c1, False),
210
210
  ~IsNot(self.table.c1, False)]:
211
- self.assertEqual(str(is_), '("c1" IS FALSE)')
211
+ self.assertEqual(str(is_), '"c1" IS FALSE')
212
212
  self.assertEqual(is_.params, ())
213
213
 
214
214
  def test_is_invalid_right(self):
@@ -218,41 +218,41 @@ class TestOperators(unittest.TestCase):
218
218
  def test_is_not(self):
219
219
  for is_ in [IsNot(self.table.c1, None),
220
220
  ~Is(self.table.c1, None)]:
221
- self.assertEqual(str(is_), '("c1" IS NOT UNKNOWN)')
221
+ self.assertEqual(str(is_), '"c1" IS NOT UNKNOWN')
222
222
  self.assertEqual(is_.params, ())
223
223
 
224
224
  for is_ in [IsNot(self.table.c1, True),
225
225
  ~Is(self.table.c1, True)]:
226
- self.assertEqual(str(is_), '("c1" IS NOT TRUE)')
226
+ self.assertEqual(str(is_), '"c1" IS NOT TRUE')
227
227
  self.assertEqual(is_.params, ())
228
228
 
229
229
  for is_ in [IsNot(self.table.c1, False),
230
230
  ~Is(self.table.c1, False)]:
231
- self.assertEqual(str(is_), '("c1" IS NOT FALSE)')
231
+ self.assertEqual(str(is_), '"c1" IS NOT FALSE')
232
232
  self.assertEqual(is_.params, ())
233
233
 
234
234
  def test_sub(self):
235
235
  for sub in [Sub(self.table.c1, self.table.c2),
236
236
  self.table.c1 - self.table.c2]:
237
- self.assertEqual(str(sub), '("c1" - "c2")')
237
+ self.assertEqual(str(sub), '"c1" - "c2"')
238
238
  self.assertEqual(sub.params, ())
239
239
 
240
240
  def test_mul(self):
241
241
  for mul in [Mul(self.table.c1, self.table.c2),
242
242
  self.table.c1 * self.table.c2]:
243
- self.assertEqual(str(mul), '("c1" * "c2")')
243
+ self.assertEqual(str(mul), '"c1" * "c2"')
244
244
  self.assertEqual(mul.params, ())
245
245
 
246
246
  def test_div(self):
247
247
  for div in [Div(self.table.c1, self.table.c2),
248
248
  self.table.c1 / self.table.c2]:
249
- self.assertEqual(str(div), '("c1" / "c2")')
249
+ self.assertEqual(str(div), '"c1" / "c2"')
250
250
  self.assertEqual(div.params, ())
251
251
 
252
252
  def test_mod(self):
253
253
  for mod in [Mod(self.table.c1, self.table.c2),
254
254
  self.table.c1 % self.table.c2]:
255
- self.assertEqual(str(mod), '("c1" %% "c2")')
255
+ self.assertEqual(str(mod), '"c1" %% "c2"')
256
256
  self.assertEqual(mod.params, ())
257
257
 
258
258
  def test_mod_paramstyle(self):
@@ -260,7 +260,7 @@ class TestOperators(unittest.TestCase):
260
260
  Flavor.set(flavor)
261
261
  try:
262
262
  mod = Mod(self.table.c1, self.table.c2)
263
- self.assertEqual(str(mod), '("c1" %% "c2")')
263
+ self.assertEqual(str(mod), '"c1" %% "c2"')
264
264
  self.assertEqual(mod.params, ())
265
265
  finally:
266
266
  Flavor.set(Flavor())
@@ -269,7 +269,7 @@ class TestOperators(unittest.TestCase):
269
269
  Flavor.set(flavor)
270
270
  try:
271
271
  mod = Mod(self.table.c1, self.table.c2)
272
- self.assertEqual(str(mod), '("c1" % "c2")')
272
+ self.assertEqual(str(mod), '"c1" % "c2"')
273
273
  self.assertEqual(mod.params, ())
274
274
  finally:
275
275
  Flavor.set(Flavor())
@@ -277,24 +277,24 @@ class TestOperators(unittest.TestCase):
277
277
  def test_pow(self):
278
278
  for pow_ in [Pow(self.table.c1, self.table.c2),
279
279
  self.table.c1 ** self.table.c2]:
280
- self.assertEqual(str(pow_), '("c1" ^ "c2")')
280
+ self.assertEqual(str(pow_), '"c1" ^ "c2"')
281
281
  self.assertEqual(pow_.params, ())
282
282
 
283
283
  def test_abs(self):
284
284
  for abs_ in [Abs(self.table.c1), abs(self.table.c1)]:
285
- self.assertEqual(str(abs_), '(@ "c1")')
285
+ self.assertEqual(str(abs_), '@ "c1"')
286
286
  self.assertEqual(abs_.params, ())
287
287
 
288
288
  def test_lshift(self):
289
289
  for lshift in [LShift(self.table.c1, 2),
290
290
  self.table.c1 << 2]:
291
- self.assertEqual(str(lshift), '("c1" << %s)')
291
+ self.assertEqual(str(lshift), '"c1" << %s')
292
292
  self.assertEqual(lshift.params, (2,))
293
293
 
294
294
  def test_rshift(self):
295
295
  for rshift in [RShift(self.table.c1, 2),
296
296
  self.table.c1 >> 2]:
297
- self.assertEqual(str(rshift), '("c1" >> %s)')
297
+ self.assertEqual(str(rshift), '"c1" >> %s')
298
298
  self.assertEqual(rshift.params, (2,))
299
299
 
300
300
  def test_like(self):
@@ -302,12 +302,12 @@ class TestOperators(unittest.TestCase):
302
302
  self.table.c1.like('foo'),
303
303
  ~NotLike(self.table.c1, 'foo'),
304
304
  ~~Like(self.table.c1, 'foo')]:
305
- self.assertEqual(str(like), '("c1" LIKE %s)')
305
+ self.assertEqual(str(like), '"c1" LIKE %s')
306
306
  self.assertEqual(like.params, ('foo',))
307
307
 
308
308
  def test_like_escape(self):
309
309
  like = Like(self.table.c1, 'foo', escape='$')
310
- self.assertEqual(str(like), '("c1" LIKE %s ESCAPE %s)')
310
+ self.assertEqual(str(like), '"c1" LIKE %s ESCAPE %s')
311
311
  self.assertEqual(like.params, ('foo', '$'))
312
312
 
313
313
  def test_like_escape_empty_false(self):
@@ -315,7 +315,7 @@ class TestOperators(unittest.TestCase):
315
315
  Flavor.set(flavor)
316
316
  try:
317
317
  like = Like(self.table.c1, 'foo')
318
- self.assertEqual(str(like), '("c1" LIKE %s)')
318
+ self.assertEqual(str(like), '"c1" LIKE %s')
319
319
  self.assertEqual(like.params, ('foo',))
320
320
  finally:
321
321
  Flavor.set(Flavor())
@@ -325,7 +325,7 @@ class TestOperators(unittest.TestCase):
325
325
  Flavor.set(flavor)
326
326
  try:
327
327
  like = Like(self.table.c1, 'foo')
328
- self.assertEqual(str(like), '("c1" LIKE %s ESCAPE %s)')
328
+ self.assertEqual(str(like), '"c1" LIKE %s ESCAPE %s')
329
329
  self.assertEqual(like.params, ('foo', ''))
330
330
  finally:
331
331
  Flavor.set(Flavor())
@@ -341,7 +341,7 @@ class TestOperators(unittest.TestCase):
341
341
  for like in [ILike(self.table.c1, 'foo'),
342
342
  self.table.c1.ilike('foo'),
343
343
  ~NotILike(self.table.c1, 'foo')]:
344
- self.assertEqual(str(like), '("c1" ILIKE %s)')
344
+ self.assertEqual(str(like), '"c1" ILIKE %s')
345
345
  self.assertEqual(like.params, ('foo',))
346
346
  finally:
347
347
  Flavor.set(Flavor())
@@ -351,7 +351,7 @@ class TestOperators(unittest.TestCase):
351
351
  try:
352
352
  like = ILike(self.table.c1, 'foo')
353
353
  self.assertEqual(
354
- str(like), '(UPPER("c1") LIKE UPPER(%s))')
354
+ str(like), 'UPPER("c1") LIKE UPPER(%s)')
355
355
  self.assertEqual(like.params, ('foo',))
356
356
  finally:
357
357
  Flavor.set(Flavor())
@@ -362,7 +362,7 @@ class TestOperators(unittest.TestCase):
362
362
  try:
363
363
  for like in [NotILike(self.table.c1, 'foo'),
364
364
  ~self.table.c1.ilike('foo')]:
365
- self.assertEqual(str(like), '("c1" NOT ILIKE %s)')
365
+ self.assertEqual(str(like), '"c1" NOT ILIKE %s')
366
366
  self.assertEqual(like.params, ('foo',))
367
367
  finally:
368
368
  Flavor.set(Flavor())
@@ -372,7 +372,7 @@ class TestOperators(unittest.TestCase):
372
372
  try:
373
373
  like = NotILike(self.table.c1, 'foo')
374
374
  self.assertEqual(
375
- str(like), '(UPPER("c1") NOT LIKE UPPER(%s))')
375
+ str(like), 'UPPER("c1") NOT LIKE UPPER(%s)')
376
376
  self.assertEqual(like.params, ('foo',))
377
377
  finally:
378
378
  Flavor.set(Flavor())
@@ -381,32 +381,31 @@ class TestOperators(unittest.TestCase):
381
381
  for in_ in [In(self.table.c1, [self.table.c2, 1, Null]),
382
382
  ~NotIn(self.table.c1, [self.table.c2, 1, Null]),
383
383
  ~~In(self.table.c1, [self.table.c2, 1, Null])]:
384
- self.assertEqual(str(in_), '("c1" IN ("c2", %s, %s))')
384
+ self.assertEqual(str(in_), '"c1" IN ("c2", %s, %s)')
385
385
  self.assertEqual(in_.params, (1, None))
386
386
 
387
387
  t2 = Table('t2')
388
388
  in_ = In(self.table.c1, t2.select(t2.c2))
389
389
  self.assertEqual(str(in_),
390
- '("c1" IN (SELECT "a"."c2" FROM "t2" AS "a"))')
390
+ '"c1" IN (SELECT "a"."c2" FROM "t2" AS "a")')
391
391
  self.assertEqual(in_.params, ())
392
392
 
393
393
  in_ = In(self.table.c1, t2.select(t2.c2) | t2.select(t2.c3))
394
394
  self.assertEqual(str(in_),
395
- '("c1" IN (SELECT "a"."c2" FROM "t2" AS "a" '
396
- 'UNION SELECT "a"."c3" FROM "t2" AS "a"))')
395
+ '"c1" IN (SELECT "a"."c2" FROM "t2" AS "a" '
396
+ 'UNION SELECT "a"."c3" FROM "t2" AS "a")')
397
397
  self.assertEqual(in_.params, ())
398
398
 
399
399
  in_ = In(self.table.c1, array('l', list(range(10))))
400
400
  self.assertEqual(str(in_),
401
- '("c1" IN (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s))')
401
+ '"c1" IN (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)')
402
402
  self.assertEqual(in_.params, tuple(range(10)))
403
403
 
404
404
  def test_exists(self):
405
405
  exists = Exists(self.table.select(self.table.c1,
406
406
  where=self.table.c1 == 1))
407
407
  self.assertEqual(str(exists),
408
- '(EXISTS (SELECT "a"."c1" FROM "t" AS "a" '
409
- 'WHERE ("a"."c1" = %s)))')
408
+ 'EXISTS (SELECT "a"."c1" FROM "t" AS "a" WHERE "a"."c1" = %s)')
410
409
  self.assertEqual(exists.params, (1,))
411
410
 
412
411
  def test_floordiv(self):
@@ -419,3 +418,21 @@ class TestOperators(unittest.TestCase):
419
418
  self.assertIn(
420
419
  'FloorDiv operator is deprecated, use Div function',
421
420
  str(w[-1].message))
421
+
422
+ def test_any(self):
423
+ any_ = Any(self.table.select(self.table.c1, where=self.table.c2 == 1))
424
+ self.assertEqual(str(any_),
425
+ 'ANY (SELECT "a"."c1" FROM "t" AS "a" WHERE "a"."c2" = %s)')
426
+ self.assertEqual(any_.params, (1,))
427
+
428
+ for value in [[1, 2, 3], (1, 2, 3), array('l', [1, 2, 3])]:
429
+ with self.subTest(value=value):
430
+ any_ = Any(value)
431
+ self.assertEqual(str(any_), 'ANY (%s)')
432
+ self.assertEqual(any_.params, ([1, 2, 3],))
433
+
434
+ def test_binary_unary(self):
435
+ operator = Equal(self.table.c1, Any([1, 2, 3]))
436
+
437
+ self.assertEqual(str(operator), '"c1" = ANY (%s)')
438
+ self.assertEqual(operator.params, ([1, 2, 3],))
sql/tests/test_order.py CHANGED
@@ -36,17 +36,17 @@ class TestOrder(unittest.TestCase):
36
36
 
37
37
  exp = NullsFirst(self.column)
38
38
  self.assertEqual(str(exp),
39
- 'CASE WHEN ("c" IS NULL) THEN %s ELSE %s END ASC, "c"')
39
+ 'CASE WHEN "c" IS NULL THEN %s ELSE %s END ASC, "c"')
40
40
  self.assertEqual(exp.params, (0, 1))
41
41
 
42
42
  exp = NullsFirst(Desc(self.column))
43
43
  self.assertEqual(str(exp),
44
- 'CASE WHEN ("c" IS NULL) THEN %s ELSE %s END ASC, "c" DESC')
44
+ 'CASE WHEN "c" IS NULL THEN %s ELSE %s END ASC, "c" DESC')
45
45
  self.assertEqual(exp.params, (0, 1))
46
46
 
47
47
  exp = NullsLast(Literal(2))
48
48
  self.assertEqual(str(exp),
49
- 'CASE WHEN (%s IS NULL) THEN %s ELSE %s END ASC, %s')
49
+ 'CASE WHEN %s IS NULL THEN %s ELSE %s END ASC, %s')
50
50
  self.assertEqual(exp.params, (2, 1, 0, 2))
51
51
  finally:
52
52
  Flavor.set(Flavor())