python-sql 1.6.0__py3-none-any.whl → 1.7.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-sql
3
- Version: 1.6.0
3
+ Version: 1.7.0
4
4
  Summary: Library to write SQL queries
5
5
  Home-page: https://pypi.org/project/python-sql/
6
6
  Download-URL: https://downloads.tryton.org/python-sql/
@@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.10
25
25
  Classifier: Programming Language :: Python :: 3.11
26
26
  Classifier: Programming Language :: Python :: 3.12
27
27
  Classifier: Programming Language :: Python :: 3.13
28
+ Classifier: Programming Language :: Python :: 3.14
28
29
  Classifier: Topic :: Database
29
30
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
31
  Requires-Python: >=3.5
@@ -1,10 +1,10 @@
1
- sql/__init__.py,sha256=-nJkGjLVQGCXqmhds4JZSFJv0hmWO_v9X3G3JaNbSEI,64423
2
- sql/aggregate.py,sha256=RXBhXHKRARhbTjMxuf6PR29vz5lHzEm_qJHzvfwHw2Q,5834
1
+ sql/__init__.py,sha256=lZFpmxm8nGym-rx6OTL-jxlCvLIxsCGtFeSNYqE2KEo,64423
2
+ sql/aggregate.py,sha256=Spg5T4y8SSUN5Tyc7GUVB6I_69AhrVHVCkOgzFX482A,6008
3
3
  sql/conditionals.py,sha256=xJY6ffEBeES6CiGKErXSa2dK2FXaEaR_QQl_CKILP30,2541
4
4
  sql/functions.py,sha256=IrX7ft6Psvr0XgoACE_iq6AupdeFJbo_62JoJCXnycs,12550
5
5
  sql/operators.py,sha256=Yw8cQCKT9p-OkwkCTjLg4Une2Daur14CbpsRo4SX-v8,10923
6
6
  sql/tests/__init__.py,sha256=QA18gftL_tykRkbGriAobA3THDVu34v8Pdn-a2qJywY,679
7
- sql/tests/test_aggregate.py,sha256=RZDc_6pQg7pBmrDEXY15N3ntojVhjR81qkzyp3P7PD8,3376
7
+ sql/tests/test_aggregate.py,sha256=hvt6z9mdBD0yGvGfviGrlWlD9mqSxwRyQeNbAJ0ciMY,3371
8
8
  sql/tests/test_alias.py,sha256=wtBwMkA8HADz3Tq6kz-MJXBG75hL0AbO2Z3LE7L2YTY,2408
9
9
  sql/tests/test_as.py,sha256=OfXDu0CnJ2paRKR29dMdx7q_Q9TFY60MWlvib6MR5LY,926
10
10
  sql/tests/test_cast.py,sha256=ejrqHQZwA3967UhszYR3caZYvH3waPcF6li4rnmxGi4,653
@@ -35,7 +35,7 @@ sql/tests/test_update.py,sha256=SCUsUCfMqtOS0m_87Ne24wgdPHgEs3jynbDEQP33oeg,3784
35
35
  sql/tests/test_values.py,sha256=qKvaFSDEQmVWajWhMZgqD2-rQcWJeW_nsevVMsV3jD8,1053
36
36
  sql/tests/test_window.py,sha256=EpqjZX2cyQ-m7UWMubrB5MOtL_5uF8jSnNhODfE74xc,3183
37
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,,
38
+ python_sql-1.7.0.dist-info/METADATA,sha256=9VRO5_BMROKM_6fuEnUW-NCdG2i-jPqCJlj2VHhPe44,8827
39
+ python_sql-1.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ python_sql-1.7.0.dist-info/top_level.txt,sha256=hwJHmWfbRP5a_XNfqgHwi2zrjAAzAJk24QZoTocslow,4
41
+ python_sql-1.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
sql/__init__.py CHANGED
@@ -7,7 +7,7 @@ from collections import defaultdict
7
7
  from itertools import chain
8
8
  from threading import current_thread, local
9
9
 
10
- __version__ = '1.6.0'
10
+ __version__ = '1.7.0'
11
11
  __all__ = [
12
12
  'Flavor', 'Table', 'Values', 'Literal', 'Column', 'Grouping', 'Conflict',
13
13
  'Matched', 'MatchedUpdate', 'MatchedDelete',
sql/aggregate.py CHANGED
@@ -4,7 +4,6 @@ from sql import Expression, Flavor, Literal, Window
4
4
 
5
5
  __all__ = ['Avg', 'BitAnd', 'BitOr', 'BoolAnd', 'BoolOr', 'Count', 'Every',
6
6
  'Max', 'Min', 'Stddev', 'Sum', 'Variance']
7
- _sentinel = object()
8
7
 
9
8
 
10
9
  class Aggregate(Expression):
@@ -169,20 +168,31 @@ class BoolOr(Aggregate):
169
168
  _sql = 'BOOL_OR'
170
169
 
171
170
 
171
+ class _Star(Expression):
172
+ __slots__ = ()
173
+
174
+ def __str__(self):
175
+ return '*'
176
+
177
+ @property
178
+ def params(self):
179
+ return ()
180
+
181
+
172
182
  class Count(Aggregate):
173
183
  __slots__ = ()
174
184
  _sql = 'COUNT'
175
185
 
176
- def __init__(self, expression=_sentinel, **kwargs):
177
- if expression is _sentinel:
178
- expression = Literal('*')
186
+ def __init__(self, expression=_Star(), **kwargs):
179
187
  super().__init__(expression, **kwargs)
180
188
 
181
189
  @property
182
190
  def _case_expression(self):
183
191
  expression = super(Count, self)._case_expression
184
- if (isinstance(self.expression, Literal)
185
- and expression.value == '*'):
192
+ if (isinstance(self.expression, _Star)
193
+ # Keep testing Literal('*') for backward compatibility
194
+ or (isinstance(self.expression, Literal)
195
+ and expression.value == '*')):
186
196
  expression = Literal(1)
187
197
  return expression
188
198
 
@@ -42,8 +42,8 @@ class TestAggregate(unittest.TestCase):
42
42
 
43
43
  def test_count_without_expression(self):
44
44
  count = Count()
45
- self.assertEqual(str(count), 'COUNT(%s)')
46
- self.assertEqual(count.params, ('*',))
45
+ self.assertEqual(str(count), 'COUNT(*)')
46
+ self.assertEqual(count.params, ())
47
47
 
48
48
  def test_order_by_one_column(self):
49
49
  avg = Avg(self.table.a, order_by=self.table.b)