diff --git a/superset/sql_parse.py b/superset/sql_parse.py index 34747e1fb..bb6f34123 100644 --- a/superset/sql_parse.py +++ b/superset/sql_parse.py @@ -89,7 +89,10 @@ class ParsedQuery: self._limit: Optional[int] = None logger.debug("Parsing with sqlparse statement: %s", self.sql) - self._parsed = sqlparse.parse(self.stripped()) + self._parsed = sqlparse.parse( + sqlparse.format(self.stripped(), strip_comments=True) + ) + for statement in self._parsed: self._limit = _extract_limit_from_query(statement) diff --git a/tests/sql_parse_tests.py b/tests/sql_parse_tests.py index d0ee5d18c..d85271d50 100644 --- a/tests/sql_parse_tests.py +++ b/tests/sql_parse_tests.py @@ -535,6 +535,17 @@ class SupersetTestCase(unittest.TestCase): expected = ["SELECT * FROM birth_names", "SELECT * FROM birth_names LIMIT 1"] self.assertEqual(statements, expected) + def test_comment_breakdown_statements(self): + multi_sql = """ + SELECT * FROM birth_names; + -- some comment + """ + parsed = sql_parse.ParsedQuery(multi_sql) + statements = parsed.get_statements() + self.assertEqual(len(statements), 1) + expected = ["SELECT * FROM birth_names"] + self.assertEqual(statements, expected) + def test_messy_breakdown_statements(self): multi_sql = """ SELECT 1;\t\n\n\n \t