The type coerce element did not correctly apply grouping rules when using
in an expression
Fixes: #5344
Change-Id: Id67b0e60ac54f8992f931aaed62731672f60c96c
(cherry picked from commit
d163088de1d68919b6811a25745d3becbbf5b069)
--- /dev/null
+.. change::
+ :tags: bug, sql
+ :tickets: 5344
+
+ Correctly apply self_group in type_coerce element.
+
+ The type coerce element did not correctly apply grouping rules when using
+ in an expression
\ No newline at end of file
SELECT date_string AS anon_1 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
else:
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)``."""
assert isinstance(stmt.c.foo.type, MyType)
assert isinstance(stmt2.c.foo.type, MyType)
+ def test_type_coerce_selfgroup(self):
+ no_group = column("a") / type_coerce(column("x"), Integer)
+ group = column("b") / type_coerce(column("y") * column("w"), Integer)
+
+ self.assert_compile(no_group, "a / x")
+ self.assert_compile(group, "b / (y * w)")
+
def test_select_on_table(self):
sel = select([table1, table2], use_labels=True)