diff --git a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 2f4ba891942..4fed879a1f4 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -377,6 +377,17 @@ public static void checkActualAndReferenceFiles() {
sql(sql).withExpand(false).ok();
}
+ /** Test case for
+ * [CALCITE-4792]
+ * SqlToRel should populate corralateId for join with corralated query in ON condition.
+ */
+ @Test void testJoinOnCorrelatedSubQuery() {
+ final String sql = "select * from emp inner join dept\n"
+ + "on emp.deptno = dept.deptno\n"
+ + "and exists (select 1 from emp e2 where e2.deptno = dept.deptno)";
+ sql(sql).withExpand(false).ok();
+ }
+
@Test void testJoinUsing() {
sql("SELECT * FROM emp JOIN dept USING (deptno)").ok();
}
diff --git a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index a8da739aa94..57ab4a03323 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -4345,6 +4345,24 @@ LogicalValues(tuples=[[{ 1 }, { 2 }, { 3 }, { 4 }, { 5 }, { 6 }, { 7 }, { 8 }, {
}))], joinType=[left])
LogicalValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])
LogicalValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])
+]]>
+
+
+
+
+
+
+
+
diff --git a/core/src/test/resources/sql/sub-query.iq b/core/src/test/resources/sql/sub-query.iq
index d941e1b8c30..e1cf4060814 100644
--- a/core/src/test/resources/sql/sub-query.iq
+++ b/core/src/test/resources/sql/sub-query.iq
@@ -10110,5 +10110,27 @@ WHERE E1.SAL > (SELECT B1.COMM FROM BONUS B1 WHERE E1.ENAME = B1.ENAME LIMIT 2);
+--------+
(0 rows)
+!ok
+
+# [CALCITE-4792] SqlToRel should populate corralateId for join with corralated query in ON condition.
+SELECT emp.ename, dept.dname
+FROM emp INNER JOIN dept
+ON emp.deptno = dept.deptno
+AND EXISTS (SELECT 1 FROM emp e2 WHERE e2.deptno = dept.deptno AND e2.sal > 2900)
+ORDER BY emp.ename;
++--------+------------+
+| ENAME | DNAME |
++--------+------------+
+| ADAMS | RESEARCH |
+| CLARK | ACCOUNTING |
+| FORD | RESEARCH |
+| JONES | RESEARCH |
+| KING | ACCOUNTING |
+| MILLER | ACCOUNTING |
+| SCOTT | RESEARCH |
+| SMITH | RESEARCH |
++--------+------------+
+(8 rows)
+
!ok
# End sub-query.iq