From e4acb3d81586581c30cb1852abb436e0622d5150 Mon Sep 17 00:00:00 2001 From: George Sittas Date: Mon, 28 Jul 2025 14:33:12 +0300 Subject: [PATCH] Chore: log rendered jinja right before parsing it to improve debugging --- sqlmesh/core/renderer.py | 3 +++ tests/core/test_model.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) 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( """