reallocf commented on a change in pull request #5326: URL: https://github.com/apache/incubator-pinot/pull/5326#discussion_r419032029
########## File path: pinot-core/src/test/java/org/apache/pinot/core/data/function/DefaultFunctionEvaluatorTest.java ########## @@ -34,69 +35,72 @@ @Test public void testExpressionWithColumn() throws Exception { - Method method = MyFunc.class.getDeclaredMethod("reverseString", String.class); - FunctionRegistry.registerStaticFunction(method); - FunctionInfo functionInfo = FunctionRegistry.resolve("reverseString", new Class<?>[]{Object.class}); + MyFunc myFunc = new MyFunc(); + FunctionRegistry functionRegistry = new FunctionRegistry( + Collections.singletonList(myFunc.getClass().getDeclaredMethod("reverseString", String.class))); + FunctionInfo functionInfo = functionRegistry.resolve("reverseString", new Class<?>[]{Object.class}); System.out.println(functionInfo); String expression = "reverseString(testColumn)"; - DefaultFunctionEvaluator evaluator = new DefaultFunctionEvaluator(expression); + DefaultFunctionEvaluator evaluator = new DefaultFunctionEvaluator(expression, functionRegistry); Assert.assertEquals(evaluator.getArguments(), Lists.newArrayList("testColumn")); GenericRow row = new GenericRow(); for (int i = 0; i < 5; i++) { String value = "testValue" + i; row.putField("testColumn", value); Object result = evaluator.evaluate(row); - Assert.assertEquals(result, new StringBuilder(value).reverse().toString()); + Assert.assertEquals(result, myFunc.reverseString(value)); } } @Test public void testExpressionWithConstant() throws Exception { - FunctionRegistry - .registerStaticFunction(MyFunc.class.getDeclaredMethod("daysSinceEpoch", String.class, String.class)); + MyFunc myFunc = new MyFunc(); + FunctionRegistry functionRegistry = new FunctionRegistry( + Collections.singletonList(myFunc.getClass().getDeclaredMethod("daysSinceEpoch", String.class, String.class))); String input = "1980-01-01"; String format = "yyyy-MM-dd"; String expression = String.format("daysSinceEpoch('%s', '%s')", input, format); - DefaultFunctionEvaluator evaluator = new DefaultFunctionEvaluator(expression); + DefaultFunctionEvaluator evaluator = new DefaultFunctionEvaluator(expression, functionRegistry); Assert.assertTrue(evaluator.getArguments().isEmpty()); GenericRow row = new GenericRow(); Object result = evaluator.evaluate(row); - Assert.assertEquals(result, MyFunc.daysSinceEpoch(input, format)); + Assert.assertEquals(result, myFunc.daysSinceEpoch(input, format)); } @Test public void testMultiFunctionExpression() throws Exception { - FunctionRegistry.registerStaticFunction(MyFunc.class.getDeclaredMethod("reverseString", String.class)); - FunctionRegistry - .registerStaticFunction(MyFunc.class.getDeclaredMethod("daysSinceEpoch", String.class, String.class)); + MyFunc myFunc = new MyFunc(); + FunctionRegistry functionRegistry = new FunctionRegistry(Arrays + .asList(myFunc.getClass().getDeclaredMethod("reverseString", String.class), + myFunc.getClass().getDeclaredMethod("daysSinceEpoch", String.class, String.class))); String input = "1980-01-01"; - String reversedInput = MyFunc.reverseString(input); + String reversedInput = myFunc.reverseString(input); String format = "yyyy-MM-dd"; String expression = String.format("daysSinceEpoch(reverseString('%s'), '%s')", reversedInput, format); - DefaultFunctionEvaluator evaluator = new DefaultFunctionEvaluator(expression); + DefaultFunctionEvaluator evaluator = new DefaultFunctionEvaluator(expression, functionRegistry); Assert.assertTrue(evaluator.getArguments().isEmpty()); GenericRow row = new GenericRow(); Object result = evaluator.evaluate(row); - Assert.assertEquals(result, MyFunc.daysSinceEpoch(input, format)); + Assert.assertEquals(result, myFunc.daysSinceEpoch(input, format)); } +} - private static class MyFunc { - static String reverseString(String input) { - return new StringBuilder(input).reverse().toString(); - } +class MyFunc { Review comment: Had to pull this out into its own function (as opposed to a private function) in order to allow for the `clazz.newInstance()` call on line 56 of FunctionInvoker. Should I move this to a separate file? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org