This is an automated email from the ASF dual-hosted git repository.

elizabeth pushed a commit to branch elizabeth/fix-resize-bug
in repository https://gitbox.apache.org/repos/asf/superset.git

commit cd8cee256c65c38ed70e946ac9cef906bd85eb58
Author: Beto Dealmeida <[email protected]>
AuthorDate: Mon Jul 28 22:58:15 2025 -0400

    fix: subquery alias in RLS (#34374)
---
 superset/sql/parse.py               | 17 ++++++++++++++---
 tests/unit_tests/sql/parse_tests.py | 28 ++++++++++++++++++++++------
 tests/unit_tests/sql_lab_test.py    |  4 ++--
 3 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/superset/sql/parse.py b/superset/sql/parse.py
index 391bf0d9e0..c9ed22ff0f 100644
--- a/superset/sql/parse.py
+++ b/superset/sql/parse.py
@@ -262,8 +262,16 @@ class RLSAsSubqueryTransformer(RLSTransformer):
             return node
 
         if predicate := self.get_predicate(node):
-            # use alias or name
-            alias = node.alias or node.sql()
+            if node.alias:
+                alias = node.alias
+            else:
+                name = ".".join(
+                    part
+                    for part in (node.catalog or "", node.db or "", node.name)
+                    if part
+                )
+                alias = exp.TableAlias(this=exp.Identifier(this=name, 
quoted=True))
+
             node.set("alias", None)
             node = exp.Subquery(
                 this=exp.Select(
@@ -683,7 +691,10 @@ class SQLStatement(BaseSQLStatement[exp.Expression]):
 
         """
         return {
-            eq.this.sql(comments=False): eq.expression.sql(comments=False)
+            eq.this.sql(
+                dialect=self._dialect,
+                comments=False,
+            ): eq.expression.sql(comments=False)
             for set_item in self._parsed.find_all(exp.SetItem)
             for eq in set_item.find_all(exp.EQ)
         }
diff --git a/tests/unit_tests/sql/parse_tests.py 
b/tests/unit_tests/sql/parse_tests.py
index 1ab7174a18..458caf5fa1 100644
--- a/tests/unit_tests/sql/parse_tests.py
+++ b/tests/unit_tests/sql/parse_tests.py
@@ -1851,7 +1851,7 @@ FROM (
   FROM some_table
   WHERE
     id = 42
-) AS some_table
+) AS "some_table"
 WHERE
   1 = 1
             """.strip(),
@@ -1868,7 +1868,7 @@ FROM (
   FROM table
   WHERE
     id = 42
-) AS table
+) AS "table"
 WHERE
   1 = 1
             """.strip(),
@@ -1925,7 +1925,7 @@ JOIN (
   FROM other_table
   WHERE
     id = 42
-) AS other_table
+) AS "other_table"
   ON table.id = other_table.id
             """.strip(),
         ),
@@ -1961,7 +1961,7 @@ FROM (
     FROM some_table
     WHERE
       id = 42
-  ) AS some_table
+  ) AS "some_table"
 )
             """.strip(),
         ),
@@ -1977,7 +1977,7 @@ FROM (
   FROM table
   WHERE
     id = 42
-) AS table
+) AS "table"
 UNION ALL
 SELECT
   *
@@ -2000,7 +2000,7 @@ FROM (
   FROM other_table
   WHERE
     id = 42
-) AS other_table
+) AS "other_table"
             """.strip(),
         ),
         (
@@ -2039,6 +2039,22 @@ INNER JOIN tbl_b AS b
   ON a.col = b.col
             """.strip(),
         ),
+        (
+            "SELECT * FROM public.flights LIMIT 100",
+            {Table("flights", "public", "catalog1"): "\"AIRLINE\" like 'A%'"},
+            """
+SELECT
+  *
+FROM (
+  SELECT
+    *
+  FROM public.flights
+  WHERE
+    "AIRLINE" LIKE 'A%'
+) AS "public.flights"
+LIMIT 100
+        """.strip(),
+        ),
     ],
 )
 def test_rls_subquery_transformer(
diff --git a/tests/unit_tests/sql_lab_test.py b/tests/unit_tests/sql_lab_test.py
index 60bc3c3710..6712583325 100644
--- a/tests/unit_tests/sql_lab_test.py
+++ b/tests/unit_tests/sql_lab_test.py
@@ -259,13 +259,13 @@ FROM (
   FROM t1
   WHERE
     c1 = 1
-) AS t1, (
+) AS "t1", (
   SELECT
     *
   FROM t2
   WHERE
     c2 = 2
-) AS t2
+) AS "t2"
         """.strip()
     )
 

Reply via email to