feat(presto): get_catalog_names (#23599)

This commit is contained in:
Beto Dealmeida
2023-04-06 09:27:49 -07:00
committed by GitHub
parent 739adcb93c
commit e2e0ad5ef5
3 changed files with 33 additions and 1 deletions

View File

@@ -310,7 +310,7 @@ class PostgresEngineSpec(PostgresBaseEngineSpec, BasicParametersMixin):
SELECT datname FROM pg_database
WHERE datistemplate = false;
"""
).fetchall()
)
)
@classmethod

View File

@@ -785,6 +785,17 @@ class PrestoEngineSpec(PrestoBaseEngineSpec):
results = cursor.fetchall()
return {row[0] for row in results}
@classmethod
def get_catalog_names(
cls,
database: Database,
inspector: Inspector,
) -> List[str]:
"""
Get all catalogs.
"""
return [catalog for (catalog,) in inspector.bind.execute("SHOW CATALOGS")]
@classmethod
def _create_column_info(
cls, name: str, data_type: types.TypeEngine

View File

@@ -19,12 +19,14 @@ from textwrap import dedent
from unittest import mock, skipUnless
import pandas as pd
from flask.ctx import AppContext
from sqlalchemy import types
from sqlalchemy.sql import select
from superset.db_engine_specs.presto import PrestoEngineSpec
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
from superset.sql_parse import ParsedQuery
from superset.utils.database import get_example_database
from tests.integration_tests.db_engine_specs.base_tests import TestDbEngineSpec
@@ -1032,3 +1034,22 @@ def test_is_readonly():
assert is_readonly("EXPLAIN SELECT 1")
assert is_readonly("SELECT 1")
assert is_readonly("WITH (SELECT 1) bla SELECT * from bla")
def test_get_catalog_names(app_context: AppContext) -> None:
"""
Test the ``get_catalog_names`` method.
"""
database = get_example_database()
if database.backend != "presto":
return
with database.get_inspector_with_context() as inspector:
assert PrestoEngineSpec.get_catalog_names(database, inspector) == [
"jmx",
"memory",
"system",
"tpcds",
"tpch",
]