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.
sql/tests/test_select.py CHANGED
@@ -31,7 +31,7 @@ class TestSelect(unittest.TestCase):
31
31
  def test_select3(self):
32
32
  query = self.table.select(where=(self.table.c == 'foo'))
33
33
  self.assertEqual(str(query),
34
- 'SELECT * FROM "t" AS "a" WHERE ("a"."c" = %s)')
34
+ 'SELECT * FROM "t" AS "a" WHERE "a"."c" = %s')
35
35
  self.assertEqual(tuple(query.params), ('foo',))
36
36
 
37
37
  def test_select_iter(self):
@@ -110,7 +110,7 @@ class TestSelect(unittest.TestCase):
110
110
  'SELECT * FROM "t2" AS "c") AS "a"')
111
111
  query1.where = self.table.c == 'foo'
112
112
  self.assertEqual(str(union),
113
- 'SELECT * FROM "t" AS "a" WHERE ("a"."c" = %s) UNION ALL '
113
+ 'SELECT * FROM "t" AS "a" WHERE "a"."c" = %s UNION ALL '
114
114
  'SELECT * FROM "t2" AS "b"')
115
115
  self.assertEqual(tuple(union.params), ('foo',))
116
116
 
@@ -197,7 +197,7 @@ class TestSelect(unittest.TestCase):
197
197
  output = column.as_('c1')
198
198
  query = self.table.select(output, group_by=output)
199
199
  self.assertEqual(str(query),
200
- 'SELECT "a"."c" AS "c1" FROM "t" AS "a" GROUP BY "c1"')
200
+ 'SELECT "a"."c" AS "c1" FROM "t" AS "a" GROUP BY 1')
201
201
  self.assertEqual(tuple(query.params), ())
202
202
 
203
203
  query = self.table.select(Literal('foo'), group_by=Literal('foo'))
@@ -205,6 +205,19 @@ class TestSelect(unittest.TestCase):
205
205
  'SELECT %s FROM "t" AS "a" GROUP BY %s')
206
206
  self.assertEqual(tuple(query.params), ('foo', 'foo'))
207
207
 
208
+ output1 = column.as_('c1')
209
+ output2 = column.as_('c2')
210
+ query = self.table.select(output1, output2, group_by=output2)
211
+ self.assertEqual(str(query),
212
+ 'SELECT "a"."c" AS "c1", "a"."c" AS "c2" FROM "t" AS "a" '
213
+ 'GROUP BY 2')
214
+ self.assertEqual(tuple(query.params), ())
215
+
216
+ query = self.table.select(column, group_by=output)
217
+ self.assertEqual(str(query),
218
+ 'SELECT "a"."c" FROM "t" AS "a" GROUP BY "c1"')
219
+ self.assertEqual(tuple(query.params), ())
220
+
208
221
  def test_select_group_by_grouping_sets(self):
209
222
  query = self.table.select(
210
223
  Literal('*'),
@@ -253,6 +266,12 @@ class TestSelect(unittest.TestCase):
253
266
  with self.assertRaises(ValueError):
254
267
  self.table.select(group_by=['foo'])
255
268
 
269
+ def test_select_invalid_group_by_alias(self):
270
+ query = self.table.select(
271
+ self.table.c1.as_('c'), group_by=self.table.c2.as_('c'))
272
+ with self.assertRaises(ValueError):
273
+ str(query)
274
+
256
275
  def test_select_having(self):
257
276
  col1 = self.table.col1
258
277
  col2 = self.table.col2
@@ -260,7 +279,7 @@ class TestSelect(unittest.TestCase):
260
279
  having=(Min(col2) > 3))
261
280
  self.assertEqual(str(query),
262
281
  'SELECT "a"."col1", MIN("a"."col2") FROM "t" AS "a" '
263
- 'HAVING (MIN("a"."col2") > %s)')
282
+ 'HAVING MIN("a"."col2") > %s')
264
283
  self.assertEqual(tuple(query.params), (3,))
265
284
 
266
285
  def test_select_invalid_having(self):
@@ -268,16 +287,28 @@ class TestSelect(unittest.TestCase):
268
287
  self.table.select(having='foo')
269
288
 
270
289
  def test_select_order(self):
