Skip to content

Commit 45c4f04

Browse files
committed
Additional sanity check, minor fixup
1 parent 6ea8019 commit 45c4f04

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

sqlmesh/core/model/common.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def _is_metadata_macro(name: str, appears_in_metadata_expression: bool) -> bool:
128128

129129
var_name = args[0].this.lower()
130130
used_variables[var_name] = _is_metadata_var(
131-
name, macro_func_or_var, is_metadata
131+
var_name, macro_func_or_var, is_metadata
132132
)
133133
elif id(macro_func_or_var) not in visited_macro_funcs:
134134
var_refs, _expr_under_metadata_macro_func, _visited_macro_funcs = (
@@ -138,11 +138,16 @@ def _is_metadata_macro(name: str, appears_in_metadata_expression: bool) -> bool:
138138
visited_macro_funcs.update(_visited_macro_funcs)
139139
outermost_macro_func_ancestor_by_var |= {var_ref: name for var_ref in var_refs}
140140
elif macro_func_or_var.__class__ is d.MacroVar:
141-
name = macro_func_or_var.name.lower()
142-
if name in macros:
143-
used_macros[name] = (macros[name], _is_metadata_macro(name, is_metadata))
144-
elif name in variables or name in blueprint_variables:
145-
used_variables[name] = _is_metadata_var(name, macro_func_or_var, is_metadata)
141+
var_name = macro_func_or_var.name.lower()
142+
if var_name in macros:
143+
used_macros[var_name] = (
144+
macros[var_name],
145+
_is_metadata_macro(var_name, is_metadata),
146+
)
147+
elif var_name in variables or var_name in blueprint_variables:
148+
used_variables[var_name] = _is_metadata_var(
149+
var_name, macro_func_or_var, is_metadata
150+
)
146151
elif (
147152
isinstance(macro_func_or_var, (exp.Identifier, d.MacroStrReplace, d.MacroSQL))
148153
) and "@" in macro_func_or_var.name:
@@ -249,6 +254,12 @@ def _add_variables_to_python_env(
249254

250255
non_metadata_used_variables = set(used_variables) - metadata_used_variables
251256

257+
if overlapping_variables := (non_metadata_used_variables & metadata_used_variables):
258+
raise ConfigError(
259+
f"Variables {', '.join(overlapping_variables)} are both metadata and non-metadata, "
260+
"which is unexpected. Please file an issue at https://github.com/TobikoData/sqlmesh/issues/new."
261+
)
262+
252263
metadata_variables = {
253264
k: v for k, v in (variables or {}).items() if k in metadata_used_variables
254265
}

0 commit comments

Comments
 (0)