This is an automated email from the ASF dual-hosted git repository.
etudenhoefner pushed a commit to branch 1.10.x
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/1.10.x by this push:
new 2f87b30f17 Core: Fix overflow due to default value on timestamp nanos
(#14359) (#14513)
2f87b30f17 is described below
commit 2f87b30f177c0cf1fb9dd523eebcfb7fef2ded4b
Author: Yuya Ebihara <[email protected]>
AuthorDate: Thu Nov 6 17:58:29 2025 +0900
Core: Fix overflow due to default value on timestamp nanos (#14359) (#14513)
(cherry picked from commit e268df62feaf52a72b9ed52ce24593d59eb41ea0)
---
core/src/main/java/org/apache/iceberg/SchemaParser.java | 9 ++++++++-
core/src/test/java/org/apache/iceberg/TestSchemaParser.java | 8 ++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/iceberg/SchemaParser.java
b/core/src/main/java/org/apache/iceberg/SchemaParser.java
index 492668ff01..7481af0284 100644
--- a/core/src/main/java/org/apache/iceberg/SchemaParser.java
+++ b/core/src/main/java/org/apache/iceberg/SchemaParser.java
@@ -197,7 +197,14 @@ public class SchemaParser {
private static Literal<?> defaultFromJson(String defaultField, Type type,
JsonNode json) {
if (json.has(defaultField)) {
- return Expressions.lit(SingleValueParser.fromJson(type,
json.get(defaultField)));
+ Object value = SingleValueParser.fromJson(type, json.get(defaultField));
+ if (type instanceof Types.TimestampNanoType) {
+ // Call Expressions.nanos instead of Expressions.lit to prevent
overflow
+ // https://github.com/apache/iceberg/issues/13160
+ return Expressions.nanos((long) value);
+ }
+
+ return Expressions.lit(value);
}
return null;
diff --git a/core/src/test/java/org/apache/iceberg/TestSchemaParser.java
b/core/src/test/java/org/apache/iceberg/TestSchemaParser.java
index 3d20359355..218afe17ae 100644
--- a/core/src/test/java/org/apache/iceberg/TestSchemaParser.java
+++ b/core/src/test/java/org/apache/iceberg/TestSchemaParser.java
@@ -28,6 +28,7 @@ import java.nio.ByteBuffer;
import java.util.UUID;
import java.util.stream.Stream;
import org.apache.iceberg.data.DataTestBase;
+import org.apache.iceberg.expressions.Expressions;
import org.apache.iceberg.expressions.Literal;
import org.apache.iceberg.relocated.com.google.common.collect.Lists;
import org.apache.iceberg.relocated.com.google.common.collect.Sets;
@@ -116,9 +117,16 @@ public class TestSchemaParser extends DataTestBase {
Arguments.of(
Types.TimestampType.withZone(),
Literal.of(DateTimeUtil.isoTimestamptzToMicros("2024-12-17T23:59:59.999999+00:00"))),
+ Arguments.of(
+ Types.TimestampNanoType.withZone(),
+ Expressions.nanos(
+
DateTimeUtil.isoTimestamptzToNanos("2024-12-17T23:59:59.123456789+00:00"))),
Arguments.of(
Types.TimestampType.withoutZone(),
Literal.of(DateTimeUtil.isoTimestampToMicros("2024-12-17T23:59:59.999999"))),
+ Arguments.of(
+ Types.TimestampNanoType.withoutZone(),
+
Expressions.nanos(DateTimeUtil.isoTimestampToNanos("2024-12-17T23:59:59.123456789"))),
Arguments.of(Types.StringType.get(), Literal.of("iceberg")),
Arguments.of(Types.UUIDType.get(), Literal.of(UUID.randomUUID())),
Arguments.of(