Skip to content

Commit f172e60

Browse files
committed
reimplement push_down_projection and prune_column
1 parent fc211c3 commit f172e60

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1309
-1286
lines changed

benchmarks/expected-plans/q10.txt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
Sort: revenue DESC NULLS FIRST
22
Projection: customer.c_custkey, customer.c_name, SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, customer.c_acctbal, nation.n_name, customer.c_address, customer.c_phone, customer.c_comment
33
Aggregate: groupBy=[[customer.c_custkey, customer.c_name, customer.c_acctbal, customer.c_phone, nation.n_name, customer.c_address, customer.c_comment]], 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)]]
4-
Inner Join: customer.c_nationkey = nation.n_nationkey
5-
Inner Join: orders.o_orderkey = lineitem.l_orderkey
6-
Inner Join: customer.c_custkey = orders.o_custkey
7-
TableScan: customer projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment]
8-
Filter: orders.o_orderdate >= Date32("8674") AND orders.o_orderdate < Date32("8766")
9-
TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate]
10-
Filter: lineitem.l_returnflag = Utf8("R")
11-
TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount, l_returnflag]
12-
TableScan: nation projection=[n_nationkey, n_name]
4+
Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_phone, customer.c_acctbal, customer.c_comment, lineitem.l_extendedprice, lineitem.l_discount, nation.n_name
5+
Inner Join: customer.c_nationkey = nation.n_nationkey
6+
Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_nationkey, customer.c_phone, customer.c_acctbal, customer.c_comment, lineitem.l_extendedprice, lineitem.l_discount
7+
Inner Join: orders.o_orderkey = lineitem.l_orderkey
8+
Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_nationkey, customer.c_phone, customer.c_acctbal, customer.c_comment, orders.o_orderkey
9+
Inner Join: customer.c_custkey = orders.o_custkey
10+
TableScan: customer projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment]
11+
Projection: orders.o_orderkey, orders.o_custkey
12+
Filter: orders.o_orderdate >= Date32("8674") AND orders.o_orderdate < Date32("8766")
13+
TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate]
14+
Projection: lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount
15+
Filter: lineitem.l_returnflag = Utf8("R")
16+
TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount, l_returnflag]
17+
TableScan: nation projection=[n_nationkey, n_name]

benchmarks/expected-plans/q11.txt

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@ Sort: value DESC NULLS FIRST
33
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)))]]
6-
Inner Join: supplier.s_nationkey = nation.n_nationkey
7-
Inner Join: partsupp.ps_suppkey = supplier.s_suppkey
8-
TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost]
9-
TableScan: supplier projection=[s_suppkey, s_nationkey]
10-
Filter: nation.n_name = Utf8("GERMANY")
11-
TableScan: nation projection=[n_nationkey, n_name]
12-
SubqueryAlias: __scalar_sq_1
13-
Projection: CAST(SUM(partsupp.ps_supplycost * partsupp.ps_availqty) AS Float64) * Float64(0.0001) AS __value
14-
Aggregate: groupBy=[[]], aggr=[[SUM(CAST(partsupp.ps_supplycost AS Decimal128(26, 2)) * CAST(partsupp.ps_availqty AS Decimal128(26, 2)))]]
15-
Inner Join: supplier.s_nationkey = nation.n_nationkey
6+
Projection: partsupp.ps_partkey, partsupp.ps_availqty, partsupp.ps_supplycost
7+
Inner Join: supplier.s_nationkey = nation.n_nationkey
8+
Projection: partsupp.ps_partkey, partsupp.ps_availqty, partsupp.ps_supplycost, supplier.s_nationkey
169
Inner Join: partsupp.ps_suppkey = supplier.s_suppkey
17-
TableScan: partsupp projection=[ps_suppkey, ps_availqty, ps_supplycost]
10+
TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost]
1811
TableScan: supplier projection=[s_suppkey, s_nationkey]
12+
Projection: nation.n_nationkey
1913
Filter: nation.n_name = Utf8("GERMANY")
20-
TableScan: nation projection=[n_nationkey, n_name]
14+
TableScan: nation projection=[n_nationkey, n_name]
15+
SubqueryAlias: __scalar_sq_1
16+
Projection: CAST(SUM(partsupp.ps_supplycost * partsupp.ps_availqty) AS Float64) * Float64(0.0001) AS __value
17+
Aggregate: groupBy=[[]], aggr=[[SUM(CAST(partsupp.ps_supplycost AS Decimal128(26, 2)) * CAST(partsupp.ps_availqty AS Decimal128(26, 2)))]]
18+
Projection: partsupp.ps_availqty, partsupp.ps_supplycost
19+
Inner Join: supplier.s_nationkey = nation.n_nationkey
20+
Projection: partsupp.ps_availqty, partsupp.ps_supplycost, supplier.s_nationkey
21+
Inner Join: partsupp.ps_suppkey = supplier.s_suppkey
22+
TableScan: partsupp projection=[ps_suppkey, ps_availqty, ps_supplycost]
23+
TableScan: supplier projection=[s_suppkey, s_nationkey]
24+
Projection: nation.n_nationkey
25+
Filter: nation.n_name = Utf8("GERMANY")
26+
TableScan: nation projection=[n_nationkey, n_name]

