From ae20bf0913645cf3a0f03cadcc8066db10a0b895 Mon Sep 17 00:00:00 2001 From: Vincent Chan Date: Wed, 10 Sep 2025 23:29:50 -0700 Subject: [PATCH 1/3] Fix: Include root package in search candidates when resolving macros --- sqlmesh/dbt/adapter.py | 5 +++-- tests/dbt/test_adapter.py | 1 + tests/fixtures/dbt/sushi_test/macros/distinct.sql | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/dbt/sushi_test/macros/distinct.sql diff --git a/sqlmesh/dbt/adapter.py b/sqlmesh/dbt/adapter.py index 12e38e4749..12de9ef014 100644 --- a/sqlmesh/dbt/adapter.py +++ b/sqlmesh/dbt/adapter.py @@ -139,10 +139,11 @@ def _relevance(package_name_pair: t.Tuple[t.Optional[str], str]) -> t.Tuple[int, return name_score, package_score jinja_env = self.jinja_macros.build_environment(**self.jinja_globals).globals - packages_to_check: t.List[t.Optional[str]] = [ + packages_to_check: t.Set[t.Optional[str]] = { macro_namespace, + # self.jinja_macros.root_package_name, *(k for k in jinja_env if k.startswith("dbt")), - ] + } candidates = {} for macro_package in packages_to_check: macros = jinja_env.get(macro_package, {}) if macro_package else jinja_env diff --git a/tests/dbt/test_adapter.py b/tests/dbt/test_adapter.py index 5617d8c5c3..381401ce73 100644 --- a/tests/dbt/test_adapter.py +++ b/tests/dbt/test_adapter.py @@ -242,6 +242,7 @@ def test_adapter_dispatch(sushi_test_project: Project, runtime_renderer: t.Calla assert renderer("{{ adapter.dispatch('current_engine', 'customers')() }}") == "duckdb" assert renderer("{{ adapter.dispatch('current_timestamp')() }}") == "now()" assert renderer("{{ adapter.dispatch('current_timestamp', 'dbt')() }}") == "now()" + assert renderer("{{ adapter.dispatch('select_distinct', 'customers')() }}") == "distinct" # test with keyword arguments assert ( diff --git a/tests/fixtures/dbt/sushi_test/macros/distinct.sql b/tests/fixtures/dbt/sushi_test/macros/distinct.sql new file mode 100644 index 0000000000..1b339a9349 --- /dev/null +++ b/tests/fixtures/dbt/sushi_test/macros/distinct.sql @@ -0,0 +1 @@ +{% macro default__select_distinct() %}distinct{% endmacro %} From dcc6d8e5190b6e74db0f76f09fe714b05bd3c7f4 Mon Sep 17 00:00:00 2001 From: Vincent Chan Date: Wed, 24 Sep 2025 10:15:45 -0700 Subject: [PATCH 2/3] Improve macro dispatch handling --- sqlmesh/dbt/adapter.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sqlmesh/dbt/adapter.py b/sqlmesh/dbt/adapter.py index 12de9ef014..d817867b77 100644 --- a/sqlmesh/dbt/adapter.py +++ b/sqlmesh/dbt/adapter.py @@ -139,11 +139,16 @@ def _relevance(package_name_pair: t.Tuple[t.Optional[str], str]) -> t.Tuple[int, return name_score, package_score jinja_env = self.jinja_macros.build_environment(**self.jinja_globals).globals - packages_to_check: t.Set[t.Optional[str]] = { - macro_namespace, - # self.jinja_macros.root_package_name, - *(k for k in jinja_env if k.startswith("dbt")), - } + + # Build the set of packages to check based on dispatch configuration + packages_to_check: t.List[t.Optional[str]] = [None] + if macro_namespace is not None: + if macro_namespace in jinja_env: + packages_to_check = [self.jinja_macros.root_package_name, macro_namespace] + + # Add dbt packages as fallback + packages_to_check.extend(k for k in jinja_env if k.startswith("dbt")) + candidates = {} for macro_package in packages_to_check: macros = jinja_env.get(macro_package, {}) if macro_package else jinja_env From feefdab9c56ceb199bf22cf040e8dc540394a4b0 Mon Sep 17 00:00:00 2001 From: Vincent Chan Date: Wed, 24 Sep 2025 10:56:50 -0700 Subject: [PATCH 3/3] Remove misleading comment --- sqlmesh/dbt/adapter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sqlmesh/dbt/adapter.py b/sqlmesh/dbt/adapter.py index d817867b77..7f7c7eb4fb 100644 --- a/sqlmesh/dbt/adapter.py +++ b/sqlmesh/dbt/adapter.py @@ -140,7 +140,6 @@ def _relevance(package_name_pair: t.Tuple[t.Optional[str], str]) -> t.Tuple[int, jinja_env = self.jinja_macros.build_environment(**self.jinja_globals).globals - # Build the set of packages to check based on dispatch configuration packages_to_check: t.List[t.Optional[str]] = [None] if macro_namespace is not None: if macro_namespace in jinja_env: