From d99716719015dd2990f8cb076b0d55c70cd3e44a Mon Sep 17 00:00:00 2001 From: Ville Brofeldt Date: Tue, 13 Feb 2018 15:05:01 +0200 Subject: [PATCH 1/3] Remove comments from queries in SQL Lab that break Explore view This fixes an issue where comments on the last line of the source query comment out the closing parenthesis of the subquery. --- superset/connectors/sqla/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index b2e21c7d0fd7d..9e2ae2005f3ca 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -428,6 +428,7 @@ def get_from_clause(self, template_processor=None, db_engine_spec=None): from_sql = template_processor.process_template(from_sql) if db_engine_spec: from_sql = db_engine_spec.escape_sql(from_sql) + from_sql = sqlparse.format(from_sql, strip_comments=True) return TextAsFrom(sa.text(from_sql), []).alias('expr_qry') return self.get_sqla_table() From b2ad61885915ebe5e28fbc9de026e6db5b73f45e Mon Sep 17 00:00:00 2001 From: Ville Brofeldt Date: Fri, 16 Feb 2018 10:03:54 +0200 Subject: [PATCH 2/3] Add test case for SqlaTable with query with comment This test ensures that comments in the query are removed when calling SqlaTable.get_from_clause(). --- tests/core_tests.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/core_tests.py b/tests/core_tests.py index a026ae478d279..a171f1badddcf 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -18,6 +18,7 @@ from flask import escape import pandas as pd import psycopg2 +from six import text_type import sqlalchemy as sqla from superset import appbuilder, dataframe, db, jinja_context, sm, sql_lab, utils @@ -870,6 +871,12 @@ def test_dataframe_timezone(self): {'data': pd.Timestamp('2017-11-18 22:06:30.061810+0100', tz=tz)}, ) + def test_comments_in_sqlatable_query(self): + clean_query = "SELECT '/* val 1 */' as c1, '-- val 2' as c2 FROM tbl" + commented_query = '/* comment 1 */' + clean_query + '-- comment 2' + table = SqlaTable(sql=commented_query) + rendered_query = text_type(table.get_from_clause()) + self.assertEqual(clean_query, rendered_query) if __name__ == '__main__': unittest.main() From 6f3dd014d976b4e4c19709f562b353f012165299 Mon Sep 17 00:00:00 2001 From: Ville Brofeldt Date: Fri, 16 Feb 2018 11:25:01 +0200 Subject: [PATCH 3/3] Add missing blank line class definition (PEP8) --- tests/core_tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/core_tests.py b/tests/core_tests.py index a171f1badddcf..aa5c3617950e4 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -878,5 +878,6 @@ def test_comments_in_sqlatable_query(self): rendered_query = text_type(table.get_from_clause()) self.assertEqual(clean_query, rendered_query) + if __name__ == '__main__': unittest.main()