Skip to content

Commit c50e9db

Browse files
committed
get_current_catalog
1 parent da2e5fc commit c50e9db

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

sqlmesh/core/engine_adapter/fabric.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ def _drop_catalog(self, catalog_name: exp.Identifier) -> None:
108108
# will fail with an 'Authentication Failed' error unless we close all connections here, which also clears all the threadlocal data
109109
self.close()
110110

111+
def get_current_catalog(self) -> t.Optional[str]:
112+
"""Return the adapter-managed catalog for Fabric's stateless sessions."""
113+
return self._target_catalog or self._extra_config.get("database")
114+
111115
def set_current_catalog(self, catalog_name: str) -> None:
112116
"""
113117
Set the current catalog for Microsoft Fabric connections.

tests/core/engine_adapter/test_fabric.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,50 @@ def adapter(make_mocked_engine_adapter: t.Callable) -> FabricEngineAdapter:
1919
return make_mocked_engine_adapter(FabricEngineAdapter)
2020

2121

22+
def test_get_current_catalog_uses_target_catalog_or_configured_database(
23+
make_mocked_engine_adapter: t.Callable,
24+
):
25+
adapter = make_mocked_engine_adapter(
26+
FabricEngineAdapter,
27+
database="default_catalog",
28+
)
29+
30+
assert adapter.get_current_catalog() == "default_catalog"
31+
32+
adapter._target_catalog = "switched_catalog"
33+
34+
assert adapter.get_current_catalog() == "switched_catalog"
35+
36+
adapter._connection_pool.close()
37+
38+
assert adapter._connection_pool.get_attribute("target_catalog") is None
39+
assert adapter.get_current_catalog() == "default_catalog"
40+
adapter.cursor.execute.assert_not_called()
41+
42+
43+
def test_get_current_catalog_returns_none_without_target_or_database(
44+
make_mocked_engine_adapter: t.Callable,
45+
):
46+
adapter = make_mocked_engine_adapter(FabricEngineAdapter)
47+
48+
assert adapter.get_current_catalog() is None
49+
adapter.cursor.execute.assert_not_called()
50+
51+
52+
def test_set_current_catalog_does_not_query_database(
53+
make_mocked_engine_adapter: t.Callable,
54+
):
55+
adapter = make_mocked_engine_adapter(
56+
FabricEngineAdapter,
57+
database="default_catalog",
58+
)
59+
60+
adapter.set_current_catalog("new_catalog")
61+
62+
assert adapter.get_current_catalog() == "new_catalog"
63+
adapter.cursor.execute.assert_not_called()
64+
65+
2266
def test_columns(adapter: FabricEngineAdapter):
2367
adapter.cursor.fetchall.return_value = [
2468
("decimal_ps", "decimal", None, 5, 4),

0 commit comments

Comments
 (0)