diff --git a/superset/config.py b/superset/config.py index 197e4bac4296e..f4e655b07a000 100644 --- a/superset/config.py +++ b/superset/config.py @@ -1564,7 +1564,7 @@ def EMAIL_HEADER_MUTATOR( # pylint: disable=invalid-name,unused-argument # def DATASET_HEALTH_CHECK(datasource: SqlaTable) -> Optional[str]: # if ( # datasource.sql and -# len(sql_parse.ParsedQuery(datasource.sql, strip_comments=True).tables) == 1 +# len(sql_parse.ParsedQuery(datasource.sql).tables) == 1 # ): # return ( # "This virtual dataset queries only one table and therefore could be " @@ -1702,7 +1702,7 @@ class ExtraDynamicQueryFilters(TypedDict, total=False): try: # pylint: disable=import-error,wildcard-import,unused-wildcard-import import superset_config - from superset_config import * # type: ignore + from superset_config import * print(f"Loaded your LOCAL configuration at [{superset_config.__file__}]") except Exception: diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 8d3ed36c465f7..dde9fdc02a3cc 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -906,7 +906,6 @@ def get_query_str_extended( sqlaq = self.get_sqla_query(**query_obj) sql = self.database.compile_sqla_query(sqlaq.sqla_query) sql = self._apply_cte(sql, sqlaq.cte) - sql = sqlparse.format(sql, reindent=True) if mutate: sql = self.mutate_query_from_config(sql) return QueryStringExtended( @@ -1071,6 +1070,7 @@ def get_rendered_sql( msg=ex.message, ) ) from ex + logger.info(f"{__name__} - get_rendered_sql: Stripping comments from SQL") sql = sqlparse.format(sql.strip("\t\r\n; "), strip_comments=True) if not sql: raise QueryObjectValidationError(_("Virtual dataset query cannot be empty")) diff --git a/superset/sql_lab.py b/superset/sql_lab.py index 1b883a77cfbbc..f9eb2b0d00c95 100644 --- a/superset/sql_lab.py +++ b/superset/sql_lab.py @@ -412,7 +412,6 @@ def execute_sql_statements( # Breaking down into multiple statements parsed_query = ParsedQuery( rendered_query, - strip_comments=True, engine=db_engine_spec.engine, ) if not db_engine_spec.run_multiple_statements_as_one: diff --git a/superset/sql_parse.py b/superset/sql_parse.py index 7b89ab8f0e2cb..44014cff0c4f7 100644 --- a/superset/sql_parse.py +++ b/superset/sql_parse.py @@ -256,12 +256,8 @@ class ParsedQuery: def __init__( self, sql_statement: str, - strip_comments: bool = False, engine: Optional[str] = None, ): - if strip_comments: - sql_statement = sqlparse.format(sql_statement, strip_comments=True) - self.sql: str = sql_statement self._dialect = SQLGLOT_DIALECTS.get(engine) if engine else None self._tables: set[Table] = set() @@ -604,6 +600,7 @@ def set_or_update_query_limit(self, new_limit: int, force: bool = False) -> str: def sanitize_clause(clause: str) -> str: + logger.info(f"{__name__}: sanitize") # clause = sqlparse.format(clause, strip_comments=True) statements = sqlparse.parse(clause) if len(statements) != 1: diff --git a/superset/sqllab/query_render.py b/superset/sqllab/query_render.py index 5597bcb086d7c..080a7c5f6619e 100644 --- a/superset/sqllab/query_render.py +++ b/superset/sqllab/query_render.py @@ -60,7 +60,6 @@ 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/unit_tests/sql_parse_tests.py b/tests/unit_tests/sql_parse_tests.py index f05e16ae85fd0..f630467c24791 100644 --- a/tests/unit_tests/sql_parse_tests.py +++ b/tests/unit_tests/sql_parse_tests.py @@ -863,9 +863,7 @@ def test_is_valid_ctas() -> None: A valid CTAS has a ``SELECT`` as its last statement. """ - assert ( - ParsedQuery("SELECT * FROM table", strip_comments=True).is_valid_ctas() is True - ) + assert ParsedQuery("SELECT * FROM table").is_valid_ctas() is True assert ( ParsedQuery( @@ -874,7 +872,6 @@ def test_is_valid_ctas() -> None: SELECT * FROM table -- comment 2 """, - strip_comments=True, ).is_valid_ctas() is True ) @@ -887,7 +884,6 @@ def test_is_valid_ctas() -> None: SELECT @value as foo; -- comment 2 """, - strip_comments=True, ).is_valid_ctas() is True ) @@ -899,7 +895,6 @@ def test_is_valid_ctas() -> None: EXPLAIN SELECT * FROM table -- comment 2 """, - strip_comments=True, ).is_valid_ctas() is False ) @@ -910,7 +905,6 @@ def test_is_valid_ctas() -> None: SELECT * FROM table; INSERT INTO TABLE (foo) VALUES (42); """, - strip_comments=True, ).is_valid_ctas() is False ) @@ -922,9 +916,7 @@ def test_is_valid_cvas() -> None: A valid CVAS has a single ``SELECT`` statement. """ - assert ( - ParsedQuery("SELECT * FROM table", strip_comments=True).is_valid_cvas() is True - ) + assert ParsedQuery("SELECT * FROM table").is_valid_cvas() is True assert ( ParsedQuery( @@ -933,7 +925,6 @@ def test_is_valid_cvas() -> None: SELECT * FROM table -- comment 2 """, - strip_comments=True, ).is_valid_cvas() is True ) @@ -946,7 +937,6 @@ def test_is_valid_cvas() -> None: SELECT @value as foo; -- comment 2 """, - strip_comments=True, ).is_valid_cvas() is False ) @@ -958,7 +948,6 @@ def test_is_valid_cvas() -> None: EXPLAIN SELECT * FROM table -- comment 2 """, - strip_comments=True, ).is_valid_cvas() is False ) @@ -969,7 +958,6 @@ def test_is_valid_cvas() -> None: SELECT * FROM table; INSERT INTO TABLE (foo) VALUES (42); """, - strip_comments=True, ).is_valid_cvas() is False )