Skip to content

Commit d9af742

Browse files
committed
fix(fabric): include default warehouse on listed objects
Signed-off-by: Cortland Goffena <30168413+cmgoffena13@users.noreply.github.com>
1 parent 11ac31a commit d9af742

2 files changed

Lines changed: 55 additions & 2 deletions

File tree

‎sqlmesh/core/engine_adapter/fabric.py‎

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
from sqlmesh.core.engine_adapter.shared import (
1212
CommentCreationTable,
1313
CommentCreationView,
14+
DataObject,
1415
InsertOverwriteStrategy,
1516
)
1617
from sqlmesh.utils.errors import SQLMeshError
1718
from sqlmesh.utils.connection_pool import ConnectionPool
1819
from sqlmesh.core.schema_diff import TableAlterOperation
1920
from sqlmesh.utils import random_id
2021

21-
2222
logger = logging.getLogger(__name__)
2323

2424

@@ -224,6 +224,31 @@ def set_current_catalog(self, catalog_name: t.Optional[str]) -> None:
224224

225225
self._target_catalog = target_catalog
226226

227+
def _get_data_objects(
228+
self, schema_name: t.Union[str, exp.Table], object_names: t.Optional[t.Set[str]] = None
229+
) -> t.List[DataObject]:
230+
objects = super()._get_data_objects(schema_name, object_names)
231+
# Fabric uses None as "default catalog" so we skip reconnects. Other engines
232+
# return a real warehouse name here; fill it in so this listing matches them
233+
# and so the data-object cache key matches lookups that use that name.
234+
catalog = (
235+
self.get_current_catalog()
236+
or self._default_catalog
237+
or self._extra_config.get("database")
238+
)
239+
if not catalog:
240+
return objects
241+
return [
242+
DataObject(
243+
catalog=obj.catalog or catalog,
244+
schema=obj.schema_name,
245+
name=obj.name,
246+
type=obj.type,
247+
clustering_key=obj.clustering_key,
248+
)
249+
for obj in objects
250+
]
251+
227252
def alter_table(
228253
self, alter_expressions: t.Union[t.List[exp.Alter], t.List[TableAlterOperation]]
229254
) -> None:

‎tests/core/engine_adapter/test_fabric.py‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from sqlmesh.core.engine_adapter import FabricEngineAdapter
1111
from tests.core.engine_adapter import to_sql_calls
12-
from sqlmesh.core.engine_adapter.shared import DataObject
12+
from sqlmesh.core.engine_adapter.shared import DataObject, DataObjectType
1313

1414
pytestmark = [pytest.mark.engine, pytest.mark.fabric]
1515

@@ -451,3 +451,31 @@ def test_comments(make_mocked_engine_adapter: t.Callable, mocker: MockerFixture)
451451
create_table_comment_mock.assert_not_called()
452452
create_column_comments_mock.assert_not_called()
453453
assert to_sql_calls(adapter) == []
454+
455+
456+
def test_get_data_objects_uses_default_catalog_when_current_is_none(
457+
make_mocked_engine_adapter: t.Callable,
458+
mocker: MockerFixture,
459+
) -> None:
460+
adapter = make_mocked_engine_adapter(
461+
FabricEngineAdapter,
462+
default_catalog="ci_abc",
463+
database="ci_abc",
464+
patch_get_data_objects=False,
465+
)
466+
assert adapter.get_current_catalog() is None
467+
468+
mocker.patch.object(
469+
adapter,
470+
"fetchdf",
471+
return_value=pd.DataFrame([{"name": "test_table", "schema_name": "dbo", "type": "TABLE"}]),
472+
)
473+
474+
assert adapter._get_data_objects("dbo") == [
475+
DataObject(
476+
catalog="ci_abc",
477+
schema="dbo",
478+
name="test_table",
479+
type=DataObjectType.TABLE,
480+
)
481+
]

0 commit comments

Comments
 (0)