diff --git a/sqlmesh/core/renderer.py b/sqlmesh/core/renderer.py index f2e9e24056..dc89e15af6 100644 --- a/sqlmesh/core/renderer.py +++ b/sqlmesh/core/renderer.py @@ -215,6 +215,9 @@ def _resolve_table(table: str | exp.Table) -> str: try: expressions = [] rendered_expression = jinja_env.from_string(self._expression.name).render() + logger.debug( + f"Rendered Jinja expression for model '{self._model_fqn}' at '{self._path}': '{rendered_expression}'" + ) if rendered_expression.strip(): expressions = [e for e in parse(rendered_expression, read=self._dialect) if e] diff --git a/tests/core/test_model.py b/tests/core/test_model.py index a99920b420..b7c74f90a2 100644 --- a/tests/core/test_model.py +++ b/tests/core/test_model.py @@ -8534,6 +8534,38 @@ def test_comments_in_jinja_query(): model.render_query() +def test_jinja_render_debug_logging(caplog): + """Test that rendered Jinja expressions are logged for debugging.""" + import logging + + # Set log level to DEBUG to capture debug logs + caplog.set_level(logging.DEBUG, logger="sqlmesh.core.renderer") + + # Create a model with unparseable Jinja that will be rendered + expressions = d.parse( + """ + MODEL (name db.test_model); + + JINJA_QUERY_BEGIN; + {{ 'SELECT invalid syntax here!' }} + JINJA_END; + """ + ) + + 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"): + model.render_query() + + # Check that the rendered Jinja was logged + assert any( + 'Rendered Jinja expression for model \'"db"."test_model"\'' in record.message + and "SELECT invalid syntax here!" in record.message + for record in caplog.records + ) + + def test_staged_file_path(): expressions = d.parse( """