Skip to content

Commit e9b4022

Browse files
authored
fix: is_select check for lowercase select with "WITH" clauses (#22370)
1 parent 37a78b1 commit e9b4022

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

superset/sql_parse.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ def is_select(self) -> bool:
228228
# for `UNKNOWN`, check all DDL/DML explicitly: only `SELECT` DML is allowed,
229229
# and no DDL is allowed
230230
if any(token.ttype == DDL for token in parsed[0]) or any(
231-
token.ttype == DML and token.value != "SELECT" for token in parsed[0]
231+
token.ttype == DML and token.normalized != "SELECT" for token in parsed[0]
232232
):
233233
return False
234234

@@ -237,7 +237,7 @@ def is_select(self) -> bool:
237237
return False
238238

239239
return any(
240-
token.ttype == DML and token.value == "SELECT" for token in parsed[0]
240+
token.ttype == DML and token.normalized == "SELECT" for token in parsed[0]
241241
)
242242

243243
def is_valid_ctas(self) -> bool:

tests/unit_tests/sql_parse_tests.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,28 @@ def test_cte_is_select() -> None:
10081008
assert sql.is_select()
10091009

10101010

1011+
def test_cte_is_select_lowercase() -> None:
1012+
"""
1013+
Some CTEs with lowercase select are not correctly identified as SELECTS.
1014+
"""
1015+
sql = ParsedQuery(
1016+
"""WITH foo AS(
1017+
select
1018+
FLOOR(__time TO WEEK) AS "week",
1019+
name,
1020+
COUNT(DISTINCT user_id) AS "unique_users"
1021+
FROM "druid"."my_table"
1022+
GROUP BY 1,2
1023+
)
1024+
select
1025+
f.week,
1026+
f.name,
1027+
f.unique_users
1028+
FROM foo f"""
1029+
)
1030+
assert sql.is_select()
1031+
1032+
10111033
def test_unknown_select() -> None:
10121034
"""
10131035
Test that `is_select` works when sqlparse fails to identify the type.

0 commit comments

Comments
 (0)