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

Reply via email to