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 d84aeafb58 [parquet] Support boolean predicate push down for parquet 
(#8971)
d84aeafb58 is described below

commit d84aeafb58dc564d18938b9abb08f54106bdce4c
Author: Arnav Balyan <[email protected]>
AuthorDate: Tue Aug 4 17:50:23 2026 +0530

    [parquet] Support boolean predicate push down for parquet (#8971)
---
 .../parquet/filter2/predicate/ParquetFilters.java  |  9 +++++++++
 .../paimon/format/parquet/ParquetFiltersTest.java  | 23 ++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git 
a/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
 
b/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
index 8cab825ca7..645f82181a 100644
--- 
a/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
+++ 
b/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
@@ -327,6 +327,8 @@ public class ParquetFilters {
 
             // The literal has to speak whatever the file holds, not what the 
table declares.
             switch (pushdownTarget(fieldRef, fileSchema, caseSensitive).type) {
+                case BOOLEAN:
+                    return toBoolean(value);
                 case INT32:
                     return toInt(value);
                 case INT64:
@@ -343,6 +345,13 @@ public class ParquetFilters {
             }
         }
 
+        private Comparable<?> toBoolean(Object value) {
+            if (value instanceof Boolean) {
+                return (Boolean) value;
+            }
+            throw new UnsupportedOperationException();
+        }
+
         private Comparable<?> toInt(Object value) {
             long asLong = toLongValue(value);
             if (asLong < Integer.MIN_VALUE || asLong > Integer.MAX_VALUE) {
diff --git 
a/paimon-format/src/test/java/org/apache/paimon/format/parquet/ParquetFiltersTest.java
 
b/paimon-format/src/test/java/org/apache/paimon/format/parquet/ParquetFiltersTest.java
index 386e3d454a..e6f4c44260 100644
--- 
a/paimon-format/src/test/java/org/apache/paimon/format/parquet/ParquetFiltersTest.java
+++ 
b/paimon-format/src/test/java/org/apache/paimon/format/parquet/ParquetFiltersTest.java
@@ -23,6 +23,7 @@ import org.apache.paimon.data.Timestamp;
 import org.apache.paimon.predicate.Predicate;
 import org.apache.paimon.predicate.PredicateBuilder;
 import org.apache.paimon.types.BigIntType;
+import org.apache.paimon.types.BooleanType;
 import org.apache.paimon.types.DataField;
 import org.apache.paimon.types.DecimalType;
 import org.apache.paimon.types.DoubleType;
@@ -69,6 +70,28 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 class ParquetFiltersTest {
 
+    @Test
+    public void testBoolean() {
+        RowType rowType =
+                new RowType(Collections.singletonList(new DataField(0, "flag", 
new BooleanType())));
+        MessageType schema = 
ParquetSchemaConverter.convertToParquetMessageType(rowType);
+        PredicateBuilder builder = new PredicateBuilder(rowType);
+
+        test(schema, builder.isNull(0), "eq(flag, null)", true);
+
+        test(schema, builder.isNotNull(0), "noteq(flag, null)", true);
+
+        test(schema, builder.equal(0, true), "eq(flag, true)", true);
+
+        test(schema, builder.notEqual(0, false), "noteq(flag, false)", true);
+
+        test(
+                schema,
+                builder.in(0, Arrays.asList(true, false)),
+                "or(eq(flag, true), eq(flag, false))",
+                true);
+    }
+
     @Test
     public void testLong() {
         RowType rowType =

Reply via email to