You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by vi...@apache.org on 2023/06/12 09:14:34 UTC

[superset] branch master updated: fix(sqllab): Inefficient SqlaTable query (#24343) (#24344)

This is an automated email from the ASF dual-hosted git repository.

villebro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 6d9df432c1 fix(sqllab): Inefficient SqlaTable query (#24343) (#24344)
6d9df432c1 is described below

commit 6d9df432c1bb5c4c04d4a7522a212ad26e03251f
Author: Rob Moore <gi...@users.noreply.github.com>
AuthorDate: Mon Jun 12 10:14:07 2023 +0100

    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 b7dbb4d461..4f262225a4 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 @@ class TablesDatabaseCommand(BaseCommand):
             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 53e088ebe6..61f70434fe 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -39,6 +39,7 @@ from flask_appbuilder.security.sqla import models as ab_models
 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 @@ class Superset(BaseSupersetView):  # pylint: disable=too-many-public-methods
         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()
         }