271
- c = self.table.c
272
- query = self.table.select(c, order_by=Literal(1))
290
+ column = self.table.c
291
+ query = self.table.select(column, order_by=column)
273
292
  self.assertEqual(str(query),
274
- 'SELECT "a"."c" FROM "t" AS "a" ORDER BY %s')
275
- self.assertEqual(tuple(query.params), (1,))
293
+ 'SELECT "a"."c" FROM "t" AS "a" ORDER BY "a"."c"')
294
+ self.assertEqual(tuple(query.params), ())
295
+
296
+ output = column.as_('c1')
297
+ query = self.table.select(output, order_by=output)
298
+ self.assertEqual(str(query),
299
+ 'SELECT "a"."c" AS "c1" FROM "t" AS "a" ORDER BY "c1"')
300
+ self.assertEqual(tuple(query.params), ())
276
301
 
277
302
  def test_select_invalid_order(self):
278
303
  with self.assertRaises(ValueError):
279
304
  self.table.select(order_by='foo')
280
305
 
306
+ def test_select_invalid_order_alias(self):
307
+ query = self.table.select(
308
+ self.table.c1.as_('c'), order_by=self.table.c2.as_('c'))
309
+ with self.assertRaises(ValueError):
310
+ str(query)
311
+
281
312
  def test_select_limit_offset(self):
282
313
  try:
283
314
  Flavor.set(Flavor(limitstyle='limit'))
@@ -352,8 +383,8 @@ class TestSelect(unittest.TestCase):
352
383
  'SELECT "a".* FROM ('
353
384
  'SELECT "b".*, ROWNUM AS "rnum" FROM ('
354
385
  'SELECT * FROM "t" AS "c") AS "b" '
355
- 'WHERE (ROWNUM <= %s)) AS "a" '
356
- 'WHERE ("rnum" > %s)')
386
+ 'WHERE ROWNUM <= %s) AS "a" '
387
+ 'WHERE "rnum" > %s')
357
388
  self.assertEqual(tuple(query.params), (60, 10))
358
389
 
359
390
  query = self.table.select(
@@ -364,8 +395,8 @@ class TestSelect(unittest.TestCase):
364
395
  'SELECT "b"."col1", "b"."col2", ROWNUM AS "rnum" FROM ('
365
396
  'SELECT "c"."c1" AS "col1", "c"."c2" AS "col2" '
366
397
  'FROM "t" AS "c") AS "b" '
367
- 'WHERE (ROWNUM <= %s)) AS "a" '
368
- 'WHERE ("rnum" > %s)')
398
+ 'WHERE ROWNUM <= %s) AS "a" '
399
+ 'WHERE "rnum" > %s')
369
400
  self.assertEqual(tuple(query.params), (60, 10))
370
401
 
371
402
  subquery = query.select(query.col1, query.col2)
@@ -376,8 +407,8 @@ class TestSelect(unittest.TestCase):
376
407
  'FROM ('
377
408
  'SELECT "c"."c1" AS "col1", "c"."c2" AS "col2" '
378
409
  'FROM "t" AS "c") AS "a" '
379
- 'WHERE (ROWNUM <= %s)) AS "b" '
380
- 'WHERE ("rnum" > %s)) AS "a"')
410
+ 'WHERE ROWNUM <= %s) AS "b" '
411
+ 'WHERE "rnum" > %s) AS "a"')
381
412
  # XXX alias of query is reused but not a problem
382
413
  # as it is hidden in subquery
383
414
  self.assertEqual(tuple(query.params), (60, 10))
@@ -388,15 +419,15 @@ class TestSelect(unittest.TestCase):
388
419
  'SELECT "a".* FROM ('
389
420
  'SELECT "b".*, ROWNUM AS "rnum" FROM ('
390
421
  'SELECT * FROM "t" AS "c" ORDER BY "c"."c") AS "b" '
391
- 'WHERE (ROWNUM <= %s)) AS "a" '
392
- 'WHERE ("rnum" > %s)')
422
+ 'WHERE ROWNUM <= %s) AS "a" '
423
+ 'WHERE "rnum" > %s')
393
424
  self.assertEqual(tuple(query.params), (60, 10))
394
425
 
395
426
  query = self.table.select(limit=50)
