Skip to content

Commit 674ae8d

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

File tree

5 files changed

+12
-34
lines changed

5 files changed

+12
-34
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 & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from datetime import datetime, date
1313

1414
import sqlglot
15-
from jinja2 import Environment
1615
from sqlglot import Generator, exp, parse_one
1716
from sqlglot.executor.env import ENV
1817
from sqlglot.executor.python import Python
@@ -40,7 +39,6 @@
4039
)
4140
from sqlmesh.utils.date import DatetimeRanges, to_datetime, to_date
4241
from sqlmesh.utils.errors import MacroEvalError, SQLMeshError
43-
from sqlmesh.utils.jinja import JinjaMacroRegistry, has_jinja
4442
from sqlmesh.utils.metaprogramming import (
4543
Executable,
4644
SqlValue,
@@ -193,7 +191,6 @@ def __init__(
193191
self.columns_to_types_called = False
194192
self.default_catalog = default_catalog
195193

196-
self._jinja_env: t.Optional[Environment] = None
197194
self._schema = schema
198195
self._resolve_table = resolve_table
199196
self._resolve_tables = resolve_tables
@@ -246,9 +243,7 @@ def send(
246243
)
247244

248245
def transform(
249-
self,
250-
expression: exp.Expression,
251-
render_jinja: bool = True,
246+
self, expression: exp.Expression
252247
) -> exp.Expression | t.List[exp.Expression] | None:
253248
changed = False
254249

@@ -284,12 +279,6 @@ def evaluate_macros(
284279
if node.this != text:
285280
changed = True
286281
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
293282
if isinstance(node, MacroFunc):
294283
changed = True
295284
return self.evaluate(node)
@@ -438,14 +427,6 @@ def parse_one(
438427
"""
439428
return sqlglot.maybe_parse(sql, dialect=self.dialect, into=into, **opts)
440429

441-
@property
442-
def jinja_env(self) -> Environment:
443-
if not self._jinja_env:
444-
jinja_env_methods = {**self.locals, **self.env}
445-
del jinja_env_methods["self"]
446-
self._jinja_env = JinjaMacroRegistry().build_environment(**jinja_env_methods)
447-
return self._jinja_env
448-
449430
def columns_to_types(self, model_name: TableName | exp.Column) -> t.Dict[str, exp.DataType]:
450431
"""Returns the columns-to-types mapping corresponding to the specified model."""
451432

sqlmesh/core/renderer.py

Lines changed: 1 addition & 8 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",
@@ -284,7 +278,6 @@ def _resolve_table(table: str | exp.Table) -> str:
284278
# MacroEvaluator can resolve columns_to_types calls and provide true schemas.
285279
if should_cache and (not self.schema.empty or not macro_evaluator.columns_to_types_called):
286280
self._cache = resolved_expressions
287-
288281
return resolved_expressions
289282

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

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)