Skip to content

Commit cf45eb9

Browse files
authored
Move subquery alias assignment onto rules (#4767)
1 parent f7477dc commit cf45eb9

File tree

16 files changed

+277
-246
lines changed

16 files changed

+277
-246
lines changed

benchmarks/expected-plans/q11.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Sort: value DESC NULLS FIRST
22
Projection: partsupp.ps_partkey, SUM(partsupp.ps_supplycost * partsupp.ps_availqty) AS value
3-
Filter: CAST(SUM(partsupp.ps_supplycost * partsupp.ps_availqty) AS Decimal128(38, 15)) > CAST(__sq_1.__value AS Decimal128(38, 15))
3+
Filter: CAST(SUM(partsupp.ps_supplycost * partsupp.ps_availqty) AS Decimal128(38, 15)) > CAST(__scalar_sq_1.__value AS Decimal128(38, 15))
44
CrossJoin:
55
Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[SUM(CAST(partsupp.ps_supplycost AS Decimal128(26, 2)) * CAST(partsupp.ps_availqty AS Decimal128(26, 2)))]]
66
Inner Join: supplier.s_nationkey = nation.n_nationkey
@@ -9,7 +9,7 @@ Sort: value DESC NULLS FIRST
99
TableScan: supplier projection=[s_suppkey, s_nationkey]
1010
Filter: nation.n_name = Utf8("GERMANY")
1111
TableScan: nation projection=[n_nationkey, n_name]
12-
SubqueryAlias: __sq_1
12+
SubqueryAlias: __scalar_sq_1
1313
Projection: CAST(SUM(partsupp.ps_supplycost * partsupp.ps_availqty) AS Float64) * Float64(0.0001) AS __value
1414
Aggregate: groupBy=[[]], aggr=[[SUM(CAST(partsupp.ps_supplycost AS Decimal128(26, 2)) * CAST(partsupp.ps_availqty AS Decimal128(26, 2)))]]
1515
Inner Join: supplier.s_nationkey = nation.n_nationkey

benchmarks/expected-plans/q15.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
EmptyRelation
22
Sort: supplier.s_suppkey ASC NULLS LAST
33
Projection: supplier.s_suppkey, supplier.s_name, supplier.s_address, supplier.s_phone, revenue0.total_revenue
4-
Inner Join: revenue0.total_revenue = __sq_1.__value
4+
Inner Join: revenue0.total_revenue = __scalar_sq_1.__value
55
Inner Join: supplier.s_suppkey = revenue0.supplier_no
66
TableScan: supplier projection=[s_suppkey, s_name, s_address, s_phone]
77
SubqueryAlias: revenue0
@@ -10,7 +10,7 @@ Sort: supplier.s_suppkey ASC NULLS LAST
1010
Aggregate: groupBy=[[lineitem.l_suppkey]], aggr=[[SUM(CAST(lineitem.l_extendedprice AS Decimal128(38, 4)) * CAST(Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2)) AS Decimal128(38, 4))) AS SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]]
1111
Filter: lineitem.l_shipdate >= Date32("9496") AND lineitem.l_shipdate < Date32("9587")
1212
TableScan: lineitem projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate]
13-
SubqueryAlias: __sq_1
13+
SubqueryAlias: __scalar_sq_1
1414
Projection: MAX(revenue0.total_revenue) AS __value
1515
Aggregate: groupBy=[[]], aggr=[[MAX(revenue0.total_revenue)]]
1616
SubqueryAlias: revenue0

benchmarks/expected-plans/q16.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ Sort: supplier_cnt DESC NULLS FIRST, part.p_brand ASC NULLS LAST, part.p_type AS
33
Projection: group_alias_0 AS part.p_brand, group_alias_1 AS part.p_type, group_alias_2 AS part.p_size, COUNT(alias1) AS COUNT(DISTINCT partsupp.ps_suppkey)
44
Aggregate: groupBy=[[group_alias_0, group_alias_1, group_alias_2]], aggr=[[COUNT(alias1)]]
55
Aggregate: groupBy=[[part.p_brand AS group_alias_0, part.p_type AS group_alias_1, part.p_size AS group_alias_2, partsupp.ps_suppkey AS alias1]], aggr=[[]]
6-
LeftAnti Join: partsupp.ps_suppkey = __sq_1.s_suppkey
6+
LeftAnti Join: partsupp.ps_suppkey = __correlated_sq_1.s_suppkey
77
Inner Join: partsupp.ps_partkey = part.p_partkey
88
TableScan: partsupp projection=[ps_partkey, ps_suppkey]
99
Filter: part.p_brand != Utf8("Brand#45") AND part.p_type NOT LIKE Utf8("MEDIUM POLISHED%") AND part.p_size IN ([Int32(49), Int32(14), Int32(23), Int32(45), Int32(19), Int32(3), Int32(36), Int32(9)])
1010
TableScan: part projection=[p_partkey, p_brand, p_type, p_size]
11-
SubqueryAlias: __sq_1
11+
SubqueryAlias: __correlated_sq_1
1212
Projection: supplier.s_suppkey AS s_suppkey
1313
Filter: supplier.s_comment LIKE Utf8("%Customer%Complaints%")
1414
TableScan: supplier projection=[s_suppkey, s_comment]

