You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by gu...@apache.org on 2021/01/24 04:09:02 UTC
[spark] branch master updated: [SPARK-34155][SQL][TEST] Add
partition columns for TPCDS tables
This is an automated email from the ASF dual-hosted git repository.
gurwls223 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 4fce05d [SPARK-34155][SQL][TEST] Add partition columns for TPCDS tables
4fce05d is described below
commit 4fce05d93f4a800cbbada0136f1db071e53a01f3
Author: Yuming Wang <yu...@ebay.com>
AuthorDate: Sun Jan 24 13:08:26 2021 +0900
[SPARK-34155][SQL][TEST] Add partition columns for TPCDS tables
### What changes were proposed in this pull request?
This pr add partition columns for TPCDS tables. The partition column is consistent with the [TPCDSTables](https://github.com/databricks/spark-sql-perf/blob/master/src/main/scala/com/databricks/spark/sql/perf/tpcds/TPCDSTables.scala).
### Why are the changes needed?
Better track plan changes. For example, [this is the change](https://github.com/apache/spark/commit/3fe1a93a4038a74f2d987ff8a74a90c7f4749a48) after SPARK-34119.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
N/A
Closes #31243 from wangyum/SPARK-34155.
Authored-by: Yuming Wang <yu...@ebay.com>
Signed-off-by: HyukjinKwon <gu...@apache.org>
---
.../approved-plans-modified/q10.sf100/explain.txt | 185 ++-
.../q10.sf100/simplified.txt | 16 +-
.../approved-plans-modified/q10/explain.txt | 177 +-
.../approved-plans-modified/q10/simplified.txt | 16 +-
.../approved-plans-modified/q19.sf100/explain.txt | 319 ++--
.../q19.sf100/simplified.txt | 102 +-
.../approved-plans-modified/q19/explain.txt | 57 +-
.../approved-plans-modified/q19/simplified.txt | 4 +-
.../approved-plans-modified/q27.sf100/explain.txt | 323 ++--
.../q27.sf100/simplified.txt | 16 +-
.../approved-plans-modified/q27/explain.txt | 323 ++--
.../approved-plans-modified/q27/simplified.txt | 34 +-
.../approved-plans-modified/q3.sf100/explain.txt | 101 +-
.../q3.sf100/simplified.txt | 12 +-
.../approved-plans-modified/q3/explain.txt | 41 +-
.../approved-plans-modified/q3/simplified.txt | 4 +-
.../approved-plans-modified/q34.sf100/explain.txt | 161 +-
.../q34.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q34/explain.txt | 149 +-
.../approved-plans-modified/q34/simplified.txt | 6 +-
.../approved-plans-modified/q42.sf100/explain.txt | 83 +-
.../q42.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q42/explain.txt | 41 +-
.../approved-plans-modified/q42/simplified.txt | 4 +-
.../approved-plans-modified/q43.sf100/explain.txt | 83 +-
.../q43.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q43/explain.txt | 41 +-
.../approved-plans-modified/q43/simplified.txt | 4 +-
.../approved-plans-modified/q46.sf100/explain.txt | 209 +--
.../q46.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q46/explain.txt | 177 +-
.../approved-plans-modified/q46/simplified.txt | 6 +-
.../approved-plans-modified/q52.sf100/explain.txt | 83 +-
.../q52.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q52/explain.txt | 41 +-
.../approved-plans-modified/q52/simplified.txt | 4 +-
.../approved-plans-modified/q53.sf100/explain.txt | 121 +-
.../q53.sf100/simplified.txt | 14 +-
.../approved-plans-modified/q53/explain.txt | 125 +-
.../approved-plans-modified/q53/simplified.txt | 8 +-
.../approved-plans-modified/q55.sf100/explain.txt | 83 +-
.../q55.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q55/explain.txt | 41 +-
.../approved-plans-modified/q55/simplified.txt | 4 +-
.../approved-plans-modified/q59.sf100/explain.txt | 94 +-
.../q59.sf100/simplified.txt | 8 +-
.../approved-plans-modified/q59/explain.txt | 94 +-
.../approved-plans-modified/q59/simplified.txt | 8 +-
.../approved-plans-modified/q63.sf100/explain.txt | 121 +-
.../q63.sf100/simplified.txt | 14 +-
.../approved-plans-modified/q63/explain.txt | 125 +-
.../approved-plans-modified/q63/simplified.txt | 8 +-
.../approved-plans-modified/q65.sf100/explain.txt | 192 +--
.../q65.sf100/simplified.txt | 11 +-
.../approved-plans-modified/q65/explain.txt | 182 ++-
.../approved-plans-modified/q65/simplified.txt | 11 +-
.../approved-plans-modified/q68.sf100/explain.txt | 349 ++--
.../q68.sf100/simplified.txt | 142 +-
.../approved-plans-modified/q68/explain.txt | 177 +-
.../approved-plans-modified/q68/simplified.txt | 6 +-
.../approved-plans-modified/q7.sf100/explain.txt | 145 +-
.../q7.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q7/explain.txt | 145 +-
.../approved-plans-modified/q7/simplified.txt | 12 +-
.../approved-plans-modified/q73.sf100/explain.txt | 223 +--
.../q73.sf100/simplified.txt | 54 +-
.../approved-plans-modified/q73/explain.txt | 151 +-
.../approved-plans-modified/q73/simplified.txt | 6 +-
.../approved-plans-modified/q79.sf100/explain.txt | 157 +-
.../q79.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q79/explain.txt | 145 +-
.../approved-plans-modified/q79/simplified.txt | 6 +-
.../approved-plans-modified/q89.sf100/explain.txt | 137 +-
.../q89.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q89/explain.txt | 127 +-
.../approved-plans-modified/q89/simplified.txt | 8 +-
.../approved-plans-modified/q98.sf100/explain.txt | 133 +-
.../q98.sf100/simplified.txt | 6 +-
.../approved-plans-modified/q98/explain.txt | 121 +-
.../approved-plans-modified/q98/simplified.txt | 12 +-
.../ss_max.sf100/explain.txt | 44 +-
.../ss_max.sf100/simplified.txt | 2 +-
.../approved-plans-modified/ss_max/explain.txt | 44 +-
.../approved-plans-modified/ss_max/simplified.txt | 2 +-
.../approved-plans-v1_4/q1.sf100/explain.txt | 230 +--
.../approved-plans-v1_4/q1.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q1/explain.txt | 218 +--
.../approved-plans-v1_4/q1/simplified.txt | 11 +-
.../approved-plans-v1_4/q10.sf100/explain.txt | 379 +++--
.../approved-plans-v1_4/q10.sf100/simplified.txt | 25 +-
.../approved-plans-v1_4/q10/explain.txt | 343 ++--
.../approved-plans-v1_4/q10/simplified.txt | 25 +-
.../approved-plans-v1_4/q11.sf100/explain.txt | 409 ++---
.../approved-plans-v1_4/q11.sf100/simplified.txt | 22 +-
.../approved-plans-v1_4/q11/explain.txt | 577 ++++---
.../approved-plans-v1_4/q11/simplified.txt | 50 +-
.../approved-plans-v1_4/q12.sf100/explain.txt | 125 +-
.../approved-plans-v1_4/q12.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q12/explain.txt | 113 +-
.../approved-plans-v1_4/q12/simplified.txt | 12 +-
.../approved-plans-v1_4/q13.sf100/explain.txt | 159 +-
.../approved-plans-v1_4/q13.sf100/simplified.txt | 20 +-
.../approved-plans-v1_4/q13/explain.txt | 159 +-
.../approved-plans-v1_4/q13/simplified.txt | 16 +-
.../approved-plans-v1_4/q14a.sf100/explain.txt | 804 +++++-----
.../approved-plans-v1_4/q14a.sf100/simplified.txt | 119 +-
.../approved-plans-v1_4/q14a/explain.txt | 868 +++++-----
.../approved-plans-v1_4/q14a/simplified.txt | 145 +-
.../approved-plans-v1_4/q14b.sf100/explain.txt | 856 +++++-----
.../approved-plans-v1_4/q14b.sf100/simplified.txt | 112 +-
.../approved-plans-v1_4/q14b/explain.txt | 832 +++++-----
.../approved-plans-v1_4/q14b/simplified.txt | 135 +-
.../approved-plans-v1_4/q15.sf100/explain.txt | 143 +-
.../approved-plans-v1_4/q15.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q15/explain.txt | 119 +-
.../approved-plans-v1_4/q15/simplified.txt | 16 +-
.../approved-plans-v1_4/q16.sf100/explain.txt | 312 ++--
.../approved-plans-v1_4/q16.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q16/explain.txt | 313 ++--
.../approved-plans-v1_4/q16/simplified.txt | 113 +-
.../approved-plans-v1_4/q17.sf100/explain.txt | 241 +--
.../approved-plans-v1_4/q17.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q17/explain.txt | 215 +--
.../approved-plans-v1_4/q17/simplified.txt | 36 +-
.../approved-plans-v1_4/q18.sf100/explain.txt | 213 +--
.../approved-plans-v1_4/q18.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q18/explain.txt | 189 +--
.../approved-plans-v1_4/q18/simplified.txt | 24 +-
.../approved-plans-v1_4/q19.sf100/explain.txt | 169 +-
.../approved-plans-v1_4/q19.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q19/explain.txt | 57 +-
.../approved-plans-v1_4/q19/simplified.txt | 4 +-
.../approved-plans-v1_4/q2.sf100/explain.txt | 182 +--
.../approved-plans-v1_4/q2.sf100/simplified.txt | 14 +-
.../approved-plans-v1_4/q2/explain.txt | 182 +--
.../approved-plans-v1_4/q2/simplified.txt | 14 +-
.../approved-plans-v1_4/q20.sf100/explain.txt | 125 +-
.../approved-plans-v1_4/q20.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q20/explain.txt | 113 +-
.../approved-plans-v1_4/q20/simplified.txt | 12 +-
.../approved-plans-v1_4/q21.sf100/explain.txt | 121 +-
.../approved-plans-v1_4/q21.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q21/explain.txt | 121 +-
.../approved-plans-v1_4/q21/simplified.txt | 16 +-
.../approved-plans-v1_4/q22.sf100/explain.txt | 133 +-
.../approved-plans-v1_4/q22.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q22/explain.txt | 121 +-
.../approved-plans-v1_4/q22/simplified.txt | 6 +-
.../approved-plans-v1_4/q23a.sf100/explain.txt | 948 +++++------
.../approved-plans-v1_4/q23a.sf100/simplified.txt | 80 +-
.../approved-plans-v1_4/q23a/explain.txt | 838 +++++-----
.../approved-plans-v1_4/q23a/simplified.txt | 174 +-
.../approved-plans-v1_4/q23b.sf100/explain.txt | 1284 +++++++--------
.../approved-plans-v1_4/q23b.sf100/simplified.txt | 82 +-
.../approved-plans-v1_4/q23b/explain.txt | 1060 ++++++------
.../approved-plans-v1_4/q23b/simplified.txt | 239 +--
.../approved-plans-v1_4/q24a.sf100/explain.txt | 790 ++++-----
.../approved-plans-v1_4/q24a.sf100/simplified.txt | 36 +-
.../approved-plans-v1_4/q24a/explain.txt | 680 ++++----
.../approved-plans-v1_4/q24a/simplified.txt | 114 +-
.../approved-plans-v1_4/q24b.sf100/explain.txt | 790 ++++-----
.../approved-plans-v1_4/q24b.sf100/simplified.txt | 36 +-
.../approved-plans-v1_4/q24b/explain.txt | 680 ++++----
.../approved-plans-v1_4/q24b/simplified.txt | 114 +-
.../approved-plans-v1_4/q25.sf100/explain.txt | 241 +--
.../approved-plans-v1_4/q25.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q25/explain.txt | 215 +--
.../approved-plans-v1_4/q25/simplified.txt | 36 +-
.../approved-plans-v1_4/q26.sf100/explain.txt | 145 +-
.../approved-plans-v1_4/q26.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q26/explain.txt | 145 +-
.../approved-plans-v1_4/q26/simplified.txt | 12 +-
.../approved-plans-v1_4/q27.sf100/explain.txt | 145 +-
.../approved-plans-v1_4/q27.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q27/explain.txt | 145 +-
.../approved-plans-v1_4/q27/simplified.txt | 12 +-
.../approved-plans-v1_4/q28.sf100/explain.txt | 248 +--
.../approved-plans-v1_4/q28.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q28/explain.txt | 248 +--
.../approved-plans-v1_4/q28/simplified.txt | 12 +-
.../approved-plans-v1_4/q29.sf100/explain.txt | 255 +--
.../approved-plans-v1_4/q29.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q29/explain.txt | 229 +--
.../approved-plans-v1_4/q29/simplified.txt | 34 +-
.../approved-plans-v1_4/q3.sf100/explain.txt | 101 +-
.../approved-plans-v1_4/q3.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q3/explain.txt | 41 +-
.../approved-plans-v1_4/q3/simplified.txt | 4 +-
.../approved-plans-v1_4/q30.sf100/explain.txt | 272 ++--
.../approved-plans-v1_4/q30.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q30/explain.txt | 248 +--
.../approved-plans-v1_4/q30/simplified.txt | 11 +-
.../approved-plans-v1_4/q31.sf100/explain.txt | 566 ++++---
.../approved-plans-v1_4/q31.sf100/simplified.txt | 33 +-
.../approved-plans-v1_4/q31/explain.txt | 488 +++---
.../approved-plans-v1_4/q31/simplified.txt | 33 +-
.../approved-plans-v1_4/q32.sf100/explain.txt | 124 +-
.../approved-plans-v1_4/q32.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q32/explain.txt | 144 +-
.../approved-plans-v1_4/q32/simplified.txt | 23 +-
.../approved-plans-v1_4/q33.sf100/explain.txt | 283 ++--
.../approved-plans-v1_4/q33.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q33/explain.txt | 283 ++--
.../approved-plans-v1_4/q33/simplified.txt | 16 +-
.../approved-plans-v1_4/q34.sf100/explain.txt | 161 +-
.../approved-plans-v1_4/q34.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q34/explain.txt | 149 +-
.../approved-plans-v1_4/q34/simplified.txt | 6 +-
.../approved-plans-v1_4/q35.sf100/explain.txt | 405 +++--
.../approved-plans-v1_4/q35.sf100/simplified.txt | 25 +-
.../approved-plans-v1_4/q35/explain.txt | 349 ++--
.../approved-plans-v1_4/q35/simplified.txt | 25 +-
.../approved-plans-v1_4/q36.sf100/explain.txt | 141 +-
.../approved-plans-v1_4/q36.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q36/explain.txt | 141 +-
.../approved-plans-v1_4/q36/simplified.txt | 6 +-
.../approved-plans-v1_4/q37.sf100/explain.txt | 128 +-
.../approved-plans-v1_4/q37.sf100/simplified.txt | 17 +-
.../approved-plans-v1_4/q37/explain.txt | 178 ++-
.../approved-plans-v1_4/q37/simplified.txt | 61 +-
.../approved-plans-v1_4/q38.sf100/explain.txt | 303 ++--
.../approved-plans-v1_4/q38.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q38/explain.txt | 439 ++---
.../approved-plans-v1_4/q38/simplified.txt | 98 +-
.../approved-plans-v1_4/q39a.sf100/explain.txt | 247 +--
.../approved-plans-v1_4/q39a.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q39a/explain.txt | 235 +--
.../approved-plans-v1_4/q39a/simplified.txt | 30 +-
.../approved-plans-v1_4/q39b.sf100/explain.txt | 247 +--
.../approved-plans-v1_4/q39b.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q39b/explain.txt | 235 +--
.../approved-plans-v1_4/q39b/simplified.txt | 30 +-
.../approved-plans-v1_4/q4.sf100/explain.txt | 593 +++----
.../approved-plans-v1_4/q4.sf100/simplified.txt | 32 +-
.../approved-plans-v1_4/q4/explain.txt | 881 +++++-----
.../approved-plans-v1_4/q4/simplified.txt | 79 +-
.../approved-plans-v1_4/q40.sf100/explain.txt | 276 ++--
.../approved-plans-v1_4/q40.sf100/simplified.txt | 25 +-
.../approved-plans-v1_4/q40/explain.txt | 291 ++--
.../approved-plans-v1_4/q40/simplified.txt | 57 +-
.../approved-plans-v1_4/q42.sf100/explain.txt | 101 +-
.../approved-plans-v1_4/q42.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q42/explain.txt | 41 +-
.../approved-plans-v1_4/q42/simplified.txt | 4 +-
.../approved-plans-v1_4/q43.sf100/explain.txt | 83 +-
.../approved-plans-v1_4/q43.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q43/explain.txt | 41 +-
.../approved-plans-v1_4/q43/simplified.txt | 4 +-
.../approved-plans-v1_4/q44.sf100/explain.txt | 160 +-
.../approved-plans-v1_4/q44.sf100/simplified.txt | 4 +-
.../approved-plans-v1_4/q44/explain.txt | 279 ++--
.../approved-plans-v1_4/q44/simplified.txt | 89 +-
.../approved-plans-v1_4/q45.sf100/explain.txt | 189 +--
.../approved-plans-v1_4/q45.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q45/explain.txt | 165 +-
.../approved-plans-v1_4/q45/simplified.txt | 16 +-
.../approved-plans-v1_4/q46.sf100/explain.txt | 151 +-
.../approved-plans-v1_4/q46.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q46/explain.txt | 177 +-
.../approved-plans-v1_4/q46/simplified.txt | 6 +-
.../approved-plans-v1_4/q47.sf100/explain.txt | 249 +--
.../approved-plans-v1_4/q47.sf100/simplified.txt | 10 +-
.../approved-plans-v1_4/q47/explain.txt | 211 +--
.../approved-plans-v1_4/q47/simplified.txt | 12 +-
.../approved-plans-v1_4/q48.sf100/explain.txt | 137 +-
.../approved-plans-v1_4/q48.sf100/simplified.txt | 20 +-
.../approved-plans-v1_4/q48/explain.txt | 137 +-
.../approved-plans-v1_4/q48/simplified.txt | 20 +-
.../approved-plans-v1_4/q49.sf100/explain.txt | 738 +++++----
.../approved-plans-v1_4/q49.sf100/simplified.txt | 49 +-
.../approved-plans-v1_4/q49/explain.txt | 722 +++++----
.../approved-plans-v1_4/q49/simplified.txt | 67 +-
.../approved-plans-v1_4/q5.sf100/explain.txt | 400 ++---
.../approved-plans-v1_4/q5.sf100/simplified.txt | 52 +-
.../approved-plans-v1_4/q5/explain.txt | 374 +++--
.../approved-plans-v1_4/q5/simplified.txt | 44 +-
.../approved-plans-v1_4/q50.sf100/explain.txt | 124 +-
.../approved-plans-v1_4/q50.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q50/explain.txt | 144 +-
.../approved-plans-v1_4/q50/simplified.txt | 18 +-
.../approved-plans-v1_4/q51.sf100/explain.txt | 196 +--
.../approved-plans-v1_4/q51.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q51/explain.txt | 196 +--
.../approved-plans-v1_4/q51/simplified.txt | 11 +-
.../approved-plans-v1_4/q52.sf100/explain.txt | 83 +-
.../approved-plans-v1_4/q52.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q52/explain.txt | 41 +-
.../approved-plans-v1_4/q52/simplified.txt | 4 +-
.../approved-plans-v1_4/q53.sf100/explain.txt | 121 +-
.../approved-plans-v1_4/q53.sf100/simplified.txt | 14 +-
.../approved-plans-v1_4/q53/explain.txt | 125 +-
.../approved-plans-v1_4/q53/simplified.txt | 8 +-
.../approved-plans-v1_4/q54.sf100/explain.txt | 357 +++--
.../approved-plans-v1_4/q54.sf100/simplified.txt | 21 +-
.../approved-plans-v1_4/q54/explain.txt | 387 ++---
.../approved-plans-v1_4/q54/simplified.txt | 37 +-
.../approved-plans-v1_4/q55.sf100/explain.txt | 83 +-
.../approved-plans-v1_4/q55.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q55/explain.txt | 41 +-
.../approved-plans-v1_4/q55/simplified.txt | 4 +-
.../approved-plans-v1_4/q56.sf100/explain.txt | 283 ++--
.../approved-plans-v1_4/q56.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q56/explain.txt | 283 ++--
.../approved-plans-v1_4/q56/simplified.txt | 16 +-
.../approved-plans-v1_4/q57.sf100/explain.txt | 249 +--
.../approved-plans-v1_4/q57.sf100/simplified.txt | 10 +-
.../approved-plans-v1_4/q57/explain.txt | 211 +--
.../approved-plans-v1_4/q57/simplified.txt | 12 +-
.../approved-plans-v1_4/q58.sf100/explain.txt | 111 +-
.../approved-plans-v1_4/q58.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q58/explain.txt | 111 +-
.../approved-plans-v1_4/q58/simplified.txt | 18 +-
.../approved-plans-v1_4/q59.sf100/explain.txt | 63 +-
.../approved-plans-v1_4/q59.sf100/simplified.txt | 4 +-
.../approved-plans-v1_4/q59/explain.txt | 63 +-
.../approved-plans-v1_4/q59/simplified.txt | 4 +-
.../approved-plans-v1_4/q6.sf100/explain.txt | 268 ++--
.../approved-plans-v1_4/q6.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q6/explain.txt | 206 +--
.../approved-plans-v1_4/q6/simplified.txt | 10 +-
.../approved-plans-v1_4/q60.sf100/explain.txt | 283 ++--
.../approved-plans-v1_4/q60.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q60/explain.txt | 283 ++--
.../approved-plans-v1_4/q60/simplified.txt | 16 +-
.../approved-plans-v1_4/q61.sf100/explain.txt | 278 ++--
.../approved-plans-v1_4/q61.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q61/explain.txt | 288 ++--
.../approved-plans-v1_4/q61/simplified.txt | 27 +-
.../approved-plans-v1_4/q62.sf100/explain.txt | 44 +-
.../approved-plans-v1_4/q62.sf100/simplified.txt | 10 +-
.../approved-plans-v1_4/q62/explain.txt | 44 +-
.../approved-plans-v1_4/q62/simplified.txt | 10 +-
.../approved-plans-v1_4/q63.sf100/explain.txt | 121 +-
.../approved-plans-v1_4/q63.sf100/simplified.txt | 14 +-
.../approved-plans-v1_4/q63/explain.txt | 125 +-
.../approved-plans-v1_4/q63/simplified.txt | 8 +-
.../approved-plans-v1_4/q64.sf100/explain.txt | 1688 ++++++++++----------
.../approved-plans-v1_4/q64.sf100/simplified.txt | 68 +-
.../approved-plans-v1_4/q64/explain.txt | 1438 +++++++++--------
.../approved-plans-v1_4/q64/simplified.txt | 397 +++--
.../approved-plans-v1_4/q65.sf100/explain.txt | 204 +--
.../approved-plans-v1_4/q65.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q65/explain.txt | 182 ++-
.../approved-plans-v1_4/q65/simplified.txt | 11 +-
.../approved-plans-v1_4/q66.sf100/explain.txt | 240 +--
.../approved-plans-v1_4/q66.sf100/simplified.txt | 31 +-
.../approved-plans-v1_4/q66/explain.txt | 240 +--
.../approved-plans-v1_4/q66/simplified.txt | 23 +-
.../approved-plans-v1_4/q67.sf100/explain.txt | 149 +-
.../approved-plans-v1_4/q67.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q67/explain.txt | 137 +-
.../approved-plans-v1_4/q67/simplified.txt | 6 +-
.../approved-plans-v1_4/q68.sf100/explain.txt | 151 +-
.../approved-plans-v1_4/q68.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q68/explain.txt | 177 +-
.../approved-plans-v1_4/q68/simplified.txt | 6 +-
.../approved-plans-v1_4/q69.sf100/explain.txt | 355 ++--
.../approved-plans-v1_4/q69.sf100/simplified.txt | 25 +-
.../approved-plans-v1_4/q69/explain.txt | 339 ++--
.../approved-plans-v1_4/q69/simplified.txt | 25 +-
.../approved-plans-v1_4/q7.sf100/explain.txt | 145 +-
.../approved-plans-v1_4/q7.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q7/explain.txt | 145 +-
.../approved-plans-v1_4/q7/simplified.txt | 12 +-
.../approved-plans-v1_4/q70.sf100/explain.txt | 216 +--
.../approved-plans-v1_4/q70.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q70/explain.txt | 216 +--
.../approved-plans-v1_4/q70/simplified.txt | 13 +-
.../approved-plans-v1_4/q71.sf100/explain.txt | 165 +-
.../approved-plans-v1_4/q71.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q71/explain.txt | 165 +-
.../approved-plans-v1_4/q71/simplified.txt | 16 +-
.../approved-plans-v1_4/q72.sf100/explain.txt | 243 +--
.../approved-plans-v1_4/q72.sf100/simplified.txt | 27 +-
.../approved-plans-v1_4/q72/explain.txt | 488 +++---
.../approved-plans-v1_4/q72/simplified.txt | 189 +--
.../approved-plans-v1_4/q73.sf100/explain.txt | 161 +-
.../approved-plans-v1_4/q73.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q73/explain.txt | 149 +-
.../approved-plans-v1_4/q73/simplified.txt | 6 +-
.../approved-plans-v1_4/q74.sf100/explain.txt | 405 ++---
.../approved-plans-v1_4/q74.sf100/simplified.txt | 22 +-
.../approved-plans-v1_4/q74/explain.txt | 569 ++++---
.../approved-plans-v1_4/q74/simplified.txt | 50 +-
.../approved-plans-v1_4/q75.sf100/explain.txt | 1022 ++++++------
.../approved-plans-v1_4/q75.sf100/simplified.txt | 89 +-
.../approved-plans-v1_4/q75/explain.txt | 1015 +++++++-----
.../approved-plans-v1_4/q75/simplified.txt | 374 +++--
.../approved-plans-v1_4/q76.sf100/explain.txt | 87 +-
.../approved-plans-v1_4/q76.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q76/explain.txt | 81 +-
.../approved-plans-v1_4/q76/simplified.txt | 18 +-
.../approved-plans-v1_4/q77.sf100/explain.txt | 701 ++++----
.../approved-plans-v1_4/q77.sf100/simplified.txt | 42 +-
.../approved-plans-v1_4/q77/explain.txt | 701 ++++----
.../approved-plans-v1_4/q77/simplified.txt | 38 +-
.../approved-plans-v1_4/q78.sf100/explain.txt | 622 ++++----
.../approved-plans-v1_4/q78.sf100/simplified.txt | 57 +-
.../approved-plans-v1_4/q78/explain.txt | 614 ++++---
.../approved-plans-v1_4/q78/simplified.txt | 180 ++-
.../approved-plans-v1_4/q79.sf100/explain.txt | 157 +-
.../approved-plans-v1_4/q79.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q79/explain.txt | 145 +-
.../approved-plans-v1_4/q79/simplified.txt | 6 +-
.../approved-plans-v1_4/q8.sf100/explain.txt | 229 +--
.../approved-plans-v1_4/q8.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q8/explain.txt | 205 +--
.../approved-plans-v1_4/q8/simplified.txt | 6 +-
.../approved-plans-v1_4/q80.sf100/explain.txt | 902 ++++++-----
.../approved-plans-v1_4/q80.sf100/simplified.txt | 81 +-
.../approved-plans-v1_4/q80/explain.txt | 903 ++++++-----
.../approved-plans-v1_4/q80/simplified.txt | 159 +-
.../approved-plans-v1_4/q81.sf100/explain.txt | 280 ++--
.../approved-plans-v1_4/q81.sf100/simplified.txt | 11 +-
.../approved-plans-v1_4/q81/explain.txt | 244 +--
.../approved-plans-v1_4/q81/simplified.txt | 11 +-
.../approved-plans-v1_4/q82.sf100/explain.txt | 128 +-
.../approved-plans-v1_4/q82.sf100/simplified.txt | 17 +-
.../approved-plans-v1_4/q82/explain.txt | 178 ++-
.../approved-plans-v1_4/q82/simplified.txt | 61 +-
.../approved-plans-v1_4/q83.sf100/explain.txt | 111 +-
.../approved-plans-v1_4/q83.sf100/simplified.txt | 12 +-
.../approved-plans-v1_4/q83/explain.txt | 111 +-
.../approved-plans-v1_4/q83/simplified.txt | 18 +-
.../approved-plans-v1_4/q84.sf100/explain.txt | 35 +-
.../approved-plans-v1_4/q84.sf100/simplified.txt | 9 +-
.../approved-plans-v1_4/q84/explain.txt | 133 +-
.../approved-plans-v1_4/q84/simplified.txt | 91 +-
.../approved-plans-v1_4/q85.sf100/explain.txt | 428 ++---
.../approved-plans-v1_4/q85.sf100/simplified.txt | 25 +-
.../approved-plans-v1_4/q85/explain.txt | 420 ++---
.../approved-plans-v1_4/q85/simplified.txt | 35 +-
.../approved-plans-v1_4/q86.sf100/explain.txt | 117 +-
.../approved-plans-v1_4/q86.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q86/explain.txt | 117 +-
.../approved-plans-v1_4/q86/simplified.txt | 6 +-
.../approved-plans-v1_4/q87.sf100/explain.txt | 303 ++--
.../approved-plans-v1_4/q87.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q87/explain.txt | 439 ++---
.../approved-plans-v1_4/q87/simplified.txt | 98 +-
.../approved-plans-v1_4/q88.sf100/explain.txt | 1202 +++++++-------
.../approved-plans-v1_4/q88.sf100/simplified.txt | 72 +-
.../approved-plans-v1_4/q88/explain.txt | 1202 +++++++-------
.../approved-plans-v1_4/q88/simplified.txt | 72 +-
.../approved-plans-v1_4/q89.sf100/explain.txt | 123 +-
.../approved-plans-v1_4/q89.sf100/simplified.txt | 8 +-
.../approved-plans-v1_4/q89/explain.txt | 127 +-
.../approved-plans-v1_4/q89/simplified.txt | 8 +-
.../approved-plans-v1_4/q9.sf100/explain.txt | 410 ++---
.../approved-plans-v1_4/q9.sf100/simplified.txt | 30 +-
.../approved-plans-v1_4/q9/explain.txt | 410 ++---
.../approved-plans-v1_4/q9/simplified.txt | 30 +-
.../approved-plans-v1_4/q90.sf100/explain.txt | 356 +++--
.../approved-plans-v1_4/q90.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q90/explain.txt | 356 +++--
.../approved-plans-v1_4/q90/simplified.txt | 18 +-
.../approved-plans-v1_4/q91.sf100/explain.txt | 189 +--
.../approved-plans-v1_4/q91.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q91/explain.txt | 179 ++-
.../approved-plans-v1_4/q91/simplified.txt | 8 +-
.../approved-plans-v1_4/q92.sf100/explain.txt | 146 +-
.../approved-plans-v1_4/q92.sf100/simplified.txt | 13 +-
.../approved-plans-v1_4/q92/explain.txt | 166 +-
.../approved-plans-v1_4/q92/simplified.txt | 25 +-
.../approved-plans-v1_4/q93.sf100/explain.txt | 174 +-
.../approved-plans-v1_4/q93.sf100/simplified.txt | 16 +-
.../approved-plans-v1_4/q93/explain.txt | 167 +-
.../approved-plans-v1_4/q93/simplified.txt | 39 +-
.../approved-plans-v1_4/q94.sf100/explain.txt | 330 ++--
.../approved-plans-v1_4/q94.sf100/simplified.txt | 18 +-
.../approved-plans-v1_4/q94/explain.txt | 326 ++--
.../approved-plans-v1_4/q94/simplified.txt | 74 +-
.../approved-plans-v1_4/q95.sf100/explain.txt | 429 ++---
.../approved-plans-v1_4/q95.sf100/simplified.txt | 27 +-
.../approved-plans-v1_4/q95/explain.txt | 446 +++---
.../approved-plans-v1_4/q95/simplified.txt | 120 +-
.../approved-plans-v1_4/q96.sf100/explain.txt | 195 +--
.../approved-plans-v1_4/q96.sf100/simplified.txt | 9 +-
.../approved-plans-v1_4/q96/explain.txt | 195 +--
.../approved-plans-v1_4/q96/simplified.txt | 9 +-
.../approved-plans-v1_4/q97.sf100/explain.txt | 234 +--
.../approved-plans-v1_4/q97.sf100/simplified.txt | 17 +-
.../approved-plans-v1_4/q97/explain.txt | 234 +--
.../approved-plans-v1_4/q97/simplified.txt | 17 +-
.../approved-plans-v1_4/q98.sf100/explain.txt | 133 +-
.../approved-plans-v1_4/q98.sf100/simplified.txt | 6 +-
.../approved-plans-v1_4/q98/explain.txt | 121 +-
.../approved-plans-v1_4/q98/simplified.txt | 12 +-
.../approved-plans-v1_4/q99.sf100/explain.txt | 44 +-
.../approved-plans-v1_4/q99.sf100/simplified.txt | 10 +-
.../approved-plans-v1_4/q99/explain.txt | 44 +-
.../approved-plans-v1_4/q99/simplified.txt | 10 +-
.../approved-plans-v2_7/q10a.sf100/explain.txt | 357 +++--
.../approved-plans-v2_7/q10a.sf100/simplified.txt | 25 +-
.../approved-plans-v2_7/q10a/explain.txt | 341 ++--
.../approved-plans-v2_7/q10a/simplified.txt | 25 +-
.../approved-plans-v2_7/q11.sf100/explain.txt | 405 ++---
.../approved-plans-v2_7/q11.sf100/simplified.txt | 22 +-
.../approved-plans-v2_7/q11/explain.txt | 569 ++++---
.../approved-plans-v2_7/q11/simplified.txt | 50 +-
.../approved-plans-v2_7/q12.sf100/explain.txt | 125 +-
.../approved-plans-v2_7/q12.sf100/simplified.txt | 6 +-
.../approved-plans-v2_7/q12/explain.txt | 113 +-
.../approved-plans-v2_7/q12/simplified.txt | 12 +-
.../approved-plans-v2_7/q14.sf100/explain.txt | 856 +++++-----
.../approved-plans-v2_7/q14.sf100/simplified.txt | 112 +-
.../approved-plans-v2_7/q14/explain.txt | 832 +++++-----
.../approved-plans-v2_7/q14/simplified.txt | 135 +-
.../approved-plans-v2_7/q14a.sf100/explain.txt | 1327 +++++++--------
.../approved-plans-v2_7/q14a.sf100/simplified.txt | 184 ++-
.../approved-plans-v2_7/q14a/explain.txt | 1391 ++++++++--------
.../approved-plans-v2_7/q14a/simplified.txt | 210 +--
.../approved-plans-v2_7/q18a.sf100/explain.txt | 643 ++++----
.../approved-plans-v2_7/q18a.sf100/simplified.txt | 66 +-
.../approved-plans-v2_7/q18a/explain.txt | 633 ++++----
.../approved-plans-v2_7/q18a/simplified.txt | 108 +-
.../approved-plans-v2_7/q20.sf100/explain.txt | 125 +-
.../approved-plans-v2_7/q20.sf100/simplified.txt | 6 +-
.../approved-plans-v2_7/q20/explain.txt | 113 +-
.../approved-plans-v2_7/q20/simplified.txt | 12 +-
.../approved-plans-v2_7/q22.sf100/explain.txt | 115 +-
.../approved-plans-v2_7/q22.sf100/simplified.txt | 6 +-
.../approved-plans-v2_7/q22/explain.txt | 103 +-
.../approved-plans-v2_7/q22/simplified.txt | 6 +-
.../approved-plans-v2_7/q22a.sf100/explain.txt | 297 ++--
.../approved-plans-v2_7/q22a.sf100/simplified.txt | 26 +-
.../approved-plans-v2_7/q22a/explain.txt | 285 ++--
.../approved-plans-v2_7/q22a/simplified.txt | 20 +-
.../approved-plans-v2_7/q24.sf100/explain.txt | 534 ++++---
.../approved-plans-v2_7/q24.sf100/simplified.txt | 36 +-
.../approved-plans-v2_7/q24/explain.txt | 700 ++++----
.../approved-plans-v2_7/q24/simplified.txt | 116 +-
.../approved-plans-v2_7/q27a.sf100/explain.txt | 323 ++--
.../approved-plans-v2_7/q27a.sf100/simplified.txt | 38 +-
.../approved-plans-v2_7/q27a/explain.txt | 323 ++--
.../approved-plans-v2_7/q27a/simplified.txt | 34 +-
.../approved-plans-v2_7/q34.sf100/explain.txt | 161 +-
.../approved-plans-v2_7/q34.sf100/simplified.txt | 6 +-
.../approved-plans-v2_7/q34/explain.txt | 149 +-
.../approved-plans-v2_7/q34/simplified.txt | 6 +-
.../approved-plans-v2_7/q35.sf100/explain.txt | 405 +++--
.../approved-plans-v2_7/q35.sf100/simplified.txt | 25 +-
.../approved-plans-v2_7/q35/explain.txt | 349 ++--
.../approved-plans-v2_7/q35/simplified.txt | 25 +-
.../approved-plans-v2_7/q35a.sf100/explain.txt | 403 +++--
.../approved-plans-v2_7/q35a.sf100/simplified.txt | 25 +-
.../approved-plans-v2_7/q35a/explain.txt | 347 ++--
.../approved-plans-v2_7/q35a/simplified.txt | 25 +-
.../approved-plans-v2_7/q36a.sf100/explain.txt | 225 +--
.../approved-plans-v2_7/q36a.sf100/simplified.txt | 12 +-
.../approved-plans-v2_7/q36a/explain.txt | 225 +--
.../approved-plans-v2_7/q36a/simplified.txt | 12 +-
.../approved-plans-v2_7/q47.sf100/explain.txt | 249 +--
.../approved-plans-v2_7/q47.sf100/simplified.txt | 10 +-
.../approved-plans-v2_7/q47/explain.txt | 211 +--
.../approved-plans-v2_7/q47/simplified.txt | 12 +-
.../approved-plans-v2_7/q49.sf100/explain.txt | 738 +++++----
.../approved-plans-v2_7/q49.sf100/simplified.txt | 49 +-
.../approved-plans-v2_7/q49/explain.txt | 722 +++++----
.../approved-plans-v2_7/q49/simplified.txt | 67 +-
.../approved-plans-v2_7/q51a.sf100/explain.txt | 394 ++---
.../approved-plans-v2_7/q51a.sf100/simplified.txt | 27 +-
.../approved-plans-v2_7/q51a/explain.txt | 382 ++---
.../approved-plans-v2_7/q51a/simplified.txt | 29 +-
.../approved-plans-v2_7/q57.sf100/explain.txt | 249 +--
.../approved-plans-v2_7/q57.sf100/simplified.txt | 10 +-
.../approved-plans-v2_7/q57/explain.txt | 211 +--
.../approved-plans-v2_7/q57/simplified.txt | 12 +-
.../approved-plans-v2_7/q5a.sf100/explain.txt | 484 +++---
.../approved-plans-v2_7/q5a.sf100/simplified.txt | 58 +-
.../approved-plans-v2_7/q5a/explain.txt | 458 +++---
.../approved-plans-v2_7/q5a/simplified.txt | 50 +-
.../approved-plans-v2_7/q6.sf100/explain.txt | 268 ++--
.../approved-plans-v2_7/q6.sf100/simplified.txt | 18 +-
.../approved-plans-v2_7/q6/explain.txt | 206 +--
.../approved-plans-v2_7/q6/simplified.txt | 10 +-
.../approved-plans-v2_7/q64.sf100/explain.txt | 1688 ++++++++++----------
.../approved-plans-v2_7/q64.sf100/simplified.txt | 68 +-
.../approved-plans-v2_7/q64/explain.txt | 1438 +++++++++--------
.../approved-plans-v2_7/q64/simplified.txt | 397 +++--
.../approved-plans-v2_7/q67a.sf100/explain.txt | 445 +++---
.../approved-plans-v2_7/q67a.sf100/simplified.txt | 36 +-
.../approved-plans-v2_7/q67a/explain.txt | 433 ++---
.../approved-plans-v2_7/q67a/simplified.txt | 36 +-
.../approved-plans-v2_7/q70a.sf100/explain.txt | 300 ++--
.../approved-plans-v2_7/q70a.sf100/simplified.txt | 17 +-
.../approved-plans-v2_7/q70a/explain.txt | 300 ++--
.../approved-plans-v2_7/q70a/simplified.txt | 19 +-
.../approved-plans-v2_7/q72.sf100/explain.txt | 243 +--
.../approved-plans-v2_7/q72.sf100/simplified.txt | 27 +-
.../approved-plans-v2_7/q72/explain.txt | 488 +++---
.../approved-plans-v2_7/q72/simplified.txt | 189 +--
.../approved-plans-v2_7/q74.sf100/explain.txt | 405 ++---
.../approved-plans-v2_7/q74.sf100/simplified.txt | 22 +-
.../approved-plans-v2_7/q74/explain.txt | 569 ++++---
.../approved-plans-v2_7/q74/simplified.txt | 50 +-
.../approved-plans-v2_7/q75.sf100/explain.txt | 1022 ++++++------
.../approved-plans-v2_7/q75.sf100/simplified.txt | 89 +-
.../approved-plans-v2_7/q75/explain.txt | 1015 +++++++-----
.../approved-plans-v2_7/q75/simplified.txt | 374 +++--
.../approved-plans-v2_7/q77a.sf100/explain.txt | 845 +++++-----
.../approved-plans-v2_7/q77a.sf100/simplified.txt | 48 +-
.../approved-plans-v2_7/q77a/explain.txt | 845 +++++-----
.../approved-plans-v2_7/q77a/simplified.txt | 44 +-
.../approved-plans-v2_7/q78.sf100/explain.txt | 622 ++++----
.../approved-plans-v2_7/q78.sf100/simplified.txt | 57 +-
.../approved-plans-v2_7/q78/explain.txt | 614 ++++---
.../approved-plans-v2_7/q78/simplified.txt | 180 ++-
.../approved-plans-v2_7/q80a.sf100/explain.txt | 1046 ++++++------
.../approved-plans-v2_7/q80a.sf100/simplified.txt | 87 +-
.../approved-plans-v2_7/q80a/explain.txt | 1047 ++++++------
.../approved-plans-v2_7/q80a/simplified.txt | 179 ++-
.../approved-plans-v2_7/q86a.sf100/explain.txt | 201 +--
.../approved-plans-v2_7/q86a.sf100/simplified.txt | 12 +-
.../approved-plans-v2_7/q86a/explain.txt | 201 +--
.../approved-plans-v2_7/q86a/simplified.txt | 12 +-
.../approved-plans-v2_7/q98.sf100/explain.txt | 129 +-
.../approved-plans-v2_7/q98.sf100/simplified.txt | 6 +-
.../approved-plans-v2_7/q98/explain.txt | 117 +-
.../approved-plans-v2_7/q98/simplified.txt | 12 +-
.../scala/org/apache/spark/sql/TPCDSBase.scala | 19 +
621 files changed, 58902 insertions(+), 51970 deletions(-)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt
index d399161..8a4b341 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/explain.txt
@@ -69,135 +69,138 @@ Condition : ((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AND
(4) Exchange
Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3]
-Arguments: hashpartitioning(c_customer_sk#1, 5), true, [id=#4]
+Arguments: hashpartitioning(c_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#4]
(5) Sort [codegen id : 2]
Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3]
Arguments: [c_customer_sk#1 ASC NULLS FIRST], false, 0
(6) Scan parquet default.web_sales
-Output [2]: [ws_sold_date_sk#5, ws_bill_customer_sk#6]
+Output [2]: [ws_bill_customer_sk#5, ws_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/web_sales]
-PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)]
-ReadSchema: struct<ws_sold_date_sk:int,ws_bill_customer_sk:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ws_sold_date_sk#6), dynamicpruningexpression(ws_sold_date_sk#6 IN dynamicpruning#7)]
+PushedFilters: [IsNotNull(ws_bill_customer_sk)]
+ReadSchema: struct<ws_bill_customer_sk:int>
(7) ColumnarToRow [codegen id : 4]
-Input [2]: [ws_sold_date_sk#5, ws_bill_customer_sk#6]
+Input [2]: [ws_bill_customer_sk#5, ws_sold_date_sk#6]
(8) Filter [codegen id : 4]
-Input [2]: [ws_sold_date_sk#5, ws_bill_customer_sk#6]
-Condition : (isnotnull(ws_sold_date_sk#5) AND isnotnull(ws_bill_customer_sk#6))
+Input [2]: [ws_bill_customer_sk#5, ws_sold_date_sk#6]
+Condition : isnotnull(ws_bill_customer_sk#5)
(9) Scan parquet default.date_dim
-Output [3]: [d_date_sk#7, d_year#8, d_moy#9]
+Output [3]: [d_date_sk#8, d_year#9, d_moy#10]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>
(10) ColumnarToRow [codegen id : 3]
-Input [3]: [d_date_sk#7, d_year#8, d_moy#9]
+Input [3]: [d_date_sk#8, d_year#9, d_moy#10]
(11) Filter [codegen id : 3]
-Input [3]: [d_date_sk#7, d_year#8, d_moy#9]
-Condition : (((((isnotnull(d_year#8) AND isnotnull(d_moy#9)) AND (d_year#8 = 2002)) AND (d_moy#9 >= 4)) AND (d_moy#9 <= 7)) AND isnotnull(d_date_sk#7))
+Input [3]: [d_date_sk#8, d_year#9, d_moy#10]
+Condition : (((((isnotnull(d_year#9) AND isnotnull(d_moy#10)) AND (d_year#9 = 2002)) AND (d_moy#10 >= 4)) AND (d_moy#10 <= 7)) AND isnotnull(d_date_sk#8))
(12) Project [codegen id : 3]
-Output [1]: [d_date_sk#7]
-Input [3]: [d_date_sk#7, d_year#8, d_moy#9]
+Output [1]: [d_date_sk#8]
+Input [3]: [d_date_sk#8, d_year#9, d_moy#10]
(13) BroadcastExchange
-Input [1]: [d_date_sk#7]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
+Input [1]: [d_date_sk#8]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11]
(14) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ws_sold_date_sk#5]
-Right keys [1]: [d_date_sk#7]
+Left keys [1]: [ws_sold_date_sk#6]
+Right keys [1]: [d_date_sk#8]
Join condition: None
(15) Project [codegen id : 4]
-Output [1]: [ws_bill_customer_sk#6 AS customer_sk#11]
-Input [3]: [ws_sold_date_sk#5, ws_bill_customer_sk#6, d_date_sk#7]
+Output [1]: [ws_bill_customer_sk#5 AS customer_sk#12]
+Input [3]: [ws_bill_customer_sk#5, ws_sold_date_sk#6, d_date_sk#8]
(16) Scan parquet default.catalog_sales
-Output [2]: [cs_sold_date_sk#12, cs_ship_customer_sk#13]
+Output [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/catalog_sales]
-PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)]
-ReadSchema: struct<cs_sold_date_sk:int,cs_ship_customer_sk:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(cs_sold_date_sk#14), dynamicpruningexpression(cs_sold_date_sk#14 IN dynamicpruning#7)]
+PushedFilters: [IsNotNull(cs_ship_customer_sk)]
+ReadSchema: struct<cs_ship_customer_sk:int>
(17) ColumnarToRow [codegen id : 6]
-Input [2]: [cs_sold_date_sk#12, cs_ship_customer_sk#13]
+Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14]
(18) Filter [codegen id : 6]
-Input [2]: [cs_sold_date_sk#12, cs_ship_customer_sk#13]
-Condition : (isnotnull(cs_sold_date_sk#12) AND isnotnull(cs_ship_customer_sk#13))
+Input [2]: [cs_ship_customer_sk#13, cs_sold_date_sk#14]
+Condition : isnotnull(cs_ship_customer_sk#13)
(19) ReusedExchange [Reuses operator id: 13]
-Output [1]: [d_date_sk#7]
+Output [1]: [d_date_sk#8]
(20) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [cs_sold_date_sk#12]
-Right keys [1]: [d_date_sk#7]
+Left keys [1]: [cs_sold_date_sk#14]
+Right keys [1]: [d_date_sk#8]
Join condition: None
(21) Project [codegen id : 6]
-Output [1]: [cs_ship_customer_sk#13 AS customer_sk#14]
-Input [3]: [cs_sold_date_sk#12, cs_ship_customer_sk#13, d_date_sk#7]
+Output [1]: [cs_ship_customer_sk#13 AS customer_sk#15]
+Input [3]: [cs_ship_customer_sk#13, cs_sold_date_sk#14, d_date_sk#8]
(22) Union
(23) Exchange
-Input [1]: [customer_sk#11]
-Arguments: hashpartitioning(customer_sk#11, 5), true, [id=#15]
+Input [1]: [customer_sk#12]
+Arguments: hashpartitioning(customer_sk#12, 5), ENSURE_REQUIREMENTS, [id=#16]
(24) Sort [codegen id : 7]
-Input [1]: [customer_sk#11]
-Arguments: [customer_sk#11 ASC NULLS FIRST], false, 0
+Input [1]: [customer_sk#12]
+Arguments: [customer_sk#12 ASC NULLS FIRST], false, 0
(25) SortMergeJoin
Left keys [1]: [c_customer_sk#1]
-Right keys [1]: [customer_sk#11]
+Right keys [1]: [customer_sk#12]
Join condition: None
(26) Scan parquet default.store_sales
-Output [2]: [ss_sold_date_sk#16, ss_customer_sk#17]
+Output [2]: [ss_customer_sk#17, ss_sold_date_sk#18]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#18), dynamicpruningexpression(ss_sold_date_sk#18 IN dynamicpruning#7)]
+PushedFilters: [IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int>
(27) ColumnarToRow [codegen id : 9]
-Input [2]: [ss_sold_date_sk#16, ss_customer_sk#17]
+Input [2]: [ss_customer_sk#17, ss_sold_date_sk#18]
(28) Filter [codegen id : 9]
-Input [2]: [ss_sold_date_sk#16, ss_customer_sk#17]
-Condition : (isnotnull(ss_sold_date_sk#16) AND isnotnull(ss_customer_sk#17))
+Input [2]: [ss_customer_sk#17, ss_sold_date_sk#18]
+Condition : isnotnull(ss_customer_sk#17)
(29) ReusedExchange [Reuses operator id: 13]
-Output [1]: [d_date_sk#7]
+Output [1]: [d_date_sk#8]
(30) BroadcastHashJoin [codegen id : 9]
-Left keys [1]: [ss_sold_date_sk#16]
-Right keys [1]: [d_date_sk#7]
+Left keys [1]: [ss_sold_date_sk#18]
+Right keys [1]: [d_date_sk#8]
Join condition: None
(31) Project [codegen id : 9]
-Output [1]: [ss_customer_sk#17 AS customer_sk#18]
-Input [3]: [ss_sold_date_sk#16, ss_customer_sk#17, d_date_sk#7]
+Output [1]: [ss_customer_sk#17 AS customer_sk#19]
+Input [3]: [ss_customer_sk#17, ss_sold_date_sk#18, d_date_sk#8]
(32) Exchange
-Input [1]: [customer_sk#18]
-Arguments: hashpartitioning(customer_sk#18, 5), true, [id=#19]
+Input [1]: [customer_sk#19]
+Arguments: hashpartitioning(customer_sk#19, 5), ENSURE_REQUIREMENTS, [id=#20]
(33) Sort [codegen id : 10]
-Input [1]: [customer_sk#18]
-Arguments: [customer_sk#18 ASC NULLS FIRST], false, 0
+Input [1]: [customer_sk#19]
+Arguments: [customer_sk#19 ASC NULLS FIRST], false, 0
(34) SortMergeJoin
Left keys [1]: [c_customer_sk#1]
-Right keys [1]: [customer_sk#18]
+Right keys [1]: [customer_sk#19]
Join condition: None
(35) Project [codegen id : 12]
@@ -205,82 +208,96 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3]
Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3]
(36) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#20, ca_county#21]
+Output [2]: [ca_address_sk#21, ca_county#22]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [In(ca_county, [Walker County,Richland County,Gaines County,Douglas County,Dona Ana County]), IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_county:string>
(37) ColumnarToRow [codegen id : 11]
-Input [2]: [ca_address_sk#20, ca_county#21]
+Input [2]: [ca_address_sk#21, ca_county#22]
(38) Filter [codegen id : 11]
-Input [2]: [ca_address_sk#20, ca_county#21]
-Condition : (ca_county#21 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#20))
+Input [2]: [ca_address_sk#21, ca_county#22]
+Condition : (ca_county#22 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#21))
(39) Project [codegen id : 11]
-Output [1]: [ca_address_sk#20]
-Input [2]: [ca_address_sk#20, ca_county#21]
+Output [1]: [ca_address_sk#21]
+Input [2]: [ca_address_sk#21, ca_county#22]
(40) BroadcastExchange
-Input [1]: [ca_address_sk#20]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22]
+Input [1]: [ca_address_sk#21]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23]
(41) BroadcastHashJoin [codegen id : 12]
Left keys [1]: [c_current_addr_sk#3]
-Right keys [1]: [ca_address_sk#20]
+Right keys [1]: [ca_address_sk#21]
Join condition: None
(42) Project [codegen id : 12]
Output [1]: [c_current_cdemo_sk#2]
-Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#20]
+Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#21]
(43) BroadcastExchange
Input [1]: [c_current_cdemo_sk#2]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24]
(44) Scan parquet default.customer_demographics
-Output [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
+Output [9]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string,cd_purchase_estimate:int,cd_credit_rating:string,cd_dep_count:int,cd_dep_employed_count:int,cd_dep_college_count:int>
(45) ColumnarToRow
-Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
+Input [9]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
(46) Filter
-Input [9]: [cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
-Condition : isnotnull(cd_demo_sk#24)
+Input [9]: [cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
+Condition : isnotnull(cd_demo_sk#25)
(47) BroadcastHashJoin [codegen id : 13]
Left keys [1]: [c_current_cdemo_sk#2]
-Right keys [1]: [cd_demo_sk#24]
+Right keys [1]: [cd_demo_sk#25]
Join condition: None
(48) Project [codegen id : 13]
-Output [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
-Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#24, cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
+Output [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
+Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#25, cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
(49) HashAggregate [codegen id : 13]
-Input [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
-Keys [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
+Input [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
+Keys [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
Functions [1]: [partial_count(1)]
-Aggregate Attributes [1]: [count#33]
-Results [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#34]
+Aggregate Attributes [1]: [count#34]
+Results [9]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, count#35]
(50) Exchange
-Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#34]
-Arguments: hashpartitioning(cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, 5), true, [id=#35]
+Input [9]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, count#35]
+Arguments: hashpartitioning(cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, 5), ENSURE_REQUIREMENTS, [id=#36]
(51) HashAggregate [codegen id : 14]
-Input [9]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32, count#34]
-Keys [8]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cd_purchase_estimate#28, cd_credit_rating#29, cd_dep_count#30, cd_dep_employed_count#31, cd_dep_college_count#32]
+Input [9]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33, count#35]
+Keys [8]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cd_purchase_estimate#29, cd_credit_rating#30, cd_dep_count#31, cd_dep_employed_count#32, cd_dep_college_count#33]
Functions [1]: [count(1)]
-Aggregate Attributes [1]: [count(1)#36]
-Results [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, count(1)#36 AS cnt1#37, cd_purchase_estimate#28, count(1)#36 AS cnt2#38, cd_credit_rating#29, count(1)#36 AS cnt3#39, cd_dep_count#30, count(1)#36 AS cnt4#40, cd_dep_employed_count#31, count(1)#36 AS cnt5#41, cd_dep_college_count#32, count(1)#36 AS cnt6#42]
+Aggregate Attributes [1]: [count(1)#37]
+Results [14]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, count(1)#37 AS cnt1#38, cd_purchase_estimate#29, count(1)#37 AS cnt2#39, cd_credit_rating#30, count(1)#37 AS cnt3#40, cd_dep_count#31, count(1)#37 AS cnt4#41, cd_dep_employed_count#32, count(1)#37 AS cnt5#42, cd_dep_college_count#33, count(1)#37 AS cnt6#43]
(52) TakeOrderedAndProject
-Input [14]: [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#37, cd_purchase_estimate#28, cnt2#38, cd_credit_rating#29, cnt3#39, cd_dep_count#30, cnt4#40, cd_dep_employed_count#31, cnt5#41, cd_dep_college_count#32, cnt6#42]
-Arguments: 100, [cd_gender#25 ASC NULLS FIRST, cd_marital_status#26 ASC NULLS FIRST, cd_education_status#27 ASC NULLS FIRST, cd_purchase_estimate#28 ASC NULLS FIRST, cd_credit_rating#29 ASC NULLS FIRST, cd_dep_count#30 ASC NULLS FIRST, cd_dep_employed_count#31 ASC NULLS FIRST, cd_dep_college_count#32 ASC NULLS FIRST], [cd_gender#25, cd_marital_status#26, cd_education_status#27, cnt1#37, cd_purchase_estimate#28, cnt2#38, cd_credit_rating#29, cnt3#39, cd_dep_count#30, cnt4#40, cd_dep_emplo [...]
+Input [14]: [cd_gender#26, cd_marital_status#27, cd_education_status#28, cnt1#38, cd_purchase_estimate#29, cnt2#39, cd_credit_rating#30, cnt3#40, cd_dep_count#31, cnt4#41, cd_dep_employed_count#32, cnt5#42, cd_dep_college_count#33, cnt6#43]
+Arguments: 100, [cd_gender#26 ASC NULLS FIRST, cd_marital_status#27 ASC NULLS FIRST, cd_education_status#28 ASC NULLS FIRST, cd_purchase_estimate#29 ASC NULLS FIRST, cd_credit_rating#30 ASC NULLS FIRST, cd_dep_count#31 ASC NULLS FIRST, cd_dep_employed_count#32 ASC NULLS FIRST, cd_dep_college_count#33 ASC NULLS FIRST], [cd_gender#26, cd_marital_status#27, cd_education_status#28, cnt1#38, cd_purchase_estimate#29, cnt2#39, cd_credit_rating#30, cnt3#40, cd_dep_count#31, cnt4#41, cd_dep_emplo [...]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ws_sold_date_sk#6 IN dynamicpruning#7
+ReusedExchange (53)
+
+
+(53) ReusedExchange [Reuses operator id: 13]
+Output [1]: [d_date_sk#8]
+
+Subquery:2 Hosting operator id = 16 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#7
+
+Subquery:3 Hosting operator id = 26 Hosting Expression = ss_sold_date_sk#18 IN dynamicpruning#7
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/simplified.txt
index 7d5fa79..48e454c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10.sf100/simplified.txt
@@ -33,10 +33,12 @@ TakeOrderedAndProject [cd_gender,cd_marital_status,cd_education_status,cd_purcha
WholeStageCodegen (4)
Project [ws_bill_customer_sk]
BroadcastHashJoin [ws_sold_date_sk,d_date_sk]
- Filter [ws_sold_date_sk,ws_bill_customer_sk]
+ Filter [ws_bill_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.web_sales [ws_sold_date_sk,ws_bill_customer_sk]
+ Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #5
InputAdapter
BroadcastExchange #5
WholeStageCodegen (3)
@@ -48,10 +50,11 @@ TakeOrderedAndProject [cd_gender,cd_marital_status,cd_education_status,cd_purcha
WholeStageCodegen (6)
Project [cs_ship_customer_sk]
BroadcastHashJoin [cs_sold_date_sk,d_date_sk]
- Filter [cs_sold_date_sk,cs_ship_customer_sk]
+ Filter [cs_ship_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.catalog_sales [cs_sold_date_sk,cs_ship_customer_sk]
+ Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #5
WholeStageCodegen (10)
@@ -61,10 +64,11 @@ TakeOrderedAndProject [cd_gender,cd_marital_status,cd_education_status,cd_purcha
WholeStageCodegen (9)
Project [ss_customer_sk]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_customer_sk]
+ Filter [ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk]
+ Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #5
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt
index 20f60b3..6f64579 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/explain.txt
@@ -64,120 +64,123 @@ Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3]
Condition : ((isnotnull(c_customer_sk#1) AND isnotnull(c_current_addr_sk#3)) AND isnotnull(c_current_cdemo_sk#2))
(4) Scan parquet default.web_sales
-Output [2]: [ws_sold_date_sk#4, ws_bill_customer_sk#5]
+Output [2]: [ws_bill_customer_sk#4, ws_sold_date_sk#5]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/web_sales]
-PushedFilters: [IsNotNull(ws_sold_date_sk), IsNotNull(ws_bill_customer_sk)]
-ReadSchema: struct<ws_sold_date_sk:int,ws_bill_customer_sk:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ws_sold_date_sk#5), dynamicpruningexpression(ws_sold_date_sk#5 IN dynamicpruning#6)]
+PushedFilters: [IsNotNull(ws_bill_customer_sk)]
+ReadSchema: struct<ws_bill_customer_sk:int>
(5) ColumnarToRow [codegen id : 2]
-Input [2]: [ws_sold_date_sk#4, ws_bill_customer_sk#5]
+Input [2]: [ws_bill_customer_sk#4, ws_sold_date_sk#5]
(6) Filter [codegen id : 2]
-Input [2]: [ws_sold_date_sk#4, ws_bill_customer_sk#5]
-Condition : (isnotnull(ws_sold_date_sk#4) AND isnotnull(ws_bill_customer_sk#5))
+Input [2]: [ws_bill_customer_sk#4, ws_sold_date_sk#5]
+Condition : isnotnull(ws_bill_customer_sk#4)
(7) Scan parquet default.date_dim
-Output [3]: [d_date_sk#6, d_year#7, d_moy#8]
+Output [3]: [d_date_sk#7, d_year#8, d_moy#9]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2002), GreaterThanOrEqual(d_moy,4), LessThanOrEqual(d_moy,7), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>
(8) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_moy#8]
+Input [3]: [d_date_sk#7, d_year#8, d_moy#9]
(9) Filter [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_moy#8]
-Condition : (((((isnotnull(d_year#7) AND isnotnull(d_moy#8)) AND (d_year#7 = 2002)) AND (d_moy#8 >= 4)) AND (d_moy#8 <= 7)) AND isnotnull(d_date_sk#6))
+Input [3]: [d_date_sk#7, d_year#8, d_moy#9]
+Condition : (((((isnotnull(d_year#8) AND isnotnull(d_moy#9)) AND (d_year#8 = 2002)) AND (d_moy#9 >= 4)) AND (d_moy#9 <= 7)) AND isnotnull(d_date_sk#7))
(10) Project [codegen id : 1]
-Output [1]: [d_date_sk#6]
-Input [3]: [d_date_sk#6, d_year#7, d_moy#8]
+Output [1]: [d_date_sk#7]
+Input [3]: [d_date_sk#7, d_year#8, d_moy#9]
(11) BroadcastExchange
-Input [1]: [d_date_sk#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
+Input [1]: [d_date_sk#7]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(12) BroadcastHashJoin [codegen id : 2]
-Left keys [1]: [ws_sold_date_sk#4]
-Right keys [1]: [d_date_sk#6]
+Left keys [1]: [ws_sold_date_sk#5]
+Right keys [1]: [d_date_sk#7]
Join condition: None
(13) Project [codegen id : 2]
-Output [1]: [ws_bill_customer_sk#5 AS customer_sk#10]
-Input [3]: [ws_sold_date_sk#4, ws_bill_customer_sk#5, d_date_sk#6]
+Output [1]: [ws_bill_customer_sk#4 AS customer_sk#11]
+Input [3]: [ws_bill_customer_sk#4, ws_sold_date_sk#5, d_date_sk#7]
(14) Scan parquet default.catalog_sales
-Output [2]: [cs_sold_date_sk#11, cs_ship_customer_sk#12]
+Output [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/catalog_sales]
-PushedFilters: [IsNotNull(cs_sold_date_sk), IsNotNull(cs_ship_customer_sk)]
-ReadSchema: struct<cs_sold_date_sk:int,cs_ship_customer_sk:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(cs_sold_date_sk#13), dynamicpruningexpression(cs_sold_date_sk#13 IN dynamicpruning#6)]
+PushedFilters: [IsNotNull(cs_ship_customer_sk)]
+ReadSchema: struct<cs_ship_customer_sk:int>
(15) ColumnarToRow [codegen id : 4]
-Input [2]: [cs_sold_date_sk#11, cs_ship_customer_sk#12]
+Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13]
(16) Filter [codegen id : 4]
-Input [2]: [cs_sold_date_sk#11, cs_ship_customer_sk#12]
-Condition : (isnotnull(cs_sold_date_sk#11) AND isnotnull(cs_ship_customer_sk#12))
+Input [2]: [cs_ship_customer_sk#12, cs_sold_date_sk#13]
+Condition : isnotnull(cs_ship_customer_sk#12)
(17) ReusedExchange [Reuses operator id: 11]
-Output [1]: [d_date_sk#6]
+Output [1]: [d_date_sk#7]
(18) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [cs_sold_date_sk#11]
-Right keys [1]: [d_date_sk#6]
+Left keys [1]: [cs_sold_date_sk#13]
+Right keys [1]: [d_date_sk#7]
Join condition: None
(19) Project [codegen id : 4]
-Output [1]: [cs_ship_customer_sk#12 AS customer_sk#13]
-Input [3]: [cs_sold_date_sk#11, cs_ship_customer_sk#12, d_date_sk#6]
+Output [1]: [cs_ship_customer_sk#12 AS customer_sk#14]
+Input [3]: [cs_ship_customer_sk#12, cs_sold_date_sk#13, d_date_sk#7]
(20) Union
(21) BroadcastExchange
-Input [1]: [customer_sk#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14]
+Input [1]: [customer_sk#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15]
(22) BroadcastHashJoin [codegen id : 9]
Left keys [1]: [c_customer_sk#1]
-Right keys [1]: [customer_sk#10]
+Right keys [1]: [customer_sk#11]
Join condition: None
(23) Scan parquet default.store_sales
-Output [2]: [ss_sold_date_sk#15, ss_customer_sk#16]
+Output [2]: [ss_customer_sk#16, ss_sold_date_sk#17]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_customer_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#17), dynamicpruningexpression(ss_sold_date_sk#17 IN dynamicpruning#6)]
+PushedFilters: [IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int>
(24) ColumnarToRow [codegen id : 6]
-Input [2]: [ss_sold_date_sk#15, ss_customer_sk#16]
+Input [2]: [ss_customer_sk#16, ss_sold_date_sk#17]
(25) Filter [codegen id : 6]
-Input [2]: [ss_sold_date_sk#15, ss_customer_sk#16]
-Condition : (isnotnull(ss_sold_date_sk#15) AND isnotnull(ss_customer_sk#16))
+Input [2]: [ss_customer_sk#16, ss_sold_date_sk#17]
+Condition : isnotnull(ss_customer_sk#16)
(26) ReusedExchange [Reuses operator id: 11]
-Output [1]: [d_date_sk#6]
+Output [1]: [d_date_sk#7]
(27) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_sold_date_sk#15]
-Right keys [1]: [d_date_sk#6]
+Left keys [1]: [ss_sold_date_sk#17]
+Right keys [1]: [d_date_sk#7]
Join condition: None
(28) Project [codegen id : 6]
-Output [1]: [ss_customer_sk#16 AS customer_sk#17]
-Input [3]: [ss_sold_date_sk#15, ss_customer_sk#16, d_date_sk#6]
+Output [1]: [ss_customer_sk#16 AS customer_sk#18]
+Input [3]: [ss_customer_sk#16, ss_sold_date_sk#17, d_date_sk#7]
(29) BroadcastExchange
-Input [1]: [customer_sk#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18]
+Input [1]: [customer_sk#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19]
(30) BroadcastHashJoin [codegen id : 9]
Left keys [1]: [c_customer_sk#1]
-Right keys [1]: [customer_sk#17]
+Right keys [1]: [customer_sk#18]
Join condition: None
(31) Project [codegen id : 9]
@@ -185,82 +188,96 @@ Output [2]: [c_current_cdemo_sk#2, c_current_addr_sk#3]
Input [3]: [c_customer_sk#1, c_current_cdemo_sk#2, c_current_addr_sk#3]
(32) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#19, ca_county#20]
+Output [2]: [ca_address_sk#20, ca_county#21]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [In(ca_county, [Walker County,Richland County,Gaines County,Douglas County,Dona Ana County]), IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_county:string>
(33) ColumnarToRow [codegen id : 7]
-Input [2]: [ca_address_sk#19, ca_county#20]
+Input [2]: [ca_address_sk#20, ca_county#21]
(34) Filter [codegen id : 7]
-Input [2]: [ca_address_sk#19, ca_county#20]
-Condition : (ca_county#20 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#19))
+Input [2]: [ca_address_sk#20, ca_county#21]
+Condition : (ca_county#21 IN (Walker County,Richland County,Gaines County,Douglas County,Dona Ana County) AND isnotnull(ca_address_sk#20))
(35) Project [codegen id : 7]
-Output [1]: [ca_address_sk#19]
-Input [2]: [ca_address_sk#19, ca_county#20]
+Output [1]: [ca_address_sk#20]
+Input [2]: [ca_address_sk#20, ca_county#21]
(36) BroadcastExchange
-Input [1]: [ca_address_sk#19]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
+Input [1]: [ca_address_sk#20]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#22]
(37) BroadcastHashJoin [codegen id : 9]
Left keys [1]: [c_current_addr_sk#3]
-Right keys [1]: [ca_address_sk#19]
+Right keys [1]: [ca_address_sk#20]
Join condition: None
(38) Project [codegen id : 9]
Output [1]: [c_current_cdemo_sk#2]
-Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#19]
+Input [3]: [c_current_cdemo_sk#2, c_current_addr_sk#3, ca_address_sk#20]
(39) Scan parquet default.customer_demographics
-Output [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
+Output [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string,cd_purchase_estimate:int,cd_credit_rating:string,cd_dep_count:int,cd_dep_employed_count:int,cd_dep_college_count:int>
(40) ColumnarToRow [codegen id : 8]
-Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
+Input [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
(41) Filter [codegen id : 8]
-Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
-Condition : isnotnull(cd_demo_sk#22)
+Input [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
+Condition : isnotnull(cd_demo_sk#23)
(42) BroadcastExchange
-Input [9]: [cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#31]
+Input [9]: [cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#32]
(43) BroadcastHashJoin [codegen id : 9]
Left keys [1]: [c_current_cdemo_sk#2]
-Right keys [1]: [cd_demo_sk#22]
+Right keys [1]: [cd_demo_sk#23]
Join condition: None
(44) Project [codegen id : 9]
-Output [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
-Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#22, cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
+Output [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
+Input [10]: [c_current_cdemo_sk#2, cd_demo_sk#23, cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
(45) HashAggregate [codegen id : 9]
-Input [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
-Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
+Input [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
+Keys [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
Functions [1]: [partial_count(1)]
-Aggregate Attributes [1]: [count#32]
-Results [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33]
+Aggregate Attributes [1]: [count#33]
+Results [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#34]
(46) Exchange
-Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33]
-Arguments: hashpartitioning(cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, 5), true, [id=#34]
+Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#34]
+Arguments: hashpartitioning(cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, 5), ENSURE_REQUIREMENTS, [id=#35]
(47) HashAggregate [codegen id : 10]
-Input [9]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30, count#33]
-Keys [8]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cd_purchase_estimate#26, cd_credit_rating#27, cd_dep_count#28, cd_dep_employed_count#29, cd_dep_college_count#30]
+Input [9]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31, count#34]
+Keys [8]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cd_purchase_estimate#27, cd_credit_rating#28, cd_dep_count#29, cd_dep_employed_count#30, cd_dep_college_count#31]
Functions [1]: [count(1)]
-Aggregate Attributes [1]: [count(1)#35]
-Results [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, count(1)#35 AS cnt1#36, cd_purchase_estimate#26, count(1)#35 AS cnt2#37, cd_credit_rating#27, count(1)#35 AS cnt3#38, cd_dep_count#28, count(1)#35 AS cnt4#39, cd_dep_employed_count#29, count(1)#35 AS cnt5#40, cd_dep_college_count#30, count(1)#35 AS cnt6#41]
+Aggregate Attributes [1]: [count(1)#36]
+Results [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, count(1)#36 AS cnt1#37, cd_purchase_estimate#27, count(1)#36 AS cnt2#38, cd_credit_rating#28, count(1)#36 AS cnt3#39, cd_dep_count#29, count(1)#36 AS cnt4#40, cd_dep_employed_count#30, count(1)#36 AS cnt5#41, cd_dep_college_count#31, count(1)#36 AS cnt6#42]
(48) TakeOrderedAndProject
-Input [14]: [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#36, cd_purchase_estimate#26, cnt2#37, cd_credit_rating#27, cnt3#38, cd_dep_count#28, cnt4#39, cd_dep_employed_count#29, cnt5#40, cd_dep_college_count#30, cnt6#41]
-Arguments: 100, [cd_gender#23 ASC NULLS FIRST, cd_marital_status#24 ASC NULLS FIRST, cd_education_status#25 ASC NULLS FIRST, cd_purchase_estimate#26 ASC NULLS FIRST, cd_credit_rating#27 ASC NULLS FIRST, cd_dep_count#28 ASC NULLS FIRST, cd_dep_employed_count#29 ASC NULLS FIRST, cd_dep_college_count#30 ASC NULLS FIRST], [cd_gender#23, cd_marital_status#24, cd_education_status#25, cnt1#36, cd_purchase_estimate#26, cnt2#37, cd_credit_rating#27, cnt3#38, cd_dep_count#28, cnt4#39, cd_dep_emplo [...]
+Input [14]: [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#37, cd_purchase_estimate#27, cnt2#38, cd_credit_rating#28, cnt3#39, cd_dep_count#29, cnt4#40, cd_dep_employed_count#30, cnt5#41, cd_dep_college_count#31, cnt6#42]
+Arguments: 100, [cd_gender#24 ASC NULLS FIRST, cd_marital_status#25 ASC NULLS FIRST, cd_education_status#26 ASC NULLS FIRST, cd_purchase_estimate#27 ASC NULLS FIRST, cd_credit_rating#28 ASC NULLS FIRST, cd_dep_count#29 ASC NULLS FIRST, cd_dep_employed_count#30 ASC NULLS FIRST, cd_dep_college_count#31 ASC NULLS FIRST], [cd_gender#24, cd_marital_status#25, cd_education_status#26, cnt1#37, cd_purchase_estimate#27, cnt2#38, cd_credit_rating#28, cnt3#39, cd_dep_count#29, cnt4#40, cd_dep_emplo [...]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 4 Hosting Expression = ws_sold_date_sk#5 IN dynamicpruning#6
+ReusedExchange (49)
+
+
+(49) ReusedExchange [Reuses operator id: 11]
+Output [1]: [d_date_sk#7]
+
+Subquery:2 Hosting operator id = 14 Hosting Expression = cs_sold_date_sk#13 IN dynamicpruning#6
+
+Subquery:3 Hosting operator id = 23 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#6
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/simplified.txt
index af1d5a8..58eb3e3 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q10/simplified.txt
@@ -22,10 +22,12 @@ TakeOrderedAndProject [cd_gender,cd_marital_status,cd_education_status,cd_purcha
WholeStageCodegen (2)
Project [ws_bill_customer_sk]
BroadcastHashJoin [ws_sold_date_sk,d_date_sk]
- Filter [ws_sold_date_sk,ws_bill_customer_sk]
+ Filter [ws_bill_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.web_sales [ws_sold_date_sk,ws_bill_customer_sk]
+ Scan parquet default.web_sales [ws_bill_customer_sk,ws_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #3
InputAdapter
BroadcastExchange #3
WholeStageCodegen (1)
@@ -37,10 +39,11 @@ TakeOrderedAndProject [cd_gender,cd_marital_status,cd_education_status,cd_purcha
WholeStageCodegen (4)
Project [cs_ship_customer_sk]
BroadcastHashJoin [cs_sold_date_sk,d_date_sk]
- Filter [cs_sold_date_sk,cs_ship_customer_sk]
+ Filter [cs_ship_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.catalog_sales [cs_sold_date_sk,cs_ship_customer_sk]
+ Scan parquet default.catalog_sales [cs_ship_customer_sk,cs_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #3
InputAdapter
@@ -48,10 +51,11 @@ TakeOrderedAndProject [cd_gender,cd_marital_status,cd_education_status,cd_purcha
WholeStageCodegen (6)
Project [ss_customer_sk]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_customer_sk]
+ Filter [ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk]
+ Scan parquet default.store_sales [ss_customer_sk,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #3
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt
index 1288d9c..858cbaa 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/explain.txt
@@ -1,43 +1,49 @@
== Physical Plan ==
-TakeOrderedAndProject (39)
-+- * HashAggregate (38)
- +- Exchange (37)
- +- * HashAggregate (36)
- +- * Project (35)
- +- * BroadcastHashJoin Inner BuildRight (34)
- :- * Project (28)
- : +- * BroadcastHashJoin Inner BuildLeft (27)
- : :- BroadcastExchange (23)
- : : +- * Project (22)
- : : +- * BroadcastHashJoin Inner BuildRight (21)
- : : :- * Project (16)
- : : : +- * BroadcastHashJoin Inner BuildLeft (15)
- : : : :- BroadcastExchange (11)
- : : : : +- * Project (10)
- : : : : +- * BroadcastHashJoin Inner BuildLeft (9)
- : : : : :- BroadcastExchange (5)
- : : : : : +- * Project (4)
- : : : : : +- * Filter (3)
- : : : : : +- * ColumnarToRow (2)
- : : : : : +- Scan parquet default.date_dim (1)
- : : : : +- * Filter (8)
- : : : : +- * ColumnarToRow (7)
- : : : : +- Scan parquet default.store_sales (6)
- : : : +- * Filter (14)
- : : : +- * ColumnarToRow (13)
- : : : +- Scan parquet default.customer (12)
- : : +- BroadcastExchange (20)
- : : +- * Filter (19)
- : : +- * ColumnarToRow (18)
- : : +- Scan parquet default.store (17)
- : +- * Filter (26)
- : +- * ColumnarToRow (25)
- : +- Scan parquet default.customer_address (24)
- +- BroadcastExchange (33)
- +- * Project (32)
- +- * Filter (31)
- +- * ColumnarToRow (30)
- +- Scan parquet default.item (29)
+TakeOrderedAndProject (45)
++- * HashAggregate (44)
+ +- Exchange (43)
+ +- * HashAggregate (42)
+ +- * Project (41)
+ +- * BroadcastHashJoin Inner BuildRight (40)
+ :- * Project (34)
+ : +- * SortMergeJoin Inner (33)
+ : :- * Sort (27)
+ : : +- Exchange (26)
+ : : +- * Project (25)
+ : : +- * BroadcastHashJoin Inner BuildRight (24)
+ : : :- * Project (19)
+ : : : +- * SortMergeJoin Inner (18)
+ : : : :- * Sort (12)
+ : : : : +- Exchange (11)
+ : : : : +- * Project (10)
+ : : : : +- * BroadcastHashJoin Inner BuildLeft (9)
+ : : : : :- BroadcastExchange (5)
+ : : : : : +- * Project (4)
+ : : : : : +- * Filter (3)
+ : : : : : +- * ColumnarToRow (2)
+ : : : : : +- Scan parquet default.date_dim (1)
+ : : : : +- * Filter (8)
+ : : : : +- * ColumnarToRow (7)
+ : : : : +- Scan parquet default.store_sales (6)
+ : : : +- * Sort (17)
+ : : : +- Exchange (16)
+ : : : +- * Filter (15)
+ : : : +- * ColumnarToRow (14)
+ : : : +- Scan parquet default.customer (13)
+ : : +- BroadcastExchange (23)
+ : : +- * Filter (22)
+ : : +- * ColumnarToRow (21)
+ : : +- Scan parquet default.store (20)
+ : +- * Sort (32)
+ : +- Exchange (31)
+ : +- * Filter (30)
+ : +- * ColumnarToRow (29)
+ : +- Scan parquet default.customer_address (28)
+ +- BroadcastExchange (39)
+ +- * Project (38)
+ +- * Filter (37)
+ +- * ColumnarToRow (36)
+ +- Scan parquet default.item (35)
(1) Scan parquet default.date_dim
@@ -63,159 +69,194 @@ Input [1]: [d_date_sk#1]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4]
(6) Scan parquet default.store_sales
-Output [5]: [ss_sold_date_sk#5, ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9]
+Output [5]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451484), LessThanOrEqual(ss_sold_date_sk,2451513), IsNotNull(ss_item_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_customer_sk:int,ss_store_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#9), (ss_sold_date_sk#9 >= 2451484), (ss_sold_date_sk#9 <= 2451513), dynamicpruningexpression(ss_sold_date_sk#9 IN dynamicpruning#10)]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_customer_sk:int,ss_store_sk:int,ss_ext_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [5]: [ss_sold_date_sk#5, ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9]
+Input [5]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9]
(8) Filter
-Input [5]: [ss_sold_date_sk#5, ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9]
-Condition : (((((isnotnull(ss_sold_date_sk#5) AND (ss_sold_date_sk#5 >= 2451484)) AND (ss_sold_date_sk#5 <= 2451513)) AND isnotnull(ss_item_sk#6)) AND isnotnull(ss_customer_sk#7)) AND isnotnull(ss_store_sk#8))
+Input [5]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9]
+Condition : ((isnotnull(ss_item_sk#5) AND isnotnull(ss_customer_sk#6)) AND isnotnull(ss_store_sk#7))
(9) BroadcastHashJoin [codegen id : 2]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [ss_sold_date_sk#9]
Join condition: None
(10) Project [codegen id : 2]
-Output [4]: [ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9]
-Input [6]: [d_date_sk#1, ss_sold_date_sk#5, ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9]
+Output [4]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
+Input [6]: [d_date_sk#1, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, ss_sold_date_sk#9]
-(11) BroadcastExchange
-Input [4]: [ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#10]
+(11) Exchange
+Input [4]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
+Arguments: hashpartitioning(ss_customer_sk#6, 5), ENSURE_REQUIREMENTS, [id=#11]
-(12) Scan parquet default.customer
-Output [2]: [c_customer_sk#11, c_current_addr_sk#12]
+(12) Sort [codegen id : 3]
+Input [4]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
+Arguments: [ss_customer_sk#6 ASC NULLS FIRST], false, 0
+
+(13) Scan parquet default.customer
+Output [2]: [c_customer_sk#12, c_current_addr_sk#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_addr_sk:int>
-(13) ColumnarToRow
-Input [2]: [c_customer_sk#11, c_current_addr_sk#12]
+(14) ColumnarToRow [codegen id : 4]
+Input [2]: [c_customer_sk#12, c_current_addr_sk#13]
+
+(15) Filter [codegen id : 4]
+Input [2]: [c_customer_sk#12, c_current_addr_sk#13]
+Condition : (isnotnull(c_customer_sk#12) AND isnotnull(c_current_addr_sk#13))
+
+(16) Exchange
+Input [2]: [c_customer_sk#12, c_current_addr_sk#13]
+Arguments: hashpartitioning(c_customer_sk#12, 5), ENSURE_REQUIREMENTS, [id=#14]
-(14) Filter
-Input [2]: [c_customer_sk#11, c_current_addr_sk#12]
-Condition : (isnotnull(c_customer_sk#11) AND isnotnull(c_current_addr_sk#12))
+(17) Sort [codegen id : 5]
+Input [2]: [c_customer_sk#12, c_current_addr_sk#13]
+Arguments: [c_customer_sk#12 ASC NULLS FIRST], false, 0
-(15) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_customer_sk#7]
-Right keys [1]: [c_customer_sk#11]
+(18) SortMergeJoin [codegen id : 7]
+Left keys [1]: [ss_customer_sk#6]
+Right keys [1]: [c_customer_sk#12]
Join condition: None
-(16) Project [codegen id : 4]
-Output [4]: [ss_item_sk#6, ss_store_sk#8, ss_ext_sales_price#9, c_current_addr_sk#12]
-Input [6]: [ss_item_sk#6, ss_customer_sk#7, ss_store_sk#8, ss_ext_sales_price#9, c_customer_sk#11, c_current_addr_sk#12]
+(19) Project [codegen id : 7]
+Output [4]: [ss_item_sk#5, ss_store_sk#7, ss_ext_sales_price#8, c_current_addr_sk#13]
+Input [6]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, c_customer_sk#12, c_current_addr_sk#13]
-(17) Scan parquet default.store
-Output [2]: [s_store_sk#13, s_zip#14]
+(20) Scan parquet default.store
+Output [2]: [s_store_sk#15, s_zip#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_zip), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_zip:string>
-(18) ColumnarToRow [codegen id : 3]
-Input [2]: [s_store_sk#13, s_zip#14]
+(21) ColumnarToRow [codegen id : 6]
+Input [2]: [s_store_sk#15, s_zip#16]
-(19) Filter [codegen id : 3]
-Input [2]: [s_store_sk#13, s_zip#14]
-Condition : (isnotnull(s_zip#14) AND isnotnull(s_store_sk#13))
+(22) Filter [codegen id : 6]
+Input [2]: [s_store_sk#15, s_zip#16]
+Condition : (isnotnull(s_zip#16) AND isnotnull(s_store_sk#15))
-(20) BroadcastExchange
-Input [2]: [s_store_sk#13, s_zip#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15]
+(23) BroadcastExchange
+Input [2]: [s_store_sk#15, s_zip#16]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17]
-(21) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#8]
-Right keys [1]: [s_store_sk#13]
+(24) BroadcastHashJoin [codegen id : 7]
+Left keys [1]: [ss_store_sk#7]
+Right keys [1]: [s_store_sk#15]
Join condition: None
-(22) Project [codegen id : 4]
-Output [4]: [ss_item_sk#6, ss_ext_sales_price#9, c_current_addr_sk#12, s_zip#14]
-Input [6]: [ss_item_sk#6, ss_store_sk#8, ss_ext_sales_price#9, c_current_addr_sk#12, s_store_sk#13, s_zip#14]
+(25) Project [codegen id : 7]
+Output [4]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#16]
+Input [6]: [ss_item_sk#5, ss_store_sk#7, ss_ext_sales_price#8, c_current_addr_sk#13, s_store_sk#15, s_zip#16]
-(23) BroadcastExchange
-Input [4]: [ss_item_sk#6, ss_ext_sales_price#9, c_current_addr_sk#12, s_zip#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#16]
+(26) Exchange
+Input [4]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#16]
+Arguments: hashpartitioning(c_current_addr_sk#13, 5), ENSURE_REQUIREMENTS, [id=#18]
-(24) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#17, ca_zip#18]
+(27) Sort [codegen id : 8]
+Input [4]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#16]
+Arguments: [c_current_addr_sk#13 ASC NULLS FIRST], false, 0
+
+(28) Scan parquet default.customer_address
+Output [2]: [ca_address_sk#19, ca_zip#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_zip)]
ReadSchema: struct<ca_address_sk:int,ca_zip:string>
-(25) ColumnarToRow
-Input [2]: [ca_address_sk#17, ca_zip#18]
+(29) ColumnarToRow [codegen id : 9]
+Input [2]: [ca_address_sk#19, ca_zip#20]
+
+(30) Filter [codegen id : 9]
+Input [2]: [ca_address_sk#19, ca_zip#20]
+Condition : (isnotnull(ca_address_sk#19) AND isnotnull(ca_zip#20))
-(26) Filter
-Input [2]: [ca_address_sk#17, ca_zip#18]
-Condition : (isnotnull(ca_address_sk#17) AND isnotnull(ca_zip#18))
+(31) Exchange
+Input [2]: [ca_address_sk#19, ca_zip#20]
+Arguments: hashpartitioning(ca_address_sk#19, 5), ENSURE_REQUIREMENTS, [id=#21]
-(27) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [c_current_addr_sk#12]
-Right keys [1]: [ca_address_sk#17]
-Join condition: NOT (substr(ca_zip#18, 1, 5) = substr(s_zip#14, 1, 5))
+(32) Sort [codegen id : 10]
+Input [2]: [ca_address_sk#19, ca_zip#20]
+Arguments: [ca_address_sk#19 ASC NULLS FIRST], false, 0
-(28) Project [codegen id : 6]
-Output [2]: [ss_item_sk#6, ss_ext_sales_price#9]
-Input [6]: [ss_item_sk#6, ss_ext_sales_price#9, c_current_addr_sk#12, s_zip#14, ca_address_sk#17, ca_zip#18]
+(33) SortMergeJoin [codegen id : 12]
+Left keys [1]: [c_current_addr_sk#13]
+Right keys [1]: [ca_address_sk#19]
+Join condition: NOT (substr(ca_zip#20, 1, 5) = substr(s_zip#16, 1, 5))
-(29) Scan parquet default.item
-Output [6]: [i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23, i_manager_id#24]
+(34) Project [codegen id : 12]
+Output [2]: [ss_item_sk#5, ss_ext_sales_price#8]
+Input [6]: [ss_item_sk#5, ss_ext_sales_price#8, c_current_addr_sk#13, s_zip#16, ca_address_sk#19, ca_zip#20]
+
+(35) Scan parquet default.item
+Output [6]: [i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26, i_manager_id#27]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,7), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_brand:string,i_manufact_id:int,i_manufact:string,i_manager_id:int>
-(30) ColumnarToRow [codegen id : 5]
-Input [6]: [i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23, i_manager_id#24]
+(36) ColumnarToRow [codegen id : 11]
+Input [6]: [i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26, i_manager_id#27]
-(31) Filter [codegen id : 5]
-Input [6]: [i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23, i_manager_id#24]
-Condition : ((isnotnull(i_manager_id#24) AND (i_manager_id#24 = 7)) AND isnotnull(i_item_sk#19))
+(37) Filter [codegen id : 11]
+Input [6]: [i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26, i_manager_id#27]
+Condition : ((isnotnull(i_manager_id#27) AND (i_manager_id#27 = 7)) AND isnotnull(i_item_sk#22))
-(32) Project [codegen id : 5]
-Output [5]: [i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23]
-Input [6]: [i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23, i_manager_id#24]
+(38) Project [codegen id : 11]
+Output [5]: [i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26]
+Input [6]: [i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26, i_manager_id#27]
-(33) BroadcastExchange
-Input [5]: [i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#25]
+(39) BroadcastExchange
+Input [5]: [i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#28]
-(34) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_item_sk#6]
-Right keys [1]: [i_item_sk#19]
+(40) BroadcastHashJoin [codegen id : 12]
+Left keys [1]: [ss_item_sk#5]
+Right keys [1]: [i_item_sk#22]
Join condition: None
-(35) Project [codegen id : 6]
-Output [5]: [ss_ext_sales_price#9, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23]
-Input [7]: [ss_item_sk#6, ss_ext_sales_price#9, i_item_sk#19, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23]
-
-(36) HashAggregate [codegen id : 6]
-Input [5]: [ss_ext_sales_price#9, i_brand_id#20, i_brand#21, i_manufact_id#22, i_manufact#23]
-Keys [4]: [i_brand#21, i_brand_id#20, i_manufact_id#22, i_manufact#23]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#9))]
-Aggregate Attributes [1]: [sum#26]
-Results [5]: [i_brand#21, i_brand_id#20, i_manufact_id#22, i_manufact#23, sum#27]
-
-(37) Exchange
-Input [5]: [i_brand#21, i_brand_id#20, i_manufact_id#22, i_manufact#23, sum#27]
-Arguments: hashpartitioning(i_brand#21, i_brand_id#20, i_manufact_id#22, i_manufact#23, 5), ENSURE_REQUIREMENTS, [id=#28]
-
-(38) HashAggregate [codegen id : 7]
-Input [5]: [i_brand#21, i_brand_id#20, i_manufact_id#22, i_manufact#23, sum#27]
-Keys [4]: [i_brand#21, i_brand_id#20, i_manufact_id#22, i_manufact#23]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#9))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#9))#29]
-Results [5]: [i_brand_id#20 AS brand_id#30, i_brand#21 AS brand#31, i_manufact_id#22, i_manufact#23, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#9))#29,17,2) AS ext_price#32]
-
-(39) TakeOrderedAndProject
-Input [5]: [brand_id#30, brand#31, i_manufact_id#22, i_manufact#23, ext_price#32]
-Arguments: 100, [ext_price#32 DESC NULLS LAST, brand#31 ASC NULLS FIRST, brand_id#30 ASC NULLS FIRST, i_manufact_id#22 ASC NULLS FIRST, i_manufact#23 ASC NULLS FIRST], [brand_id#30, brand#31, i_manufact_id#22, i_manufact#23, ext_price#32]
+(41) Project [codegen id : 12]
+Output [5]: [ss_ext_sales_price#8, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26]
+Input [7]: [ss_item_sk#5, ss_ext_sales_price#8, i_item_sk#22, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26]
+
+(42) HashAggregate [codegen id : 12]
+Input [5]: [ss_ext_sales_price#8, i_brand_id#23, i_brand#24, i_manufact_id#25, i_manufact#26]
+Keys [4]: [i_brand#24, i_brand_id#23, i_manufact_id#25, i_manufact#26]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#8))]
+Aggregate Attributes [1]: [sum#29]
+Results [5]: [i_brand#24, i_brand_id#23, i_manufact_id#25, i_manufact#26, sum#30]
+
+(43) Exchange
+Input [5]: [i_brand#24, i_brand_id#23, i_manufact_id#25, i_manufact#26, sum#30]
+Arguments: hashpartitioning(i_brand#24, i_brand_id#23, i_manufact_id#25, i_manufact#26, 5), ENSURE_REQUIREMENTS, [id=#31]
+
+(44) HashAggregate [codegen id : 13]
+Input [5]: [i_brand#24, i_brand_id#23, i_manufact_id#25, i_manufact#26, sum#30]
+Keys [4]: [i_brand#24, i_brand_id#23, i_manufact_id#25, i_manufact#26]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#8))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#8))#32]
+Results [5]: [i_brand_id#23 AS brand_id#33, i_brand#24 AS brand#34, i_manufact_id#25, i_manufact#26, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#8))#32,17,2) AS ext_price#35]
+
+(45) TakeOrderedAndProject
+Input [5]: [brand_id#33, brand#34, i_manufact_id#25, i_manufact#26, ext_price#35]
+Arguments: 100, [ext_price#35 DESC NULLS LAST, brand#34 ASC NULLS FIRST, brand_id#33 ASC NULLS FIRST, i_manufact_id#25 ASC NULLS FIRST, i_manufact#26 ASC NULLS FIRST], [brand_id#33, brand#34, i_manufact_id#25, i_manufact#26, ext_price#35]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10
+ReusedExchange (46)
+
+
+(46) ReusedExchange [Reuses operator id: 5]
+Output [1]: [d_date_sk#1]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/simplified.txt
index 2343a13..36933c4 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19.sf100/simplified.txt
@@ -1,56 +1,76 @@
TakeOrderedAndProject [ext_price,brand,brand_id,i_manufact_id,i_manufact]
- WholeStageCodegen (7)
+ WholeStageCodegen (13)
HashAggregate [i_brand,i_brand_id,i_manufact_id,i_manufact,sum] [sum(UnscaledValue(ss_ext_sales_price)),brand_id,brand,ext_price,sum]
InputAdapter
Exchange [i_brand,i_brand_id,i_manufact_id,i_manufact] #1
- WholeStageCodegen (6)
+ WholeStageCodegen (12)
HashAggregate [i_brand,i_brand_id,i_manufact_id,i_manufact,ss_ext_sales_price] [sum,sum]
Project [ss_ext_sales_price,i_brand_id,i_brand,i_manufact_id,i_manufact]
BroadcastHashJoin [ss_item_sk,i_item_sk]
Project [ss_item_sk,ss_ext_sales_price]
- BroadcastHashJoin [c_current_addr_sk,ca_address_sk,ca_zip,s_zip]
+ SortMergeJoin [c_current_addr_sk,ca_address_sk,ca_zip,s_zip]
InputAdapter
- BroadcastExchange #2
- WholeStageCodegen (4)
- Project [ss_item_sk,ss_ext_sales_price,c_current_addr_sk,s_zip]
- BroadcastHashJoin [ss_store_sk,s_store_sk]
- Project [ss_item_sk,ss_store_sk,ss_ext_sales_price,c_current_addr_sk]
- BroadcastHashJoin [ss_customer_sk,c_customer_sk]
- InputAdapter
- BroadcastExchange #3
- WholeStageCodegen (2)
- Project [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ext_sales_price]
- BroadcastHashJoin [d_date_sk,ss_sold_date_sk]
- InputAdapter
- BroadcastExchange #4
- WholeStageCodegen (1)
- Project [d_date_sk]
- Filter [d_moy,d_year,d_date_sk]
- ColumnarToRow
+ WholeStageCodegen (8)
+ Sort [c_current_addr_sk]
+ InputAdapter
+ Exchange [c_current_addr_sk] #2
+ WholeStageCodegen (7)
+ Project [ss_item_sk,ss_ext_sales_price,c_current_addr_sk,s_zip]
+ BroadcastHashJoin [ss_store_sk,s_store_sk]
+ Project [ss_item_sk,ss_store_sk,ss_ext_sales_price,c_current_addr_sk]
+ SortMergeJoin [ss_customer_sk,c_customer_sk]
+ InputAdapter
+ WholeStageCodegen (3)
+ Sort [ss_customer_sk]
+ InputAdapter
+ Exchange [ss_customer_sk] #3
+ WholeStageCodegen (2)
+ Project [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ext_sales_price]
+ BroadcastHashJoin [d_date_sk,ss_sold_date_sk]
InputAdapter
- Scan parquet default.date_dim [d_date_sk,d_year,d_moy]
- Filter [ss_sold_date_sk,ss_item_sk,ss_customer_sk,ss_store_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_customer_sk,ss_store_sk,ss_ext_sales_price]
- Filter [c_customer_sk,c_current_addr_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.customer [c_customer_sk,c_current_addr_sk]
- InputAdapter
- BroadcastExchange #5
- WholeStageCodegen (3)
- Filter [s_zip,s_store_sk]
- ColumnarToRow
+ BroadcastExchange #4
+ WholeStageCodegen (1)
+ Project [d_date_sk]
+ Filter [d_moy,d_year,d_date_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.date_dim [d_date_sk,d_year,d_moy]
+ Filter [ss_item_sk,ss_customer_sk,ss_store_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ext_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #4
InputAdapter
- Scan parquet default.store [s_store_sk,s_zip]
- Filter [ca_address_sk,ca_zip]
- ColumnarToRow
- InputAdapter
- Scan parquet default.customer_address [ca_address_sk,ca_zip]
+ WholeStageCodegen (5)
+ Sort [c_customer_sk]
+ InputAdapter
+ Exchange [c_customer_sk] #5
+ WholeStageCodegen (4)
+ Filter [c_customer_sk,c_current_addr_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.customer [c_customer_sk,c_current_addr_sk]
+ InputAdapter
+ BroadcastExchange #6
+ WholeStageCodegen (6)
+ Filter [s_zip,s_store_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.store [s_store_sk,s_zip]
+ InputAdapter
+ WholeStageCodegen (10)
+ Sort [ca_address_sk]
+ InputAdapter
+ Exchange [ca_address_sk] #7
+ WholeStageCodegen (9)
+ Filter [ca_address_sk,ca_zip]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.customer_address [ca_address_sk,ca_zip]
InputAdapter
- BroadcastExchange #6
- WholeStageCodegen (5)
+ BroadcastExchange #8
+ WholeStageCodegen (11)
Project [i_item_sk,i_brand_id,i_brand,i_manufact_id,i_manufact]
Filter [i_manager_id,i_item_sk]
ColumnarToRow
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt
index 1e88930..e58fb8a 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/explain.txt
@@ -59,31 +59,32 @@ Output [1]: [d_date_sk#1]
Input [3]: [d_date_sk#1, d_year#2, d_moy#3]
(5) Scan parquet default.store_sales
-Output [5]: [ss_sold_date_sk#4, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
+Output [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451484), LessThanOrEqual(ss_sold_date_sk,2451513), IsNotNull(ss_item_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_customer_sk:int,ss_store_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451484), (ss_sold_date_sk#8 <= 2451513), dynamicpruningexpression(true)]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_customer_sk:int,ss_store_sk:int,ss_ext_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [5]: [ss_sold_date_sk#4, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
+Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8]
(7) Filter [codegen id : 1]
-Input [5]: [ss_sold_date_sk#4, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
-Condition : (((((isnotnull(ss_sold_date_sk#4) AND (ss_sold_date_sk#4 >= 2451484)) AND (ss_sold_date_sk#4 <= 2451513)) AND isnotnull(ss_item_sk#5)) AND isnotnull(ss_customer_sk#6)) AND isnotnull(ss_store_sk#7))
+Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_item_sk#4) AND isnotnull(ss_customer_sk#5)) AND isnotnull(ss_store_sk#6))
(8) BroadcastExchange
-Input [5]: [ss_sold_date_sk#4, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#9]
+Input [5]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8]
+Arguments: HashedRelationBroadcastMode(List(cast(input[4, int, true] as bigint)),false), [id=#9]
(9) BroadcastHashJoin [codegen id : 6]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [ss_sold_date_sk#8]
Join condition: None
(10) Project [codegen id : 6]
-Output [4]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
-Input [6]: [d_date_sk#1, ss_sold_date_sk#4, ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8]
+Output [4]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7]
+Input [6]: [d_date_sk#1, ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, ss_sold_date_sk#8]
(11) Scan parquet default.item
Output [6]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, i_manager_id#15]
@@ -108,13 +109,13 @@ Input [5]: [i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufac
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
(16) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_item_sk#5]
+Left keys [1]: [ss_item_sk#4]
Right keys [1]: [i_item_sk#10]
Join condition: None
(17) Project [codegen id : 6]
-Output [7]: [ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
-Input [9]: [ss_item_sk#5, ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
+Output [7]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
+Input [9]: [ss_item_sk#4, ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_item_sk#10, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
(18) Scan parquet default.customer
Output [2]: [c_customer_sk#17, c_current_addr_sk#18]
@@ -135,13 +136,13 @@ Input [2]: [c_customer_sk#17, c_current_addr_sk#18]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19]
(22) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_customer_sk#6]
+Left keys [1]: [ss_customer_sk#5]
Right keys [1]: [c_customer_sk#17]
Join condition: None
(23) Project [codegen id : 6]
-Output [7]: [ss_store_sk#7, ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18]
-Input [9]: [ss_customer_sk#6, ss_store_sk#7, ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_customer_sk#17, c_current_addr_sk#18]
+Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18]
+Input [9]: [ss_customer_sk#5, ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_customer_sk#17, c_current_addr_sk#18]
(24) Scan parquet default.customer_address
Output [2]: [ca_address_sk#20, ca_zip#21]
@@ -167,8 +168,8 @@ Right keys [1]: [ca_address_sk#20]
Join condition: None
(29) Project [codegen id : 6]
-Output [7]: [ss_store_sk#7, ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21]
-Input [9]: [ss_store_sk#7, ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18, ca_address_sk#20, ca_zip#21]
+Output [7]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21]
+Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, c_current_addr_sk#18, ca_address_sk#20, ca_zip#21]
(30) Scan parquet default.store
Output [2]: [s_store_sk#23, s_zip#24]
@@ -189,18 +190,18 @@ Input [2]: [s_store_sk#23, s_zip#24]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#25]
(34) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_store_sk#7]
+Left keys [1]: [ss_store_sk#6]
Right keys [1]: [s_store_sk#23]
Join condition: NOT (substr(ca_zip#21, 1, 5) = substr(s_zip#24, 1, 5))
(35) Project [codegen id : 6]
-Output [5]: [ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
-Input [9]: [ss_store_sk#7, ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21, s_store_sk#23, s_zip#24]
+Output [5]: [ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
+Input [9]: [ss_store_sk#6, ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14, ca_zip#21, s_store_sk#23, s_zip#24]
(36) HashAggregate [codegen id : 6]
-Input [5]: [ss_ext_sales_price#8, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
+Input [5]: [ss_ext_sales_price#7, i_brand_id#11, i_brand#12, i_manufact_id#13, i_manufact#14]
Keys [4]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#8))]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))]
Aggregate Attributes [1]: [sum#26]
Results [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27]
@@ -211,9 +212,9 @@ Arguments: hashpartitioning(i_brand#12, i_brand_id#11, i_manufact_id#13, i_manuf
(38) HashAggregate [codegen id : 7]
Input [5]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14, sum#27]
Keys [4]: [i_brand#12, i_brand_id#11, i_manufact_id#13, i_manufact#14]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#8))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#8))#29]
-Results [5]: [i_brand_id#11 AS brand_id#30, i_brand#12 AS brand#31, i_manufact_id#13, i_manufact#14, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#8))#29,17,2) AS ext_price#32]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#29]
+Results [5]: [i_brand_id#11 AS brand_id#30, i_brand#12 AS brand#31, i_manufact_id#13, i_manufact#14, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#29,17,2) AS ext_price#32]
(39) TakeOrderedAndProject
Input [5]: [brand_id#30, brand#31, i_manufact_id#13, i_manufact#14, ext_price#32]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/simplified.txt
index 1bbbf35..4e00ccb 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q19/simplified.txt
@@ -23,10 +23,10 @@ TakeOrderedAndProject [ext_price,brand,brand_id,i_manufact_id,i_manufact]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk,ss_customer_sk,ss_store_sk]
+ Filter [ss_item_sk,ss_customer_sk,ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_customer_sk,ss_store_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_customer_sk,ss_store_sk,ss_ext_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt
index 41581c8..50b2b7c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/explain.txt
@@ -79,350 +79,367 @@ TakeOrderedAndProject (77)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451545), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451545), (ss_sold_date_sk#8 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(2) ColumnarToRow [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451545)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_item_sk#2))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))
(4) Scan parquet default.date_dim
-Output [2]: [d_date_sk#9, d_year#10]
+Output [2]: [d_date_sk#10, d_year#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), GreaterThanOrEqual(d_date_sk,2451545), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>
(5) ColumnarToRow [codegen id : 1]
-Input [2]: [d_date_sk#9, d_year#10]
+Input [2]: [d_date_sk#10, d_year#11]
(6) Filter [codegen id : 1]
-Input [2]: [d_date_sk#9, d_year#10]
-Condition : ((((isnotnull(d_year#10) AND (d_year#10 = 2000)) AND (d_date_sk#9 >= 2451545)) AND (d_date_sk#9 <= 2451910)) AND isnotnull(d_date_sk#9))
+Input [2]: [d_date_sk#10, d_year#11]
+Condition : ((((isnotnull(d_year#11) AND (d_year#11 = 2000)) AND (d_date_sk#10 >= 2451545)) AND (d_date_sk#10 <= 2451910)) AND isnotnull(d_date_sk#10))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#9]
-Input [2]: [d_date_sk#9, d_year#10]
+Output [1]: [d_date_sk#10]
+Input [2]: [d_date_sk#10, d_year#11]
(8) BroadcastExchange
-Input [1]: [d_date_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11]
+Input [1]: [d_date_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(9) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(10) Project [codegen id : 5]
-Output [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#9]
+Output [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#10]
(11) Scan parquet default.customer_demographics
-Output [4]: [cd_demo_sk#12, cd_gender#13, cd_marital_status#14, cd_education_status#15]
+Output [4]: [cd_demo_sk#13, cd_gender#14, cd_marital_status#15, cd_education_status#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_gender), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), EqualTo(cd_gender,F), EqualTo(cd_marital_status,D), EqualTo(cd_education_status,Primary), IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string>
(12) ColumnarToRow [codegen id : 2]
-Input [4]: [cd_demo_sk#12, cd_gender#13, cd_marital_status#14, cd_education_status#15]
+Input [4]: [cd_demo_sk#13, cd_gender#14, cd_marital_status#15, cd_education_status#16]
(13) Filter [codegen id : 2]
-Input [4]: [cd_demo_sk#12, cd_gender#13, cd_marital_status#14, cd_education_status#15]
-Condition : ((((((isnotnull(cd_gender#13) AND isnotnull(cd_marital_status#14)) AND isnotnull(cd_education_status#15)) AND (cd_gender#13 = F)) AND (cd_marital_status#14 = D)) AND (cd_education_status#15 = Primary)) AND isnotnull(cd_demo_sk#12))
+Input [4]: [cd_demo_sk#13, cd_gender#14, cd_marital_status#15, cd_education_status#16]
+Condition : ((((((isnotnull(cd_gender#14) AND isnotnull(cd_marital_status#15)) AND isnotnull(cd_education_status#16)) AND (cd_gender#14 = F)) AND (cd_marital_status#15 = D)) AND (cd_education_status#16 = Primary)) AND isnotnull(cd_demo_sk#13))
(14) Project [codegen id : 2]
-Output [1]: [cd_demo_sk#12]
-Input [4]: [cd_demo_sk#12, cd_gender#13, cd_marital_status#14, cd_education_status#15]
+Output [1]: [cd_demo_sk#13]
+Input [4]: [cd_demo_sk#13, cd_gender#14, cd_marital_status#15, cd_education_status#16]
(15) BroadcastExchange
-Input [1]: [cd_demo_sk#12]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
+Input [1]: [cd_demo_sk#13]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
(16) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#12]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#13]
Join condition: None
(17) Project [codegen id : 5]
-Output [6]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#12]
+Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#13]
(18) Scan parquet default.store
-Output [2]: [s_store_sk#17, s_state#18]
+Output [2]: [s_store_sk#18, s_state#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_state, [TN,AL,SD]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_state:string>
(19) ColumnarToRow [codegen id : 3]
-Input [2]: [s_store_sk#17, s_state#18]
+Input [2]: [s_store_sk#18, s_state#19]
(20) Filter [codegen id : 3]
-Input [2]: [s_store_sk#17, s_state#18]
-Condition : (s_state#18 IN (TN,AL,SD) AND isnotnull(s_store_sk#17))
+Input [2]: [s_store_sk#18, s_state#19]
+Condition : (s_state#19 IN (TN,AL,SD) AND isnotnull(s_store_sk#18))
(21) BroadcastExchange
-Input [2]: [s_store_sk#17, s_state#18]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19]
+Input [2]: [s_store_sk#18, s_state#19]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20]
(22) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#17]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#18]
Join condition: None
(23) Project [codegen id : 5]
-Output [6]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_state#18]
-Input [8]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_store_sk#17, s_state#18]
+Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#19]
+Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#18, s_state#19]
(24) Scan parquet default.item
-Output [2]: [i_item_sk#20, i_item_id#21]
+Output [2]: [i_item_sk#21, i_item_id#22]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string>
(25) ColumnarToRow [codegen id : 4]
-Input [2]: [i_item_sk#20, i_item_id#21]
+Input [2]: [i_item_sk#21, i_item_id#22]
(26) Filter [codegen id : 4]
-Input [2]: [i_item_sk#20, i_item_id#21]
-Condition : isnotnull(i_item_sk#20)
+Input [2]: [i_item_sk#21, i_item_id#22]
+Condition : isnotnull(i_item_sk#21)
(27) BroadcastExchange
-Input [2]: [i_item_sk#20, i_item_id#21]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22]
+Input [2]: [i_item_sk#21, i_item_id#22]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23]
(28) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#20]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#21]
Join condition: None
(29) Project [codegen id : 5]
-Output [6]: [i_item_id#21, s_state#18, ss_quantity#5 AS agg1#23, ss_list_price#6 AS agg2#24, ss_coupon_amt#8 AS agg3#25, ss_sales_price#7 AS agg4#26]
-Input [8]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_state#18, i_item_sk#20, i_item_id#21]
+Output [6]: [i_item_id#22, s_state#19, ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]
+Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#19, i_item_sk#21, i_item_id#22]
(30) HashAggregate [codegen id : 5]
-Input [6]: [i_item_id#21, s_state#18, agg1#23, agg2#24, agg3#25, agg4#26]
-Keys [2]: [i_item_id#21, s_state#18]
-Functions [4]: [partial_avg(agg1#23), partial_avg(UnscaledValue(agg2#24)), partial_avg(UnscaledValue(agg3#25)), partial_avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [8]: [sum#27, count#28, sum#29, count#30, sum#31, count#32, sum#33, count#34]
-Results [10]: [i_item_id#21, s_state#18, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42]
+Input [6]: [i_item_id#22, s_state#19, agg1#24, agg2#25, agg3#26, agg4#27]
+Keys [2]: [i_item_id#22, s_state#19]
+Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [8]: [sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35]
+Results [10]: [i_item_id#22, s_state#19, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
(31) Exchange
-Input [10]: [i_item_id#21, s_state#18, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42]
-Arguments: hashpartitioning(i_item_id#21, s_state#18, 5), ENSURE_REQUIREMENTS, [id=#43]
+Input [10]: [i_item_id#22, s_state#19, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
+Arguments: hashpartitioning(i_item_id#22, s_state#19, 5), ENSURE_REQUIREMENTS, [id=#44]
(32) HashAggregate [codegen id : 6]
-Input [10]: [i_item_id#21, s_state#18, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42]
-Keys [2]: [i_item_id#21, s_state#18]
-Functions [4]: [avg(agg1#23), avg(UnscaledValue(agg2#24)), avg(UnscaledValue(agg3#25)), avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [4]: [avg(agg1#23)#44, avg(UnscaledValue(agg2#24))#45, avg(UnscaledValue(agg3#25))#46, avg(UnscaledValue(agg4#26))#47]
-Results [7]: [i_item_id#21, s_state#18, 0 AS g_state#48, avg(agg1#23)#44 AS agg1#49, cast((avg(UnscaledValue(agg2#24))#45 / 100.0) as decimal(11,6)) AS agg2#50, cast((avg(UnscaledValue(agg3#25))#46 / 100.0) as decimal(11,6)) AS agg3#51, cast((avg(UnscaledValue(agg4#26))#47 / 100.0) as decimal(11,6)) AS agg4#52]
+Input [10]: [i_item_id#22, s_state#19, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
+Keys [2]: [i_item_id#22, s_state#19]
+Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [4]: [avg(agg1#24)#45, avg(UnscaledValue(agg2#25))#46, avg(UnscaledValue(agg3#26))#47, avg(UnscaledValue(agg4#27))#48]
+Results [7]: [i_item_id#22, s_state#19, 0 AS g_state#49, avg(agg1#24)#45 AS agg1#50, cast((avg(UnscaledValue(agg2#25))#46 / 100.0) as decimal(11,6)) AS agg2#51, cast((avg(UnscaledValue(agg3#26))#47 / 100.0) as decimal(11,6)) AS agg3#52, cast((avg(UnscaledValue(agg4#27))#48 / 100.0) as decimal(11,6)) AS agg4#53]
(33) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451545), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451545), (ss_sold_date_sk#8 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(34) ColumnarToRow [codegen id : 11]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(35) Filter [codegen id : 11]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451545)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_item_sk#2))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))
(36) ReusedExchange [Reuses operator id: 8]
-Output [1]: [d_date_sk#9]
+Output [1]: [d_date_sk#10]
(37) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(38) Project [codegen id : 11]
-Output [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#9]
+Output [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#10]
(39) Scan parquet default.store
-Output [2]: [s_store_sk#17, s_state#18]
+Output [2]: [s_store_sk#18, s_state#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_state, [TN,AL,SD]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_state:string>
(40) ColumnarToRow [codegen id : 8]
-Input [2]: [s_store_sk#17, s_state#18]
+Input [2]: [s_store_sk#18, s_state#19]
(41) Filter [codegen id : 8]
-Input [2]: [s_store_sk#17, s_state#18]
-Condition : (s_state#18 IN (TN,AL,SD) AND isnotnull(s_store_sk#17))
+Input [2]: [s_store_sk#18, s_state#19]
+Condition : (s_state#19 IN (TN,AL,SD) AND isnotnull(s_store_sk#18))
(42) Project [codegen id : 8]
-Output [1]: [s_store_sk#17]
-Input [2]: [s_store_sk#17, s_state#18]
+Output [1]: [s_store_sk#18]
+Input [2]: [s_store_sk#18, s_state#19]
(43) BroadcastExchange
-Input [1]: [s_store_sk#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53]
+Input [1]: [s_store_sk#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#54]
(44) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#17]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#18]
Join condition: None
(45) Project [codegen id : 11]
-Output [6]: [ss_item_sk#2, ss_cdemo_sk#3, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_store_sk#17]
+Output [6]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#18]
(46) ReusedExchange [Reuses operator id: 15]
-Output [1]: [cd_demo_sk#12]
+Output [1]: [cd_demo_sk#13]
(47) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#12]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#13]
Join condition: None
(48) Project [codegen id : 11]
-Output [5]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#12]
+Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#13]
(49) ReusedExchange [Reuses operator id: 27]
-Output [2]: [i_item_sk#20, i_item_id#21]
+Output [2]: [i_item_sk#21, i_item_id#22]
(50) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#20]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#21]
Join condition: None
(51) Project [codegen id : 11]
-Output [5]: [i_item_id#21, ss_quantity#5 AS agg1#23, ss_list_price#6 AS agg2#24, ss_coupon_amt#8 AS agg3#25, ss_sales_price#7 AS agg4#26]
-Input [7]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_sk#20, i_item_id#21]
+Output [5]: [i_item_id#22, ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]
+Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#21, i_item_id#22]
(52) HashAggregate [codegen id : 11]
-Input [5]: [i_item_id#21, agg1#23, agg2#24, agg3#25, agg4#26]
-Keys [1]: [i_item_id#21]
-Functions [4]: [partial_avg(agg1#23), partial_avg(UnscaledValue(agg2#24)), partial_avg(UnscaledValue(agg3#25)), partial_avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [8]: [sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61]
-Results [9]: [i_item_id#21, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69]
+Input [5]: [i_item_id#22, agg1#24, agg2#25, agg3#26, agg4#27]
+Keys [1]: [i_item_id#22]
+Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [8]: [sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62]
+Results [9]: [i_item_id#22, sum#63, count#64, sum#65, count#66, sum#67, count#68, sum#69, count#70]
(53) Exchange
-Input [9]: [i_item_id#21, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69]
-Arguments: hashpartitioning(i_item_id#21, 5), ENSURE_REQUIREMENTS, [id=#70]
+Input [9]: [i_item_id#22, sum#63, count#64, sum#65, count#66, sum#67, count#68, sum#69, count#70]
+Arguments: hashpartitioning(i_item_id#22, 5), ENSURE_REQUIREMENTS, [id=#71]
(54) HashAggregate [codegen id : 12]
-Input [9]: [i_item_id#21, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69]
-Keys [1]: [i_item_id#21]
-Functions [4]: [avg(agg1#23), avg(UnscaledValue(agg2#24)), avg(UnscaledValue(agg3#25)), avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [4]: [avg(agg1#23)#71, avg(UnscaledValue(agg2#24))#72, avg(UnscaledValue(agg3#25))#73, avg(UnscaledValue(agg4#26))#74]
-Results [7]: [i_item_id#21, null AS s_state#75, 1 AS g_state#76, avg(agg1#23)#71 AS agg1#77, cast((avg(UnscaledValue(agg2#24))#72 / 100.0) as decimal(11,6)) AS agg2#78, cast((avg(UnscaledValue(agg3#25))#73 / 100.0) as decimal(11,6)) AS agg3#79, cast((avg(UnscaledValue(agg4#26))#74 / 100.0) as decimal(11,6)) AS agg4#80]
+Input [9]: [i_item_id#22, sum#63, count#64, sum#65, count#66, sum#67, count#68, sum#69, count#70]
+Keys [1]: [i_item_id#22]
+Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [4]: [avg(agg1#24)#72, avg(UnscaledValue(agg2#25))#73, avg(UnscaledValue(agg3#26))#74, avg(UnscaledValue(agg4#27))#75]
+Results [7]: [i_item_id#22, null AS s_state#76, 1 AS g_state#77, avg(agg1#24)#72 AS agg1#78, cast((avg(UnscaledValue(agg2#25))#73 / 100.0) as decimal(11,6)) AS agg2#79, cast((avg(UnscaledValue(agg3#26))#74 / 100.0) as decimal(11,6)) AS agg3#80, cast((avg(UnscaledValue(agg4#27))#75 / 100.0) as decimal(11,6)) AS agg4#81]
(55) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451545), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451545), (ss_sold_date_sk#8 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(56) ColumnarToRow [codegen id : 17]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(57) Filter [codegen id : 17]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451545)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_item_sk#2))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))
(58) ReusedExchange [Reuses operator id: 8]
-Output [1]: [d_date_sk#9]
+Output [1]: [d_date_sk#10]
(59) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(60) Project [codegen id : 17]
-Output [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#9]
+Output [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#10]
(61) ReusedExchange [Reuses operator id: 43]
-Output [1]: [s_store_sk#17]
+Output [1]: [s_store_sk#18]
(62) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#17]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#18]
Join condition: None
(63) Project [codegen id : 17]
-Output [6]: [ss_item_sk#2, ss_cdemo_sk#3, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_store_sk#17]
+Output [6]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#18]
(64) ReusedExchange [Reuses operator id: 15]
-Output [1]: [cd_demo_sk#12]
+Output [1]: [cd_demo_sk#13]
(65) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#12]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#13]
Join condition: None
(66) Project [codegen id : 17]
-Output [5]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#12]
+Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#13]
(67) Scan parquet default.item
-Output [1]: [i_item_sk#20]
+Output [1]: [i_item_sk#21]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int>
(68) ColumnarToRow [codegen id : 16]
-Input [1]: [i_item_sk#20]
+Input [1]: [i_item_sk#21]
(69) Filter [codegen id : 16]
-Input [1]: [i_item_sk#20]
-Condition : isnotnull(i_item_sk#20)
+Input [1]: [i_item_sk#21]
+Condition : isnotnull(i_item_sk#21)
(70) BroadcastExchange
-Input [1]: [i_item_sk#20]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#81]
+Input [1]: [i_item_sk#21]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#82]
(71) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#20]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#21]
Join condition: None
(72) Project [codegen id : 17]
-Output [4]: [ss_quantity#5 AS agg1#23, ss_list_price#6 AS agg2#24, ss_coupon_amt#8 AS agg3#25, ss_sales_price#7 AS agg4#26]
-Input [6]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_sk#20]
+Output [4]: [ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]
+Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#21]
(73) HashAggregate [codegen id : 17]
-Input [4]: [agg1#23, agg2#24, agg3#25, agg4#26]
+Input [4]: [agg1#24, agg2#25, agg3#26, agg4#27]
Keys: []
-Functions [4]: [partial_avg(agg1#23), partial_avg(UnscaledValue(agg2#24)), partial_avg(UnscaledValue(agg3#25)), partial_avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89]
-Results [8]: [sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97]
+Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [8]: [sum#83, count#84, sum#85, count#86, sum#87, count#88, sum#89, count#90]
+Results [8]: [sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98]
(74) Exchange
-Input [8]: [sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97]
-Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#98]
+Input [8]: [sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98]
+Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#99]
(75) HashAggregate [codegen id : 18]
-Input [8]: [sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97]
+Input [8]: [sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98]
Keys: []
-Functions [4]: [avg(agg1#23), avg(UnscaledValue(agg2#24)), avg(UnscaledValue(agg3#25)), avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [4]: [avg(agg1#23)#99, avg(UnscaledValue(agg2#24))#100, avg(UnscaledValue(agg3#25))#101, avg(UnscaledValue(agg4#26))#102]
-Results [7]: [null AS i_item_id#103, null AS s_state#104, 1 AS g_state#105, avg(agg1#23)#99 AS agg1#106, cast((avg(UnscaledValue(agg2#24))#100 / 100.0) as decimal(11,6)) AS agg2#107, cast((avg(UnscaledValue(agg3#25))#101 / 100.0) as decimal(11,6)) AS agg3#108, cast((avg(UnscaledValue(agg4#26))#102 / 100.0) as decimal(11,6)) AS agg4#109]
+Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [4]: [avg(agg1#24)#100, avg(UnscaledValue(agg2#25))#101, avg(UnscaledValue(agg3#26))#102, avg(UnscaledValue(agg4#27))#103]
+Results [7]: [null AS i_item_id#104, null AS s_state#105, 1 AS g_state#106, avg(agg1#24)#100 AS agg1#107, cast((avg(UnscaledValue(agg2#25))#101 / 100.0) as decimal(11,6)) AS agg2#108, cast((avg(UnscaledValue(agg3#26))#102 / 100.0) as decimal(11,6)) AS agg3#109, cast((avg(UnscaledValue(agg4#27))#103 / 100.0) as decimal(11,6)) AS agg4#110]
(76) Union
(77) TakeOrderedAndProject
-Input [7]: [i_item_id#21, s_state#18, g_state#48, agg1#49, agg2#50, agg3#51, agg4#52]
-Arguments: 100, [i_item_id#21 ASC NULLS FIRST, s_state#18 ASC NULLS FIRST], [i_item_id#21, s_state#18, g_state#48, agg1#49, agg2#50, agg3#51, agg4#52]
+Input [7]: [i_item_id#22, s_state#19, g_state#49, agg1#50, agg2#51, agg3#52, agg4#53]
+Arguments: 100, [i_item_id#22 ASC NULLS FIRST, s_state#19 ASC NULLS FIRST], [i_item_id#22, s_state#19, g_state#49, agg1#50, agg2#51, agg3#52, agg4#53]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+ReusedExchange (78)
+
+
+(78) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#10]
+
+Subquery:2 Hosting operator id = 33 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+
+Subquery:3 Hosting operator id = 55 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/simplified.txt
index e0d72ce..102307e 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27.sf100/simplified.txt
@@ -14,10 +14,12 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_cdemo_sk,cd_demo_sk]
Project [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_cdemo_sk,ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
@@ -62,10 +64,11 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_cdemo_sk,ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #2
InputAdapter
@@ -94,10 +97,11 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_cdemo_sk,ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #2
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt
index 466ea08..14c988d 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/explain.txt
@@ -79,350 +79,367 @@ TakeOrderedAndProject (77)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451545), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451545), (ss_sold_date_sk#8 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(2) ColumnarToRow [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451545)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_item_sk#2))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))
(4) Scan parquet default.customer_demographics
-Output [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
+Output [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_gender), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), EqualTo(cd_gender,F), EqualTo(cd_marital_status,D), EqualTo(cd_education_status,Primary), IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string>
(5) ColumnarToRow [codegen id : 1]
-Input [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
+Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
(6) Filter [codegen id : 1]
-Input [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
-Condition : ((((((isnotnull(cd_gender#10) AND isnotnull(cd_marital_status#11)) AND isnotnull(cd_education_status#12)) AND (cd_gender#10 = F)) AND (cd_marital_status#11 = D)) AND (cd_education_status#12 = Primary)) AND isnotnull(cd_demo_sk#9))
+Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
+Condition : ((((((isnotnull(cd_gender#11) AND isnotnull(cd_marital_status#12)) AND isnotnull(cd_education_status#13)) AND (cd_gender#11 = F)) AND (cd_marital_status#12 = D)) AND (cd_education_status#13 = Primary)) AND isnotnull(cd_demo_sk#10))
(7) Project [codegen id : 1]
-Output [1]: [cd_demo_sk#9]
-Input [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
+Output [1]: [cd_demo_sk#10]
+Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
(8) BroadcastExchange
-Input [1]: [cd_demo_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
+Input [1]: [cd_demo_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14]
(9) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#9]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#10]
Join condition: None
(10) Project [codegen id : 5]
-Output [7]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#9]
+Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10]
(11) Scan parquet default.date_dim
-Output [2]: [d_date_sk#14, d_year#15]
+Output [2]: [d_date_sk#15, d_year#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), GreaterThanOrEqual(d_date_sk,2451545), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [d_date_sk#14, d_year#15]
+Input [2]: [d_date_sk#15, d_year#16]
(13) Filter [codegen id : 2]
-Input [2]: [d_date_sk#14, d_year#15]
-Condition : ((((isnotnull(d_year#15) AND (d_year#15 = 2000)) AND (d_date_sk#14 >= 2451545)) AND (d_date_sk#14 <= 2451910)) AND isnotnull(d_date_sk#14))
+Input [2]: [d_date_sk#15, d_year#16]
+Condition : ((((isnotnull(d_year#16) AND (d_year#16 = 2000)) AND (d_date_sk#15 >= 2451545)) AND (d_date_sk#15 <= 2451910)) AND isnotnull(d_date_sk#15))
(14) Project [codegen id : 2]
-Output [1]: [d_date_sk#14]
-Input [2]: [d_date_sk#14, d_year#15]
+Output [1]: [d_date_sk#15]
+Input [2]: [d_date_sk#15, d_year#16]
(15) BroadcastExchange
-Input [1]: [d_date_sk#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
+Input [1]: [d_date_sk#15]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
(16) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#14]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#15]
Join condition: None
(17) Project [codegen id : 5]
-Output [6]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#14]
+Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15]
(18) Scan parquet default.store
-Output [2]: [s_store_sk#17, s_state#18]
+Output [2]: [s_store_sk#18, s_state#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_state, [TN,AL,SD]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_state:string>
(19) ColumnarToRow [codegen id : 3]
-Input [2]: [s_store_sk#17, s_state#18]
+Input [2]: [s_store_sk#18, s_state#19]
(20) Filter [codegen id : 3]
-Input [2]: [s_store_sk#17, s_state#18]
-Condition : (s_state#18 IN (TN,AL,SD) AND isnotnull(s_store_sk#17))
+Input [2]: [s_store_sk#18, s_state#19]
+Condition : (s_state#19 IN (TN,AL,SD) AND isnotnull(s_store_sk#18))
(21) BroadcastExchange
-Input [2]: [s_store_sk#17, s_state#18]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19]
+Input [2]: [s_store_sk#18, s_state#19]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20]
(22) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#17]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#18]
Join condition: None
(23) Project [codegen id : 5]
-Output [6]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_state#18]
-Input [8]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_store_sk#17, s_state#18]
+Output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#19]
+Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#18, s_state#19]
(24) Scan parquet default.item
-Output [2]: [i_item_sk#20, i_item_id#21]
+Output [2]: [i_item_sk#21, i_item_id#22]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string>
(25) ColumnarToRow [codegen id : 4]
-Input [2]: [i_item_sk#20, i_item_id#21]
+Input [2]: [i_item_sk#21, i_item_id#22]
(26) Filter [codegen id : 4]
-Input [2]: [i_item_sk#20, i_item_id#21]
-Condition : isnotnull(i_item_sk#20)
+Input [2]: [i_item_sk#21, i_item_id#22]
+Condition : isnotnull(i_item_sk#21)
(27) BroadcastExchange
-Input [2]: [i_item_sk#20, i_item_id#21]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22]
+Input [2]: [i_item_sk#21, i_item_id#22]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23]
(28) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#20]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#21]
Join condition: None
(29) Project [codegen id : 5]
-Output [6]: [i_item_id#21, s_state#18, ss_quantity#5 AS agg1#23, ss_list_price#6 AS agg2#24, ss_coupon_amt#8 AS agg3#25, ss_sales_price#7 AS agg4#26]
-Input [8]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_state#18, i_item_sk#20, i_item_id#21]
+Output [6]: [i_item_id#22, s_state#19, ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]
+Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#19, i_item_sk#21, i_item_id#22]
(30) HashAggregate [codegen id : 5]
-Input [6]: [i_item_id#21, s_state#18, agg1#23, agg2#24, agg3#25, agg4#26]
-Keys [2]: [i_item_id#21, s_state#18]
-Functions [4]: [partial_avg(agg1#23), partial_avg(UnscaledValue(agg2#24)), partial_avg(UnscaledValue(agg3#25)), partial_avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [8]: [sum#27, count#28, sum#29, count#30, sum#31, count#32, sum#33, count#34]
-Results [10]: [i_item_id#21, s_state#18, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42]
+Input [6]: [i_item_id#22, s_state#19, agg1#24, agg2#25, agg3#26, agg4#27]
+Keys [2]: [i_item_id#22, s_state#19]
+Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [8]: [sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35]
+Results [10]: [i_item_id#22, s_state#19, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
(31) Exchange
-Input [10]: [i_item_id#21, s_state#18, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42]
-Arguments: hashpartitioning(i_item_id#21, s_state#18, 5), ENSURE_REQUIREMENTS, [id=#43]
+Input [10]: [i_item_id#22, s_state#19, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
+Arguments: hashpartitioning(i_item_id#22, s_state#19, 5), ENSURE_REQUIREMENTS, [id=#44]
(32) HashAggregate [codegen id : 6]
-Input [10]: [i_item_id#21, s_state#18, sum#35, count#36, sum#37, count#38, sum#39, count#40, sum#41, count#42]
-Keys [2]: [i_item_id#21, s_state#18]
-Functions [4]: [avg(agg1#23), avg(UnscaledValue(agg2#24)), avg(UnscaledValue(agg3#25)), avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [4]: [avg(agg1#23)#44, avg(UnscaledValue(agg2#24))#45, avg(UnscaledValue(agg3#25))#46, avg(UnscaledValue(agg4#26))#47]
-Results [7]: [i_item_id#21, s_state#18, 0 AS g_state#48, avg(agg1#23)#44 AS agg1#49, cast((avg(UnscaledValue(agg2#24))#45 / 100.0) as decimal(11,6)) AS agg2#50, cast((avg(UnscaledValue(agg3#25))#46 / 100.0) as decimal(11,6)) AS agg3#51, cast((avg(UnscaledValue(agg4#26))#47 / 100.0) as decimal(11,6)) AS agg4#52]
+Input [10]: [i_item_id#22, s_state#19, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
+Keys [2]: [i_item_id#22, s_state#19]
+Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [4]: [avg(agg1#24)#45, avg(UnscaledValue(agg2#25))#46, avg(UnscaledValue(agg3#26))#47, avg(UnscaledValue(agg4#27))#48]
+Results [7]: [i_item_id#22, s_state#19, 0 AS g_state#49, avg(agg1#24)#45 AS agg1#50, cast((avg(UnscaledValue(agg2#25))#46 / 100.0) as decimal(11,6)) AS agg2#51, cast((avg(UnscaledValue(agg3#26))#47 / 100.0) as decimal(11,6)) AS agg3#52, cast((avg(UnscaledValue(agg4#27))#48 / 100.0) as decimal(11,6)) AS agg4#53]
(33) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451545), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451545), (ss_sold_date_sk#8 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(34) ColumnarToRow [codegen id : 11]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(35) Filter [codegen id : 11]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451545)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_item_sk#2))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))
(36) ReusedExchange [Reuses operator id: 8]
-Output [1]: [cd_demo_sk#9]
+Output [1]: [cd_demo_sk#10]
(37) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#9]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#10]
Join condition: None
(38) Project [codegen id : 11]
-Output [7]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#9]
+Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10]
(39) ReusedExchange [Reuses operator id: 15]
-Output [1]: [d_date_sk#14]
+Output [1]: [d_date_sk#15]
(40) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#14]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#15]
Join condition: None
(41) Project [codegen id : 11]
-Output [6]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#14]
+Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15]
(42) Scan parquet default.store
-Output [2]: [s_store_sk#17, s_state#18]
+Output [2]: [s_store_sk#18, s_state#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_state, [TN,AL,SD]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_state:string>
(43) ColumnarToRow [codegen id : 9]
-Input [2]: [s_store_sk#17, s_state#18]
+Input [2]: [s_store_sk#18, s_state#19]
(44) Filter [codegen id : 9]
-Input [2]: [s_store_sk#17, s_state#18]
-Condition : (s_state#18 IN (TN,AL,SD) AND isnotnull(s_store_sk#17))
+Input [2]: [s_store_sk#18, s_state#19]
+Condition : (s_state#19 IN (TN,AL,SD) AND isnotnull(s_store_sk#18))
(45) Project [codegen id : 9]
-Output [1]: [s_store_sk#17]
-Input [2]: [s_store_sk#17, s_state#18]
+Output [1]: [s_store_sk#18]
+Input [2]: [s_store_sk#18, s_state#19]
(46) BroadcastExchange
-Input [1]: [s_store_sk#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#53]
+Input [1]: [s_store_sk#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#54]
(47) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#17]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#18]
Join condition: None
(48) Project [codegen id : 11]
-Output [5]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [7]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_store_sk#17]
+Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#18]
(49) ReusedExchange [Reuses operator id: 27]
-Output [2]: [i_item_sk#20, i_item_id#21]
+Output [2]: [i_item_sk#21, i_item_id#22]
(50) BroadcastHashJoin [codegen id : 11]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#20]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#21]
Join condition: None
(51) Project [codegen id : 11]
-Output [5]: [i_item_id#21, ss_quantity#5 AS agg1#23, ss_list_price#6 AS agg2#24, ss_coupon_amt#8 AS agg3#25, ss_sales_price#7 AS agg4#26]
-Input [7]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_sk#20, i_item_id#21]
+Output [5]: [i_item_id#22, ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]
+Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#21, i_item_id#22]
(52) HashAggregate [codegen id : 11]
-Input [5]: [i_item_id#21, agg1#23, agg2#24, agg3#25, agg4#26]
-Keys [1]: [i_item_id#21]
-Functions [4]: [partial_avg(agg1#23), partial_avg(UnscaledValue(agg2#24)), partial_avg(UnscaledValue(agg3#25)), partial_avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [8]: [sum#54, count#55, sum#56, count#57, sum#58, count#59, sum#60, count#61]
-Results [9]: [i_item_id#21, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69]
+Input [5]: [i_item_id#22, agg1#24, agg2#25, agg3#26, agg4#27]
+Keys [1]: [i_item_id#22]
+Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [8]: [sum#55, count#56, sum#57, count#58, sum#59, count#60, sum#61, count#62]
+Results [9]: [i_item_id#22, sum#63, count#64, sum#65, count#66, sum#67, count#68, sum#69, count#70]
(53) Exchange
-Input [9]: [i_item_id#21, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69]
-Arguments: hashpartitioning(i_item_id#21, 5), ENSURE_REQUIREMENTS, [id=#70]
+Input [9]: [i_item_id#22, sum#63, count#64, sum#65, count#66, sum#67, count#68, sum#69, count#70]
+Arguments: hashpartitioning(i_item_id#22, 5), ENSURE_REQUIREMENTS, [id=#71]
(54) HashAggregate [codegen id : 12]
-Input [9]: [i_item_id#21, sum#62, count#63, sum#64, count#65, sum#66, count#67, sum#68, count#69]
-Keys [1]: [i_item_id#21]
-Functions [4]: [avg(agg1#23), avg(UnscaledValue(agg2#24)), avg(UnscaledValue(agg3#25)), avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [4]: [avg(agg1#23)#71, avg(UnscaledValue(agg2#24))#72, avg(UnscaledValue(agg3#25))#73, avg(UnscaledValue(agg4#26))#74]
-Results [7]: [i_item_id#21, null AS s_state#75, 1 AS g_state#76, avg(agg1#23)#71 AS agg1#77, cast((avg(UnscaledValue(agg2#24))#72 / 100.0) as decimal(11,6)) AS agg2#78, cast((avg(UnscaledValue(agg3#25))#73 / 100.0) as decimal(11,6)) AS agg3#79, cast((avg(UnscaledValue(agg4#26))#74 / 100.0) as decimal(11,6)) AS agg4#80]
+Input [9]: [i_item_id#22, sum#63, count#64, sum#65, count#66, sum#67, count#68, sum#69, count#70]
+Keys [1]: [i_item_id#22]
+Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [4]: [avg(agg1#24)#72, avg(UnscaledValue(agg2#25))#73, avg(UnscaledValue(agg3#26))#74, avg(UnscaledValue(agg4#27))#75]
+Results [7]: [i_item_id#22, null AS s_state#76, 1 AS g_state#77, avg(agg1#24)#72 AS agg1#78, cast((avg(UnscaledValue(agg2#25))#73 / 100.0) as decimal(11,6)) AS agg2#79, cast((avg(UnscaledValue(agg3#26))#74 / 100.0) as decimal(11,6)) AS agg3#80, cast((avg(UnscaledValue(agg4#27))#75 / 100.0) as decimal(11,6)) AS agg4#81]
(55) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451545), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2451545), (ss_sold_date_sk#8 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(56) ColumnarToRow [codegen id : 17]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(57) Filter [codegen id : 17]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451545)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_item_sk#2))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))
(58) ReusedExchange [Reuses operator id: 8]
-Output [1]: [cd_demo_sk#9]
+Output [1]: [cd_demo_sk#10]
(59) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#9]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#10]
Join condition: None
(60) Project [codegen id : 17]
-Output [7]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#9]
+Output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10]
(61) ReusedExchange [Reuses operator id: 15]
-Output [1]: [d_date_sk#14]
+Output [1]: [d_date_sk#15]
(62) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#14]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#15]
Join condition: None
(63) Project [codegen id : 17]
-Output [6]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#14]
+Output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15]
(64) ReusedExchange [Reuses operator id: 46]
-Output [1]: [s_store_sk#17]
+Output [1]: [s_store_sk#18]
(65) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#17]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#18]
Join condition: None
(66) Project [codegen id : 17]
-Output [5]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [7]: [ss_item_sk#2, ss_store_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, s_store_sk#17]
+Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#18]
(67) Scan parquet default.item
-Output [1]: [i_item_sk#20]
+Output [1]: [i_item_sk#21]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int>
(68) ColumnarToRow [codegen id : 16]
-Input [1]: [i_item_sk#20]
+Input [1]: [i_item_sk#21]
(69) Filter [codegen id : 16]
-Input [1]: [i_item_sk#20]
-Condition : isnotnull(i_item_sk#20)
+Input [1]: [i_item_sk#21]
+Condition : isnotnull(i_item_sk#21)
(70) BroadcastExchange
-Input [1]: [i_item_sk#20]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#81]
+Input [1]: [i_item_sk#21]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#82]
(71) BroadcastHashJoin [codegen id : 17]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#20]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#21]
Join condition: None
(72) Project [codegen id : 17]
-Output [4]: [ss_quantity#5 AS agg1#23, ss_list_price#6 AS agg2#24, ss_coupon_amt#8 AS agg3#25, ss_sales_price#7 AS agg4#26]
-Input [6]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_sk#20]
+Output [4]: [ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]
+Input [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#21]
(73) HashAggregate [codegen id : 17]
-Input [4]: [agg1#23, agg2#24, agg3#25, agg4#26]
+Input [4]: [agg1#24, agg2#25, agg3#26, agg4#27]
Keys: []
-Functions [4]: [partial_avg(agg1#23), partial_avg(UnscaledValue(agg2#24)), partial_avg(UnscaledValue(agg3#25)), partial_avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [8]: [sum#82, count#83, sum#84, count#85, sum#86, count#87, sum#88, count#89]
-Results [8]: [sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97]
+Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [8]: [sum#83, count#84, sum#85, count#86, sum#87, count#88, sum#89, count#90]
+Results [8]: [sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98]
(74) Exchange
-Input [8]: [sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97]
-Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#98]
+Input [8]: [sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98]
+Arguments: SinglePartition, ENSURE_REQUIREMENTS, [id=#99]
(75) HashAggregate [codegen id : 18]
-Input [8]: [sum#90, count#91, sum#92, count#93, sum#94, count#95, sum#96, count#97]
+Input [8]: [sum#91, count#92, sum#93, count#94, sum#95, count#96, sum#97, count#98]
Keys: []
-Functions [4]: [avg(agg1#23), avg(UnscaledValue(agg2#24)), avg(UnscaledValue(agg3#25)), avg(UnscaledValue(agg4#26))]
-Aggregate Attributes [4]: [avg(agg1#23)#99, avg(UnscaledValue(agg2#24))#100, avg(UnscaledValue(agg3#25))#101, avg(UnscaledValue(agg4#26))#102]
-Results [7]: [null AS i_item_id#103, null AS s_state#104, 1 AS g_state#105, avg(agg1#23)#99 AS agg1#106, cast((avg(UnscaledValue(agg2#24))#100 / 100.0) as decimal(11,6)) AS agg2#107, cast((avg(UnscaledValue(agg3#25))#101 / 100.0) as decimal(11,6)) AS agg3#108, cast((avg(UnscaledValue(agg4#26))#102 / 100.0) as decimal(11,6)) AS agg4#109]
+Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
+Aggregate Attributes [4]: [avg(agg1#24)#100, avg(UnscaledValue(agg2#25))#101, avg(UnscaledValue(agg3#26))#102, avg(UnscaledValue(agg4#27))#103]
+Results [7]: [null AS i_item_id#104, null AS s_state#105, 1 AS g_state#106, avg(agg1#24)#100 AS agg1#107, cast((avg(UnscaledValue(agg2#25))#101 / 100.0) as decimal(11,6)) AS agg2#108, cast((avg(UnscaledValue(agg3#26))#102 / 100.0) as decimal(11,6)) AS agg3#109, cast((avg(UnscaledValue(agg4#27))#103 / 100.0) as decimal(11,6)) AS agg4#110]
(76) Union
(77) TakeOrderedAndProject
-Input [7]: [i_item_id#21, s_state#18, g_state#48, agg1#49, agg2#50, agg3#51, agg4#52]
-Arguments: 100, [i_item_id#21 ASC NULLS FIRST, s_state#18 ASC NULLS FIRST], [i_item_id#21, s_state#18, g_state#48, agg1#49, agg2#50, agg3#51, agg4#52]
+Input [7]: [i_item_id#22, s_state#19, g_state#49, agg1#50, agg2#51, agg3#52, agg4#53]
+Arguments: 100, [i_item_id#22 ASC NULLS FIRST, s_state#19 ASC NULLS FIRST], [i_item_id#22, s_state#19, g_state#49, agg1#50, agg2#51, agg3#52, agg4#53]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+ReusedExchange (78)
+
+
+(78) ReusedExchange [Reuses operator id: 15]
+Output [1]: [d_date_sk#15]
+
+Subquery:2 Hosting operator id = 33 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+
+Subquery:3 Hosting operator id = 55 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/simplified.txt
index 85f15a0..ac6635c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q27/simplified.txt
@@ -12,14 +12,16 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Project [ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
BroadcastHashJoin [ss_cdemo_sk,cd_demo_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_cdemo_sk,ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
- BroadcastExchange #2
+ BroadcastExchange #3
WholeStageCodegen (1)
Project [cd_demo_sk]
Filter [cd_gender,cd_marital_status,cd_education_status,cd_demo_sk]
@@ -27,7 +29,7 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
InputAdapter
Scan parquet default.customer_demographics [cd_demo_sk,cd_gender,cd_marital_status,cd_education_status]
InputAdapter
- BroadcastExchange #3
+ BroadcastExchange #2
WholeStageCodegen (2)
Project [d_date_sk]
Filter [d_year,d_date_sk]
@@ -60,16 +62,17 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Project [ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
BroadcastHashJoin [ss_cdemo_sk,cd_demo_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_cdemo_sk,ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
- ReusedExchange [cd_demo_sk] #2
+ ReusedExchange [cd_demo_sk] #3
InputAdapter
- ReusedExchange [d_date_sk] #3
+ ReusedExchange [d_date_sk] #2
InputAdapter
BroadcastExchange #7
WholeStageCodegen (9)
@@ -92,16 +95,17 @@ TakeOrderedAndProject [i_item_id,s_state,g_state,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Project [ss_item_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
BroadcastHashJoin [ss_cdemo_sk,cd_demo_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_cdemo_sk,ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_store_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
- ReusedExchange [cd_demo_sk] #2
+ ReusedExchange [cd_demo_sk] #3
InputAdapter
- ReusedExchange [d_date_sk] #3
+ ReusedExchange [d_date_sk] #2
InputAdapter
ReusedExchange [s_store_sk] #7
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt
index 17188a0..ae3e543 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/explain.txt
@@ -23,100 +23,111 @@ TakeOrderedAndProject (21)
(1) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#1, ss_item_sk#2, ss_net_profit#3]
+Output [3]: [ss_item_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [Or(Or(Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(ss_sold_date_sk,2415355),LessThanOrEqual(ss_sold_date_sk,2415385)),And(GreaterThanOrEqual(ss_sold_date_sk,2415720),LessThanOrEqual(ss_sold_date_sk,2415750))),Or(And(GreaterThanOrEqual(ss_sold_date_sk,2416085),LessThanOrEqual(ss_sold_date_sk,2416115)),And(GreaterThanOrEqual(ss_sold_date_sk,2416450),LessThanOrEqual(ss_sold_date_sk,2416480)))),Or(Or(And(GreaterThanOrEqual(ss_sold_date_sk,2416816),LessThanOrEqual(ss_sold_date_sk, [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_net_profit:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [((((((((((ss_sold_date_sk#3 >= 2415355) AND (ss_sold_date_sk#3 <= 2415385)) OR ((ss_sold_date_sk#3 >= 2415720) AND (ss_sold_date_sk#3 <= 2415750))) OR (((ss_sold_date_sk#3 >= 2416085) AND (ss_sold_date_sk#3 <= 2416115)) OR ((ss_sold_date_sk#3 >= 2416450) AND (ss_sold_date_sk#3 <= 2416480)))) OR ((((ss_sold_date_sk#3 >= 2416816) AND (ss_sold_date_sk#3 <= 2416846)) OR ((ss_sold_date_sk#3 >= 2417181) AND (ss_sold_date_sk#3 <= 2417211))) OR ((ss_sold_date_sk#3 >= 2417546) [...]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_net_profit:decimal(7,2)>
(2) ColumnarToRow [codegen id : 3]
-Input [3]: [ss_sold_date_sk#1, ss_item_sk#2, ss_net_profit#3]
+Input [3]: [ss_item_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
(3) Filter [codegen id : 3]
-Input [3]: [ss_sold_date_sk#1, ss_item_sk#2, ss_net_profit#3]
-Condition : ((((((((((((ss_sold_date_sk#1 >= 2415355) AND (ss_sold_date_sk#1 <= 2415385)) OR ((ss_sold_date_sk#1 >= 2415720) AND (ss_sold_date_sk#1 <= 2415750))) OR (((ss_sold_date_sk#1 >= 2416085) AND (ss_sold_date_sk#1 <= 2416115)) OR ((ss_sold_date_sk#1 >= 2416450) AND (ss_sold_date_sk#1 <= 2416480)))) OR ((((ss_sold_date_sk#1 >= 2416816) AND (ss_sold_date_sk#1 <= 2416846)) OR ((ss_sold_date_sk#1 >= 2417181) AND (ss_sold_date_sk#1 <= 2417211))) OR ((ss_sold_date_sk#1 >= 2417546) AND ( [...]
+Input [3]: [ss_item_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
+Condition : isnotnull(ss_item_sk#1)
(4) Scan parquet default.item
-Output [4]: [i_item_sk#4, i_brand_id#5, i_brand#6, i_manufact_id#7]
+Output [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manufact_id#8]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,436), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_brand:string,i_manufact_id:int>
(5) ColumnarToRow [codegen id : 1]
-Input [4]: [i_item_sk#4, i_brand_id#5, i_brand#6, i_manufact_id#7]
+Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manufact_id#8]
(6) Filter [codegen id : 1]
-Input [4]: [i_item_sk#4, i_brand_id#5, i_brand#6, i_manufact_id#7]
-Condition : ((isnotnull(i_manufact_id#7) AND (i_manufact_id#7 = 436)) AND isnotnull(i_item_sk#4))
+Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manufact_id#8]
+Condition : ((isnotnull(i_manufact_id#8) AND (i_manufact_id#8 = 436)) AND isnotnull(i_item_sk#5))
(7) Project [codegen id : 1]
-Output [3]: [i_item_sk#4, i_brand_id#5, i_brand#6]
-Input [4]: [i_item_sk#4, i_brand_id#5, i_brand#6, i_manufact_id#7]
+Output [3]: [i_item_sk#5, i_brand_id#6, i_brand#7]
+Input [4]: [i_item_sk#5, i_brand_id#6, i_brand#7, i_manufact_id#8]
(8) BroadcastExchange
-Input [3]: [i_item_sk#4, i_brand_id#5, i_brand#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8]
+Input [3]: [i_item_sk#5, i_brand_id#6, i_brand#7]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
(9) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#4]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#5]
Join condition: None
(10) Project [codegen id : 3]
-Output [4]: [ss_sold_date_sk#1, ss_net_profit#3, i_brand_id#5, i_brand#6]
-Input [6]: [ss_sold_date_sk#1, ss_item_sk#2, ss_net_profit#3, i_item_sk#4, i_brand_id#5, i_brand#6]
+Output [4]: [ss_net_profit#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7]
+Input [6]: [ss_item_sk#1, ss_net_profit#2, ss_sold_date_sk#3, i_item_sk#5, i_brand_id#6, i_brand#7]
(11) Scan parquet default.date_dim
-Output [3]: [d_date_sk#9, d_year#10, d_moy#11]
+Output [3]: [d_date_sk#10, d_year#11, d_moy#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_moy), EqualTo(d_moy,12), Or(Or(Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(d_date_sk,2415355),LessThanOrEqual(d_date_sk,2415385)),And(GreaterThanOrEqual(d_date_sk,2415720),LessThanOrEqual(d_date_sk,2415750))),Or(And(GreaterThanOrEqual(d_date_sk,2416085),LessThanOrEqual(d_date_sk,2416115)),And(GreaterThanOrEqual(d_date_sk,2416450),LessThanOrEqual(d_date_sk,2416480)))),Or(Or(And(GreaterThanOrEqual(d_date_sk,2416816),LessThanOrEqual(d_date_sk,2416846)),And(GreaterTh [...]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>
(12) ColumnarToRow [codegen id : 2]
-Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
+Input [3]: [d_date_sk#10, d_year#11, d_moy#12]
(13) Filter [codegen id : 2]
-Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
-Condition : (((isnotnull(d_moy#11) AND (d_moy#11 = 12)) AND ((((((((((d_date_sk#9 >= 2415355) AND (d_date_sk#9 <= 2415385)) OR ((d_date_sk#9 >= 2415720) AND (d_date_sk#9 <= 2415750))) OR (((d_date_sk#9 >= 2416085) AND (d_date_sk#9 <= 2416115)) OR ((d_date_sk#9 >= 2416450) AND (d_date_sk#9 <= 2416480)))) OR ((((d_date_sk#9 >= 2416816) AND (d_date_sk#9 <= 2416846)) OR ((d_date_sk#9 >= 2417181) AND (d_date_sk#9 <= 2417211))) OR ((d_date_sk#9 >= 2417546) AND (d_date_sk#9 <= 2417576)))) OR (( [...]
+Input [3]: [d_date_sk#10, d_year#11, d_moy#12]
+Condition : (((isnotnull(d_moy#12) AND (d_moy#12 = 12)) AND ((((((((((d_date_sk#10 >= 2415355) AND (d_date_sk#10 <= 2415385)) OR ((d_date_sk#10 >= 2415720) AND (d_date_sk#10 <= 2415750))) OR (((d_date_sk#10 >= 2416085) AND (d_date_sk#10 <= 2416115)) OR ((d_date_sk#10 >= 2416450) AND (d_date_sk#10 <= 2416480)))) OR ((((d_date_sk#10 >= 2416816) AND (d_date_sk#10 <= 2416846)) OR ((d_date_sk#10 >= 2417181) AND (d_date_sk#10 <= 2417211))) OR ((d_date_sk#10 >= 2417546) AND (d_date_sk#10 <= 241 [...]
(14) Project [codegen id : 2]
-Output [2]: [d_date_sk#9, d_year#10]
-Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
+Output [2]: [d_date_sk#10, d_year#11]
+Input [3]: [d_date_sk#10, d_year#11, d_moy#12]
(15) BroadcastExchange
-Input [2]: [d_date_sk#9, d_year#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [2]: [d_date_sk#10, d_year#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#3]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_year#10, ss_net_profit#3, i_brand_id#5, i_brand#6]
-Input [6]: [ss_sold_date_sk#1, ss_net_profit#3, i_brand_id#5, i_brand#6, d_date_sk#9, d_year#10]
+Output [4]: [d_year#11, ss_net_profit#2, i_brand_id#6, i_brand#7]
+Input [6]: [ss_net_profit#2, ss_sold_date_sk#3, i_brand_id#6, i_brand#7, d_date_sk#10, d_year#11]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_year#10, ss_net_profit#3, i_brand_id#5, i_brand#6]
-Keys [3]: [d_year#10, i_brand#6, i_brand_id#5]
-Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#3))]
-Aggregate Attributes [1]: [sum#13]
-Results [4]: [d_year#10, i_brand#6, i_brand_id#5, sum#14]
+Input [4]: [d_year#11, ss_net_profit#2, i_brand_id#6, i_brand#7]
+Keys [3]: [d_year#11, i_brand#7, i_brand_id#6]
+Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))]
+Aggregate Attributes [1]: [sum#14]
+Results [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#15]
(19) Exchange
-Input [4]: [d_year#10, i_brand#6, i_brand_id#5, sum#14]
-Arguments: hashpartitioning(d_year#10, i_brand#6, i_brand_id#5, 5), ENSURE_REQUIREMENTS, [id=#15]
+Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#15]
+Arguments: hashpartitioning(d_year#11, i_brand#7, i_brand_id#6, 5), ENSURE_REQUIREMENTS, [id=#16]
(20) HashAggregate [codegen id : 4]
-Input [4]: [d_year#10, i_brand#6, i_brand_id#5, sum#14]
-Keys [3]: [d_year#10, i_brand#6, i_brand_id#5]
-Functions [1]: [sum(UnscaledValue(ss_net_profit#3))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#3))#16]
-Results [4]: [d_year#10, i_brand_id#5 AS brand_id#17, i_brand#6 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_net_profit#3))#16,17,2) AS sum_agg#19]
+Input [4]: [d_year#11, i_brand#7, i_brand_id#6, sum#15]
+Keys [3]: [d_year#11, i_brand#7, i_brand_id#6]
+Functions [1]: [sum(UnscaledValue(ss_net_profit#2))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#2))#17]
+Results [4]: [d_year#11, i_brand_id#6 AS brand_id#18, i_brand#7 AS brand#19, MakeDecimal(sum(UnscaledValue(ss_net_profit#2))#17,17,2) AS sum_agg#20]
(21) TakeOrderedAndProject
-Input [4]: [d_year#10, brand_id#17, brand#18, sum_agg#19]
-Arguments: 100, [d_year#10 ASC NULLS FIRST, sum_agg#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [d_year#10, brand_id#17, brand#18, sum_agg#19]
+Input [4]: [d_year#11, brand_id#18, brand#19, sum_agg#20]
+Arguments: 100, [d_year#11 ASC NULLS FIRST, sum_agg#20 DESC NULLS LAST, brand_id#18 ASC NULLS FIRST], [d_year#11, brand_id#18, brand#19, sum_agg#20]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#3 IN dynamicpruning#4
+ReusedExchange (22)
+
+
+(22) ReusedExchange [Reuses operator id: 15]
+Output [2]: [d_date_sk#10, d_year#11]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/simplified.txt
index 6ab00e1..edf36b7 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3.sf100/simplified.txt
@@ -7,14 +7,16 @@ TakeOrderedAndProject [d_year,sum_agg,brand_id,brand]
HashAggregate [d_year,i_brand,i_brand_id,ss_net_profit] [sum,sum]
Project [d_year,ss_net_profit,i_brand_id,i_brand]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [ss_sold_date_sk,ss_net_profit,i_brand_id,i_brand]
+ Project [ss_net_profit,ss_sold_date_sk,i_brand_id,i_brand]
BroadcastHashJoin [ss_item_sk,i_item_sk]
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_net_profit]
+ Scan parquet default.store_sales [ss_item_sk,ss_net_profit,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_year] #2
InputAdapter
- BroadcastExchange #2
+ BroadcastExchange #3
WholeStageCodegen (1)
Project [i_item_sk,i_brand_id,i_brand]
Filter [i_manufact_id,i_item_sk]
@@ -22,7 +24,7 @@ TakeOrderedAndProject [d_year,sum_agg,brand_id,brand]
InputAdapter
Scan parquet default.item [i_item_sk,i_brand_id,i_brand,i_manufact_id]
InputAdapter
- BroadcastExchange #3
+ BroadcastExchange #2
WholeStageCodegen (2)
Project [d_date_sk,d_year]
Filter [d_moy,d_date_sk]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt
index 6acdeac..a60caf1 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/explain.txt
@@ -41,31 +41,32 @@ Output [2]: [d_date_sk#1, d_year#2]
Input [3]: [d_date_sk#1, d_year#2, d_moy#3]
(5) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_net_profit#6]
+Output [3]: [ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [Or(Or(Or(Or(Or(Or(Or(Or(And(GreaterThanOrEqual(ss_sold_date_sk,2415355),LessThanOrEqual(ss_sold_date_sk,2415385)),And(GreaterThanOrEqual(ss_sold_date_sk,2415720),LessThanOrEqual(ss_sold_date_sk,2415750))),Or(And(GreaterThanOrEqual(ss_sold_date_sk,2416085),LessThanOrEqual(ss_sold_date_sk,2416115)),And(GreaterThanOrEqual(ss_sold_date_sk,2416450),LessThanOrEqual(ss_sold_date_sk,2416480)))),Or(Or(And(GreaterThanOrEqual(ss_sold_date_sk,2416816),LessThanOrEqual(ss_sold_date_sk, [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_net_profit:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [((((((((((ss_sold_date_sk#6 >= 2415355) AND (ss_sold_date_sk#6 <= 2415385)) OR ((ss_sold_date_sk#6 >= 2415720) AND (ss_sold_date_sk#6 <= 2415750))) OR (((ss_sold_date_sk#6 >= 2416085) AND (ss_sold_date_sk#6 <= 2416115)) OR ((ss_sold_date_sk#6 >= 2416450) AND (ss_sold_date_sk#6 <= 2416480)))) OR ((((ss_sold_date_sk#6 >= 2416816) AND (ss_sold_date_sk#6 <= 2416846)) OR ((ss_sold_date_sk#6 >= 2417181) AND (ss_sold_date_sk#6 <= 2417211))) OR ((ss_sold_date_sk#6 >= 2417546) [...]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_net_profit:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_net_profit#6]
+Input [3]: [ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6]
(7) Filter [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_net_profit#6]
-Condition : ((((((((((((ss_sold_date_sk#4 >= 2415355) AND (ss_sold_date_sk#4 <= 2415385)) OR ((ss_sold_date_sk#4 >= 2415720) AND (ss_sold_date_sk#4 <= 2415750))) OR (((ss_sold_date_sk#4 >= 2416085) AND (ss_sold_date_sk#4 <= 2416115)) OR ((ss_sold_date_sk#4 >= 2416450) AND (ss_sold_date_sk#4 <= 2416480)))) OR ((((ss_sold_date_sk#4 >= 2416816) AND (ss_sold_date_sk#4 <= 2416846)) OR ((ss_sold_date_sk#4 >= 2417181) AND (ss_sold_date_sk#4 <= 2417211))) OR ((ss_sold_date_sk#4 >= 2417546) AND ( [...]
+Input [3]: [ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6]
+Condition : isnotnull(ss_item_sk#4)
(8) BroadcastExchange
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_net_profit#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
+Input [3]: [ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6]
+Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7]
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [ss_sold_date_sk#6]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_year#2, ss_item_sk#5, ss_net_profit#6]
-Input [5]: [d_date_sk#1, d_year#2, ss_sold_date_sk#4, ss_item_sk#5, ss_net_profit#6]
+Output [3]: [d_year#2, ss_item_sk#4, ss_net_profit#5]
+Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_net_profit#5, ss_sold_date_sk#6]
(11) Scan parquet default.item
Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manufact_id#11]
@@ -90,18 +91,18 @@ Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#5]
+Left keys [1]: [ss_item_sk#4]
Right keys [1]: [i_item_sk#8]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_year#2, ss_net_profit#6, i_brand_id#9, i_brand#10]
-Input [6]: [d_year#2, ss_item_sk#5, ss_net_profit#6, i_item_sk#8, i_brand_id#9, i_brand#10]
+Output [4]: [d_year#2, ss_net_profit#5, i_brand_id#9, i_brand#10]
+Input [6]: [d_year#2, ss_item_sk#4, ss_net_profit#5, i_item_sk#8, i_brand_id#9, i_brand#10]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_year#2, ss_net_profit#6, i_brand_id#9, i_brand#10]
+Input [4]: [d_year#2, ss_net_profit#5, i_brand_id#9, i_brand#10]
Keys [3]: [d_year#2, i_brand#10, i_brand_id#9]
-Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#6))]
+Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#5))]
Aggregate Attributes [1]: [sum#13]
Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
@@ -112,9 +113,9 @@ Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUI
(20) HashAggregate [codegen id : 4]
Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
Keys [3]: [d_year#2, i_brand#10, i_brand_id#9]
-Functions [1]: [sum(UnscaledValue(ss_net_profit#6))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#6))#16]
-Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_net_profit#6))#16,17,2) AS sum_agg#19]
+Functions [1]: [sum(UnscaledValue(ss_net_profit#5))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_net_profit#5))#16]
+Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_net_profit#5))#16,17,2) AS sum_agg#19]
(21) TakeOrderedAndProject
Input [4]: [d_year#2, brand_id#17, brand#18, sum_agg#19]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/simplified.txt
index 56123af..ef31be3 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q3/simplified.txt
@@ -17,10 +17,10 @@ TakeOrderedAndProject [d_year,sum_agg,brand_id,brand]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_net_profit]
+ Scan parquet default.store_sales [ss_item_sk,ss_net_profit,ss_sold_date_sk]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt
index 5478061..ff33c0b 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/explain.txt
@@ -41,178 +41,189 @@
(1) Scan parquet default.store_sales
-Output [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Output [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450816), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#5), (ss_sold_date_sk#5 >= 2450816), (ss_sold_date_sk#5 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#5 IN dynamicpruning#6)]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
(2) ColumnarToRow [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
(3) Filter [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2450816)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_hdemo_sk#3)) AND isnotnull(ss_customer_sk#2))
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Condition : ((isnotnull(ss_store_sk#3) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Output [3]: [d_date_sk#7, d_year#8, d_dom#9]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [Or(And(GreaterThanOrEqual(d_dom,1),LessThanOrEqual(d_dom,3)),And(GreaterThanOrEqual(d_dom,25),LessThanOrEqual(d_dom,28))), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450816), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
-Condition : (((((((d_dom#8 >= 1) AND (d_dom#8 <= 3)) OR ((d_dom#8 >= 25) AND (d_dom#8 <= 28))) AND d_year#7 IN (1998,1999,2000)) AND (d_date_sk#6 >= 2450816)) AND (d_date_sk#6 <= 2451910)) AND isnotnull(d_date_sk#6))
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
+Condition : (((((((d_dom#9 >= 1) AND (d_dom#9 <= 3)) OR ((d_dom#9 >= 25) AND (d_dom#9 <= 28))) AND d_year#8 IN (1998,1999,2000)) AND (d_date_sk#7 >= 2450816)) AND (d_date_sk#7 <= 2451910)) AND isnotnull(d_date_sk#7))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#6]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Output [1]: [d_date_sk#7]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
(8) BroadcastExchange
-Input [1]: [d_date_sk#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
+Input [1]: [d_date_sk#7]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#6]
+Left keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [d_date_sk#7]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Input [6]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, d_date_sk#6]
+Output [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4]
+Input [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5, d_date_sk#7]
(11) Scan parquet default.store
-Output [2]: [s_store_sk#10, s_county#11]
+Output [2]: [s_store_sk#11, s_county#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_county, [Saginaw County,Sumner County,Appanoose County,Daviess County,Fairfield County,Raleigh County,Ziebach County,Williamson County]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_county:string>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
+Input [2]: [s_store_sk#11, s_county#12]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
-Condition : (s_county#11 IN (Saginaw County,Sumner County,Appanoose County,Daviess County,Fairfield County,Raleigh County,Ziebach County,Williamson County) AND isnotnull(s_store_sk#10))
+Input [2]: [s_store_sk#11, s_county#12]
+Condition : (s_county#12 IN (Saginaw County,Sumner County,Appanoose County,Daviess County,Fairfield County,Raleigh County,Ziebach County,Williamson County) AND isnotnull(s_store_sk#11))
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#10]
-Input [2]: [s_store_sk#10, s_county#11]
+Output [1]: [s_store_sk#11]
+Input [2]: [s_store_sk#11, s_county#12]
(15) BroadcastExchange
-Input [1]: [s_store_sk#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [1]: [s_store_sk#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#10]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#11]
Join condition: None
(17) Project [codegen id : 4]
-Output [3]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5]
-Input [5]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, s_store_sk#10]
+Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#11]
(18) Scan parquet default.household_demographics
-Output [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Output [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000),EqualTo(hd_buy_potential,Unknown)), GreaterThan(hd_vehicle_count,0), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_buy_potential:string,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
(20) Filter [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
-Condition : (((((isnotnull(hd_vehicle_count#16) AND isnotnull(hd_dep_count#15)) AND ((hd_buy_potential#14 = >10000) OR (hd_buy_potential#14 = Unknown))) AND (hd_vehicle_count#16 > 0)) AND ((cast(hd_dep_count#15 as double) / cast(hd_vehicle_count#16 as double)) > 1.2)) AND isnotnull(hd_demo_sk#13))
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
+Condition : (((((isnotnull(hd_vehicle_count#17) AND isnotnull(hd_dep_count#16)) AND ((hd_buy_potential#15 = >10000) OR (hd_buy_potential#15 = Unknown))) AND (hd_vehicle_count#17 > 0)) AND ((cast(hd_dep_count#16 as double) / cast(hd_vehicle_count#17 as double)) > 1.2)) AND isnotnull(hd_demo_sk#14))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#13]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Output [1]: [hd_demo_sk#14]
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
+Input [1]: [hd_demo_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18]
(23) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#13]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#14]
Join condition: None
(24) Project [codegen id : 4]
-Output [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Input [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5, hd_demo_sk#13]
+Output [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#14]
(25) HashAggregate [codegen id : 4]
-Input [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [partial_count(1)]
-Aggregate Attributes [1]: [count#18]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
+Aggregate Attributes [1]: [count#19]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
(26) Exchange
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#20]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
+Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#21]
(27) HashAggregate [codegen id : 5]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [count(1)]
-Aggregate Attributes [1]: [count(1)#21]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count(1)#21 AS cnt#22]
+Aggregate Attributes [1]: [count(1)#22]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#22 AS cnt#23]
(28) Filter [codegen id : 5]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
-Condition : ((cnt#22 >= 15) AND (cnt#22 <= 20))
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23]
+Condition : ((cnt#23 >= 15) AND (cnt#23 <= 20))
(29) Exchange
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
-Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#23]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23]
+Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#24]
(30) Sort [codegen id : 6]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
-Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23]
+Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0
(31) Scan parquet default.customer
-Output [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Output [5]: [c_customer_sk#25, c_salutation#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk)]
ReadSchema: struct<c_customer_sk:int,c_salutation:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string>
(32) ColumnarToRow [codegen id : 7]
-Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Input [5]: [c_customer_sk#25, c_salutation#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29]
(33) Filter [codegen id : 7]
-Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
-Condition : isnotnull(c_customer_sk#24)
+Input [5]: [c_customer_sk#25, c_salutation#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29]
+Condition : isnotnull(c_customer_sk#25)
(34) Exchange
-Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
-Arguments: hashpartitioning(c_customer_sk#24, 5), ENSURE_REQUIREMENTS, [id=#29]
+Input [5]: [c_customer_sk#25, c_salutation#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29]
+Arguments: hashpartitioning(c_customer_sk#25, 5), ENSURE_REQUIREMENTS, [id=#30]
(35) Sort [codegen id : 8]
-Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
-Arguments: [c_customer_sk#24 ASC NULLS FIRST], false, 0
+Input [5]: [c_customer_sk#25, c_salutation#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29]
+Arguments: [c_customer_sk#25 ASC NULLS FIRST], false, 0
(36) SortMergeJoin [codegen id : 9]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#24]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#25]
Join condition: None
(37) Project [codegen id : 9]
-Output [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#5, cnt#22]
-Input [8]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22, c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Output [6]: [c_last_name#28, c_first_name#27, c_salutation#26, c_preferred_cust_flag#29, ss_ticket_number#4, cnt#23]
+Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23, c_customer_sk#25, c_salutation#26, c_first_name#27, c_last_name#28, c_preferred_cust_flag#29]
(38) Exchange
-Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#5, cnt#22]
-Arguments: rangepartitioning(c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, c_salutation#25 ASC NULLS FIRST, c_preferred_cust_flag#28 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#30]
+Input [6]: [c_last_name#28, c_first_name#27, c_salutation#26, c_preferred_cust_flag#29, ss_ticket_number#4, cnt#23]
+Arguments: rangepartitioning(c_last_name#28 ASC NULLS FIRST, c_first_name#27 ASC NULLS FIRST, c_salutation#26 ASC NULLS FIRST, c_preferred_cust_flag#29 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#31]
(39) Sort [codegen id : 10]
-Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#5, cnt#22]
-Arguments: [c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, c_salutation#25 ASC NULLS FIRST, c_preferred_cust_flag#28 DESC NULLS LAST], true, 0
+Input [6]: [c_last_name#28, c_first_name#27, c_salutation#26, c_preferred_cust_flag#29, ss_ticket_number#4, cnt#23]
+Arguments: [c_last_name#28 ASC NULLS FIRST, c_first_name#27 ASC NULLS FIRST, c_salutation#26 ASC NULLS FIRST, c_preferred_cust_flag#29 DESC NULLS LAST], true, 0
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#5 IN dynamicpruning#6
+ReusedExchange (40)
+
+
+(40) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#7]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/simplified.txt
index c9945cd..24c5c1c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34.sf100/simplified.txt
@@ -23,10 +23,12 @@ WholeStageCodegen (10)
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_customer_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #4
InputAdapter
BroadcastExchange #4
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt
index 74bbb52..5ebb8e1 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/explain.txt
@@ -38,166 +38,177 @@
(1) Scan parquet default.store_sales
-Output [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Output [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450816), LessThanOrEqual(ss_sold_date_sk,2451910), IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#5), (ss_sold_date_sk#5 >= 2450816), (ss_sold_date_sk#5 <= 2451910), dynamicpruningexpression(ss_sold_date_sk#5 IN dynamicpruning#6)]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
(2) ColumnarToRow [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
(3) Filter [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2450816)) AND (ss_sold_date_sk#1 <= 2451910)) AND isnotnull(ss_store_sk#4)) AND isnotnull(ss_hdemo_sk#3)) AND isnotnull(ss_customer_sk#2))
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Condition : ((isnotnull(ss_store_sk#3) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Output [3]: [d_date_sk#7, d_year#8, d_dom#9]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [Or(And(GreaterThanOrEqual(d_dom,1),LessThanOrEqual(d_dom,3)),And(GreaterThanOrEqual(d_dom,25),LessThanOrEqual(d_dom,28))), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450816), LessThanOrEqual(d_date_sk,2451910), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
-Condition : (((((((d_dom#8 >= 1) AND (d_dom#8 <= 3)) OR ((d_dom#8 >= 25) AND (d_dom#8 <= 28))) AND d_year#7 IN (1998,1999,2000)) AND (d_date_sk#6 >= 2450816)) AND (d_date_sk#6 <= 2451910)) AND isnotnull(d_date_sk#6))
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
+Condition : (((((((d_dom#9 >= 1) AND (d_dom#9 <= 3)) OR ((d_dom#9 >= 25) AND (d_dom#9 <= 28))) AND d_year#8 IN (1998,1999,2000)) AND (d_date_sk#7 >= 2450816)) AND (d_date_sk#7 <= 2451910)) AND isnotnull(d_date_sk#7))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#6]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Output [1]: [d_date_sk#7]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
(8) BroadcastExchange
-Input [1]: [d_date_sk#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
+Input [1]: [d_date_sk#7]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#6]
+Left keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [d_date_sk#7]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Input [6]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, d_date_sk#6]
+Output [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4]
+Input [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5, d_date_sk#7]
(11) Scan parquet default.store
-Output [2]: [s_store_sk#10, s_county#11]
+Output [2]: [s_store_sk#11, s_county#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_county, [Saginaw County,Sumner County,Appanoose County,Daviess County,Fairfield County,Raleigh County,Ziebach County,Williamson County]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_county:string>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
+Input [2]: [s_store_sk#11, s_county#12]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
-Condition : (s_county#11 IN (Saginaw County,Sumner County,Appanoose County,Daviess County,Fairfield County,Raleigh County,Ziebach County,Williamson County) AND isnotnull(s_store_sk#10))
+Input [2]: [s_store_sk#11, s_county#12]
+Condition : (s_county#12 IN (Saginaw County,Sumner County,Appanoose County,Daviess County,Fairfield County,Raleigh County,Ziebach County,Williamson County) AND isnotnull(s_store_sk#11))
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#10]
-Input [2]: [s_store_sk#10, s_county#11]
+Output [1]: [s_store_sk#11]
+Input [2]: [s_store_sk#11, s_county#12]
(15) BroadcastExchange
-Input [1]: [s_store_sk#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [1]: [s_store_sk#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#10]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#11]
Join condition: None
(17) Project [codegen id : 4]
-Output [3]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5]
-Input [5]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, s_store_sk#10]
+Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#11]
(18) Scan parquet default.household_demographics
-Output [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Output [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000),EqualTo(hd_buy_potential,Unknown)), GreaterThan(hd_vehicle_count,0), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_buy_potential:string,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
(20) Filter [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
-Condition : (((((isnotnull(hd_vehicle_count#16) AND isnotnull(hd_dep_count#15)) AND ((hd_buy_potential#14 = >10000) OR (hd_buy_potential#14 = Unknown))) AND (hd_vehicle_count#16 > 0)) AND ((cast(hd_dep_count#15 as double) / cast(hd_vehicle_count#16 as double)) > 1.2)) AND isnotnull(hd_demo_sk#13))
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
+Condition : (((((isnotnull(hd_vehicle_count#17) AND isnotnull(hd_dep_count#16)) AND ((hd_buy_potential#15 = >10000) OR (hd_buy_potential#15 = Unknown))) AND (hd_vehicle_count#17 > 0)) AND ((cast(hd_dep_count#16 as double) / cast(hd_vehicle_count#17 as double)) > 1.2)) AND isnotnull(hd_demo_sk#14))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#13]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Output [1]: [hd_demo_sk#14]
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
+Input [1]: [hd_demo_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18]
(23) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#13]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#14]
Join condition: None
(24) Project [codegen id : 4]
-Output [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Input [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5, hd_demo_sk#13]
+Output [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#14]
(25) HashAggregate [codegen id : 4]
-Input [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [partial_count(1)]
-Aggregate Attributes [1]: [count#18]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
+Aggregate Attributes [1]: [count#19]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
(26) Exchange
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#20]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
+Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#21]
(27) HashAggregate [codegen id : 6]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [count(1)]
-Aggregate Attributes [1]: [count(1)#21]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count(1)#21 AS cnt#22]
+Aggregate Attributes [1]: [count(1)#22]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#22 AS cnt#23]
(28) Filter [codegen id : 6]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
-Condition : ((cnt#22 >= 15) AND (cnt#22 <= 20))
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23]
+Condition : ((cnt#23 >= 15) AND (cnt#23 <= 20))
(29) Scan parquet default.customer
-Output [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
+Output [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk)]
ReadSchema: struct<c_customer_sk:int,c_salutation:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string>
(30) ColumnarToRow [codegen id : 5]
-Input [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
+Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
(31) Filter [codegen id : 5]
-Input [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
-Condition : isnotnull(c_customer_sk#23)
+Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Condition : isnotnull(c_customer_sk#24)
(32) BroadcastExchange
-Input [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#28]
+Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29]
(33) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#23]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#24]
Join condition: None
(34) Project [codegen id : 6]
-Output [6]: [c_last_name#26, c_first_name#25, c_salutation#24, c_preferred_cust_flag#27, ss_ticket_number#5, cnt#22]
-Input [8]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22, c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
+Output [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#23]
+Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23, c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
(35) Exchange
-Input [6]: [c_last_name#26, c_first_name#25, c_salutation#24, c_preferred_cust_flag#27, ss_ticket_number#5, cnt#22]
-Arguments: rangepartitioning(c_last_name#26 ASC NULLS FIRST, c_first_name#25 ASC NULLS FIRST, c_salutation#24 ASC NULLS FIRST, c_preferred_cust_flag#27 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#29]
+Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#23]
+Arguments: rangepartitioning(c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, c_salutation#25 ASC NULLS FIRST, c_preferred_cust_flag#28 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#30]
(36) Sort [codegen id : 7]
-Input [6]: [c_last_name#26, c_first_name#25, c_salutation#24, c_preferred_cust_flag#27, ss_ticket_number#5, cnt#22]
-Arguments: [c_last_name#26 ASC NULLS FIRST, c_first_name#25 ASC NULLS FIRST, c_salutation#24 ASC NULLS FIRST, c_preferred_cust_flag#27 DESC NULLS LAST], true, 0
+Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#23]
+Arguments: [c_last_name#27 ASC NULLS FIRST, c_first_name#26 ASC NULLS FIRST, c_salutation#25 ASC NULLS FIRST, c_preferred_cust_flag#28 DESC NULLS LAST], true, 0
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#5 IN dynamicpruning#6
+ReusedExchange (37)
+
+
+(37) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#7]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/simplified.txt
index 4484587..e4f89ab 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q34/simplified.txt
@@ -17,10 +17,12 @@ WholeStageCodegen (7)
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_customer_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #3
InputAdapter
BroadcastExchange #3
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt
index 7a059d9..5e83e99 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/explain.txt
@@ -45,78 +45,89 @@ Input [2]: [d_date_sk#1, d_year#2]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4]
(6) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Output [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451149), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2451149), (ss_sold_date_sk#7 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
(8) Filter
-Input [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
-Condition : (((isnotnull(ss_sold_date_sk#5) AND (ss_sold_date_sk#5 >= 2451149)) AND (ss_sold_date_sk#5 <= 2451179)) AND isnotnull(ss_item_sk#6))
+Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
+Condition : isnotnull(ss_item_sk#5)
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [ss_sold_date_sk#7]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_year#2, ss_item_sk#6, ss_ext_sales_price#7]
-Input [5]: [d_date_sk#1, d_year#2, ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Output [3]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6]
+Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
(11) Scan parquet default.item
-Output [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11]
+Output [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_category_id:int,i_category:string,i_manager_id:int>
(12) ColumnarToRow [codegen id : 2]
-Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11]
+Input [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12]
(13) Filter [codegen id : 2]
-Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11]
-Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8))
+Input [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12]
+Condition : ((isnotnull(i_manager_id#12) AND (i_manager_id#12 = 1)) AND isnotnull(i_item_sk#9))
(14) Project [codegen id : 2]
-Output [3]: [i_item_sk#8, i_category_id#9, i_category#10]
-Input [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11]
+Output [3]: [i_item_sk#9, i_category_id#10, i_category#11]
+Input [4]: [i_item_sk#9, i_category_id#10, i_category#11, i_manager_id#12]
(15) BroadcastExchange
-Input [3]: [i_item_sk#8, i_category_id#9, i_category#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [3]: [i_item_sk#9, i_category_id#10, i_category#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#6]
-Right keys [1]: [i_item_sk#8]
+Left keys [1]: [ss_item_sk#5]
+Right keys [1]: [i_item_sk#9]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_year#2, ss_ext_sales_price#7, i_category_id#9, i_category#10]
-Input [6]: [d_year#2, ss_item_sk#6, ss_ext_sales_price#7, i_item_sk#8, i_category_id#9, i_category#10]
+Output [4]: [d_year#2, ss_ext_sales_price#6, i_category_id#10, i_category#11]
+Input [6]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#9, i_category_id#10, i_category#11]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_year#2, ss_ext_sales_price#7, i_category_id#9, i_category#10]
-Keys [3]: [d_year#2, i_category_id#9, i_category#10]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))]
-Aggregate Attributes [1]: [sum#13]
-Results [4]: [d_year#2, i_category_id#9, i_category#10, sum#14]
+Input [4]: [d_year#2, ss_ext_sales_price#6, i_category_id#10, i_category#11]
+Keys [3]: [d_year#2, i_category_id#10, i_category#11]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))]
+Aggregate Attributes [1]: [sum#14]
+Results [4]: [d_year#2, i_category_id#10, i_category#11, sum#15]
(19) Exchange
-Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14]
-Arguments: hashpartitioning(d_year#2, i_category_id#9, i_category#10, 5), ENSURE_REQUIREMENTS, [id=#15]
+Input [4]: [d_year#2, i_category_id#10, i_category#11, sum#15]
+Arguments: hashpartitioning(d_year#2, i_category_id#10, i_category#11, 5), ENSURE_REQUIREMENTS, [id=#16]
(20) HashAggregate [codegen id : 4]
-Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14]
-Keys [3]: [d_year#2, i_category_id#9, i_category#10]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#16]
-Results [4]: [d_year#2, i_category_id#9, i_category#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#16,17,2) AS sum(ss_ext_sales_price)#17]
+Input [4]: [d_year#2, i_category_id#10, i_category#11, sum#15]
+Keys [3]: [d_year#2, i_category_id#10, i_category#11]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#17]
+Results [4]: [d_year#2, i_category_id#10, i_category#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#17,17,2) AS sum(ss_ext_sales_price)#18]
(21) TakeOrderedAndProject
-Input [4]: [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17]
-Arguments: 100, [sum(ss_ext_sales_price)#17 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#9 ASC NULLS FIRST, i_category#10 ASC NULLS FIRST], [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17]
+Input [4]: [d_year#2, i_category_id#10, i_category#11, sum(ss_ext_sales_price)#18]
+Arguments: 100, [sum(ss_ext_sales_price)#18 DESC NULLS LAST, d_year#2 ASC NULLS FIRST, i_category_id#10 ASC NULLS FIRST, i_category#11 ASC NULLS FIRST], [d_year#2, i_category_id#10, i_category#11, sum(ss_ext_sales_price)#18]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
+ReusedExchange (22)
+
+
+(22) ReusedExchange [Reuses operator id: 5]
+Output [2]: [d_date_sk#1, d_year#2]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/simplified.txt
index 96e2f0b..7e5c7eb 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42.sf100/simplified.txt
@@ -17,10 +17,12 @@ TakeOrderedAndProject [sum(ss_ext_sales_price),d_year,i_category_id,i_category]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_year,d_moy]
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_ext_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_year] #2
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt
index 4c8cd00..255f394 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/explain.txt
@@ -41,31 +41,32 @@ Output [2]: [d_date_sk#1, d_year#2]
Input [3]: [d_date_sk#1, d_year#2, d_moy#3]
(5) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Output [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451149), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2451149), (ss_sold_date_sk#6 <= 2451179), dynamicpruningexpression(true)]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
(7) Filter [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
-Condition : (((isnotnull(ss_sold_date_sk#4) AND (ss_sold_date_sk#4 >= 2451149)) AND (ss_sold_date_sk#4 <= 2451179)) AND isnotnull(ss_item_sk#5))
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
+Condition : isnotnull(ss_item_sk#4)
(8) BroadcastExchange
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
+Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7]
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [ss_sold_date_sk#6]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6]
-Input [5]: [d_date_sk#1, d_year#2, ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5]
+Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
(11) Scan parquet default.item
Output [4]: [i_item_sk#8, i_category_id#9, i_category#10, i_manager_id#11]
@@ -90,18 +91,18 @@ Input [3]: [i_item_sk#8, i_category_id#9, i_category#10]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#5]
+Left keys [1]: [ss_item_sk#4]
Right keys [1]: [i_item_sk#8]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_year#2, ss_ext_sales_price#6, i_category_id#9, i_category#10]
-Input [6]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#8, i_category_id#9, i_category#10]
+Output [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10]
+Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_category_id#9, i_category#10]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_year#2, ss_ext_sales_price#6, i_category_id#9, i_category#10]
+Input [4]: [d_year#2, ss_ext_sales_price#5, i_category_id#9, i_category#10]
Keys [3]: [d_year#2, i_category_id#9, i_category#10]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))]
Aggregate Attributes [1]: [sum#13]
Results [4]: [d_year#2, i_category_id#9, i_category#10, sum#14]
@@ -112,9 +113,9 @@ Arguments: hashpartitioning(d_year#2, i_category_id#9, i_category#10, 5), ENSURE
(20) HashAggregate [codegen id : 4]
Input [4]: [d_year#2, i_category_id#9, i_category#10, sum#14]
Keys [3]: [d_year#2, i_category_id#9, i_category#10]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#16]
-Results [4]: [d_year#2, i_category_id#9, i_category#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#16,17,2) AS sum(ss_ext_sales_price)#17]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16]
+Results [4]: [d_year#2, i_category_id#9, i_category#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS sum(ss_ext_sales_price)#17]
(21) TakeOrderedAndProject
Input [4]: [d_year#2, i_category_id#9, i_category#10, sum(ss_ext_sales_price)#17]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/simplified.txt
index d9bb6de..4806a93 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q42/simplified.txt
@@ -17,10 +17,10 @@ TakeOrderedAndProject [sum(ss_ext_sales_price),d_year,i_category_id,i_category]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_ext_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt
index b9ed2ce..af13cec 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/explain.txt
@@ -45,78 +45,89 @@ Input [2]: [d_date_sk#1, d_day_name#3]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4]
(6) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#5, ss_store_sk#6, ss_sales_price#7]
+Output [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450816), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2450816), (ss_sold_date_sk#7 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [3]: [ss_sold_date_sk#5, ss_store_sk#6, ss_sales_price#7]
+Input [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7]
(8) Filter
-Input [3]: [ss_sold_date_sk#5, ss_store_sk#6, ss_sales_price#7]
-Condition : (((isnotnull(ss_sold_date_sk#5) AND (ss_sold_date_sk#5 >= 2450816)) AND (ss_sold_date_sk#5 <= 2451179)) AND isnotnull(ss_store_sk#6))
+Input [3]: [ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7]
+Condition : isnotnull(ss_store_sk#5)
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [ss_sold_date_sk#7]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_day_name#3, ss_store_sk#6, ss_sales_price#7]
-Input [5]: [d_date_sk#1, d_day_name#3, ss_sold_date_sk#5, ss_store_sk#6, ss_sales_price#7]
+Output [3]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6]
+Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#5, ss_sales_price#6, ss_sold_date_sk#7]
(11) Scan parquet default.store
-Output [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11]
+Output [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_gmt_offset), EqualTo(s_gmt_offset,-5.00), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_store_id:string,s_store_name:string,s_gmt_offset:decimal(5,2)>
(12) ColumnarToRow [codegen id : 2]
-Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11]
+Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12]
(13) Filter [codegen id : 2]
-Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11]
-Condition : ((isnotnull(s_gmt_offset#11) AND (s_gmt_offset#11 = -5.00)) AND isnotnull(s_store_sk#8))
+Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12]
+Condition : ((isnotnull(s_gmt_offset#12) AND (s_gmt_offset#12 = -5.00)) AND isnotnull(s_store_sk#9))
(14) Project [codegen id : 2]
-Output [3]: [s_store_sk#8, s_store_id#9, s_store_name#10]
-Input [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11]
+Output [3]: [s_store_sk#9, s_store_id#10, s_store_name#11]
+Input [4]: [s_store_sk#9, s_store_id#10, s_store_name#11, s_gmt_offset#12]
(15) BroadcastExchange
-Input [3]: [s_store_sk#8, s_store_id#9, s_store_name#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [3]: [s_store_sk#9, s_store_id#10, s_store_name#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_store_sk#6]
-Right keys [1]: [s_store_sk#8]
+Left keys [1]: [ss_store_sk#5]
+Right keys [1]: [s_store_sk#9]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_day_name#3, ss_sales_price#7, s_store_id#9, s_store_name#10]
-Input [6]: [d_day_name#3, ss_store_sk#6, ss_sales_price#7, s_store_sk#8, s_store_id#9, s_store_name#10]
+Output [4]: [d_day_name#3, ss_sales_price#6, s_store_id#10, s_store_name#11]
+Input [6]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6, s_store_sk#9, s_store_id#10, s_store_name#11]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_day_name#3, ss_sales_price#7, s_store_id#9, s_store_name#10]
-Keys [2]: [s_store_name#10, s_store_id#9]
-Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#7 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#7 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#7 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#7 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_ [...]
-Aggregate Attributes [7]: [sum#13, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19]
-Results [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26]
+Input [4]: [d_day_name#3, ss_sales_price#6, s_store_id#10, s_store_name#11]
+Keys [2]: [s_store_name#11, s_store_id#10]
+Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_ [...]
+Aggregate Attributes [7]: [sum#14, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20]
+Results [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27]
(19) Exchange
-Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26]
-Arguments: hashpartitioning(s_store_name#10, s_store_id#9, 5), ENSURE_REQUIREMENTS, [id=#27]
+Input [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27]
+Arguments: hashpartitioning(s_store_name#11, s_store_id#10, 5), ENSURE_REQUIREMENTS, [id=#28]
(20) HashAggregate [codegen id : 4]
-Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26]
-Keys [2]: [s_store_name#10, s_store_id#9]
-Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#7 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#7 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#7 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#7 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#7 ELSE null END)), sum(UnscaledVal [...]
-Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#7 ELSE null END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#7 ELSE null END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#7 ELSE null END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#7 ELSE null END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#7 ELSE null [...]
-Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#7 ELSE null END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#7 ELSE null END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#7 ELSE null END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednes [...]
+Input [9]: [s_store_name#11, s_store_id#10, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26, sum#27]
+Keys [2]: [s_store_name#11, s_store_id#10]
+Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledVal [...]
+Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 ELSE null END))#32, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#6 ELSE null [...]
+Results [9]: [s_store_name#11, s_store_id#10, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END))#29,17,2) AS sun_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END))#30,17,2) AS mon_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END))#31,17,2) AS tue_sales#38, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wedne [...]
(21) TakeOrderedAndProject
-Input [9]: [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41]
-Arguments: 100, [s_store_name#10 ASC NULLS FIRST, s_store_id#9 ASC NULLS FIRST, sun_sales#35 ASC NULLS FIRST, mon_sales#36 ASC NULLS FIRST, tue_sales#37 ASC NULLS FIRST, wed_sales#38 ASC NULLS FIRST, thu_sales#39 ASC NULLS FIRST, fri_sales#40 ASC NULLS FIRST, sat_sales#41 ASC NULLS FIRST], [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41]
+Input [9]: [s_store_name#11, s_store_id#10, sun_sales#36, mon_sales#37, tue_sales#38, wed_sales#39, thu_sales#40, fri_sales#41, sat_sales#42]
+Arguments: 100, [s_store_name#11 ASC NULLS FIRST, s_store_id#10 ASC NULLS FIRST, sun_sales#36 ASC NULLS FIRST, mon_sales#37 ASC NULLS FIRST, tue_sales#38 ASC NULLS FIRST, wed_sales#39 ASC NULLS FIRST, thu_sales#40 ASC NULLS FIRST, fri_sales#41 ASC NULLS FIRST, sat_sales#42 ASC NULLS FIRST], [s_store_name#11, s_store_id#10, sun_sales#36, mon_sales#37, tue_sales#38, wed_sales#39, thu_sales#40, fri_sales#41, sat_sales#42]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
+ReusedExchange (22)
+
+
+(22) ReusedExchange [Reuses operator id: 5]
+Output [2]: [d_date_sk#1, d_day_name#3]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/simplified.txt
index a366ea3..0417bb3 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43.sf100/simplified.txt
@@ -17,10 +17,12 @@ TakeOrderedAndProject [s_store_name,s_store_id,sun_sales,mon_sales,tue_sales,wed
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_year,d_day_name]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_day_name] #2
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt
index eef9481..50e976d 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/explain.txt
@@ -41,31 +41,32 @@ Output [2]: [d_date_sk#1, d_day_name#3]
Input [3]: [d_date_sk#1, d_year#2, d_day_name#3]
(5) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#4, ss_store_sk#5, ss_sales_price#6]
+Output [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450816), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2450816), (ss_sold_date_sk#6 <= 2451179), dynamicpruningexpression(true)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_store_sk#5, ss_sales_price#6]
+Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
(7) Filter [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_store_sk#5, ss_sales_price#6]
-Condition : (((isnotnull(ss_sold_date_sk#4) AND (ss_sold_date_sk#4 >= 2450816)) AND (ss_sold_date_sk#4 <= 2451179)) AND isnotnull(ss_store_sk#5))
+Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
+Condition : isnotnull(ss_store_sk#4)
(8) BroadcastExchange
-Input [3]: [ss_sold_date_sk#4, ss_store_sk#5, ss_sales_price#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
+Input [3]: [ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
+Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7]
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [ss_sold_date_sk#6]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6]
-Input [5]: [d_date_sk#1, d_day_name#3, ss_sold_date_sk#4, ss_store_sk#5, ss_sales_price#6]
+Output [3]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5]
+Input [5]: [d_date_sk#1, d_day_name#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
(11) Scan parquet default.store
Output [4]: [s_store_sk#8, s_store_id#9, s_store_name#10, s_gmt_offset#11]
@@ -90,18 +91,18 @@ Input [3]: [s_store_sk#8, s_store_id#9, s_store_name#10]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_store_sk#5]
+Left keys [1]: [ss_store_sk#4]
Right keys [1]: [s_store_sk#8]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_day_name#3, ss_sales_price#6, s_store_id#9, s_store_name#10]
-Input [6]: [d_day_name#3, ss_store_sk#5, ss_sales_price#6, s_store_sk#8, s_store_id#9, s_store_name#10]
+Output [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10]
+Input [6]: [d_day_name#3, ss_store_sk#4, ss_sales_price#5, s_store_sk#8, s_store_id#9, s_store_name#10]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_day_name#3, ss_sales_price#6, s_store_id#9, s_store_name#10]
+Input [4]: [d_day_name#3, ss_sales_price#5, s_store_id#9, s_store_name#10]
Keys [2]: [s_store_name#10, s_store_id#9]
-Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_ [...]
+Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#5 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#5 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#5 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_ [...]
Aggregate Attributes [7]: [sum#13, sum#14, sum#15, sum#16, sum#17, sum#18, sum#19]
Results [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26]
@@ -112,9 +113,9 @@ Arguments: hashpartitioning(s_store_name#10, s_store_id#9, 5), ENSURE_REQUIREMEN
(20) HashAggregate [codegen id : 4]
Input [9]: [s_store_name#10, s_store_id#9, sum#20, sum#21, sum#22, sum#23, sum#24, sum#25, sum#26]
Keys [2]: [s_store_name#10, s_store_id#9]
-Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#6 ELSE null END)), sum(UnscaledVal [...]
-Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#6 ELSE null END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#6 ELSE null [...]
-Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#6 ELSE null END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#6 ELSE null END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#6 ELSE null END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednes [...]
+Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#5 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#5 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#5 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#5 ELSE null END)), sum(UnscaledVal [...]
+Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#5 ELSE null END))#28, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#5 ELSE null END))#29, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#5 ELSE null END))#30, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednesday) THEN ss_sales_price#5 ELSE null END))#31, sum(UnscaledValue(CASE WHEN (d_day_name#3 = Thursday) THEN ss_sales_price#5 ELSE null [...]
+Results [9]: [s_store_name#10, s_store_id#9, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Sunday) THEN ss_sales_price#5 ELSE null END))#28,17,2) AS sun_sales#35, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Monday) THEN ss_sales_price#5 ELSE null END))#29,17,2) AS mon_sales#36, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Tuesday) THEN ss_sales_price#5 ELSE null END))#30,17,2) AS tue_sales#37, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#3 = Wednes [...]
(21) TakeOrderedAndProject
Input [9]: [s_store_name#10, s_store_id#9, sun_sales#35, mon_sales#36, tue_sales#37, wed_sales#38, thu_sales#39, fri_sales#40, sat_sales#41]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/simplified.txt
index d2cb50b..b6c4c59 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q43/simplified.txt
@@ -17,10 +17,10 @@ TakeOrderedAndProject [s_store_name,s_store_id,sun_sales,mon_sales,tue_sales,wed
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_store_sk,ss_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt
index 63bc6d1..4eb212c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/explain.txt
@@ -53,229 +53,240 @@ TakeOrderedAndProject (51)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
+Output [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [In(ss_sold_date_sk, [2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,2452232,2451874,2451581,2451329,2451223,2451783 [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_coupon_amt:decimal(7,2),ss_net_profit:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [ss_sold_date_sk#8 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,2452232,2451874,2451581,2451329,2451223, [...]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_coupon_amt:decimal(7,2),ss_net_profit:decimal(7,2)>
(2) ColumnarToRow [codegen id : 4]
-Input [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 4]
-Input [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Condition : (((((ss_sold_date_sk#1 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,2452232,2451874,2451581,2451329,2451223,24 [...]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
+Condition : (((isnotnull(ss_store_sk#4) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_addr_sk#3)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Output [3]: [d_date_sk#10, d_year#11, d_dow#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_dow, [6,0]), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,24522 [...]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dow:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
-Condition : (((d_dow#11 IN (6,0) AND d_year#10 IN (1999,2000,2001)) AND d_date_sk#9 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2 [...]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
+Condition : (((d_dow#12 IN (6,0) AND d_year#11 IN (1999,2000,2001)) AND d_date_sk#10 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504, [...]
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#9]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Output [1]: [d_date_sk#10]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
(8) BroadcastExchange
-Input [1]: [d_date_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [1]: [d_date_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(10) Project [codegen id : 4]
-Output [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, d_date_sk#9]
+Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8, d_date_sk#10]
(11) Scan parquet default.store
-Output [2]: [s_store_sk#13, s_city#14]
+Output [2]: [s_store_sk#14, s_city#15]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_city, [Midway,Concord,Spring Hill,Brownsville,Greenville]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_city:string>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#13, s_city#14]
+Input [2]: [s_store_sk#14, s_city#15]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#13, s_city#14]
-Condition : (s_city#14 IN (Midway,Concord,Spring Hill,Brownsville,Greenville) AND isnotnull(s_store_sk#13))
+Input [2]: [s_store_sk#14, s_city#15]
+Condition : (s_city#15 IN (Midway,Concord,Spring Hill,Brownsville,Greenville) AND isnotnull(s_store_sk#14))
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#13]
-Input [2]: [s_store_sk#13, s_city#14]
+Output [1]: [s_store_sk#14]
+Input [2]: [s_store_sk#14, s_city#15]
(15) BroadcastExchange
-Input [1]: [s_store_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15]
+Input [1]: [s_store_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#5]
-Right keys [1]: [s_store_sk#13]
+Left keys [1]: [ss_store_sk#4]
+Right keys [1]: [s_store_sk#14]
Join condition: None
(17) Project [codegen id : 4]
-Output [6]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, s_store_sk#13]
+Output [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#14]
(18) Scan parquet default.household_demographics
-Output [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
+Output [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
+Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
(20) Filter [codegen id : 3]
-Input [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
-Condition : (((hd_dep_count#17 = 5) OR (hd_vehicle_count#18 = 3)) AND isnotnull(hd_demo_sk#16))
+Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Condition : (((hd_dep_count#18 = 5) OR (hd_vehicle_count#19 = 3)) AND isnotnull(hd_demo_sk#17))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#16]
-Input [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
+Output [1]: [hd_demo_sk#17]
+Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#16]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19]
+Input [1]: [hd_demo_sk#17]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
(23) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#16]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#17]
Join condition: None
(24) Project [codegen id : 4]
-Output [5]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, hd_demo_sk#16]
+Output [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#17]
(25) Exchange
-Input [5]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Arguments: hashpartitioning(ss_addr_sk#4, 5), ENSURE_REQUIREMENTS, [id=#20]
+Input [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Arguments: hashpartitioning(ss_addr_sk#3, 5), ENSURE_REQUIREMENTS, [id=#21]
(26) Sort [codegen id : 5]
-Input [5]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Arguments: [ss_addr_sk#4 ASC NULLS FIRST], false, 0
+Input [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Arguments: [ss_addr_sk#3 ASC NULLS FIRST], false, 0
(27) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#21, ca_city#22]
+Output [2]: [ca_address_sk#22, ca_city#23]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)]
ReadSchema: struct<ca_address_sk:int,ca_city:string>
(28) ColumnarToRow [codegen id : 6]
-Input [2]: [ca_address_sk#21, ca_city#22]
+Input [2]: [ca_address_sk#22, ca_city#23]
(29) Filter [codegen id : 6]
-Input [2]: [ca_address_sk#21, ca_city#22]
-Condition : (isnotnull(ca_address_sk#21) AND isnotnull(ca_city#22))
+Input [2]: [ca_address_sk#22, ca_city#23]
+Condition : (isnotnull(ca_address_sk#22) AND isnotnull(ca_city#23))
(30) Exchange
-Input [2]: [ca_address_sk#21, ca_city#22]
-Arguments: hashpartitioning(ca_address_sk#21, 5), ENSURE_REQUIREMENTS, [id=#23]
+Input [2]: [ca_address_sk#22, ca_city#23]
+Arguments: hashpartitioning(ca_address_sk#22, 5), ENSURE_REQUIREMENTS, [id=#24]
(31) Sort [codegen id : 7]
-Input [2]: [ca_address_sk#21, ca_city#22]
-Arguments: [ca_address_sk#21 ASC NULLS FIRST], false, 0
+Input [2]: [ca_address_sk#22, ca_city#23]
+Arguments: [ca_address_sk#22 ASC NULLS FIRST], false, 0
(32) SortMergeJoin [codegen id : 8]
-Left keys [1]: [ss_addr_sk#4]
-Right keys [1]: [ca_address_sk#21]
+Left keys [1]: [ss_addr_sk#3]
+Right keys [1]: [ca_address_sk#22]
Join condition: None
(33) Project [codegen id : 8]
-Output [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, ca_city#22]
-Input [7]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, ca_address_sk#21, ca_city#22]
+Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#23]
+Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#22, ca_city#23]
(34) HashAggregate [codegen id : 8]
-Input [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, ca_city#22]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22]
-Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#7)), partial_sum(UnscaledValue(ss_net_profit#8))]
-Aggregate Attributes [2]: [sum#24, sum#25]
-Results [6]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22, sum#26, sum#27]
+Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#23]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23]
+Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))]
+Aggregate Attributes [2]: [sum#25, sum#26]
+Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23, sum#27, sum#28]
(35) HashAggregate [codegen id : 8]
-Input [6]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22, sum#26, sum#27]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22]
-Functions [2]: [sum(UnscaledValue(ss_coupon_amt#7)), sum(UnscaledValue(ss_net_profit#8))]
-Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#7))#28, sum(UnscaledValue(ss_net_profit#8))#29]
-Results [5]: [ss_ticket_number#6, ss_customer_sk#2, ca_city#22 AS bought_city#30, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#7))#28,17,2) AS amt#31, MakeDecimal(sum(UnscaledValue(ss_net_profit#8))#29,17,2) AS profit#32]
+Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23, sum#27, sum#28]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23]
+Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))]
+Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#29, sum(UnscaledValue(ss_net_profit#7))#30]
+Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#23 AS bought_city#31, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#29,17,2) AS amt#32, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#30,17,2) AS profit#33]
(36) Exchange
-Input [5]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#30, amt#31, profit#32]
-Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#33]
+Input [5]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#31, amt#32, profit#33]
+Arguments: hashpartitioning(ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#34]
(37) Sort [codegen id : 9]
-Input [5]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#30, amt#31, profit#32]
-Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0
+Input [5]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#31, amt#32, profit#33]
+Arguments: [ss_customer_sk#1 ASC NULLS FIRST], false, 0
(38) Scan parquet default.customer
-Output [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
+Output [4]: [c_customer_sk#35, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_addr_sk:int,c_first_name:string,c_last_name:string>
(39) ColumnarToRow [codegen id : 10]
-Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
+Input [4]: [c_customer_sk#35, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
(40) Filter [codegen id : 10]
-Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
-Condition : (isnotnull(c_customer_sk#34) AND isnotnull(c_current_addr_sk#35))
+Input [4]: [c_customer_sk#35, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
+Condition : (isnotnull(c_customer_sk#35) AND isnotnull(c_current_addr_sk#36))
(41) Exchange
-Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
-Arguments: hashpartitioning(c_customer_sk#34, 5), ENSURE_REQUIREMENTS, [id=#38]
+Input [4]: [c_customer_sk#35, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
+Arguments: hashpartitioning(c_customer_sk#35, 5), ENSURE_REQUIREMENTS, [id=#39]
(42) Sort [codegen id : 11]
-Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
-Arguments: [c_customer_sk#34 ASC NULLS FIRST], false, 0
+Input [4]: [c_customer_sk#35, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
+Arguments: [c_customer_sk#35 ASC NULLS FIRST], false, 0
(43) SortMergeJoin [codegen id : 12]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#34]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#35]
Join condition: None
(44) Project [codegen id : 12]
-Output [7]: [ss_ticket_number#6, bought_city#30, amt#31, profit#32, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
-Input [9]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#30, amt#31, profit#32, c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
+Output [7]: [ss_ticket_number#5, bought_city#31, amt#32, profit#33, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
+Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#31, amt#32, profit#33, c_customer_sk#35, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
(45) Exchange
-Input [7]: [ss_ticket_number#6, bought_city#30, amt#31, profit#32, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
-Arguments: hashpartitioning(c_current_addr_sk#35, 5), ENSURE_REQUIREMENTS, [id=#39]
+Input [7]: [ss_ticket_number#5, bought_city#31, amt#32, profit#33, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
+Arguments: hashpartitioning(c_current_addr_sk#36, 5), ENSURE_REQUIREMENTS, [id=#40]
(46) Sort [codegen id : 13]
-Input [7]: [ss_ticket_number#6, bought_city#30, amt#31, profit#32, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
-Arguments: [c_current_addr_sk#35 ASC NULLS FIRST], false, 0
+Input [7]: [ss_ticket_number#5, bought_city#31, amt#32, profit#33, c_current_addr_sk#36, c_first_name#37, c_last_name#38]
+Arguments: [c_current_addr_sk#36 ASC NULLS FIRST], false, 0
(47) ReusedExchange [Reuses operator id: 30]
-Output [2]: [ca_address_sk#21, ca_city#22]
+Output [2]: [ca_address_sk#22, ca_city#23]
(48) Sort [codegen id : 15]
-Input [2]: [ca_address_sk#21, ca_city#22]
-Arguments: [ca_address_sk#21 ASC NULLS FIRST], false, 0
+Input [2]: [ca_address_sk#22, ca_city#23]
+Arguments: [ca_address_sk#22 ASC NULLS FIRST], false, 0
(49) SortMergeJoin [codegen id : 16]
-Left keys [1]: [c_current_addr_sk#35]
-Right keys [1]: [ca_address_sk#21]
-Join condition: NOT (ca_city#22 = bought_city#30)
+Left keys [1]: [c_current_addr_sk#36]
+Right keys [1]: [ca_address_sk#22]
+Join condition: NOT (ca_city#23 = bought_city#31)
(50) Project [codegen id : 16]
-Output [7]: [c_last_name#37, c_first_name#36, ca_city#22, bought_city#30, ss_ticket_number#6, amt#31, profit#32]
-Input [9]: [ss_ticket_number#6, bought_city#30, amt#31, profit#32, c_current_addr_sk#35, c_first_name#36, c_last_name#37, ca_address_sk#21, ca_city#22]
+Output [7]: [c_last_name#38, c_first_name#37, ca_city#23, bought_city#31, ss_ticket_number#5, amt#32, profit#33]
+Input [9]: [ss_ticket_number#5, bought_city#31, amt#32, profit#33, c_current_addr_sk#36, c_first_name#37, c_last_name#38, ca_address_sk#22, ca_city#23]
(51) TakeOrderedAndProject
-Input [7]: [c_last_name#37, c_first_name#36, ca_city#22, bought_city#30, ss_ticket_number#6, amt#31, profit#32]
-Arguments: 100, [c_last_name#37 ASC NULLS FIRST, c_first_name#36 ASC NULLS FIRST, ca_city#22 ASC NULLS FIRST, bought_city#30 ASC NULLS FIRST, ss_ticket_number#6 ASC NULLS FIRST], [c_last_name#37, c_first_name#36, ca_city#22, bought_city#30, ss_ticket_number#6, amt#31, profit#32]
+Input [7]: [c_last_name#38, c_first_name#37, ca_city#23, bought_city#31, ss_ticket_number#5, amt#32, profit#33]
+Arguments: 100, [c_last_name#38 ASC NULLS FIRST, c_first_name#37 ASC NULLS FIRST, ca_city#23 ASC NULLS FIRST, bought_city#31 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#38, c_first_name#37, ca_city#23, bought_city#31, ss_ticket_number#5, amt#32, profit#33]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+ReusedExchange (52)
+
+
+(52) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#10]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/simplified.txt
index bc83e3b..e3a4549 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46.sf100/simplified.txt
@@ -32,10 +32,12 @@ TakeOrderedAndProject [c_last_name,c_first_name,ca_city,bought_city,ss_ticket_nu
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_coupon_amt,ss_net_profit]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_coupon_amt,ss_net_profit]
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_coupon_amt,ss_net_profit,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #4
InputAdapter
BroadcastExchange #4
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt
index 4168b0b..951558c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/explain.txt
@@ -45,197 +45,208 @@ TakeOrderedAndProject (43)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
+Output [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [In(ss_sold_date_sk, [2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,2452232,2451874,2451581,2451329,2451223,2451783 [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_coupon_amt:decimal(7,2),ss_net_profit:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [ss_sold_date_sk#8 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,2452232,2451874,2451581,2451329,2451223, [...]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_coupon_amt:decimal(7,2),ss_net_profit:decimal(7,2)>
(2) ColumnarToRow [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Condition : (((((ss_sold_date_sk#1 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,2452232,2451874,2451581,2451329,2451223,24 [...]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
+Condition : (((isnotnull(ss_store_sk#4) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_addr_sk#3)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Output [3]: [d_date_sk#10, d_year#11, d_dow#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_dow, [6,0]), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2451910,24522 [...]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dow:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
-Condition : (((d_dow#11 IN (6,0) AND d_year#10 IN (1999,2000,2001)) AND d_date_sk#9 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504,2 [...]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
+Condition : (((d_dow#12 IN (6,0) AND d_year#11 IN (1999,2000,2001)) AND d_date_sk#10 INSET (2451790,2451609,2451294,2451658,2452099,2451482,2451700,2452035,2452274,2451258,2451847,2451714,2451937,2451860,2451601,2451573,2451686,2452008,2451454,2451882,2451832,2452259,2451671,2451903,2451497,2452162,2451322,2451517,2451434,2451273,2451405,2452105,2451924,2452050,2452126,2452203,2451818,2451559,2451853,2451238,2451209,2451357,2451959,2452239,2451608,2452141,2452252,2451623,2451867,2451504, [...]
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#9]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Output [1]: [d_date_sk#10]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
(8) BroadcastExchange
-Input [1]: [d_date_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [1]: [d_date_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(9) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(10) Project [codegen id : 5]
-Output [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, d_date_sk#9]
+Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8, d_date_sk#10]
(11) Scan parquet default.store
-Output [2]: [s_store_sk#13, s_city#14]
+Output [2]: [s_store_sk#14, s_city#15]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_city, [Midway,Concord,Spring Hill,Brownsville,Greenville]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_city:string>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#13, s_city#14]
+Input [2]: [s_store_sk#14, s_city#15]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#13, s_city#14]
-Condition : (s_city#14 IN (Midway,Concord,Spring Hill,Brownsville,Greenville) AND isnotnull(s_store_sk#13))
+Input [2]: [s_store_sk#14, s_city#15]
+Condition : (s_city#15 IN (Midway,Concord,Spring Hill,Brownsville,Greenville) AND isnotnull(s_store_sk#14))
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#13]
-Input [2]: [s_store_sk#13, s_city#14]
+Output [1]: [s_store_sk#14]
+Input [2]: [s_store_sk#14, s_city#15]
(15) BroadcastExchange
-Input [1]: [s_store_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15]
+Input [1]: [s_store_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
(16) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_store_sk#5]
-Right keys [1]: [s_store_sk#13]
+Left keys [1]: [ss_store_sk#4]
+Right keys [1]: [s_store_sk#14]
Join condition: None
(17) Project [codegen id : 5]
-Output [6]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, s_store_sk#13]
+Output [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, s_store_sk#14]
(18) Scan parquet default.household_demographics
-Output [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
+Output [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
+Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
(20) Filter [codegen id : 3]
-Input [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
-Condition : (((hd_dep_count#17 = 5) OR (hd_vehicle_count#18 = 3)) AND isnotnull(hd_demo_sk#16))
+Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Condition : (((hd_dep_count#18 = 5) OR (hd_vehicle_count#19 = 3)) AND isnotnull(hd_demo_sk#17))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#16]
-Input [3]: [hd_demo_sk#16, hd_dep_count#17, hd_vehicle_count#18]
+Output [1]: [hd_demo_sk#17]
+Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#16]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19]
+Input [1]: [hd_demo_sk#17]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
(23) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#16]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#17]
Join condition: None
(24) Project [codegen id : 5]
-Output [5]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, hd_demo_sk#16]
+Output [5]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#17]
(25) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#20, ca_city#21]
+Output [2]: [ca_address_sk#21, ca_city#22]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)]
ReadSchema: struct<ca_address_sk:int,ca_city:string>
(26) ColumnarToRow [codegen id : 4]
-Input [2]: [ca_address_sk#20, ca_city#21]
+Input [2]: [ca_address_sk#21, ca_city#22]
(27) Filter [codegen id : 4]
-Input [2]: [ca_address_sk#20, ca_city#21]
-Condition : (isnotnull(ca_address_sk#20) AND isnotnull(ca_city#21))
+Input [2]: [ca_address_sk#21, ca_city#22]
+Condition : (isnotnull(ca_address_sk#21) AND isnotnull(ca_city#22))
(28) BroadcastExchange
-Input [2]: [ca_address_sk#20, ca_city#21]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22]
+Input [2]: [ca_address_sk#21, ca_city#22]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23]
(29) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_addr_sk#4]
-Right keys [1]: [ca_address_sk#20]
+Left keys [1]: [ss_addr_sk#3]
+Right keys [1]: [ca_address_sk#21]
Join condition: None
(30) Project [codegen id : 5]
-Output [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, ca_city#21]
-Input [7]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, ca_address_sk#20, ca_city#21]
+Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#22]
+Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_address_sk#21, ca_city#22]
(31) HashAggregate [codegen id : 5]
-Input [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, ca_city#21]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#21]
-Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#7)), partial_sum(UnscaledValue(ss_net_profit#8))]
-Aggregate Attributes [2]: [sum#23, sum#24]
-Results [6]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#21, sum#25, sum#26]
+Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ca_city#22]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#22]
+Functions [2]: [partial_sum(UnscaledValue(ss_coupon_amt#6)), partial_sum(UnscaledValue(ss_net_profit#7))]
+Aggregate Attributes [2]: [sum#24, sum#25]
+Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#22, sum#26, sum#27]
(32) Exchange
-Input [6]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#21, sum#25, sum#26]
-Arguments: hashpartitioning(ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#21, 5), ENSURE_REQUIREMENTS, [id=#27]
+Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#22, sum#26, sum#27]
+Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#22, 5), ENSURE_REQUIREMENTS, [id=#28]
(33) HashAggregate [codegen id : 8]
-Input [6]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#21, sum#25, sum#26]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#21]
-Functions [2]: [sum(UnscaledValue(ss_coupon_amt#7)), sum(UnscaledValue(ss_net_profit#8))]
-Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#7))#28, sum(UnscaledValue(ss_net_profit#8))#29]
-Results [5]: [ss_ticket_number#6, ss_customer_sk#2, ca_city#21 AS bought_city#30, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#7))#28,17,2) AS amt#31, MakeDecimal(sum(UnscaledValue(ss_net_profit#8))#29,17,2) AS profit#32]
+Input [6]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#22, sum#26, sum#27]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#22]
+Functions [2]: [sum(UnscaledValue(ss_coupon_amt#6)), sum(UnscaledValue(ss_net_profit#7))]
+Aggregate Attributes [2]: [sum(UnscaledValue(ss_coupon_amt#6))#29, sum(UnscaledValue(ss_net_profit#7))#30]
+Results [5]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#22 AS bought_city#31, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#6))#29,17,2) AS amt#32, MakeDecimal(sum(UnscaledValue(ss_net_profit#7))#30,17,2) AS profit#33]
(34) Scan parquet default.customer
-Output [4]: [c_customer_sk#33, c_current_addr_sk#34, c_first_name#35, c_last_name#36]
+Output [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_addr_sk:int,c_first_name:string,c_last_name:string>
(35) ColumnarToRow [codegen id : 6]
-Input [4]: [c_customer_sk#33, c_current_addr_sk#34, c_first_name#35, c_last_name#36]
+Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
(36) Filter [codegen id : 6]
-Input [4]: [c_customer_sk#33, c_current_addr_sk#34, c_first_name#35, c_last_name#36]
-Condition : (isnotnull(c_customer_sk#33) AND isnotnull(c_current_addr_sk#34))
+Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
+Condition : (isnotnull(c_customer_sk#34) AND isnotnull(c_current_addr_sk#35))
(37) BroadcastExchange
-Input [4]: [c_customer_sk#33, c_current_addr_sk#34, c_first_name#35, c_last_name#36]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#37]
+Input [4]: [c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#38]
(38) BroadcastHashJoin [codegen id : 8]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#33]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#34]
Join condition: None
(39) Project [codegen id : 8]
-Output [7]: [ss_ticket_number#6, bought_city#30, amt#31, profit#32, c_current_addr_sk#34, c_first_name#35, c_last_name#36]
-Input [9]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#30, amt#31, profit#32, c_customer_sk#33, c_current_addr_sk#34, c_first_name#35, c_last_name#36]
+Output [7]: [ss_ticket_number#5, bought_city#31, amt#32, profit#33, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
+Input [9]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#31, amt#32, profit#33, c_customer_sk#34, c_current_addr_sk#35, c_first_name#36, c_last_name#37]
(40) ReusedExchange [Reuses operator id: 28]
-Output [2]: [ca_address_sk#20, ca_city#21]
+Output [2]: [ca_address_sk#21, ca_city#22]
(41) BroadcastHashJoin [codegen id : 8]
-Left keys [1]: [c_current_addr_sk#34]
-Right keys [1]: [ca_address_sk#20]
-Join condition: NOT (ca_city#21 = bought_city#30)
+Left keys [1]: [c_current_addr_sk#35]
+Right keys [1]: [ca_address_sk#21]
+Join condition: NOT (ca_city#22 = bought_city#31)
(42) Project [codegen id : 8]
-Output [7]: [c_last_name#36, c_first_name#35, ca_city#21, bought_city#30, ss_ticket_number#6, amt#31, profit#32]
-Input [9]: [ss_ticket_number#6, bought_city#30, amt#31, profit#32, c_current_addr_sk#34, c_first_name#35, c_last_name#36, ca_address_sk#20, ca_city#21]
+Output [7]: [c_last_name#37, c_first_name#36, ca_city#22, bought_city#31, ss_ticket_number#5, amt#32, profit#33]
+Input [9]: [ss_ticket_number#5, bought_city#31, amt#32, profit#33, c_current_addr_sk#35, c_first_name#36, c_last_name#37, ca_address_sk#21, ca_city#22]
(43) TakeOrderedAndProject
-Input [7]: [c_last_name#36, c_first_name#35, ca_city#21, bought_city#30, ss_ticket_number#6, amt#31, profit#32]
-Arguments: 100, [c_last_name#36 ASC NULLS FIRST, c_first_name#35 ASC NULLS FIRST, ca_city#21 ASC NULLS FIRST, bought_city#30 ASC NULLS FIRST, ss_ticket_number#6 ASC NULLS FIRST], [c_last_name#36, c_first_name#35, ca_city#21, bought_city#30, ss_ticket_number#6, amt#31, profit#32]
+Input [7]: [c_last_name#37, c_first_name#36, ca_city#22, bought_city#31, ss_ticket_number#5, amt#32, profit#33]
+Arguments: 100, [c_last_name#37 ASC NULLS FIRST, c_first_name#36 ASC NULLS FIRST, ca_city#22 ASC NULLS FIRST, bought_city#31 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#37, c_first_name#36, ca_city#22, bought_city#31, ss_ticket_number#5, amt#32, profit#33]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+ReusedExchange (44)
+
+
+(44) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#10]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/simplified.txt
index abdc7a3..7f729f9 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q46/simplified.txt
@@ -17,10 +17,12 @@ TakeOrderedAndProject [c_last_name,c_first_name,ca_city,bought_city,ss_ticket_nu
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_coupon_amt,ss_net_profit]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_coupon_amt,ss_net_profit]
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_coupon_amt,ss_net_profit,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt
index e355716..02f680f 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/explain.txt
@@ -45,78 +45,89 @@ Input [2]: [d_date_sk#1, d_year#2]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4]
(6) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Output [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451149), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2451149), (ss_sold_date_sk#7 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
(8) Filter
-Input [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
-Condition : (((isnotnull(ss_sold_date_sk#5) AND (ss_sold_date_sk#5 >= 2451149)) AND (ss_sold_date_sk#5 <= 2451179)) AND isnotnull(ss_item_sk#6))
+Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
+Condition : isnotnull(ss_item_sk#5)
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [ss_sold_date_sk#7]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_year#2, ss_item_sk#6, ss_ext_sales_price#7]
-Input [5]: [d_date_sk#1, d_year#2, ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Output [3]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6]
+Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
(11) Scan parquet default.item
-Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
+Output [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,1), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_brand:string,i_manager_id:int>
(12) ColumnarToRow [codegen id : 2]
-Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
+Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
(13) Filter [codegen id : 2]
-Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
-Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 1)) AND isnotnull(i_item_sk#8))
+Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
+Condition : ((isnotnull(i_manager_id#12) AND (i_manager_id#12 = 1)) AND isnotnull(i_item_sk#9))
(14) Project [codegen id : 2]
-Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
-Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
+Output [3]: [i_item_sk#9, i_brand_id#10, i_brand#11]
+Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
(15) BroadcastExchange
-Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [3]: [i_item_sk#9, i_brand_id#10, i_brand#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#6]
-Right keys [1]: [i_item_sk#8]
+Left keys [1]: [ss_item_sk#5]
+Right keys [1]: [i_item_sk#9]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_year#2, ss_ext_sales_price#7, i_brand_id#9, i_brand#10]
-Input [6]: [d_year#2, ss_item_sk#6, ss_ext_sales_price#7, i_item_sk#8, i_brand_id#9, i_brand#10]
+Output [4]: [d_year#2, ss_ext_sales_price#6, i_brand_id#10, i_brand#11]
+Input [6]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#9, i_brand_id#10, i_brand#11]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_year#2, ss_ext_sales_price#7, i_brand_id#9, i_brand#10]
-Keys [3]: [d_year#2, i_brand#10, i_brand_id#9]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))]
-Aggregate Attributes [1]: [sum#13]
-Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
+Input [4]: [d_year#2, ss_ext_sales_price#6, i_brand_id#10, i_brand#11]
+Keys [3]: [d_year#2, i_brand#11, i_brand_id#10]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))]
+Aggregate Attributes [1]: [sum#14]
+Results [4]: [d_year#2, i_brand#11, i_brand_id#10, sum#15]
(19) Exchange
-Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
-Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15]
+Input [4]: [d_year#2, i_brand#11, i_brand_id#10, sum#15]
+Arguments: hashpartitioning(d_year#2, i_brand#11, i_brand_id#10, 5), ENSURE_REQUIREMENTS, [id=#16]
(20) HashAggregate [codegen id : 4]
-Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
-Keys [3]: [d_year#2, i_brand#10, i_brand_id#9]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#16]
-Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#16,17,2) AS ext_price#19]
+Input [4]: [d_year#2, i_brand#11, i_brand_id#10, sum#15]
+Keys [3]: [d_year#2, i_brand#11, i_brand_id#10]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#17]
+Results [4]: [d_year#2, i_brand_id#10 AS brand_id#18, i_brand#11 AS brand#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#17,17,2) AS ext_price#20]
(21) TakeOrderedAndProject
-Input [4]: [d_year#2, brand_id#17, brand#18, ext_price#19]
-Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [d_year#2, brand_id#17, brand#18, ext_price#19]
+Input [4]: [d_year#2, brand_id#18, brand#19, ext_price#20]
+Arguments: 100, [d_year#2 ASC NULLS FIRST, ext_price#20 DESC NULLS LAST, brand_id#18 ASC NULLS FIRST], [d_year#2, brand_id#18, brand#19, ext_price#20]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
+ReusedExchange (22)
+
+
+(22) ReusedExchange [Reuses operator id: 5]
+Output [2]: [d_date_sk#1, d_year#2]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/simplified.txt
index f4aaf3d..6caf326 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52.sf100/simplified.txt
@@ -17,10 +17,12 @@ TakeOrderedAndProject [d_year,ext_price,brand_id,brand]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_year,d_moy]
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_ext_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_year] #2
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt
index b95a55b..8d081d6 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/explain.txt
@@ -41,31 +41,32 @@ Output [2]: [d_date_sk#1, d_year#2]
Input [3]: [d_date_sk#1, d_year#2, d_moy#3]
(5) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Output [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451149), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2451149), (ss_sold_date_sk#6 <= 2451179), dynamicpruningexpression(true)]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
(7) Filter [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
-Condition : (((isnotnull(ss_sold_date_sk#4) AND (ss_sold_date_sk#4 >= 2451149)) AND (ss_sold_date_sk#4 <= 2451179)) AND isnotnull(ss_item_sk#5))
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
+Condition : isnotnull(ss_item_sk#4)
(8) BroadcastExchange
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
+Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7]
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [ss_sold_date_sk#6]
Join condition: None
(10) Project [codegen id : 3]
-Output [3]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6]
-Input [5]: [d_date_sk#1, d_year#2, ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Output [3]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5]
+Input [5]: [d_date_sk#1, d_year#2, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
(11) Scan parquet default.item
Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
@@ -90,18 +91,18 @@ Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#5]
+Left keys [1]: [ss_item_sk#4]
Right keys [1]: [i_item_sk#8]
Join condition: None
(17) Project [codegen id : 3]
-Output [4]: [d_year#2, ss_ext_sales_price#6, i_brand_id#9, i_brand#10]
-Input [6]: [d_year#2, ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#8, i_brand_id#9, i_brand#10]
+Output [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10]
+Input [6]: [d_year#2, ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10]
(18) HashAggregate [codegen id : 3]
-Input [4]: [d_year#2, ss_ext_sales_price#6, i_brand_id#9, i_brand#10]
+Input [4]: [d_year#2, ss_ext_sales_price#5, i_brand_id#9, i_brand#10]
Keys [3]: [d_year#2, i_brand#10, i_brand_id#9]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))]
Aggregate Attributes [1]: [sum#13]
Results [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
@@ -112,9 +113,9 @@ Arguments: hashpartitioning(d_year#2, i_brand#10, i_brand_id#9, 5), ENSURE_REQUI
(20) HashAggregate [codegen id : 4]
Input [4]: [d_year#2, i_brand#10, i_brand_id#9, sum#14]
Keys [3]: [d_year#2, i_brand#10, i_brand_id#9]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#16]
-Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#16,17,2) AS ext_price#19]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16]
+Results [4]: [d_year#2, i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS ext_price#19]
(21) TakeOrderedAndProject
Input [4]: [d_year#2, brand_id#17, brand#18, ext_price#19]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/simplified.txt
index ba48ad5..d16dd60 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q52/simplified.txt
@@ -17,10 +17,10 @@ TakeOrderedAndProject [d_year,ext_price,brand_id,brand]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_ext_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt
index 57c6f49..92db706 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/explain.txt
@@ -56,125 +56,136 @@ Input [2]: [i_item_sk#1, i_manufact_id#5]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(6) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
+Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451911), LessThanOrEqual(ss_sold_date_sk,2452275), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#14), (ss_sold_date_sk#14 >= 2451911), (ss_sold_date_sk#14 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [4]: [ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
+Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
(8) Filter
-Input [4]: [ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
-Condition : ((((isnotnull(ss_sold_date_sk#11) AND (ss_sold_date_sk#11 >= 2451911)) AND (ss_sold_date_sk#11 <= 2452275)) AND isnotnull(ss_item_sk#12)) AND isnotnull(ss_store_sk#13))
+Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
+Condition : (isnotnull(ss_item_sk#11) AND isnotnull(ss_store_sk#12))
(9) BroadcastHashJoin [codegen id : 4]
Left keys [1]: [i_item_sk#1]
-Right keys [1]: [ss_item_sk#12]
+Right keys [1]: [ss_item_sk#11]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [i_manufact_id#5, ss_sold_date_sk#11, ss_store_sk#13, ss_sales_price#14]
-Input [6]: [i_item_sk#1, i_manufact_id#5, ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
+Output [4]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
+Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
(11) Scan parquet default.store
-Output [1]: [s_store_sk#15]
+Output [1]: [s_store_sk#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int>
(12) ColumnarToRow [codegen id : 2]
-Input [1]: [s_store_sk#15]
+Input [1]: [s_store_sk#16]
(13) Filter [codegen id : 2]
-Input [1]: [s_store_sk#15]
-Condition : isnotnull(s_store_sk#15)
+Input [1]: [s_store_sk#16]
+Condition : isnotnull(s_store_sk#16)
(14) BroadcastExchange
-Input [1]: [s_store_sk#15]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16]
+Input [1]: [s_store_sk#16]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17]
(15) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#13]
-Right keys [1]: [s_store_sk#15]
+Left keys [1]: [ss_store_sk#12]
+Right keys [1]: [s_store_sk#16]
Join condition: None
(16) Project [codegen id : 4]
-Output [3]: [i_manufact_id#5, ss_sold_date_sk#11, ss_sales_price#14]
-Input [5]: [i_manufact_id#5, ss_sold_date_sk#11, ss_store_sk#13, ss_sales_price#14, s_store_sk#15]
+Output [3]: [i_manufact_id#5, ss_sales_price#13, ss_sold_date_sk#14]
+Input [5]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, s_store_sk#16]
(17) Scan parquet default.date_dim
-Output [3]: [d_date_sk#17, d_month_seq#18, d_qoy#19]
+Output [3]: [d_date_sk#18, d_month_seq#19, d_qoy#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_month_seq, [1222,1215,1223,1217,1214,1219,1213,1218,1220,1221,1216,1212]), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int,d_qoy:int>
(18) ColumnarToRow [codegen id : 3]
-Input [3]: [d_date_sk#17, d_month_seq#18, d_qoy#19]
+Input [3]: [d_date_sk#18, d_month_seq#19, d_qoy#20]
(19) Filter [codegen id : 3]
-Input [3]: [d_date_sk#17, d_month_seq#18, d_qoy#19]
-Condition : (((d_month_seq#18 INSET (1222,1215,1223,1217,1214,1219,1213,1218,1220,1221,1216,1212) AND (d_date_sk#17 >= 2451911)) AND (d_date_sk#17 <= 2452275)) AND isnotnull(d_date_sk#17))
+Input [3]: [d_date_sk#18, d_month_seq#19, d_qoy#20]
+Condition : (((d_month_seq#19 INSET (1222,1215,1223,1217,1214,1219,1213,1218,1220,1221,1216,1212) AND (d_date_sk#18 >= 2451911)) AND (d_date_sk#18 <= 2452275)) AND isnotnull(d_date_sk#18))
(20) Project [codegen id : 3]
-Output [2]: [d_date_sk#17, d_qoy#19]
-Input [3]: [d_date_sk#17, d_month_seq#18, d_qoy#19]
+Output [2]: [d_date_sk#18, d_qoy#20]
+Input [3]: [d_date_sk#18, d_month_seq#19, d_qoy#20]
(21) BroadcastExchange
-Input [2]: [d_date_sk#17, d_qoy#19]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
+Input [2]: [d_date_sk#18, d_qoy#20]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
(22) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#11]
-Right keys [1]: [d_date_sk#17]
+Left keys [1]: [ss_sold_date_sk#14]
+Right keys [1]: [d_date_sk#18]
Join condition: None
(23) Project [codegen id : 4]
-Output [3]: [i_manufact_id#5, ss_sales_price#14, d_qoy#19]
-Input [5]: [i_manufact_id#5, ss_sold_date_sk#11, ss_sales_price#14, d_date_sk#17, d_qoy#19]
+Output [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#20]
+Input [5]: [i_manufact_id#5, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#18, d_qoy#20]
(24) HashAggregate [codegen id : 4]
-Input [3]: [i_manufact_id#5, ss_sales_price#14, d_qoy#19]
-Keys [2]: [i_manufact_id#5, d_qoy#19]
-Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#14))]
-Aggregate Attributes [1]: [sum#21]
-Results [3]: [i_manufact_id#5, d_qoy#19, sum#22]
+Input [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#20]
+Keys [2]: [i_manufact_id#5, d_qoy#20]
+Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))]
+Aggregate Attributes [1]: [sum#22]
+Results [3]: [i_manufact_id#5, d_qoy#20, sum#23]
(25) Exchange
-Input [3]: [i_manufact_id#5, d_qoy#19, sum#22]
-Arguments: hashpartitioning(i_manufact_id#5, d_qoy#19, 5), ENSURE_REQUIREMENTS, [id=#23]
+Input [3]: [i_manufact_id#5, d_qoy#20, sum#23]
+Arguments: hashpartitioning(i_manufact_id#5, d_qoy#20, 5), ENSURE_REQUIREMENTS, [id=#24]
(26) HashAggregate [codegen id : 5]
-Input [3]: [i_manufact_id#5, d_qoy#19, sum#22]
-Keys [2]: [i_manufact_id#5, d_qoy#19]
-Functions [1]: [sum(UnscaledValue(ss_sales_price#14))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#14))#24]
-Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#24,17,2) AS sum_sales#25, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#24,17,2) AS _w0#26]
+Input [3]: [i_manufact_id#5, d_qoy#20, sum#23]
+Keys [2]: [i_manufact_id#5, d_qoy#20]
+Functions [1]: [sum(UnscaledValue(ss_sales_price#13))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#25]
+Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#25,17,2) AS sum_sales#26, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#25,17,2) AS _w0#27]
(27) Exchange
-Input [3]: [i_manufact_id#5, sum_sales#25, _w0#26]
-Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#27]
+Input [3]: [i_manufact_id#5, sum_sales#26, _w0#27]
+Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#28]
(28) Sort [codegen id : 6]
-Input [3]: [i_manufact_id#5, sum_sales#25, _w0#26]
+Input [3]: [i_manufact_id#5, sum_sales#26, _w0#27]
Arguments: [i_manufact_id#5 ASC NULLS FIRST], false, 0
(29) Window
-Input [3]: [i_manufact_id#5, sum_sales#25, _w0#26]
-Arguments: [avg(_w0#26) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#28], [i_manufact_id#5]
+Input [3]: [i_manufact_id#5, sum_sales#26, _w0#27]
+Arguments: [avg(_w0#27) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#29], [i_manufact_id#5]
(30) Filter [codegen id : 7]
-Input [4]: [i_manufact_id#5, sum_sales#25, _w0#26, avg_quarterly_sales#28]
-Condition : ((isnotnull(avg_quarterly_sales#28) AND (avg_quarterly_sales#28 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#25 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#28 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_quarterly_sales#28 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
+Input [4]: [i_manufact_id#5, sum_sales#26, _w0#27, avg_quarterly_sales#29]
+Condition : ((isnotnull(avg_quarterly_sales#29) AND (avg_quarterly_sales#29 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#26 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#29 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_quarterly_sales#29 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(31) Project [codegen id : 7]
-Output [3]: [i_manufact_id#5, sum_sales#25, avg_quarterly_sales#28]
-Input [4]: [i_manufact_id#5, sum_sales#25, _w0#26, avg_quarterly_sales#28]
+Output [3]: [i_manufact_id#5, sum_sales#26, avg_quarterly_sales#29]
+Input [4]: [i_manufact_id#5, sum_sales#26, _w0#27, avg_quarterly_sales#29]
(32) TakeOrderedAndProject
-Input [3]: [i_manufact_id#5, sum_sales#25, avg_quarterly_sales#28]
-Arguments: 100, [avg_quarterly_sales#28 ASC NULLS FIRST, sum_sales#25 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#25, avg_quarterly_sales#28]
+Input [3]: [i_manufact_id#5, sum_sales#26, avg_quarterly_sales#29]
+Arguments: 100, [avg_quarterly_sales#29 ASC NULLS FIRST, sum_sales#26 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#26, avg_quarterly_sales#29]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15
+ReusedExchange (33)
+
+
+(33) ReusedExchange [Reuses operator id: 21]
+Output [2]: [d_date_sk#18, d_qoy#20]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/simplified.txt
index 6b3f9b5..2e57ebb 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53.sf100/simplified.txt
@@ -16,9 +16,9 @@ TakeOrderedAndProject [avg_quarterly_sales,sum_sales,i_manufact_id]
HashAggregate [i_manufact_id,d_qoy,ss_sales_price] [sum,sum]
Project [i_manufact_id,ss_sales_price,d_qoy]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [i_manufact_id,ss_sold_date_sk,ss_sales_price]
+ Project [i_manufact_id,ss_sales_price,ss_sold_date_sk]
BroadcastHashJoin [ss_store_sk,s_store_sk]
- Project [i_manufact_id,ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Project [i_manufact_id,ss_store_sk,ss_sales_price,ss_sold_date_sk]
BroadcastHashJoin [i_item_sk,ss_item_sk]
InputAdapter
BroadcastExchange #3
@@ -28,19 +28,21 @@ TakeOrderedAndProject [avg_quarterly_sales,sum_sales,i_manufact_id]
ColumnarToRow
InputAdapter
Scan parquet default.item [i_item_sk,i_brand,i_class,i_category,i_manufact_id]
- Filter [ss_sold_date_sk,ss_item_sk,ss_store_sk]
+ Filter [ss_item_sk,ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_qoy] #4
InputAdapter
- BroadcastExchange #4
+ BroadcastExchange #5
WholeStageCodegen (2)
Filter [s_store_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store [s_store_sk]
InputAdapter
- BroadcastExchange #5
+ BroadcastExchange #4
WholeStageCodegen (3)
Project [d_date_sk,d_qoy]
Filter [d_month_seq,d_date_sk]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt
index aa65eeb..8b29f7c 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/explain.txt
@@ -52,129 +52,140 @@ Output [2]: [i_item_sk#1, i_manufact_id#5]
Input [5]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, i_manufact_id#5]
(5) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
+Output [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451911), LessThanOrEqual(ss_sold_date_sk,2452275), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#13), (ss_sold_date_sk#13 >= 2451911), (ss_sold_date_sk#13 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#13 IN dynamicpruning#14)]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
+Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
(7) Filter [codegen id : 1]
-Input [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
-Condition : ((((isnotnull(ss_sold_date_sk#10) AND (ss_sold_date_sk#10 >= 2451911)) AND (ss_sold_date_sk#10 <= 2452275)) AND isnotnull(ss_item_sk#11)) AND isnotnull(ss_store_sk#12))
+Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
+Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11))
(8) BroadcastExchange
-Input [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#14]
+Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15]
(9) BroadcastHashJoin [codegen id : 4]
Left keys [1]: [i_item_sk#1]
-Right keys [1]: [ss_item_sk#11]
+Right keys [1]: [ss_item_sk#10]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [i_manufact_id#5, ss_sold_date_sk#10, ss_store_sk#12, ss_sales_price#13]
-Input [6]: [i_item_sk#1, i_manufact_id#5, ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
+Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
+Input [6]: [i_item_sk#1, i_manufact_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
(11) Scan parquet default.date_dim
-Output [3]: [d_date_sk#15, d_month_seq#16, d_qoy#17]
+Output [3]: [d_date_sk#16, d_month_seq#17, d_qoy#18]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_month_seq, [1222,1215,1223,1217,1214,1219,1213,1218,1220,1221,1216,1212]), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int,d_qoy:int>
(12) ColumnarToRow [codegen id : 2]
-Input [3]: [d_date_sk#15, d_month_seq#16, d_qoy#17]
+Input [3]: [d_date_sk#16, d_month_seq#17, d_qoy#18]
(13) Filter [codegen id : 2]
-Input [3]: [d_date_sk#15, d_month_seq#16, d_qoy#17]
-Condition : (((d_month_seq#16 INSET (1222,1215,1223,1217,1214,1219,1213,1218,1220,1221,1216,1212) AND (d_date_sk#15 >= 2451911)) AND (d_date_sk#15 <= 2452275)) AND isnotnull(d_date_sk#15))
+Input [3]: [d_date_sk#16, d_month_seq#17, d_qoy#18]
+Condition : (((d_month_seq#17 INSET (1222,1215,1223,1217,1214,1219,1213,1218,1220,1221,1216,1212) AND (d_date_sk#16 >= 2451911)) AND (d_date_sk#16 <= 2452275)) AND isnotnull(d_date_sk#16))
(14) Project [codegen id : 2]
-Output [2]: [d_date_sk#15, d_qoy#17]
-Input [3]: [d_date_sk#15, d_month_seq#16, d_qoy#17]
+Output [2]: [d_date_sk#16, d_qoy#18]
+Input [3]: [d_date_sk#16, d_month_seq#17, d_qoy#18]
(15) BroadcastExchange
-Input [2]: [d_date_sk#15, d_qoy#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18]
+Input [2]: [d_date_sk#16, d_qoy#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#10]
-Right keys [1]: [d_date_sk#15]
+Left keys [1]: [ss_sold_date_sk#13]
+Right keys [1]: [d_date_sk#16]
Join condition: None
(17) Project [codegen id : 4]
-Output [4]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, d_qoy#17]
-Input [6]: [i_manufact_id#5, ss_sold_date_sk#10, ss_store_sk#12, ss_sales_price#13, d_date_sk#15, d_qoy#17]
+Output [4]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#18]
+Input [6]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_qoy#18]
(18) Scan parquet default.store
-Output [1]: [s_store_sk#19]
+Output [1]: [s_store_sk#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int>
(19) ColumnarToRow [codegen id : 3]
-Input [1]: [s_store_sk#19]
+Input [1]: [s_store_sk#20]
(20) Filter [codegen id : 3]
-Input [1]: [s_store_sk#19]
-Condition : isnotnull(s_store_sk#19)
+Input [1]: [s_store_sk#20]
+Condition : isnotnull(s_store_sk#20)
(21) BroadcastExchange
-Input [1]: [s_store_sk#19]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20]
+Input [1]: [s_store_sk#20]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21]
(22) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#12]
-Right keys [1]: [s_store_sk#19]
+Left keys [1]: [ss_store_sk#11]
+Right keys [1]: [s_store_sk#20]
Join condition: None
(23) Project [codegen id : 4]
-Output [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#17]
-Input [5]: [i_manufact_id#5, ss_store_sk#12, ss_sales_price#13, d_qoy#17, s_store_sk#19]
+Output [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#18]
+Input [5]: [i_manufact_id#5, ss_store_sk#11, ss_sales_price#12, d_qoy#18, s_store_sk#20]
(24) HashAggregate [codegen id : 4]
-Input [3]: [i_manufact_id#5, ss_sales_price#13, d_qoy#17]
-Keys [2]: [i_manufact_id#5, d_qoy#17]
-Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))]
-Aggregate Attributes [1]: [sum#21]
-Results [3]: [i_manufact_id#5, d_qoy#17, sum#22]
+Input [3]: [i_manufact_id#5, ss_sales_price#12, d_qoy#18]
+Keys [2]: [i_manufact_id#5, d_qoy#18]
+Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))]
+Aggregate Attributes [1]: [sum#22]
+Results [3]: [i_manufact_id#5, d_qoy#18, sum#23]
(25) Exchange
-Input [3]: [i_manufact_id#5, d_qoy#17, sum#22]
-Arguments: hashpartitioning(i_manufact_id#5, d_qoy#17, 5), ENSURE_REQUIREMENTS, [id=#23]
+Input [3]: [i_manufact_id#5, d_qoy#18, sum#23]
+Arguments: hashpartitioning(i_manufact_id#5, d_qoy#18, 5), ENSURE_REQUIREMENTS, [id=#24]
(26) HashAggregate [codegen id : 5]
-Input [3]: [i_manufact_id#5, d_qoy#17, sum#22]
-Keys [2]: [i_manufact_id#5, d_qoy#17]
-Functions [1]: [sum(UnscaledValue(ss_sales_price#13))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#24]
-Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#24,17,2) AS sum_sales#25, cast(MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#24,17,2) as bigint) AS _w0#26]
+Input [3]: [i_manufact_id#5, d_qoy#18, sum#23]
+Keys [2]: [i_manufact_id#5, d_qoy#18]
+Functions [1]: [sum(UnscaledValue(ss_sales_price#12))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#25]
+Results [3]: [i_manufact_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#25,17,2) AS sum_sales#26, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#25,17,2) AS _w0#27]
(27) Exchange
-Input [3]: [i_manufact_id#5, sum_sales#25, _w0#26]
-Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#27]
+Input [3]: [i_manufact_id#5, sum_sales#26, _w0#27]
+Arguments: hashpartitioning(i_manufact_id#5, 5), ENSURE_REQUIREMENTS, [id=#28]
(28) Sort [codegen id : 6]
-Input [3]: [i_manufact_id#5, sum_sales#25, _w0#26]
+Input [3]: [i_manufact_id#5, sum_sales#26, _w0#27]
Arguments: [i_manufact_id#5 ASC NULLS FIRST], false, 0
(29) Window
-Input [3]: [i_manufact_id#5, sum_sales#25, _w0#26]
-Arguments: [avg(_w0#26) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#28], [i_manufact_id#5]
+Input [3]: [i_manufact_id#5, sum_sales#26, _w0#27]
+Arguments: [avg(_w0#27) windowspecdefinition(i_manufact_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_quarterly_sales#29], [i_manufact_id#5]
(30) Filter [codegen id : 7]
-Input [4]: [i_manufact_id#5, sum_sales#25, _w0#26, avg_quarterly_sales#28]
-Condition : (((isnotnull(avg_quarterly_sales#28) AND isnotnull(sum_sales#25)) AND (avg_quarterly_sales#28 > 0.0)) AND ((abs((cast(sum_sales#25 as double) - avg_quarterly_sales#28)) / avg_quarterly_sales#28) > 0.1))
+Input [4]: [i_manufact_id#5, sum_sales#26, _w0#27, avg_quarterly_sales#29]
+Condition : ((isnotnull(avg_quarterly_sales#29) AND (avg_quarterly_sales#29 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#26 as decimal(22,6))) - promote_precision(cast(avg_quarterly_sales#29 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_quarterly_sales#29 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(31) Project [codegen id : 7]
-Output [3]: [i_manufact_id#5, sum_sales#25, avg_quarterly_sales#28]
-Input [4]: [i_manufact_id#5, sum_sales#25, _w0#26, avg_quarterly_sales#28]
+Output [3]: [i_manufact_id#5, sum_sales#26, avg_quarterly_sales#29]
+Input [4]: [i_manufact_id#5, sum_sales#26, _w0#27, avg_quarterly_sales#29]
(32) TakeOrderedAndProject
-Input [3]: [i_manufact_id#5, sum_sales#25, avg_quarterly_sales#28]
-Arguments: 100, [avg_quarterly_sales#28 ASC NULLS FIRST, sum_sales#25 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#25, avg_quarterly_sales#28]
+Input [3]: [i_manufact_id#5, sum_sales#26, avg_quarterly_sales#29]
+Arguments: 100, [avg_quarterly_sales#29 ASC NULLS FIRST, sum_sales#26 ASC NULLS FIRST, i_manufact_id#5 ASC NULLS FIRST], [i_manufact_id#5, sum_sales#26, avg_quarterly_sales#29]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#13 IN dynamicpruning#14
+ReusedExchange (33)
+
+
+(33) ReusedExchange [Reuses operator id: 15]
+Output [2]: [d_date_sk#16, d_qoy#18]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/simplified.txt
index 0e01f08..d67def8 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q53/simplified.txt
@@ -18,7 +18,7 @@ TakeOrderedAndProject [avg_quarterly_sales,sum_sales,i_manufact_id]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [i_manufact_id,ss_store_sk,ss_sales_price,d_qoy]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [i_manufact_id,ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Project [i_manufact_id,ss_store_sk,ss_sales_price,ss_sold_date_sk]
BroadcastHashJoin [i_item_sk,ss_item_sk]
Project [i_item_sk,i_manufact_id]
Filter [i_category,i_class,i_brand,i_item_sk]
@@ -28,10 +28,12 @@ TakeOrderedAndProject [avg_quarterly_sales,sum_sales,i_manufact_id]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk,ss_store_sk]
+ Filter [ss_item_sk,ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_qoy] #4
InputAdapter
BroadcastExchange #4
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt
index 93c69b1..df4d94f 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/explain.txt
@@ -45,78 +45,89 @@ Input [1]: [d_date_sk#1]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#4]
(6) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Output [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2452215), LessThanOrEqual(ss_sold_date_sk,2452244), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#7), (ss_sold_date_sk#7 >= 2452215), (ss_sold_date_sk#7 <= 2452244), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
(8) Filter
-Input [3]: [ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
-Condition : (((isnotnull(ss_sold_date_sk#5) AND (ss_sold_date_sk#5 >= 2452215)) AND (ss_sold_date_sk#5 <= 2452244)) AND isnotnull(ss_item_sk#6))
+Input [3]: [ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
+Condition : isnotnull(ss_item_sk#5)
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [ss_sold_date_sk#7]
Join condition: None
(10) Project [codegen id : 3]
-Output [2]: [ss_item_sk#6, ss_ext_sales_price#7]
-Input [4]: [d_date_sk#1, ss_sold_date_sk#5, ss_item_sk#6, ss_ext_sales_price#7]
+Output [2]: [ss_item_sk#5, ss_ext_sales_price#6]
+Input [4]: [d_date_sk#1, ss_item_sk#5, ss_ext_sales_price#6, ss_sold_date_sk#7]
(11) Scan parquet default.item
-Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
+Output [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manager_id), EqualTo(i_manager_id,48), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_brand:string,i_manager_id:int>
(12) ColumnarToRow [codegen id : 2]
-Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
+Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
(13) Filter [codegen id : 2]
-Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
-Condition : ((isnotnull(i_manager_id#11) AND (i_manager_id#11 = 48)) AND isnotnull(i_item_sk#8))
+Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
+Condition : ((isnotnull(i_manager_id#12) AND (i_manager_id#12 = 48)) AND isnotnull(i_item_sk#9))
(14) Project [codegen id : 2]
-Output [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
-Input [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
+Output [3]: [i_item_sk#9, i_brand_id#10, i_brand#11]
+Input [4]: [i_item_sk#9, i_brand_id#10, i_brand#11, i_manager_id#12]
(15) BroadcastExchange
-Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [3]: [i_item_sk#9, i_brand_id#10, i_brand#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#6]
-Right keys [1]: [i_item_sk#8]
+Left keys [1]: [ss_item_sk#5]
+Right keys [1]: [i_item_sk#9]
Join condition: None
(17) Project [codegen id : 3]
-Output [3]: [ss_ext_sales_price#7, i_brand_id#9, i_brand#10]
-Input [5]: [ss_item_sk#6, ss_ext_sales_price#7, i_item_sk#8, i_brand_id#9, i_brand#10]
+Output [3]: [ss_ext_sales_price#6, i_brand_id#10, i_brand#11]
+Input [5]: [ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#9, i_brand_id#10, i_brand#11]
(18) HashAggregate [codegen id : 3]
-Input [3]: [ss_ext_sales_price#7, i_brand_id#9, i_brand#10]
-Keys [2]: [i_brand#10, i_brand_id#9]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#7))]
-Aggregate Attributes [1]: [sum#13]
-Results [3]: [i_brand#10, i_brand_id#9, sum#14]
+Input [3]: [ss_ext_sales_price#6, i_brand_id#10, i_brand#11]
+Keys [2]: [i_brand#11, i_brand_id#10]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))]
+Aggregate Attributes [1]: [sum#14]
+Results [3]: [i_brand#11, i_brand_id#10, sum#15]
(19) Exchange
-Input [3]: [i_brand#10, i_brand_id#9, sum#14]
-Arguments: hashpartitioning(i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [id=#15]
+Input [3]: [i_brand#11, i_brand_id#10, sum#15]
+Arguments: hashpartitioning(i_brand#11, i_brand_id#10, 5), ENSURE_REQUIREMENTS, [id=#16]
(20) HashAggregate [codegen id : 4]
-Input [3]: [i_brand#10, i_brand_id#9, sum#14]
-Keys [2]: [i_brand#10, i_brand_id#9]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#7))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#7))#16]
-Results [3]: [i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#16,17,2) AS ext_price#19]
+Input [3]: [i_brand#11, i_brand_id#10, sum#15]
+Keys [2]: [i_brand#11, i_brand_id#10]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#17]
+Results [3]: [i_brand_id#10 AS brand_id#18, i_brand#11 AS brand#19, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#17,17,2) AS ext_price#20]
(21) TakeOrderedAndProject
-Input [3]: [brand_id#17, brand#18, ext_price#19]
-Arguments: 100, [ext_price#19 DESC NULLS LAST, brand_id#17 ASC NULLS FIRST], [brand_id#17, brand#18, ext_price#19]
+Input [3]: [brand_id#18, brand#19, ext_price#20]
+Arguments: 100, [ext_price#20 DESC NULLS LAST, brand_id#18 ASC NULLS FIRST], [brand_id#18, brand#19, ext_price#20]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
+ReusedExchange (22)
+
+
+(22) ReusedExchange [Reuses operator id: 5]
+Output [1]: [d_date_sk#1]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/simplified.txt
index 4f375c8..48a1308 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55.sf100/simplified.txt
@@ -17,10 +17,12 @@ TakeOrderedAndProject [ext_price,brand_id,brand]
ColumnarToRow
InputAdapter
Scan parquet default.date_dim [d_date_sk,d_year,d_moy]
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_ext_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt
index 5841caa..a10fc32 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/explain.txt
@@ -41,31 +41,32 @@ Output [1]: [d_date_sk#1]
Input [3]: [d_date_sk#1, d_year#2, d_moy#3]
(5) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Output [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2452215), LessThanOrEqual(ss_sold_date_sk,2452244), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2452215), (ss_sold_date_sk#6 <= 2452244), dynamicpruningexpression(true)]
+PushedFilters: [IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_ext_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
(7) Filter [codegen id : 1]
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
-Condition : (((isnotnull(ss_sold_date_sk#4) AND (ss_sold_date_sk#4 >= 2452215)) AND (ss_sold_date_sk#4 <= 2452244)) AND isnotnull(ss_item_sk#5))
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
+Condition : isnotnull(ss_item_sk#4)
(8) BroadcastExchange
-Input [3]: [ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
+Input [3]: [ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
+Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#7]
(9) BroadcastHashJoin [codegen id : 3]
Left keys [1]: [d_date_sk#1]
-Right keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [ss_sold_date_sk#6]
Join condition: None
(10) Project [codegen id : 3]
-Output [2]: [ss_item_sk#5, ss_ext_sales_price#6]
-Input [4]: [d_date_sk#1, ss_sold_date_sk#4, ss_item_sk#5, ss_ext_sales_price#6]
+Output [2]: [ss_item_sk#4, ss_ext_sales_price#5]
+Input [4]: [d_date_sk#1, ss_item_sk#4, ss_ext_sales_price#5, ss_sold_date_sk#6]
(11) Scan parquet default.item
Output [4]: [i_item_sk#8, i_brand_id#9, i_brand#10, i_manager_id#11]
@@ -90,18 +91,18 @@ Input [3]: [i_item_sk#8, i_brand_id#9, i_brand#10]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(16) BroadcastHashJoin [codegen id : 3]
-Left keys [1]: [ss_item_sk#5]
+Left keys [1]: [ss_item_sk#4]
Right keys [1]: [i_item_sk#8]
Join condition: None
(17) Project [codegen id : 3]
-Output [3]: [ss_ext_sales_price#6, i_brand_id#9, i_brand#10]
-Input [5]: [ss_item_sk#5, ss_ext_sales_price#6, i_item_sk#8, i_brand_id#9, i_brand#10]
+Output [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10]
+Input [5]: [ss_item_sk#4, ss_ext_sales_price#5, i_item_sk#8, i_brand_id#9, i_brand#10]
(18) HashAggregate [codegen id : 3]
-Input [3]: [ss_ext_sales_price#6, i_brand_id#9, i_brand#10]
+Input [3]: [ss_ext_sales_price#5, i_brand_id#9, i_brand#10]
Keys [2]: [i_brand#10, i_brand_id#9]
-Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#6))]
+Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#5))]
Aggregate Attributes [1]: [sum#13]
Results [3]: [i_brand#10, i_brand_id#9, sum#14]
@@ -112,9 +113,9 @@ Arguments: hashpartitioning(i_brand#10, i_brand_id#9, 5), ENSURE_REQUIREMENTS, [
(20) HashAggregate [codegen id : 4]
Input [3]: [i_brand#10, i_brand_id#9, sum#14]
Keys [2]: [i_brand#10, i_brand_id#9]
-Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#6))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#6))#16]
-Results [3]: [i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#16,17,2) AS ext_price#19]
+Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#5))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#5))#16]
+Results [3]: [i_brand_id#9 AS brand_id#17, i_brand#10 AS brand#18, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#16,17,2) AS ext_price#19]
(21) TakeOrderedAndProject
Input [3]: [brand_id#17, brand#18, ext_price#19]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/simplified.txt
index bb2ef8e..9157bbe 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q55/simplified.txt
@@ -17,10 +17,10 @@ TakeOrderedAndProject [ext_price,brand_id,brand]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk]
+ Filter [ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_ext_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_ext_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt
index 6b5a14a..8513976 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/explain.txt
@@ -53,18 +53,19 @@ TakeOrderedAndProject (51)
(1) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#3)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>
(2) ColumnarToRow [codegen id : 2]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
(3) Filter [codegen id : 2]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
-Condition : (isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2))
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
+Condition : isnotnull(ss_store_sk#1)
(4) Scan parquet default.date_dim
Output [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
@@ -85,31 +86,31 @@ Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
(8) BroadcastHashJoin [codegen id : 2]
-Left keys [1]: [ss_sold_date_sk#1]
+Left keys [1]: [ss_sold_date_sk#3]
Right keys [1]: [d_date_sk#4]
Join condition: None
(9) Project [codegen id : 2]
-Output [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Input [6]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
+Output [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
(10) HashAggregate [codegen id : 2]
-Input [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_ [...]
+Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_ [...]
Aggregate Attributes [7]: [sum#8, sum#9, sum#10, sum#11, sum#12, sum#13, sum#14]
-Results [9]: [d_week_seq#5, ss_store_sk#2, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
+Results [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
(11) Exchange
-Input [9]: [d_week_seq#5, ss_store_sk#2, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
-Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#22]
+Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
+Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#22]
(12) HashAggregate [codegen id : 10]
-Input [9]: [d_week_seq#5, ss_store_sk#2, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledVal [...]
-Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null [...]
-Results [9]: [d_week_seq#5, ss_store_sk#2, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesda [...]
+Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledVal [...]
+Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null [...]
+Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesda [...]
(13) Scan parquet default.store
Output [3]: [s_store_sk#37, s_store_id#38, s_store_name#39]
@@ -130,13 +131,13 @@ Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#40]
(17) BroadcastHashJoin [codegen id : 10]
-Left keys [1]: [ss_store_sk#2]
+Left keys [1]: [ss_store_sk#1]
Right keys [1]: [s_store_sk#37]
Join condition: None
(18) Project [codegen id : 10]
Output [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39]
-Input [12]: [d_week_seq#5, ss_store_sk#2, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39]
+Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39]
(19) Scan parquet default.date_dim
Output [2]: [d_month_seq#41, d_week_seq#42]
@@ -170,48 +171,49 @@ Output [10]: [s_store_name#39 AS s_store_name1#44, d_week_seq#5 AS d_week_seq1#4
Input [11]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39, d_week_seq#42]
(26) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#3)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>
(27) ColumnarToRow [codegen id : 6]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
(28) Filter [codegen id : 6]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
-Condition : (isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2))
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
+Condition : isnotnull(ss_store_sk#1)
(29) ReusedExchange [Reuses operator id: 7]
Output [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
(30) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_sold_date_sk#1]
+Left keys [1]: [ss_sold_date_sk#3]
Right keys [1]: [d_date_sk#4]
Join condition: None
(31) Project [codegen id : 6]
-Output [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Input [6]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
+Output [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
(32) HashAggregate [codegen id : 6]
-Input [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [6]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_p [...]
+Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [6]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_p [...]
Aggregate Attributes [6]: [sum#54, sum#55, sum#56, sum#57, sum#58, sum#59]
-Results [8]: [d_week_seq#5, ss_store_sk#2, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
+Results [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
(33) Exchange
-Input [8]: [d_week_seq#5, ss_store_sk#2, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
-Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#66]
+Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
+Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#66]
(34) HashAggregate [codegen id : 9]
-Input [8]: [d_week_seq#5, ss_store_sk#2, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValu [...]
-Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#67, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#68, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END))#69, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END))#70, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#3 ELSE null [...]
-Results [8]: [d_week_seq#5, ss_store_sk#2, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#67,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#68,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END))#69,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursd [...]
+Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValu [...]
+Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#67, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#68, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END))#69, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END))#70, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#2 ELSE null [...]
+Results [8]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#67,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#68,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END))#69,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursd [...]
(35) Scan parquet default.store
Output [2]: [s_store_sk#37, s_store_id#38]
@@ -232,13 +234,13 @@ Input [2]: [s_store_sk#37, s_store_id#38]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#73]
(39) BroadcastHashJoin [codegen id : 9]
-Left keys [1]: [ss_store_sk#2]
+Left keys [1]: [ss_store_sk#1]
Right keys [1]: [s_store_sk#37]
Join condition: None
(40) Project [codegen id : 9]
Output [8]: [d_week_seq#5, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38]
-Input [10]: [d_week_seq#5, ss_store_sk#2, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38]
+Input [10]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38]
(41) Scan parquet default.date_dim
Output [2]: [d_month_seq#74, d_week_seq#75]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/simplified.txt
index 1ea8b48..2c77100 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59.sf100/simplified.txt
@@ -13,10 +13,10 @@ TakeOrderedAndProject [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_s
HashAggregate [d_week_seq,ss_store_sk,d_day_name,ss_sales_price] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum]
Project [ss_store_sk,ss_sales_price,d_week_seq,d_day_name]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_store_sk,ss_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
@@ -53,10 +53,10 @@ TakeOrderedAndProject [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_s
HashAggregate [d_week_seq,ss_store_sk,d_day_name,ss_sales_price] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum]
Project [ss_store_sk,ss_sales_price,d_week_seq,d_day_name]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_store_sk,ss_sales_price,ss_sold_date_sk]
InputAdapter
ReusedExchange [d_date_sk,d_week_seq,d_day_name] #2
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt
index 6b5a14a..8513976 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/explain.txt
@@ -53,18 +53,19 @@ TakeOrderedAndProject (51)
(1) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#3)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>
(2) ColumnarToRow [codegen id : 2]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
(3) Filter [codegen id : 2]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
-Condition : (isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2))
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
+Condition : isnotnull(ss_store_sk#1)
(4) Scan parquet default.date_dim
Output [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
@@ -85,31 +86,31 @@ Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#7]
(8) BroadcastHashJoin [codegen id : 2]
-Left keys [1]: [ss_sold_date_sk#1]
+Left keys [1]: [ss_sold_date_sk#3]
Right keys [1]: [d_date_sk#4]
Join condition: None
(9) Project [codegen id : 2]
-Output [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Input [6]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
+Output [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
(10) HashAggregate [codegen id : 2]
-Input [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_ [...]
+Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_ [...]
Aggregate Attributes [7]: [sum#8, sum#9, sum#10, sum#11, sum#12, sum#13, sum#14]
-Results [9]: [d_week_seq#5, ss_store_sk#2, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
+Results [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
(11) Exchange
-Input [9]: [d_week_seq#5, ss_store_sk#2, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
-Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#22]
+Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
+Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#22]
(12) HashAggregate [codegen id : 10]
-Input [9]: [d_week_seq#5, ss_store_sk#2, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledVal [...]
-Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null [...]
-Results [9]: [d_week_seq#5, ss_store_sk#2, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#3 ELSE null END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesda [...]
+Input [9]: [d_week_seq#5, ss_store_sk#1, sum#15, sum#16, sum#17, sum#18, sum#19, sum#20, sum#21]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledVal [...]
+Aggregate Attributes [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#23, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#24, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END))#25, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END))#26, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null [...]
+Results [9]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#23,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#24,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday) THEN ss_sales_price#2 ELSE null END))#25,17,2) AS tue_sales#32, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesda [...]
(13) Scan parquet default.store
Output [3]: [s_store_sk#37, s_store_id#38, s_store_name#39]
@@ -130,13 +131,13 @@ Input [3]: [s_store_sk#37, s_store_id#38, s_store_name#39]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#40]
(17) BroadcastHashJoin [codegen id : 10]
-Left keys [1]: [ss_store_sk#2]
+Left keys [1]: [ss_store_sk#1]
Right keys [1]: [s_store_sk#37]
Join condition: None
(18) Project [codegen id : 10]
Output [10]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39]
-Input [12]: [d_week_seq#5, ss_store_sk#2, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39]
+Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38, s_store_name#39]
(19) Scan parquet default.date_dim
Output [2]: [d_month_seq#41, d_week_seq#42]
@@ -170,48 +171,49 @@ Output [10]: [s_store_name#39 AS s_store_name1#44, d_week_seq#5 AS d_week_seq1#4
Input [11]: [d_week_seq#5, sun_sales#30, mon_sales#31, tue_sales#32, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38, s_store_name#39, d_week_seq#42]
(26) Scan parquet default.store_sales
-Output [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#3)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>
(27) ColumnarToRow [codegen id : 6]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
(28) Filter [codegen id : 6]
-Input [3]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3]
-Condition : (isnotnull(ss_sold_date_sk#1) AND isnotnull(ss_store_sk#2))
+Input [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
+Condition : isnotnull(ss_store_sk#1)
(29) ReusedExchange [Reuses operator id: 7]
Output [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
(30) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_sold_date_sk#1]
+Left keys [1]: [ss_sold_date_sk#3]
Right keys [1]: [d_date_sk#4]
Join condition: None
(31) Project [codegen id : 6]
-Output [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Input [6]: [ss_sold_date_sk#1, ss_store_sk#2, ss_sales_price#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
+Output [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
(32) HashAggregate [codegen id : 6]
-Input [4]: [ss_store_sk#2, ss_sales_price#3, d_week_seq#5, d_day_name#6]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [6]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_p [...]
+Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [6]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_p [...]
Aggregate Attributes [6]: [sum#54, sum#55, sum#56, sum#57, sum#58, sum#59]
-Results [8]: [d_week_seq#5, ss_store_sk#2, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
+Results [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
(33) Exchange
-Input [8]: [d_week_seq#5, ss_store_sk#2, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
-Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#2, 5), ENSURE_REQUIREMENTS, [id=#66]
+Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
+Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, [id=#66]
(34) HashAggregate [codegen id : 9]
-Input [8]: [d_week_seq#5, ss_store_sk#2, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
-Keys [2]: [d_week_seq#5, ss_store_sk#2]
-Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#3 ELSE null END)), sum(UnscaledValu [...]
-Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#67, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#68, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END))#69, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#3 ELSE null END))#70, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#3 ELSE null [...]
-Results [8]: [d_week_seq#5, ss_store_sk#2, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#3 ELSE null END))#67,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#3 ELSE null END))#68,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#3 ELSE null END))#69,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursd [...]
+Input [8]: [d_week_seq#5, ss_store_sk#1, sum#60, sum#61, sum#62, sum#63, sum#64, sum#65]
+Keys [2]: [d_week_seq#5, ss_store_sk#1]
+Functions [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#2 ELSE null END)), sum(UnscaledValu [...]
+Aggregate Attributes [6]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#67, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#68, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END))#69, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday) THEN ss_sales_price#2 ELSE null END))#70, sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday) THEN ss_sales_price#2 ELSE null [...]
+Results [8]: [d_week_seq#5, ss_store_sk#1, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday) THEN ss_sales_price#2 ELSE null END))#67,17,2) AS sun_sales#30, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday) THEN ss_sales_price#2 ELSE null END))#68,17,2) AS mon_sales#31, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 ELSE null END))#69,17,2) AS wed_sales#33, MakeDecimal(sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursd [...]
(35) Scan parquet default.store
Output [2]: [s_store_sk#37, s_store_id#38]
@@ -232,13 +234,13 @@ Input [2]: [s_store_sk#37, s_store_id#38]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#73]
(39) BroadcastHashJoin [codegen id : 9]
-Left keys [1]: [ss_store_sk#2]
+Left keys [1]: [ss_store_sk#1]
Right keys [1]: [s_store_sk#37]
Join condition: None
(40) Project [codegen id : 9]
Output [8]: [d_week_seq#5, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_id#38]
-Input [10]: [d_week_seq#5, ss_store_sk#2, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38]
+Input [10]: [d_week_seq#5, ss_store_sk#1, sun_sales#30, mon_sales#31, wed_sales#33, thu_sales#34, fri_sales#35, sat_sales#36, s_store_sk#37, s_store_id#38]
(41) Scan parquet default.date_dim
Output [2]: [d_month_seq#74, d_week_seq#75]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/simplified.txt
index 1ea8b48..2c77100 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q59/simplified.txt
@@ -13,10 +13,10 @@ TakeOrderedAndProject [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_s
HashAggregate [d_week_seq,ss_store_sk,d_day_name,ss_sales_price] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum]
Project [ss_store_sk,ss_sales_price,d_week_seq,d_day_name]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_store_sk,ss_sales_price,ss_sold_date_sk]
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
@@ -53,10 +53,10 @@ TakeOrderedAndProject [s_store_name1,s_store_id1,d_week_seq1,(sun_sales1 / sun_s
HashAggregate [d_week_seq,ss_store_sk,d_day_name,ss_sales_price] [sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum,sum]
Project [ss_store_sk,ss_sales_price,d_week_seq,d_day_name]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_store_sk,ss_sales_price,ss_sold_date_sk]
InputAdapter
ReusedExchange [d_date_sk,d_week_seq,d_day_name] #2
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt
index 23b7d4c..8e0aaf2 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/explain.txt
@@ -56,125 +56,136 @@ Input [2]: [i_item_sk#1, i_manager_id#5]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(6) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
+Output [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2452123), LessThanOrEqual(ss_sold_date_sk,2452487), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#14), (ss_sold_date_sk#14 >= 2452123), (ss_sold_date_sk#14 <= 2452487), dynamicpruningexpression(ss_sold_date_sk#14 IN dynamicpruning#15)]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(7) ColumnarToRow
-Input [4]: [ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
+Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
(8) Filter
-Input [4]: [ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
-Condition : ((((isnotnull(ss_sold_date_sk#11) AND (ss_sold_date_sk#11 >= 2452123)) AND (ss_sold_date_sk#11 <= 2452487)) AND isnotnull(ss_item_sk#12)) AND isnotnull(ss_store_sk#13))
+Input [4]: [ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
+Condition : (isnotnull(ss_item_sk#11) AND isnotnull(ss_store_sk#12))
(9) BroadcastHashJoin [codegen id : 4]
Left keys [1]: [i_item_sk#1]
-Right keys [1]: [ss_item_sk#12]
+Right keys [1]: [ss_item_sk#11]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [i_manager_id#5, ss_sold_date_sk#11, ss_store_sk#13, ss_sales_price#14]
-Input [6]: [i_item_sk#1, i_manager_id#5, ss_sold_date_sk#11, ss_item_sk#12, ss_store_sk#13, ss_sales_price#14]
+Output [4]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
+Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14]
(11) Scan parquet default.store
-Output [1]: [s_store_sk#15]
+Output [1]: [s_store_sk#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int>
(12) ColumnarToRow [codegen id : 2]
-Input [1]: [s_store_sk#15]
+Input [1]: [s_store_sk#16]
(13) Filter [codegen id : 2]
-Input [1]: [s_store_sk#15]
-Condition : isnotnull(s_store_sk#15)
+Input [1]: [s_store_sk#16]
+Condition : isnotnull(s_store_sk#16)
(14) BroadcastExchange
-Input [1]: [s_store_sk#15]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#16]
+Input [1]: [s_store_sk#16]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#17]
(15) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#13]
-Right keys [1]: [s_store_sk#15]
+Left keys [1]: [ss_store_sk#12]
+Right keys [1]: [s_store_sk#16]
Join condition: None
(16) Project [codegen id : 4]
-Output [3]: [i_manager_id#5, ss_sold_date_sk#11, ss_sales_price#14]
-Input [5]: [i_manager_id#5, ss_sold_date_sk#11, ss_store_sk#13, ss_sales_price#14, s_store_sk#15]
+Output [3]: [i_manager_id#5, ss_sales_price#13, ss_sold_date_sk#14]
+Input [5]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, ss_sold_date_sk#14, s_store_sk#16]
(17) Scan parquet default.date_dim
-Output [3]: [d_date_sk#17, d_month_seq#18, d_moy#19]
+Output [3]: [d_date_sk#18, d_month_seq#19, d_moy#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_month_seq, [1222,1228,1223,1227,1219,1226,1224,1225,1230,1220,1221,1229]), GreaterThanOrEqual(d_date_sk,2452123), LessThanOrEqual(d_date_sk,2452487), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int,d_moy:int>
(18) ColumnarToRow [codegen id : 3]
-Input [3]: [d_date_sk#17, d_month_seq#18, d_moy#19]
+Input [3]: [d_date_sk#18, d_month_seq#19, d_moy#20]
(19) Filter [codegen id : 3]
-Input [3]: [d_date_sk#17, d_month_seq#18, d_moy#19]
-Condition : (((d_month_seq#18 INSET (1222,1228,1223,1227,1219,1226,1224,1225,1230,1220,1221,1229) AND (d_date_sk#17 >= 2452123)) AND (d_date_sk#17 <= 2452487)) AND isnotnull(d_date_sk#17))
+Input [3]: [d_date_sk#18, d_month_seq#19, d_moy#20]
+Condition : (((d_month_seq#19 INSET (1222,1228,1223,1227,1219,1226,1224,1225,1230,1220,1221,1229) AND (d_date_sk#18 >= 2452123)) AND (d_date_sk#18 <= 2452487)) AND isnotnull(d_date_sk#18))
(20) Project [codegen id : 3]
-Output [2]: [d_date_sk#17, d_moy#19]
-Input [3]: [d_date_sk#17, d_month_seq#18, d_moy#19]
+Output [2]: [d_date_sk#18, d_moy#20]
+Input [3]: [d_date_sk#18, d_month_seq#19, d_moy#20]
(21) BroadcastExchange
-Input [2]: [d_date_sk#17, d_moy#19]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
+Input [2]: [d_date_sk#18, d_moy#20]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
(22) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#11]
-Right keys [1]: [d_date_sk#17]
+Left keys [1]: [ss_sold_date_sk#14]
+Right keys [1]: [d_date_sk#18]
Join condition: None
(23) Project [codegen id : 4]
-Output [3]: [i_manager_id#5, ss_sales_price#14, d_moy#19]
-Input [5]: [i_manager_id#5, ss_sold_date_sk#11, ss_sales_price#14, d_date_sk#17, d_moy#19]
+Output [3]: [i_manager_id#5, ss_sales_price#13, d_moy#20]
+Input [5]: [i_manager_id#5, ss_sales_price#13, ss_sold_date_sk#14, d_date_sk#18, d_moy#20]
(24) HashAggregate [codegen id : 4]
-Input [3]: [i_manager_id#5, ss_sales_price#14, d_moy#19]
-Keys [2]: [i_manager_id#5, d_moy#19]
-Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#14))]
-Aggregate Attributes [1]: [sum#21]
-Results [3]: [i_manager_id#5, d_moy#19, sum#22]
+Input [3]: [i_manager_id#5, ss_sales_price#13, d_moy#20]
+Keys [2]: [i_manager_id#5, d_moy#20]
+Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))]
+Aggregate Attributes [1]: [sum#22]
+Results [3]: [i_manager_id#5, d_moy#20, sum#23]
(25) Exchange
-Input [3]: [i_manager_id#5, d_moy#19, sum#22]
-Arguments: hashpartitioning(i_manager_id#5, d_moy#19, 5), ENSURE_REQUIREMENTS, [id=#23]
+Input [3]: [i_manager_id#5, d_moy#20, sum#23]
+Arguments: hashpartitioning(i_manager_id#5, d_moy#20, 5), ENSURE_REQUIREMENTS, [id=#24]
(26) HashAggregate [codegen id : 5]
-Input [3]: [i_manager_id#5, d_moy#19, sum#22]
-Keys [2]: [i_manager_id#5, d_moy#19]
-Functions [1]: [sum(UnscaledValue(ss_sales_price#14))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#14))#24]
-Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#24,17,2) AS sum_sales#25, MakeDecimal(sum(UnscaledValue(ss_sales_price#14))#24,17,2) AS _w0#26]
+Input [3]: [i_manager_id#5, d_moy#20, sum#23]
+Keys [2]: [i_manager_id#5, d_moy#20]
+Functions [1]: [sum(UnscaledValue(ss_sales_price#13))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#25]
+Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#25,17,2) AS sum_sales#26, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#25,17,2) AS _w0#27]
(27) Exchange
-Input [3]: [i_manager_id#5, sum_sales#25, _w0#26]
-Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#27]
+Input [3]: [i_manager_id#5, sum_sales#26, _w0#27]
+Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#28]
(28) Sort [codegen id : 6]
-Input [3]: [i_manager_id#5, sum_sales#25, _w0#26]
+Input [3]: [i_manager_id#5, sum_sales#26, _w0#27]
Arguments: [i_manager_id#5 ASC NULLS FIRST], false, 0
(29) Window
-Input [3]: [i_manager_id#5, sum_sales#25, _w0#26]
-Arguments: [avg(_w0#26) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#28], [i_manager_id#5]
+Input [3]: [i_manager_id#5, sum_sales#26, _w0#27]
+Arguments: [avg(_w0#27) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#29], [i_manager_id#5]
(30) Filter [codegen id : 7]
-Input [4]: [i_manager_id#5, sum_sales#25, _w0#26, avg_monthly_sales#28]
-Condition : ((isnotnull(avg_monthly_sales#28) AND (avg_monthly_sales#28 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#25 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#28 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#28 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
+Input [4]: [i_manager_id#5, sum_sales#26, _w0#27, avg_monthly_sales#29]
+Condition : ((isnotnull(avg_monthly_sales#29) AND (avg_monthly_sales#29 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#26 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#29 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#29 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(31) Project [codegen id : 7]
-Output [3]: [i_manager_id#5, sum_sales#25, avg_monthly_sales#28]
-Input [4]: [i_manager_id#5, sum_sales#25, _w0#26, avg_monthly_sales#28]
+Output [3]: [i_manager_id#5, sum_sales#26, avg_monthly_sales#29]
+Input [4]: [i_manager_id#5, sum_sales#26, _w0#27, avg_monthly_sales#29]
(32) TakeOrderedAndProject
-Input [3]: [i_manager_id#5, sum_sales#25, avg_monthly_sales#28]
-Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#28 ASC NULLS FIRST, sum_sales#25 ASC NULLS FIRST], [i_manager_id#5, sum_sales#25, avg_monthly_sales#28]
+Input [3]: [i_manager_id#5, sum_sales#26, avg_monthly_sales#29]
+Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#29 ASC NULLS FIRST, sum_sales#26 ASC NULLS FIRST], [i_manager_id#5, sum_sales#26, avg_monthly_sales#29]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 6 Hosting Expression = ss_sold_date_sk#14 IN dynamicpruning#15
+ReusedExchange (33)
+
+
+(33) ReusedExchange [Reuses operator id: 21]
+Output [2]: [d_date_sk#18, d_moy#20]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/simplified.txt
index 3570e17..d8e6d0d 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63.sf100/simplified.txt
@@ -16,9 +16,9 @@ TakeOrderedAndProject [i_manager_id,avg_monthly_sales,sum_sales]
HashAggregate [i_manager_id,d_moy,ss_sales_price] [sum,sum]
Project [i_manager_id,ss_sales_price,d_moy]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [i_manager_id,ss_sold_date_sk,ss_sales_price]
+ Project [i_manager_id,ss_sales_price,ss_sold_date_sk]
BroadcastHashJoin [ss_store_sk,s_store_sk]
- Project [i_manager_id,ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Project [i_manager_id,ss_store_sk,ss_sales_price,ss_sold_date_sk]
BroadcastHashJoin [i_item_sk,ss_item_sk]
InputAdapter
BroadcastExchange #3
@@ -28,19 +28,21 @@ TakeOrderedAndProject [i_manager_id,avg_monthly_sales,sum_sales]
ColumnarToRow
InputAdapter
Scan parquet default.item [i_item_sk,i_brand,i_class,i_category,i_manager_id]
- Filter [ss_sold_date_sk,ss_item_sk,ss_store_sk]
+ Filter [ss_item_sk,ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_moy] #4
InputAdapter
- BroadcastExchange #4
+ BroadcastExchange #5
WholeStageCodegen (2)
Filter [s_store_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store [s_store_sk]
InputAdapter
- BroadcastExchange #5
+ BroadcastExchange #4
WholeStageCodegen (3)
Project [d_date_sk,d_moy]
Filter [d_month_seq,d_date_sk]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt
index cbe5599..712ba76 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/explain.txt
@@ -52,129 +52,140 @@ Output [2]: [i_item_sk#1, i_manager_id#5]
Input [5]: [i_item_sk#1, i_brand#2, i_class#3, i_category#4, i_manager_id#5]
(5) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
+Output [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2452123), LessThanOrEqual(ss_sold_date_sk,2452487), IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#13), (ss_sold_date_sk#13 >= 2452123), (ss_sold_date_sk#13 <= 2452487), dynamicpruningexpression(ss_sold_date_sk#13 IN dynamicpruning#14)]
+PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(6) ColumnarToRow [codegen id : 1]
-Input [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
+Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
(7) Filter [codegen id : 1]
-Input [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
-Condition : ((((isnotnull(ss_sold_date_sk#10) AND (ss_sold_date_sk#10 >= 2452123)) AND (ss_sold_date_sk#10 <= 2452487)) AND isnotnull(ss_item_sk#11)) AND isnotnull(ss_store_sk#12))
+Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
+Condition : (isnotnull(ss_item_sk#10) AND isnotnull(ss_store_sk#11))
(8) BroadcastExchange
-Input [4]: [ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#14]
+Input [4]: [ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#15]
(9) BroadcastHashJoin [codegen id : 4]
Left keys [1]: [i_item_sk#1]
-Right keys [1]: [ss_item_sk#11]
+Right keys [1]: [ss_item_sk#10]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [i_manager_id#5, ss_sold_date_sk#10, ss_store_sk#12, ss_sales_price#13]
-Input [6]: [i_item_sk#1, i_manager_id#5, ss_sold_date_sk#10, ss_item_sk#11, ss_store_sk#12, ss_sales_price#13]
+Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
+Input [6]: [i_item_sk#1, i_manager_id#5, ss_item_sk#10, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13]
(11) Scan parquet default.date_dim
-Output [3]: [d_date_sk#15, d_month_seq#16, d_moy#17]
+Output [3]: [d_date_sk#16, d_month_seq#17, d_moy#18]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_month_seq, [1222,1228,1223,1227,1219,1226,1224,1225,1230,1220,1221,1229]), GreaterThanOrEqual(d_date_sk,2452123), LessThanOrEqual(d_date_sk,2452487), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int,d_moy:int>
(12) ColumnarToRow [codegen id : 2]
-Input [3]: [d_date_sk#15, d_month_seq#16, d_moy#17]
+Input [3]: [d_date_sk#16, d_month_seq#17, d_moy#18]
(13) Filter [codegen id : 2]
-Input [3]: [d_date_sk#15, d_month_seq#16, d_moy#17]
-Condition : (((d_month_seq#16 INSET (1222,1228,1223,1227,1219,1226,1224,1225,1230,1220,1221,1229) AND (d_date_sk#15 >= 2452123)) AND (d_date_sk#15 <= 2452487)) AND isnotnull(d_date_sk#15))
+Input [3]: [d_date_sk#16, d_month_seq#17, d_moy#18]
+Condition : (((d_month_seq#17 INSET (1222,1228,1223,1227,1219,1226,1224,1225,1230,1220,1221,1229) AND (d_date_sk#16 >= 2452123)) AND (d_date_sk#16 <= 2452487)) AND isnotnull(d_date_sk#16))
(14) Project [codegen id : 2]
-Output [2]: [d_date_sk#15, d_moy#17]
-Input [3]: [d_date_sk#15, d_month_seq#16, d_moy#17]
+Output [2]: [d_date_sk#16, d_moy#18]
+Input [3]: [d_date_sk#16, d_month_seq#17, d_moy#18]
(15) BroadcastExchange
-Input [2]: [d_date_sk#15, d_moy#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18]
+Input [2]: [d_date_sk#16, d_moy#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#19]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#10]
-Right keys [1]: [d_date_sk#15]
+Left keys [1]: [ss_sold_date_sk#13]
+Right keys [1]: [d_date_sk#16]
Join condition: None
(17) Project [codegen id : 4]
-Output [4]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, d_moy#17]
-Input [6]: [i_manager_id#5, ss_sold_date_sk#10, ss_store_sk#12, ss_sales_price#13, d_date_sk#15, d_moy#17]
+Output [4]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#18]
+Input [6]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, ss_sold_date_sk#13, d_date_sk#16, d_moy#18]
(18) Scan parquet default.store
-Output [1]: [s_store_sk#19]
+Output [1]: [s_store_sk#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int>
(19) ColumnarToRow [codegen id : 3]
-Input [1]: [s_store_sk#19]
+Input [1]: [s_store_sk#20]
(20) Filter [codegen id : 3]
-Input [1]: [s_store_sk#19]
-Condition : isnotnull(s_store_sk#19)
+Input [1]: [s_store_sk#20]
+Condition : isnotnull(s_store_sk#20)
(21) BroadcastExchange
-Input [1]: [s_store_sk#19]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20]
+Input [1]: [s_store_sk#20]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21]
(22) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#12]
-Right keys [1]: [s_store_sk#19]
+Left keys [1]: [ss_store_sk#11]
+Right keys [1]: [s_store_sk#20]
Join condition: None
(23) Project [codegen id : 4]
-Output [3]: [i_manager_id#5, ss_sales_price#13, d_moy#17]
-Input [5]: [i_manager_id#5, ss_store_sk#12, ss_sales_price#13, d_moy#17, s_store_sk#19]
+Output [3]: [i_manager_id#5, ss_sales_price#12, d_moy#18]
+Input [5]: [i_manager_id#5, ss_store_sk#11, ss_sales_price#12, d_moy#18, s_store_sk#20]
(24) HashAggregate [codegen id : 4]
-Input [3]: [i_manager_id#5, ss_sales_price#13, d_moy#17]
-Keys [2]: [i_manager_id#5, d_moy#17]
-Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#13))]
-Aggregate Attributes [1]: [sum#21]
-Results [3]: [i_manager_id#5, d_moy#17, sum#22]
+Input [3]: [i_manager_id#5, ss_sales_price#12, d_moy#18]
+Keys [2]: [i_manager_id#5, d_moy#18]
+Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#12))]
+Aggregate Attributes [1]: [sum#22]
+Results [3]: [i_manager_id#5, d_moy#18, sum#23]
(25) Exchange
-Input [3]: [i_manager_id#5, d_moy#17, sum#22]
-Arguments: hashpartitioning(i_manager_id#5, d_moy#17, 5), ENSURE_REQUIREMENTS, [id=#23]
+Input [3]: [i_manager_id#5, d_moy#18, sum#23]
+Arguments: hashpartitioning(i_manager_id#5, d_moy#18, 5), ENSURE_REQUIREMENTS, [id=#24]
(26) HashAggregate [codegen id : 5]
-Input [3]: [i_manager_id#5, d_moy#17, sum#22]
-Keys [2]: [i_manager_id#5, d_moy#17]
-Functions [1]: [sum(UnscaledValue(ss_sales_price#13))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#13))#24]
-Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#24,17,2) AS sum_sales#25, cast(MakeDecimal(sum(UnscaledValue(ss_sales_price#13))#24,17,2) as bigint) AS _w0#26]
+Input [3]: [i_manager_id#5, d_moy#18, sum#23]
+Keys [2]: [i_manager_id#5, d_moy#18]
+Functions [1]: [sum(UnscaledValue(ss_sales_price#12))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#12))#25]
+Results [3]: [i_manager_id#5, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#25,17,2) AS sum_sales#26, MakeDecimal(sum(UnscaledValue(ss_sales_price#12))#25,17,2) AS _w0#27]
(27) Exchange
-Input [3]: [i_manager_id#5, sum_sales#25, _w0#26]
-Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#27]
+Input [3]: [i_manager_id#5, sum_sales#26, _w0#27]
+Arguments: hashpartitioning(i_manager_id#5, 5), ENSURE_REQUIREMENTS, [id=#28]
(28) Sort [codegen id : 6]
-Input [3]: [i_manager_id#5, sum_sales#25, _w0#26]
+Input [3]: [i_manager_id#5, sum_sales#26, _w0#27]
Arguments: [i_manager_id#5 ASC NULLS FIRST], false, 0
(29) Window
-Input [3]: [i_manager_id#5, sum_sales#25, _w0#26]
-Arguments: [avg(_w0#26) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#28], [i_manager_id#5]
+Input [3]: [i_manager_id#5, sum_sales#26, _w0#27]
+Arguments: [avg(_w0#27) windowspecdefinition(i_manager_id#5, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS avg_monthly_sales#29], [i_manager_id#5]
(30) Filter [codegen id : 7]
-Input [4]: [i_manager_id#5, sum_sales#25, _w0#26, avg_monthly_sales#28]
-Condition : (((isnotnull(avg_monthly_sales#28) AND isnotnull(sum_sales#25)) AND (avg_monthly_sales#28 > 0.0)) AND ((abs((cast(sum_sales#25 as double) - avg_monthly_sales#28)) / avg_monthly_sales#28) > 0.1))
+Input [4]: [i_manager_id#5, sum_sales#26, _w0#27, avg_monthly_sales#29]
+Condition : ((isnotnull(avg_monthly_sales#29) AND (avg_monthly_sales#29 > 0.000000)) AND (CheckOverflow((promote_precision(abs(CheckOverflow((promote_precision(cast(sum_sales#26 as decimal(22,6))) - promote_precision(cast(avg_monthly_sales#29 as decimal(22,6)))), DecimalType(22,6), true))) / promote_precision(cast(avg_monthly_sales#29 as decimal(22,6)))), DecimalType(38,16), true) > 0.1000000000000000))
(31) Project [codegen id : 7]
-Output [3]: [i_manager_id#5, sum_sales#25, avg_monthly_sales#28]
-Input [4]: [i_manager_id#5, sum_sales#25, _w0#26, avg_monthly_sales#28]
+Output [3]: [i_manager_id#5, sum_sales#26, avg_monthly_sales#29]
+Input [4]: [i_manager_id#5, sum_sales#26, _w0#27, avg_monthly_sales#29]
(32) TakeOrderedAndProject
-Input [3]: [i_manager_id#5, sum_sales#25, avg_monthly_sales#28]
-Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#28 ASC NULLS FIRST, sum_sales#25 ASC NULLS FIRST], [i_manager_id#5, sum_sales#25, avg_monthly_sales#28]
+Input [3]: [i_manager_id#5, sum_sales#26, avg_monthly_sales#29]
+Arguments: 100, [i_manager_id#5 ASC NULLS FIRST, avg_monthly_sales#29 ASC NULLS FIRST, sum_sales#26 ASC NULLS FIRST], [i_manager_id#5, sum_sales#26, avg_monthly_sales#29]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#13 IN dynamicpruning#14
+ReusedExchange (33)
+
+
+(33) ReusedExchange [Reuses operator id: 15]
+Output [2]: [d_date_sk#16, d_moy#18]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/simplified.txt
index d9dae62e..4d85c6d 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q63/simplified.txt
@@ -18,7 +18,7 @@ TakeOrderedAndProject [i_manager_id,avg_monthly_sales,sum_sales]
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [i_manager_id,ss_store_sk,ss_sales_price,d_moy]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [i_manager_id,ss_sold_date_sk,ss_store_sk,ss_sales_price]
+ Project [i_manager_id,ss_store_sk,ss_sales_price,ss_sold_date_sk]
BroadcastHashJoin [i_item_sk,ss_item_sk]
Project [i_item_sk,i_manager_id]
Filter [i_category,i_class,i_brand,i_item_sk]
@@ -28,10 +28,12 @@ TakeOrderedAndProject [i_manager_id,avg_monthly_sales,sum_sales]
InputAdapter
BroadcastExchange #3
WholeStageCodegen (1)
- Filter [ss_sold_date_sk,ss_item_sk,ss_store_sk]
+ Filter [ss_item_sk,ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk,d_moy] #4
InputAdapter
BroadcastExchange #4
WholeStageCodegen (2)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt
index c2ec3a5..741a644 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/explain.txt
@@ -44,202 +44,216 @@ TakeOrderedAndProject (42)
(1) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#3, ss_sales_price#4]
+Output [4]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, ss_sold_date_sk#4]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451911), LessThanOrEqual(ss_sold_date_sk,2452275), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#4), (ss_sold_date_sk#4 >= 2451911), (ss_sold_date_sk#4 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#4 IN dynamicpruning#5)]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(2) ColumnarToRow [codegen id : 2]
-Input [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#3, ss_sales_price#4]
+Input [4]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, ss_sold_date_sk#4]
(3) Filter [codegen id : 2]
-Input [4]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#3, ss_sales_price#4]
-Condition : ((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2451911)) AND (ss_sold_date_sk#1 <= 2452275)) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#2))
+Input [4]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, ss_sold_date_sk#4]
+Condition : (isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1))
(4) Scan parquet default.date_dim
-Output [2]: [d_date_sk#5, d_month_seq#6]
+Output [2]: [d_date_sk#6, d_month_seq#7]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int>
(5) ColumnarToRow [codegen id : 1]
-Input [2]: [d_date_sk#5, d_month_seq#6]
+Input [2]: [d_date_sk#6, d_month_seq#7]
(6) Filter [codegen id : 1]
-Input [2]: [d_date_sk#5, d_month_seq#6]
-Condition : (((((isnotnull(d_month_seq#6) AND (d_month_seq#6 >= 1212)) AND (d_month_seq#6 <= 1223)) AND (d_date_sk#5 >= 2451911)) AND (d_date_sk#5 <= 2452275)) AND isnotnull(d_date_sk#5))
+Input [2]: [d_date_sk#6, d_month_seq#7]
+Condition : (((((isnotnull(d_month_seq#7) AND (d_month_seq#7 >= 1212)) AND (d_month_seq#7 <= 1223)) AND (d_date_sk#6 >= 2451911)) AND (d_date_sk#6 <= 2452275)) AND isnotnull(d_date_sk#6))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#5]
-Input [2]: [d_date_sk#5, d_month_seq#6]
+Output [1]: [d_date_sk#6]
+Input [2]: [d_date_sk#6, d_month_seq#7]
(8) BroadcastExchange
-Input [1]: [d_date_sk#5]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#7]
+Input [1]: [d_date_sk#6]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#8]
(9) BroadcastHashJoin [codegen id : 2]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#5]
+Left keys [1]: [ss_sold_date_sk#4]
+Right keys [1]: [d_date_sk#6]
Join condition: None
(10) Project [codegen id : 2]
-Output [3]: [ss_item_sk#2, ss_store_sk#3, ss_sales_price#4]
-Input [5]: [ss_sold_date_sk#1, ss_item_sk#2, ss_store_sk#3, ss_sales_price#4, d_date_sk#5]
+Output [3]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3]
+Input [5]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3, ss_sold_date_sk#4, d_date_sk#6]
(11) HashAggregate [codegen id : 2]
-Input [3]: [ss_item_sk#2, ss_store_sk#3, ss_sales_price#4]
-Keys [2]: [ss_store_sk#3, ss_item_sk#2]
-Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#4))]
-Aggregate Attributes [1]: [sum#8]
-Results [3]: [ss_store_sk#3, ss_item_sk#2, sum#9]
+Input [3]: [ss_item_sk#1, ss_store_sk#2, ss_sales_price#3]
+Keys [2]: [ss_store_sk#2, ss_item_sk#1]
+Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#3))]
+Aggregate Attributes [1]: [sum#9]
+Results [3]: [ss_store_sk#2, ss_item_sk#1, sum#10]
(12) Exchange
-Input [3]: [ss_store_sk#3, ss_item_sk#2, sum#9]
-Arguments: hashpartitioning(ss_store_sk#3, ss_item_sk#2, 5), ENSURE_REQUIREMENTS, [id=#10]
+Input [3]: [ss_store_sk#2, ss_item_sk#1, sum#10]
+Arguments: hashpartitioning(ss_store_sk#2, ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#11]
(13) HashAggregate [codegen id : 7]
-Input [3]: [ss_store_sk#3, ss_item_sk#2, sum#9]
-Keys [2]: [ss_store_sk#3, ss_item_sk#2]
-Functions [1]: [sum(UnscaledValue(ss_sales_price#4))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#4))#11]
-Results [3]: [ss_store_sk#3, ss_item_sk#2, MakeDecimal(sum(UnscaledValue(ss_sales_price#4))#11,17,2) AS revenue#12]
+Input [3]: [ss_store_sk#2, ss_item_sk#1, sum#10]
+Keys [2]: [ss_store_sk#2, ss_item_sk#1]
+Functions [1]: [sum(UnscaledValue(ss_sales_price#3))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#3))#12]
+Results [3]: [ss_store_sk#2, ss_item_sk#1, MakeDecimal(sum(UnscaledValue(ss_sales_price#3))#12,17,2) AS revenue#13]
(14) Filter [codegen id : 7]
-Input [3]: [ss_store_sk#3, ss_item_sk#2, revenue#12]
-Condition : isnotnull(revenue#12)
+Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#13]
+Condition : isnotnull(revenue#13)
(15) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#13, ss_item_sk#14, ss_store_sk#15, ss_sales_price#16]
+Output [4]: [ss_item_sk#14, ss_store_sk#15, ss_sales_price#16, ss_sold_date_sk#17]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451911), LessThanOrEqual(ss_sold_date_sk,2452275), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#17), (ss_sold_date_sk#17 >= 2451911), (ss_sold_date_sk#17 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#17 IN dynamicpruning#5)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(16) ColumnarToRow [codegen id : 4]
-Input [4]: [ss_sold_date_sk#13, ss_item_sk#14, ss_store_sk#15, ss_sales_price#16]
+Input [4]: [ss_item_sk#14, ss_store_sk#15, ss_sales_price#16, ss_sold_date_sk#17]
(17) Filter [codegen id : 4]
-Input [4]: [ss_sold_date_sk#13, ss_item_sk#14, ss_store_sk#15, ss_sales_price#16]
-Condition : (((isnotnull(ss_sold_date_sk#13) AND (ss_sold_date_sk#13 >= 2451911)) AND (ss_sold_date_sk#13 <= 2452275)) AND isnotnull(ss_store_sk#15))
+Input [4]: [ss_item_sk#14, ss_store_sk#15, ss_sales_price#16, ss_sold_date_sk#17]
+Condition : isnotnull(ss_store_sk#15)
(18) ReusedExchange [Reuses operator id: 8]
-Output [1]: [d_date_sk#5]
+Output [1]: [d_date_sk#6]
(19) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#13]
-Right keys [1]: [d_date_sk#5]
+Left keys [1]: [ss_sold_date_sk#17]
+Right keys [1]: [d_date_sk#6]
Join condition: None
(20) Project [codegen id : 4]
Output [3]: [ss_item_sk#14, ss_store_sk#15, ss_sales_price#16]
-Input [5]: [ss_sold_date_sk#13, ss_item_sk#14, ss_store_sk#15, ss_sales_price#16, d_date_sk#5]
+Input [5]: [ss_item_sk#14, ss_store_sk#15, ss_sales_price#16, ss_sold_date_sk#17, d_date_sk#6]
(21) HashAggregate [codegen id : 4]
Input [3]: [ss_item_sk#14, ss_store_sk#15, ss_sales_price#16]
Keys [2]: [ss_store_sk#15, ss_item_sk#14]
Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#16))]
-Aggregate Attributes [1]: [sum#17]
-Results [3]: [ss_store_sk#15, ss_item_sk#14, sum#18]
+Aggregate Attributes [1]: [sum#18]
+Results [3]: [ss_store_sk#15, ss_item_sk#14, sum#19]
(22) Exchange
-Input [3]: [ss_store_sk#15, ss_item_sk#14, sum#18]
-Arguments: hashpartitioning(ss_store_sk#15, ss_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#19]
+Input [3]: [ss_store_sk#15, ss_item_sk#14, sum#19]
+Arguments: hashpartitioning(ss_store_sk#15, ss_item_sk#14, 5), ENSURE_REQUIREMENTS, [id=#20]
(23) HashAggregate [codegen id : 5]
-Input [3]: [ss_store_sk#15, ss_item_sk#14, sum#18]
+Input [3]: [ss_store_sk#15, ss_item_sk#14, sum#19]
Keys [2]: [ss_store_sk#15, ss_item_sk#14]
Functions [1]: [sum(UnscaledValue(ss_sales_price#16))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#16))#20]
-Results [2]: [ss_store_sk#15, MakeDecimal(sum(UnscaledValue(ss_sales_price#16))#20,17,2) AS revenue#21]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#16))#21]
+Results [2]: [ss_store_sk#15, MakeDecimal(sum(UnscaledValue(ss_sales_price#16))#21,17,2) AS revenue#22]
(24) HashAggregate [codegen id : 5]
-Input [2]: [ss_store_sk#15, revenue#21]
+Input [2]: [ss_store_sk#15, revenue#22]
Keys [1]: [ss_store_sk#15]
-Functions [1]: [partial_avg(revenue#21)]
-Aggregate Attributes [2]: [sum#22, count#23]
-Results [3]: [ss_store_sk#15, sum#24, count#25]
+Functions [1]: [partial_avg(revenue#22)]
+Aggregate Attributes [2]: [sum#23, count#24]
+Results [3]: [ss_store_sk#15, sum#25, count#26]
(25) Exchange
-Input [3]: [ss_store_sk#15, sum#24, count#25]
-Arguments: hashpartitioning(ss_store_sk#15, 5), ENSURE_REQUIREMENTS, [id=#26]
+Input [3]: [ss_store_sk#15, sum#25, count#26]
+Arguments: hashpartitioning(ss_store_sk#15, 5), ENSURE_REQUIREMENTS, [id=#27]
(26) HashAggregate [codegen id : 6]
-Input [3]: [ss_store_sk#15, sum#24, count#25]
+Input [3]: [ss_store_sk#15, sum#25, count#26]
Keys [1]: [ss_store_sk#15]
-Functions [1]: [avg(revenue#21)]
-Aggregate Attributes [1]: [avg(revenue#21)#27]
-Results [2]: [ss_store_sk#15, avg(revenue#21)#27 AS ave#28]
+Functions [1]: [avg(revenue#22)]
+Aggregate Attributes [1]: [avg(revenue#22)#28]
+Results [2]: [ss_store_sk#15, avg(revenue#22)#28 AS ave#29]
(27) BroadcastExchange
-Input [2]: [ss_store_sk#15, ave#28]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#29]
+Input [2]: [ss_store_sk#15, ave#29]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30]
(28) BroadcastHashJoin [codegen id : 7]
-Left keys [1]: [ss_store_sk#3]
+Left keys [1]: [ss_store_sk#2]
Right keys [1]: [ss_store_sk#15]
-Join condition: (cast(revenue#12 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#28)), DecimalType(23,7), true))
+Join condition: (cast(revenue#13 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#29)), DecimalType(23,7), true))
(29) Project [codegen id : 7]
-Output [3]: [ss_store_sk#3, ss_item_sk#2, revenue#12]
-Input [5]: [ss_store_sk#3, ss_item_sk#2, revenue#12, ss_store_sk#15, ave#28]
+Output [3]: [ss_store_sk#2, ss_item_sk#1, revenue#13]
+Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#13, ss_store_sk#15, ave#29]
(30) BroadcastExchange
-Input [3]: [ss_store_sk#3, ss_item_sk#2, revenue#12]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#30]
+Input [3]: [ss_store_sk#2, ss_item_sk#1, revenue#13]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#31]
(31) Scan parquet default.store
-Output [2]: [s_store_sk#31, s_store_name#32]
+Output [2]: [s_store_sk#32, s_store_name#33]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_store_name:string>
(32) ColumnarToRow
-Input [2]: [s_store_sk#31, s_store_name#32]
+Input [2]: [s_store_sk#32, s_store_name#33]
(33) Filter
-Input [2]: [s_store_sk#31, s_store_name#32]
-Condition : isnotnull(s_store_sk#31)
+Input [2]: [s_store_sk#32, s_store_name#33]
+Condition : isnotnull(s_store_sk#32)
(34) BroadcastHashJoin [codegen id : 8]
-Left keys [1]: [ss_store_sk#3]
-Right keys [1]: [s_store_sk#31]
+Left keys [1]: [ss_store_sk#2]
+Right keys [1]: [s_store_sk#32]
Join condition: None
(35) Project [codegen id : 8]
-Output [3]: [ss_item_sk#2, revenue#12, s_store_name#32]
-Input [5]: [ss_store_sk#3, ss_item_sk#2, revenue#12, s_store_sk#31, s_store_name#32]
+Output [3]: [ss_item_sk#1, revenue#13, s_store_name#33]
+Input [5]: [ss_store_sk#2, ss_item_sk#1, revenue#13, s_store_sk#32, s_store_name#33]
(36) BroadcastExchange
-Input [3]: [ss_item_sk#2, revenue#12, s_store_name#32]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#33]
+Input [3]: [ss_item_sk#1, revenue#13, s_store_name#33]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#34]
(37) Scan parquet default.item
-Output [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38]
+Output [5]: [i_item_sk#35, i_item_desc#36, i_current_price#37, i_wholesale_cost#38, i_brand#39]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_desc:string,i_current_price:decimal(7,2),i_wholesale_cost:decimal(7,2),i_brand:string>
(38) ColumnarToRow
-Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38]
+Input [5]: [i_item_sk#35, i_item_desc#36, i_current_price#37, i_wholesale_cost#38, i_brand#39]
(39) Filter
-Input [5]: [i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38]
-Condition : isnotnull(i_item_sk#34)
+Input [5]: [i_item_sk#35, i_item_desc#36, i_current_price#37, i_wholesale_cost#38, i_brand#39]
+Condition : isnotnull(i_item_sk#35)
(40) BroadcastHashJoin [codegen id : 9]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#34]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#35]
Join condition: None
(41) Project [codegen id : 9]
-Output [6]: [s_store_name#32, i_item_desc#35, revenue#12, i_current_price#36, i_wholesale_cost#37, i_brand#38]
-Input [8]: [ss_item_sk#2, revenue#12, s_store_name#32, i_item_sk#34, i_item_desc#35, i_current_price#36, i_wholesale_cost#37, i_brand#38]
+Output [6]: [s_store_name#33, i_item_desc#36, revenue#13, i_current_price#37, i_wholesale_cost#38, i_brand#39]
+Input [8]: [ss_item_sk#1, revenue#13, s_store_name#33, i_item_sk#35, i_item_desc#36, i_current_price#37, i_wholesale_cost#38, i_brand#39]
(42) TakeOrderedAndProject
-Input [6]: [s_store_name#32, i_item_desc#35, revenue#12, i_current_price#36, i_wholesale_cost#37, i_brand#38]
-Arguments: 100, [s_store_name#32 ASC NULLS FIRST, i_item_desc#35 ASC NULLS FIRST], [s_store_name#32, i_item_desc#35, revenue#12, i_current_price#36, i_wholesale_cost#37, i_brand#38]
+Input [6]: [s_store_name#33, i_item_desc#36, revenue#13, i_current_price#37, i_wholesale_cost#38, i_brand#39]
+Arguments: 100, [s_store_name#33 ASC NULLS FIRST, i_item_desc#36 ASC NULLS FIRST], [s_store_name#33, i_item_desc#36, revenue#13, i_current_price#37, i_wholesale_cost#38, i_brand#39]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
+ReusedExchange (43)
+
+
+(43) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#6]
+
+Subquery:2 Hosting operator id = 15 Hosting Expression = ss_sold_date_sk#17 IN dynamicpruning#5
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/simplified.txt
index 21aa497..fec6d9a 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65.sf100/simplified.txt
@@ -20,10 +20,12 @@ TakeOrderedAndProject [s_store_name,i_item_desc,revenue,i_current_price,i_wholes
HashAggregate [ss_store_sk,ss_item_sk,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_store_sk,ss_sales_price]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #4
InputAdapter
BroadcastExchange #4
WholeStageCodegen (1)
@@ -47,10 +49,11 @@ TakeOrderedAndProject [s_store_name,i_item_desc,revenue,i_current_price,i_wholes
HashAggregate [ss_store_sk,ss_item_sk,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_store_sk,ss_sales_price]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #4
Filter [s_store_sk]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt
index 4bc46ec..0851190 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/explain.txt
@@ -58,188 +58,202 @@ Input [2]: [s_store_sk#1, s_store_name#2]
Condition : isnotnull(s_store_sk#1)
(4) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#3, ss_item_sk#4, ss_store_sk#5, ss_sales_price#6]
+Output [4]: [ss_item_sk#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451911), LessThanOrEqual(ss_sold_date_sk,2452275), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#6), (ss_sold_date_sk#6 >= 2451911), (ss_sold_date_sk#6 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(5) ColumnarToRow [codegen id : 2]
-Input [4]: [ss_sold_date_sk#3, ss_item_sk#4, ss_store_sk#5, ss_sales_price#6]
+Input [4]: [ss_item_sk#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
(6) Filter [codegen id : 2]
-Input [4]: [ss_sold_date_sk#3, ss_item_sk#4, ss_store_sk#5, ss_sales_price#6]
-Condition : ((((isnotnull(ss_sold_date_sk#3) AND (ss_sold_date_sk#3 >= 2451911)) AND (ss_sold_date_sk#3 <= 2452275)) AND isnotnull(ss_store_sk#5)) AND isnotnull(ss_item_sk#4))
+Input [4]: [ss_item_sk#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6]
+Condition : (isnotnull(ss_store_sk#4) AND isnotnull(ss_item_sk#3))
(7) Scan parquet default.date_dim
-Output [2]: [d_date_sk#7, d_month_seq#8]
+Output [2]: [d_date_sk#8, d_month_seq#9]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2452275), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int>
(8) ColumnarToRow [codegen id : 1]
-Input [2]: [d_date_sk#7, d_month_seq#8]
+Input [2]: [d_date_sk#8, d_month_seq#9]
(9) Filter [codegen id : 1]
-Input [2]: [d_date_sk#7, d_month_seq#8]
-Condition : (((((isnotnull(d_month_seq#8) AND (d_month_seq#8 >= 1212)) AND (d_month_seq#8 <= 1223)) AND (d_date_sk#7 >= 2451911)) AND (d_date_sk#7 <= 2452275)) AND isnotnull(d_date_sk#7))
+Input [2]: [d_date_sk#8, d_month_seq#9]
+Condition : (((((isnotnull(d_month_seq#9) AND (d_month_seq#9 >= 1212)) AND (d_month_seq#9 <= 1223)) AND (d_date_sk#8 >= 2451911)) AND (d_date_sk#8 <= 2452275)) AND isnotnull(d_date_sk#8))
(10) Project [codegen id : 1]
-Output [1]: [d_date_sk#7]
-Input [2]: [d_date_sk#7, d_month_seq#8]
+Output [1]: [d_date_sk#8]
+Input [2]: [d_date_sk#8, d_month_seq#9]
(11) BroadcastExchange
-Input [1]: [d_date_sk#7]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
+Input [1]: [d_date_sk#8]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(12) BroadcastHashJoin [codegen id : 2]
-Left keys [1]: [ss_sold_date_sk#3]
-Right keys [1]: [d_date_sk#7]
+Left keys [1]: [ss_sold_date_sk#6]
+Right keys [1]: [d_date_sk#8]
Join condition: None
(13) Project [codegen id : 2]
-Output [3]: [ss_item_sk#4, ss_store_sk#5, ss_sales_price#6]
-Input [5]: [ss_sold_date_sk#3, ss_item_sk#4, ss_store_sk#5, ss_sales_price#6, d_date_sk#7]
+Output [3]: [ss_item_sk#3, ss_store_sk#4, ss_sales_price#5]
+Input [5]: [ss_item_sk#3, ss_store_sk#4, ss_sales_price#5, ss_sold_date_sk#6, d_date_sk#8]
(14) HashAggregate [codegen id : 2]
-Input [3]: [ss_item_sk#4, ss_store_sk#5, ss_sales_price#6]
-Keys [2]: [ss_store_sk#5, ss_item_sk#4]
-Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#6))]
-Aggregate Attributes [1]: [sum#10]
-Results [3]: [ss_store_sk#5, ss_item_sk#4, sum#11]
+Input [3]: [ss_item_sk#3, ss_store_sk#4, ss_sales_price#5]
+Keys [2]: [ss_store_sk#4, ss_item_sk#3]
+Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#5))]
+Aggregate Attributes [1]: [sum#11]
+Results [3]: [ss_store_sk#4, ss_item_sk#3, sum#12]
(15) Exchange
-Input [3]: [ss_store_sk#5, ss_item_sk#4, sum#11]
-Arguments: hashpartitioning(ss_store_sk#5, ss_item_sk#4, 5), ENSURE_REQUIREMENTS, [id=#12]
+Input [3]: [ss_store_sk#4, ss_item_sk#3, sum#12]
+Arguments: hashpartitioning(ss_store_sk#4, ss_item_sk#3, 5), ENSURE_REQUIREMENTS, [id=#13]
(16) HashAggregate [codegen id : 3]
-Input [3]: [ss_store_sk#5, ss_item_sk#4, sum#11]
-Keys [2]: [ss_store_sk#5, ss_item_sk#4]
-Functions [1]: [sum(UnscaledValue(ss_sales_price#6))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#6))#13]
-Results [3]: [ss_store_sk#5, ss_item_sk#4, MakeDecimal(sum(UnscaledValue(ss_sales_price#6))#13,17,2) AS revenue#14]
+Input [3]: [ss_store_sk#4, ss_item_sk#3, sum#12]
+Keys [2]: [ss_store_sk#4, ss_item_sk#3]
+Functions [1]: [sum(UnscaledValue(ss_sales_price#5))]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#5))#14]
+Results [3]: [ss_store_sk#4, ss_item_sk#3, MakeDecimal(sum(UnscaledValue(ss_sales_price#5))#14,17,2) AS revenue#15]
(17) Filter [codegen id : 3]
-Input [3]: [ss_store_sk#5, ss_item_sk#4, revenue#14]
-Condition : isnotnull(revenue#14)
+Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#15]
+Condition : isnotnull(revenue#15)
(18) BroadcastExchange
-Input [3]: [ss_store_sk#5, ss_item_sk#4, revenue#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15]
+Input [3]: [ss_store_sk#4, ss_item_sk#3, revenue#15]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
(19) BroadcastHashJoin [codegen id : 9]
Left keys [1]: [s_store_sk#1]
-Right keys [1]: [ss_store_sk#5]
+Right keys [1]: [ss_store_sk#4]
Join condition: None
(20) Project [codegen id : 9]
-Output [4]: [s_store_name#2, ss_store_sk#5, ss_item_sk#4, revenue#14]
-Input [5]: [s_store_sk#1, s_store_name#2, ss_store_sk#5, ss_item_sk#4, revenue#14]
+Output [4]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#15]
+Input [5]: [s_store_sk#1, s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#15]
(21) Scan parquet default.item
-Output [5]: [i_item_sk#16, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20]
+Output [5]: [i_item_sk#17, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_desc:string,i_current_price:decimal(7,2),i_wholesale_cost:decimal(7,2),i_brand:string>
(22) ColumnarToRow [codegen id : 4]
-Input [5]: [i_item_sk#16, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20]
+Input [5]: [i_item_sk#17, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21]
(23) Filter [codegen id : 4]
-Input [5]: [i_item_sk#16, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20]
-Condition : isnotnull(i_item_sk#16)
+Input [5]: [i_item_sk#17, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21]
+Condition : isnotnull(i_item_sk#17)
(24) BroadcastExchange
-Input [5]: [i_item_sk#16, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#21]
+Input [5]: [i_item_sk#17, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#22]
(25) BroadcastHashJoin [codegen id : 9]
-Left keys [1]: [ss_item_sk#4]
-Right keys [1]: [i_item_sk#16]
+Left keys [1]: [ss_item_sk#3]
+Right keys [1]: [i_item_sk#17]
Join condition: None
(26) Project [codegen id : 9]
-Output [7]: [s_store_name#2, ss_store_sk#5, revenue#14, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20]
-Input [9]: [s_store_name#2, ss_store_sk#5, ss_item_sk#4, revenue#14, i_item_sk#16, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20]
+Output [7]: [s_store_name#2, ss_store_sk#4, revenue#15, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21]
+Input [9]: [s_store_name#2, ss_store_sk#4, ss_item_sk#3, revenue#15, i_item_sk#17, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21]
(27) Scan parquet default.store_sales
-Output [4]: [ss_sold_date_sk#22, ss_item_sk#23, ss_store_sk#24, ss_sales_price#25]
+Output [4]: [ss_item_sk#23, ss_store_sk#24, ss_sales_price#25, ss_sold_date_sk#26]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2451911), LessThanOrEqual(ss_sold_date_sk,2452275), IsNotNull(ss_store_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#26), (ss_sold_date_sk#26 >= 2451911), (ss_sold_date_sk#26 <= 2452275), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#7)]
+PushedFilters: [IsNotNull(ss_store_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_sales_price:decimal(7,2)>
(28) ColumnarToRow [codegen id : 6]
-Input [4]: [ss_sold_date_sk#22, ss_item_sk#23, ss_store_sk#24, ss_sales_price#25]
+Input [4]: [ss_item_sk#23, ss_store_sk#24, ss_sales_price#25, ss_sold_date_sk#26]
(29) Filter [codegen id : 6]
-Input [4]: [ss_sold_date_sk#22, ss_item_sk#23, ss_store_sk#24, ss_sales_price#25]
-Condition : (((isnotnull(ss_sold_date_sk#22) AND (ss_sold_date_sk#22 >= 2451911)) AND (ss_sold_date_sk#22 <= 2452275)) AND isnotnull(ss_store_sk#24))
+Input [4]: [ss_item_sk#23, ss_store_sk#24, ss_sales_price#25, ss_sold_date_sk#26]
+Condition : isnotnull(ss_store_sk#24)
(30) ReusedExchange [Reuses operator id: 11]
-Output [1]: [d_date_sk#7]
+Output [1]: [d_date_sk#8]
(31) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_sold_date_sk#22]
-Right keys [1]: [d_date_sk#7]
+Left keys [1]: [ss_sold_date_sk#26]
+Right keys [1]: [d_date_sk#8]
Join condition: None
(32) Project [codegen id : 6]
Output [3]: [ss_item_sk#23, ss_store_sk#24, ss_sales_price#25]
-Input [5]: [ss_sold_date_sk#22, ss_item_sk#23, ss_store_sk#24, ss_sales_price#25, d_date_sk#7]
+Input [5]: [ss_item_sk#23, ss_store_sk#24, ss_sales_price#25, ss_sold_date_sk#26, d_date_sk#8]
(33) HashAggregate [codegen id : 6]
Input [3]: [ss_item_sk#23, ss_store_sk#24, ss_sales_price#25]
Keys [2]: [ss_store_sk#24, ss_item_sk#23]
Functions [1]: [partial_sum(UnscaledValue(ss_sales_price#25))]
-Aggregate Attributes [1]: [sum#26]
-Results [3]: [ss_store_sk#24, ss_item_sk#23, sum#27]
+Aggregate Attributes [1]: [sum#27]
+Results [3]: [ss_store_sk#24, ss_item_sk#23, sum#28]
(34) Exchange
-Input [3]: [ss_store_sk#24, ss_item_sk#23, sum#27]
-Arguments: hashpartitioning(ss_store_sk#24, ss_item_sk#23, 5), ENSURE_REQUIREMENTS, [id=#28]
+Input [3]: [ss_store_sk#24, ss_item_sk#23, sum#28]
+Arguments: hashpartitioning(ss_store_sk#24, ss_item_sk#23, 5), ENSURE_REQUIREMENTS, [id=#29]
(35) HashAggregate [codegen id : 7]
-Input [3]: [ss_store_sk#24, ss_item_sk#23, sum#27]
+Input [3]: [ss_store_sk#24, ss_item_sk#23, sum#28]
Keys [2]: [ss_store_sk#24, ss_item_sk#23]
Functions [1]: [sum(UnscaledValue(ss_sales_price#25))]
-Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#25))#29]
-Results [2]: [ss_store_sk#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#25))#29,17,2) AS revenue#30]
+Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#25))#30]
+Results [2]: [ss_store_sk#24, MakeDecimal(sum(UnscaledValue(ss_sales_price#25))#30,17,2) AS revenue#31]
(36) HashAggregate [codegen id : 7]
-Input [2]: [ss_store_sk#24, revenue#30]
+Input [2]: [ss_store_sk#24, revenue#31]
Keys [1]: [ss_store_sk#24]
-Functions [1]: [partial_avg(revenue#30)]
-Aggregate Attributes [2]: [sum#31, count#32]
-Results [3]: [ss_store_sk#24, sum#33, count#34]
+Functions [1]: [partial_avg(revenue#31)]
+Aggregate Attributes [2]: [sum#32, count#33]
+Results [3]: [ss_store_sk#24, sum#34, count#35]
(37) Exchange
-Input [3]: [ss_store_sk#24, sum#33, count#34]
-Arguments: hashpartitioning(ss_store_sk#24, 5), ENSURE_REQUIREMENTS, [id=#35]
+Input [3]: [ss_store_sk#24, sum#34, count#35]
+Arguments: hashpartitioning(ss_store_sk#24, 5), ENSURE_REQUIREMENTS, [id=#36]
(38) HashAggregate [codegen id : 8]
-Input [3]: [ss_store_sk#24, sum#33, count#34]
+Input [3]: [ss_store_sk#24, sum#34, count#35]
Keys [1]: [ss_store_sk#24]
-Functions [1]: [avg(revenue#30)]
-Aggregate Attributes [1]: [avg(revenue#30)#36]
-Results [2]: [ss_store_sk#24, avg(revenue#30)#36 AS ave#37]
+Functions [1]: [avg(revenue#31)]
+Aggregate Attributes [1]: [avg(revenue#31)#37]
+Results [2]: [ss_store_sk#24, avg(revenue#31)#37 AS ave#38]
(39) BroadcastExchange
-Input [2]: [ss_store_sk#24, ave#37]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#38]
+Input [2]: [ss_store_sk#24, ave#38]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#39]
(40) BroadcastHashJoin [codegen id : 9]
-Left keys [1]: [ss_store_sk#5]
+Left keys [1]: [ss_store_sk#4]
Right keys [1]: [ss_store_sk#24]
-Join condition: (cast(revenue#14 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#37)), DecimalType(23,7), true))
+Join condition: (cast(revenue#15 as decimal(23,7)) <= CheckOverflow((0.100000 * promote_precision(ave#38)), DecimalType(23,7), true))
(41) Project [codegen id : 9]
-Output [6]: [s_store_name#2, i_item_desc#17, revenue#14, i_current_price#18, i_wholesale_cost#19, i_brand#20]
-Input [9]: [s_store_name#2, ss_store_sk#5, revenue#14, i_item_desc#17, i_current_price#18, i_wholesale_cost#19, i_brand#20, ss_store_sk#24, ave#37]
+Output [6]: [s_store_name#2, i_item_desc#18, revenue#15, i_current_price#19, i_wholesale_cost#20, i_brand#21]
+Input [9]: [s_store_name#2, ss_store_sk#4, revenue#15, i_item_desc#18, i_current_price#19, i_wholesale_cost#20, i_brand#21, ss_store_sk#24, ave#38]
(42) TakeOrderedAndProject
-Input [6]: [s_store_name#2, i_item_desc#17, revenue#14, i_current_price#18, i_wholesale_cost#19, i_brand#20]
-Arguments: 100, [s_store_name#2 ASC NULLS FIRST, i_item_desc#17 ASC NULLS FIRST], [s_store_name#2, i_item_desc#17, revenue#14, i_current_price#18, i_wholesale_cost#19, i_brand#20]
+Input [6]: [s_store_name#2, i_item_desc#18, revenue#15, i_current_price#19, i_wholesale_cost#20, i_brand#21]
+Arguments: 100, [s_store_name#2 ASC NULLS FIRST, i_item_desc#18 ASC NULLS FIRST], [s_store_name#2, i_item_desc#18, revenue#15, i_current_price#19, i_wholesale_cost#20, i_brand#21]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 4 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7
+ReusedExchange (43)
+
+
+(43) ReusedExchange [Reuses operator id: 11]
+Output [1]: [d_date_sk#8]
+
+Subquery:2 Hosting operator id = 27 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#7
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/simplified.txt
index a4b468f..d7d4616 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q65/simplified.txt
@@ -21,10 +21,12 @@ TakeOrderedAndProject [s_store_name,i_item_desc,revenue,i_current_price,i_wholes
HashAggregate [ss_store_sk,ss_item_sk,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_store_sk,ss_sales_price]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_item_sk]
+ Filter [ss_store_sk,ss_item_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #3
InputAdapter
BroadcastExchange #3
WholeStageCodegen (1)
@@ -55,9 +57,10 @@ TakeOrderedAndProject [s_store_name,i_item_desc,revenue,i_current_price,i_wholes
HashAggregate [ss_store_sk,ss_item_sk,ss_sales_price] [sum,sum]
Project [ss_item_sk,ss_store_sk,ss_sales_price]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk]
+ Filter [ss_store_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_store_sk,ss_sales_price]
+ Scan parquet default.store_sales [ss_item_sk,ss_store_sk,ss_sales_price,ss_sold_date_sk]
+ ReusedSubquery [d_date_sk] #1
InputAdapter
ReusedExchange [d_date_sk] #3
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt
index 1ad2819..10ac72a 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/explain.txt
@@ -1,289 +1,270 @@
== Physical Plan ==
-TakeOrderedAndProject (52)
-+- * Project (51)
- +- * SortMergeJoin Inner (50)
- :- * Sort (44)
- : +- Exchange (43)
- : +- * Project (42)
- : +- * SortMergeJoin Inner (41)
- : :- * Sort (35)
- : : +- Exchange (34)
- : : +- * HashAggregate (33)
- : : +- Exchange (32)
- : : +- * HashAggregate (31)
- : : +- * Project (30)
- : : +- * BroadcastHashJoin Inner BuildLeft (29)
- : : :- BroadcastExchange (25)
- : : : +- * Project (24)
- : : : +- * BroadcastHashJoin Inner BuildRight (23)
- : : : :- * Project (17)
- : : : : +- * BroadcastHashJoin Inner BuildRight (16)
- : : : : :- * Project (10)
- : : : : : +- * BroadcastHashJoin Inner BuildRight (9)
- : : : : : :- * Filter (3)
- : : : : : : +- * ColumnarToRow (2)
- : : : : : : +- Scan parquet default.store_sales (1)
- : : : : : +- BroadcastExchange (8)
- : : : : : +- * Project (7)
- : : : : : +- * Filter (6)
- : : : : : +- * ColumnarToRow (5)
- : : : : : +- Scan parquet default.date_dim (4)
- : : : : +- BroadcastExchange (15)
- : : : : +- * Project (14)
- : : : : +- * Filter (13)
- : : : : +- * ColumnarToRow (12)
- : : : : +- Scan parquet default.store (11)
- : : : +- BroadcastExchange (22)
- : : : +- * Project (21)
- : : : +- * Filter (20)
- : : : +- * ColumnarToRow (19)
- : : : +- Scan parquet default.household_demographics (18)
- : : +- * Filter (28)
- : : +- * ColumnarToRow (27)
- : : +- Scan parquet default.customer_address (26)
- : +- * Sort (40)
- : +- Exchange (39)
- : +- * Filter (38)
- : +- * ColumnarToRow (37)
- : +- Scan parquet default.customer (36)
- +- * Sort (49)
- +- Exchange (48)
- +- * Filter (47)
- +- * ColumnarToRow (46)
- +- Scan parquet default.customer_address (45)
+TakeOrderedAndProject (46)
++- * Project (45)
+ +- * BroadcastHashJoin Inner BuildLeft (44)
+ :- BroadcastExchange (40)
+ : +- * Project (39)
+ : +- * BroadcastHashJoin Inner BuildLeft (38)
+ : :- BroadcastExchange (34)
+ : : +- * HashAggregate (33)
+ : : +- Exchange (32)
+ : : +- * HashAggregate (31)
+ : : +- * Project (30)
+ : : +- * BroadcastHashJoin Inner BuildLeft (29)
+ : : :- BroadcastExchange (25)
+ : : : +- * Project (24)
+ : : : +- * BroadcastHashJoin Inner BuildRight (23)
+ : : : :- * Project (17)
+ : : : : +- * BroadcastHashJoin Inner BuildRight (16)
+ : : : : :- * Project (10)
+ : : : : : +- * BroadcastHashJoin Inner BuildRight (9)
+ : : : : : :- * Filter (3)
+ : : : : : : +- * ColumnarToRow (2)
+ : : : : : : +- Scan parquet default.store_sales (1)
+ : : : : : +- BroadcastExchange (8)
+ : : : : : +- * Project (7)
+ : : : : : +- * Filter (6)
+ : : : : : +- * ColumnarToRow (5)
+ : : : : : +- Scan parquet default.store (4)
+ : : : : +- BroadcastExchange (15)
+ : : : : +- * Project (14)
+ : : : : +- * Filter (13)
+ : : : : +- * ColumnarToRow (12)
+ : : : : +- Scan parquet default.date_dim (11)
+ : : : +- BroadcastExchange (22)
+ : : : +- * Project (21)
+ : : : +- * Filter (20)
+ : : : +- * ColumnarToRow (19)
+ : : : +- Scan parquet default.household_demographics (18)
+ : : +- * Filter (28)
+ : : +- * ColumnarToRow (27)
+ : : +- Scan parquet default.customer_address (26)
+ : +- * Filter (37)
+ : +- * ColumnarToRow (36)
+ : +- Scan parquet default.customer (35)
+ +- * Filter (43)
+ +- * ColumnarToRow (42)
+ +- Scan parquet default.customer_address (41)
(1) Scan parquet default.store_sales
-Output [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
+Output [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [In(ss_sold_date_sk, [2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,2451698,2451332,2451606,2451666,2451912,2452185,2451211,2451361,2452031,2451212,2451880,2451789,2451423 [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_ext_sales_price:decimal(7,2),ss_ext_list_price:decimal(7,2),ss_ext_tax:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [ss_sold_date_sk#9 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,2451698,2451332,2451606,2451666,2451912,2452185,2451211,2451361,2452031,2451212,2451880,2451789, [...]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_ext_sales_price:decimal(7,2),ss_ext_list_price:decimal(7,2),ss_ext_tax:decimal(7,2)>
(2) ColumnarToRow [codegen id : 4]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
(3) Filter [codegen id : 4]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Condition : (((((ss_sold_date_sk#1 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,2451698,2451332,2451606,2451666,2451912,2452185,2451211,2451361,2452031,2451212,2451880,2451789,24 [...]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
+Condition : (((isnotnull(ss_store_sk#4) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_addr_sk#3)) AND isnotnull(ss_customer_sk#1))
-(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#10, d_year#11, d_dom#12]
+(4) Scan parquet default.store
+Output [2]: [s_store_sk#11, s_city#12]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/date_dim]
-PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,245169 [...]
-ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
+Location [not included in comparison]/{warehouse_dir}/store]
+PushedFilters: [In(s_city, [Midway,Fairview]), IsNotNull(s_store_sk)]
+ReadSchema: struct<s_store_sk:int,s_city:string>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#10, d_year#11, d_dom#12]
+Input [2]: [s_store_sk#11, s_city#12]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#10, d_year#11, d_dom#12]
-Condition : (((((isnotnull(d_dom#12) AND (d_dom#12 >= 1)) AND (d_dom#12 <= 2)) AND d_year#11 IN (1999,2000,2001)) AND d_date_sk#10 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,24 [...]
+Input [2]: [s_store_sk#11, s_city#12]
+Condition : (s_city#12 IN (Midway,Fairview) AND isnotnull(s_store_sk#11))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#10]
-Input [3]: [d_date_sk#10, d_year#11, d_dom#12]
+Output [1]: [s_store_sk#11]
+Input [2]: [s_store_sk#11, s_city#12]
(8) BroadcastExchange
-Input [1]: [d_date_sk#10]
+Input [1]: [s_store_sk#11]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#10]
+Left keys [1]: [ss_store_sk#4]
+Right keys [1]: [s_store_sk#11]
Join condition: None
(10) Project [codegen id : 4]
-Output [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Input [10]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, d_date_sk#10]
+Output [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
+Input [10]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9, s_store_sk#11]
-(11) Scan parquet default.store
-Output [2]: [s_store_sk#14, s_city#15]
+(11) Scan parquet default.date_dim
+Output [3]: [d_date_sk#14, d_year#15, d_dom#16]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store]
-PushedFilters: [In(s_city, [Midway,Fairview]), IsNotNull(s_store_sk)]
-ReadSchema: struct<s_store_sk:int,s_city:string>
+Location [not included in comparison]/{warehouse_dir}/date_dim]
+PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,245169 [...]
+ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#14, s_city#15]
+Input [3]: [d_date_sk#14, d_year#15, d_dom#16]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#14, s_city#15]
-Condition : (s_city#15 IN (Midway,Fairview) AND isnotnull(s_store_sk#14))
+Input [3]: [d_date_sk#14, d_year#15, d_dom#16]
+Condition : (((((isnotnull(d_dom#16) AND (d_dom#16 >= 1)) AND (d_dom#16 <= 2)) AND d_year#15 IN (1999,2000,2001)) AND d_date_sk#14 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,24 [...]
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#14]
-Input [2]: [s_store_sk#14, s_city#15]
+Output [1]: [d_date_sk#14]
+Input [3]: [d_date_sk#14, d_year#15, d_dom#16]
(15) BroadcastExchange
-Input [1]: [s_store_sk#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
+Input [1]: [d_date_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#5]
-Right keys [1]: [s_store_sk#14]
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#14]
Join condition: None
(17) Project [codegen id : 4]
-Output [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Input [9]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, s_store_sk#14]
+Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9, d_date_sk#14]
(18) Scan parquet default.household_demographics
-Output [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Output [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Input [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
(20) Filter [codegen id : 3]
-Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
-Condition : (((hd_dep_count#18 = 5) OR (hd_vehicle_count#19 = 3)) AND isnotnull(hd_demo_sk#17))
+Input [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
+Condition : (((hd_dep_count#19 = 5) OR (hd_vehicle_count#20 = 3)) AND isnotnull(hd_demo_sk#18))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#17]
-Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Output [1]: [hd_demo_sk#18]
+Input [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
+Input [1]: [hd_demo_sk#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
(23) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#17]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#18]
Join condition: None
(24) Project [codegen id : 4]
-Output [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Input [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, hd_demo_sk#17]
+Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#18]
(25) BroadcastExchange
-Input [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#21]
+Input [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8]
+Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#22]
(26) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#22, ca_city#23]
+Output [2]: [ca_address_sk#23, ca_city#24]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)]
ReadSchema: struct<ca_address_sk:int,ca_city:string>
(27) ColumnarToRow
-Input [2]: [ca_address_sk#22, ca_city#23]
+Input [2]: [ca_address_sk#23, ca_city#24]
(28) Filter
-Input [2]: [ca_address_sk#22, ca_city#23]
-Condition : (isnotnull(ca_address_sk#22) AND isnotnull(ca_city#23))
+Input [2]: [ca_address_sk#23, ca_city#24]
+Condition : (isnotnull(ca_address_sk#23) AND isnotnull(ca_city#24))
(29) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_addr_sk#4]
-Right keys [1]: [ca_address_sk#22]
+Left keys [1]: [ss_addr_sk#3]
+Right keys [1]: [ca_address_sk#23]
Join condition: None
(30) Project [codegen id : 5]
-Output [7]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, ca_city#23]
-Input [8]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, ca_address_sk#22, ca_city#23]
+Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#24]
+Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#23, ca_city#24]
(31) HashAggregate [codegen id : 5]
-Input [7]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, ca_city#23]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#23]
-Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#7)), partial_sum(UnscaledValue(ss_ext_list_price#8)), partial_sum(UnscaledValue(ss_ext_tax#9))]
-Aggregate Attributes [3]: [sum#24, sum#25, sum#26]
-Results [7]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#23, sum#27, sum#28, sum#29]
+Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#24]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#24]
+Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#6)), partial_sum(UnscaledValue(ss_ext_list_price#7)), partial_sum(UnscaledValue(ss_ext_tax#8))]
+Aggregate Attributes [3]: [sum#25, sum#26, sum#27]
+Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#24, sum#28, sum#29, sum#30]
(32) Exchange
-Input [7]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#23, sum#27, sum#28, sum#29]
-Arguments: hashpartitioning(ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#23, 5), ENSURE_REQUIREMENTS, [id=#30]
+Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#24, sum#28, sum#29, sum#30]
+Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#24, 5), ENSURE_REQUIREMENTS, [id=#31]
(33) HashAggregate [codegen id : 6]
-Input [7]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#23, sum#27, sum#28, sum#29]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#23]
-Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#7)), sum(UnscaledValue(ss_ext_list_price#8)), sum(UnscaledValue(ss_ext_tax#9))]
-Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#7))#31, sum(UnscaledValue(ss_ext_list_price#8))#32, sum(UnscaledValue(ss_ext_tax#9))#33]
-Results [6]: [ss_ticket_number#6, ss_customer_sk#2, ca_city#23 AS bought_city#34, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#31,17,2) AS extended_price#35, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#8))#32,17,2) AS list_price#36, MakeDecimal(sum(UnscaledValue(ss_ext_tax#9))#33,17,2) AS extended_tax#37]
-
-(34) Exchange
-Input [6]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#34, extended_price#35, list_price#36, extended_tax#37]
-Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#38]
-
-(35) Sort [codegen id : 7]
-Input [6]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#34, extended_price#35, list_price#36, extended_tax#37]
-Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0
-
-(36) Scan parquet default.customer
-Output [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
+Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#24, sum#28, sum#29, sum#30]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#24]
+Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#6)), sum(UnscaledValue(ss_ext_list_price#7)), sum(UnscaledValue(ss_ext_tax#8))]
+Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#32, sum(UnscaledValue(ss_ext_list_price#7))#33, sum(UnscaledValue(ss_ext_tax#8))#34]
+Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#24 AS bought_city#35, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#32,17,2) AS extended_price#36, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#33,17,2) AS list_price#37, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#34,17,2) AS extended_tax#38]
+
+(34) BroadcastExchange
+Input [6]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#35, extended_price#36, list_price#37, extended_tax#38]
+Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#39]
+
+(35) Scan parquet default.customer
+Output [4]: [c_customer_sk#40, c_current_addr_sk#41, c_first_name#42, c_last_name#43]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_addr_sk:int,c_first_name:string,c_last_name:string>
-(37) ColumnarToRow [codegen id : 8]
-Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-
-(38) Filter [codegen id : 8]
-Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-Condition : (isnotnull(c_customer_sk#39) AND isnotnull(c_current_addr_sk#40))
-
-(39) Exchange
-Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-Arguments: hashpartitioning(c_customer_sk#39, 5), ENSURE_REQUIREMENTS, [id=#43]
+(36) ColumnarToRow
+Input [4]: [c_customer_sk#40, c_current_addr_sk#41, c_first_name#42, c_last_name#43]
-(40) Sort [codegen id : 9]
-Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-Arguments: [c_customer_sk#39 ASC NULLS FIRST], false, 0
+(37) Filter
+Input [4]: [c_customer_sk#40, c_current_addr_sk#41, c_first_name#42, c_last_name#43]
+Condition : (isnotnull(c_customer_sk#40) AND isnotnull(c_current_addr_sk#41))
-(41) SortMergeJoin [codegen id : 10]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#39]
+(38) BroadcastHashJoin [codegen id : 7]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#40]
Join condition: None
-(42) Project [codegen id : 10]
-Output [8]: [ss_ticket_number#6, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-Input [10]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
+(39) Project [codegen id : 7]
+Output [8]: [ss_ticket_number#5, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_current_addr_sk#41, c_first_name#42, c_last_name#43]
+Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_customer_sk#40, c_current_addr_sk#41, c_first_name#42, c_last_name#43]
-(43) Exchange
-Input [8]: [ss_ticket_number#6, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-Arguments: hashpartitioning(c_current_addr_sk#40, 5), ENSURE_REQUIREMENTS, [id=#44]
+(40) BroadcastExchange
+Input [8]: [ss_ticket_number#5, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_current_addr_sk#41, c_first_name#42, c_last_name#43]
+Arguments: HashedRelationBroadcastMode(List(cast(input[5, int, true] as bigint)),false), [id=#44]
-(44) Sort [codegen id : 11]
-Input [8]: [ss_ticket_number#6, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
-Arguments: [c_current_addr_sk#40 ASC NULLS FIRST], false, 0
-
-(45) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#22, ca_city#23]
+(41) Scan parquet default.customer_address
+Output [2]: [ca_address_sk#23, ca_city#24]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)]
ReadSchema: struct<ca_address_sk:int,ca_city:string>
-(46) ColumnarToRow [codegen id : 12]
-Input [2]: [ca_address_sk#22, ca_city#23]
+(42) ColumnarToRow
+Input [2]: [ca_address_sk#23, ca_city#24]
+
+(43) Filter
+Input [2]: [ca_address_sk#23, ca_city#24]
+Condition : (isnotnull(ca_address_sk#23) AND isnotnull(ca_city#24))
+
+(44) BroadcastHashJoin [codegen id : 8]
+Left keys [1]: [c_current_addr_sk#41]
+Right keys [1]: [ca_address_sk#23]
+Join condition: NOT (ca_city#24 = bought_city#35)
+
+(45) Project [codegen id : 8]
+Output [8]: [c_last_name#43, c_first_name#42, ca_city#24, bought_city#35, ss_ticket_number#5, extended_price#36, extended_tax#38, list_price#37]
+Input [10]: [ss_ticket_number#5, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_current_addr_sk#41, c_first_name#42, c_last_name#43, ca_address_sk#23, ca_city#24]
-(47) Filter [codegen id : 12]
-Input [2]: [ca_address_sk#22, ca_city#23]
-Condition : (isnotnull(ca_address_sk#22) AND isnotnull(ca_city#23))
+(46) TakeOrderedAndProject
+Input [8]: [c_last_name#43, c_first_name#42, ca_city#24, bought_city#35, ss_ticket_number#5, extended_price#36, extended_tax#38, list_price#37]
+Arguments: 100, [c_last_name#43 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#43, c_first_name#42, ca_city#24, bought_city#35, ss_ticket_number#5, extended_price#36, extended_tax#38, list_price#37]
-(48) Exchange
-Input [2]: [ca_address_sk#22, ca_city#23]
-Arguments: hashpartitioning(ca_address_sk#22, 5), ENSURE_REQUIREMENTS, [id=#45]
+===== Subqueries =====
-(49) Sort [codegen id : 13]
-Input [2]: [ca_address_sk#22, ca_city#23]
-Arguments: [ca_address_sk#22 ASC NULLS FIRST], false, 0
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10
+ReusedExchange (47)
-(50) SortMergeJoin [codegen id : 14]
-Left keys [1]: [c_current_addr_sk#40]
-Right keys [1]: [ca_address_sk#22]
-Join condition: NOT (ca_city#23 = bought_city#34)
-(51) Project [codegen id : 14]
-Output [8]: [c_last_name#42, c_first_name#41, ca_city#23, bought_city#34, ss_ticket_number#6, extended_price#35, extended_tax#37, list_price#36]
-Input [10]: [ss_ticket_number#6, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_current_addr_sk#40, c_first_name#41, c_last_name#42, ca_address_sk#22, ca_city#23]
+(47) ReusedExchange [Reuses operator id: 15]
+Output [1]: [d_date_sk#14]
-(52) TakeOrderedAndProject
-Input [8]: [c_last_name#42, c_first_name#41, ca_city#23, bought_city#34, ss_ticket_number#6, extended_price#35, extended_tax#37, list_price#36]
-Arguments: 100, [c_last_name#42 ASC NULLS FIRST, ss_ticket_number#6 ASC NULLS FIRST], [c_last_name#42, c_first_name#41, ca_city#23, bought_city#34, ss_ticket_number#6, extended_price#35, extended_tax#37, list_price#36]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/simplified.txt
index 6fd7148..11ab786 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68.sf100/simplified.txt
@@ -1,86 +1,70 @@
TakeOrderedAndProject [c_last_name,ss_ticket_number,c_first_name,ca_city,bought_city,extended_price,extended_tax,list_price]
- WholeStageCodegen (14)
+ WholeStageCodegen (8)
Project [c_last_name,c_first_name,ca_city,bought_city,ss_ticket_number,extended_price,extended_tax,list_price]
- SortMergeJoin [c_current_addr_sk,ca_address_sk,ca_city,bought_city]
+ BroadcastHashJoin [c_current_addr_sk,ca_address_sk,ca_city,bought_city]
InputAdapter
- WholeStageCodegen (11)
- Sort [c_current_addr_sk]
- InputAdapter
- Exchange [c_current_addr_sk] #1
- WholeStageCodegen (10)
- Project [ss_ticket_number,bought_city,extended_price,list_price,extended_tax,c_current_addr_sk,c_first_name,c_last_name]
- SortMergeJoin [ss_customer_sk,c_customer_sk]
- InputAdapter
- WholeStageCodegen (7)
- Sort [ss_customer_sk]
- InputAdapter
- Exchange [ss_customer_sk] #2
- WholeStageCodegen (6)
- HashAggregate [ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city,sum,sum,sum] [sum(UnscaledValue(ss_ext_sales_price)),sum(UnscaledValue(ss_ext_list_price)),sum(UnscaledValue(ss_ext_tax)),bought_city,extended_price,list_price,extended_tax,sum,sum,sum]
+ BroadcastExchange #1
+ WholeStageCodegen (7)
+ Project [ss_ticket_number,bought_city,extended_price,list_price,extended_tax,c_current_addr_sk,c_first_name,c_last_name]
+ BroadcastHashJoin [ss_customer_sk,c_customer_sk]
+ InputAdapter
+ BroadcastExchange #2
+ WholeStageCodegen (6)
+ HashAggregate [ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city,sum,sum,sum] [sum(UnscaledValue(ss_ext_sales_price)),sum(UnscaledValue(ss_ext_list_price)),sum(UnscaledValue(ss_ext_tax)),bought_city,extended_price,list_price,extended_tax,sum,sum,sum]
+ InputAdapter
+ Exchange [ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city] #3
+ WholeStageCodegen (5)
+ HashAggregate [ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax] [sum,sum,sum,sum,sum,sum]
+ Project [ss_customer_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax,ca_city]
+ BroadcastHashJoin [ss_addr_sk,ca_address_sk]
InputAdapter
- Exchange [ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city] #3
- WholeStageCodegen (5)
- HashAggregate [ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax] [sum,sum,sum,sum,sum,sum]
- Project [ss_customer_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax,ca_city]
- BroadcastHashJoin [ss_addr_sk,ca_address_sk]
- InputAdapter
- BroadcastExchange #4
- WholeStageCodegen (4)
- Project [ss_customer_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
- BroadcastHashJoin [ss_hdemo_sk,hd_demo_sk]
- Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
- BroadcastHashJoin [ss_store_sk,s_store_sk]
- Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
- BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
+ BroadcastExchange #4
+ WholeStageCodegen (4)
+ Project [ss_customer_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
+ BroadcastHashJoin [ss_hdemo_sk,hd_demo_sk]
+ Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
+ BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
+ Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax,ss_sold_date_sk]
+ BroadcastHashJoin [ss_store_sk,s_store_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #5
+ InputAdapter
+ BroadcastExchange #6
+ WholeStageCodegen (1)
+ Project [s_store_sk]
+ Filter [s_city,s_store_sk]
+ ColumnarToRow
InputAdapter
- BroadcastExchange #5
- WholeStageCodegen (1)
- Project [d_date_sk]
- Filter [d_dom,d_year,d_date_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.date_dim [d_date_sk,d_year,d_dom]
+ Scan parquet default.store [s_store_sk,s_city]
+ InputAdapter
+ BroadcastExchange #5
+ WholeStageCodegen (2)
+ Project [d_date_sk]
+ Filter [d_dom,d_year,d_date_sk]
+ ColumnarToRow
InputAdapter
- BroadcastExchange #6
- WholeStageCodegen (2)
- Project [s_store_sk]
- Filter [s_city,s_store_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.store [s_store_sk,s_city]
+ Scan parquet default.date_dim [d_date_sk,d_year,d_dom]
+ InputAdapter
+ BroadcastExchange #7
+ WholeStageCodegen (3)
+ Project [hd_demo_sk]
+ Filter [hd_dep_count,hd_vehicle_count,hd_demo_sk]
+ ColumnarToRow
InputAdapter
- BroadcastExchange #7
- WholeStageCodegen (3)
- Project [hd_demo_sk]
- Filter [hd_dep_count,hd_vehicle_count,hd_demo_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.household_demographics [hd_demo_sk,hd_dep_count,hd_vehicle_count]
- Filter [ca_address_sk,ca_city]
- ColumnarToRow
- InputAdapter
- Scan parquet default.customer_address [ca_address_sk,ca_city]
- InputAdapter
- WholeStageCodegen (9)
- Sort [c_customer_sk]
- InputAdapter
- Exchange [c_customer_sk] #8
- WholeStageCodegen (8)
- Filter [c_customer_sk,c_current_addr_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.customer [c_customer_sk,c_current_addr_sk,c_first_name,c_last_name]
- InputAdapter
- WholeStageCodegen (13)
- Sort [ca_address_sk]
- InputAdapter
- Exchange [ca_address_sk] #9
- WholeStageCodegen (12)
- Filter [ca_address_sk,ca_city]
- ColumnarToRow
- InputAdapter
- Scan parquet default.customer_address [ca_address_sk,ca_city]
+ Scan parquet default.household_demographics [hd_demo_sk,hd_dep_count,hd_vehicle_count]
+ Filter [ca_address_sk,ca_city]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.customer_address [ca_address_sk,ca_city]
+ Filter [c_customer_sk,c_current_addr_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.customer [c_customer_sk,c_current_addr_sk,c_first_name,c_last_name]
+ Filter [ca_address_sk,ca_city]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.customer_address [ca_address_sk,ca_city]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt
index 77617b1..81faa98 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/explain.txt
@@ -45,197 +45,208 @@ TakeOrderedAndProject (43)
(1) Scan parquet default.store_sales
-Output [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
+Output [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [In(ss_sold_date_sk, [2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,2451698,2451332,2451606,2451666,2451912,2452185,2451211,2451361,2452031,2451212,2451880,2451789,2451423 [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_ext_sales_price:decimal(7,2),ss_ext_list_price:decimal(7,2),ss_ext_tax:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [ss_sold_date_sk#9 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,2451698,2451332,2451606,2451666,2451912,2452185,2451211,2451361,2452031,2451212,2451880,2451789, [...]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_ext_sales_price:decimal(7,2),ss_ext_list_price:decimal(7,2),ss_ext_tax:decimal(7,2)>
(2) ColumnarToRow [codegen id : 5]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
(3) Filter [codegen id : 5]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Condition : (((((ss_sold_date_sk#1 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,2451698,2451332,2451606,2451666,2451912,2452185,2451211,2451361,2452031,2451212,2451880,2451789,24 [...]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9]
+Condition : (((isnotnull(ss_store_sk#4) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_addr_sk#3)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#10, d_year#11, d_dom#12]
+Output [3]: [d_date_sk#11, d_year#12, d_dom#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1999,2000,2001]), In(d_date_sk, [2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,245169 [...]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#10, d_year#11, d_dom#12]
+Input [3]: [d_date_sk#11, d_year#12, d_dom#13]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#10, d_year#11, d_dom#12]
-Condition : (((((isnotnull(d_dom#12) AND (d_dom#12 >= 1)) AND (d_dom#12 <= 2)) AND d_year#11 IN (1999,2000,2001)) AND d_date_sk#10 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,24 [...]
+Input [3]: [d_date_sk#11, d_year#12, d_dom#13]
+Condition : (((((isnotnull(d_dom#13) AND (d_dom#13 >= 1)) AND (d_dom#13 <= 2)) AND d_year#12 IN (1999,2000,2001)) AND d_date_sk#11 INSET (2451790,2451180,2452216,2451454,2452184,2451485,2451850,2451514,2452062,2451270,2452123,2451758,2451971,2451546,2451942,2451393,2451667,2451453,2452215,2451819,2451331,2451577,2451911,2452245,2451301,2451545,2451605,2451943,2451851,2451181,2452154,2451820,2452001,2451362,2451392,2451240,2452032,2451637,2451484,2452124,2451300,2451727,2452093,2451759,24 [...]
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#10]
-Input [3]: [d_date_sk#10, d_year#11, d_dom#12]
+Output [1]: [d_date_sk#11]
+Input [3]: [d_date_sk#11, d_year#12, d_dom#13]
(8) BroadcastExchange
-Input [1]: [d_date_sk#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
+Input [1]: [d_date_sk#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14]
(9) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#10]
+Left keys [1]: [ss_sold_date_sk#9]
+Right keys [1]: [d_date_sk#11]
Join condition: None
(10) Project [codegen id : 5]
-Output [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Input [10]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, d_date_sk#10]
+Output [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8]
+Input [10]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ss_sold_date_sk#9, d_date_sk#11]
(11) Scan parquet default.store
-Output [2]: [s_store_sk#14, s_city#15]
+Output [2]: [s_store_sk#15, s_city#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_city, [Midway,Fairview]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_city:string>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#14, s_city#15]
+Input [2]: [s_store_sk#15, s_city#16]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#14, s_city#15]
-Condition : (s_city#15 IN (Midway,Fairview) AND isnotnull(s_store_sk#14))
+Input [2]: [s_store_sk#15, s_city#16]
+Condition : (s_city#16 IN (Midway,Fairview) AND isnotnull(s_store_sk#15))
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#14]
-Input [2]: [s_store_sk#14, s_city#15]
+Output [1]: [s_store_sk#15]
+Input [2]: [s_store_sk#15, s_city#16]
(15) BroadcastExchange
-Input [1]: [s_store_sk#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
+Input [1]: [s_store_sk#15]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
(16) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_store_sk#5]
-Right keys [1]: [s_store_sk#14]
+Left keys [1]: [ss_store_sk#4]
+Right keys [1]: [s_store_sk#15]
Join condition: None
(17) Project [codegen id : 5]
-Output [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Input [9]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, s_store_sk#14]
+Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, s_store_sk#15]
(18) Scan parquet default.household_demographics
-Output [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Output [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [Or(EqualTo(hd_dep_count,5),EqualTo(hd_vehicle_count,3)), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Input [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
(20) Filter [codegen id : 3]
-Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
-Condition : (((hd_dep_count#18 = 5) OR (hd_vehicle_count#19 = 3)) AND isnotnull(hd_demo_sk#17))
+Input [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
+Condition : (((hd_dep_count#19 = 5) OR (hd_vehicle_count#20 = 3)) AND isnotnull(hd_demo_sk#18))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#17]
-Input [3]: [hd_demo_sk#17, hd_dep_count#18, hd_vehicle_count#19]
+Output [1]: [hd_demo_sk#18]
+Input [3]: [hd_demo_sk#18, hd_dep_count#19, hd_vehicle_count#20]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#17]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
+Input [1]: [hd_demo_sk#18]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
(23) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#17]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#18]
Join condition: None
(24) Project [codegen id : 5]
-Output [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9]
-Input [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, hd_demo_sk#17]
+Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, hd_demo_sk#18]
(25) Scan parquet default.customer_address
-Output [2]: [ca_address_sk#21, ca_city#22]
+Output [2]: [ca_address_sk#22, ca_city#23]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_city)]
ReadSchema: struct<ca_address_sk:int,ca_city:string>
(26) ColumnarToRow [codegen id : 4]
-Input [2]: [ca_address_sk#21, ca_city#22]
+Input [2]: [ca_address_sk#22, ca_city#23]
(27) Filter [codegen id : 4]
-Input [2]: [ca_address_sk#21, ca_city#22]
-Condition : (isnotnull(ca_address_sk#21) AND isnotnull(ca_city#22))
+Input [2]: [ca_address_sk#22, ca_city#23]
+Condition : (isnotnull(ca_address_sk#22) AND isnotnull(ca_city#23))
(28) BroadcastExchange
-Input [2]: [ca_address_sk#21, ca_city#22]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23]
+Input [2]: [ca_address_sk#22, ca_city#23]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24]
(29) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_addr_sk#4]
-Right keys [1]: [ca_address_sk#21]
+Left keys [1]: [ss_addr_sk#3]
+Right keys [1]: [ca_address_sk#22]
Join condition: None
(30) Project [codegen id : 5]
-Output [7]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, ca_city#22]
-Input [8]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, ca_address_sk#21, ca_city#22]
+Output [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#23]
+Input [8]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_address_sk#22, ca_city#23]
(31) HashAggregate [codegen id : 5]
-Input [7]: [ss_customer_sk#2, ss_addr_sk#4, ss_ticket_number#6, ss_ext_sales_price#7, ss_ext_list_price#8, ss_ext_tax#9, ca_city#22]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22]
-Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#7)), partial_sum(UnscaledValue(ss_ext_list_price#8)), partial_sum(UnscaledValue(ss_ext_tax#9))]
-Aggregate Attributes [3]: [sum#24, sum#25, sum#26]
-Results [7]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22, sum#27, sum#28, sum#29]
+Input [7]: [ss_customer_sk#1, ss_addr_sk#3, ss_ticket_number#5, ss_ext_sales_price#6, ss_ext_list_price#7, ss_ext_tax#8, ca_city#23]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23]
+Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#6)), partial_sum(UnscaledValue(ss_ext_list_price#7)), partial_sum(UnscaledValue(ss_ext_tax#8))]
+Aggregate Attributes [3]: [sum#25, sum#26, sum#27]
+Results [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23, sum#28, sum#29, sum#30]
(32) Exchange
-Input [7]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22, sum#27, sum#28, sum#29]
-Arguments: hashpartitioning(ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22, 5), ENSURE_REQUIREMENTS, [id=#30]
+Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23, sum#28, sum#29, sum#30]
+Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23, 5), ENSURE_REQUIREMENTS, [id=#31]
(33) HashAggregate [codegen id : 8]
-Input [7]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22, sum#27, sum#28, sum#29]
-Keys [4]: [ss_ticket_number#6, ss_customer_sk#2, ss_addr_sk#4, ca_city#22]
-Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#7)), sum(UnscaledValue(ss_ext_list_price#8)), sum(UnscaledValue(ss_ext_tax#9))]
-Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#7))#31, sum(UnscaledValue(ss_ext_list_price#8))#32, sum(UnscaledValue(ss_ext_tax#9))#33]
-Results [6]: [ss_ticket_number#6, ss_customer_sk#2, ca_city#22 AS bought_city#34, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#7))#31,17,2) AS extended_price#35, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#8))#32,17,2) AS list_price#36, MakeDecimal(sum(UnscaledValue(ss_ext_tax#9))#33,17,2) AS extended_tax#37]
+Input [7]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23, sum#28, sum#29, sum#30]
+Keys [4]: [ss_ticket_number#5, ss_customer_sk#1, ss_addr_sk#3, ca_city#23]
+Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#6)), sum(UnscaledValue(ss_ext_list_price#7)), sum(UnscaledValue(ss_ext_tax#8))]
+Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#6))#32, sum(UnscaledValue(ss_ext_list_price#7))#33, sum(UnscaledValue(ss_ext_tax#8))#34]
+Results [6]: [ss_ticket_number#5, ss_customer_sk#1, ca_city#23 AS bought_city#35, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#6))#32,17,2) AS extended_price#36, MakeDecimal(sum(UnscaledValue(ss_ext_list_price#7))#33,17,2) AS list_price#37, MakeDecimal(sum(UnscaledValue(ss_ext_tax#8))#34,17,2) AS extended_tax#38]
(34) Scan parquet default.customer
-Output [4]: [c_customer_sk#38, c_current_addr_sk#39, c_first_name#40, c_last_name#41]
+Output [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_addr_sk:int,c_first_name:string,c_last_name:string>
(35) ColumnarToRow [codegen id : 6]
-Input [4]: [c_customer_sk#38, c_current_addr_sk#39, c_first_name#40, c_last_name#41]
+Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
(36) Filter [codegen id : 6]
-Input [4]: [c_customer_sk#38, c_current_addr_sk#39, c_first_name#40, c_last_name#41]
-Condition : (isnotnull(c_customer_sk#38) AND isnotnull(c_current_addr_sk#39))
+Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
+Condition : (isnotnull(c_customer_sk#39) AND isnotnull(c_current_addr_sk#40))
(37) BroadcastExchange
-Input [4]: [c_customer_sk#38, c_current_addr_sk#39, c_first_name#40, c_last_name#41]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#42]
+Input [4]: [c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#43]
(38) BroadcastHashJoin [codegen id : 8]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#38]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#39]
Join condition: None
(39) Project [codegen id : 8]
-Output [8]: [ss_ticket_number#6, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_current_addr_sk#39, c_first_name#40, c_last_name#41]
-Input [10]: [ss_ticket_number#6, ss_customer_sk#2, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_customer_sk#38, c_current_addr_sk#39, c_first_name#40, c_last_name#41]
+Output [8]: [ss_ticket_number#5, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
+Input [10]: [ss_ticket_number#5, ss_customer_sk#1, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_customer_sk#39, c_current_addr_sk#40, c_first_name#41, c_last_name#42]
(40) ReusedExchange [Reuses operator id: 28]
-Output [2]: [ca_address_sk#21, ca_city#22]
+Output [2]: [ca_address_sk#22, ca_city#23]
(41) BroadcastHashJoin [codegen id : 8]
-Left keys [1]: [c_current_addr_sk#39]
-Right keys [1]: [ca_address_sk#21]
-Join condition: NOT (ca_city#22 = bought_city#34)
+Left keys [1]: [c_current_addr_sk#40]
+Right keys [1]: [ca_address_sk#22]
+Join condition: NOT (ca_city#23 = bought_city#35)
(42) Project [codegen id : 8]
-Output [8]: [c_last_name#41, c_first_name#40, ca_city#22, bought_city#34, ss_ticket_number#6, extended_price#35, extended_tax#37, list_price#36]
-Input [10]: [ss_ticket_number#6, bought_city#34, extended_price#35, list_price#36, extended_tax#37, c_current_addr_sk#39, c_first_name#40, c_last_name#41, ca_address_sk#21, ca_city#22]
+Output [8]: [c_last_name#42, c_first_name#41, ca_city#23, bought_city#35, ss_ticket_number#5, extended_price#36, extended_tax#38, list_price#37]
+Input [10]: [ss_ticket_number#5, bought_city#35, extended_price#36, list_price#37, extended_tax#38, c_current_addr_sk#40, c_first_name#41, c_last_name#42, ca_address_sk#22, ca_city#23]
(43) TakeOrderedAndProject
-Input [8]: [c_last_name#41, c_first_name#40, ca_city#22, bought_city#34, ss_ticket_number#6, extended_price#35, extended_tax#37, list_price#36]
-Arguments: 100, [c_last_name#41 ASC NULLS FIRST, ss_ticket_number#6 ASC NULLS FIRST], [c_last_name#41, c_first_name#40, ca_city#22, bought_city#34, ss_ticket_number#6, extended_price#35, extended_tax#37, list_price#36]
+Input [8]: [c_last_name#42, c_first_name#41, ca_city#23, bought_city#35, ss_ticket_number#5, extended_price#36, extended_tax#38, list_price#37]
+Arguments: 100, [c_last_name#42 ASC NULLS FIRST, ss_ticket_number#5 ASC NULLS FIRST], [c_last_name#42, c_first_name#41, ca_city#23, bought_city#35, ss_ticket_number#5, extended_price#36, extended_tax#38, list_price#37]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10
+ReusedExchange (44)
+
+
+(44) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#11]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/simplified.txt
index 819e550..b4d72f1 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q68/simplified.txt
@@ -17,10 +17,12 @@ TakeOrderedAndProject [c_last_name,ss_ticket_number,c_first_name,ca_city,bought_
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_addr_sk,ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax]
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_addr_sk,ss_store_sk,ss_ticket_number,ss_ext_sales_price,ss_ext_list_price,ss_ext_tax,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt
index 6bab797..fe4db35 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/explain.txt
@@ -36,158 +36,169 @@ TakeOrderedAndProject (34)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450815), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_cdemo_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_promo_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2450815), (ss_sold_date_sk#8 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_promo_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(2) ColumnarToRow [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2450815)) AND (ss_sold_date_sk#1 <= 2451179)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_item_sk#2)) AND isnotnull(ss_promo_sk#4))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3))
(4) Scan parquet default.date_dim
-Output [2]: [d_date_sk#9, d_year#10]
+Output [2]: [d_date_sk#10, d_year#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), GreaterThanOrEqual(d_date_sk,2450815), LessThanOrEqual(d_date_sk,2451179), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>
(5) ColumnarToRow [codegen id : 1]
-Input [2]: [d_date_sk#9, d_year#10]
+Input [2]: [d_date_sk#10, d_year#11]
(6) Filter [codegen id : 1]
-Input [2]: [d_date_sk#9, d_year#10]
-Condition : ((((isnotnull(d_year#10) AND (d_year#10 = 1998)) AND (d_date_sk#9 >= 2450815)) AND (d_date_sk#9 <= 2451179)) AND isnotnull(d_date_sk#9))
+Input [2]: [d_date_sk#10, d_year#11]
+Condition : ((((isnotnull(d_year#11) AND (d_year#11 = 1998)) AND (d_date_sk#10 >= 2450815)) AND (d_date_sk#10 <= 2451179)) AND isnotnull(d_date_sk#10))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#9]
-Input [2]: [d_date_sk#9, d_year#10]
+Output [1]: [d_date_sk#10]
+Input [2]: [d_date_sk#10, d_year#11]
(8) BroadcastExchange
-Input [1]: [d_date_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#11]
+Input [1]: [d_date_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
(9) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(10) Project [codegen id : 5]
-Output [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#9]
+Output [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#10]
(11) Scan parquet default.promotion
-Output [3]: [p_promo_sk#12, p_channel_email#13, p_channel_event#14]
+Output [3]: [p_promo_sk#13, p_channel_email#14, p_channel_event#15]
Batched: true
Location [not included in comparison]/{warehouse_dir}/promotion]
PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)]
ReadSchema: struct<p_promo_sk:int,p_channel_email:string,p_channel_event:string>
(12) ColumnarToRow [codegen id : 2]
-Input [3]: [p_promo_sk#12, p_channel_email#13, p_channel_event#14]
+Input [3]: [p_promo_sk#13, p_channel_email#14, p_channel_event#15]
(13) Filter [codegen id : 2]
-Input [3]: [p_promo_sk#12, p_channel_email#13, p_channel_event#14]
-Condition : (((p_channel_email#13 = N) OR (p_channel_event#14 = N)) AND isnotnull(p_promo_sk#12))
+Input [3]: [p_promo_sk#13, p_channel_email#14, p_channel_event#15]
+Condition : (((p_channel_email#14 = N) OR (p_channel_event#15 = N)) AND isnotnull(p_promo_sk#13))
(14) Project [codegen id : 2]
-Output [1]: [p_promo_sk#12]
-Input [3]: [p_promo_sk#12, p_channel_email#13, p_channel_event#14]
+Output [1]: [p_promo_sk#13]
+Input [3]: [p_promo_sk#13, p_channel_email#14, p_channel_event#15]
(15) BroadcastExchange
-Input [1]: [p_promo_sk#12]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#15]
+Input [1]: [p_promo_sk#13]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
(16) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_promo_sk#4]
-Right keys [1]: [p_promo_sk#12]
+Left keys [1]: [ss_promo_sk#3]
+Right keys [1]: [p_promo_sk#13]
Join condition: None
(17) Project [codegen id : 5]
-Output [6]: [ss_item_sk#2, ss_cdemo_sk#3, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, p_promo_sk#12]
+Output [6]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, p_promo_sk#13]
(18) Scan parquet default.customer_demographics
-Output [4]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19]
+Output [4]: [cd_demo_sk#17, cd_gender#18, cd_marital_status#19, cd_education_status#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_gender), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), EqualTo(cd_gender,F), EqualTo(cd_marital_status,W), EqualTo(cd_education_status,Primary), IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string>
(19) ColumnarToRow [codegen id : 3]
-Input [4]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19]
+Input [4]: [cd_demo_sk#17, cd_gender#18, cd_marital_status#19, cd_education_status#20]
(20) Filter [codegen id : 3]
-Input [4]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19]
-Condition : ((((((isnotnull(cd_gender#17) AND isnotnull(cd_marital_status#18)) AND isnotnull(cd_education_status#19)) AND (cd_gender#17 = F)) AND (cd_marital_status#18 = W)) AND (cd_education_status#19 = Primary)) AND isnotnull(cd_demo_sk#16))
+Input [4]: [cd_demo_sk#17, cd_gender#18, cd_marital_status#19, cd_education_status#20]
+Condition : ((((((isnotnull(cd_gender#18) AND isnotnull(cd_marital_status#19)) AND isnotnull(cd_education_status#20)) AND (cd_gender#18 = F)) AND (cd_marital_status#19 = W)) AND (cd_education_status#20 = Primary)) AND isnotnull(cd_demo_sk#17))
(21) Project [codegen id : 3]
-Output [1]: [cd_demo_sk#16]
-Input [4]: [cd_demo_sk#16, cd_gender#17, cd_marital_status#18, cd_education_status#19]
+Output [1]: [cd_demo_sk#17]
+Input [4]: [cd_demo_sk#17, cd_gender#18, cd_marital_status#19, cd_education_status#20]
(22) BroadcastExchange
-Input [1]: [cd_demo_sk#16]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#20]
+Input [1]: [cd_demo_sk#17]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#21]
(23) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#16]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#17]
Join condition: None
(24) Project [codegen id : 5]
-Output [5]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [7]: [ss_item_sk#2, ss_cdemo_sk#3, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#16]
+Output [5]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [7]: [ss_item_sk#1, ss_cdemo_sk#2, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, cd_demo_sk#17]
(25) Scan parquet default.item
-Output [2]: [i_item_sk#21, i_item_id#22]
+Output [2]: [i_item_sk#22, i_item_id#23]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string>
(26) ColumnarToRow [codegen id : 4]
-Input [2]: [i_item_sk#21, i_item_id#22]
+Input [2]: [i_item_sk#22, i_item_id#23]
(27) Filter [codegen id : 4]
-Input [2]: [i_item_sk#21, i_item_id#22]
-Condition : isnotnull(i_item_sk#21)
+Input [2]: [i_item_sk#22, i_item_id#23]
+Condition : isnotnull(i_item_sk#22)
(28) BroadcastExchange
-Input [2]: [i_item_sk#21, i_item_id#22]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#23]
+Input [2]: [i_item_sk#22, i_item_id#23]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#24]
(29) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#21]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#22]
Join condition: None
(30) Project [codegen id : 5]
-Output [5]: [ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_id#22]
-Input [7]: [ss_item_sk#2, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_sk#21, i_item_id#22]
+Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#23]
+Input [7]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#22, i_item_id#23]
(31) HashAggregate [codegen id : 5]
-Input [5]: [ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_id#22]
-Keys [1]: [i_item_id#22]
-Functions [4]: [partial_avg(ss_quantity#5), partial_avg(UnscaledValue(ss_list_price#6)), partial_avg(UnscaledValue(ss_coupon_amt#8)), partial_avg(UnscaledValue(ss_sales_price#7))]
-Aggregate Attributes [8]: [sum#24, count#25, sum#26, count#27, sum#28, count#29, sum#30, count#31]
-Results [9]: [i_item_id#22, sum#32, count#33, sum#34, count#35, sum#36, count#37, sum#38, count#39]
+Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#23]
+Keys [1]: [i_item_id#23]
+Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))]
+Aggregate Attributes [8]: [sum#25, count#26, sum#27, count#28, sum#29, count#30, sum#31, count#32]
+Results [9]: [i_item_id#23, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40]
(32) Exchange
-Input [9]: [i_item_id#22, sum#32, count#33, sum#34, count#35, sum#36, count#37, sum#38, count#39]
-Arguments: hashpartitioning(i_item_id#22, 5), ENSURE_REQUIREMENTS, [id=#40]
+Input [9]: [i_item_id#23, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40]
+Arguments: hashpartitioning(i_item_id#23, 5), ENSURE_REQUIREMENTS, [id=#41]
(33) HashAggregate [codegen id : 6]
-Input [9]: [i_item_id#22, sum#32, count#33, sum#34, count#35, sum#36, count#37, sum#38, count#39]
-Keys [1]: [i_item_id#22]
-Functions [4]: [avg(ss_quantity#5), avg(UnscaledValue(ss_list_price#6)), avg(UnscaledValue(ss_coupon_amt#8)), avg(UnscaledValue(ss_sales_price#7))]
-Aggregate Attributes [4]: [avg(ss_quantity#5)#41, avg(UnscaledValue(ss_list_price#6))#42, avg(UnscaledValue(ss_coupon_amt#8))#43, avg(UnscaledValue(ss_sales_price#7))#44]
-Results [5]: [i_item_id#22, avg(ss_quantity#5)#41 AS agg1#45, cast((avg(UnscaledValue(ss_list_price#6))#42 / 100.0) as decimal(11,6)) AS agg2#46, cast((avg(UnscaledValue(ss_coupon_amt#8))#43 / 100.0) as decimal(11,6)) AS agg3#47, cast((avg(UnscaledValue(ss_sales_price#7))#44 / 100.0) as decimal(11,6)) AS agg4#48]
+Input [9]: [i_item_id#23, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40]
+Keys [1]: [i_item_id#23]
+Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))]
+Aggregate Attributes [4]: [avg(ss_quantity#4)#42, avg(UnscaledValue(ss_list_price#5))#43, avg(UnscaledValue(ss_coupon_amt#7))#44, avg(UnscaledValue(ss_sales_price#6))#45]
+Results [5]: [i_item_id#23, avg(ss_quantity#4)#42 AS agg1#46, cast((avg(UnscaledValue(ss_list_price#5))#43 / 100.0) as decimal(11,6)) AS agg2#47, cast((avg(UnscaledValue(ss_coupon_amt#7))#44 / 100.0) as decimal(11,6)) AS agg3#48, cast((avg(UnscaledValue(ss_sales_price#6))#45 / 100.0) as decimal(11,6)) AS agg4#49]
(34) TakeOrderedAndProject
-Input [5]: [i_item_id#22, agg1#45, agg2#46, agg3#47, agg4#48]
-Arguments: 100, [i_item_id#22 ASC NULLS FIRST], [i_item_id#22, agg1#45, agg2#46, agg3#47, agg4#48]
+Input [5]: [i_item_id#23, agg1#46, agg2#47, agg3#48, agg4#49]
+Arguments: 100, [i_item_id#23 ASC NULLS FIRST], [i_item_id#23, agg1#46, agg2#47, agg3#48, agg4#49]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+ReusedExchange (35)
+
+
+(35) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#10]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/simplified.txt
index 1e972ea..c3e9e46 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7.sf100/simplified.txt
@@ -13,10 +13,12 @@ TakeOrderedAndProject [i_item_id,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_promo_sk,p_promo_sk]
Project [ss_item_sk,ss_cdemo_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_item_sk,ss_promo_sk]
+ Filter [ss_cdemo_sk,ss_item_sk,ss_promo_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
BroadcastExchange #2
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt
index 8f2f83b..c1f0c1b 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/explain.txt
@@ -36,158 +36,169 @@ TakeOrderedAndProject (34)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450815), LessThanOrEqual(ss_sold_date_sk,2451179), IsNotNull(ss_cdemo_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_item_sk:int,ss_cdemo_sk:int,ss_promo_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2450815), (ss_sold_date_sk#8 <= 2451179), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)]
+ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_promo_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>
(2) ColumnarToRow [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 5]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2450815)) AND (ss_sold_date_sk#1 <= 2451179)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_item_sk#2)) AND isnotnull(ss_promo_sk#4))
+Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3))
(4) Scan parquet default.customer_demographics
-Output [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
+Output [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_gender), IsNotNull(cd_marital_status), IsNotNull(cd_education_status), EqualTo(cd_gender,F), EqualTo(cd_marital_status,W), EqualTo(cd_education_status,Primary), IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string>
(5) ColumnarToRow [codegen id : 1]
-Input [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
+Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
(6) Filter [codegen id : 1]
-Input [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
-Condition : ((((((isnotnull(cd_gender#10) AND isnotnull(cd_marital_status#11)) AND isnotnull(cd_education_status#12)) AND (cd_gender#10 = F)) AND (cd_marital_status#11 = W)) AND (cd_education_status#12 = Primary)) AND isnotnull(cd_demo_sk#9))
+Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
+Condition : ((((((isnotnull(cd_gender#11) AND isnotnull(cd_marital_status#12)) AND isnotnull(cd_education_status#13)) AND (cd_gender#11 = F)) AND (cd_marital_status#12 = W)) AND (cd_education_status#13 = Primary)) AND isnotnull(cd_demo_sk#10))
(7) Project [codegen id : 1]
-Output [1]: [cd_demo_sk#9]
-Input [4]: [cd_demo_sk#9, cd_gender#10, cd_marital_status#11, cd_education_status#12]
+Output [1]: [cd_demo_sk#10]
+Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
(8) BroadcastExchange
-Input [1]: [cd_demo_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
+Input [1]: [cd_demo_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#14]
(9) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_cdemo_sk#3]
-Right keys [1]: [cd_demo_sk#9]
+Left keys [1]: [ss_cdemo_sk#2]
+Right keys [1]: [cd_demo_sk#10]
Join condition: None
(10) Project [codegen id : 5]
-Output [7]: [ss_sold_date_sk#1, ss_item_sk#2, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [9]: [ss_sold_date_sk#1, ss_item_sk#2, ss_cdemo_sk#3, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, cd_demo_sk#9]
+Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
+Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10]
(11) Scan parquet default.date_dim
-Output [2]: [d_date_sk#14, d_year#15]
+Output [2]: [d_date_sk#15, d_year#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1998), GreaterThanOrEqual(d_date_sk,2450815), LessThanOrEqual(d_date_sk,2451179), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [d_date_sk#14, d_year#15]
+Input [2]: [d_date_sk#15, d_year#16]
(13) Filter [codegen id : 2]
-Input [2]: [d_date_sk#14, d_year#15]
-Condition : ((((isnotnull(d_year#15) AND (d_year#15 = 1998)) AND (d_date_sk#14 >= 2450815)) AND (d_date_sk#14 <= 2451179)) AND isnotnull(d_date_sk#14))
+Input [2]: [d_date_sk#15, d_year#16]
+Condition : ((((isnotnull(d_year#16) AND (d_year#16 = 1998)) AND (d_date_sk#15 >= 2450815)) AND (d_date_sk#15 <= 2451179)) AND isnotnull(d_date_sk#15))
(14) Project [codegen id : 2]
-Output [1]: [d_date_sk#14]
-Input [2]: [d_date_sk#14, d_year#15]
+Output [1]: [d_date_sk#15]
+Input [2]: [d_date_sk#15, d_year#16]
(15) BroadcastExchange
-Input [1]: [d_date_sk#14]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
+Input [1]: [d_date_sk#15]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
(16) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#14]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#15]
Join condition: None
(17) Project [codegen id : 5]
-Output [6]: [ss_item_sk#2, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8]
-Input [8]: [ss_sold_date_sk#1, ss_item_sk#2, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, d_date_sk#14]
+Output [6]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
+Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#15]
(18) Scan parquet default.item
-Output [2]: [i_item_sk#17, i_item_id#18]
+Output [2]: [i_item_sk#18, i_item_id#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string>
(19) ColumnarToRow [codegen id : 3]
-Input [2]: [i_item_sk#17, i_item_id#18]
+Input [2]: [i_item_sk#18, i_item_id#19]
(20) Filter [codegen id : 3]
-Input [2]: [i_item_sk#17, i_item_id#18]
-Condition : isnotnull(i_item_sk#17)
+Input [2]: [i_item_sk#18, i_item_id#19]
+Condition : isnotnull(i_item_sk#18)
(21) BroadcastExchange
-Input [2]: [i_item_sk#17, i_item_id#18]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#19]
+Input [2]: [i_item_sk#18, i_item_id#19]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#20]
(22) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_item_sk#2]
-Right keys [1]: [i_item_sk#17]
+Left keys [1]: [ss_item_sk#1]
+Right keys [1]: [i_item_sk#18]
Join condition: None
(23) Project [codegen id : 5]
-Output [6]: [ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_id#18]
-Input [8]: [ss_item_sk#2, ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_sk#17, i_item_id#18]
+Output [6]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19]
+Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_sk#18, i_item_id#19]
(24) Scan parquet default.promotion
-Output [3]: [p_promo_sk#20, p_channel_email#21, p_channel_event#22]
+Output [3]: [p_promo_sk#21, p_channel_email#22, p_channel_event#23]
Batched: true
Location [not included in comparison]/{warehouse_dir}/promotion]
PushedFilters: [Or(EqualTo(p_channel_email,N),EqualTo(p_channel_event,N)), IsNotNull(p_promo_sk)]
ReadSchema: struct<p_promo_sk:int,p_channel_email:string,p_channel_event:string>
(25) ColumnarToRow [codegen id : 4]
-Input [3]: [p_promo_sk#20, p_channel_email#21, p_channel_event#22]
+Input [3]: [p_promo_sk#21, p_channel_email#22, p_channel_event#23]
(26) Filter [codegen id : 4]
-Input [3]: [p_promo_sk#20, p_channel_email#21, p_channel_event#22]
-Condition : (((p_channel_email#21 = N) OR (p_channel_event#22 = N)) AND isnotnull(p_promo_sk#20))
+Input [3]: [p_promo_sk#21, p_channel_email#22, p_channel_event#23]
+Condition : (((p_channel_email#22 = N) OR (p_channel_event#23 = N)) AND isnotnull(p_promo_sk#21))
(27) Project [codegen id : 4]
-Output [1]: [p_promo_sk#20]
-Input [3]: [p_promo_sk#20, p_channel_email#21, p_channel_event#22]
+Output [1]: [p_promo_sk#21]
+Input [3]: [p_promo_sk#21, p_channel_email#22, p_channel_event#23]
(28) BroadcastExchange
-Input [1]: [p_promo_sk#20]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#23]
+Input [1]: [p_promo_sk#21]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#24]
(29) BroadcastHashJoin [codegen id : 5]
-Left keys [1]: [ss_promo_sk#4]
-Right keys [1]: [p_promo_sk#20]
+Left keys [1]: [ss_promo_sk#3]
+Right keys [1]: [p_promo_sk#21]
Join condition: None
(30) Project [codegen id : 5]
-Output [5]: [ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_id#18]
-Input [7]: [ss_promo_sk#4, ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_id#18, p_promo_sk#20]
+Output [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19]
+Input [7]: [ss_promo_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19, p_promo_sk#21]
(31) HashAggregate [codegen id : 5]
-Input [5]: [ss_quantity#5, ss_list_price#6, ss_sales_price#7, ss_coupon_amt#8, i_item_id#18]
-Keys [1]: [i_item_id#18]
-Functions [4]: [partial_avg(ss_quantity#5), partial_avg(UnscaledValue(ss_list_price#6)), partial_avg(UnscaledValue(ss_coupon_amt#8)), partial_avg(UnscaledValue(ss_sales_price#7))]
-Aggregate Attributes [8]: [sum#24, count#25, sum#26, count#27, sum#28, count#29, sum#30, count#31]
-Results [9]: [i_item_id#18, sum#32, count#33, sum#34, count#35, sum#36, count#37, sum#38, count#39]
+Input [5]: [ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, i_item_id#19]
+Keys [1]: [i_item_id#19]
+Functions [4]: [partial_avg(ss_quantity#4), partial_avg(UnscaledValue(ss_list_price#5)), partial_avg(UnscaledValue(ss_coupon_amt#7)), partial_avg(UnscaledValue(ss_sales_price#6))]
+Aggregate Attributes [8]: [sum#25, count#26, sum#27, count#28, sum#29, count#30, sum#31, count#32]
+Results [9]: [i_item_id#19, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40]
(32) Exchange
-Input [9]: [i_item_id#18, sum#32, count#33, sum#34, count#35, sum#36, count#37, sum#38, count#39]
-Arguments: hashpartitioning(i_item_id#18, 5), ENSURE_REQUIREMENTS, [id=#40]
+Input [9]: [i_item_id#19, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40]
+Arguments: hashpartitioning(i_item_id#19, 5), ENSURE_REQUIREMENTS, [id=#41]
(33) HashAggregate [codegen id : 6]
-Input [9]: [i_item_id#18, sum#32, count#33, sum#34, count#35, sum#36, count#37, sum#38, count#39]
-Keys [1]: [i_item_id#18]
-Functions [4]: [avg(ss_quantity#5), avg(UnscaledValue(ss_list_price#6)), avg(UnscaledValue(ss_coupon_amt#8)), avg(UnscaledValue(ss_sales_price#7))]
-Aggregate Attributes [4]: [avg(ss_quantity#5)#41, avg(UnscaledValue(ss_list_price#6))#42, avg(UnscaledValue(ss_coupon_amt#8))#43, avg(UnscaledValue(ss_sales_price#7))#44]
-Results [5]: [i_item_id#18, avg(ss_quantity#5)#41 AS agg1#45, cast((avg(UnscaledValue(ss_list_price#6))#42 / 100.0) as decimal(11,6)) AS agg2#46, cast((avg(UnscaledValue(ss_coupon_amt#8))#43 / 100.0) as decimal(11,6)) AS agg3#47, cast((avg(UnscaledValue(ss_sales_price#7))#44 / 100.0) as decimal(11,6)) AS agg4#48]
+Input [9]: [i_item_id#19, sum#33, count#34, sum#35, count#36, sum#37, count#38, sum#39, count#40]
+Keys [1]: [i_item_id#19]
+Functions [4]: [avg(ss_quantity#4), avg(UnscaledValue(ss_list_price#5)), avg(UnscaledValue(ss_coupon_amt#7)), avg(UnscaledValue(ss_sales_price#6))]
+Aggregate Attributes [4]: [avg(ss_quantity#4)#42, avg(UnscaledValue(ss_list_price#5))#43, avg(UnscaledValue(ss_coupon_amt#7))#44, avg(UnscaledValue(ss_sales_price#6))#45]
+Results [5]: [i_item_id#19, avg(ss_quantity#4)#42 AS agg1#46, cast((avg(UnscaledValue(ss_list_price#5))#43 / 100.0) as decimal(11,6)) AS agg2#47, cast((avg(UnscaledValue(ss_coupon_amt#7))#44 / 100.0) as decimal(11,6)) AS agg3#48, cast((avg(UnscaledValue(ss_sales_price#6))#45 / 100.0) as decimal(11,6)) AS agg4#49]
(34) TakeOrderedAndProject
-Input [5]: [i_item_id#18, agg1#45, agg2#46, agg3#47, agg4#48]
-Arguments: 100, [i_item_id#18 ASC NULLS FIRST], [i_item_id#18, agg1#45, agg2#46, agg3#47, agg4#48]
+Input [5]: [i_item_id#19, agg1#46, agg2#47, agg3#48, agg4#49]
+Arguments: 100, [i_item_id#19 ASC NULLS FIRST], [i_item_id#19, agg1#46, agg2#47, agg3#48, agg4#49]
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
+ReusedExchange (35)
+
+
+(35) ReusedExchange [Reuses operator id: 15]
+Output [1]: [d_date_sk#15]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/simplified.txt
index 6d688cf..4de61c8 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q7/simplified.txt
@@ -11,14 +11,16 @@ TakeOrderedAndProject [i_item_id,agg1,agg2,agg3,agg4]
BroadcastHashJoin [ss_item_sk,i_item_sk]
Project [ss_item_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Project [ss_sold_date_sk,ss_item_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Project [ss_item_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
BroadcastHashJoin [ss_cdemo_sk,cd_demo_sk]
- Filter [ss_sold_date_sk,ss_cdemo_sk,ss_item_sk,ss_promo_sk]
+ Filter [ss_cdemo_sk,ss_item_sk,ss_promo_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_item_sk,ss_cdemo_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt]
+ Scan parquet default.store_sales [ss_item_sk,ss_cdemo_sk,ss_promo_sk,ss_quantity,ss_list_price,ss_sales_price,ss_coupon_amt,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #2
InputAdapter
- BroadcastExchange #2
+ BroadcastExchange #3
WholeStageCodegen (1)
Project [cd_demo_sk]
Filter [cd_gender,cd_marital_status,cd_education_status,cd_demo_sk]
@@ -26,7 +28,7 @@ TakeOrderedAndProject [i_item_id,agg1,agg2,agg3,agg4]
InputAdapter
Scan parquet default.customer_demographics [cd_demo_sk,cd_gender,cd_marital_status,cd_education_status]
InputAdapter
- BroadcastExchange #3
+ BroadcastExchange #2
WholeStageCodegen (2)
Project [d_date_sk]
Filter [d_year,d_date_sk]
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt
index 51b480e..9dc7b54 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/explain.txt
@@ -9,165 +9,166 @@
: +- Exchange (26)
: +- * HashAggregate (25)
: +- * Project (24)
- : +- * BroadcastHashJoin Inner BuildRight (23)
- : :- * Project (17)
- : : +- * BroadcastHashJoin Inner BuildRight (16)
- : : :- * Project (10)
- : : : +- * BroadcastHashJoin Inner BuildRight (9)
- : : : :- * Filter (3)
- : : : : +- * ColumnarToRow (2)
- : : : : +- Scan parquet default.store_sales (1)
- : : : +- BroadcastExchange (8)
- : : : +- * Project (7)
- : : : +- * Filter (6)
- : : : +- * ColumnarToRow (5)
- : : : +- Scan parquet default.date_dim (4)
- : : +- BroadcastExchange (15)
- : : +- * Project (14)
- : : +- * Filter (13)
- : : +- * ColumnarToRow (12)
- : : +- Scan parquet default.store (11)
- : +- BroadcastExchange (22)
- : +- * Project (21)
- : +- * Filter (20)
- : +- * ColumnarToRow (19)
- : +- Scan parquet default.household_demographics (18)
+ : +- * BroadcastHashJoin Inner BuildLeft (23)
+ : :- BroadcastExchange (18)
+ : : +- * Project (17)
+ : : +- * BroadcastHashJoin Inner BuildLeft (16)
+ : : :- BroadcastExchange (11)
+ : : : +- * Project (10)
+ : : : +- * BroadcastHashJoin Inner BuildLeft (9)
+ : : : :- BroadcastExchange (4)
+ : : : : +- * Filter (3)
+ : : : : +- * ColumnarToRow (2)
+ : : : : +- Scan parquet default.store_sales (1)
+ : : : +- * Project (8)
+ : : : +- * Filter (7)
+ : : : +- * ColumnarToRow (6)
+ : : : +- Scan parquet default.household_demographics (5)
+ : : +- * Project (15)
+ : : +- * Filter (14)
+ : : +- * ColumnarToRow (13)
+ : : +- Scan parquet default.store (12)
+ : +- * Project (22)
+ : +- * Filter (21)
+ : +- * ColumnarToRow (20)
+ : +- Scan parquet default.date_dim (19)
+- * Filter (32)
+- * ColumnarToRow (31)
+- Scan parquet default.customer (30)
(1) Scan parquet default.store_sales
-Output [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Output [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [In(ss_sold_date_sk, [2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332,2451606,2451666,2451211,2450846,2450875,2450966,2450936,2451361,2451212,2451880,2451059,2451789 [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [ss_sold_date_sk#5 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332,2451606,2451666,2451211,2450846,2450875,2450966,2450936,2451361,2451212,2451880,2451059, [...]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
-(2) ColumnarToRow [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+(2) ColumnarToRow [codegen id : 1]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
-(3) Filter [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Condition : ((((ss_sold_date_sk#1 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332,2451606,2451666,2451211,2450846,2450875,2450966,2450936,2451361,2451212,2451880,2451059,245 [...]
+(3) Filter [codegen id : 1]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Condition : ((isnotnull(ss_store_sk#3) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_customer_sk#1))
-(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#6, d_year#7, d_dom#8]
-Batched: true
-Location [not included in comparison]/{warehouse_dir}/date_dim]
-PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1998,1999,2000]), In(d_date_sk, [2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,245133 [...]
-ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
+(4) BroadcastExchange
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, false] as bigint)),false), [id=#6]
-(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+(5) Scan parquet default.household_demographics
+Output [4]: [hd_demo_sk#7, hd_buy_potential#8, hd_dep_count#9, hd_vehicle_count#10]
+Batched: true
+Location [not included in comparison]/{warehouse_dir}/household_demographics]
+PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000),EqualTo(hd_buy_potential,Unknown)), GreaterThan(hd_vehicle_count,0), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)]
+ReadSchema: struct<hd_demo_sk:int,hd_buy_potential:string,hd_dep_count:int,hd_vehicle_count:int>
-(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
-Condition : (((((isnotnull(d_dom#8) AND (d_dom#8 >= 1)) AND (d_dom#8 <= 2)) AND d_year#7 IN (1998,1999,2000)) AND d_date_sk#6 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332 [...]
+(6) ColumnarToRow
+Input [4]: [hd_demo_sk#7, hd_buy_potential#8, hd_dep_count#9, hd_vehicle_count#10]
-(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#6]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+(7) Filter
+Input [4]: [hd_demo_sk#7, hd_buy_potential#8, hd_dep_count#9, hd_vehicle_count#10]
+Condition : (((((isnotnull(hd_vehicle_count#10) AND isnotnull(hd_dep_count#9)) AND ((hd_buy_potential#8 = >10000) OR (hd_buy_potential#8 = Unknown))) AND (hd_vehicle_count#10 > 0)) AND ((cast(hd_dep_count#9 as double) / cast(hd_vehicle_count#10 as double)) > 1.0)) AND isnotnull(hd_demo_sk#7))
-(8) BroadcastExchange
-Input [1]: [d_date_sk#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
+(8) Project
+Output [1]: [hd_demo_sk#7]
+Input [4]: [hd_demo_sk#7, hd_buy_potential#8, hd_dep_count#9, hd_vehicle_count#10]
-(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#6]
+(9) BroadcastHashJoin [codegen id : 2]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#7]
Join condition: None
-(10) Project [codegen id : 4]
-Output [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Input [6]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, d_date_sk#6]
+(10) Project [codegen id : 2]
+Output [4]: [ss_customer_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Input [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5, hd_demo_sk#7]
+
+(11) BroadcastExchange
+Input [4]: [ss_customer_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#11]
-(11) Scan parquet default.store
-Output [2]: [s_store_sk#10, s_county#11]
+(12) Scan parquet default.store
+Output [2]: [s_store_sk#12, s_county#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_county, [Fairfield County,Ziebach County,Bronx County,Barrow County]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_county:string>
-(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
+(13) ColumnarToRow
+Input [2]: [s_store_sk#12, s_county#13]
-(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
-Condition : (s_county#11 IN (Fairfield County,Ziebach County,Bronx County,Barrow County) AND isnotnull(s_store_sk#10))
+(14) Filter
+Input [2]: [s_store_sk#12, s_county#13]
+Condition : (s_county#13 IN (Fairfield County,Ziebach County,Bronx County,Barrow County) AND isnotnull(s_store_sk#12))
-(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#10]
-Input [2]: [s_store_sk#10, s_county#11]
+(15) Project
+Output [1]: [s_store_sk#12]
+Input [2]: [s_store_sk#12, s_county#13]
-(15) BroadcastExchange
-Input [1]: [s_store_sk#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
-
-(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#10]
+(16) BroadcastHashJoin [codegen id : 3]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#12]
Join condition: None
-(17) Project [codegen id : 4]
-Output [3]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5]
-Input [5]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, s_store_sk#10]
+(17) Project [codegen id : 3]
+Output [3]: [ss_customer_sk#1, ss_ticket_number#4, ss_sold_date_sk#5]
+Input [5]: [ss_customer_sk#1, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5, s_store_sk#12]
-(18) Scan parquet default.household_demographics
-Output [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
-Batched: true
-Location [not included in comparison]/{warehouse_dir}/household_demographics]
-PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000),EqualTo(hd_buy_potential,Unknown)), GreaterThan(hd_vehicle_count,0), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)]
-ReadSchema: struct<hd_demo_sk:int,hd_buy_potential:string,hd_dep_count:int,hd_vehicle_count:int>
+(18) BroadcastExchange
+Input [3]: [ss_customer_sk#1, ss_ticket_number#4, ss_sold_date_sk#5]
+Arguments: HashedRelationBroadcastMode(List(cast(input[2, int, true] as bigint)),false), [id=#14]
-(19) ColumnarToRow [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+(19) Scan parquet default.date_dim
+Output [3]: [d_date_sk#15, d_year#16, d_dom#17]
+Batched: true
+Location [not included in comparison]/{warehouse_dir}/date_dim]
+PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1998,1999,2000]), In(d_date_sk, [2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,245133 [...]
+ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
-(20) Filter [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
-Condition : (((((isnotnull(hd_vehicle_count#16) AND isnotnull(hd_dep_count#15)) AND ((hd_buy_potential#14 = >10000) OR (hd_buy_potential#14 = Unknown))) AND (hd_vehicle_count#16 > 0)) AND ((cast(hd_dep_count#15 as double) / cast(hd_vehicle_count#16 as double)) > 1.0)) AND isnotnull(hd_demo_sk#13))
+(20) ColumnarToRow
+Input [3]: [d_date_sk#15, d_year#16, d_dom#17]
-(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#13]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+(21) Filter
+Input [3]: [d_date_sk#15, d_year#16, d_dom#17]
+Condition : (((((isnotnull(d_dom#17) AND (d_dom#17 >= 1)) AND (d_dom#17 <= 2)) AND d_year#16 IN (1998,1999,2000)) AND d_date_sk#15 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,24 [...]
-(22) BroadcastExchange
-Input [1]: [hd_demo_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
+(22) Project
+Output [1]: [d_date_sk#15]
+Input [3]: [d_date_sk#15, d_year#16, d_dom#17]
(23) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#13]
+Left keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [d_date_sk#15]
Join condition: None
(24) Project [codegen id : 4]
-Output [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Input [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5, hd_demo_sk#13]
+Output [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Input [4]: [ss_customer_sk#1, ss_ticket_number#4, ss_sold_date_sk#5, d_date_sk#15]
(25) HashAggregate [codegen id : 4]
-Input [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#18]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#19]
(26) Exchange
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#20]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#19]
+Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#20]
(27) HashAggregate [codegen id : 5]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#19]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#21]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count(1)#21 AS cnt#22]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#21 AS cnt#22]
(28) Filter [codegen id : 5]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#22]
Condition : ((cnt#22 >= 1) AND (cnt#22 <= 5))
(29) BroadcastExchange
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#22]
Arguments: HashedRelationBroadcastMode(List(cast(input[1, int, true] as bigint)),false), [id=#23]
(30) Scan parquet default.customer
@@ -185,19 +186,19 @@ Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27,
Condition : isnotnull(c_customer_sk#24)
(33) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_customer_sk#2]
+Left keys [1]: [ss_customer_sk#1]
Right keys [1]: [c_customer_sk#24]
Join condition: None
(34) Project [codegen id : 6]
-Output [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#5, cnt#22]
-Input [8]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22, c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Output [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#22]
+Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#22, c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
(35) Exchange
-Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#5, cnt#22]
+Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#22]
Arguments: rangepartitioning(cnt#22 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#29]
(36) Sort [codegen id : 7]
-Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#5, cnt#22]
+Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#22]
Arguments: [cnt#22 DESC NULLS LAST], true, 0
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/simplified.txt
index 8695f9d..67d569f0 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73.sf100/simplified.txt
@@ -15,39 +15,39 @@ WholeStageCodegen (7)
WholeStageCodegen (4)
HashAggregate [ss_ticket_number,ss_customer_sk] [count,count]
Project [ss_customer_sk,ss_ticket_number]
- BroadcastHashJoin [ss_hdemo_sk,hd_demo_sk]
- Project [ss_customer_sk,ss_hdemo_sk,ss_ticket_number]
- BroadcastHashJoin [ss_store_sk,s_store_sk]
- Project [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
- BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_customer_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
- InputAdapter
- BroadcastExchange #4
- WholeStageCodegen (1)
- Project [d_date_sk]
- Filter [d_dom,d_year,d_date_sk]
- ColumnarToRow
+ BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
+ InputAdapter
+ BroadcastExchange #4
+ WholeStageCodegen (3)
+ Project [ss_customer_sk,ss_ticket_number,ss_sold_date_sk]
+ BroadcastHashJoin [ss_store_sk,s_store_sk]
+ InputAdapter
+ BroadcastExchange #5
+ WholeStageCodegen (2)
+ Project [ss_customer_sk,ss_store_sk,ss_ticket_number,ss_sold_date_sk]
+ BroadcastHashJoin [ss_hdemo_sk,hd_demo_sk]
InputAdapter
- Scan parquet default.date_dim [d_date_sk,d_year,d_dom]
- InputAdapter
- BroadcastExchange #5
- WholeStageCodegen (2)
+ BroadcastExchange #6
+ WholeStageCodegen (1)
+ Filter [ss_store_sk,ss_hdemo_sk,ss_customer_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number,ss_sold_date_sk]
+ Project [hd_demo_sk]
+ Filter [hd_vehicle_count,hd_dep_count,hd_buy_potential,hd_demo_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.household_demographics [hd_demo_sk,hd_buy_potential,hd_dep_count,hd_vehicle_count]
Project [s_store_sk]
Filter [s_county,s_store_sk]
ColumnarToRow
InputAdapter
Scan parquet default.store [s_store_sk,s_county]
- InputAdapter
- BroadcastExchange #6
- WholeStageCodegen (3)
- Project [hd_demo_sk]
- Filter [hd_vehicle_count,hd_dep_count,hd_buy_potential,hd_demo_sk]
- ColumnarToRow
- InputAdapter
- Scan parquet default.household_demographics [hd_demo_sk,hd_buy_potential,hd_dep_count,hd_vehicle_count]
+ Project [d_date_sk]
+ Filter [d_dom,d_year,d_date_sk]
+ ColumnarToRow
+ InputAdapter
+ Scan parquet default.date_dim [d_date_sk,d_year,d_dom]
Filter [c_customer_sk]
ColumnarToRow
InputAdapter
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt
index 56ad4f4..559ef93 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/explain.txt
@@ -38,166 +38,177 @@
(1) Scan parquet default.store_sales
-Output [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Output [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [In(ss_sold_date_sk, [2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332,2451606,2451666,2451211,2450846,2450875,2450966,2450936,2451361,2451212,2451880,2451059,2451789 [...]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
+Location: InMemoryFileIndex []
+PartitionFilters: [ss_sold_date_sk#5 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332,2451606,2451666,2451211,2450846,2450875,2450966,2450936,2451361,2451212,2451880,2451059, [...]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_store_sk:int,ss_ticket_number:int>
(2) ColumnarToRow [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
(3) Filter [codegen id : 4]
-Input [5]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Condition : ((((ss_sold_date_sk#1 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332,2451606,2451666,2451211,2450846,2450875,2450966,2450936,2451361,2451212,2451880,2451059,245 [...]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5]
+Condition : ((isnotnull(ss_store_sk#3) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Output [3]: [d_date_sk#7, d_year#8, d_dom#9]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_dom), GreaterThanOrEqual(d_dom,1), LessThanOrEqual(d_dom,2), In(d_year, [1998,1999,2000]), In(d_date_sk, [2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,245133 [...]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dom:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
-Condition : (((((isnotnull(d_dom#8) AND (d_dom#8 >= 1)) AND (d_dom#8 <= 2)) AND d_year#7 IN (1998,1999,2000)) AND d_date_sk#6 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332 [...]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
+Condition : (((((isnotnull(d_dom#9) AND (d_dom#9 >= 1)) AND (d_dom#9 <= 2)) AND d_year#8 IN (1998,1999,2000)) AND d_date_sk#7 INSET (2451790,2451119,2451180,2451454,2450874,2450906,2450967,2451485,2451850,2451514,2451270,2451758,2451028,2451546,2450997,2450996,2451393,2451667,2451453,2451819,2450905,2451331,2451577,2451089,2451301,2451545,2451605,2451851,2451181,2451149,2451820,2451362,2451392,2451240,2450935,2451637,2451484,2451058,2451300,2451727,2451759,2450815,2451698,2451150,2451332 [...]
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#6]
-Input [3]: [d_date_sk#6, d_year#7, d_dom#8]
+Output [1]: [d_date_sk#7]
+Input [3]: [d_date_sk#7, d_year#8, d_dom#9]
(8) BroadcastExchange
-Input [1]: [d_date_sk#6]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#9]
+Input [1]: [d_date_sk#7]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#10]
(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#6]
+Left keys [1]: [ss_sold_date_sk#5]
+Right keys [1]: [d_date_sk#7]
Join condition: None
(10) Project [codegen id : 4]
-Output [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5]
-Input [6]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, d_date_sk#6]
+Output [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4]
+Input [6]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, ss_sold_date_sk#5, d_date_sk#7]
(11) Scan parquet default.store
-Output [2]: [s_store_sk#10, s_county#11]
+Output [2]: [s_store_sk#11, s_county#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [In(s_county, [Fairfield County,Ziebach County,Bronx County,Barrow County]), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_county:string>
(12) ColumnarToRow [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
+Input [2]: [s_store_sk#11, s_county#12]
(13) Filter [codegen id : 2]
-Input [2]: [s_store_sk#10, s_county#11]
-Condition : (s_county#11 IN (Fairfield County,Ziebach County,Bronx County,Barrow County) AND isnotnull(s_store_sk#10))
+Input [2]: [s_store_sk#11, s_county#12]
+Condition : (s_county#12 IN (Fairfield County,Ziebach County,Bronx County,Barrow County) AND isnotnull(s_store_sk#11))
(14) Project [codegen id : 2]
-Output [1]: [s_store_sk#10]
-Input [2]: [s_store_sk#10, s_county#11]
+Output [1]: [s_store_sk#11]
+Input [2]: [s_store_sk#11, s_county#12]
(15) BroadcastExchange
-Input [1]: [s_store_sk#10]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [1]: [s_store_sk#11]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_store_sk#4]
-Right keys [1]: [s_store_sk#10]
+Left keys [1]: [ss_store_sk#3]
+Right keys [1]: [s_store_sk#11]
Join condition: None
(17) Project [codegen id : 4]
-Output [3]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5]
-Input [5]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_store_sk#4, ss_ticket_number#5, s_store_sk#10]
+Output [3]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4]
+Input [5]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_ticket_number#4, s_store_sk#11]
(18) Scan parquet default.household_demographics
-Output [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Output [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
-PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(`hd_dep_count`), Or(EqualTo(hd_buy_potential,>10000),EqualTo(hd_buy_potential,Unknown)), GreaterThan(hd_vehicle_count,0), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)]
+PushedFilters: [IsNotNull(hd_vehicle_count), IsNotNull(hd_dep_count), Or(EqualTo(hd_buy_potential,>10000),EqualTo(hd_buy_potential,Unknown)), GreaterThan(hd_vehicle_count,0), GreaterThan(hd_vehicle_count,0), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_buy_potential:string,hd_dep_count:int,hd_vehicle_count:int>
(19) ColumnarToRow [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
(20) Filter [codegen id : 3]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
-Condition : (((((isnotnull(hd_vehicle_count#16) AND isnotnull(hd_dep_count#15)) AND ((hd_buy_potential#14 = >10000) OR (hd_buy_potential#14 = Unknown))) AND (hd_vehicle_count#16 > 0)) AND ((cast(hd_dep_count#15 as double) / cast(hd_vehicle_count#16 as double)) > 1.0)) AND isnotnull(hd_demo_sk#13))
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
+Condition : (((((isnotnull(hd_vehicle_count#17) AND isnotnull(hd_dep_count#16)) AND ((hd_buy_potential#15 = >10000) OR (hd_buy_potential#15 = Unknown))) AND (hd_vehicle_count#17 > 0)) AND ((cast(hd_dep_count#16 as double) / cast(hd_vehicle_count#17 as double)) > 1.0)) AND isnotnull(hd_demo_sk#14))
(21) Project [codegen id : 3]
-Output [1]: [hd_demo_sk#13]
-Input [4]: [hd_demo_sk#13, hd_buy_potential#14, hd_dep_count#15, hd_vehicle_count#16]
+Output [1]: [hd_demo_sk#14]
+Input [4]: [hd_demo_sk#14, hd_buy_potential#15, hd_dep_count#16, hd_vehicle_count#17]
(22) BroadcastExchange
-Input [1]: [hd_demo_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
+Input [1]: [hd_demo_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#18]
(23) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#13]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#14]
Join condition: None
(24) Project [codegen id : 4]
-Output [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Input [4]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_ticket_number#5, hd_demo_sk#13]
+Output [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Input [4]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_ticket_number#4, hd_demo_sk#14]
(25) HashAggregate [codegen id : 4]
-Input [2]: [ss_customer_sk#2, ss_ticket_number#5]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [2]: [ss_customer_sk#1, ss_ticket_number#4]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [partial_count(1)]
-Aggregate Attributes [1]: [count#18]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
+Aggregate Attributes [1]: [count#19]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
(26) Exchange
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Arguments: hashpartitioning(ss_ticket_number#5, ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#20]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
+Arguments: hashpartitioning(ss_ticket_number#4, ss_customer_sk#1, 5), ENSURE_REQUIREMENTS, [id=#21]
(27) HashAggregate [codegen id : 6]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, count#19]
-Keys [2]: [ss_ticket_number#5, ss_customer_sk#2]
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, count#20]
+Keys [2]: [ss_ticket_number#4, ss_customer_sk#1]
Functions [1]: [count(1)]
-Aggregate Attributes [1]: [count(1)#21]
-Results [3]: [ss_ticket_number#5, ss_customer_sk#2, count(1)#21 AS cnt#22]
+Aggregate Attributes [1]: [count(1)#22]
+Results [3]: [ss_ticket_number#4, ss_customer_sk#1, count(1)#22 AS cnt#23]
(28) Filter [codegen id : 6]
-Input [3]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22]
-Condition : ((cnt#22 >= 1) AND (cnt#22 <= 5))
+Input [3]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23]
+Condition : ((cnt#23 >= 1) AND (cnt#23 <= 5))
(29) Scan parquet default.customer
-Output [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
+Output [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk)]
ReadSchema: struct<c_customer_sk:int,c_salutation:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string>
(30) ColumnarToRow [codegen id : 5]
-Input [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
+Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
(31) Filter [codegen id : 5]
-Input [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
-Condition : isnotnull(c_customer_sk#23)
+Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Condition : isnotnull(c_customer_sk#24)
(32) BroadcastExchange
-Input [5]: [c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#28]
+Input [5]: [c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#29]
(33) BroadcastHashJoin [codegen id : 6]
-Left keys [1]: [ss_customer_sk#2]
-Right keys [1]: [c_customer_sk#23]
+Left keys [1]: [ss_customer_sk#1]
+Right keys [1]: [c_customer_sk#24]
Join condition: None
(34) Project [codegen id : 6]
-Output [6]: [c_last_name#26, c_first_name#25, c_salutation#24, c_preferred_cust_flag#27, ss_ticket_number#5, cnt#22]
-Input [8]: [ss_ticket_number#5, ss_customer_sk#2, cnt#22, c_customer_sk#23, c_salutation#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27]
+Output [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#23]
+Input [8]: [ss_ticket_number#4, ss_customer_sk#1, cnt#23, c_customer_sk#24, c_salutation#25, c_first_name#26, c_last_name#27, c_preferred_cust_flag#28]
(35) Exchange
-Input [6]: [c_last_name#26, c_first_name#25, c_salutation#24, c_preferred_cust_flag#27, ss_ticket_number#5, cnt#22]
-Arguments: rangepartitioning(cnt#22 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#29]
+Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#23]
+Arguments: rangepartitioning(cnt#23 DESC NULLS LAST, 5), ENSURE_REQUIREMENTS, [id=#30]
(36) Sort [codegen id : 7]
-Input [6]: [c_last_name#26, c_first_name#25, c_salutation#24, c_preferred_cust_flag#27, ss_ticket_number#5, cnt#22]
-Arguments: [cnt#22 DESC NULLS LAST], true, 0
+Input [6]: [c_last_name#27, c_first_name#26, c_salutation#25, c_preferred_cust_flag#28, ss_ticket_number#4, cnt#23]
+Arguments: [cnt#23 DESC NULLS LAST], true, 0
+
+===== Subqueries =====
+
+Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#5 IN dynamicpruning#6
+ReusedExchange (37)
+
+
+(37) ReusedExchange [Reuses operator id: 8]
+Output [1]: [d_date_sk#7]
+
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/simplified.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/simplified.txt
index 5e49f6c..5bb7daa 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/simplified.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q73/simplified.txt
@@ -17,10 +17,12 @@ WholeStageCodegen (7)
BroadcastHashJoin [ss_store_sk,s_store_sk]
Project [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
BroadcastHashJoin [ss_sold_date_sk,d_date_sk]
- Filter [ss_sold_date_sk,ss_store_sk,ss_hdemo_sk,ss_customer_sk]
+ Filter [ss_store_sk,ss_hdemo_sk,ss_customer_sk]
ColumnarToRow
InputAdapter
- Scan parquet default.store_sales [ss_sold_date_sk,ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number]
+ Scan parquet default.store_sales [ss_customer_sk,ss_hdemo_sk,ss_store_sk,ss_ticket_number,ss_sold_date_sk]
+ SubqueryBroadcast [d_date_sk] #1
+ ReusedExchange [d_date_sk] #3
InputAdapter
BroadcastExchange #3
WholeStageCodegen (1)
diff --git a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt
index 3e5c3d3..b06961e 100644
--- a/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt
+++ b/sql/core/src/test/resources/tpcds-plan-stability/approved-plans-modified/q79.sf100/explain.txt
@@ -39,170 +39,181 @@ TakeOrderedAndProject (37)
(1) Scan parquet default.store_sales
-Output [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
+Output [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
Batched: true
-Location [not included in comparison]/{warehouse_dir}/store_sales]
-PushedFilters: [IsNotNull(ss_sold_date_sk), GreaterThanOrEqual(ss_sold_date_sk,2450819), LessThanOrEqual(ss_sold_date_sk,2451904), IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
-ReadSchema: struct<ss_sold_date_sk:int,ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_coupon_amt:decimal(7,2),ss_net_profit:decimal(7,2)>
+Location: InMemoryFileIndex []
+PartitionFilters: [isnotnull(ss_sold_date_sk#8), (ss_sold_date_sk#8 >= 2450819), (ss_sold_date_sk#8 <= 2451904), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
+PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_customer_sk)]
+ReadSchema: struct<ss_customer_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_ticket_number:int,ss_coupon_amt:decimal(7,2),ss_net_profit:decimal(7,2)>
(2) ColumnarToRow [codegen id : 4]
-Input [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
(3) Filter [codegen id : 4]
-Input [8]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Condition : (((((isnotnull(ss_sold_date_sk#1) AND (ss_sold_date_sk#1 >= 2450819)) AND (ss_sold_date_sk#1 <= 2451904)) AND isnotnull(ss_store_sk#5)) AND isnotnull(ss_hdemo_sk#3)) AND isnotnull(ss_customer_sk#2))
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8]
+Condition : ((isnotnull(ss_store_sk#4) AND isnotnull(ss_hdemo_sk#2)) AND isnotnull(ss_customer_sk#1))
(4) Scan parquet default.date_dim
-Output [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Output [3]: [d_date_sk#10, d_year#11, d_dow#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_dow), EqualTo(d_dow,1), In(d_year, [1998,1999,2000]), GreaterThanOrEqual(d_date_sk,2450819), LessThanOrEqual(d_date_sk,2451904), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_dow:int>
(5) ColumnarToRow [codegen id : 1]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
(6) Filter [codegen id : 1]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
-Condition : (((((isnotnull(d_dow#11) AND (d_dow#11 = 1)) AND d_year#10 IN (1998,1999,2000)) AND (d_date_sk#9 >= 2450819)) AND (d_date_sk#9 <= 2451904)) AND isnotnull(d_date_sk#9))
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
+Condition : (((((isnotnull(d_dow#12) AND (d_dow#12 = 1)) AND d_year#11 IN (1998,1999,2000)) AND (d_date_sk#10 >= 2450819)) AND (d_date_sk#10 <= 2451904)) AND isnotnull(d_date_sk#10))
(7) Project [codegen id : 1]
-Output [1]: [d_date_sk#9]
-Input [3]: [d_date_sk#9, d_year#10, d_dow#11]
+Output [1]: [d_date_sk#10]
+Input [3]: [d_date_sk#10, d_year#11, d_dow#12]
(8) BroadcastExchange
-Input [1]: [d_date_sk#9]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#12]
+Input [1]: [d_date_sk#10]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#13]
(9) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_sold_date_sk#1]
-Right keys [1]: [d_date_sk#9]
+Left keys [1]: [ss_sold_date_sk#8]
+Right keys [1]: [d_date_sk#10]
Join condition: None
(10) Project [codegen id : 4]
-Output [7]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [9]: [ss_sold_date_sk#1, ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, d_date_sk#9]
+Output [7]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [9]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, ss_sold_date_sk#8, d_date_sk#10]
(11) Scan parquet default.household_demographics
-Output [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15]
+Output [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [Or(EqualTo(hd_dep_count,8),GreaterThan(hd_vehicle_count,0)), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_dep_count:int,hd_vehicle_count:int>
(12) ColumnarToRow [codegen id : 2]
-Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15]
+Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16]
(13) Filter [codegen id : 2]
-Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15]
-Condition : (((hd_dep_count#14 = 8) OR (hd_vehicle_count#15 > 0)) AND isnotnull(hd_demo_sk#13))
+Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16]
+Condition : (((hd_dep_count#15 = 8) OR (hd_vehicle_count#16 > 0)) AND isnotnull(hd_demo_sk#14))
(14) Project [codegen id : 2]
-Output [1]: [hd_demo_sk#13]
-Input [3]: [hd_demo_sk#13, hd_dep_count#14, hd_vehicle_count#15]
+Output [1]: [hd_demo_sk#14]
+Input [3]: [hd_demo_sk#14, hd_dep_count#15, hd_vehicle_count#16]
(15) BroadcastExchange
-Input [1]: [hd_demo_sk#13]
-Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#16]
+Input [1]: [hd_demo_sk#14]
+Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#17]
(16) BroadcastHashJoin [codegen id : 4]
-Left keys [1]: [ss_hdemo_sk#3]
-Right keys [1]: [hd_demo_sk#13]
+Left keys [1]: [ss_hdemo_sk#2]
+Right keys [1]: [hd_demo_sk#14]
Join condition: None
(17) Project [codegen id : 4]
-Output [6]: [ss_customer_sk#2, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8]
-Input [8]: [ss_customer_sk#2, ss_hdemo_sk#3, ss_addr_sk#4, ss_store_sk#5, ss_ticket_number#6, ss_coupon_amt#7, ss_net_profit#8, hd_demo_sk#13]
+Output [6]: [ss_customer_sk#1, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7]
+Input [8]: [ss_customer_sk#1, ss_hdemo_sk#2, ss_addr_sk#3, ss_store_sk#4, ss_ticket_number#5, ss_coupon_amt#6, ss_net_profit#7, hd_demo_sk#14]
(18) Scan parquet default.store
-Output [3]: [s_store_sk#17, s_number_employees#18, s_city#19]
... 153027 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org