fix: Load cached DB metadata as DatasourceName and add catalog to schema_list cache key (#31948)

This commit is contained in:
Vitor Avila 2025-01-21 16:36:25 -03:00 committed by GitHub
parent b5ac415afc
commit 43a97f86f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 8 deletions

View File

@ -32,6 +32,7 @@ from superset.daos.database import DatabaseDAO
from superset.exceptions import SupersetException
from superset.extensions import db, security_manager
from superset.models.core import Database
from superset.utils.core import DatasourceName
logger = logging.getLogger(__name__)
@ -59,7 +60,8 @@ class TablesDatabaseCommand(BaseCommand):
catalog=self._catalog_name,
schema=self._schema_name,
datasource_names=sorted(
self._model.get_all_table_names_in_schema(
DatasourceName(*datasource_name)
for datasource_name in self._model.get_all_table_names_in_schema(
catalog=self._catalog_name,
schema=self._schema_name,
force=self._force,
@ -74,7 +76,8 @@ class TablesDatabaseCommand(BaseCommand):
catalog=self._catalog_name,
schema=self._schema_name,
datasource_names=sorted(
self._model.get_all_view_names_in_schema(
DatasourceName(*datasource_name)
for datasource_name in self._model.get_all_view_names_in_schema(
catalog=self._catalog_name,
schema=self._schema_name,
force=self._force,

View File

@ -83,7 +83,7 @@ from superset.superset_typing import (
)
from superset.utils import cache as cache_util, core as utils, json
from superset.utils.backports import StrEnum
from superset.utils.core import DatasourceName, get_username
from superset.utils.core import get_username
from superset.utils.oauth2 import get_oauth2_access_token, OAuth2ClientConfigSchema
config = app.config
@ -798,7 +798,7 @@ class Database(Model, AuditMixinNullable, ImportExportMixin): # pylint: disable
self,
catalog: str | None,
schema: str,
) -> set[DatasourceName]:
) -> set[tuple[str, str, str | None]]:
"""Parameters need to be passed as keyword arguments.
For unused parameters, they are referenced in
@ -814,7 +814,7 @@ class Database(Model, AuditMixinNullable, ImportExportMixin): # pylint: disable
try:
with self.get_inspector(catalog=catalog, schema=schema) as inspector:
return {
DatasourceName(table, schema, catalog)
(table, schema, catalog)
for table in self.db_engine_spec.get_table_names(
database=self,
inspector=inspector,
@ -832,7 +832,7 @@ class Database(Model, AuditMixinNullable, ImportExportMixin): # pylint: disable
self,
catalog: str | None,
schema: str,
) -> set[DatasourceName]:
) -> set[tuple[str, str, str | None]]:
"""Parameters need to be passed as keyword arguments.
For unused parameters, they are referenced in
@ -848,7 +848,7 @@ class Database(Model, AuditMixinNullable, ImportExportMixin): # pylint: disable
try:
with self.get_inspector(catalog=catalog, schema=schema) as inspector:
return {
DatasourceName(view, schema, catalog)
(view, schema, catalog)
for view in self.db_engine_spec.get_view_names(
database=self,
inspector=inspector,
@ -873,7 +873,7 @@ class Database(Model, AuditMixinNullable, ImportExportMixin): # pylint: disable
yield sqla.inspect(engine)
@cache_util.memoized_func(
key="db:{self.id}:schema_list",
key="db:{self.id}:catalog:{catalog}:schema_list",
cache=cache_manager.cache,
)
def get_all_schema_names(