]> 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>
Wed, 12 Jun 2024 15:02:25 +0000 (11:02 -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)
(cherry picked from commit 228d98e43a0bba1f33cd46f92f14851ecccbb728)

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 b6e96c7b0c35f401e70765735f673c099ab73545..81fd45da927e1c41f42747722b536a027e026d7a 100644 (file)
@@ -6867,10 +6867,14 @@ class TextualSelect(SelectBase):
 
     _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
 
index d64deb86777905bcc3d4cd875cff8b1d135742e4..0a7f0d4114dd8b0dce850ae60321580a69744f16 100644 (file)
@@ -205,6 +205,15 @@ class CoreFixtures(object):
                 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)),