This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 1092889 EMPIREDB-282 Improved
DBDatabaseDriver.getSQLDateTimeString(): adding nanoseconds if neccessary
1092889 is described below
commit 1092889bed9849d37d4042b91a9bf20a193a7391
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Oct 15 18:53:59 2019 +0200
EMPIREDB-282
Improved DBDatabaseDriver.getSQLDateTimeString(): adding nanoseconds if
neccessary
---
.../main/java/org/apache/empire/db/DBDatabase.java | 2 -
.../org/apache/empire/db/DBDatabaseDriver.java | 49 +++++++++++++---------
2 files changed, 29 insertions(+), 22 deletions(-)
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
index 5554258..bb1e84f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
@@ -97,8 +97,6 @@ public abstract class DBDatabase extends DBObject
// Database specific date
public static final DBSystemDate SYSDATE = new DBSystemDate();
- public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss.SSSZ";
-
public static final String EMPTY_STRING = "\0"; // will be replaced by ''
// Logger
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
b/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
index a02e25b..44b09c9 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
@@ -25,7 +25,6 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
@@ -811,29 +810,39 @@ public abstract class DBDatabaseDriver implements
Serializable
if (DBDatabase.SYSDATE.equals(value))
return getSQLPhrase(sqlCurrentDate);
// Format the date (ymd)
- String datetime = value.toString();
- SimpleDateFormat sqlFormat = new
SimpleDateFormat(getSQLPhrase(sqlPattern));
- if ((value instanceof Date)==false)
- { // Convert String to Date
+ Timestamp ts;
+ if ((value instanceof Timestamp))
+ { // We have a timestamp
+ ts = (Timestamp)value;
+ }
+ else if ((value instanceof Date))
+ { // Convert Date to Timestamp
+ ts = new Timestamp(((Date)value).getTime());
+ }
+ else
+ { // "Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]"
+ String dtValue = value.toString().trim();
try
- { // init DateFormat
- String dtValue = value.toString().trim();
- String dtPattern = DBDatabase.DATETIME_PATTERN.substring(0,
Math.min(dtValue.length(), 24));
- SimpleDateFormat sdFormat = new SimpleDateFormat(dtPattern);
- // Parse value
- sdFormat.setLenient(true);
- Date dt = sdFormat.parse(dtValue);
- // Format to SQL pattern
- datetime = sqlFormat.format(dt);
- } catch (ParseException e) {
- // Invalid date
- log.error("Unable to parse date value "+datetime, e);
+ { // parse timestamp
+ ts = Timestamp.valueOf(dtValue);
+ } catch (Throwable e) {
+ // Invalid date
+ log.error("Unable to parse date value "+dtValue, e);
throw new InvalidArgumentException("value", value);
}
}
- else
- { // Format the date as string
- datetime = sqlFormat.format((Date)value);
+ // Convert to String
+ String pattern = getSQLPhrase(sqlPattern);
+ SimpleDateFormat sqlFormat = new
SimpleDateFormat(getSQLPhrase(sqlPattern));
+ String datetime = sqlFormat.format(ts);
+ // Add micro / nanoseconds
+ int nanos = (ts.getNanos() % 1000000);
+ if (pattern.endsWith(".SSS") && nanos>0)
+ { // Add nanoseconds
+ if (((nanos) % 100)>0)
+ datetime += String.format("%06d", nanos);
+ else
+ datetime += String.format("%04d",(nanos/100));
}
// Now Build String
String template = getSQLPhrase(sqlTemplate);