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