Skip to content

Commit 02bf7fe

Browse files
committed
Add test for variable precedence
1 parent dcaa576 commit 02bf7fe

1 file changed

Lines changed: 85 additions & 0 deletions

File tree

tests/core/test_model.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8405,6 +8405,91 @@ def test_blueprinting_with_quotes(tmp_path: Path) -> None:
84058405
assert t.cast(exp.Query, m2.render_query()).sql() == '''SELECT 'c d' AS "c1", "c d" AS "c2"'''
84068406

84078407

8408+
def test_blueprint_variable_precedence(tmp_path: Path, assert_exp_eq: t.Callable) -> None:
8409+
init_example_project(tmp_path, dialect="duckdb", template=ProjectTemplate.EMPTY)
8410+
8411+
template_with_quoted_vars = tmp_path / "models/template_with_quoted_vars.sql"
8412+
template_with_quoted_vars.parent.mkdir(parents=True, exist_ok=True)
8413+
template_with_quoted_vars.write_text(
8414+
"""
8415+
MODEL (
8416+
name s.@{bp_name},
8417+
blueprints (
8418+
(bp_name := m1, var1 := 'v1', var2 := 'v2'),
8419+
(bp_name := m2, var1 := 'v3'),
8420+
),
8421+
);
8422+
8423+
@DEF(bp_name, override);
8424+
8425+
SELECT
8426+
@var1 AS var1_macro_var,
8427+
@{var1} AS var1_identifier,
8428+
@VAR('var1') AS var1_var_macro_func,
8429+
@BLUEPRINT_VAR('var1') AS var1_blueprint_var_macro_func,
8430+
8431+
@var2 AS var2_macro_var,
8432+
@{var2} AS var2_identifier,
8433+
@VAR('var2') AS var2_var_macro_func,
8434+
@BLUEPRINT_VAR('var2') AS var2_blueprint_var_macro_func,
8435+
8436+
@bp_name AS bp_name_macro_var,
8437+
@{bp_name} AS bp_name_identifier,
8438+
@VAR('bp_name') AS bp_name_var_macro_func,
8439+
@BLUEPRINT_VAR('bp_name') AS bp_name_blueprint_var_macro_func,
8440+
"""
8441+
)
8442+
8443+
ctx = Context(
8444+
config=Config(
8445+
model_defaults=ModelDefaultsConfig(dialect="duckdb"),
8446+
variables={"var2": "1"},
8447+
),
8448+
paths=tmp_path,
8449+
)
8450+
assert len(ctx.models) == 2
8451+
8452+
m1 = ctx.get_model("s.m1", raise_if_missing=True)
8453+
m2 = ctx.get_model("s.m2", raise_if_missing=True)
8454+
8455+
assert_exp_eq(
8456+
m1.render_query(),
8457+
"""
8458+
SELECT
8459+
'v1' AS "var1_macro_var",
8460+
"v1" AS "var1_identifier",
8461+
NULL AS "var1_var_macro_func",
8462+
'v1' AS "var1_blueprint_var_macro_func",
8463+
'v2' AS "var2_macro_var",
8464+
"v2" AS "var2_identifier",
8465+
'1' AS "var2_var_macro_func",
8466+
'v2' AS "var2_blueprint_var_macro_func",
8467+
"override" AS "bp_name_macro_var",
8468+
"override" AS "bp_name_identifier",
8469+
NULL AS "bp_name_var_macro_func",
8470+
"m1" AS "bp_name_blueprint_var_macro_func"
8471+
""",
8472+
)
8473+
assert_exp_eq(
8474+
m2.render_query(),
8475+
"""
8476+
SELECT
8477+
'v3' AS "var1_macro_var",
8478+
"v3" AS "var1_identifier",
8479+
NULL AS "var1_var_macro_func",
8480+
'v3' AS "var1_blueprint_var_macro_func",
8481+
'1' AS "var2_macro_var",
8482+
"1" AS "var2_identifier",
8483+
'1' AS "var2_var_macro_func",
8484+
NULL AS "var2_blueprint_var_macro_func",
8485+
"override" AS "bp_name_macro_var",
8486+
"override" AS "bp_name_identifier",
8487+
NULL AS "bp_name_var_macro_func",
8488+
"m2" AS "bp_name_blueprint_var_macro_func"
8489+
""",
8490+
)
8491+
8492+
84088493
@time_machine.travel("2020-01-01 00:00:00 UTC")
84098494
def test_dynamic_date_spine_model(assert_exp_eq):
84108495
@macro()

0 commit comments

Comments
 (0)