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));