benchmarks/expected-plans/q17.txt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
Projection: CAST(SUM(lineitem.l_extendedprice) AS Decimal128(38, 33)) / Decimal128(Some(7000000000000000195487369212723200),38,33) AS avg_yearly
1+
Projection: CAST(SUM(lineitem.l_extendedprice) AS Float64) / Float64(7) AS avg_yearly
22
Aggregate: groupBy=[[]], aggr=[[SUM(lineitem.l_extendedprice)]]
3-
Filter: CAST(lineitem.l_quantity AS Decimal128(38, 21)) < __sq_1.__value
4-
Inner Join: part.p_partkey = __sq_1.l_partkey
3+
Filter: CAST(lineitem.l_quantity AS Decimal128(30, 15)) < CAST(__scalar_sq_1.__value AS Decimal128(30, 15))
4+
Inner Join: part.p_partkey = __scalar_sq_1.l_partkey, lineitem.l_partkey = __scalar_sq_1.l_partkey
55
Inner Join: lineitem.l_partkey = part.p_partkey
66
TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice]
77
Filter: part.p_brand = Utf8("Brand#23") AND part.p_container = Utf8("MED BOX")
88
TableScan: part projection=[p_partkey, p_brand, p_container]
9-
Projection: lineitem.l_partkey, Decimal128(Some(200000000000000000000),38,21) * CAST(AVG(lineitem.l_quantity) AS Decimal128(38, 21)) AS __value, alias=__sq_1
10-
Aggregate: groupBy=[[lineitem.l_partkey]], aggr=[[AVG(lineitem.l_quantity)]]
11-
TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice]
9+
SubqueryAlias: __scalar_sq_1
10+
Projection: lineitem.l_partkey, Float64(0.2) * CAST(AVG(lineitem.l_quantity) AS Float64) AS __value
11+
Aggregate: groupBy=[[lineitem.l_partkey]], aggr=[[AVG(lineitem.l_quantity)]]
12+
TableScan: lineitem projection=[l_partkey, l_quantity]

benchmarks/expected-plans/q18.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Sort: orders.o_totalprice DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST
22
Projection: customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice, SUM(lineitem.l_quantity)
33
Aggregate: groupBy=[[customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice]], aggr=[[SUM(lineitem.l_quantity)]]
4-
LeftSemi Join: orders.o_orderkey = __sq_1.l_orderkey
4+
LeftSemi Join: orders.o_orderkey = __correlated_sq_1.l_orderkey
55
Inner Join: orders.o_orderkey = lineitem.l_orderkey
66
Inner Join: customer.c_custkey = orders.o_custkey
77
TableScan: customer projection=[c_custkey, c_name]
88
TableScan: orders projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate]
99
TableScan: lineitem projection=[l_orderkey, l_quantity]
10-
SubqueryAlias: __sq_1
10+
SubqueryAlias: __correlated_sq_1
1111
Projection: lineitem.l_orderkey AS l_orderkey
1212
Filter: SUM(lineitem.l_quantity) > Decimal128(Some(30000),25,2)
1313
Aggregate: groupBy=[[lineitem.l_orderkey]], aggr=[[SUM(lineitem.l_quantity)]]

benchmarks/expected-plans/q2.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Sort: supplier.s_acctbal DESC NULLS FIRST, nation.n_name ASC NULLS LAST, supplier.s_name ASC NULLS LAST, part.p_partkey ASC NULLS LAST
22
Projection: supplier.s_acctbal, supplier.s_name, nation.n_name, part.p_partkey, part.p_mfgr, supplier.s_address, supplier.s_phone, supplier.s_comment
33
Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, nation.n_name
4-
Inner Join: part.p_partkey = __sq_1.ps_partkey, partsupp.ps_supplycost = __sq_1.__value
4+
Inner Join: part.p_partkey = __scalar_sq_1.ps_partkey, partsupp.ps_supplycost = __scalar_sq_1.__value
55
Inner Join: nation.n_regionkey = region.r_regionkey
66
Inner Join: supplier.s_nationkey = nation.n_nationkey
77
Inner Join: partsupp.ps_suppkey = supplier.s_suppkey
@@ -13,7 +13,7 @@ Sort: supplier.s_acctbal DESC NULLS FIRST, nation.n_name ASC NULLS LAST, supplie
1313
TableScan: nation projection=[n_nationkey, n_name, n_regionkey]
1414
Filter: region.r_name = Utf8("EUROPE")
1515
TableScan: region projection=[r_regionkey, r_name]
16-
SubqueryAlias: __sq_1
16+
SubqueryAlias: __scalar_sq_1
1717
Projection: partsupp.ps_partkey, MIN(partsupp.ps_supplycost) AS __value
1818
Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[MIN(partsupp.ps_supplycost)]]
1919
Inner Join: nation.n_regionkey = region.r_regionkey

