This is an automated email from the ASF dual-hosted git repository.
zwh 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 63f5a69a83 [CALCITE-7423] Setop subquery without correlated variables
triggers NullPointerException during decorrelation
63f5a69a83 is described below
commit 63f5a69a83538f3eae57f1532a9409124d018072
Author: iwanttobepowerful <[email protected]>
AuthorDate: Wed Feb 25 11:32:38 2026 +0800
[CALCITE-7423] Setop subquery without correlated variables triggers
NullPointerException during decorrelation
---
.../apache/calcite/sql2rel/RelDecorrelator.java | 4 +++
core/src/test/resources/sql/sub-query.iq | 33 ++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
index 45596c1d7d..c38268fb4d 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
@@ -1258,6 +1258,10 @@ private static void shiftMapping(Map<Integer, Integer>
mapping, int startIndex,
}
final List<CorRef> corVarList = collectExternalCorVars(rel);
+ if (corVarList.isEmpty()) {
+ return decorrelateRel((RelNode) rel, true, parentPropagatesNullValues);
+ }
+
final NavigableMap<CorDef, Integer> valueGenCorDefOutputs = new
TreeMap<>();
final RelNode valueGen =
requireNonNull(createValueGenerator(corVarList, 0,
valueGenCorDefOutputs));
diff --git a/core/src/test/resources/sql/sub-query.iq
b/core/src/test/resources/sql/sub-query.iq
index 2b6e459cda..2c47ab5d05 100644
--- a/core/src/test/resources/sql/sub-query.iq
+++ b/core/src/test/resources/sql/sub-query.iq
@@ -9041,5 +9041,38 @@ WHERE e.ename NOT IN (
+-------+--------+-----------+------+------------+---------+---------+--------+
(14 rows)
+!ok
+
+select empno
+from emp e
+where exists (
+ select 1
+ from (
+ select deptno from dept
+ union all
+ select deptno from dept
+ ) u
+ where u.deptno = e.deptno
+);
++-------+
+| EMPNO |
++-------+
+| 7369 |
+| 7499 |
+| 7521 |
+| 7566 |
+| 7654 |
+| 7698 |
+| 7782 |
+| 7788 |
+| 7839 |
+| 7844 |
+| 7876 |
+| 7900 |
+| 7902 |
+| 7934 |
++-------+
+(14 rows)
+
!ok
# End sub-query.iq