benchmarks/expected-plans/q12.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
Sort: lineitem.l_shipmode ASC NULLS LAST
22
Projection: lineitem.l_shipmode, SUM(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS high_line_count, SUM(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS low_line_count
33
Aggregate: groupBy=[[lineitem.l_shipmode]], aggr=[[SUM(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), SUM(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)]]
4-
Inner Join: lineitem.l_orderkey = orders.o_orderkey
5-
Filter: (lineitem.l_shipmode = Utf8("SHIP") OR lineitem.l_shipmode = Utf8("MAIL")) AND lineitem.l_commitdate < lineitem.l_receiptdate AND lineitem.l_shipdate < lineitem.l_commitdate AND lineitem.l_receiptdate >= Date32("8766") AND lineitem.l_receiptdate < Date32("9131")
6-
TableScan: lineitem projection=[l_orderkey, l_shipdate, l_commitdate, l_receiptdate, l_shipmode]
7-
TableScan: orders projection=[o_orderkey, o_orderpriority]
4+
Projection: lineitem.l_shipmode, orders.o_orderpriority
5+
Inner Join: lineitem.l_orderkey = orders.o_orderkey
6+
Projection: lineitem.l_orderkey, lineitem.l_shipmode
7+
Filter: (lineitem.l_shipmode = Utf8("SHIP") OR lineitem.l_shipmode = Utf8("MAIL")) AND lineitem.l_commitdate < lineitem.l_receiptdate AND lineitem.l_shipdate < lineitem.l_commitdate AND lineitem.l_receiptdate >= Date32("8766") AND lineitem.l_receiptdate < Date32("9131")
8+
TableScan: lineitem projection=[l_orderkey, l_shipdate, l_commitdate, l_receiptdate, l_shipmode]
9+
TableScan: orders projection=[o_orderkey, o_orderpriority]

benchmarks/expected-plans/q13.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ Sort: custdist DESC NULLS FIRST, c_count DESC NULLS FIRST
55
SubqueryAlias: c_orders
66
Projection: COUNT(orders.o_orderkey)
77
Aggregate: groupBy=[[customer.c_custkey]], aggr=[[COUNT(orders.o_orderkey)]]
8-
Left Join: customer.c_custkey = orders.o_custkey
9-
TableScan: customer projection=[c_custkey]
10-
Filter: orders.o_comment NOT LIKE Utf8("%special%requests%")
11-
TableScan: orders projection=[o_orderkey, o_custkey, o_comment]
8+
Projection: customer.c_custkey, orders.o_orderkey
9+
Left Join: customer.c_custkey = orders.o_custkey
10+
TableScan: customer projection=[c_custkey]
11+
Projection: orders.o_orderkey, orders.o_custkey
12+
Filter: orders.o_comment NOT LIKE Utf8("%special%requests%")
13+
TableScan: orders projection=[o_orderkey, o_custkey, o_comment]

benchmarks/expected-plans/q14.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ Projection: Float64(100) * CAST(SUM(CASE WHEN part.p_type LIKE Utf8("PROMO%") T
22
Aggregate: groupBy=[[]], aggr=[[SUM(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN 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))CAST(Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2)) AS Decimal128(38, 4))Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2))CAST(lineitem.l_discount AS Decimal128(23, 2))lineitem.l_discountDecimal128(Some(100),23,2)CAST(lineitem.l_extendedprice AS Decimal128(38, 4))lineitem.l_extendedprice AS lineitem.l_extendedprice * Decimal128(Some(100),23,2) - lineitem.l_discount ELSE Decimal128(Some(0),38,4) END) AS SUM(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), 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))CAST(Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2)) AS Decimal128(38, 4))Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2))CAST(lineitem.l_discount AS Decimal128(23, 2))lineitem.l_discountDecimal128(Some(100),23,2)CAST(lineitem.l_extendedprice AS Decimal128(38, 4))lineitem.l_extendedprice AS lineitem.l_extendedprice * Decimal128(Some(100),23,2) - lineitem.l_discount) AS SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]]
33
Projection: 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 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))CAST(Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2)) AS Decimal128(38, 4))Decimal128(Some(100),23,2) - CAST(lineitem.l_discount AS Decimal128(23, 2))CAST(lineitem.l_discount AS Decimal128(23, 2))lineitem.l_discountDecimal128(Some(100),23,2)CAST(lineitem.l_extendedprice AS Decimal128(38, 4))lineitem.l_extendedprice, part.p_type
44
Inner Join: lineitem.l_partkey = part.p_partkey
5-
Filter: lineitem.l_shipdate >= Date32("9374") AND lineitem.l_shipdate < Date32("9404")
6-
TableScan: lineitem projection=[l_partkey, l_extendedprice, l_discount, l_shipdate]
5+
Projection: lineitem.l_partkey, lineitem.l_extendedprice, lineitem.l_discount
6+
Filter: lineitem.l_shipdate >= Date32("9374") AND lineitem.l_shipdate < Date32("9404")
7+
TableScan: lineitem projection=[l_partkey, l_extendedprice, l_discount, l_shipdate]
78
TableScan: part projection=[p_partkey, p_type]

