diff --git a/api/src/main/java/org/apache/iceberg/transforms/Identity.java b/api/src/main/java/org/apache/iceberg/transforms/Identity.java index 71b4fa165a45..f52e63633578 100644 --- a/api/src/main/java/org/apache/iceberg/transforms/Identity.java +++ b/api/src/main/java/org/apache/iceberg/transforms/Identity.java @@ -149,8 +149,7 @@ public UnboundPredicate projectStrict(String name, BoundPredicate predicat if (predicate.isUnaryPredicate()) { return Expressions.predicate(predicate.op(), name); } else if (predicate.isLiteralPredicate()) { - return Expressions.predicate( - predicate.op(), name, predicate.asLiteralPredicate().literal().value()); + return Expressions.predicate(predicate.op(), name, predicate.asLiteralPredicate().literal()); } else if (predicate.isSetPredicate()) { return Expressions.predicate(predicate.op(), name, predicate.asSetPredicate().literalSet()); } diff --git a/api/src/test/java/org/apache/iceberg/transforms/TestProjection.java b/api/src/test/java/org/apache/iceberg/transforms/TestProjection.java index 6389e26c325e..f6c699f7b616 100644 --- a/api/src/test/java/org/apache/iceberg/transforms/TestProjection.java +++ b/api/src/test/java/org/apache/iceberg/transforms/TestProjection.java @@ -40,6 +40,7 @@ import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.Schema; import org.apache.iceberg.exceptions.ValidationException; +import org.apache.iceberg.expressions.Binder; import org.apache.iceberg.expressions.BoundPredicate; import org.apache.iceberg.expressions.Expression; import org.apache.iceberg.expressions.Expressions; @@ -90,6 +91,28 @@ public void testIdentityProjection() { } } + @Test + public void testTimestampNanosIdentityProjection() { + org.apache.iceberg.Schema schema = + new org.apache.iceberg.Schema( + Types.NestedField.required(1, "id", Types.LongType.get()), + Types.NestedField.optional(2, "ts", Types.TimestampNanoType.withoutZone())); + + PartitionSpec spec = PartitionSpec.builderFor(schema).identity("ts").build(); + + Expression expr = Expressions.equal("ts", "2022-07-26T12:13:14.123456789"); + Expression projected = Projections.inclusive(spec).project(expr); + + Expression bound = Binder.bind(schema.asStruct(), projected, false); + + assertThat(bound).isInstanceOf(BoundPredicate.class); + BoundPredicate boundPredicate = (BoundPredicate) bound; + assertThat(boundPredicate.isLiteralPredicate()).isTrue(); + assertThat(boundPredicate.asLiteralPredicate().literal().value()) + .as("Should bind to the correct value") + .isEqualTo(1658837594123456789L); + } + @Test public void testCaseInsensitiveIdentityProjection() { List> predicates =