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();