Skip to content

Commit c22c1f1

Browse files
committed
Stop rendering jinja within the macro evaluator
1 parent ea745c3 commit c22c1f1

File tree

5 files changed

+12
-22
lines changed

5 files changed

+12
-22
lines changed

examples/sushi/models/customer_revenue_by_day.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ WITH order_total AS (
2121
LEFT JOIN sushi.items AS i
2222
ON oi.item_id = i.id AND oi.event_date = i.event_date
2323
WHERE
24-
oi.event_date BETWEEN CAST('{{ start_ds }}' as DATE) AND CAST('{{ end_ds }}' as DATE)
24+
oi.event_date BETWEEN @start_ds AND @end_ds
2525
GROUP BY
2626
oi.order_id,
2727
oi.event_date
@@ -35,7 +35,7 @@ FROM sushi.orders AS o
3535
LEFT JOIN order_total AS ot
3636
ON o.id = ot.order_id AND o.event_date = ot.event_date
3737
WHERE
38-
o.event_date BETWEEN CAST('{{ start_ds }}' as DATE) AND CAST('{{ end_ds }}' as DATE)
38+
o.event_date BETWEEN @start_ds AND @end_ds
3939
GROUP BY
4040
o.customer_id,
4141
o.event_date

examples/sushi/models/waiter_as_customer_by_day.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ SELECT
2727
FROM sushi.waiters AS w
2828
JOIN sushi.customers as c ON w.waiter_id = c.customer_id
2929
JOIN sushi.waiter_names as wn ON w.waiter_id = wn.id
30-
WHERE w.event_date BETWEEN @start_date AND @end_date;
30+
WHERE w.event_date BETWEEN CAST('{{ start_ds }}' as DATE) AND @end_date;
3131

3232
JINJA_END;

sqlmesh/core/macros.py

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

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

@@ -284,12 +282,6 @@ def evaluate_macros(
284282
if node.this != text:
285283
changed = True
286284
return exp.to_identifier(text, quoted=node.quoted or None)
287-
if node.is_string:
288-
text = node.this
289-
if render_jinja and has_jinja(text):
290-
changed = True
291-
node.set("this", self.jinja_env.from_string(node.this).render())
292-
return node
293285
if isinstance(node, MacroFunc):
294286
changed = True
295287
return self.evaluate(node)

sqlmesh/core/renderer.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,6 @@ 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-
237233
macro_evaluator.locals.update(render_kwargs)
238234

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

252248
for expression in expressions:
253249
try:
254-
transformed_expressions = ensure_list(
255-
macro_evaluator.transform(expression, render_jinja=render_jinja)
256-
)
250+
transformed_expressions = ensure_list(macro_evaluator.transform(expression))
257251
except Exception as ex:
258252
raise_config_error(
259253
f"Failed to resolve macros for\n\n{expression.sql(dialect=self._dialect, pretty=True)}\n\n{ex}\n",

tests/core/test_model.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2566,11 +2566,15 @@ def test_parse(assert_exp_eq):
25662566
dialect '',
25672567
);
25682568
2569+
JINJA_QUERY_BEGIN;
2570+
25692571
SELECT
25702572
id::INT AS id,
25712573
ds
25722574
FROM x
2573-
WHERE ds BETWEEN '{{ start_ds }}' AND @end_ds
2575+
WHERE ds BETWEEN '{{ start_ds }}' AND @end_ds;
2576+
2577+
JINJA_END;
25742578
"""
25752579
)
25762580
model = load_sql_based_model(expressions, dialect="hive")
@@ -2580,8 +2584,8 @@ def test_parse(assert_exp_eq):
25802584
}
25812585
assert not model.annotated
25822586
assert model.dialect == ""
2583-
assert isinstance(model.query, exp.Select)
2584-
assert isinstance(SqlModel.parse_raw(model.json()).query, exp.Select)
2587+
assert isinstance(model.query, d.JinjaQuery)
2588+
assert isinstance(SqlModel.parse_raw(model.json()).query, d.JinjaQuery)
25852589
assert_exp_eq(
25862590
model.render_query(),
25872591
"""

0 commit comments

Comments
 (0)