This is an automated email from the ASF dual-hosted git repository.

snuyanzin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 2d515d3bd47 [FLINK-39763][table] Allow inferring constants with `IS 
NOT DISTINCT FROM`
2d515d3bd47 is described below

commit 2d515d3bd4788b3ce211a27e48b36cae545bb5dc
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Tue Jun 16 08:12:01 2026 +0200

    [FLINK-39763][table] Allow inferring constants with `IS NOT DISTINCT FROM`
---
 .../main/java/org/apache/calcite/rex/RexUtil.java  |  12 +-
 .../plan/batch/sql/DynamicFunctionPlanTest.xml     |   9 +-
 .../planner/plan/batch/sql/RemoveShuffleTest.xml   |  54 ++++-----
 .../plan/batch/sql/join/BroadcastHashJoinTest.xml  |  85 ++++----------
 .../plan/batch/sql/join/NestedLoopJoinTest.xml     |  49 ++++----
 .../plan/batch/sql/join/ShuffledHashJoinTest.xml   | 127 ++++++++-------------
 .../plan/batch/sql/join/SortMergeJoinTest.xml      | 127 ++++++++-------------
 .../table/planner/plan/optimize/ScanReuseTest.xml  |  26 ++---
 .../planner/plan/stream/sql/join/JoinTest.xml      |  86 +++++++-------
 .../batch/sql/join/BroadcastHashJoinTest.scala     |   7 ++
 .../plan/batch/sql/join/ShuffledHashJoinTest.scala |   7 ++
 .../plan/batch/sql/join/SortMergeJoinTest.scala    |   6 +
 .../runtime/batch/table/DecimalITCase.scala        |  20 ----
 13 files changed, 260 insertions(+), 355 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java
