Copilot commented on code in PR #19201:
URL: https://github.com/apache/pinot/pull/19201#discussion_r3745982674


##########
pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/results/AggregationResultsBlock.java:
##########
@@ -124,73 +123,32 @@ public DataTable getDataTable()
       return dataTableBuilder.build();
     }
 
-    boolean returnFinalResult = _queryContext.isServerReturnFinalResult();
-    if (_queryContext.isNullHandlingEnabled()) {
-      RoaringBitmap[] nullBitmaps = new RoaringBitmap[numColumns];
+    // NOTE: Nulls are serialized through the builder's null-aware path 
regardless of the query's null-handling
+    // option. Aggregation functions whose accumulator has no identity element 
(MINSTRING, MAXSTRING, ANYVALUE)
+    // return a null intermediate result in both modes, and their result 
column type is not OBJECT.
+    dataTableBuilder.startRow();
+    if (_queryContext.isServerReturnFinalResult()) {
       for (int i = 0; i < numColumns; i++) {
-        nullBitmaps[i] = new RoaringBitmap();
-      }
-      dataTableBuilder.startRow();
-      if (returnFinalResult) {
-        for (int i = 0; i < numColumns; i++) {
-          Object result = 
_aggregationFunctions[i].extractFinalResult(_results.get(i));
-          if (result == null) {
-            result = columnDataTypes[i].getNullPlaceholder();
-            nullBitmaps[i].add(0);
-          }
-          assert result != null;
+        Object result = 
_aggregationFunctions[i].extractFinalResult(_results.get(i));
+        if (result == null) {
+          dataTableBuilder.setNull(i);

Review Comment:
   The new `serverReturnFinalResult` null serialization path is not exercised 
by the added regression tests; repository search finds only tests that reject 
this option for merge-only reduction. Add a no-matching-rows aggregate test 
with `serverReturnFinalResult=true` (in both null-handling modes) so the bitmap 
write here and the unconditional read in `AggregationDataTableReducer` are 
covered end to end.



##########
pinot-core/src/main/java/org/apache/pinot/core/query/reduce/AggregationDataTableReducer.java:
##########
@@ -102,14 +102,11 @@ private Object[] mergeIntermediateResults(DataSchema 
dataSchema, Collection<Data
         AggregationFunction aggregationFunction = _aggregationFunctions[i];
         Object intermediateResultToMerge;
         ColumnDataType columnDataType = dataSchema.getColumnDataType(i);
-        if (_queryContext.isNullHandlingEnabled()) {
-          RoaringBitmap nullBitmap = dataTable.getNullRowIds(i);
-          if (nullBitmap != null && nullBitmap.contains(0)) {
-            intermediateResultToMerge = null;
-          } else {
-            intermediateResultToMerge =
-                
AggregationFunctionUtils.getIntermediateResult(aggregationFunction, dataTable, 
columnDataType, 0, i);
-          }
+        // Nulls are restored regardless of the query's null-handling option: 
an aggregation function whose
+        // accumulator has no identity element returns a null intermediate 
result in both modes.
+        RoaringBitmap nullBitmap = dataTable.getNullRowIds(i);
+        if (nullBitmap != null && nullBitmap.contains(0)) {
+          intermediateResultToMerge = null;

Review Comment:
   The existing `MergeDataTablesOnlyTest.testNullHandlingAggregationRoundTrip` 
enables null handling explicitly, so it does not cover this newly added 
disabled-mode bitmap restoration (or the corresponding `setNull` output in 
`buildIntermediateDataTable`). Add the same merge-only round trip without 
`ENABLE_NULL_HANDLING` and assert that the null contribution remains null after 
re-reduction.



-- 
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