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 c9960797d9 [core] Fix IS NAN predicate failing with file index (#9143)
c9960797d9 is described below
commit c9960797d95a3733829d49efb7500153080a357c
Author: Arnav Balyan <[email protected]>
AuthorDate: Wed Aug 12 09:00:25 2026 +0530
[core] Fix IS NAN predicate failing with file index (#9143)
---
.../apache/paimon/fileindex/FileIndexReader.java | 5 ++++
.../paimon/fileindex/FileIndexPredicateTest.java | 27 ++++++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git
a/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexReader.java
b/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexReader.java
index cfb460f36e..2abb7fb2cf 100644
---
a/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexReader.java
+++
b/paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexReader.java
@@ -43,6 +43,11 @@ public abstract class FileIndexReader implements
FunctionVisitor<FileIndexResult
return REMAIN;
}
+ @Override
+ public FileIndexResult visitIsNaN(FieldRef fieldRef) {
+ return REMAIN;
+ }
+
@Override
public FileIndexResult visitStartsWith(FieldRef fieldRef, Object literal) {
return REMAIN;
diff --git
a/paimon-common/src/test/java/org/apache/paimon/fileindex/FileIndexPredicateTest.java
b/paimon-common/src/test/java/org/apache/paimon/fileindex/FileIndexPredicateTest.java
index e2d4d7b578..e599c354ab 100644
---
a/paimon-common/src/test/java/org/apache/paimon/fileindex/FileIndexPredicateTest.java
+++
b/paimon-common/src/test/java/org/apache/paimon/fileindex/FileIndexPredicateTest.java
@@ -18,11 +18,14 @@
package org.apache.paimon.fileindex;
+import org.apache.paimon.fileindex.bloomfilter.BloomFilterFileIndex;
+import org.apache.paimon.options.Options;
import org.apache.paimon.predicate.CompoundPredicate;
import org.apache.paimon.predicate.Equal;
import org.apache.paimon.predicate.LeafPredicate;
import org.apache.paimon.predicate.Or;
import org.apache.paimon.predicate.Predicate;
+import org.apache.paimon.predicate.PredicateBuilder;
import org.apache.paimon.predicate.PredicateVisitor;
import org.apache.paimon.types.DataTypes;
import org.apache.paimon.types.RowType;
@@ -34,8 +37,11 @@ import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
+import static org.apache.paimon.fileindex.FileIndexResult.REMAIN;
+import static
org.apache.paimon.fileindex.bloomfilter.BloomFilterFileIndexFactory.BLOOM_FILTER;
import static org.assertj.core.api.Assertions.assertThat;
/** Test for {@link FileIndexPredicate}. */
@@ -54,6 +60,27 @@ public class FileIndexPredicateTest {
assertThat(right.visitCount).isEqualTo(1);
}
+ @Test
+ public void testIsNaNWithBloomFilter() throws Exception {
+ RowType rowType = RowType.builder().field("d",
DataTypes.DOUBLE()).build();
+ FileIndexWriter indexWriter =
+ new BloomFilterFileIndex(DataTypes.DOUBLE(), new
Options()).createWriter();
+ indexWriter.writeRecord(Double.NaN);
+
+ Map<String, Map<String, byte[]>> indexes = new HashMap<>();
+ indexes.computeIfAbsent("d", column -> new HashMap<>())
+ .put(BLOOM_FILTER, indexWriter.serializedBytes());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try (FileIndexFormat.Writer writer =
FileIndexFormat.createWriter(baos)) {
+ writer.writeColumnIndexes(indexes);
+ }
+
+ try (FileIndexPredicate predicate = new
FileIndexPredicate(baos.toByteArray(), rowType)) {
+ assertThat(predicate.evaluate(new
PredicateBuilder(rowType).isNaN(0))).isSameAs(REMAIN);
+ }
+ }
+
@SuppressWarnings("unchecked")
private static Set<String> getRequiredNames(Predicate predicate) throws
Exception {
Method method =