396
427
  self.assertEqual(str(query),
397
428
  'SELECT "a".* FROM ('
398
429
  'SELECT * FROM "t" AS "b") AS "a" '
399
- 'WHERE (ROWNUM <= %s)')
430
+ 'WHERE ROWNUM <= %s')
400
431
  self.assertEqual(tuple(query.params), (50,))
401
432
 
402
433
  query = self.table.select(offset=10)
@@ -404,7 +435,7 @@ class TestSelect(unittest.TestCase):
404
435
  'SELECT "a".* FROM ('
405
436
  'SELECT "b".*, ROWNUM AS "rnum" FROM ('
406
437
  'SELECT * FROM "t" AS "c") AS "b") AS "a" '
407
- 'WHERE ("rnum" > %s)')
438
+ 'WHERE "rnum" > %s')
408
439
  self.assertEqual(tuple(query.params), (10,))
409
440
 
410
441
  query = self.table.select(self.table.c.as_('col'),
@@ -414,9 +445,9 @@ class TestSelect(unittest.TestCase):
414
445
  'SELECT "a"."col" FROM ('
415
446
  'SELECT "b"."col", ROWNUM AS "rnum" FROM ('
416
447
  'SELECT "c"."c" AS "col" FROM "t" AS "c" '
417
- 'WHERE ("c"."c" >= %s)) AS "b" '
418
- 'WHERE (ROWNUM <= %s)) AS "a" '
419
- 'WHERE ("rnum" > %s)')
448
+ 'WHERE "c"."c" >= %s) AS "b" '
449
+ 'WHERE ROWNUM <= %s) AS "a" '
450
+ 'WHERE "rnum" > %s')
420
451
  self.assertEqual(tuple(query.params), (20, 60, 10))
421
452
  finally:
422
453
  Flavor.set(Flavor())
@@ -468,7 +499,7 @@ class TestSelect(unittest.TestCase):
468
499
  Rank(filter_=self.table.c1 > 0, window=window),
469
500
  Min(self.table.c1, window=window))
470
501
  self.assertEqual(str(query),
471
- 'SELECT RANK() FILTER (WHERE ("a"."c1" > %s)) OVER "b", '
502
+ 'SELECT RANK() FILTER (WHERE "a"."c1" > %s) OVER "b", '
472
503
  'MIN("a"."c1") OVER "b" FROM "t" AS "a" '
473
504
  'WINDOW "b" AS (PARTITION BY "a"."c1")')
474
505
  self.assertEqual(tuple(query.params), (0,))
@@ -486,8 +517,8 @@ class TestSelect(unittest.TestCase):
486
517
  Max(self.table.c1, window=window)
487
518
  / Min(self.table.c1, window=window))
488
519
  self.assertEqual(str(query),
489
- 'SELECT (MAX("a"."c1") OVER (PARTITION BY "a"."c2") '
490
- '/ MIN("a"."c1") OVER (PARTITION BY "a"."c2")) '
520
+ 'SELECT MAX("a"."c1") OVER (PARTITION BY "a"."c2") '
521
+ '/ MIN("a"."c1") OVER (PARTITION BY "a"."c2") '
491
522
  'FROM "t" AS "a"')
492
523
  self.assertEqual(tuple(query.params), ())
493
524
 
@@ -496,8 +527,8 @@ class TestSelect(unittest.TestCase):
496
527
  Max(self.table.c1, window=window)
497
528
  / Min(self.table.c1, window=window))
498
529
  self.assertEqual(str(query),
499
- 'SELECT (MAX("a"."c1") OVER (PARTITION BY %s) '
500
- '/ MIN("a"."c1") OVER (PARTITION BY %s)) '
530
+ 'SELECT MAX("a"."c1") OVER (PARTITION BY %s) '
531
+ '/ MIN("a"."c1") OVER (PARTITION BY %s) '
501
532
  'FROM "t" AS "a"')
502
533
  self.assertEqual(tuple(query.params), (1, 1))
503
534
 
@@ -508,8 +539,8 @@ class TestSelect(unittest.TestCase):
508
539
  / Min(self.table.c1, window=window2),
509
540
  windows=[window1])
510
541
  self.assertEqual(str(query),
511
- 'SELECT (MAX("a"."c1") OVER "b" '
512
- '/ MIN("a"."c1") OVER (PARTITION BY %s)) '
542
+ 'SELECT MAX("a"."c1") OVER "b" '
543
+ '/ MIN("a"."c1") OVER (PARTITION BY %s) '
513
544
  'FROM "t" AS "a" '
514
545
  'WINDOW "b" AS (PARTITION BY "a"."c2")')
