diff --git a/superset/sql_parse.py b/superset/sql_parse.py index ab2f04417249c..a3c1af87b0e73 100644 --- a/superset/sql_parse.py +++ b/superset/sql_parse.py @@ -509,6 +509,9 @@ def has_table_query(token_list: TokenList) -> bool: """ state = InsertRLSState.SCANNING for token in token_list.tokens: + # Ignore comments + if isinstance(token, sqlparse.sql.Comment): + continue # Recurse into child token list if isinstance(token, TokenList) and has_table_query(token): @@ -607,7 +610,6 @@ def insert_rls( rls: Optional[TokenList] = None state = InsertRLSState.SCANNING for token in token_list.tokens: - # Recurse into child token list if isinstance(token, TokenList): i = token_list.tokens.index(token) diff --git a/tests/unit_tests/sql_parse_tests.py b/tests/unit_tests/sql_parse_tests.py index ba3da69aaefaf..d6939fa080dfc 100644 --- a/tests/unit_tests/sql_parse_tests.py +++ b/tests/unit_tests/sql_parse_tests.py @@ -1195,6 +1195,14 @@ def test_sqlparse_issue_652(): ("extract(HOUR from from_unixtime(hour_ts)", False), ("(SELECT * FROM table)", True), ("(SELECT COUNT(DISTINCT name) from birth_names)", True), + ( + "(SELECT table_name FROM information_schema.tables WHERE table_name LIKE '%user%' LIMIT 1)", + True, + ), + ( + "(SELECT table_name FROM /**/ information_schema.tables WHERE table_name LIKE '%user%' LIMIT 1)", + True, + ), ], ) def test_has_table_query(sql: str, expected: bool) -> None: