rdblue commented on code in PR #12304: URL: https://github.com/apache/iceberg/pull/12304#discussion_r1963953648
########## api/src/main/java/org/apache/iceberg/expressions/UnboundPredicate.java: ########## @@ -124,13 +125,17 @@ public Expression bind(StructType struct, boolean caseSensitive) { private Expression bindUnaryOperation(BoundTerm<T> boundTerm) { switch (op()) { case IS_NULL: - if (boundTerm.ref().field().isRequired()) { + if (!boundTerm.producesNull()) { Review Comment: A good example is `VoidTransform`, which maps all values to null. If a transform preserves order then it can't produce a null value for a non-null input because that would violate order preservation. If it does not preserve order, then it could map values to null so we account for that. If a field is required there are no non-null values, so the only way a null could be produced is by the transform. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For additional commands, e-mail: issues-h...@iceberg.apache.org