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