index bddc6a15239..3072d3b9f38 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java
@@ -76,13 +76,9 @@ import static 
org.apache.calcite.rel.type.RelDataType.PRECISION_NOT_SPECIFIED;
 
 /**
  * Default implementation of {@link org.apache.calcite.rex.RexUtil}, the class 
was copied over
- * because of current Calcite way of inferring constants from IS NOT DISTINCT 
FROM clashes with
- * filter push down.
+ * because of Flink modifications.
  *
- * <p>Lines 402 ~ 404, Use Calcite 1.32.0 behavior for {@link 
RexUtil#gatherConstraints(Class,
- * RexNode, Map, Set, RexBuilder)}.
- *
- * <p>FLINK modifications (backport of CALCITE-6764): Line 2481~2485
+ * <p>FLINK modifications (backport of CALCITE-6764): Line 2488~2492
  */
 public class RexUtil {
 
@@ -401,9 +397,7 @@ public class RexUtil {
         final RexNode right;
         switch (predicate.getKind()) {
             case EQUALS:
-                // FLINK BEGIN MODIFICATION
-                // case IS_NOT_DISTINCT_FROM:
-                // FLINK END MODIFICATION
+            case IS_NOT_DISTINCT_FROM:
                 left = ((RexCall) predicate).getOperands().get(0);
                 right = ((RexCall) predicate).getOperands().get(1);
                 break;
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/DynamicFunctionPlanTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/DynamicFunctionPlanTest.xml
index c4442ef5dde..041111d0538 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/DynamicFunctionPlanTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/DynamicFunctionPlanTest.xml
@@ -60,10 +60,11 @@ LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], 
EXPR$3=[COUNT()])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-HashAggregate(isMerge=[false], groupBy=[cat, hh], select=[cat, hh, SUM(cnt) AS 
EXPR$2, COUNT(*) AS EXPR$3])
-+- Exchange(distribution=[hash[cat, hh]])
-   +- Calc(select=[cat, SUBSTR(CAST(LOCALTIME() AS VARCHAR(2147483647)), 1, 2) 
AS hh, cnt], where=[(SUBSTR(CAST(ts AS VARCHAR(2147483647)), 1, 2) = 
SUBSTR(CAST(LOCALTIME() AS VARCHAR(2147483647)), 1, 2))])
-      +- TableSourceScan(table=[[default_catalog, default_database, src, 
filter=[], project=[cat, cnt, ts], metadata=[]]], fields=[cat, cnt, ts])
+Calc(select=[cat, SUBSTR(CAST(LOCALTIME() AS VARCHAR(2147483647)), 1, 2) AS 
hh, EXPR$2, EXPR$3])
++- HashAggregate(isMerge=[false], groupBy=[cat], select=[cat, SUM(cnt) AS 
EXPR$2, COUNT(*) AS EXPR$3])
+   +- Exchange(distribution=[hash[cat]])
+      +- Calc(select=[cat, cnt], where=[(SUBSTR(CAST(ts AS 
VARCHAR(2147483647)), 1, 2) = SUBSTR(CAST(LOCALTIME() AS VARCHAR(2147483647)), 
1, 2))])
+         +- TableSourceScan(table=[[default_catalog, default_database, src, 
filter=[], project=[cat, cnt, ts], metadata=[]]], fields=[cat, cnt, ts])
 ]]>
     </Resource>
   </TestCase>
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/RemoveShuffleTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/RemoveShuffleTest.xml
index be2b0e58f29..f08d5635de7 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/RemoveShuffleTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/RemoveShuffleTest.xml
@@ -490,19 +490,20 @@ LogicalProject(a=[$0], b=[$1], c=[$2], d=[$3], e=[$4], 
f=[$5], a0=[$6], b0=[$7],
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-MultipleInput(readOrder=[0,1,0], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(a = d0)], select=[a, b, c, d, e, f, a0, b0, c0, d0, e0, f0], 
build=[left])\n:- [#1] Exchange(distribution=[hash[a]])\n+- 
HashJoin(joinType=[RightOuterJoin], where=[(a = d)], select=[a, b, c, d, e, f], 
build=[right])\n   :- [#2] Exchange(distribution=[hash[a]])\n   +- [#3] 
Exchange(distribution=[hash[d]])\n])
-:- Exchange(distribution=[hash[a]])
-:  +- HashJoin(joinType=[RightOuterJoin], where=[(a = d)], select=[a, b, c, d, 
e, f], build=[right])
-:     :- Exchange(distribution=[hash[a]])
-:     :  +- LegacyTableSourceScan(table=[[default_catalog, default_database, 
x, source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
-:     +- Exchange(distribution=[hash[d]])
-:        +- Calc(select=[d, CAST(2 AS BIGINT) AS e, f], where=[(e = 2)])
-:           +- LegacyTableSourceScan(table=[[default_catalog, 
default_database, y, source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
-:- Exchange(distribution=[hash[a]])
-:  +- LegacyTableSourceScan(table=[[default_catalog, default_database, x, 
source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
-+- Exchange(distribution=[hash[d]])
-   +- Calc(select=[d, CAST(2 AS BIGINT) AS e, f], where=[(e = 2)])
-      +- LegacyTableSourceScan(table=[[default_catalog, default_database, y, 
source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
+Calc(select=[a, b, c, d, CAST(2 AS BIGINT) AS e, f, a0, b0, c0, d0, CAST(2 AS 
BIGINT) AS e0, f0])
++- MultipleInput(readOrder=[0,1,0], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(a = d0)], select=[a, b, c, d, f, a0, b0, c0, d0, f0], build=[left])\n:- 
[#1] Exchange(distribution=[hash[a]])\n+- HashJoin(joinType=[RightOuterJoin], 
where=[(a = d)], select=[a, b, c, d, f], build=[right])\n   :- [#2] 
Exchange(distribution=[hash[a]])\n   +- [#3] 
Exchange(distribution=[hash[d]])\n])
+   :- Exchange(distribution=[hash[a]])
+   :  +- HashJoin(joinType=[RightOuterJoin], where=[(a = d)], select=[a, b, c, 
d, f], build=[right])
+   :     :- Exchange(distribution=[hash[a]])
+   :     :  +- LegacyTableSourceScan(table=[[default_catalog, 
default_database, x, source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
+   :     +- Exchange(distribution=[hash[d]])
+   :        +- Calc(select=[d, f], where=[(e = 2)])
+   :           +- LegacyTableSourceScan(table=[[default_catalog, 
default_database, y, source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
+   :- Exchange(distribution=[hash[a]])
+   :  +- LegacyTableSourceScan(table=[[default_catalog, default_database, x, 
source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[d]])
+      +- Calc(select=[d, f], where=[(e = 2)])
+         +- LegacyTableSourceScan(table=[[default_catalog, default_database, 
y, source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
 ]]>
     </Resource>
   </TestCase>
@@ -1158,19 +1159,20 @@ LogicalProject(a=[$0], b=[$1], c=[$2], d=[$3], e=[$4], 
f=[$5], a0=[$6], b0=[$7],
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-MultipleInput(members=[\nSortMergeJoin(joinType=[InnerJoin], where=[(a = d0)], 
select=[a, b, c, d, e, f, a0, b0, c0, d0, e0, f0])\n:- [#1] 
Exchange(distribution=[hash[a]])\n+- SortMergeJoin(joinType=[RightOuterJoin], 
where=[(a = d)], select=[a, b, c, d, e, f])\n   :- [#2] 
Exchange(distribution=[hash[a]])\n   +- [#3] 
Exchange(distribution=[hash[d]])\n])
-:- Exchange(distribution=[hash[a]])
-:  +- SortMergeJoin(joinType=[RightOuterJoin], where=[(a = d)], select=[a, b, 
c, d, e, f])
-:     :- Exchange(distribution=[hash[a]])
-:     :  +- LegacyTableSourceScan(table=[[default_catalog, default_database, 
x, source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
-:     +- Exchange(distribution=[hash[d]])
-:        +- Calc(select=[d, CAST(2 AS BIGINT) AS e, f], where=[(e = 2)])
-:           +- LegacyTableSourceScan(table=[[default_catalog, 
default_database, y, source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
-:- Exchange(distribution=[hash[a]])
-:  +- LegacyTableSourceScan(table=[[default_catalog, default_database, x, 
source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
-+- Exchange(distribution=[hash[d]])
-   +- Calc(select=[d, CAST(2 AS BIGINT) AS e, f], where=[(e = 2)])
-      +- LegacyTableSourceScan(table=[[default_catalog, default_database, y, 
source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
+Calc(select=[a, b, c, d, CAST(2 AS BIGINT) AS e, f, a0, b0, c0, d0, CAST(2 AS 
BIGINT) AS e0, f0])
++- MultipleInput(members=[\nSortMergeJoin(joinType=[InnerJoin], where=[(a = 
d0)], select=[a, b, c, d, f, a0, b0, c0, d0, f0])\n:- [#1] 
Exchange(distribution=[hash[a]])\n+- SortMergeJoin(joinType=[RightOuterJoin], 
where=[(a = d)], select=[a, b, c, d, f])\n   :- [#2] 
Exchange(distribution=[hash[a]])\n   +- [#3] 
Exchange(distribution=[hash[d]])\n])
+   :- Exchange(distribution=[hash[a]])
+   :  +- SortMergeJoin(joinType=[RightOuterJoin], where=[(a = d)], select=[a, 
b, c, d, f])
+   :     :- Exchange(distribution=[hash[a]])
+   :     :  +- LegacyTableSourceScan(table=[[default_catalog, 
default_database, x, source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
+   :     +- Exchange(distribution=[hash[d]])
+   :        +- Calc(select=[d, f], where=[(e = 2)])
+   :           +- LegacyTableSourceScan(table=[[default_catalog, 
default_database, y, source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
+   :- Exchange(distribution=[hash[a]])
+   :  +- LegacyTableSourceScan(table=[[default_catalog, default_database, x, 
source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[d]])
+      +- Calc(select=[d, f], where=[(e = 2)])
+         +- LegacyTableSourceScan(table=[[default_catalog, default_database, 
y, source: [TestTableSource(d, e, f)]]], fields=[d, e, f])
 ]]>
     </Resource>
   </TestCase>
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.xml
index 897e52cf7f7..dc0d9c3e721 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.xml
@@ -138,14 +138,15 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, b, CAST(2 AS INTEGER) AS d, e])
-+- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[((a = d) AND (b = e))], select=[a, b, d, e], isBroadcast=[true], 
build=[right])\n:- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:  +- [#2] Exchange(distribution=[hash[a]])\n+- 
[#1] Exchange(distribution=[broadcast])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, e])
++- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(b = e)], select=[b, e], isBroadcast=[true], build=[right])\n:- 
Calc(select=[b])\n:  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:     +- [#2] Exchange(distribution=[hash[a]])\n+- 
[#1] Exchange(distribution=[broadcast])\n])
    :- Exchange(distribution=[broadcast])
-   :  +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-   :     +- Exchange(distribution=[hash[d]])
-   :        +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+   :  +- Calc(select=[e])
+   :     +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+   :        +- Exchange(distribution=[hash[d]])
+   :           +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
    +- Exchange(distribution=[hash[a]])
       +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
          +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
@@ -174,46 +175,6 @@ Calc(select=[c, g])
    +- Exchange(distribution=[broadcast])
       +- Calc(select=[d, e, g])
          +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable2]], fields=[d, e, f, g, h])
-]]>
-    </Resource>
-  </TestCase>
-  <TestCase name="testInnerJoinWithJoinConditionPushDown">
-    <Resource name="sql">
-      <![CDATA[
-SELECT * FROM
-   (select a, count(b) as b from MyTable1 group by a)
-   join
-   (select d, count(e) as e from MyTable2 group by d)
-   on a = d and b = e and d = 2 and b = 1
-]]>
-    </Resource>
-    <Resource name="ast">
-      <![CDATA[
-LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
-+- LogicalJoin(condition=[AND(=($0, $2), =($1, $3), =($2, 2), =($1, 1))], 
joinType=[inner])
-   :- LogicalAggregate(group=[{0}], b=[COUNT($1)])
-   :  +- LogicalProject(a=[$0], b=[$1])
-   :     +- LogicalTableScan(table=[[default_catalog, default_database, 
MyTable1]])
-   +- LogicalAggregate(group=[{0}], e=[COUNT($1)])
-      +- LogicalProject(d=[$0], e=[$1])
-         +- LogicalTableScan(table=[[default_catalog, default_database, 
MyTable2]])
-]]>
-    </Resource>
-    <Resource name="optimized exec plan">
-      <![CDATA[
-Calc(select=[a, 1 AS b, CAST(2 AS INTEGER) AS d, 1 AS e])
-+- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(a = d)], select=[a, d], isBroadcast=[true], build=[right])\n:- 
Calc(select=[a], where=[(b = 1)])\n:  +- HashAggregate(isMerge=[true], 
groupBy=[a], select=[a, Final_COUNT(count$0) AS b])\n:     +- [#2] 
Exchange(distribution=[hash[a]])\n+- [#1] Exchange(distribution=[broadcast])\n])
-   :- Exchange(distribution=[broadcast])
-   :  +- Calc(select=[d], where=[(e = 1)])
-   :     +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-   :        +- Exchange(distribution=[hash[d]])
-   :           +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
-   :              +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
-   +- Exchange(distribution=[hash[a]])
-      +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-         +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-            +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable1]], fields=[a, b, c])
 ]]>
     </Resource>
   </TestCase>
@@ -311,14 +272,15 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[CAST(2 AS INTEGER) AS a, b, d, CAST(e AS BIGINT) AS e])
-+- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[((a = d) AND (b = e))], select=[a, b, d, e], isBroadcast=[true], 
build=[right])\n:- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:  +- [#2] Exchange(distribution=[hash[a]])\n+- 
[#1] Exchange(distribution=[broadcast])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, CAST(e AS 
BIGINT) AS e])
++- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(b = e)], select=[b, e], isBroadcast=[true], build=[right])\n:- 
Calc(select=[b])\n:  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:     +- [#2] Exchange(distribution=[hash[a]])\n+- 
[#1] Exchange(distribution=[broadcast])\n])
    :- Exchange(distribution=[broadcast])
-   :  +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-   :     +- Exchange(distribution=[hash[d]])
-   :        +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+   :  +- Calc(select=[e])
+   :     +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+   :        +- Exchange(distribution=[hash[d]])
+   :           +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
    +- Exchange(distribution=[hash[a]])
       +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
          +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
@@ -547,14 +509,15 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, CAST(b AS BIGINT) AS b, CAST(2 AS INTEGER) AS d, e])
-+- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[((a = d) AND (b = e))], select=[a, b, d, e], isBroadcast=[true], 
build=[right])\n:- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:  +- [#2] Exchange(distribution=[hash[a]])\n+- 
[#1] Exchange(distribution=[broadcast])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, CAST(b AS BIGINT) AS b, CAST(2 AS 
INTEGER) AS d, e])
++- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(b = e)], select=[b, e], isBroadcast=[true], build=[right])\n:- 
Calc(select=[b])\n:  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:     +- [#2] Exchange(distribution=[hash[a]])\n+- 
[#1] Exchange(distribution=[broadcast])\n])
    :- Exchange(distribution=[broadcast])
-   :  +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-   :     +- Exchange(distribution=[hash[d]])
-   :        +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+   :  +- Calc(select=[e])
+   :     +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+   :        +- Exchange(distribution=[hash[d]])
+   :           +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
    +- Exchange(distribution=[hash[a]])
       +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
          +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/NestedLoopJoinTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/NestedLoopJoinTest.xml
index c37f2d9eb04..4f6c8e1e9a4 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/NestedLoopJoinTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/NestedLoopJoinTest.xml
@@ -324,14 +324,15 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, b, CAST(2 AS INTEGER) AS d, e])
-+- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], 
select=[a, b, d, e], build=[left])\n:- [#1] 
Exchange(distribution=[broadcast])\n+- HashAggregate(isMerge=[true], 
groupBy=[d], select=[d, Final_COUNT(count$0) AS e])\n   +- [#2] 
Exchange(distribution=[hash[d]])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, e])
++- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e], 
build=[left])\n:- [#1] Exchange(distribution=[broadcast])\n+- 
Calc(select=[e])\n   +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])\n      +- [#2] Exchange(distribution=[hash[d]])\n])
    :- Exchange(distribution=[broadcast])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
    +- Exchange(distribution=[hash[d]])
       +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
          +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
@@ -387,8 +388,8 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, 1 AS b, CAST(2 AS INTEGER) AS d, 1 AS e])
-+- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[(a = d)], select=[a, d], 
build=[left])\n:- [#1] Exchange(distribution=[broadcast])\n+- Calc(select=[d], 
where=[(e = 1)])\n   +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])\n      +- [#2] Exchange(distribution=[hash[d]])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, 1 AS b, CAST(2 AS INTEGER) AS d, 1 AS e])
++- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[true], select=[a, d], 
build=[left])\n:- [#1] Exchange(distribution=[broadcast])\n+- Calc(select=[d], 
where=[(e = 1)])\n   +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])\n      +- [#2] Exchange(distribution=[hash[d]])\n])
    :- Exchange(distribution=[broadcast])
    :  +- Calc(select=[a], where=[(b = 1)])
    :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
@@ -520,14 +521,15 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[CAST(2 AS INTEGER) AS a, b, d, CAST(e AS BIGINT) AS e])
-+- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], 
select=[a, b, d, e], build=[left])\n:- [#1] 
Exchange(distribution=[broadcast])\n+- HashAggregate(isMerge=[true], 
groupBy=[d], select=[d, Final_COUNT(count$0) AS e])\n   +- [#2] 
Exchange(distribution=[hash[d]])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, CAST(e AS 
BIGINT) AS e])
++- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e], 
build=[left])\n:- [#1] Exchange(distribution=[broadcast])\n+- 
Calc(select=[e])\n   +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])\n      +- [#2] Exchange(distribution=[hash[d]])\n])
    :- Exchange(distribution=[broadcast])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
    +- Exchange(distribution=[hash[d]])
       +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
          +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
@@ -823,14 +825,15 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, CAST(b AS BIGINT) AS b, CAST(2 AS INTEGER) AS d, e])
-+- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], 
select=[a, b, d, e], build=[left])\n:- [#1] 
Exchange(distribution=[broadcast])\n+- HashAggregate(isMerge=[true], 
groupBy=[d], select=[d, Final_COUNT(count$0) AS e])\n   +- [#2] 
Exchange(distribution=[hash[d]])\n])
+Calc(select=[CAST(2 AS INTEGER) AS a, CAST(b AS BIGINT) AS b, CAST(2 AS 
INTEGER) AS d, e])
++- MultipleInput(readOrder=[0,1], 
members=[\nNestedLoopJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e], 
build=[left])\n:- [#1] Exchange(distribution=[broadcast])\n+- 
Calc(select=[e])\n   +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])\n      +- [#2] Exchange(distribution=[hash[d]])\n])
    :- Exchange(distribution=[broadcast])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
    +- Exchange(distribution=[hash[d]])
       +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
          +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.xml
index e3d85fe3193..1a1470c7146 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.xml
@@ -241,20 +241,22 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, b, CAST(2 AS INTEGER) AS d, e])
-+- HashJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], select=[a, b, 
d, e], build=[left])
-   :- Exchange(distribution=[hash[a, b]])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d, e]])
-      +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-         +- Exchange(distribution=[hash[d]])
-            +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-               +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-                  +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, e])
++- HashJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e], build=[left])
+   :- Exchange(distribution=[hash[b]])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[e]])
+      +- Calc(select=[e])
+         +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+            +- Exchange(distribution=[hash[d]])
+               +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+                  +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+                     +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
@@ -280,43 +282,6 @@ Calc(select=[c, g])
    +- Exchange(distribution=[hash[e, d]])
       +- Calc(select=[d, e, g])
          +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable2]], fields=[d, e, f, g, h])
