diff --git a/core/src/main/java/org/opensearch/sql/calcite/CalciteRelNodeVisitor.java b/core/src/main/java/org/opensearch/sql/calcite/CalciteRelNodeVisitor.java index 097bc81cfe..f63b4b1e2e 100644 --- a/core/src/main/java/org/opensearch/sql/calcite/CalciteRelNodeVisitor.java +++ b/core/src/main/java/org/opensearch/sql/calcite/CalciteRelNodeVisitor.java @@ -2905,7 +2905,7 @@ private RelNode rankByColumnSplit( */ private AggCall buildAggCall(RelBuilder relBuilder, String aggFunctionName, RexNode node) { BuiltinFunctionName aggFunction = - BuiltinFunctionName.of(aggFunctionName) + BuiltinFunctionName.ofAggregation(aggFunctionName) .orElseThrow( () -> new IllegalArgumentException( diff --git a/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java b/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java index 1b1beea839..dce558bf7c 100644 --- a/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java +++ b/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java @@ -58,6 +58,8 @@ public enum BuiltinFunctionName { SIN(FunctionName.of("sin")), TAN(FunctionName.of("tan")), SPAN(FunctionName.of("span")), + SCALAR_MAX(FunctionName.of("scalar_max")), + SCALAR_MIN(FunctionName.of("scalar_min")), /** Binning Functions. */ SPAN_BUCKET(FunctionName.of("span_bucket")), diff --git a/core/src/main/java/org/opensearch/sql/expression/function/PPLFuncImpTable.java b/core/src/main/java/org/opensearch/sql/expression/function/PPLFuncImpTable.java index ea802bf8a4..205f3a0f2e 100644 --- a/core/src/main/java/org/opensearch/sql/expression/function/PPLFuncImpTable.java +++ b/core/src/main/java/org/opensearch/sql/expression/function/PPLFuncImpTable.java @@ -186,6 +186,8 @@ import static org.opensearch.sql.expression.function.BuiltinFunctionName.RINT; import static org.opensearch.sql.expression.function.BuiltinFunctionName.ROUND; import static org.opensearch.sql.expression.function.BuiltinFunctionName.RTRIM; +import static org.opensearch.sql.expression.function.BuiltinFunctionName.SCALAR_MAX; +import static org.opensearch.sql.expression.function.BuiltinFunctionName.SCALAR_MIN; import static org.opensearch.sql.expression.function.BuiltinFunctionName.SECOND; import static org.opensearch.sql.expression.function.BuiltinFunctionName.SECOND_OF_MINUTE; import static org.opensearch.sql.expression.function.BuiltinFunctionName.SEC_TO_TIME; @@ -868,9 +870,9 @@ void populate() { registerOperator(INTERNAL_REGEXP_REPLACE_5, SqlLibraryOperators.REGEXP_REPLACE_5); registerOperator(INTERNAL_TRANSLATE3, SqlLibraryOperators.TRANSLATE3); - // Register eval functions for PPL max() and min() calls - registerOperator(MAX, PPLBuiltinOperators.SCALAR_MAX); - registerOperator(MIN, PPLBuiltinOperators.SCALAR_MIN); + // Register eval functions for PPL scalar max() and min() calls + registerOperator(SCALAR_MAX, PPLBuiltinOperators.SCALAR_MAX); + registerOperator(SCALAR_MIN, PPLBuiltinOperators.SCALAR_MIN); // Register PPL UDF operator registerOperator(COSH, PPLBuiltinOperators.COSH); diff --git a/ppl/src/main/java/org/opensearch/sql/ppl/parser/AstExpressionBuilder.java b/ppl/src/main/java/org/opensearch/sql/ppl/parser/AstExpressionBuilder.java index 5abf42981b..283297c4ea 100644 --- a/ppl/src/main/java/org/opensearch/sql/ppl/parser/AstExpressionBuilder.java +++ b/ppl/src/main/java/org/opensearch/sql/ppl/parser/AstExpressionBuilder.java @@ -82,13 +82,15 @@ public class AstExpressionBuilder extends OpenSearchPPLParserBaseVisitor FUNCTION_NAME_MAPPING = + /** The eval function name mapping between fronted and core engine. */ + private static final Map EVAL_FUNCTION_NAME_MAPPING = new ImmutableMap.Builder() .put("isnull", IS_NULL.getName().getFunctionName()) .put("isnotnull", IS_NOT_NULL.getName().getFunctionName()) .put("regex_match", REGEXP_MATCH.getName().getFunctionName()) // compatible with old one .put("regexp_replace", REPLACE.getName().getFunctionName()) + .put("max", SCALAR_MAX.getName().getFunctionName()) // this is scalar max + .put("min", SCALAR_MIN.getName().getFunctionName()) // this is scalar min .build(); private final AstBuilder astBuilder; @@ -439,7 +441,8 @@ public UnresolvedExpression visitCaseFunctionCall( public UnresolvedExpression visitEvalFunctionCall(EvalFunctionCallContext ctx) { final String functionName = ctx.evalFunctionName().getText(); final String mappedName = - FUNCTION_NAME_MAPPING.getOrDefault(functionName.toLowerCase(Locale.ROOT), functionName); + EVAL_FUNCTION_NAME_MAPPING.getOrDefault( + functionName.toLowerCase(Locale.ROOT), functionName); // Rewrite sum and avg functions to arithmetic expressions if (SUM.getName().getFunctionName().equalsIgnoreCase(mappedName)