Skip to content

Commit c42987d

Browse files
committed
fix: allow macro defs to references dates and other builtins
1 parent 151da8c commit c42987d

3 files changed

Lines changed: 34 additions & 6 deletions

File tree

examples/sushi/models/waiter_revenue_by_day.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ MODEL (
1313
grain (waiter_id, event_date)
1414
);
1515

16+
@DEF(where_filter, o.event_date BETWEEN @start_date AND @end_date);
17+
1618
SELECT
1719
o.waiter_id::INT AS waiter_id, /* Waiter id */
1820
SUM(oi.quantity * i.price)::DOUBLE AS revenue, /* Revenue from orders taken by this waiter */
@@ -23,7 +25,7 @@ LEFT JOIN sushi.order_items AS oi
2325
LEFT JOIN sushi.items AS i
2426
ON oi.item_id = i.id AND oi.event_date = i.event_date
2527
WHERE
26-
o.event_date BETWEEN @start_date AND @end_date
28+
@where_filter
2729
GROUP BY
2830
o.waiter_id,
2931
o.event_date

sqlmesh/core/renderer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -213,17 +213,17 @@ def _render(
213213
environment_naming_info=environment_naming_info,
214214
)
215215

216+
macro_evaluator.locals.update(render_kwargs)
217+
218+
if variables:
219+
macro_evaluator.locals.setdefault(c.SQLMESH_VARS, {}).update(variables)
220+
216221
for definition in self._macro_definitions:
217222
try:
218223
macro_evaluator.evaluate(definition)
219224
except Exception as ex:
220225
raise_config_error(f"Failed to evaluate macro '{definition}'. {ex}", self._path)
221226

222-
macro_evaluator.locals.update(render_kwargs)
223-
224-
if variables:
225-
macro_evaluator.locals.setdefault(c.SQLMESH_VARS, {}).update(variables)
226-
227227
resolved_expressions: t.List[t.Optional[exp.Expression]] = []
228228

229229
for expression in expressions:

tests/core/test_model.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8983,3 +8983,29 @@ def test_model(context, **kwargs):
89838983

89848984
assert python_model.kind.disable_restatement is False
89858985
assert python_model.optimize_query is False
8986+
8987+
8988+
def test_var_in_def(assert_exp_eq):
8989+
expressions = d.parse(
8990+
"""
8991+
MODEL (
8992+
name db.table,
8993+
kind INCREMENTAL_BY_TIME_RANGE(
8994+
time_column ds
8995+
),
8996+
);
8997+
8998+
@DEF(var, @start_ds);
8999+
9000+
SELECT @var AS ds
9001+
"""
9002+
)
9003+
9004+
model = load_sql_based_model(expressions)
9005+
9006+
assert_exp_eq(
9007+
model.render_query(),
9008+
"""
9009+
SELECT '1970-01-01' AS "ds"
9010+
""",
9011+
)

0 commit comments

Comments
 (0)