-]]>
-    </Resource>
-  </TestCase>
-  <TestCase name="testInnerJoinWithJoinConditionPushDown">
-    <Resource name="sql">
-      <![CDATA[
-SELECT * FROM
-   (select a, count(b) as b from MyTable1 group by a)
-   join
-   (select d, count(e) as e from MyTable2 group by d)
-   on a = d and b = e and d = 2 and b = 1
-]]>
-    </Resource>
-    <Resource name="ast">
-      <![CDATA[
-LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
-+- LogicalJoin(condition=[AND(=($0, $2), =($1, $3), =($2, 2), =($1, 1))], 
joinType=[inner])
-   :- LogicalAggregate(group=[{0}], b=[COUNT($1)])
-   :  +- LogicalProject(a=[$0], b=[$1])
-   :     +- LogicalTableScan(table=[[default_catalog, default_database, 
MyTable1]])
-   +- LogicalAggregate(group=[{0}], e=[COUNT($1)])
-      +- LogicalProject(d=[$0], e=[$1])
-         +- LogicalTableScan(table=[[default_catalog, default_database, 
MyTable2]])
-]]>
-    </Resource>
-    <Resource name="optimized exec plan">
-      <![CDATA[
-Calc(select=[a, 1 AS b, CAST(2 AS INTEGER) AS d, 1 AS e])
-+- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(a = d)], select=[a, d], build=[left])\n:- Calc(select=[a], where=[(b = 
1)])\n:  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])\n:     +- [#1] Exchange(distribution=[hash[a]])\n+- 
Calc(select=[d], where=[(e = 1)])\n   +- HashAggregate(isMerge=[true], 
groupBy=[d], select=[d, Final_COUNT(count$0) AS e])\n      +- [#2] 
Exchange(distribution=[hash[d]])\n])
-   :- Exchange(distribution=[hash[a]])
-   :  +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :     +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :        +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d]])
-      +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-         +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-            +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
@@ -416,20 +381,22 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[CAST(2 AS INTEGER) AS a, b, d, CAST(e AS BIGINT) AS e])
-+- HashJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], select=[a, b, 
d, e], build=[left])
-   :- Exchange(distribution=[hash[a, b]])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d, e]])
-      +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-         +- Exchange(distribution=[hash[d]])
-            +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-               +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-                  +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, CAST(e AS 
BIGINT) AS e])
++- HashJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e], build=[left])
+   :- Exchange(distribution=[hash[b]])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[e]])
+      +- Calc(select=[e])
+         +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+            +- Exchange(distribution=[hash[d]])
+               +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+                  +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+                     +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
@@ -656,20 +623,22 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, CAST(b AS BIGINT) AS b, CAST(2 AS INTEGER) AS d, e])
-+- HashJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], select=[a, b, 
d, e], build=[left])
-   :- Exchange(distribution=[hash[a, b]])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d, e]])
-      +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-         +- Exchange(distribution=[hash[d]])
-            +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-               +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-                  +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+Calc(select=[CAST(2 AS INTEGER) AS a, CAST(b AS BIGINT) AS b, CAST(2 AS 
INTEGER) AS d, e])
++- HashJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e], build=[left])
+   :- Exchange(distribution=[hash[b]])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[e]])
+      +- Calc(select=[e])
+         +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+            +- Exchange(distribution=[hash[d]])
+               +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+                  +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+                     +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.xml
index 249f1777090..b125f435441 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.xml
@@ -241,20 +241,22 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, b, CAST(2 AS INTEGER) AS d, e])
-+- SortMergeJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], 
select=[a, b, d, e])
-   :- Exchange(distribution=[hash[a, b]])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d, e]])
-      +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-         +- Exchange(distribution=[hash[d]])
-            +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-               +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-                  +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, e])
++- SortMergeJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e])
+   :- Exchange(distribution=[hash[b]])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[e]])
+      +- Calc(select=[e])
+         +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+            +- Exchange(distribution=[hash[d]])
+               +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+                  +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+                     +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
@@ -280,43 +282,6 @@ Calc(select=[c, g])
    +- Exchange(distribution=[hash[e, d]])
       +- Calc(select=[d, e, g])
          +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable2]], fields=[d, e, f, g, h])
