This is an automated email from the ASF dual-hosted git repository.

jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 40ea3f9a16 Support COALESCE as a variadic scalar function (#14195)
40ea3f9a16 is described below

commit 40ea3f9a161fba7b3bbbded8d628a53b54bc54cd
Author: Yash Mayya <yash.ma...@gmail.com>
AuthorDate: Thu Oct 10 03:32:20 2024 +0530

    Support COALESCE as a variadic scalar function (#14195)
---
 .../common/function/scalar/ObjectFunctions.java    | 35 ++--------------------
 .../PostAggregationFunctionTest.java               |  9 ++++++
 2 files changed, 12 insertions(+), 32 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ObjectFunctions.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ObjectFunctions.java
index 6c3df77f96..3aab7d73fb 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ObjectFunctions.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ObjectFunctions.java
@@ -53,38 +53,8 @@ public class ObjectFunctions {
   }
 
   @Nullable
-  public static Object coalesce(@Nullable Object obj) {
-    return coalesceVar(obj);
-  }
-
-  @Nullable
-  @ScalarFunction(nullableParameters = true)
-  public static Object coalesce(@Nullable Object obj1, @Nullable Object obj2) {
-    return coalesceVar(obj1, obj2);
-  }
-
-  @Nullable
-  @ScalarFunction(nullableParameters = true)
-  public static Object coalesce(@Nullable Object obj1, @Nullable Object obj2, 
@Nullable Object obj3) {
-    return coalesceVar(obj1, obj2, obj3);
-  }
-
-  @Nullable
-  @ScalarFunction(nullableParameters = true)
-  public static Object coalesce(@Nullable Object obj1, @Nullable Object obj2, 
@Nullable Object obj3,
-      @Nullable Object obj4) {
-    return coalesceVar(obj1, obj2, obj3, obj4);
-  }
-
-  @Nullable
-  @ScalarFunction(nullableParameters = true)
-  public static Object coalesce(@Nullable Object obj1, @Nullable Object obj2, 
@Nullable Object obj3,
-      @Nullable Object obj4, @Nullable Object obj5) {
-    return coalesceVar(obj1, obj2, obj3, obj4, obj5);
-  }
-
-  @Nullable
-  private static Object coalesceVar(Object... objects) {
+  @ScalarFunction(nullableParameters = true, isVarArg = true)
+  public static Object coalesce(Object... objects) {
     for (Object o : objects) {
       if (o != null) {
         return o;
@@ -93,6 +63,7 @@ public class ObjectFunctions {
     return null;
   }
 
+  @Nullable
   @ScalarFunction(names = {"case", "caseWhen"}, nullableParameters = true, 
isVarArg = true)
   public static Object caseWhen(Object... objs) {
     for (int i = 0; i < objs.length - 1; i += 2) {
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/query/postaggregation/PostAggregationFunctionTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/query/postaggregation/PostAggregationFunctionTest.java
index 01f88b1d91..c23dd968e0 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/query/postaggregation/PostAggregationFunctionTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/query/postaggregation/PostAggregationFunctionTest.java
@@ -119,5 +119,14 @@ public class PostAggregationFunctionTest {
         false, 1, false, 2, false, 3, false, 4, false, 5, false, 6, false, 7, 
false, 8, false, 9, false, 10, false,
         11, false, 12, false, 13, false, 14, false, 15, false, 16, false, 17, 
false, 18, false, 19, 20
     }), 20);
+
+    // Coalesce with a large number of arguments
+    function = new PostAggregationFunction("coalesce", new ColumnDataType[]{
+        ColumnDataType.INT, ColumnDataType.INT, ColumnDataType.INT, 
ColumnDataType.INT, ColumnDataType.INT,
+        ColumnDataType.INT, ColumnDataType.INT, ColumnDataType.INT, 
ColumnDataType.INT, ColumnDataType.INT
+    });
+    assertEquals(function.getResultType(), ColumnDataType.OBJECT);
+    assertNull(function.invoke(new Object[]{null, null, null, null, null, 
null, null, null, null, null}));
+    assertEquals(function.invoke(new Object[]{null, null, null, null, null, 
null, null, null, null, 10}), 10);
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to