Jackie-Jiang opened a new pull request, #19038:
URL: https://github.com/apache/pinot/pull/19038

   ## Summary
   
   Implements `canProduceBitmaps` and `getBitmaps` for `AndFilterOperator` and 
`OrFilterOperator`, which previously fell back to the base `BaseFilterOperator` 
defaults (`canProduceBitmaps()` returning `false` and `getBitmaps()` throwing).
   
   - `canProduceBitmaps()` returns `true` only when every child can produce 
bitmaps.
   - `getBitmaps()` reduces each child's `BitmapCollection` — so any per-child 
inversion (exclusive predicates, `NOT`) is materialized before aggregation — 
then combines them via `BufferFastAggregation.and` (AND) / 
`BufferFastAggregation.or` (OR), returning a non-inverted single-bitmap 
`BitmapCollection`.
   - `canOptimizeCount()` now delegates to `canProduceBitmaps()` in both 
operators, removing the duplicated "all children can produce bitmaps" loop it 
previously carried.
   
   This lets composite AND/OR nodes participate directly in the bitmap-based 
fast paths (e.g. count optimization and `getFilteredDocIds`) instead of being 
materialized through document iteration, and it composes recursively for nested 
AND/OR trees.
   
   `FilterOperatorUtils` strips `MatchAllFilterOperator` / 
`EmptyFilterOperator` children before constructing an AND/OR, so every child of 
an AND/OR shares the same `numDocs`, making the reduce-then-aggregate path safe.
   


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