Apache Iceberg version
main @ 3038fde
Query engine
None — engine-agnostic, reproducible via the Java Generic Read API (Parquet.read(...).filter(...)).
Please describe the bug
ParquetFilters.getParquetPrimitive() (parquet/src/main/java/org/apache/iceberg/parquet/ParquetFilters.java line 219) only handles Number, CharSequence, and ByteBuffer literal values, so any EQ/NOT_EQ predicate on a boolean column falls through to the exception on line 233. Literals.BooleanLiteral (api/.../expressions/Literals.java) always returns a java.lang.Boolean, so this path is unavoidable for any boolean predicate. The exception is thrown while building the Parquet read builder (Parquet.java line 1635), before any rows are read — the read fails outright instead of falling back to a full scan.
Steps to reproduce
- Write a Parquet file for a schema containing a
required(N, "b", Types.BooleanType.get()) column.
- Read it back with
Parquet.read(input).project(schema).filter(Expressions.equal("b", true)).build().
- Observe
java.lang.UnsupportedOperationException: Type not supported yet: java.lang.Boolean at ParquetFilters.getParquetPrimitive, called from ConvertFilterToParquet.predicate()'s case BOOLEAN branch.
Expected: the reader returns only matching rows. Actual: the read throws before returning any rows.
Additional context
Same failure occurs for Expressions.notEqual("b", false). Number values in the same method are returned via a direct cast; Boolean needs the identical treatment since FilterApi.eq(BooleanColumn, Boolean) expects a Boolean as-is.
Apache Iceberg version
main @ 3038fde
Query engine
None — engine-agnostic, reproducible via the Java Generic Read API (
Parquet.read(...).filter(...)).Please describe the bug
ParquetFilters.getParquetPrimitive()(parquet/src/main/java/org/apache/iceberg/parquet/ParquetFilters.javaline 219) only handlesNumber,CharSequence, andByteBufferliteral values, so anyEQ/NOT_EQpredicate on abooleancolumn falls through to the exception on line 233.Literals.BooleanLiteral(api/.../expressions/Literals.java) always returns ajava.lang.Boolean, so this path is unavoidable for any boolean predicate. The exception is thrown while building the Parquet read builder (Parquet.javaline 1635), before any rows are read — the read fails outright instead of falling back to a full scan.Steps to reproduce
required(N, "b", Types.BooleanType.get())column.Parquet.read(input).project(schema).filter(Expressions.equal("b", true)).build().java.lang.UnsupportedOperationException: Type not supported yet: java.lang.BooleanatParquetFilters.getParquetPrimitive, called fromConvertFilterToParquet.predicate()'scase BOOLEANbranch.Expected: the reader returns only matching rows. Actual: the read throws before returning any rows.
Additional context
Same failure occurs for
Expressions.notEqual("b", false).Numbervalues in the same method are returned via a direct cast;Booleanneeds the identical treatment sinceFilterApi.eq(BooleanColumn, Boolean)expects aBooleanas-is.