Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions sqlmesh/core/renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,17 +239,21 @@ def _resolve_table(table: str | exp.Table) -> str:
logger.debug(
f"Rendered Jinja expression for model '{self._model_fqn}' at '{self._path}': '{rendered_expression}'"
)
if rendered_expression.strip():
except ParsetimeAdapterCallError:
raise
except Exception as ex:
raise ConfigError(f"Could not render jinja at '{self._path}'.\n{ex}") from ex

if rendered_expression.strip():
try:
expressions = [e for e in parse(rendered_expression, read=self._dialect) if e]

if not expressions:
raise ConfigError(f"Failed to parse an expression:\n{self._expression}")
except ParsetimeAdapterCallError:
raise
except Exception as ex:
raise ConfigError(
f"Could not render or parse jinja at '{self._path}'.\n{ex}"
) from ex
except Exception as ex:
raise ConfigError(
f"Could not parse the rendered jinja at '{self._path}'.\n{ex}"
) from ex

if this_model:
render_kwargs["this_model"] = this_model
Expand Down
19 changes: 18 additions & 1 deletion tests/core/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -8588,6 +8588,23 @@ def test_comments_in_jinja_query():
model.render_query()


def test_jinja_render_parse_error():
expressions = d.parse(
"""
MODEL (name db.test_model);

JINJA_QUERY_BEGIN;
{{ unknown_macro() }}
JINJA_END;
"""
)

model = load_sql_based_model(expressions)

with pytest.raises(ConfigError, match=r"Could not render jinja"):
model.render_query()


def test_jinja_render_debug_logging(caplog):
"""Test that rendered Jinja expressions are logged for debugging."""
import logging
Expand All @@ -8609,7 +8626,7 @@ def test_jinja_render_debug_logging(caplog):
model = load_sql_based_model(expressions)

# Attempt to render - this should fail due to invalid SQL syntax
with pytest.raises(ConfigError, match=r"Could not render or parse jinja"):
with pytest.raises(ConfigError, match=r"Could not parse the rendered jinja"):
model.render_query()

# Check that the rendered Jinja was logged
Expand Down