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