-]]>
-    </Resource>
-  </TestCase>
-  <TestCase name="testInnerJoinWithJoinConditionPushDown">
-    <Resource name="sql">
-      <![CDATA[
-SELECT * FROM
-   (select a, count(b) as b from MyTable1 group by a)
-   join
-   (select d, count(e) as e from MyTable2 group by d)
-   on a = d and b = e and d = 2 and b = 1
-]]>
-    </Resource>
-    <Resource name="ast">
-      <![CDATA[
-LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
-+- LogicalJoin(condition=[AND(=($0, $2), =($1, $3), =($2, 2), =($1, 1))], 
joinType=[inner])
-   :- LogicalAggregate(group=[{0}], b=[COUNT($1)])
-   :  +- LogicalProject(a=[$0], b=[$1])
-   :     +- LogicalTableScan(table=[[default_catalog, default_database, 
MyTable1]])
-   +- LogicalAggregate(group=[{0}], e=[COUNT($1)])
-      +- LogicalProject(d=[$0], e=[$1])
-         +- LogicalTableScan(table=[[default_catalog, default_database, 
MyTable2]])
-]]>
-    </Resource>
-    <Resource name="optimized exec plan">
-      <![CDATA[
-Calc(select=[a, 1 AS b, CAST(2 AS INTEGER) AS d, 1 AS e])
-+- MultipleInput(members=[\nSortMergeJoin(joinType=[InnerJoin], where=[(a = 
d)], select=[a, d])\n:- Calc(select=[a], where=[(b = 1)])\n:  +- 
HashAggregate(isMerge=[true], groupBy=[a], select=[a, Final_COUNT(count$0) AS 
b])\n:     +- [#1] Exchange(distribution=[hash[a]])\n+- Calc(select=[d], 
where=[(e = 1)])\n   +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])\n      +- [#2] Exchange(distribution=[hash[d]])\n])
-   :- Exchange(distribution=[hash[a]])
-   :  +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :     +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :        +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d]])
-      +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-         +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-            +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
@@ -416,20 +381,22 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[CAST(2 AS INTEGER) AS a, b, d, CAST(e AS BIGINT) AS e])
-+- SortMergeJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], 
select=[a, b, d, e])
-   :- Exchange(distribution=[hash[a, b]])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d, e]])
-      +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-         +- Exchange(distribution=[hash[d]])
-            +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-               +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-                  +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+Calc(select=[CAST(2 AS INTEGER) AS a, b, CAST(2 AS INTEGER) AS d, CAST(e AS 
BIGINT) AS e])
++- SortMergeJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e])
+   :- Exchange(distribution=[hash[b]])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[e]])
+      +- Calc(select=[e])
+         +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+            +- Exchange(distribution=[hash[d]])
+               +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+                  +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+                     +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
@@ -656,20 +623,22 @@ LogicalProject(a=[$0], b=[$1], d=[$2], e=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, CAST(b AS BIGINT) AS b, CAST(2 AS INTEGER) AS d, e])
-+- SortMergeJoin(joinType=[InnerJoin], where=[((a = d) AND (b = e))], 
select=[a, b, d, e])
-   :- Exchange(distribution=[hash[a, b]])
-   :  +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) AS 
count$0])
-   :           +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
-   :              +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
-   +- Exchange(distribution=[hash[d, e]])
-      +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
-         +- Exchange(distribution=[hash[d]])
-            +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) AS 
count$0])
-               +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
-                  +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
+Calc(select=[CAST(2 AS INTEGER) AS a, CAST(b AS BIGINT) AS b, CAST(2 AS 
INTEGER) AS d, e])
++- SortMergeJoin(joinType=[InnerJoin], where=[(b = e)], select=[b, e])
+   :- Exchange(distribution=[hash[b]])
+   :  +- Calc(select=[b])
+   :     +- HashAggregate(isMerge=[true], groupBy=[a], select=[a, 
Final_COUNT(count$0) AS b])
+   :        +- Exchange(distribution=[hash[a]])
+   :           +- LocalHashAggregate(groupBy=[a], select=[a, Partial_COUNT(b) 
AS count$0])
+   :              +- Calc(select=[CAST(2 AS INTEGER) AS a, b], where=[(a = 2)])
+   :                 +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable1]], fields=[a, b, c])
+   +- Exchange(distribution=[hash[e]])
+      +- Calc(select=[e])
+         +- HashAggregate(isMerge=[true], groupBy=[d], select=[d, 
Final_COUNT(count$0) AS e])
+            +- Exchange(distribution=[hash[d]])
+               +- LocalHashAggregate(groupBy=[d], select=[d, Partial_COUNT(e) 
AS count$0])
+                  +- Calc(select=[CAST(2 AS INTEGER) AS d, e], where=[(d = 2)])
+                     +- TableSourceScan(table=[[default_catalog, 
default_database, MyTable2]], fields=[d, e, f, g, h])
 ]]>
     </Resource>
   </TestCase>
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/optimize/ScanReuseTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/optimize/ScanReuseTest.xml
index 0e508ef7691..aa0a43e59b2 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/optimize/ScanReuseTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/optimize/ScanReuseTest.xml
@@ -517,12 +517,10 @@ LogicalProject(a=[$0], c=[$2], c0=[$9])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, c, c0])
-+- HashJoin(joinType=[InnerJoin], where=[(a = a0)], select=[a, c, a0, c0], 
build=[left])
-   :- Exchange(distribution=[keep_input_as_is[hash[a]]])
-   :  +- Calc(select=[a, CAST('1' AS VARCHAR(2147483647)) AS c])(reuse_id=[1])
-   :     +- Exchange(distribution=[hash[a]])
-   :        +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable, partitions=[{c=1}], project=[a], metadata=[]]], fields=[a], 
hints=[[[OPTIONS options:{partition-list=c:1;c:2}]]])
+Calc(select=[a, CAST('1' AS VARCHAR(2147483647)) AS c, CAST('1' AS 
VARCHAR(2147483647)) AS c0])
++- HashJoin(joinType=[InnerJoin], where=[(a = a0)], select=[a, a0], 
build=[left])
+   :- Exchange(distribution=[hash[a]])
+   :  +- TableSourceScan(table=[[default_catalog, default_database, MyTable, 
partitions=[{c=1}], project=[a], metadata=[]]], fields=[a], hints=[[[OPTIONS 
options:{partition-list=c:1;c:2}]]])(reuse_id=[1])
    +- Exchange(distribution=[hash[a]], shuffle_mode=[BATCH])
       +- Reused(reference_id=[1])
 ]]>