benchmarks/expected-plans/q20.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
Sort: supplier.s_name ASC NULLS LAST
22
Projection: supplier.s_name, supplier.s_address
3-
LeftSemi Join: supplier.s_suppkey = __sq_1.ps_suppkey
3+
LeftSemi Join: supplier.s_suppkey = __correlated_sq_1.ps_suppkey
44
Inner Join: supplier.s_nationkey = nation.n_nationkey
55
TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey]
66
Filter: nation.n_name = Utf8("CANADA")
77
TableScan: nation projection=[n_nationkey, n_name]
8-
SubqueryAlias: __sq_1
8+
SubqueryAlias: __correlated_sq_1
99
Projection: partsupp.ps_suppkey AS ps_suppkey
10-
Filter: CAST(partsupp.ps_availqty AS Float64) > __sq_3.__value
11-
Inner Join: partsupp.ps_partkey = __sq_3.l_partkey, partsupp.ps_suppkey = __sq_3.l_suppkey
12-
LeftSemi Join: partsupp.ps_partkey = __sq_2.p_partkey
10+
Filter: CAST(partsupp.ps_availqty AS Float64) > __scalar_sq_1.__value
11+
Inner Join: partsupp.ps_partkey = __scalar_sq_1.l_partkey, partsupp.ps_suppkey = __scalar_sq_1.l_suppkey
12+
LeftSemi Join: partsupp.ps_partkey = __correlated_sq_2.p_partkey
1313
TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty]
14-
SubqueryAlias: __sq_2
14+
SubqueryAlias: __correlated_sq_2
1515
Projection: part.p_partkey AS p_partkey
1616
Filter: part.p_name LIKE Utf8("forest%")
1717
TableScan: part projection=[p_partkey, p_name]
18-
SubqueryAlias: __sq_3
18+
SubqueryAlias: __scalar_sq_1
1919
Projection: lineitem.l_partkey, lineitem.l_suppkey, Float64(0.5) * CAST(SUM(lineitem.l_quantity) AS Float64) AS __value
2020
Aggregate: groupBy=[[lineitem.l_partkey, lineitem.l_suppkey]], aggr=[[SUM(lineitem.l_quantity)]]
2121
Filter: lineitem.l_shipdate >= Date32("8766") AND lineitem.l_shipdate < Date32("9131")

benchmarks/expected-plans/q22.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ Sort: custsale.cntrycode ASC NULLS LAST
33
Aggregate: groupBy=[[custsale.cntrycode]], aggr=[[COUNT(UInt8(1)), SUM(custsale.c_acctbal)]]
44
SubqueryAlias: custsale
55
Projection: substr(customer.c_phone, Int64(1), Int64(2)) AS cntrycode, customer.c_acctbal
6-
Filter: CAST(customer.c_acctbal AS Decimal128(19, 6)) > __sq_1.__value
6+
Filter: CAST(customer.c_acctbal AS Decimal128(19, 6)) > __scalar_sq_1.__value
77
CrossJoin:
88
LeftAnti Join: customer.c_custkey = orders.o_custkey
99
Filter: substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")])
1010
TableScan: customer projection=[c_custkey, c_phone, c_acctbal]
1111
TableScan: orders projection=[o_custkey]
12-
SubqueryAlias: __sq_1
12+
SubqueryAlias: __scalar_sq_1
1313
Projection: AVG(customer.c_acctbal) AS __value
1414
Aggregate: groupBy=[[]], aggr=[[AVG(customer.c_acctbal)]]
1515
Filter: customer.c_acctbal > Decimal128(Some(0),15,2) AND substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")])

benchmarks/src/bin/tpch.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -594,17 +594,7 @@ mod tests {
594594
expected_plan(16).await
595595
}
596596

597-
/// This query produces different plans depending on operating system. The difference is
598-
/// due to re-writing the following expression:
599-
///
600-
/// `sum(l_extendedprice) / 7.0 as avg_yearly`
601-
///
602-
/// Linux: Decimal128(Some(7000000000000000195487369212723200),38,33)
603-
/// Windows: Decimal128(Some(6999999999999999042565864605876224),38,33)
604-
///
605-
/// See https://github.com/apache/arrow-datafusion/issues/3791
606-
#[tokio::test]
607-
#[ignore]
597+
#[tokio::test]
608598
async fn q17_expected_plan() -> Result<()> {
609599
expected_plan(17).await
610600
}

0 commit comments

Comments
 (0)