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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]