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 =