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 6211b65151 [format] Fix isNaN filter push-down failure on ORC tables 
(#8627)
6211b65151 is described below

commit 6211b65151b7574931eb8c8bc65aeb9f87c3110c
Author: Eunbin Son <[email protected]>
AuthorDate: Wed Jul 15 09:34:13 2026 +0900

    [format] Fix isNaN filter push-down failure on ORC tables (#8627)
---
 .../format/orc/filter/OrcPredicateFunctionVisitor.java  |  7 +++++++
 .../format/orc/filter/OrcFilterConverterTest.java       | 17 +++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git 
a/paimon-format/src/main/java/org/apache/paimon/format/orc/filter/OrcPredicateFunctionVisitor.java
 
b/paimon-format/src/main/java/org/apache/paimon/format/orc/filter/OrcPredicateFunctionVisitor.java
index bc32f5bd74..50c117b51f 100644
--- 
a/paimon-format/src/main/java/org/apache/paimon/format/orc/filter/OrcPredicateFunctionVisitor.java
+++ 
b/paimon-format/src/main/java/org/apache/paimon/format/orc/filter/OrcPredicateFunctionVisitor.java
@@ -60,6 +60,13 @@ public class OrcPredicateFunctionVisitor
         return isNull.map(OrcFilters.Not::new);
     }
 
+    @Override
+    public Optional<OrcFilters.Predicate> visitIsNaN(FieldRef fieldRef) {
+        // ORC SearchArgument has no isNaN leaf, so skip push-down and let the 
engine
+        // evaluate the filter (consistent with the Parquet path).
+        return Optional.empty();
+    }
+
     @Override
     public Optional<OrcFilters.Predicate> visitStartsWith(FieldRef fieldRef, 
Object literal) {
         return Optional.empty();
diff --git 
a/paimon-format/src/test/java/org/apache/paimon/format/orc/filter/OrcFilterConverterTest.java
 
b/paimon-format/src/test/java/org/apache/paimon/format/orc/filter/OrcFilterConverterTest.java
index 1e21578b2e..28f2dfac75 100644
--- 
a/paimon-format/src/test/java/org/apache/paimon/format/orc/filter/OrcFilterConverterTest.java
+++ 
b/paimon-format/src/test/java/org/apache/paimon/format/orc/filter/OrcFilterConverterTest.java
@@ -236,6 +236,23 @@ public class OrcFilterConverterTest {
                 true);
     }
 
+    @Test
+    public void testIsNaN() {
+        PredicateBuilder builder =
+                new PredicateBuilder(
+                        new RowType(
+                                Arrays.asList(
+                                        new DataField(0, "floatField", new 
FloatType()),
+                                        new DataField(1, "doubleField", new 
DoubleType()))));
+
+        // ORC has no isNaN SearchArgument leaf, so the visitor must skip 
push-down and
+        // return Optional.empty() instead of throwing 
UnsupportedOperationException.
+        assertThat(builder.isNaN(0).visit(OrcPredicateFunctionVisitor.VISITOR))
+                .isEqualTo(Optional.empty());
+        assertThat(builder.isNaN(1).visit(OrcPredicateFunctionVisitor.VISITOR))
+                .isEqualTo(Optional.empty());
+    }
+
     private void test(Predicate predicate, OrcFilters.Predicate orcPredicate, 
boolean canPushDown) {
         Optional<OrcFilters.Predicate> optionalPredicate =
                 predicate.visit(OrcPredicateFunctionVisitor.VISITOR);

Reply via email to