Skip to content

Commit d999aec

Browse files
authored
update ScalarFunction annotation from name to names to support function alias. (#8252)
1 parent 3f98ce3 commit d999aec

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

pinot-common/src/main/java/org/apache/pinot/common/function/FunctionRegistry.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,12 @@ private FunctionRegistry() {
6161
for (Method method : methodSet) {
6262
ScalarFunction scalarFunction = method.getAnnotation(ScalarFunction.class);
6363
if (scalarFunction.enabled()) {
64-
if (!scalarFunction.name().isEmpty()) {
65-
FunctionRegistry.registerFunction(scalarFunction.name(), method);
64+
// Annotated function names
65+
String[] scalarFunctionNames = scalarFunction.names();
66+
if (scalarFunctionNames.length > 0) {
67+
for (String name : scalarFunctionNames) {
68+
FunctionRegistry.registerFunction(name, method);
69+
}
6670
} else {
6771
FunctionRegistry.registerFunction(method);
6872
}

pinot-common/src/test/java/org/apache/pinot/common/function/FunctionDefinitionRegistryTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
package org.apache.pinot.common.function;
2020

2121
import org.apache.pinot.segment.spi.AggregationFunctionType;
22+
import org.apache.pinot.spi.annotations.ScalarFunction;
2223
import org.testng.annotations.Test;
2324

2425
import static org.testng.Assert.assertFalse;
26+
import static org.testng.Assert.assertNotNull;
27+
import static org.testng.Assert.assertNull;
2528
import static org.testng.Assert.assertTrue;
2629

2730

@@ -55,4 +58,18 @@ public void testIsTransformFunc() {
5558
assertTrue(TransformFunctionType.isTransformFunction("STASTEXT"));
5659
assertFalse(TransformFunctionType.isTransformFunction("foo_bar"));
5760
}
61+
62+
@ScalarFunction(names = {"testFunc1", "testFunc2"})
63+
public static String testScalarFunction(long randomArg1, String randomArg2) {
64+
return null;
65+
}
66+
67+
@Test
68+
public void testScalarFunctionNames() {
69+
assertNotNull(FunctionRegistry.getFunctionInfo("testFunc1", 2));
70+
assertNotNull(FunctionRegistry.getFunctionInfo("testFunc2", 2));
71+
assertNull(FunctionRegistry.getFunctionInfo("testScalarFunction", 2));
72+
assertNull(FunctionRegistry.getFunctionInfo("testFunc1", 1));
73+
assertNull(FunctionRegistry.getFunctionInfo("testFunc2", 1));
74+
}
5875
}

pinot-spi/src/main/java/org/apache/pinot/spi/annotations/ScalarFunction.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,7 @@
4646

4747
boolean enabled() default true;
4848

49-
String name() default "";
49+
// If empty, FunctionsRegistry registers the method name as function name;
50+
// If not empty, FunctionsRegistry only registers the function names specified here, the method name is ignored.
51+
String[] names() default {};
5052
}

0 commit comments

Comments
 (0)