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 03011b08 EMPIREDB-444: ValueUtils: fix for DBDatabase.SYSDATE.
03011b08 is described below

commit 03011b08081eeeba99841ea6ce16cc99d64ada93
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri Oct 25 11:16:37 2024 +0200

    EMPIREDB-444:
    ValueUtils: fix for DBDatabase.SYSDATE.
---
 .../src/main/java/org/apache/empire/commons/DateUtils.java | 10 ++++++++++
 .../main/java/org/apache/empire/commons/ValueUtils.java    |  4 ++++
 .../src/main/java/org/apache/empire/db/DBCmdParam.java     | 14 ++++++++++++++
 3 files changed, 28 insertions(+)

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 c4f8d799..48129aff 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
@@ -18,6 +18,7 @@
  */
 package org.apache.empire.commons;
 
+import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -73,6 +74,15 @@ public class DateUtils
         return Calendar.getInstance().getTime();
     }
 
+    /**
+     * Returns a Timestamp for now
+     * @return the Timestamp
+     */
+    public static Timestamp getTimestamp()
+    {
+        return Timestamp.valueOf(LocalDateTime.now());
+    }
+
     /**
      * Calculates a date relative to the supplied date.
      * @param date date to calculate from 
diff --git a/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java 
b/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java
index e3bd611b..ab07ba09 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java
@@ -31,6 +31,7 @@ import java.util.Date;
 
 import org.apache.commons.beanutils.MethodUtils;
 import org.apache.empire.data.DataType;
+import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBExpr;
 import org.apache.empire.db.expr.column.DBValueExpr;
 import org.apache.empire.exceptions.InvalidValueException;
@@ -699,6 +700,9 @@ public class ValueUtils
                 // check type
                 if ((value instanceof Date) || (value instanceof Temporal))
                     return value; // already a date or temporal
+                // sysdate
+                if (DBDatabase.SYSDATE.equals(value))
+                    return value; // leave SYSDATE as is
                 // try to convert
                 try {
                     return toDate(value);
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCmdParam.java 
b/empire-db/src/main/java/org/apache/empire/db/DBCmdParam.java
index 3d2ebfea..f3221939 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCmdParam.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCmdParam.java
@@ -20,6 +20,7 @@ package org.apache.empire.db;
 
 import java.util.Set;
 
+import org.apache.empire.commons.DateUtils;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.data.DataType;
 import org.apache.empire.exceptions.InvalidOperationException;
@@ -82,6 +83,19 @@ public class DBCmdParam extends DBExpr
                     return value;
                 // create a clob data
                 return new DBClobData(value.toString());
+            case DATE:
+                if (DBDatabase.SYSDATE.equals(value))
+                    value = DateUtils.getDateNow();
+                return value;
+            case DATETIME:
+                if (DBDatabase.SYSDATE.equals(value))
+                    value = DateUtils.getTimeNow();
+                return value;
+            case TIMESTAMP:
+            case UNKNOWN:
+                if (DBDatabase.SYSDATE.equals(value))
+                    value = DateUtils.getTimestamp();
+                return value;
             default:
                 // the value
                 return value;

Reply via email to