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

silun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new bf0eae04cb [CALCITE-7402] Two-level nested correlated subquery causes 
TopDownGeneralDecorrelator type mismatch during translation
bf0eae04cb is described below

commit bf0eae04cbe4131a60ad582a998a7823cb8b5541
Author: Silun Dong <[email protected]>
AuthorDate: Wed Jan 28 23:59:12 2026 +0800

    [CALCITE-7402] Two-level nested correlated subquery causes 
TopDownGeneralDecorrelator type mismatch during translation
---
 .../sql2rel/TopDownGeneralDecorrelator.java        |  3 ++-
 core/src/test/resources/sql/new-decorr.iq          | 24 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/calcite/sql2rel/TopDownGeneralDecorrelator.java 
b/core/src/main/java/org/apache/calcite/sql2rel/TopDownGeneralDecorrelator.java
index 068ec441e5..6959d56354 100644
--- 
a/core/src/main/java/org/apache/calcite/sql2rel/TopDownGeneralDecorrelator.java
+++ 
b/core/src/main/java/org/apache/calcite/sql2rel/TopDownGeneralDecorrelator.java
@@ -931,7 +931,8 @@ static List<RexNode> rewrite(
             (RexCorrelVariable) fieldAccess.getReferenceExpr();
         CorDef corDef = new CorDef(v.id, fieldAccess.getField().getIndex());
         int newIndex = requireNonNull(unnestedQuery.corDefOutputs.get(corDef));
-        return new RexInputRef(newIndex, fieldAccess.getType());
+        return new RexInputRef(
+            newIndex, 
unnestedQuery.r.getRowType().getFieldList().get(newIndex).getType());
       }
       return super.visitFieldAccess(fieldAccess);
     }
diff --git a/core/src/test/resources/sql/new-decorr.iq 
b/core/src/test/resources/sql/new-decorr.iq
index 8f05bbac2a..4c2e5791af 100644
--- a/core/src/test/resources/sql/new-decorr.iq
+++ b/core/src/test/resources/sql/new-decorr.iq
@@ -276,4 +276,28 @@ select deptno from dept d1 where exists (
 
 !ok
 
+# [CALCITE-7402] Two-level nested correlated subquery causes 
TopDownGeneralDecorrelator type mismatch during translation
+# This case comes from sub-query.iq [CALCITE-5716]
+!use scott
+SELECT dept.deptno, (
+  SELECT max(emp.empno)
+  FROM emp
+  WHERE empno = (SELECT max(empno) AS maxDept
+                 FROM emp e2
+                 WHERE e2.deptno = dept.deptno)
+        AND emp.deptno = dept.deptno),
+  dept.dname
+FROM dept;
++--------+--------+------------+
+| DEPTNO | EXPR$1 | DNAME      |
++--------+--------+------------+
+|     10 |   7934 | ACCOUNTING |
+|     20 |   7902 | RESEARCH   |
+|     30 |   7900 | SALES      |
+|     40 |        | OPERATIONS |
++--------+--------+------------+
+(4 rows)
+
+!ok
+
 # End new-decorr.iq

Reply via email to