diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index 8db57e96cc2d4..36ac219612135 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -1096,4 +1096,8 @@ def get_extra_params(database: "Database") -> Dict[str, Any]: @classmethod def is_readonly_query(cls, parsed_query: ParsedQuery) -> bool: """Pessimistic readonly, 100% sure statement won't mutate anything""" - return parsed_query.is_select() or parsed_query.is_explain() + return ( + parsed_query.is_select() + or parsed_query.is_explain() + or parsed_query.is_show() + ) diff --git a/tests/db_engine_specs/base_engine_spec_tests.py b/tests/db_engine_specs/base_engine_spec_tests.py index 57dd3cb2f811b..960a8d1c46a49 100644 --- a/tests/db_engine_specs/base_engine_spec_tests.py +++ b/tests/db_engine_specs/base_engine_spec_tests.py @@ -263,9 +263,11 @@ def test_is_readonly(): def is_readonly(sql: str) -> bool: return BaseEngineSpec.is_readonly_query(ParsedQuery(sql)) - assert not is_readonly("SHOW LOCKS test EXTENDED") + assert is_readonly("SHOW LOCKS test EXTENDED") assert not is_readonly("SET hivevar:desc='Legislators'") assert not is_readonly("UPDATE t1 SET col1 = NULL") assert is_readonly("EXPLAIN SELECT 1") assert is_readonly("SELECT 1") assert is_readonly("WITH (SELECT 1) bla SELECT * from bla") + assert is_readonly("SHOW CATALOGS") + assert is_readonly("SHOW TABLES")