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]

Reply via email to