From 6d9df432c1bb5c4c04d4a7522a212ad26e03251f Mon Sep 17 00:00:00 2001 From: Rob Moore Date: Mon, 12 Jun 2023 10:14:07 +0100 Subject: [PATCH 1/2] fix(sqllab): Inefficient SqlaTable query (#24343) (#24344) --- superset/databases/commands/tables.py | 12 +++++++++++- superset/views/core.py | 9 ++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/superset/databases/commands/tables.py b/superset/databases/commands/tables.py index b7dbb4d461315..4f262225a4f96 100644 --- a/superset/databases/commands/tables.py +++ b/superset/databases/commands/tables.py @@ -17,6 +17,8 @@ import logging from typing import Any, cast +from sqlalchemy.orm import lazyload, load_only + from superset.commands.base import BaseCommand from superset.connectors.sqla.models import SqlaTable from superset.databases.commands.exceptions import ( @@ -74,10 +76,18 @@ def run(self) -> dict[str, Any]: extra_dict_by_name = { table.name: table.extra_dict for table in ( - db.session.query(SqlaTable).filter( + db.session.query(SqlaTable) + .filter( SqlaTable.database_id == self._model.id, SqlaTable.schema == self._schema_name, ) + .options( + load_only( + SqlaTable.schema, SqlaTable.table_name, SqlaTable.extra + ), + lazyload(SqlaTable.columns), + lazyload(SqlaTable.metrics), + ) ).all() } diff --git a/superset/views/core.py b/superset/views/core.py index 53e088ebe63d3..61f70434fe4e5 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -39,6 +39,7 @@ from flask_babel import gettext as __, lazy_gettext as _ from sqlalchemy import and_, or_ from sqlalchemy.exc import DBAPIError, NoSuchModuleError, SQLAlchemyError +from sqlalchemy.orm import lazyload, load_only from superset import ( app, @@ -1014,10 +1015,16 @@ def tables( # pylint: disable=no-self-use extra_dict_by_name = { table.name: table.extra_dict for table in ( - db.session.query(SqlaTable).filter( + db.session.query(SqlaTable) + .filter( SqlaTable.database_id == database.id, SqlaTable.schema == schema_parsed, ) + .options( + load_only(SqlaTable.schema, SqlaTable.table_name, SqlaTable.extra), + lazyload(SqlaTable.columns), + lazyload(SqlaTable.metrics), + ) ).all() } From 3d9c7d4598089f24b288a9ea8fed601ee355169c Mon Sep 17 00:00:00 2001 From: Daniel Vaz Gaspar Date: Mon, 12 Jun 2023 13:07:56 +0100 Subject: [PATCH 2/2] chore: remove deprecated api /superset/datasources (#24333) --- RESOURCES/STANDARD_ROLES.md | 1 - UPDATING.md | 1 + superset/views/core.py | 16 ---------------- 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/RESOURCES/STANDARD_ROLES.md b/RESOURCES/STANDARD_ROLES.md index 6f70620c7def4..5bb3047c0ff56 100644 --- a/RESOURCES/STANDARD_ROLES.md +++ b/RESOURCES/STANDARD_ROLES.md @@ -72,7 +72,6 @@ |can copy dash on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O| |can publish on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O| |can csv on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| -|can datasources on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O| |can fave dashboards by username on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O| |can sql json on Superset|:heavy_check_mark:|O|O|:heavy_check_mark:| |can slice on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O| diff --git a/UPDATING.md b/UPDATING.md index fb4851081cd06..9201886bf9364 100644 --- a/UPDATING.md +++ b/UPDATING.md @@ -33,6 +33,7 @@ assists people when migrating to a new version. ### Breaking Changes +- [24333](https://github.com/apache/superset/pull/24333): Removed deprecated API `/superset/datasources` - [24266](https://github.com/apache/superset/pull/24266) Remove the `ENABLE_ACCESS_REQUEST` config parameter and the associated request/approval workflows. - [24330](https://github.com/apache/superset/pull/24330) Removes `getUiOverrideRegistry` from `ExtensionsRegistry`. - [23933](https://github.com/apache/superset/pull/23933) Removes the deprecated Multiple Line Charts. diff --git a/superset/views/core.py b/superset/views/core.py index 61f70434fe4e5..cc64dd23ff1b0 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -208,22 +208,6 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods logger = logging.getLogger(__name__) - @has_access_api - @event_logger.log_this - @expose("/datasources/") - @deprecated(new_target="api/v1/dataset/") - def datasources(self) -> FlaskResponse: - return self.json_response( - sorted( - [ - datasource.short_data - for datasource in security_manager.get_user_datasources() - if datasource.short_data.get("name") - ], - key=lambda datasource: datasource["name"], - ) - ) - @has_access @event_logger.log_this @expose("/slice//")