Skip to content

Commit de96622

Browse files
authored
Fix: regression related to string arguments in @PIVOT macro (#4474)
1 parent 2f98629 commit de96622

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

sqlmesh/core/macros.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,10 +1090,10 @@ def pivot(
10901090
column: SQL,
10911091
values: t.List[SQL],
10921092
alias: bool = True,
1093-
agg: SQL = SQL("SUM"),
1094-
cmp: SQL = SQL("="),
1095-
prefix: SQL = SQL(""),
1096-
suffix: SQL = SQL(""),
1093+
agg: exp.Expression = exp.Literal.string("SUM"),
1094+
cmp: exp.Expression = exp.Literal.string("="),
1095+
prefix: exp.Expression = exp.Literal.string(""),
1096+
suffix: exp.Expression = exp.Literal.string(""),
10971097
then_value: SQL = SQL("1"),
10981098
else_value: SQL = SQL("0"),
10991099
quote: bool = True,
@@ -1107,18 +1107,26 @@ def pivot(
11071107
>>> sql = "SELECT date_day, @PIVOT(status, ['cancelled', 'completed']) FROM rides GROUP BY 1"
11081108
>>> MacroEvaluator().transform(parse_one(sql)).sql()
11091109
'SELECT date_day, SUM(CASE WHEN status = \\'cancelled\\' THEN 1 ELSE 0 END) AS "\\'cancelled\\'", SUM(CASE WHEN status = \\'completed\\' THEN 1 ELSE 0 END) AS "\\'completed\\'" FROM rides GROUP BY 1'
1110+
>>> sql = "SELECT @PIVOT(a, ['v'], then_value := tv, suffix := '_sfx', quote := FALSE)"
1111+
>>> MacroEvaluator(dialect="bigquery").transform(parse_one(sql)).sql("bigquery")
1112+
"SELECT SUM(CASE WHEN a = 'v' THEN tv ELSE 0 END) AS `v_sfx`"
11101113
"""
11111114
aggregates: t.List[exp.Expression] = []
11121115
for value in values:
1113-
proj = f"{agg}("
1116+
proj = f"{agg.name}("
11141117
if distinct:
11151118
proj += "DISTINCT "
11161119

1117-
proj += f"CASE WHEN {column} {cmp} {value} THEN {then_value} ELSE {else_value} END) "
1120+
proj += f"CASE WHEN {column} {cmp.name} {value} THEN {then_value} ELSE {else_value} END) "
11181121
node = evaluator.parse_one(proj)
11191122

11201123
if alias:
1121-
node = node.as_(f"{prefix}{value}{suffix}", quoted=quote, copy=False)
1124+
node = node.as_(
1125+
f"{prefix.name}{value}{suffix.name}",
1126+
quoted=quote,
1127+
copy=False,
1128+
dialect=evaluator.dialect,
1129+
)
11221130

11231131
aggregates.append(node)
11241132

0 commit comments

Comments
 (0)