This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new c096c70590 Fix BitmapCollection::orCardinality API when combining a
non-inverted bitmap with an inverted one (#14487)
c096c70590 is described below
commit c096c705903b40fa8f951958a2b14bfd524076e9
Author: Yash Mayya <[email protected]>
AuthorDate: Tue Nov 19 17:31:05 2024 +0700
Fix BitmapCollection::orCardinality API when combining a non-inverted
bitmap with an inverted one (#14487)
---
.../pinot/core/operator/filter/BitmapCollection.java | 5 ++---
.../pinot/core/operator/filter/BitmapCollectionTest.java | 2 +-
.../integration/tests/OfflineClusterIntegrationTest.java | 15 +++++++++++++++
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/BitmapCollection.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/BitmapCollection.java
index b3f40ed41f..04fddee856 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/BitmapCollection.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/BitmapCollection.java
@@ -86,11 +86,10 @@ public class BitmapCollection {
if (!bitmaps._inverted) {
return ImmutableRoaringBitmap.orCardinality(left, right);
}
- return _numDocs - right.getCardinality() -
ImmutableRoaringBitmap.andCardinality(left, right);
+ return _numDocs - right.getCardinality() +
ImmutableRoaringBitmap.andCardinality(left, right);
} else {
if (!bitmaps._inverted) {
- return _numDocs - left.getCardinality()
- + ImmutableRoaringBitmap.andCardinality(right, left);
+ return _numDocs - left.getCardinality() +
ImmutableRoaringBitmap.andCardinality(right, left);
}
return _numDocs - ImmutableRoaringBitmap.andCardinality(left, right);
}
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/BitmapCollectionTest.java
b/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/BitmapCollectionTest.java
index e7985a0369..5224b35f9d 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/BitmapCollectionTest.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/BitmapCollectionTest.java
@@ -171,7 +171,7 @@ public class BitmapCollectionTest {
},
{
10, ImmutableRoaringBitmap.bitmapOf(0, 5), false,
- ImmutableRoaringBitmap.bitmapOf(0, 4), true, 7
+ ImmutableRoaringBitmap.bitmapOf(0, 4), true, 9
},
{
10, ImmutableRoaringBitmap.bitmapOf(0, 5), false,
diff --git
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
index f323a88b7a..9e287cb284 100644
---
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
+++
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
@@ -3762,4 +3762,19 @@ public class OfflineClusterIntegrationTest extends
BaseClusterIntegrationTestSet
// empty groups
assertEquals(result.get("numRowsResultSet").asInt(), 0);
}
+
+ @Test(dataProvider = "useBothQueryEngines")
+ public void
testFastFilteredCountWithOrFilterOnBitmapWithExclusiveBitmap(boolean
useMultiStageQueryEngine)
+ throws Exception {
+ setUseMultiStageQueryEngine(useMultiStageQueryEngine);
+ // Column "Origin" has a range index, and column "DayofMonth" has a sorted
index in several segments. This means
+ // that the count aggregation will be executed using the fast filtered
count operator in these segments. The range
+ // index will produce a non-inverted bitmap collection and the sorted
index will produce an inverted bitmap
+ // collection (since the filter predicate is exclusive).
+
+ // See this issue - https://github.com/apache/pinot/issues/14486
+ testQuery(
+ "SELECT COUNT(*) FROM mytable WHERE Origin BETWEEN 'ALB' AND 'LMT' OR
DayofMonth <> 2"
+ );
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]