diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index c5fd025f4ee2..c616f2177bb1 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -89,7 +89,7 @@ validate_adhoc_subquery, ) from superset.datasets.models import Dataset as NewDataset -from superset.db_engine_specs.base import BaseEngineSpec, CTE_ALIAS, TimestampExpression +from superset.db_engine_specs.base import BaseEngineSpec, TimestampExpression from superset.exceptions import ( AdvancedDataTypeResponseError, DatasetInvalidPermissionEvaluationException, @@ -904,7 +904,7 @@ def get_from_clause( cte = self.db_engine_spec.get_cte_query(from_sql) from_clause = ( - table(CTE_ALIAS) + table(self.db_engine_spec.cte_alias) if cte else TextAsFrom(self.text(from_sql), []).alias(VIRTUAL_TABLE_ALIAS) ) diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index 1aab100c816b..839c38eb3096 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -86,9 +86,6 @@ logger = logging.getLogger() -CTE_ALIAS = "__cte" - - class TimeGrain(NamedTuple): name: str # TODO: redundant field, remove label: str @@ -344,6 +341,8 @@ class BaseEngineSpec: # pylint: disable=too-many-public-methods # If True, then it will allow in subquery , # if False it will allow as regular CTE allows_cte_in_subquery = True + # Define alias for CTE + cte_alias = "__cte" # Whether allow LIMIT clause in the SQL # If True, then the database engine is allowed for LIMIT clause # If False, then the database engine is allowed for TOP clause @@ -887,7 +886,7 @@ def get_cte_query(cls, sql: str) -> Optional[str]: # extract rest of the SQLs after CTE remainder = "".join(str(token) for token in stmt.tokens[idx:]).strip() - return f"WITH {token.value},\n{CTE_ALIAS} AS (\n{remainder}\n)" + return f"WITH {token.value},\n{cls.cte_alias} AS (\n{remainder}\n)" return None diff --git a/superset/models/helpers.py b/superset/models/helpers.py index fd0a1eff5ca7..3827c572e74b 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -98,7 +98,6 @@ config = app.config logger = logging.getLogger(__name__) -CTE_ALIAS = "__cte" VIRTUAL_TABLE_ALIAS = "virtual_table" ADVANCED_DATA_TYPES = config["ADVANCED_DATA_TYPES"] @@ -1046,7 +1045,7 @@ def get_from_clause( cte = self.db_engine_spec.get_cte_query(from_sql) from_clause = ( - sa.table(CTE_ALIAS) + sa.table(self.db_engine_spec.cte_alias) if cte else TextAsFrom(self.text(from_sql), []).alias(VIRTUAL_TABLE_ALIAS) )