benchmarks/expected-plans/q15.txt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@ 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
44
Inner Join: revenue0.total_revenue = __scalar_sq_1.__value
5-
Inner Join: supplier.s_suppkey = revenue0.supplier_no
6-
TableScan: supplier projection=[s_suppkey, s_name, s_address, s_phone]
7-
SubqueryAlias: revenue0
8-
Projection: supplier_no, total_revenue
5+
Projection: supplier.s_suppkey, supplier.s_name, supplier.s_address, supplier.s_phone, revenue0.total_revenue
6+
Inner Join: supplier.s_suppkey = revenue0.supplier_no
7+
TableScan: supplier projection=[s_suppkey, s_name, s_address, s_phone]
8+
SubqueryAlias: revenue0
99
Projection: lineitem.l_suppkey AS supplier_no, SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS total_revenue
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)]]
11-
Filter: lineitem.l_shipdate >= Date32("9496") AND lineitem.l_shipdate < Date32("9587")
12-
TableScan: lineitem projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate]
11+
Projection: lineitem.l_suppkey, lineitem.l_extendedprice, lineitem.l_discount
12+
Filter: lineitem.l_shipdate >= Date32("9496") AND lineitem.l_shipdate < Date32("9587")
13+
TableScan: lineitem projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate]
1314
SubqueryAlias: __scalar_sq_1
1415
Projection: MAX(revenue0.total_revenue) AS __value
1516
Aggregate: groupBy=[[]], aggr=[[MAX(revenue0.total_revenue)]]
1617
SubqueryAlias: revenue0
17-
Projection: total_revenue
18-
Projection: SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS total_revenue
19-
Projection: SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)
20-
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)]]
21-
Filter: lineitem.l_shipdate >= Date32("9496") AND lineitem.l_shipdate < Date32("9587")
22-
TableScan: lineitem projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate]
18+
Projection: SUM(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS total_revenue
19+
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)]]
20+
Projection: lineitem.l_suppkey, lineitem.l_extendedprice, lineitem.l_discount
21+
Filter: lineitem.l_shipdate >= Date32("9496") AND lineitem.l_shipdate < Date32("9587")
22+
TableScan: lineitem projection=[l_suppkey, l_extendedprice, l_discount, l_shipdate]
2323
EmptyRelation

