Skip to content

Commit ea745c3

Browse files
committed
Fix: properly handle {% raw %}...{% endraw %} during rendering
1 parent a7feeb7 commit ea745c3

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

sqlmesh/core/macros.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,9 @@ def send(
246246
)
247247

248248
def transform(
249-
self, expression: exp.Expression
249+
self,
250+
expression: exp.Expression,
251+
render_jinja: bool = True,
250252
) -> exp.Expression | t.List[exp.Expression] | None:
251253
changed = False
252254

@@ -284,7 +286,7 @@ def evaluate_macros(
284286
return exp.to_identifier(text, quoted=node.quoted or None)
285287
if node.is_string:
286288
text = node.this
287-
if has_jinja(text):
289+
if render_jinja and has_jinja(text):
288290
changed = True
289291
node.set("this", self.jinja_env.from_string(node.this).render())
290292
return node

sqlmesh/core/renderer.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,10 @@ def _resolve_table(table: str | exp.Table) -> str:
230230
f"Could not render or parse jinja at '{self._path}'.\n{ex}"
231231
) from ex
232232

233+
render_jinja = False
234+
else:
235+
render_jinja = True
236+
233237
macro_evaluator.locals.update(render_kwargs)
234238

235239
if variables:
@@ -247,7 +251,9 @@ def _resolve_table(table: str | exp.Table) -> str:
247251

248252
for expression in expressions:
249253
try:
250-
transformed_expressions = ensure_list(macro_evaluator.transform(expression))
254+
transformed_expressions = ensure_list(
255+
macro_evaluator.transform(expression, render_jinja=render_jinja)
256+
)
251257
except Exception as ex:
252258
raise_config_error(
253259
f"Failed to resolve macros for\n\n{expression.sql(dialect=self._dialect, pretty=True)}\n\n{ex}\n",
@@ -278,6 +284,7 @@ def _resolve_table(table: str | exp.Table) -> str:
278284
# MacroEvaluator can resolve columns_to_types calls and provide true schemas.
279285
if should_cache and (not self.schema.empty or not macro_evaluator.columns_to_types_called):
280286
self._cache = resolved_expressions
287+
281288
return resolved_expressions
282289

283290
def update_cache(self, expression: t.Optional[exp.Expression]) -> None:

tests/core/test_model.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11543,3 +11543,18 @@ def test_text_diff_optimize_query():
1154311543
diff = model1.text_diff(model2)
1154411544
assert diff, "Expected diff to show optimize_query change"
1154511545
assert "+ optimize_query" in diff.lower()
11546+
11547+
11548+
def test_raw_jinja_raw_tag():
11549+
expressions = d.parse(
11550+
"""
11551+
MODEL (name test);
11552+
11553+
JINJA_QUERY_BEGIN;
11554+
SELECT {% raw %} '{{ foo }}' {% endraw %} AS col;
11555+
JINJA_END;
11556+
"""
11557+
)
11558+
11559+
model = load_sql_based_model(expressions)
11560+
assert model.render_query().sql() == "SELECT '{{ foo }}' AS \"col\""

0 commit comments

Comments
 (0)