28
28
29
29
from conftest import (
30
30
setup_table ,
31
+ sqlalchemy_version ,
31
32
sqlalchemy_1_3_or_higher ,
32
33
sqlalchemy_1_4_or_higher ,
33
34
sqlalchemy_before_1_4 ,
@@ -214,18 +215,6 @@ def test_disable_quote(faux_conn):
214
215
assert faux_conn .test_data ["execute" ][- 1 ][0 ] == ("SELECT `t`.foo \n FROM `t`" )
215
216
216
217
217
- def _normalize_in_params (query , params ):
218
- # We have to normalize parameter names, because they
219
- # change with sqlalchemy versions.
220
- newnames = sorted (
221
- ((p , f"p_{ i } " ) for i , p in enumerate (sorted (params ))), key = lambda i : - len (i [0 ])
222
- )
223
- for old , new in newnames :
224
- query = query .replace (old , new )
225
-
226
- return query , {new : params [old ] for old , new in newnames }
227
-
228
-
229
218
@sqlalchemy_before_1_4
230
219
def test_select_in_lit_13 (faux_conn ):
231
220
[[isin ]] = faux_conn .execute (
@@ -240,66 +229,74 @@ def test_select_in_lit_13(faux_conn):
240
229
241
230
242
231
@sqlalchemy_1_4_or_higher
243
- def test_select_in_lit (faux_conn ):
244
- [[isin ]] = faux_conn .execute (
245
- sqlalchemy .select ([sqlalchemy .literal (1 ).in_ ([1 , 2 , 3 ])])
246
- )
247
- assert isin
248
- assert _normalize_in_params (* faux_conn .test_data ["execute" ][- 1 ]) == (
249
- "SELECT %(p_0:INT64)s IN "
250
- "UNNEST([ %(p_1:INT64)s, %(p_2:INT64)s, %(p_3:INT64)s ]) AS `anon_1`" ,
251
- {"p_1" : 1 , "p_2" : 2 , "p_3" : 3 , "p_0" : 1 },
232
+ def test_select_in_lit (faux_conn , last_query ):
233
+ faux_conn .execute (sqlalchemy .select ([sqlalchemy .literal (1 ).in_ ([1 , 2 , 3 ])]))
234
+ last_query (
235
+ "SELECT %(param_1:INT64)s IN UNNEST(%(param_2:INT64)s) AS `anon_1`" ,
236
+ {"param_1" : 1 , "param_2" : [1 , 2 , 3 ]},
252
237
)
253
238
254
239
255
- def test_select_in_param (faux_conn ):
240
+ def test_select_in_param (faux_conn , last_query ):
256
241
[[isin ]] = faux_conn .execute (
257
242
sqlalchemy .select (
258
243
[sqlalchemy .literal (1 ).in_ (sqlalchemy .bindparam ("q" , expanding = True ))]
259
244
),
260
245
dict (q = [1 , 2 , 3 ]),
261
246
)
262
- assert isin
263
- assert faux_conn .test_data ["execute" ][- 1 ] == (
264
- "SELECT %(param_1:INT64)s IN UNNEST("
265
- "[ %(q_1:INT64)s, %(q_2:INT64)s, %(q_3:INT64)s ]"
266
- ") AS `anon_1`" ,
267
- {"param_1" : 1 , "q_1" : 1 , "q_2" : 2 , "q_3" : 3 },
268
- )
247
+ if sqlalchemy_version >= packaging .version .parse ("1.4" ):
248
+ last_query (
249
+ "SELECT %(param_1:INT64)s IN UNNEST(%(q:INT64)s) AS `anon_1`" ,
250
+ {"param_1" : 1 , "q" : [1 , 2 , 3 ]},
251
+ )
252
+ else :
253
+ assert isin
254
+ last_query (
255
+ "SELECT %(param_1:INT64)s IN UNNEST("
256
+ "[ %(q_1:INT64)s, %(q_2:INT64)s, %(q_3:INT64)s ]"
257
+ ") AS `anon_1`" ,
258
+ {"param_1" : 1 , "q_1" : 1 , "q_2" : 2 , "q_3" : 3 },
259
+ )
269
260
270
261
271
- def test_select_in_param1 (faux_conn ):
262
+ def test_select_in_param1 (faux_conn , last_query ):
272
263
[[isin ]] = faux_conn .execute (
273
264
sqlalchemy .select (
274
265
[sqlalchemy .literal (1 ).in_ (sqlalchemy .bindparam ("q" , expanding = True ))]
275
266
),
276
267
dict (q = [1 ]),
277
268
)
278
- assert isin
279
- assert faux_conn .test_data ["execute" ][- 1 ] == (
280
- "SELECT %(param_1:INT64)s IN UNNEST(" "[ %(q_1:INT64)s ]" ") AS `anon_1`" ,
281
- {"param_1" : 1 , "q_1" : 1 },
282
- )
269
+ if sqlalchemy_version >= packaging .version .parse ("1.4" ):
270
+ last_query (
271
+ "SELECT %(param_1:INT64)s IN UNNEST(%(q:INT64)s) AS `anon_1`" ,
272
+ {"param_1" : 1 , "q" : [1 ]},
273
+ )
274
+ else :
275
+ assert isin
276
+ last_query (
277
+ "SELECT %(param_1:INT64)s IN UNNEST(" "[ %(q_1:INT64)s ]" ") AS `anon_1`" ,
278
+ {"param_1" : 1 , "q_1" : 1 },
279
+ )
283
280
284
281
285
282
@sqlalchemy_1_3_or_higher
286
- def test_select_in_param_empty (faux_conn ):
283
+ def test_select_in_param_empty (faux_conn , last_query ):
287
284
[[isin ]] = faux_conn .execute (
288
285
sqlalchemy .select (
289
286
[sqlalchemy .literal (1 ).in_ (sqlalchemy .bindparam ("q" , expanding = True ))]
290
287
),
291
288
dict (q = []),
292
289
)
293
- assert not isin
294
- assert faux_conn .test_data ["execute" ][- 1 ] == (
295
- "SELECT %(param_1:INT64)s IN(NULL) AND (1 != 1) AS `anon_1`"
296
- if (
297
- packaging .version .parse (sqlalchemy .__version__ )
298
- >= packaging .version .parse ("1.4" )
290
+ if sqlalchemy_version >= packaging .version .parse ("1.4" ):
291
+ last_query (
292
+ "SELECT %(param_1:INT64)s IN UNNEST(%(q:INT64)s) AS `anon_1`" ,
293
+ {"param_1" : 1 , "q" : []},
294
+ )
295
+ else :
296
+ assert not isin
297
+ last_query (
298
+ "SELECT %(param_1:INT64)s IN UNNEST([ ]) AS `anon_1`" , {"param_1" : 1 }
299
299
)
300
- else "SELECT %(param_1:INT64)s IN UNNEST([ ]) AS `anon_1`" ,
301
- {"param_1" : 1 },
302
- )
303
300
304
301
305
302
@sqlalchemy_before_1_4
@@ -316,53 +313,54 @@ def test_select_notin_lit13(faux_conn):
316
313
317
314
318
315
@sqlalchemy_1_4_or_higher
319
- def test_select_notin_lit (faux_conn ):
320
- [[isnotin ]] = faux_conn .execute (
321
- sqlalchemy .select ([sqlalchemy .literal (0 ).notin_ ([1 , 2 , 3 ])])
316
+ def test_select_notin_lit (faux_conn , last_query ):
317
+ faux_conn .execute (sqlalchemy .select ([sqlalchemy .literal (0 ).notin_ ([1 , 2 , 3 ])]))
318
+ last_query (
319
+ "SELECT (%(param_1:INT64)s NOT IN UNNEST(%(param_2:INT64)s)) AS `anon_1`" ,
320
+ {"param_1" : 0 , "param_2" : [1 , 2 , 3 ]},
322
321
)
323
- assert isnotin
324
322
325
- assert _normalize_in_params (* faux_conn .test_data ["execute" ][- 1 ]) == (
326
- "SELECT (%(p_0:INT64)s NOT IN "
327
- "UNNEST([ %(p_1:INT64)s, %(p_2:INT64)s, %(p_3:INT64)s ])) AS `anon_1`" ,
328
- {"p_0" : 0 , "p_1" : 1 , "p_2" : 2 , "p_3" : 3 },
329
- )
330
323
331
-
332
- def test_select_notin_param (faux_conn ):
324
+ def test_select_notin_param (faux_conn , last_query ):
333
325
[[isnotin ]] = faux_conn .execute (
334
326
sqlalchemy .select (
335
327
[sqlalchemy .literal (1 ).notin_ (sqlalchemy .bindparam ("q" , expanding = True ))]
336
328
),
337
329
dict (q = [1 , 2 , 3 ]),
338
330
)
339
- assert not isnotin
340
- assert faux_conn .test_data ["execute" ][- 1 ] == (
341
- "SELECT (%(param_1:INT64)s NOT IN UNNEST("
342
- "[ %(q_1:INT64)s, %(q_2:INT64)s, %(q_3:INT64)s ]"
343
- ")) AS `anon_1`" ,
344
- {"param_1" : 1 , "q_1" : 1 , "q_2" : 2 , "q_3" : 3 },
345
- )
331
+ if sqlalchemy_version >= packaging .version .parse ("1.4" ):
332
+ last_query (
333
+ "SELECT (%(param_1:INT64)s NOT IN UNNEST(%(q:INT64)s)) AS `anon_1`" ,
334
+ {"param_1" : 1 , "q" : [1 , 2 , 3 ]},
335
+ )
336
+ else :
337
+ assert not isnotin
338
+ last_query (
339
+ "SELECT (%(param_1:INT64)s NOT IN UNNEST("
340
+ "[ %(q_1:INT64)s, %(q_2:INT64)s, %(q_3:INT64)s ]"
341
+ ")) AS `anon_1`" ,
342
+ {"param_1" : 1 , "q_1" : 1 , "q_2" : 2 , "q_3" : 3 },
343
+ )
346
344
347
345
348
346
@sqlalchemy_1_3_or_higher
349
- def test_select_notin_param_empty (faux_conn ):
347
+ def test_select_notin_param_empty (faux_conn , last_query ):
350
348
[[isnotin ]] = faux_conn .execute (
351
349
sqlalchemy .select (
352
350
[sqlalchemy .literal (1 ).notin_ (sqlalchemy .bindparam ("q" , expanding = True ))]
353
351
),
354
352
dict (q = []),
355
353
)
356
- assert isnotin
357
- assert faux_conn .test_data ["execute" ][- 1 ] == (
358
- "SELECT (%(param_1:INT64)s NOT IN(NULL) OR (1 = 1)) AS `anon_1`"
359
- if (
360
- packaging .version .parse (sqlalchemy .__version__ )
361
- >= packaging .version .parse ("1.4" )
354
+ if sqlalchemy_version >= packaging .version .parse ("1.4" ):
355
+ last_query (
356
+ "SELECT (%(param_1:INT64)s NOT IN UNNEST(%(q:INT64)s)) AS `anon_1`" ,
357
+ {"param_1" : 1 , "q" : []},
358
+ )
359
+ else :
360
+ assert isnotin
361
+ last_query (
362
+ "SELECT (%(param_1:INT64)s NOT IN UNNEST([ ])) AS `anon_1`" , {"param_1" : 1 }
362
363
)
363
- else "SELECT (%(param_1:INT64)s NOT IN UNNEST([ ])) AS `anon_1`" ,
364
- {"param_1" : 1 },
365
- )
366
364
367
365
368
366
def test_literal_binds_kwarg_with_an_IN_operator_252 (faux_conn ):
0 commit comments