]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
include HasCTE traversal elements in TextualSelect
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 11 Jun 2024 02:59:49 +0000 (22:59 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 11 Jun 2024 02:59:49 +0000 (22:59 -0400)
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.

Fixes: #11471
Change-Id: Ia9ce2c8cfd128f0f130aa9b26448dc23d994c324

doc/build/changelog/unreleased_14/11471.rst [new file with mode: 0644]
lib/sqlalchemy/sql/selectable.py
test/sql/test_compare.py

diff --git a/doc/build/changelog/unreleased_14/11471.rst b/doc/build/changelog/unreleased_14/11471.rst
new file mode 100644 (file)
index 0000000..f669eab
--- /dev/null
@@ -0,0 +1,7 @@
+.. 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.
index 0e53f318fe36d9da8285ade7d9e1ae4db78431fc..216ddd36267701da41f97878546a307e612c3cc8 100644 (file)
@@ -6816,10 +6816,14 @@ class TextualSelect(SelectBase, ExecutableReturnsRows, Generative):
 
     _label_style = LABEL_STYLE_NONE
 
-    _traverse_internals: _TraverseInternalsType = [
-        ("element", InternalTraversal.dp_clauseelement),
-        ("column_args", InternalTraversal.dp_clauseelement_list),
-    ] + SupportsCloneAnnotations._clone_annotations_traverse_internals
+    _traverse_internals: _TraverseInternalsType = (
+        [
+            ("element", InternalTraversal.dp_clauseelement),
+            ("column_args", InternalTraversal.dp_clauseelement_list),
+        ]
+        + SupportsCloneAnnotations._clone_annotations_traverse_internals
+        + HasCTE._has_ctes_traverse_internals
+    )
 
     _is_textual = True
 
index 746058c679e6c4810f90e0c03925f09e9998f06a..c1f6e7f11368800ce62130ac4af81c0eb0e9af84 100644 (file)
@@ -205,6 +205,15 @@ class CoreFixtures:
                 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)),