summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2020-05-22 23:56:50 +0200
committerFederico Caselli <cfederico87@gmail.com>2020-05-22 23:56:50 +0200
commitd163088de1d68919b6811a25745d3becbbf5b069 (patch)
tree6d73976ceae4f0c8ee54b69363782932f96a2071 /lib/sqlalchemy/sql
parent3fb0eb5a156ab7dbe19d82717dd197d9d22e64f1 (diff)
downloadsqlalchemy-d163088de1d68919b6811a25745d3becbbf5b069.tar.gz
Correctly apply self_group in type_coerce element.
The type coerce element did not correctly apply grouping rules when using in an expression Fixes: #5344 Change-Id: Id67b0e60ac54f8992f931aaed62731672f60c96c
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/elements.py16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py
index 43115f117..7310edd3f 100644
--- a/lib/sqlalchemy/sql/elements.py
+++ b/lib/sqlalchemy/sql/elements.py
@@ -2823,14 +2823,11 @@ class TypeCoerce(WrapsColumnExpression, ColumnElement):
renders SQL that labels the expression, but otherwise does not
modify its value on the SQL side::
- SELECT date_string AS anon_1 FROM log
+ SELECT date_string AS date_string FROM log
- When result rows are fetched, the ``StringDateTime`` type
+ When result rows are fetched, the ``StringDateTime`` type processor
will be applied to result rows on behalf of the ``date_string`` column.
- The rationale for the "anon_1" label is so that the type-coerced
- column remains separate in the list of result columns vs. other
- type-coerced or direct values of the target column. In order to
- provide a named label for the expression, use
+ In order to provide a named label for the expression, use
:meth:`_expression.ColumnElement.label`::
stmt = select([
@@ -2893,6 +2890,13 @@ class TypeCoerce(WrapsColumnExpression, ColumnElement):
def wrapped_column_expression(self):
return self.clause
+ def self_group(self, against=None):
+ grouped = self.clause.self_group(against=against)
+ if grouped is not self.clause:
+ return TypeCoerce(grouped, self.type)
+ else:
+ return self
+
class Extract(ColumnElement):
"""Represent a SQL EXTRACT clause, ``extract(field FROM expr)``."""