515
546
  self.assertEqual(tuple(query.params), (1,))
@@ -541,10 +572,10 @@ class TestSelect(unittest.TestCase):
541
572
  order_by=[Literal(8)])
542
573
  self.assertEqual(
543
574
  str(query),
544
- 'WITH "c" AS (SELECT "a"."c" FROM "t" AS "a" WHERE ("a"."c" > %s))'
575
+ 'WITH "c" AS (SELECT "a"."c" FROM "t" AS "a" WHERE "a"."c" > %s)'
545
576
  ' SELECT %s, MIN("a"."c") OVER "b" '
546
- 'FROM SELECT * FROM "t" AS "a" WHERE ("a"."c" > %s) '
547
- 'WHERE ("a"."c" > %s) '
577
+ 'FROM SELECT * FROM "t" AS "a" WHERE "a"."c" > %s '
578
+ 'WHERE "a"."c" > %s '
548
579
  'GROUP BY %s '
549
580
  'HAVING %s '
550
581
  'WINDOW "b" AS (PARTITION BY %s) '
sql/tests/test_update.py CHANGED
@@ -15,7 +15,7 @@ class TestUpdate(unittest.TestCase):
15
15
 
16
16
  query.where = (self.table.b == Literal(True))
17
17
  self.assertEqual(str(query),
18
- 'UPDATE "t" AS "a" SET "c" = %s WHERE ("a"."b" = %s)')
18
+ 'UPDATE "t" AS "a" SET "c" = %s WHERE "a"."b" = %s')
19
19
  self.assertEqual(query.params, ('foo', True))
20
20
 
21
21
  def test_update2(self):
@@ -24,7 +24,7 @@ class TestUpdate(unittest.TestCase):
24
24
  query = t1.update([t1.c], ['foo'], from_=[t2], where=(t1.c == t2.c))
25
25
  self.assertEqual(str(query),
26
26
  'UPDATE "t1" AS "b" SET "c" = %s FROM "t2" AS "a" '
27
- 'WHERE ("b"."c" = "a"."c")')
27
+ 'WHERE "b"."c" = "a"."c"')
28
28
  self.assertEqual(query.params, ('foo',))
29
29
 
30
30
  def test_update_invalid_values(self):
@@ -43,7 +43,7 @@ class TestUpdate(unittest.TestCase):
43
43
  for query in [query_list, query_nolist]:
44
44
  self.assertEqual(str(query),
45
45
  'UPDATE "t1" AS "b" SET "c" = ('
46
- 'SELECT "a"."c" FROM "t2" AS "a" WHERE ("a"."i" = "b"."i"))')
46
+ 'SELECT "a"."c" FROM "t2" AS "a" WHERE "a"."i" = "b"."i")')
47
47
  self.assertEqual(query.params, ())
48
48
 
49
49
  def test_update_returning(self):
@@ -62,7 +62,7 @@ class TestUpdate(unittest.TestCase):
62
62
  self.assertEqual(str(query),
63
63
  'UPDATE "t1" AS "b" SET "c" = %s '
64
64
  'RETURNING (SELECT "a"."c" FROM "t2" AS "a" '
65
- 'WHERE (("a"."c1" = "b"."c") AND ("a"."c2" = %s)))')
65
+ 'WHERE ("a"."c1" = "b"."c") AND ("a"."c2" = %s))')
66
66
  self.assertEqual(query.params, ('foo', 'bar'))
67
67
 
68
68
  def test_with(self):
@@ -76,7 +76,7 @@ class TestUpdate(unittest.TestCase):
76
76
  self.assertEqual(str(query),
77
77
  'WITH "a" AS (SELECT "b"."c1" FROM "t1" AS "b") '
78
78
  'UPDATE "t" AS "c" SET "c2" = (SELECT "a"."c3" FROM "a" AS "a" '
79
- 'WHERE ("a"."c4" = %s))')
79
+ 'WHERE "a"."c4" = %s)')
80
80
  self.assertEqual(query.params, (2,))
81
81
 
82
82
  def test_schema(self):
