details: https://code.tryton.org/python-sql/commit/d822cae093a1
branch: default
user: Cédric Krier <[email protected]>
date: Tue Nov 25 10:23:15 2025 +0100
description:
Use the ordinal number as aliases for GROUP BY
Closes #96
diffstat:
CHANGELOG | 1 +
sql/__init__.py | 12 ++++++++++--
sql/tests/test_select.py | 2 +-
3 files changed, 12 insertions(+), 3 deletions(-)
diffs (61 lines):
diff -r a59c35753ba7 -r d822cae093a1 CHANGELOG
--- a/CHANGELOG Mon Nov 24 22:19:12 2025 +0100
+++ b/CHANGELOG Tue Nov 25 10:23:15 2025 +0100
@@ -1,3 +1,4 @@
+* Use the ordinal number as aliases for GROUP BY
* Check the coherence of the aliases of GROUP BY and ORDER BY expressions
* Do not use parameter for EXTRACT field
* Remove support for Python older than 3.6
diff -r a59c35753ba7 -r d822cae093a1 sql/__init__.py
--- a/sql/__init__.py Mon Nov 24 22:19:12 2025 +0100
+++ b/sql/__init__.py Tue Nov 25 10:23:15 2025 +0100
@@ -629,12 +629,13 @@
and (self.limit is not None or self.offset is not None)):
return self._rownum(str)
+ ordinals = {}
for expression in chain(
self.group_by or [],
self.order_by or []):
if not isinstance(expression, As):
continue
- for column in self.columns:
+ for i, column in enumerate(self.columns, start=1):
if not isinstance(column, As):
continue
if column.output_name != expression.output_name:
@@ -642,6 +643,12 @@
if (str(column.expression) != str(expression.expression)
or column.params != expression.params):
raise ValueError("%r != %r" % (expression, column))
+ ordinals[column.output_name] = i
+
+ def str_or_ordinal(expression):
+ if isinstance(expression, As):
+ expression = ordinals.get(expression.output_name, expression)
+ return str(expression)
with AliasManager():
if self.from_ is not None:
@@ -671,7 +678,8 @@
where = ' WHERE ' + str(self.where)
group_by = ''
if self.group_by:
- group_by = ' GROUP BY ' + ', '.join(map(str, self.group_by))
+ group_by = ' GROUP BY ' + ', '.join(
+ map(str_or_ordinal, self.group_by))
having = ''
if self.having:
having = ' HAVING ' + str(self.having)
diff -r a59c35753ba7 -r d822cae093a1 sql/tests/test_select.py
--- a/sql/tests/test_select.py Mon Nov 24 22:19:12 2025 +0100
+++ b/sql/tests/test_select.py Tue Nov 25 10:23:15 2025 +0100
@@ -197,7 +197,7 @@
output = column.as_('c1')
query = self.table.select(output, group_by=output)
self.assertEqual(str(query),
- 'SELECT "a"."c" AS "c1" FROM "t" AS "a" GROUP BY "c1"')
+ 'SELECT "a"."c" AS "c1" FROM "t" AS "a" GROUP BY 1')
self.assertEqual(tuple(query.params), ())
query = self.table.select(Literal('foo'), group_by=Literal('foo'))