diff options
author | Federico Caselli <cfederico87@gmail.com> | 2020-05-22 23:56:50 +0200 |
---|---|---|
committer | Federico Caselli <cfederico87@gmail.com> | 2020-05-22 23:56:50 +0200 |
commit | d163088de1d68919b6811a25745d3becbbf5b069 (patch) | |
tree | 6d73976ceae4f0c8ee54b69363782932f96a2071 /lib/sqlalchemy/sql | |
parent | 3fb0eb5a156ab7dbe19d82717dd197d9d22e64f1 (diff) | |
download | sqlalchemy-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.py | 16 |
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)``.""" |