This is an automated email from the ASF dual-hosted git repository.

markap14 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 57e43d5aab NIFI-14296 Fixed Timestamp to LocalDateTime nanosecond 
handling (#9749)
57e43d5aab is described below

commit 57e43d5aab639dc7a8776a2303bd82d04fa01976
Author: David Handermann <[email protected]>
AuthorDate: Wed Feb 26 08:54:55 2025 -0600

    NIFI-14296 Fixed Timestamp to LocalDateTime nanosecond handling (#9749)
---
 .../field/ObjectLocalDateTimeFieldConverter.java   |  5 +++++
 .../field/ObjectTimestampFieldConverterTest.java   | 26 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git 
a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/field/ObjectLocalDateTimeFieldConverter.java
 
b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/field/ObjectLocalDateTimeFieldConverter.java
index aaa767bb81..b5573cc9e7 100644
--- 
a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/field/ObjectLocalDateTimeFieldConverter.java
+++ 
b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/field/ObjectLocalDateTimeFieldConverter.java
@@ -18,6 +18,7 @@ package org.apache.nifi.serialization.record.field;
 
 import 
org.apache.nifi.serialization.record.util.IllegalTypeConversionException;
 
+import java.sql.Timestamp;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
@@ -56,7 +57,11 @@ class ObjectLocalDateTimeFieldConverter implements 
FieldConverter<Object, LocalD
             case LocalDateTime localDateTime -> {
                 return localDateTime;
             }
+            case Timestamp timestamp -> {
+                return timestamp.toLocalDateTime();
+            }
             case Date date -> {
+                // java.sql.Date and java.sql.Time do not support the 
toInstant() method so using getTime() is required
                 final Instant instant = Instant.ofEpochMilli(date.getTime());
                 return ofInstant(instant);
             }
diff --git 
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/field/ObjectTimestampFieldConverterTest.java
 
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/field/ObjectTimestampFieldConverterTest.java
index 942049d8ec..2d92724c2b 100644
--- 
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/field/ObjectTimestampFieldConverterTest.java
+++ 
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/field/ObjectTimestampFieldConverterTest.java
@@ -19,6 +19,7 @@ package org.apache.nifi.serialization.record.field;
 import org.apache.nifi.serialization.record.RecordFieldType;
 import org.junit.jupiter.api.Test;
 
+import java.sql.Time;
 import java.sql.Timestamp;
 import java.time.Instant;
 import java.time.LocalDateTime;
@@ -43,6 +44,8 @@ public class ObjectTimestampFieldConverterTest {
 
     private static final String EMPTY = "";
 
+    private static final String DATE_DEFAULT = "2000-01-01";
+
     private static final String DATE_TIME_DEFAULT = "2000-01-01 12:00:00";
 
     private static final String DATE_TIME_ZONE_OFFSET_PATTERN = "yyyy-MM-dd 
HH:mm:ssZZZZZ";
@@ -53,6 +56,8 @@ public class ObjectTimestampFieldConverterTest {
 
     private static final String DATE_TIME_NANOSECONDS = "2000-01-01 
12:00:00.123456789";
 
+    private static final String TIME_DEFAULT = "12:30:45";
+
     @Test
     public void testConvertFieldNull() {
         final Timestamp timestamp = CONVERTER.convertField(null, 
DEFAULT_PATTERN, FIELD_NAME);
@@ -66,6 +71,27 @@ public class ObjectTimestampFieldConverterTest {
         assertEquals(field, timestamp);
     }
 
+    @Test
+    public void testConvertFieldTimestampNanoseconds() {
+        final Timestamp field = Timestamp.valueOf(DATE_TIME_NANOSECONDS);
+        final Timestamp timestamp = CONVERTER.convertField(field, 
DEFAULT_PATTERN, FIELD_NAME);
+        assertEquals(field, timestamp);
+    }
+
+    @Test
+    public void testConvertFieldSqlDate() {
+        final java.sql.Date field = java.sql.Date.valueOf(DATE_DEFAULT);
+        final Timestamp timestamp = CONVERTER.convertField(field, 
DEFAULT_PATTERN, FIELD_NAME);
+        assertEquals(field.getTime(), timestamp.getTime());
+    }
+
+    @Test
+    public void testConvertFieldSqlTime() {
+        final Time field = Time.valueOf(TIME_DEFAULT);
+        final Timestamp timestamp = CONVERTER.convertField(field, 
DEFAULT_PATTERN, FIELD_NAME);
+        assertEquals(field.getTime(), timestamp.getTime());
+    }
+
     @Test
     public void testConvertFieldDate() {
         final Date field = new Date();

Reply via email to