@@ -767,10 +765,10 @@ LogicalProject(a=[$0], b=[$1], c=[$9])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, b, c])
-+- HashJoin(joinType=[InnerJoin], where=[(a = a0)], select=[a, b, a0, c], 
build=[left])
+Calc(select=[a, CAST(2 AS BIGINT) AS b, c])
++- HashJoin(joinType=[InnerJoin], where=[(a = a0)], select=[a, a0, c], 
build=[left])
    :- Exchange(distribution=[hash[a]])
-   :  +- Calc(select=[a, CAST(2 AS BIGINT) AS b], where=[(b = 2)])
+   :  +- Calc(select=[a], where=[(b = 2)])
    :     +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable, filter=[], project=[a, b, c], metadata=[]]], fields=[a, b, 
c])(reuse_id=[1])
    +- Exchange(distribution=[hash[a]])
       +- Calc(select=[a, c], where=[(b = 3)])
@@ -801,10 +799,10 @@ LogicalProject(a=[$0], b=[$1], c=[$10])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, b, c])
-+- Join(joinType=[InnerJoin], where=[(a = a0)], select=[a, b, a0, c], 
leftInputSpec=[NoUniqueKey], rightInputSpec=[NoUniqueKey])
+Calc(select=[a, CAST(2 AS BIGINT) AS b, c])
++- Join(joinType=[InnerJoin], where=[(a = a0)], select=[a, a0, c], 
leftInputSpec=[NoUniqueKey], rightInputSpec=[NoUniqueKey])
    :- Exchange(distribution=[hash[a]])
