This is an automated email from the ASF dual-hosted git repository.
chunwei 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 664e24921c [CALCITE-5137] EnumerableUncollect throws NPE if input has
((List) null)
664e24921c is described below
commit 664e24921c521b9b8df03e4744d878a69dfeb10e
Author: dssysolyatin <[email protected]>
AuthorDate: Sat May 7 22:20:09 2022 +0300
[CALCITE-5137] EnumerableUncollect throws NPE if input has ((List) null)
---
core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java | 2 +-
.../apache/calcite/test/enumerable/EnumerableUncollectTest.java | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
b/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
index 17eeb00fe1..636b27bfd8 100644
--- a/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
+++ b/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
@@ -117,7 +117,7 @@ public class SqlFunctions {
private static final Pattern FROM_BASE64_REGEXP =
Pattern.compile("[\\t\\n\\r\\s]");
private static final Function1<List<Object>, Enumerable<Object>>
LIST_AS_ENUMERABLE =
- Linq4j::asEnumerable;
+ a0 -> a0 == null ? Linq4j.emptyEnumerable() : Linq4j.asEnumerable(a0);
@SuppressWarnings("unused")
private static final Function1<Object[], Enumerable<@Nullable Object[]>>
ARRAY_CARTESIAN_PRODUCT =
diff --git
a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableUncollectTest.java
b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableUncollectTest.java
index 78f6ebfa6e..0721fae277 100644
---
a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableUncollectTest.java
+++
b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableUncollectTest.java
@@ -34,6 +34,13 @@ class EnumerableUncollectTest {
"y=4");
}
+ @Test void simpleUnnestNullArray() {
+ final String sql = "SELECT * FROM UNNEST(CAST(null AS INTEGER ARRAY))";
+ tester()
+ .query(sql)
+ .returnsCount(0);
+ }
+
@Test void simpleUnnestArrayOfArrays() {
final String sql = "select * from UNNEST(array[array[3], array[4]]) as
T2(y)";
tester()