diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index bcee08708d632..fafea897f1958 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -1134,8 +1134,9 @@ def apply_top_to_sql(cls, sql: str, limit: int) -> str: cte = None sql_remainder = None sql = sql.strip(" \t\n;") + sql_statement = sqlparse.format(sql, strip_comments=True) query_limit: int | None = sql_parse.extract_top_from_query( - sql, cls.top_keywords + sql_statement, cls.top_keywords ) if not limit: final_limit = query_limit @@ -1144,7 +1145,7 @@ def apply_top_to_sql(cls, sql: str, limit: int) -> str: else: final_limit = limit if not cls.allows_cte_in_subquery: - cte, sql_remainder = sql_parse.get_cte_remainder_query(sql) + cte, sql_remainder = sql_parse.get_cte_remainder_query(sql_statement) if cte: str_statement = str(sql_remainder) cte = cte + "\n" diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 5845a400c2939..100391086ccd4 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -1088,7 +1088,7 @@ def get_rendered_sql( _("Virtual dataset query cannot consist of multiple statements") ) - sql = script.statements[0].format() + sql = script.statements[0].format(comments=False) if not sql: raise QueryObjectValidationError(_("Virtual dataset query cannot be empty")) return sql diff --git a/superset/sqllab/query_render.py b/superset/sqllab/query_render.py index 67bea2b1fb4cd..caf9a3cb2b206 100644 --- a/superset/sqllab/query_render.py +++ b/superset/sqllab/query_render.py @@ -60,6 +60,7 @@ def render(self, execution_context: SqlJsonExecutionContext) -> str: parsed_query = ParsedQuery( query_model.sql, + strip_comments=True, engine=query_model.database.db_engine_spec.engine, ) rendered_query = sql_template_processor.process_template( diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py index d542f80a02b16..185f7d410fc4b 100644 --- a/tests/integration_tests/conftest.py +++ b/tests/integration_tests/conftest.py @@ -304,7 +304,6 @@ def virtual_dataset(): "SELECT 3 as col1, 'd' as col2, 1.3, NULL, '2000-01-04 00:00:00', 4 " "UNION ALL " "SELECT 4 as col1, 'e' as col2, 1.4, NULL, '2000-01-05 00:00:00', 5 " - "\n /* CONTAINS A RANDOM COMMENT */ \n" "UNION ALL " "SELECT 5 as col1, 'f' as col2, 1.5, NULL, '2000-01-06 00:00:00', 6 " "UNION ALL " diff --git a/tests/integration_tests/core_tests.py b/tests/integration_tests/core_tests.py index 2be74615bdab4..90873d49b9f9e 100644 --- a/tests/integration_tests/core_tests.py +++ b/tests/integration_tests/core_tests.py @@ -540,9 +540,7 @@ def test_comments_in_sqlatable_query(self): database=get_example_database(), ) rendered_query = str(table.get_from_clause()[0]) - assert "comment 1" in rendered_query - assert "comment 2" in rendered_query - assert "FROM tbl" in rendered_query + self.assertEqual(clean_query, rendered_query) def test_slice_payload_no_datasource(self): form_data = { diff --git a/tests/integration_tests/datasource_tests.py b/tests/integration_tests/datasource_tests.py index c7960f68a6361..716e031e0c676 100644 --- a/tests/integration_tests/datasource_tests.py +++ b/tests/integration_tests/datasource_tests.py @@ -538,12 +538,10 @@ def test_get_samples(test_client, login_as_admin, virtual_dataset): assert "coltypes" in rv2.json["result"] assert "data" in rv2.json["result"] - sql = ( - f"select * from ({virtual_dataset.sql}) as tbl " - f'limit {app.config["SAMPLES_ROW_LIMIT"]}' + eager_samples = virtual_dataset.database.get_df( + f"select * from ({virtual_dataset.sql}) as tbl" + f' limit {app.config["SAMPLES_ROW_LIMIT"]}' ) - eager_samples = virtual_dataset.database.get_df(sql) - # the col3 is Decimal eager_samples["col3"] = eager_samples["col3"].apply(float) eager_samples = eager_samples.to_dict(orient="records") diff --git a/tests/integration_tests/sqllab_tests.py b/tests/integration_tests/sqllab_tests.py index 7b62be82304f7..96019c16cc500 100644 --- a/tests/integration_tests/sqllab_tests.py +++ b/tests/integration_tests/sqllab_tests.py @@ -575,9 +575,9 @@ def test_sql_json_parameter_error(self): assert data["status"] == "success" data = self.run_sql( - "SELECT * FROM birth_names WHERE state = '{{ state }}' -- blabblah {{ extra1 }}\nLIMIT 10", + "SELECT * FROM birth_names WHERE state = '{{ state }}' -- blabblah {{ extra1 }} {{fake.fn()}}\nLIMIT 10", "3", - template_params=json.dumps({"state": "CA", "extra1": "comment"}), + template_params=json.dumps({"state": "CA"}), ) assert data["status"] == "success"