benchmarks/expected-plans/q16.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
Sort: supplier_cnt DESC NULLS FIRST, part.p_brand ASC NULLS LAST, part.p_type ASC NULLS LAST, part.p_size ASC NULLS LAST
2-
Projection: part.p_brand, part.p_type, part.p_size, COUNT(DISTINCT partsupp.ps_suppkey) AS supplier_cnt
3-
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)
4-
Aggregate: groupBy=[[group_alias_0, group_alias_1, group_alias_2]], aggr=[[COUNT(alias1)]]
5-
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 = __correlated_sq_1.s_suppkey
2+
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 supplier_cnt
3+
Aggregate: groupBy=[[group_alias_0, group_alias_1, group_alias_2]], aggr=[[COUNT(alias1)]]
4+
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=[[]]
5+
LeftAnti Join: partsupp.ps_suppkey = __correlated_sq_1.s_suppkey
6+
Projection: partsupp.ps_suppkey, part.p_brand, part.p_type, part.p_size
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: __correlated_sq_1
12-
Projection: supplier.s_suppkey AS s_suppkey
13-
Filter: supplier.s_comment LIKE Utf8("%Customer%Complaints%")
14-
TableScan: supplier projection=[s_suppkey, s_comment]
11+
SubqueryAlias: __correlated_sq_1
12+
Projection: supplier.s_suppkey AS s_suppkey
13+
Filter: supplier.s_comment LIKE Utf8("%Customer%Complaints%")
14+
TableScan: supplier projection=[s_suppkey, s_comment]

benchmarks/expected-plans/q17.txt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
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(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
5-
Inner Join: lineitem.l_partkey = part.p_partkey
6-
TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice]
7-
Filter: part.p_brand = Utf8("Brand#23") AND part.p_container = Utf8("MED BOX")
8-
TableScan: part projection=[p_partkey, p_brand, p_container]
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]
3+
Projection: lineitem.l_extendedprice
4+
Filter: CAST(lineitem.l_quantity AS Decimal128(30, 15)) < CAST(__scalar_sq_1.__value AS Decimal128(30, 15))
5+
Projection: lineitem.l_quantity, lineitem.l_extendedprice, __scalar_sq_1.__value
6+
Inner Join: part.p_partkey = __scalar_sq_1.l_partkey, lineitem.l_partkey = __scalar_sq_1.l_partkey
7+
Inner Join: lineitem.l_partkey = part.p_partkey
8+
TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice]
9+
Projection: part.p_partkey
10+
Filter: part.p_brand = Utf8("Brand#23") AND part.p_container = Utf8("MED BOX")
11+
TableScan: part projection=[p_partkey, p_brand, p_container]
12+
SubqueryAlias: __scalar_sq_1
13+
Projection: lineitem.l_partkey, Float64(0.2) * CAST(AVG(lineitem.l_quantity) AS Float64) AS __value
14+
Aggregate: groupBy=[[lineitem.l_partkey]], aggr=[[AVG(lineitem.l_quantity)]]
15+
TableScan: lineitem projection=[l_partkey, l_quantity]

0 commit comments

Comments
 (0)