You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2022/03/04 23:52:04 UTC
[empire-db] branch master updated: EMPIREDB-362 Added DataType for TIME
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 bc936af EMPIREDB-362 Added DataType for TIME
bc936af is described below
commit bc936af7ef3b7cb6e5da6e46715727e865364945
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Sat Mar 5 00:52:01 2022 +0100
EMPIREDB-362 Added DataType for TIME
---
.../java/org/apache/empire/commons/DateUtils.java | 5 +++++
.../main/java/org/apache/empire/data/DataType.java | 25 +++++++++++++---------
.../java/org/apache/empire/db/DBDDLGenerator.java | 4 ++++
.../main/java/org/apache/empire/db/DBDatabase.java | 20 +++++++++++++++--
.../empire/db/validation/DBModelChecker.java | 1 +
.../apache/empire/db/validation/DBModelParser.java | 4 +++-
.../org/apache/empire/dbms/DBMSHandlerBase.java | 10 +++++++--
.../java/org/apache/empire/dbms/DBSqlPhrase.java | 11 ++++++----
.../apache/empire/dbms/derby/DBMSHandlerDerby.java | 6 +++++-
.../org/apache/empire/dbms/h2/DBMSHandlerH2.java | 6 +++++-
.../apache/empire/dbms/hsql/DBMSHandlerHSql.java | 9 +++++---
.../apache/empire/dbms/mysql/DBMSHandlerMySQL.java | 14 +++++++-----
.../empire/dbms/oracle/DBMSHandlerOracle.java | 5 +++++
.../dbms/postgresql/DBMSHandlerPostgreSQL.java | 4 ++++
.../empire/dbms/sqlite/DBMSHandlerSQLite.java | 6 ++++--
.../empire/dbms/sqlserver/DBMSHandlerMSSQL.java | 4 ++++
16 files changed, 103 insertions(+), 31 deletions(-)
diff --git a/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java b/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java
index 7ae31ef..2b29857 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java
@@ -164,6 +164,11 @@ public class DateUtils
return setTime(date, 0, 0, 0, 0);
}
+ public static Date getTimeOnly(Date date)
+ {
+ return setDate(date, 0, 0, 0);
+ }
+
public static long compareDates(Date date1, Date date2)
{
long time1 = setTime(date1, 0, 0, 0, 0).getTime();
diff --git a/empire-db/src/main/java/org/apache/empire/data/DataType.java b/empire-db/src/main/java/org/apache/empire/data/DataType.java
index fcf198c..f090737 100644
--- a/empire-db/src/main/java/org/apache/empire/data/DataType.java
+++ b/empire-db/src/main/java/org/apache/empire/data/DataType.java
@@ -60,47 +60,52 @@ public enum DataType
/**
* Date value including time. Also knows a timestamp
*/
- DATETIME, // = 5;
+ TIME, // = 5;
+
+ /**
+ * Date value including time. Also knows a timestamp
+ */
+ DATETIME, // = 6;
/**
* Automatic Record timestamp (only one per table allowed)
*/
- TIMESTAMP, // = 6;
+ TIMESTAMP, // = 7;
/**
* Fixed length character value.
*/
- CHAR, // = 7;
+ CHAR, // = 8;
/**
* floating point value
*/
- FLOAT, // = 8;
+ FLOAT, // = 9;
/**
* Decimal numeric value (size indicates scale and precision)
*/
- DECIMAL, // = 9;
+ DECIMAL, // = 10;
/**
* Boolean field (emulated if not supported by DBMS as number or char)
*/
- BOOL, // = 10;
+ BOOL, // = 11;
/**
* Long text > 2K
*/
- CLOB, // = 11;
+ CLOB, // = 12;
/**
* Binary data
*/
- BLOB, // = 12;
+ BLOB, // = 13;
/**
* Unique Identifier (non-numeric, treated like text)
*/
- UNIQUEID; // = 13;
+ UNIQUEID; // = 14;
/**
* Returns true if the data type is a text based data type (char, text or clob)
@@ -126,7 +131,7 @@ public enum DataType
*/
public boolean isDate()
{
- return (this==DataType.DATE || this==DataType.DATETIME || this==DataType.TIMESTAMP);
+ return (this==DataType.DATE || this==DataType.DATETIME || this==DataType.TIMESTAMP || this==DataType.TIME);
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java b/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
index c1347a9..bbd0c4b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
@@ -52,6 +52,7 @@ public abstract class DBDDLGenerator<T extends DBMSHandler>
protected String DATATYPE_CHAR = "CHAR"; // Fixed length characters (unicode)
protected String DATATYPE_VARCHAR = "VARCHAR"; // variable length characters (unicode)
protected String DATATYPE_DATE = "DATE";
+ protected String DATATYPE_TIME = "TIME";
protected String DATATYPE_TIMESTAMP = "TIMESTAMP";
protected String DATATYPE_BOOLEAN = "BIT";
protected String DATATYPE_DECIMAL = "DECIMAL";
@@ -158,6 +159,9 @@ public abstract class DBDDLGenerator<T extends DBMSHandler>
case DATE:
sql.append(DATATYPE_DATE);
break;
+ case TIME:
+ sql.append(DATATYPE_TIME);
+ break;
case DATETIME:
case TIMESTAMP:
sql.append(DATATYPE_TIMESTAMP);
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 bf1c688..4daacaf 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
@@ -25,6 +25,7 @@ import java.sql.Timestamp;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -149,6 +150,8 @@ public abstract class DBDatabase extends DBObject
protected DBMSHandler dbms = null;
+ protected boolean legacyDate = true; // When true not using Java8 Local???? Types
+
/**
* Property that indicates whether to always use usePreparedStatements (Default is false!)
* Note: This will only apply for update and insert commands as well as for read operations on a DBRecord.
@@ -525,7 +528,7 @@ public abstract class DBDatabase extends DBObject
buf.append(linkName);
}
}
-
+
/**
* Returns the java class type for a given dataType
* @param type the data type
@@ -536,15 +539,28 @@ public abstract class DBDatabase extends DBObject
switch(expr.getDataType())
{
case AUTOINC:
+ return Long.class;
case INTEGER:
+ { // Check Integer size
+ DBColumn source = expr.getSourceColumn();
+ int size = (source!=null ? (int)source.getSize() : DBTable.INT_SIZE_BIG);
+ if (size<=DBTable.INT_SIZE_SMALL)
+ return Short.class;
+ if (size<=DBTable.INT_SIZE_MEDIUM)
+ return Integer.class;
+ // Default to Long
return Long.class;
+ }
case VARCHAR:
case CLOB:
case CHAR:
return String.class;
case DATE:
+ return (legacyDate ? Date.class : LocalDate.class);
+ case TIME:
+ return (legacyDate ? Date.class : LocalTime.class);
case DATETIME:
- return Date.class;
+ return (legacyDate ? Date.class : LocalDateTime.class);
case TIMESTAMP:
return Timestamp.class;
case FLOAT:
diff --git a/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java b/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java
index 817c8bd..b46ea2d 100644
--- a/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java
+++ b/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java
@@ -254,6 +254,7 @@ public class DBModelChecker
checkTextColumn(column, remoteColumn, handler);
break;
case DATE:
+ case TIME:
case DATETIME:
case TIMESTAMP:
checkDateColumn(column, remoteColumn, handler);
diff --git a/empire-db/src/main/java/org/apache/empire/db/validation/DBModelParser.java b/empire-db/src/main/java/org/apache/empire/db/validation/DBModelParser.java
index 0c49e26..a3232d1 100644
--- a/empire-db/src/main/java/org/apache/empire/db/validation/DBModelParser.java
+++ b/empire-db/src/main/java/org/apache/empire/db/validation/DBModelParser.java
@@ -552,8 +552,10 @@ public class DBModelParser
case Types.DATE:
empireType = DataType.DATE;
break;
- case Types.TIMESTAMP:
case Types.TIME:
+ empireType = DataType.TIME;
+ break;
+ case Types.TIMESTAMP:
empireType = DataType.DATETIME;
break;
case Types.CHAR:
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java b/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java
index 6f7d485..b98c3b6 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java
@@ -447,12 +447,16 @@ public abstract class DBMSHandlerBase implements DBMSHandler
{ // emulate using java.util.UUID
return UUID.randomUUID();
}
- else if (type==DataType.DATE || type==DataType.DATETIME || type==DataType.TIMESTAMP)
+ else if (type==DataType.DATE || type==DataType.TIME || type==DataType.DATETIME || type==DataType.TIMESTAMP)
{ if (conn==null)
return null; // No connection
// Get database system's date and time
Date ts = getUpdateTimestamp(conn);
- return (type==DataType.DATE ? DateUtils.getDateOnly(ts) : ts);
+ if (type==DataType.DATE)
+ return DateUtils.getDateOnly(ts);
+ if (type==DataType.TIME)
+ return DateUtils.getTimeOnly(ts);
+ return ts;
}
// Other types
throw new NotSupportedException(this, "getColumnAutoValue() for "+type);
@@ -525,6 +529,8 @@ public abstract class DBMSHandlerBase implements DBMSHandler
{
case DATE:
return getSQLDateTimeString(value, DBSqlPhrase.SQL_DATE_TEMPLATE, DBSqlPhrase.SQL_DATE_PATTERN, DBSqlPhrase.SQL_CURRENT_DATE);
+ case TIME:
+ return getSQLDateTimeString(value, DBSqlPhrase.SQL_TIME_TEMPLATE, DBSqlPhrase.SQL_TIME_PATTERN, DBSqlPhrase.SQL_CURRENT_TIME);
case DATETIME:
// Only date (without time) provided?
if (!DBDatabase.SYSDATE.equals(value) && !(value instanceof Date) && ObjectUtils.lengthOf(value)<=10)
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/DBSqlPhrase.java b/empire-db/src/main/java/org/apache/empire/dbms/DBSqlPhrase.java
index a13e64c..b2d2c21 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/DBSqlPhrase.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/DBSqlPhrase.java
@@ -20,10 +20,13 @@ public enum DBSqlPhrase
// data types
SQL_BOOLEAN_TRUE ("1"), // Oracle Y
SQL_BOOLEAN_FALSE ("0"), // Oracle N
- SQL_CURRENT_DATE ("sysdate"), // Oracle
- SQL_DATE_PATTERN ("yyyy-MM-dd"), // SimpleDateFormat
- SQL_DATE_TEMPLATE ("TO_DATE('{0}', 'YYYY-MM-DD')"), // MSSql: convert(date, '{0}', 111)
- SQL_DATETIME_PATTERN ("yyyy-MM-dd HH:mm:ss.SSS"), // SimpleDateFormat
+ SQL_CURRENT_DATE ("CURRENT_DATE"),
+ SQL_DATE_PATTERN ("yyyy-MM-dd"), // SimpleDateFormat
+ SQL_DATE_TEMPLATE ("TO_DATE('{0}', 'YYYY-MM-DD')"), // MSSql: convert(date, '{0}', 111)
+ SQL_CURRENT_TIME ("CURRENT_TIME"), // MSSql: CONVERT(time, getdate());
+ SQL_TIME_PATTERN ("HH:mm:ss"), // SimpleDateFormat
+ SQL_TIME_TEMPLATE ("'{0}'"), // MSSql: convert(time, '{0}')
+ SQL_DATETIME_PATTERN ("yyyy-MM-dd HH:mm:ss.SSS"), // SimpleDateFormat
SQL_DATETIME_TEMPLATE ("TO_DATE('{0}', 'YYYY-MM-DD HH24:MI:SS')"), // Oracle
SQL_CURRENT_TIMESTAMP ("systimestamp"), // Oracle
SQL_TIMESTAMP_PATTERN ("yyyy-MM-dd HH:mm:ss.SSS"), // SimpleDateFormat
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/derby/DBMSHandlerDerby.java b/empire-db/src/main/java/org/apache/empire/dbms/derby/DBMSHandlerDerby.java
index 2e1f9c7..ad099f7 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/derby/DBMSHandlerDerby.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/derby/DBMSHandlerDerby.java
@@ -165,9 +165,12 @@ public class DBMSHandlerDerby extends DBMSHandlerBase
// data types
case SQL_BOOLEAN_TRUE: return "1";
case SQL_BOOLEAN_FALSE: return "0";
- case SQL_CURRENT_DATE: return "CURRENT_DATE()";
+ case SQL_CURRENT_DATE: return "CURRENT_DATE";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
case SQL_DATE_TEMPLATE: return "'{0}'";
+ case SQL_CURRENT_TIME: return "CURRENT_TIME";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "'{0}'";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss";
case SQL_DATETIME_TEMPLATE: return "'{0}'";
case SQL_CURRENT_TIMESTAMP: return "CURRENT_TIMESTAMP";
@@ -230,6 +233,7 @@ public class DBMSHandlerDerby extends DBMSHandlerBase
case DECIMAL: return "CAST(? AS DECIMAL)";
case FLOAT: return "CAST(? AS DECIMAL)";
case DATE: return "CAST(? AS DATE)";
+ case TIME: return "CAST(? AS TIME)";
case DATETIME:
case TIMESTAMP: return "CAST(? AS TIMESTAMP)";
// Convert to text
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/h2/DBMSHandlerH2.java b/empire-db/src/main/java/org/apache/empire/dbms/h2/DBMSHandlerH2.java
index 3f4eafd..f09a6f3 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/h2/DBMSHandlerH2.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/h2/DBMSHandlerH2.java
@@ -240,9 +240,12 @@ public class DBMSHandlerH2 extends DBMSHandlerBase
// data types
case SQL_BOOLEAN_TRUE: return "1";
case SQL_BOOLEAN_FALSE: return "0";
- case SQL_CURRENT_DATE: return "CURRENT_DATE()";
+ case SQL_CURRENT_DATE: return "CURRENT_DATE";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
case SQL_DATE_TEMPLATE: return "'{0}'";
+ case SQL_CURRENT_TIME: return "CURRENT_TIME";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "'{0}'";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss";
case SQL_DATETIME_TEMPLATE: return "'{0}'";
case SQL_CURRENT_TIMESTAMP: return "NOW()";
@@ -305,6 +308,7 @@ public class DBMSHandlerH2 extends DBMSHandlerBase
case DECIMAL: return "CAST(? AS DECIMAL)";
case FLOAT: return "CAST(? AS DECIMAL)";
case DATE: return "CAST(? AS DATE)";
+ case TIME: return "CAST(? AS TIME)";
case DATETIME:
case TIMESTAMP: return "CAST(? AS DATETIME)";
// Convert to text
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java b/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java
index 494e3ed..aafefc9 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java
@@ -117,12 +117,15 @@ public class DBMSHandlerHSql extends DBMSHandlerBase
case SQL_BOOLEAN_FALSE: return String.valueOf(Boolean.FALSE);
case SQL_CURRENT_DATE: return "CURRENT_DATE";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
- case SQL_DATE_TEMPLATE: return "'{0}'";
+ case SQL_DATE_TEMPLATE: return "TO_DATE('{0}', 'YYYY-MM-DD')";
+ case SQL_CURRENT_TIME: return "CURRENT_TIME";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "'{0}'";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss.S";
- case SQL_DATETIME_TEMPLATE: return "'{0}'";
+ case SQL_DATETIME_TEMPLATE: return "TO_DATE('{0}', 'YYYY-MM-DD HH24:MI:SS')";
case SQL_CURRENT_TIMESTAMP: return "CURRENT_TIMESTAMP";
case SQL_TIMESTAMP_PATTERN: return "yyyy-MM-dd HH:mm:ss.S";
- case SQL_TIMESTAMP_TEMPLATE:return "'{0}'";
+ case SQL_TIMESTAMP_TEMPLATE:return "TO_TIMESTAMP('{0}', 'YYYY-MM-DD HH24:MI:SS.FF')";
// functions
case SQL_FUNC_COALESCE: return "coalesce(?, {0})";
case SQL_FUNC_SUBSTRING: return "substr(?, {0})";
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/mysql/DBMSHandlerMySQL.java b/empire-db/src/main/java/org/apache/empire/dbms/mysql/DBMSHandlerMySQL.java
index 81bedd6..6dde1af 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/mysql/DBMSHandlerMySQL.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/mysql/DBMSHandlerMySQL.java
@@ -998,12 +998,15 @@ public class DBMSHandlerMySQL extends DBMSHandlerBase
case SQL_BOOLEAN_FALSE: return "0";
case SQL_CURRENT_DATE: return "CURRENT_DATE()";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
- case SQL_DATE_TEMPLATE: return "'{0}'";
+ case SQL_DATE_TEMPLATE: return "STR_TO_DATE('{0}','%Y-%m-%d')";
+ case SQL_CURRENT_TIME: return "CURRENT_TIME()";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "STR_TO_DATE('{0}','%H:%i:%s')";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss";
- case SQL_DATETIME_TEMPLATE: return "'{0}'";
- case SQL_CURRENT_TIMESTAMP: return "NOW()";
- case SQL_TIMESTAMP_PATTERN: return "yyyy-MM-dd HH:mm:ss";
- case SQL_TIMESTAMP_TEMPLATE: return "'{0}'";
+ case SQL_DATETIME_TEMPLATE: return "STR_TO_DATE('{0}','%Y-%m-%d %H:%i:%s')";
+ case SQL_CURRENT_TIMESTAMP: return "CURRENT_TIMESTAMP()";
+ case SQL_TIMESTAMP_PATTERN: return "yyyy-MM-dd HH:mm:ss.SSS";
+ case SQL_TIMESTAMP_TEMPLATE: return "STR_TO_DATE('{0}','%Y-%m-%d %H:%i:%s.%f')";
// functions
case SQL_FUNC_COALESCE: return "coalesce(?, {0})";
case SQL_FUNC_SUBSTRING: return "substring(?, {0})";
@@ -1061,6 +1064,7 @@ public class DBMSHandlerMySQL extends DBMSHandlerBase
case DECIMAL: return "CAST(? AS DECIMAL)";
case FLOAT: return "CAST(? AS DECIMAL)";
case DATE: return "CAST(? AS DATE)";
+ case TIME: return "CAST(? AS TIME)";
case DATETIME:
case TIMESTAMP: return "CAST(? AS DATETIME)";
// Convert to text
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java b/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java
index 6495984..43f8ed8 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBMSHandlerOracle.java
@@ -183,6 +183,9 @@ public class DBMSHandlerOracle extends DBMSHandlerBase
case SQL_CURRENT_DATE: return "sysdate";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
case SQL_DATE_TEMPLATE: return "TO_DATE('{0}', 'YYYY-MM-DD')";
+ case SQL_CURRENT_TIME: return "TO_DATE('2000-01-01'||TO_CHAR(sysdate, 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "TO_DATE('2000-01-01 {0}'), 'YYYY-MM-DD HH24:MI:SS')";
case SQL_CURRENT_TIMESTAMP: return "systimestamp";
case SQL_DATETIME_PATTERN:
case SQL_TIMESTAMP_PATTERN: return "yyyy-MM-dd HH:mm:ss.SSS";
@@ -273,6 +276,8 @@ public class DBMSHandlerOracle extends DBMSHandlerBase
return "to_date(?, '"+format.toString()+"')";
}
return "to_date(?)";
+ case TIME:
+ return "to_date(?, 'HH24:mm:ss')";
case TIMESTAMP:
if (format instanceof String)
{ // Convert using a format string
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/postgresql/DBMSHandlerPostgreSQL.java b/empire-db/src/main/java/org/apache/empire/dbms/postgresql/DBMSHandlerPostgreSQL.java
index ad010e3..d798160 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/postgresql/DBMSHandlerPostgreSQL.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/postgresql/DBMSHandlerPostgreSQL.java
@@ -383,6 +383,9 @@ public class DBMSHandlerPostgreSQL extends DBMSHandlerBase
case SQL_CURRENT_DATE: return "CURRENT_DATE";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
case SQL_DATE_TEMPLATE: return "'{0}'";
+ case SQL_CURRENT_TIME: return "CURRENT_TIME";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "'{0}'";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss.SSS";
case SQL_DATETIME_TEMPLATE: return "'{0}'";
case SQL_CURRENT_TIMESTAMP: return "NOW()";
@@ -445,6 +448,7 @@ public class DBMSHandlerPostgreSQL extends DBMSHandlerBase
case DECIMAL: return "CAST(? AS DECIMAL)";
case FLOAT: return "CAST(? AS DOUBLE PRECISION)";
case DATE: return "CAST(? AS DATE)";
+ case TIME: return "CAST(? AS TIME)";
case DATETIME:
case TIMESTAMP:return "CAST(? AS TIMESTAMP)";
// Convert to text
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/sqlite/DBMSHandlerSQLite.java b/empire-db/src/main/java/org/apache/empire/dbms/sqlite/DBMSHandlerSQLite.java
index 7a93b1d..964605d 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/sqlite/DBMSHandlerSQLite.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/sqlite/DBMSHandlerSQLite.java
@@ -319,9 +319,11 @@ public class DBMSHandlerSQLite extends DBMSHandlerBase
// data types
case SQL_BOOLEAN_TRUE: return "1";
case SQL_BOOLEAN_FALSE: return "0";
- case SQL_CURRENT_DATE: return "SELECT date('now','localtime');";
+ case SQL_CURRENT_DATE: return "date('now','localtime');";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
- case SQL_DATE_TEMPLATE: return "'{0}'";
+ case SQL_DATE_TEMPLATE: return "date('{0}')";
+ case SQL_CURRENT_TIME: return "time('now');";
+ case SQL_TIME_TEMPLATE: return "time('{0}')";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd hh:mm:ss.sss";
case SQL_DATETIME_TEMPLATE: return "'{0}'";
case SQL_CURRENT_TIMESTAMP: return "NOW()";
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java b/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
index 6faf707..4e08b35 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
@@ -330,6 +330,9 @@ public class DBMSHandlerMSSQL extends DBMSHandlerBase
case SQL_CURRENT_DATE: return "convert(char, getdate(), 111)";
case SQL_DATE_PATTERN: return "yyyy-MM-dd";
case SQL_DATE_TEMPLATE: return "convert(date, '{0}', 111)";
+ case SQL_CURRENT_TIME: return "convert(time, getdate())";
+ case SQL_TIME_PATTERN: return "HH:mm:ss";
+ case SQL_TIME_TEMPLATE: return "convert(time, '{0}')";
case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss.SSS";
case SQL_DATETIME_TEMPLATE: return isUseDateTime2() ? "convert(datetime2, '{0}', 121)"
: "convert(datetime, '{0}', 121)";
@@ -394,6 +397,7 @@ public class DBMSHandlerMSSQL extends DBMSHandlerBase
case DECIMAL: return "convert(decimal, ?)";
case FLOAT: return "convert(float, ?)";
case DATE: return "convert(date, ?, 111)";
+ case TIME: return "convert(time, ?)";
case DATETIME:
case TIMESTAMP: return isUseDateTime2() ? "convert(datetime2, ?, 121)"
: "convert(datetime, ?, 121)";