Skip to content

Commit b1b383f

Browse files
committed
Fix: Always support start_* / end_* macros in pre- / post- statements
1 parent 0bb482a commit b1b383f

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

sqlmesh/core/model/definition.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ def _statement_renderer(self, expression: exp.Expression) -> ExpressionRenderer:
584584
path=self._path,
585585
jinja_macro_registry=self.jinja_macros,
586586
python_env=self.python_env,
587-
only_execution_time=self.kind.only_execution_time,
587+
only_execution_time=False,
588588
default_catalog=self.default_catalog,
589589
model_fqn=self.fqn,
590590
)

tests/core/test_model.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,46 @@ def multiple_statements(evaluator, t1_value=exp.Literal.number(1)):
776776
assert "exp" in model.python_env
777777

778778

779+
@pytest.mark.parametrize("model_kind", ["FULL", "VIEW"])
780+
def test_model_pre_post_statements_start_end_are_always_available(model_kind: str):
781+
macro.registry().pop("foo", None)
782+
macro.registry().pop("bar", None)
783+
784+
@macro()
785+
def foo(evaluator: MacroEvaluator, start: str, end: str) -> str:
786+
return f"'{start}, {end}'"
787+
788+
@macro()
789+
def bar(evaluator: MacroEvaluator, start: int, end: int) -> str:
790+
return f"'{start}, {end}'"
791+
792+
expressions = d.parse(
793+
f"""
794+
MODEL (
795+
name db.table,
796+
kind {model_kind},
797+
);
798+
799+
@foo(@start_ds, @end_ds);
800+
801+
SELECT 1 AS x;
802+
803+
@bar(@start_millis, @end_millis);
804+
"""
805+
)
806+
model = load_sql_based_model(expressions)
807+
808+
start = "2025-01-01"
809+
end = "2025-01-02"
810+
811+
assert model.render_pre_statements(start=start, end=end) == [
812+
exp.Literal.string(f"{start}, {end}")
813+
]
814+
assert model.render_post_statements(start=start, end=end) == [
815+
exp.Literal.string(f"{to_timestamp(start)}, {to_timestamp('2025-01-03') - 1}")
816+
]
817+
818+
779819
def test_seed_hydration():
780820
expressions = d.parse(
781821
"""

0 commit comments

Comments
 (0)