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