This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 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 ff02f6bf3c [core] Refactor limit in FileIndexEvaluator.evaluate
ff02f6bf3c is described below
commit ff02f6bf3ceccf8dcac38bc58cf6db390509bd46
Author: JingsongLi <[email protected]>
AuthorDate: Wed Aug 20 17:58:33 2025 +0800
[core] Refactor limit in FileIndexEvaluator.evaluate
---
.../paimon/fileindex/bitmap/BitmapIndexResult.java | 2 +-
.../org/apache/paimon/io/FileIndexEvaluator.java | 35 ++++++++++++----------
2 files changed, 21 insertions(+), 16 deletions(-)
diff --git
a/paimon-common/src/main/java/org/apache/paimon/fileindex/bitmap/BitmapIndexResult.java
b/paimon-common/src/main/java/org/apache/paimon/fileindex/bitmap/BitmapIndexResult.java
index fd4991bdf7..cc20918a69 100644
---
a/paimon-common/src/main/java/org/apache/paimon/fileindex/bitmap/BitmapIndexResult.java
+++
b/paimon-common/src/main/java/org/apache/paimon/fileindex/bitmap/BitmapIndexResult.java
@@ -55,7 +55,7 @@ public class BitmapIndexResult extends
LazyField<RoaringBitmap32> implements Fil
return FileIndexResult.super.or(fileIndexResult);
}
- public FileIndexResult andNot(RoaringBitmap32 deletion) {
+ public BitmapIndexResult andNot(RoaringBitmap32 deletion) {
return new BitmapIndexResult(() -> RoaringBitmap32.andNot(get(),
deletion));
}
diff --git
a/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
b/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
index 1b4f3d1776..0a5505d48d 100644
--- a/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
+++ b/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
@@ -50,22 +50,15 @@ public class FileIndexEvaluator {
@Nullable Integer limit,
DataFilePathFactory dataFilePathFactory,
DataFileMeta file,
- @Nullable DeletionVector deletionVector)
+ @Nullable DeletionVector dv)
throws IOException {
- if (isNullOrEmpty(dataFilter) && topN == null && limit == null) {
- return FileIndexResult.REMAIN;
- }
-
- FileIndexResult selection =
- new BitmapIndexResult(() -> RoaringBitmap32.bitmapOfRange(0,
file.rowCount()));
- if (deletionVector instanceof BitmapDeletionVector) {
- RoaringBitmap32 deletion = ((BitmapDeletionVector)
deletionVector).get();
- selection = ((BitmapIndexResult) selection).andNot(deletion);
- }
-
- // for now, limit can not work with other predicates.
- if (isNullOrEmpty(dataFilter) && topN == null && limit != null) {
- return ((BitmapIndexResult) selection).limit(limit);
+ if (isNullOrEmpty(dataFilter) && topN == null) {
+ if (limit == null) {
+ return FileIndexResult.REMAIN;
+ } else {
+ // limit can not work with other predicates.
+ return createBaseSelection(file, dv).limit(limit);
+ }
}
try (FileIndexPredicate predicate =
@@ -74,6 +67,7 @@ public class FileIndexEvaluator {
return FileIndexResult.REMAIN;
}
+ BitmapIndexResult selection = createBaseSelection(file, dv);
FileIndexResult result;
if (!isNullOrEmpty(dataFilter)) {
Predicate filter = PredicateBuilder.and(dataFilter.toArray(new
Predicate[0]));
@@ -99,6 +93,17 @@ public class FileIndexEvaluator {
}
}
+ private static BitmapIndexResult createBaseSelection(
+ DataFileMeta file, @Nullable DeletionVector dv) {
+ BitmapIndexResult selection =
+ new BitmapIndexResult(() -> RoaringBitmap32.bitmapOfRange(0,
file.rowCount()));
+ if (dv instanceof BitmapDeletionVector) {
+ RoaringBitmap32 deletion = ((BitmapDeletionVector) dv).get();
+ selection = selection.andNot(deletion);
+ }
+ return selection;
+ }
+
@Nullable
private static FileIndexPredicate createFileIndexPredicate(
FileIO fileIO,