Jackie-Jiang commented on code in PR #13573:
URL: https://github.com/apache/pinot/pull/13573#discussion_r1681591275
##########
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/operands/FunctionOperand.java:
##########
@@ -47,9 +48,32 @@ public FunctionOperand(RexExpression.FunctionCall
functionCall, DataSchema dataS
_resultType = functionCall.getDataType();
List<RexExpression> operands = functionCall.getFunctionOperands();
int numOperands = operands.size();
- FunctionInfo functionInfo =
FunctionRegistry.getFunctionInfo(functionCall.getFunctionName(), numOperands);
- Preconditions.checkState(functionInfo != null, "Cannot find function with
name: %s",
- functionCall.getFunctionName());
+ ColumnDataType[] argumentTypes = new ColumnDataType[numOperands];
+ for (int i = 0; i < numOperands; i++) {
+ RexExpression operand = operands.get(i);
+ ColumnDataType argumentType;
+ if (operand instanceof RexExpression.InputRef) {
+ argumentType = dataSchema.getColumnDataType(((RexExpression.InputRef)
operand).getIndex());
+ } else if (operand instanceof RexExpression.Literal) {
+ argumentType = ((RexExpression.Literal) operand).getDataType();
+ } else {
+ assert operand instanceof RexExpression.FunctionCall;
+ argumentType = ((RexExpression.FunctionCall) operand).getDataType();
+ }
+ argumentTypes[i] = argumentType;
+ }
+ String functionName = functionCall.getFunctionName();
+ String canonicalName = FunctionRegistry.canonicalize(functionName);
+ FunctionInfo functionInfo =
FunctionRegistry.lookupFunctionInfo(canonicalName, argumentTypes);
+ if (functionInfo == null) {
+ if (FunctionRegistry.contains(canonicalName)) {
+ throw new IllegalArgumentException(
+ String.format("Unsupported function: %s with argument types: %s",
functionName,
+ Arrays.toString(argumentTypes)));
+ } else {
+ throw new IllegalArgumentException(String.format("Unsupported
function: %s", functionName));
+ }
+ }
Review Comment:
It's a little bit tricky though because the matches could be done via the
type inference. We can probably add some usage info within each
`PinotScalarFunction` which can be lookup up in the `FunctionRegistry`. Added a
TODO to follow up
--
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.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]