-   :  +- Calc(select=[a, CAST(2 AS BIGINT) AS b], where=[(b = 2)])
+   :  +- Calc(select=[a], where=[(b = 2)])
    :     +- TableSourceScan(table=[[default_catalog, default_database, 
MyTable, project=[a, b, c, nested_s], metadata=[], watermark=[-(TO_TIMESTAMP(c, 
nested_s), 5000:INTERVAL SECOND)], watermarkEmitStrategy=[on-periodic], 
filter=[]]], fields=[a, b, c, nested_s])(reuse_id=[1])
    +- Exchange(distribution=[hash[a]])
       +- Calc(select=[a, c], where=[(b = 3)])
@@ -1196,8 +1194,8 @@ LogicalProject(a=[$0], c=[$2], c0=[$9])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a, c, c0])
-+- MultipleInput(readOrder=[0,1], members=[\nHashJoin(joinType=[InnerJoin], 
where=[(a = a0)], select=[a, c, a0, c0], build=[left])\n:- Calc(select=[a, 
CAST('1' AS VARCHAR(2147483647)) AS c])\n:  +- [#1] 
Exchange(distribution=[hash[a]])\n+- Calc(select=[a, CAST('2' AS 
VARCHAR(2147483647)) AS c])\n   +- [#2] Exchange(distribution=[hash[a]])\n])
+Calc(select=[a, CAST('1' AS VARCHAR(2147483647)) AS c, CAST('2' AS 
VARCHAR(2147483647)) AS c0])
++- HashJoin(joinType=[InnerJoin], where=[(a = a0)], select=[a, a0], 
build=[left])
    :- Exchange(distribution=[hash[a]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, MyTable, 
partitions=[{c=1}], project=[a], metadata=[]]], fields=[a], hints=[[[OPTIONS 
options:{partition-list=c:1;c:2}]]])
    +- Exchange(distribution=[hash[a]])
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/join/JoinTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/join/JoinTest.xml
index eeebf3f02d8..bee054a0dfc 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/join/JoinTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/join/JoinTest.xml
@@ -427,18 +427,20 @@ LogicalProject(a1=[$0], a2=[$1], b1=[$2], b2=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a1, a2, CAST(2 AS INTEGER) AS b1, b2])
-+- Join(joinType=[InnerJoin], where=[((a1 = b1) AND (a2 = b2))], select=[a1, 
a2, b1, b2], leftInputSpec=[JoinKeyContainsUniqueKey], 
rightInputSpec=[JoinKeyContainsUniqueKey])
-   :- Exchange(distribution=[hash[a1, a2]])
-   :  +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
-   :     +- Exchange(distribution=[hash[a1]])
-   :        +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
-   :           +- TableSourceScan(table=[[default_catalog, default_database, 
A]], fields=[a1, a2, a3])
-   +- Exchange(distribution=[hash[b1, b2]])
-      +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
-         +- Exchange(distribution=[hash[b1]])
-            +- Calc(select=[CAST(2 AS INTEGER) AS b1, b2], where=[(b1 = 2)])
-               +- TableSourceScan(table=[[default_catalog, default_database, 
B]], fields=[b1, b2, b3])
+Calc(select=[CAST(2 AS INTEGER) AS a1, a2, CAST(2 AS INTEGER) AS b1, b2])
++- Join(joinType=[InnerJoin], where=[(a2 = b2)], select=[a2, b2], 
leftInputSpec=[NoUniqueKey], rightInputSpec=[NoUniqueKey])
+   :- Exchange(distribution=[hash[a2]])
+   :  +- Calc(select=[a2])
+   :     +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
+   :        +- Exchange(distribution=[hash[a1]])
+   :           +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
+   :              +- TableSourceScan(table=[[default_catalog, 
default_database, A]], fields=[a1, a2, a3])
+   +- Exchange(distribution=[hash[b2]])
+      +- Calc(select=[b2])
+         +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
+            +- Exchange(distribution=[hash[b1]])
+               +- Calc(select=[CAST(2 AS INTEGER) AS b1, b2], where=[(b1 = 2)])
+                  +- TableSourceScan(table=[[default_catalog, 
default_database, B]], fields=[b1, b2, b3])
 ]]>
     </Resource>
   </TestCase>
