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