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 =

Reply via email to