diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index 4930a3063b3b..deee43fc4116 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -530,11 +530,7 @@ def select_star(self) -> str: # show_cols and latest_partition set to false to avoid # the expensive cost of inspecting the DB return self.database.select_star( - self.table_name, - sql=self.sql, - schema=self.schema, - show_cols=False, - latest_partition=False, + self.table_name, schema=self.schema, show_cols=False, latest_partition=False ) @property diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index 77d5aae1aed5..a1b31e597ceb 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -611,7 +611,6 @@ def select_star( # pylint: disable=too-many-arguments,too-many-locals database, table_name: str, engine: Engine, - sql: Optional[str] = None, schema: Optional[str] = None, limit: int = 100, show_cols: bool = False, @@ -624,7 +623,6 @@ def select_star( # pylint: disable=too-many-arguments,too-many-locals :param database: Database instance :param table_name: Table name - :param sql: SQL defining a subselect :param engine: SqlALchemy Engine instance :param schema: Schema :param limit: limit to impose on query @@ -634,23 +632,20 @@ def select_star( # pylint: disable=too-many-arguments,too-many-locals :param cols: Columns to include in query :return: SQL query """ + fields = "*" + cols = cols or [] + if (show_cols or latest_partition) and not cols: + cols = database.get_columns(table_name, schema) + + if show_cols: + fields = cls._get_fields(cols) quote = engine.dialect.identifier_preparer.quote if schema: full_table_name = quote(schema) + "." + quote(table_name) else: full_table_name = quote(table_name) - if sql is not None: - subselect = f"(\n{sql}\n) AS {quote(table_name)}" - qry = select("*").select_from(text(subselect)) - else: - fields = "*" - cols = cols or [] - if (show_cols or latest_partition) and not cols: - cols = database.get_columns(table_name, schema) - if show_cols: - fields = cls._get_fields(cols) - qry = select(fields).select_from(text(full_table_name)) + qry = select(fields).select_from(text(full_table_name)) if limit: qry = qry.limit(limit) @@ -660,10 +655,10 @@ def select_star( # pylint: disable=too-many-arguments,too-many-locals ) if partition_query is not None: qry = partition_query - select_star_query = database.compile_sqla_query(qry) + sql = database.compile_sqla_query(qry) if indent: - select_star_query = sqlparse.format(select_star_query, reindent=True) - return select_star_query + sql = sqlparse.format(sql, reindent=True) + return sql @classmethod def estimate_statement_cost( diff --git a/superset/db_engine_specs/hive.py b/superset/db_engine_specs/hive.py index fd2c85dbde55..7c680cb00c4c 100644 --- a/superset/db_engine_specs/hive.py +++ b/superset/db_engine_specs/hive.py @@ -354,7 +354,6 @@ def select_star( # pylint: disable=too-many-arguments database, table_name: str, engine: Engine, - sql: Optional[str] = None, schema: str = None, limit: int = 100, show_cols: bool = False, @@ -368,7 +367,6 @@ def select_star( # pylint: disable=too-many-arguments database, table_name, engine, - sql, schema, limit, show_cols, diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index 0cf48a3c23c8..2bfe255457f7 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -394,7 +394,6 @@ def select_star( # pylint: disable=too-many-arguments database, table_name: str, engine: Engine, - sql: Optional[str] = None, schema: str = None, limit: int = 100, show_cols: bool = False, @@ -418,7 +417,6 @@ def select_star( # pylint: disable=too-many-arguments database, table_name, engine, - sql, schema, limit, show_cols, diff --git a/superset/models/core.py b/superset/models/core.py index 5730add209c5..d489e0169877 100755 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -383,7 +383,6 @@ def compile_sqla_query(self, qry: Select, schema: Optional[str] = None) -> str: def select_star( # pylint: disable=too-many-arguments self, table_name: str, - sql: Optional[str] = None, schema: Optional[str] = None, limit: int = 100, show_cols: bool = False, @@ -398,7 +397,6 @@ def select_star( # pylint: disable=too-many-arguments return self.db_engine_spec.select_star( self, table_name, - sql=sql, schema=schema, engine=eng, limit=limit,