You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by ru...@apache.org on 2020/07/28 06:51:37 UTC
[calcite] branch master updated: [CALCITE-4139] Prevent NPE in
ListTransientTable
This is an automated email from the ASF dual-hosted git repository.
rubenql pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new b7aad0b [CALCITE-4139] Prevent NPE in ListTransientTable
b7aad0b is described below
commit b7aad0b9b6b090362b681bf47a11bfcbd56edb62
Author: rubenada <ru...@gmail.com>
AuthorDate: Sun Jul 26 19:02:04 2020 +0200
[CALCITE-4139] Prevent NPE in ListTransientTable
---
.../calcite/schema/impl/ListTransientTable.java | 2 +-
.../test/enumerable/EnumerableRepeatUnionTest.java | 23 ++++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/calcite/schema/impl/ListTransientTable.java b/core/src/main/java/org/apache/calcite/schema/impl/ListTransientTable.java
index 06eca34..f07cda4 100644
--- a/core/src/main/java/org/apache/calcite/schema/impl/ListTransientTable.java
+++ b/core/src/main/java/org/apache/calcite/schema/impl/ListTransientTable.java
@@ -99,7 +99,7 @@ public class ListTransientTable extends AbstractQueryableTable
// TODO cleaner way to handle non-array objects?
@Override public Object[] current() {
Object current = list.get(i);
- return current.getClass().isArray()
+ return current != null && current.getClass().isArray()
? (Object[]) current
: new Object[]{current};
}
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java
index 375ca87..8d885ab 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableRepeatUnionTest.java
@@ -210,4 +210,27 @@ class EnumerableRepeatUnionTest {
"n=100", "n=200", "n=300", "n=400", "n=500", "n=600", "n=700", "n=800", "n=900");
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-4139">[CALCITE-4139]
+ * Prevent NPE in ListTransientTable</a>. */
+ @Test void testGenerateNumbersWithNull() {
+ CalciteAssert.that()
+ .query("?")
+ .withRel(
+ builder -> builder
+ .values(new String[] { "i" }, 1, 2, null, 3)
+ .transientScan("DELTA")
+ .filter(
+ builder.call(SqlStdOperatorTable.LESS_THAN,
+ builder.field(0),
+ builder.literal(3)))
+ .project(
+ builder.call(SqlStdOperatorTable.PLUS,
+ builder.field(0),
+ builder.literal(1)))
+ .repeatUnion("DELTA", true)
+ .build())
+ .returnsOrdered("i=1", "i=2", "i=null", "i=3", "i=2", "i=3", "i=3");
+ }
+
}