Skip to content

Commit 7040c74

Browse files
authored
Fix: Always support start_* / end_* macros in pre- / post- statements (#4025)
1 parent 775936b commit 7040c74

2 files changed

Lines changed: 45 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: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,8 @@ def test_macro(**kwargs) -> None:
716716

717717

718718
def test_model_pre_post_statements():
719+
macro.registry().pop("foo", None)
720+
719721
@macro()
720722
def foo(**kwargs) -> None:
721723
pass
@@ -776,6 +778,46 @@ def multiple_statements(evaluator, t1_value=exp.Literal.number(1)):
776778
assert "exp" in model.python_env
777779

778780

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

10311073

10321074
def test_seed_pre_post_statements():
1075+
macro.registry().pop("bar", None)
1076+
10331077
@macro()
10341078
def bar(**kwargs) -> None:
10351079
pass

0 commit comments

Comments
 (0)