This is an automated email from the ASF dual-hosted git repository.

JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new ea293d58fa [common] Fix missing rows for null range bitmap indexes 
(#9140)
ea293d58fa is described below

commit ea293d58fa792f59c41487683f1729a7d4376cb6
Author: Arnav Balyan <[email protected]>
AuthorDate: Thu Aug 13 19:44:11 2026 +0530

    [common] Fix missing rows for null range bitmap indexes (#9140)
---
 .../org/apache/paimon/fileindex/rangebitmap/RangeBitmap.java  |  4 ++--
 .../fileindex/rangebitmap/RangeBitmapFileIndexTest.java       | 11 ++++++++---
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git 
a/paimon-common/src/main/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmap.java
 
b/paimon-common/src/main/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmap.java
index c338f47bfc..5b44e1dfe1 100644
--- 
a/paimon-common/src/main/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmap.java
+++ 
b/paimon-common/src/main/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmap.java
@@ -225,7 +225,7 @@ public class RangeBitmap {
 
     private RoaringBitmap32 isNull(@Nullable RoaringBitmap32 foundSet) {
         if (cardinality <= 0) {
-            return rid > 0 ? RoaringBitmap32.bitmapOf(0, rid - 1) : new 
RoaringBitmap32();
+            return rid > 0 ? RoaringBitmap32.bitmapOfRange(0, rid) : new 
RoaringBitmap32();
         }
 
         if (foundSet != null && foundSet.isEmpty()) {
@@ -306,7 +306,7 @@ public class RangeBitmap {
             @Nullable RoaringBitmap32 foundSet,
             BiFunction<Integer, RoaringBitmap32, RoaringBitmap32> function) {
         if (cardinality <= 0) {
-            return rid > 0 ? RoaringBitmap32.bitmapOf(0, rid - 1) : new 
RoaringBitmap32();
+            return rid > 0 ? RoaringBitmap32.bitmapOfRange(0, rid) : new 
RoaringBitmap32();
         }
 
         RoaringBitmap32 bitmap;
diff --git 
a/paimon-common/src/test/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmapFileIndexTest.java
 
b/paimon-common/src/test/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmapFileIndexTest.java
index e56bfe7a0d..01c072520b 100644
--- 
a/paimon-common/src/test/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmapFileIndexTest.java
+++ 
b/paimon-common/src/test/java/org/apache/paimon/fileindex/rangebitmap/RangeBitmapFileIndexTest.java
@@ -423,8 +423,9 @@ public class RangeBitmapFileIndexTest {
         FieldRef fieldRef = new FieldRef(0, "", intType);
         RangeBitmapFileIndex bitmapFileIndex = new 
RangeBitmapFileIndex(intType, new Options());
         FileIndexWriter writer = bitmapFileIndex.createWriter();
-        writer.writeRecord(null);
-        writer.writeRecord(null);
+        for (int i = 0; i < 5; i++) {
+            writer.writeRecord(null);
+        }
 
         // build index
         byte[] bytes = writer.serializedBytes();
@@ -433,7 +434,7 @@ public class RangeBitmapFileIndexTest {
 
         // test is null
         assertThat(((BitmapIndexResult) reader.visitIsNull(fieldRef)).get())
-                .isEqualTo(RoaringBitmap32.bitmapOf(0, 1));
+                .isEqualTo(RoaringBitmap32.bitmapOfRange(0, 5));
         // test is not null
         assertThat(((BitmapIndexResult) reader.visitIsNotNull(fieldRef)).get())
                 .isEqualTo(RoaringBitmap32.bitmapOf());
@@ -444,6 +445,10 @@ public class RangeBitmapFileIndexTest {
         // test GT
         assertThat(((BitmapIndexResult) reader.visitGreaterThan(fieldRef, 
0)).get())
                 .isEqualTo(RoaringBitmap32.bitmapOf());
+
+        TopN topN = new TopN(fieldRef, ASCENDING, NULLS_FIRST, 1);
+        assertThat(((BitmapIndexResult) reader.visitTopN(topN, null)).get())
+                .isEqualTo(RoaringBitmap32.bitmapOfRange(0, 5));
     }
 
     @Test

Reply via email to