Fix issue with empty array converting to string expression instead of string array (#11270)
diff --git a/core/src/main/java/org/apache/druid/math/expr/ExprEval.java b/core/src/main/java/org/apache/druid/math/expr/ExprEval.java
index 38bb045..43a1454 100644
--- a/core/src/main/java/org/apache/druid/math/expr/ExprEval.java
+++ b/core/src/main/java/org/apache/druid/math/expr/ExprEval.java
@@ -378,7 +378,7 @@
return new String[]{null};
} else {
if (val != null) {
- return val.toArray();
+ return new String[0];
}
return null;
}
diff --git a/core/src/test/java/org/apache/druid/math/expr/ExprEvalTest.java b/core/src/test/java/org/apache/druid/math/expr/ExprEvalTest.java
index 3ce0d0c..0f1289b 100644
--- a/core/src/test/java/org/apache/druid/math/expr/ExprEvalTest.java
+++ b/core/src/test/java/org/apache/druid/math/expr/ExprEvalTest.java
@@ -273,6 +273,16 @@
);
}
+ @Test
+ public void testEmptyArrayFromList()
+ {
+ // empty arrays will materialize from JSON into an empty list, which coerce list to array will make into Object[]
+ // make sure we can handle it
+ ExprEval someEmptyArray = ExprEval.bestEffortOf(new ArrayList<>());
+ Assert.assertTrue(someEmptyArray.isArray());
+ Assert.assertEquals(0, someEmptyArray.asArray().length);
+ }
+
private void assertExpr(int position, Object expected)
{
assertExpr(position, ExprEval.bestEffortOf(expected));