]> 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 03:00:32 +0000 (23:00 -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
(cherry picked from commit faecebc9df2a57173ee720973ba44ada370b682f)

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 8d6c986a3251672075d42ccc1d3313e59e54ebcb..c6e598504b39050bf4bee1b9cffdb15b1c8fa1cd 100644 (file)
@@ -6790,10 +6790,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)),