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(

Reply via email to