From d66d0b85e76c598ab17b069922b4be55ebd1158f Mon Sep 17 00:00:00 2001 From: George Sittas Date: Thu, 4 Sep 2025 19:38:44 +0300 Subject: [PATCH] Fix: make jinja-based model rendering more lenient --- sqlmesh/core/renderer.py | 5 +++++ .../dbt/sushi_test/models/dynamic_graph_model.sql | 8 ++++++++ 2 files changed, 13 insertions(+) create mode 100644 tests/fixtures/dbt/sushi_test/models/dynamic_graph_model.sql diff --git a/sqlmesh/core/renderer.py b/sqlmesh/core/renderer.py index 4078d718a6..89ea1f6f2d 100644 --- a/sqlmesh/core/renderer.py +++ b/sqlmesh/core/renderer.py @@ -542,6 +542,11 @@ def render( expressions = [e for e in expressions if not isinstance(e, exp.Semicolon)] if not expressions: + # We assume that if there are no expressions, then the model contains dynamic Jinja SQL + # and we thus treat it similar to models with adapter calls to match dbt's behavior. + if isinstance(self._expression, d.JinjaQuery): + return None + raise ConfigError(f"Failed to render query at '{self._path}':\n{self._expression}") if len(expressions) > 1: diff --git a/tests/fixtures/dbt/sushi_test/models/dynamic_graph_model.sql b/tests/fixtures/dbt/sushi_test/models/dynamic_graph_model.sql new file mode 100644 index 0000000000..18da9c3c7b --- /dev/null +++ b/tests/fixtures/dbt/sushi_test/models/dynamic_graph_model.sql @@ -0,0 +1,8 @@ + +{% if execute %} + {% for dataset, nodes in graph.nodes.values() | selectattr("resource_type", "equalto", "model") | groupby('schema') %} + {% if loop.first %} + SELECT 1 AS c + {% endif %} + {% endfor %} +{% endif %}