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 %}