KKcorps commented on code in PR #8563: URL: https://github.com/apache/pinot/pull/8563#discussion_r854904609
########## pinot-common/src/main/java/org/apache/pinot/common/function/FunctionInvoker.java: ########## @@ -87,27 +88,42 @@ public PinotDataType[] getParameterTypes() { * conversion is not needed or supported. */ public void convertTypes(Object[] arguments) { - int numParameters = _parameterClasses.length; - Preconditions.checkArgument(arguments.length == numParameters, - "Wrong number of arguments for method: %s, expected: %s, actual: %s", _method, numParameters, arguments.length); - for (int i = 0; i < numParameters; i++) { - // Skip conversion for null - Object argument = arguments[i]; - if (argument == null) { - continue; + if (!_method.isVarArgs()) { + int numParameters = _parameterClasses.length; + Preconditions.checkArgument(arguments.length == numParameters, + "Wrong number of arguments for method: %s, expected: %s, actual: %s", + _method, numParameters, arguments.length); + for (int i = 0; i < numParameters; i++) { + // Skip conversion for null + Object argument = arguments[i]; + if (argument == null) { + continue; + } + // Skip conversion if argument can be directly assigned + Class<?> parameterClass = _parameterClasses[i]; + Class<?> argumentClass = argument.getClass(); + if (parameterClass.isAssignableFrom(argumentClass)) { + continue; + } + + PinotDataType parameterType = _parameterTypes[i]; + PinotDataType argumentType = FunctionUtils.getArgumentType(argumentClass); + Preconditions.checkArgument(parameterType != null && argumentType != null, + "Cannot convert value from class: %s to class: %s", argumentClass, parameterClass); + arguments[i] = parameterType.convert(argument, argumentType); } - // Skip conversion if argument can be directly assigned - Class<?> parameterClass = _parameterClasses[i]; - Class<?> argumentClass = argument.getClass(); - if (parameterClass.isAssignableFrom(argumentClass)) { - continue; + } else { + Class<?> parameterBaseClass = _parameterClasses[0].getComponentType(); + for (Object argument : arguments) { + if (argument == null) { + continue; + } + if (!parameterBaseClass.isAssignableFrom(argument.getClass())) { + // TODO add conversion if classes don't match + throw new IllegalArgumentException( + "Argument class" + argument.getClass() + "can't be converted to " + parameterBaseClass); + } Review Comment: +1 -- 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: commits-unsubscr...@pinot.apache.org 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