@@ -467,15 +469,15 @@ LogicalProject(a1=[$0], a2=[$1], b1=[$2], b2=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a1, 1 AS a2, CAST(2 AS INTEGER) AS b1, 1 AS b2])
-+- Join(joinType=[InnerJoin], where=[(a1 = b1)], select=[a1, b1], 
leftInputSpec=[JoinKeyContainsUniqueKey], 
rightInputSpec=[JoinKeyContainsUniqueKey])
-   :- Exchange(distribution=[hash[a1]])
+Calc(select=[CAST(2 AS INTEGER) AS a1, 1 AS a2, CAST(2 AS INTEGER) AS b1, 1 AS 
b2])
++- Join(joinType=[InnerJoin], where=[true], select=[a1, b1], 
leftInputSpec=[HasUniqueKey], rightInputSpec=[HasUniqueKey])
+   :- Exchange(distribution=[single])
    :  +- Calc(select=[a1], where=[(a2 = 1)])
    :     +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
    :        +- Exchange(distribution=[hash[a1]])
    :           +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
    :              +- TableSourceScan(table=[[default_catalog, 
default_database, A]], fields=[a1, a2, a3])
-   +- Exchange(distribution=[hash[b1]])
+   +- Exchange(distribution=[single])
       +- Calc(select=[b1], where=[(b2 = 1)])
          +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
             +- Exchange(distribution=[hash[b1]])
@@ -1016,18 +1018,20 @@ LogicalProject(a1=[$0], a2=[$1], b1=[$2], b2=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[CAST(2 AS INTEGER) AS a1, a2, b1, CAST(b2 AS BIGINT) AS b2])
-+- Join(joinType=[InnerJoin], where=[((a1 = b1) AND (b2 = a2))], select=[a1, 
a2, b1, b2], leftInputSpec=[JoinKeyContainsUniqueKey], 
rightInputSpec=[JoinKeyContainsUniqueKey])
-   :- Exchange(distribution=[hash[a1, a2]])
-   :  +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
-   :     +- Exchange(distribution=[hash[a1]])
-   :        +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
-   :           +- TableSourceScan(table=[[default_catalog, default_database, 
A]], fields=[a1, a2, a3])
-   +- Exchange(distribution=[hash[b1, b2]])
-      +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
-         +- Exchange(distribution=[hash[b1]])
-            +- Calc(select=[CAST(2 AS INTEGER) AS b1, b2], where=[(b1 = 2)])
-               +- TableSourceScan(table=[[default_catalog, default_database, 
B]], fields=[b1, b2, b3])
+Calc(select=[CAST(2 AS INTEGER) AS a1, a2, CAST(2 AS INTEGER) AS b1, CAST(b2 
AS BIGINT) AS b2])
++- Join(joinType=[InnerJoin], where=[(b2 = a2)], select=[a2, b2], 
leftInputSpec=[NoUniqueKey], rightInputSpec=[NoUniqueKey])
+   :- Exchange(distribution=[hash[a2]])
+   :  +- Calc(select=[a2])
+   :     +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
+   :        +- Exchange(distribution=[hash[a1]])
+   :           +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
+   :              +- TableSourceScan(table=[[default_catalog, 
default_database, A]], fields=[a1, a2, a3])
+   +- Exchange(distribution=[hash[b2]])
+      +- Calc(select=[b2])
+         +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
+            +- Exchange(distribution=[hash[b1]])
+               +- Calc(select=[CAST(2 AS INTEGER) AS b1, b2], where=[(b1 = 2)])
+                  +- TableSourceScan(table=[[default_catalog, 
default_database, B]], fields=[b1, b2, b3])
 ]]>
     </Resource>
   </TestCase>
