From 0fbcda4e1285121c1eb3a803692a3c2148dd3406 Mon Sep 17 00:00:00 2001 From: Arnav Balyan Date: Mon, 10 Aug 2026 13:23:10 +0530 Subject: [PATCH] update --- .../paimon/fileindex/FileIndexReader.java | 5 ++++ .../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 cfb460f36e01..2abb7fb2cf21 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 FileIndexResult visitIsNull(FieldRef fieldRef) { 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 e2d4d7b578cd..e599c354ab2c 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.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 void testGetRequiredNamesVisitsEachChildOnce() throws Exception { 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> 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 getRequiredNames(Predicate predicate) throws Exception { Method method =