Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion sqlmesh/core/macros.py
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,13 @@ def substitute(

if len(items) == 1:
item = items[0]
expressions = item.expressions if isinstance(item, (exp.Array, exp.Tuple)) else item
expressions = (
item.expressions
if isinstance(item, (exp.Array, exp.Tuple))
else item.this
if isinstance(item, exp.Paren)
else item
)
else:
expressions = items

Expand Down
59 changes: 59 additions & 0 deletions tests/core/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
create_seed_model,
create_sql_model,
load_sql_based_model,
load_sql_based_models,
model,
)
from sqlmesh.core.model.common import parse_expression
Expand Down Expand Up @@ -11096,3 +11097,61 @@ def test_render_query_optimize_query_false(assert_exp_eq, sushi_context):
LIMIT 10
""",
)


def test_each_macro_with_paren_expression_arg(assert_exp_eq):
expressions = d.parse(
"""
MODEL (
name dataset.@table_name,
kind VIEW,
blueprints (
(
table_name := model1,
event_columns := (
'value' AS property1,
'value' AS property2
)
),
(
table_name := model2,
event_columns := (
'value' AS property1
)
)
),
);

SELECT @EACH(@event_columns, x -> x)
"""
)

models = load_sql_based_models(expressions, lambda _: {})

# Should generate 2 models from the blueprints
assert len(models) == 2

# Get the models sorted by name for consistent testing
model1 = next(m for m in models if "model1" in m.name)
model2 = next(m for m in models if "model2" in m.name)

# Verify model names
assert model1.name == "dataset.model1"
assert model2.name == "dataset.model2"

assert_exp_eq(
model1.render_query(),
"""
SELECT
'value' AS "property1",
'value' AS "property2"
""",
)

assert_exp_eq(
model2.render_query(),
"""
SELECT
'value' AS "property1"
""",
)