@@ -1423,18 +1427,20 @@ LogicalProject(a1=[$0], a2=[$1], b1=[$2], b2=[$3])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-Calc(select=[a1, CAST(a2 AS BIGINT) AS a2, CAST(2 AS INTEGER) AS b1, b2])
-+- Join(joinType=[InnerJoin], where=[((a1 = b1) AND (a2 = b2))], select=[a1, 
a2, b1, b2], leftInputSpec=[JoinKeyContainsUniqueKey], 
rightInputSpec=[JoinKeyContainsUniqueKey])
-   :- Exchange(distribution=[hash[a1, a2]])
-   :  +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
-   :     +- Exchange(distribution=[hash[a1]])
-   :        +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
-   :           +- TableSourceScan(table=[[default_catalog, default_database, 
A]], fields=[a1, a2, a3])
-   +- Exchange(distribution=[hash[b1, b2]])
-      +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
-         +- Exchange(distribution=[hash[b1]])
-            +- Calc(select=[CAST(2 AS INTEGER) AS b1, b2], where=[(b1 = 2)])
-               +- TableSourceScan(table=[[default_catalog, default_database, 
B]], fields=[b1, b2, b3])
+Calc(select=[CAST(2 AS INTEGER) AS a1, CAST(a2 AS BIGINT) AS a2, CAST(2 AS 
INTEGER) AS b1, b2])
++- Join(joinType=[InnerJoin], where=[(a2 = b2)], select=[a2, b2], 
leftInputSpec=[NoUniqueKey], rightInputSpec=[NoUniqueKey])
+   :- Exchange(distribution=[hash[a2]])
+   :  +- Calc(select=[a2])
+   :     +- GroupAggregate(groupBy=[a1], select=[a1, COUNT(a2) AS a2])
+   :        +- Exchange(distribution=[hash[a1]])
+   :           +- Calc(select=[CAST(2 AS INTEGER) AS a1, a2], where=[(a1 = 2)])
+   :              +- TableSourceScan(table=[[default_catalog, 
default_database, A]], fields=[a1, a2, a3])
+   +- Exchange(distribution=[hash[b2]])
+      +- Calc(select=[b2])
+         +- GroupAggregate(groupBy=[b1], select=[b1, COUNT(b2) AS b2])
+            +- Exchange(distribution=[hash[b1]])
+               +- Calc(select=[CAST(2 AS INTEGER) AS b1, b2], where=[(b1 = 2)])
+                  +- TableSourceScan(table=[[default_catalog, 
default_database, B]], fields=[b1, b2, b3])
 ]]>
     </Resource>
   </TestCase>
diff --git 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.scala
 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.scala
index ec3ada5a2fb..fd3bc8c2b18 100644
--- 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.scala
+++ 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/BroadcastHashJoinTest.scala
@@ -124,4 +124,11 @@ class BroadcastHashJoinTest extends JoinTestBase {
       .hasMessageContaining("Cannot generate a valid execution plan for the 
given query")
       .isInstanceOf[TableException]
   }
+
+  @Test
+  override def testInnerJoinWithJoinConditionPushDown(): Unit = {
+    assertThatThrownBy(() => super.testInnerJoinWithJoinConditionPushDown())
+      .hasMessageContaining("Cannot generate a valid execution plan for the 
given query")
+      .isInstanceOf[TableException]
+  }
 }
diff --git 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.scala
 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.scala
index e7ad20d02c4..0370b2c4c0c 100644
--- 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.scala
+++ 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/ShuffledHashJoinTest.scala
@@ -96,4 +96,11 @@ class ShuffledHashJoinTest extends JoinTestBase {
       .hasMessageContaining("Cannot generate a valid execution plan for the 
given query")
       .isInstanceOf[TableException]
   }
+
+  @Test
+  override def testInnerJoinWithJoinConditionPushDown(): Unit = {
+    assertThatThrownBy(() => super.testInnerJoinWithJoinConditionPushDown())
+      .hasMessageContaining("Cannot generate a valid execution plan for the 
given query")
+      .isInstanceOf[TableException]
+  }
 }
diff --git 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.scala
 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.scala
index e10732166ee..dffbe8e8b82 100644
--- 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.scala
+++ 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/batch/sql/join/SortMergeJoinTest.scala
@@ -94,4 +94,10 @@ class SortMergeJoinTest extends JoinTestBase {
       .isInstanceOf[TableException]
   }
 
+  @Test
+  override def testInnerJoinWithJoinConditionPushDown(): Unit = {
+    assertThatThrownBy(() => super.testInnerJoinWithJoinConditionPushDown())
+      .hasMessageContaining("Cannot generate a valid execution plan for the 
given query")
+      .isInstanceOf[TableException]
+  }
 }
diff --git 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/runtime/batch/table/DecimalITCase.scala
 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/runtime/batch/table/DecimalITCase.scala
index d0e50a00da6..be8b8d791d0 100644
--- 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/runtime/batch/table/DecimalITCase.scala
+++ 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/runtime/batch/table/DecimalITCase.scala
@@ -179,9 +179,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin1(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
-
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),
@@ -193,9 +190,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin2(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
-
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),
@@ -207,9 +201,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin3(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
-
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),
@@ -222,9 +213,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin4(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
-
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),
@@ -236,9 +224,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin5(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
-
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),
@@ -250,9 +235,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin6(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
-
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),
@@ -264,8 +246,6 @@ class DecimalITCase extends BatchTestBase {
 
   @Test
   def testJoin7(): Unit = {
-    tEnv.getConfig
-      .set(ExecutionConfigOptions.TABLE_EXEC_DISABLED_OPERATORS, "HashJoin, 
NestedLoopJoin")
     checkQuery(
       Seq(DECIMAL(8, 2), DECIMAL(8, 4), INT, DOUBLE),
       s1r(d"1", d"1", 1, 1.0),

Reply via email to