Copilot commented on code in PR #16992:
URL: https://github.com/apache/pinot/pull/16992#discussion_r2418199790
##########
pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/TransformFunctionFactory.java:
##########
@@ -336,7 +344,14 @@ public static TransformFunction get(ExpressionContext
expression, Map<String, Co
} else {
// Scalar function
String canonicalName = FunctionRegistry.canonicalize(functionName);
- FunctionInfo functionInfo =
FunctionRegistry.lookupFunctionInfo(canonicalName, numArguments);
+ // Get data types for the arguments
+ DataSchema.ColumnDataType[] argumentDataTypes = new
DataSchema.ColumnDataType[numArguments];
+ for (int i = 0; i < numArguments; i++) {
+ argumentDataTypes[i] = DataSchema.ColumnDataType.fromDataType(
+
transformFunctionArguments.get(i).getResultMetadata().getDataType(),
+
transformFunctionArguments.get(i).getResultMetadata().isSingleValue());
Review Comment:
Potential null pointer exception if `getResultMetadata()` returns null. Add
null check before accessing metadata methods.
```suggestion
TransformFunction.ResultMetadata resultMetadata =
transformFunctionArguments.get(i).getResultMetadata();
if (resultMetadata == null) {
throw new BadQueryRequestException(
String.format("Transform function argument at index %d
does not provide result metadata", i));
}
argumentDataTypes[i] = DataSchema.ColumnDataType.fromDataType(
resultMetadata.getDataType(),
resultMetadata.isSingleValue());
```
##########
pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/TransformFunctionFactory.java:
##########
@@ -324,6 +323,15 @@ public static TransformFunction get(ExpressionContext
expression, Map<String, Co
GenerateArrayTransformFunction::new);
}
+ List<ExpressionContext> arguments = function.getArguments();
+ int numArguments = arguments.size();
+
+ // Build child transform functions first to derive argument data types
for scalar function polymorphism
+ List<TransformFunction> transformFunctionArguments = new
ArrayList<>(numArguments);
+ for (ExpressionContext argument : arguments) {
+
transformFunctionArguments.add(TransformFunctionFactory.get(argument,
columnContextMap, queryContext));
+ }
Review Comment:
Building child transform functions twice (once for type derivation and once
after init) could impact performance. Consider caching or restructuring to
avoid duplicate work, especially for complex nested expressions.
--
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]