From 4c522ac65fa9ccdcfda27de3435ed559055ef9a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CA=88=E1=B5=83=E1=B5=A2?= Date: Mon, 4 May 2020 09:47:29 -0700 Subject: [PATCH] [sqllab] fix, strip comments before parsing statements (#9692) --- superset/sql_parse.py | 5 ++++- tests/sql_parse_tests.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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