@@ -95,5 +95,5 @@ class TestUpdate(unittest.TestCase):
95
95
  self.assertEqual(str(query),
96
96
  'UPDATE "default"."t1" AS "b" SET "c1" = ('
97
97
  'SELECT "a"."c" FROM "default"."t2" AS "a" '
98
- 'WHERE ("a"."i" = "b"."i"))')
98
+ 'WHERE "a"."i" = "b"."i")')
99
99
  self.assertEqual(query.params, ())
sql/tests/test_with.py CHANGED
@@ -15,7 +15,7 @@ class TestWith(unittest.TestCase):
15
15
 
16
16
  self.assertEqual(simple.statement(),
17
17
  '"a" AS ('
18
- 'SELECT "b"."id" FROM "t" AS "b" WHERE ("b"."id" = %s)'
18
+ 'SELECT "b"."id" FROM "t" AS "b" WHERE "b"."id" = %s'
19
19
  ')')
20
20
  self.assertEqual(simple.statement_params(), (1,))
21
21
 
@@ -40,7 +40,7 @@ class TestWith(unittest.TestCase):
40
40
  wq = WithQuery(with_=[simple, second])
41
41
  self.assertEqual(wq._with_str(),
42
42
  'WITH "a" AS ('
43
- 'SELECT "b"."id" FROM "t" AS "b" WHERE ("b"."id" = %s)'
43
+ 'SELECT "b"."id" FROM "t" AS "b" WHERE "b"."id" = %s'
44
44
  '), "c" AS ('
45
45
  'SELECT * FROM "a" AS "a"'
46
46
  ') ')
@@ -59,7 +59,7 @@ class TestWith(unittest.TestCase):
59
59
  'WITH RECURSIVE "a" ("n") AS ('
60
60
  'VALUES (%s) '
61
61
  'UNION ALL '
62
- 'SELECT ("a"."n" + %s) FROM "a" AS "a" WHERE ("a"."n" < %s)'
62
+ 'SELECT "a"."n" + %s FROM "a" AS "a" WHERE "a"."n" < %s'
63
63
  ') SELECT * FROM "a" AS "a"')
64
64
  self.assertEqual(tuple(q.params), (1, 1, 100))
65
65
 
