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

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


The following commit(s) were added to refs/heads/master by this push:
     new 74b1b2f  NIFI-7208: Fixed PutSQL/JdbcCommon handling of timestamps 
(nanoseconds, e.g.)
74b1b2f is described below

commit 74b1b2fc596f43389b9a7629e4c8544e9e008997
Author: Matthew Burgess <[email protected]>
AuthorDate: Wed Feb 26 18:21:11 2020 -0500

    NIFI-7208: Fixed PutSQL/JdbcCommon handling of timestamps (nanoseconds, 
e.g.)
---
 .../java/org/apache/nifi/util/db/JdbcCommon.java    | 13 ++++++-------
 .../apache/nifi/processors/standard/TestPutSQL.java | 21 ++++++++++++---------
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-database-utils/src/main/java/org/apache/nifi/util/db/JdbcCommon.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-database-utils/src/main/java/org/apache/nifi/util/db/JdbcCommon.java
index 34c27c2..30ac518 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-database-utils/src/main/java/org/apache/nifi/util/db/JdbcCommon.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-database-utils/src/main/java/org/apache/nifi/util/db/JdbcCommon.java
@@ -79,7 +79,6 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.TemporalAccessor;
 import java.util.Date;
 import java.util.Map;
 import java.util.function.Function;
@@ -773,10 +772,11 @@ public class JdbcCommon {
                     stmt.setTime(parameterIndex, time);
                     break;
                 case Types.TIMESTAMP:
-                    long lTimestamp=0L;
+                    Timestamp ts;
 
                     // Backwards compatibility note: Format was unsupported 
for a timestamp field.
                     if (valueFormat.equals("")) {
+                        long lTimestamp = 0L;
                         if(LONG_PATTERN.matcher(parameterValue).matches()){
                             lTimestamp = Long.parseLong(parameterValue);
                         } else {
@@ -784,15 +784,14 @@ public class JdbcCommon {
                             java.util.Date parsedDate = 
dateFormat.parse(parameterValue);
                             lTimestamp = parsedDate.getTime();
                         }
+                        ts = new Timestamp(lTimestamp);
                     } else {
                         final DateTimeFormatter dtFormatter = 
getDateTimeFormatter(valueFormat);
-                        TemporalAccessor accessor = 
dtFormatter.parse(parameterValue);
-                        java.util.Date parsedDate = 
java.util.Date.from(Instant.from(accessor));
-                        lTimestamp = parsedDate.getTime();
+                        LocalDateTime ldt = 
LocalDateTime.parse(parameterValue, dtFormatter);
+                        ts = 
Timestamp.from(ldt.atZone(ZoneId.of("UTC")).toInstant());
                     }
 
-                    stmt.setTimestamp(parameterIndex, new 
Timestamp(lTimestamp));
-
+                    stmt.setTimestamp(parameterIndex, ts);
                     break;
                 case Types.BINARY:
                 case Types.VARBINARY:
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
index 5d155ee..510e384 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
@@ -434,16 +434,20 @@ public class TestPutSQL {
         runner.enableControllerService(service);
         runner.setProperty(PutSQL.CONNECTION_POOL, "dbcp");
 
-        final String dateStr = "2002-02-02T12:02:02+00:00";
-        final long dateInt = 1012651322000L;
+        final String dateStr1 = "2002-02-02T12:02:02+00:00";
+        final long dateInt1 = 1012651322000L;
+
+        final String dateStr2 = "2002-02-02T12:02:02.123456789";
+        final long dateInt2 = 1012651322123L;
+        final long nanoInt2 = 123456789L;
 
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("sql.args.1.type", String.valueOf(Types.TIMESTAMP));
-        attributes.put("sql.args.1.value", dateStr);
+        attributes.put("sql.args.1.value", dateStr1);
         attributes.put("sql.args.1.format", "ISO_OFFSET_DATE_TIME");
         attributes.put("sql.args.2.type", String.valueOf(Types.TIMESTAMP));
-        attributes.put("sql.args.2.value", dateStr);
-        attributes.put("sql.args.2.format", "yyyy-MM-dd'T'HH:mm:ssXXX");
+        attributes.put("sql.args.2.value", dateStr2);
+        attributes.put("sql.args.2.format", "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS");
 
         runner.enqueue("INSERT INTO TIMESTAMPTEST2 (ID, ts1, ts2) VALUES (1, 
?, ?)".getBytes(), attributes);
         runner.run();
@@ -455,8 +459,9 @@ public class TestPutSQL {
                 final ResultSet rs = stmt.executeQuery("SELECT * FROM 
TIMESTAMPTEST2");
                 assertTrue(rs.next());
                 assertEquals(1, rs.getInt(1));
-                assertEquals(dateInt, rs.getTimestamp(2).getTime());
-                assertEquals(dateInt, rs.getTimestamp(3).getTime());
+                assertEquals(dateInt1, rs.getTimestamp(2).getTime());
+                assertEquals(dateInt2, rs.getTimestamp(3).getTime());
+                assertEquals(nanoInt2, rs.getTimestamp(3).getNanos());
                 assertFalse(rs.next());
             }
         }
@@ -477,11 +482,9 @@ public class TestPutSQL {
 
         final String dateStr = "2002-03-04";
         final String timeStr = "02:03:04";
-
         final String timeFormatString = "HH:mm:ss";
         final String dateFormatString ="yyyy-MM-dd";
 
-
         final DateTimeFormatter timeFormatter= 
DateTimeFormatter.ISO_LOCAL_TIME;
         LocalTime parsedTime = LocalTime.parse(timeStr, timeFormatter);
         Time expectedTime = Time.valueOf(parsedTime);

Reply via email to