--- /dev/null
+.. change::
+ :tags: bug, sql
+ :tickets: 11471
+
+ Fixed caching issue where using the :meth:`.TextualSelect.add_cte` method
+ of the :class:`.TextualSelect` construct would not set a correct cache key
+ which distinguished between different CTE expressions.
_label_style = LABEL_STYLE_NONE
- _traverse_internals = [
- ("element", InternalTraversal.dp_clauseelement),
- ("column_args", InternalTraversal.dp_clauseelement_list),
- ] + SupportsCloneAnnotations._clone_annotations_traverse_internals
+ _traverse_internals = (
+ [
+ ("element", InternalTraversal.dp_clauseelement),
+ ("column_args", InternalTraversal.dp_clauseelement_list),
+ ]
+ + SupportsCloneAnnotations._clone_annotations_traverse_internals
+ + HasCTE._has_ctes_traverse_internals
+ )
_is_textual = True
bindparam("bar", type_=String)
),
),
+ lambda: (
+ # test #11471
+ text("select * from table")
+ .columns(a=Integer())
+ .add_cte(table_b.select().cte()),
+ text("select * from table")
+ .columns(a=Integer())
+ .add_cte(table_b.select().where(table_b.c.a > 5).cte()),
+ ),
lambda: (
literal(1).op("+")(literal(1)),
literal(1).op("-")(literal(1)),