Skip to content

Commit

Permalink
feat(presto): get_catalog_names (#23599)
Browse files Browse the repository at this point in the history
  • Loading branch information
betodealmeida authored Apr 6, 2023
1 parent 739adcb commit e2e0ad5
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion superset/db_engine_specs/postgres.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ def get_catalog_names(
SELECT datname FROM pg_database
WHERE datistemplate = false;
"""
).fetchall()
)
)

@classmethod
Expand Down
11 changes: 11 additions & 0 deletions superset/db_engine_specs/presto.py
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,17 @@ def get_view_names(
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
Expand Down
21 changes: 21 additions & 0 deletions tests/integration_tests/db_engine_specs/presto_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@
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


Expand Down Expand Up @@ -1032,3 +1034,22 @@ def is_readonly(sql: str) -> bool:
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",
]

0 comments on commit e2e0ad5

Please sign in to comment.