@@ -1,41 +0,0 @@
1
- sql/__init__.py,sha256=-nJkGjLVQGCXqmhds4JZSFJv0hmWO_v9X3G3JaNbSEI,64423
2
- sql/aggregate.py,sha256=RXBhXHKRARhbTjMxuf6PR29vz5lHzEm_qJHzvfwHw2Q,5834
3
- sql/conditionals.py,sha256=xJY6ffEBeES6CiGKErXSa2dK2FXaEaR_QQl_CKILP30,2541
4
- sql/functions.py,sha256=IrX7ft6Psvr0XgoACE_iq6AupdeFJbo_62JoJCXnycs,12550
5
- sql/operators.py,sha256=Yw8cQCKT9p-OkwkCTjLg4Une2Daur14CbpsRo4SX-v8,10923
6
- sql/tests/__init__.py,sha256=QA18gftL_tykRkbGriAobA3THDVu34v8Pdn-a2qJywY,679
7
- sql/tests/test_aggregate.py,sha256=RZDc_6pQg7pBmrDEXY15N3ntojVhjR81qkzyp3P7PD8,3376
8
- sql/tests/test_alias.py,sha256=wtBwMkA8HADz3Tq6kz-MJXBG75hL0AbO2Z3LE7L2YTY,2408
9
- sql/tests/test_as.py,sha256=OfXDu0CnJ2paRKR29dMdx7q_Q9TFY60MWlvib6MR5LY,926
10
- sql/tests/test_cast.py,sha256=ejrqHQZwA3967UhszYR3caZYvH3waPcF6li4rnmxGi4,653
11
- sql/tests/test_collate.py,sha256=_RJM_t-YzCoO34b6k35jBoTyQedTK7EXywYosrK1bUQ,688
12
- sql/tests/test_column.py,sha256=_GkBkBzLW_fDoJy5yUWDtHTSyka1s5Drd4gDuvtIM_8,866
13
- sql/tests/test_combining_query.py,sha256=vag9FEKuGEFu6tlMc0lT6PkaE4mtl0KiuCNBxSfKTLY,2415
14
- sql/tests/test_conditionals.py,sha256=kNkgsjOatXpJnF9AED03ANNd0zWIwWTrnWdi4PWfl3E,2705
15
- sql/tests/test_delete.py,sha256=QmBt8QfS03uxWEBRetSv4q2PGFiAZRp_NavQd6E1aEs,2243
16
- sql/tests/test_excluded.py,sha256=aOdzg9oOTeaCPzQ2MOBC2F-KJl1hWI39MnM2cfaVSHs,388
17
- sql/tests/test_expression.py,sha256=39Z4hZXxUW6vJDmWMKJGpdf1tMP5i-1bfNaYvrHv2JY,457
18
- sql/tests/test_flavor.py,sha256=ho8wjHDbZDVB0NYN_lCPL3MdyzBhYYfCxolR1wQv3qU,1240
19
- sql/tests/test_for.py,sha256=_qk3ovyPtcq4XBK21OzmovLPiqgSvhGc4nhpX8IYC4s,651
20
- sql/tests/test_from.py,sha256=USwyW8WnbRO_oQBc-Fmgv9rwhARY2bOF-k5ZBxozyIw,713
21
- sql/tests/test_from_item.py,sha256=SJosqjO8UKPNppgtYRN_HKFlu17j5Aw6OVAQ4BGSNXo,1177
22
- sql/tests/test_functions.py,sha256=PAM3-QbdZs7_3UGbLGNIuW9f5LahkR8fyFiNadItM7w,5915
23
- sql/tests/test_grouping.py,sha256=hdUOeEhYIuKxvLrSmkFZlIW93uMq8exbtp9XqEodgEE,338
24
- sql/tests/test_insert.py,sha256=809miHmYCNVp0yi2sJW7TalutLzmYn8pfNam5Ncq4_o,9367
25
- sql/tests/test_join.py,sha256=Sg47Hs3NIhGq_eIajv36TzGykwqdNe9exPNwJwkffRg,2643
26
- sql/tests/test_lateral.py,sha256=cmdoNCGZZoiqQRKioYcLHLRJImfDjDPFz9Mbdt0qi_E,1047
27
- sql/tests/test_literal.py,sha256=ht-VLhGdpUm_rbtOzpQgbX3YQup_xp7F9va0RSWY0Ts,1010
28
- sql/tests/test_merge.py,sha256=1E9xxaJ8N1UxrAUcDpBI-OVIqzLpmzFn2Q7FE3cfEdk,5460
29
- sql/tests/test_operators.py,sha256=tyAnzTpUlhYXTJ2XKN8EEwan2p21xU1cB0cXhJmCQD0,16160
30
- sql/tests/test_order.py,sha256=jJJ2I5lshkACurwPqQekipzT6RzFuklbprxX5LMsGRI,2272
31
- sql/tests/test_rollup.py,sha256=Ae7PVTnyELICcjC00dkcAiHzr61NG8cnIcAoHagHr98,339
32
- sql/tests/test_select.py,sha256=etrdugGEUW9NG0AIOYU3ALxP9JQLAEkhIRlh1FeUJWQ,22164
33
- sql/tests/test_table.py,sha256=ZF6VzLcx54ulj69Qnt0hdQ7_XamAqpofyTKs0WiGB4E,758
34
- sql/tests/test_update.py,sha256=SCUsUCfMqtOS0m_87Ne24wgdPHgEs3jynbDEQP33oeg,3784
35
- sql/tests/test_values.py,sha256=qKvaFSDEQmVWajWhMZgqD2-rQcWJeW_nsevVMsV3jD8,1053
36
- sql/tests/test_window.py,sha256=EpqjZX2cyQ-m7UWMubrB5MOtL_5uF8jSnNhODfE74xc,3183
37
- sql/tests/test_with.py,sha256=SSLN1b0L8bLr5MwvCPOynP0HdfkUNPCNv7BWSJ4DalY,2371
38
- python_sql-1.6.0.dist-info/METADATA,sha256=yDf7Ch11yLkhncjfGgHtocDjQSrtDLvi_wiAlEOMvQo,8776
39
- python_sql-1.6.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
40
- python_sql-1.6.0.dist-info/top_level.txt,sha256=hwJHmWfbRP5a_XNfqgHwi2zrjAAzAJk24QZoTocslow,4
41
- python_sql-1.6.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- sql