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

doebele pushed a commit to branch version3
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/version3 by this push:
     new 9181cbf  EMPIREDB-365
9181cbf is described below

commit 9181cbf6a4c8adbf0c45ab22a4929b4d20cb0ecc
Author: Rainer Döbele <[email protected]>
AuthorDate: Sat Jan 22 14:30:45 2022 +0100

    EMPIREDB-365
---
 .../java/org/apache/empire/commons/ObjectUtils.java | 12 ++++++++++++
 .../main/java/org/apache/empire/db/DBRecord.java    | 10 +++++-----
 .../java/org/apache/empire/db/DBTableColumn.java    | 21 +++++++++++----------
 3 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java 
b/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java
index ef23459..5163fb7 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java
@@ -657,6 +657,10 @@ public final class ObjectUtils
             return null;
         if (v instanceof java.util.Date)
             return ((java.util.Date)v);
+        if (v instanceof java.time.LocalDate)
+            return DateUtils.toDate((LocalDate)v);
+        if (v instanceof java.time.LocalDateTime)
+            return DateUtils.toDate((LocalDateTime)v);
         // Convert from String
         String str = v.toString();
         if (str.length() > 10)
@@ -680,6 +684,10 @@ public final class ObjectUtils
             return null;
         if (v instanceof Date)
             return ((Date)v);
+        if (v instanceof java.time.LocalDate)
+            return DateUtils.toDate((LocalDate)v);
+        if (v instanceof java.time.LocalDateTime)
+            return DateUtils.toDate((LocalDateTime)v);
         // Get Calendar
         if (v instanceof Number)
         {   // Get Date from a number
@@ -715,6 +723,10 @@ public final class ObjectUtils
             return null;
         if (v instanceof java.util.Date)
             return ((java.util.Date)v);
+        if (v instanceof java.time.LocalDate)
+            return DateUtils.toDate((LocalDate)v);
+        if (v instanceof java.time.LocalDateTime)
+            return DateUtils.toDate((LocalDateTime)v);
         // Convert from String
         String str = v.toString();
         try
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java 
b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index 5c5964b..4d15c8f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -642,6 +642,11 @@ public class DBRecord extends DBRecordData implements 
DBContextAware, Record, Cl
             boolean numeric = column.getDataType().isNumeric();
             value = ObjectUtils.getEnumValue(enumVal, numeric);
         }
+        // Is Value valid?
+        if (this.validateFieldValues)
+        {   // validate
+            value = validateValue(column, value);
+        }
         // Has Value changed?
         if (ObjectUtils.compareEqual(current, value))
         {   // value has not changed!
@@ -652,11 +657,6 @@ public class DBRecord extends DBRecordData implements 
DBContextAware, Record, Cl
         {   // Read Only column may be set
             throw new FieldIsReadOnlyException(column);
         }
-        // Is Value valid?
-        if (this.validateFieldValues)
-        {   // validate
-            value = validateValue(column, value);
-        }
         // Init original values
         modifyValue(index, value, true);
     }
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java 
b/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
index c5f1f8c..0b9026e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
@@ -397,12 +397,16 @@ public class DBTableColumn extends DBColumn
                 // Check for LocalDate
                 if (value instanceof LocalDate)
                     break;
+                if (value instanceof LocalDateTime)
+                {   value = ((LocalDateTime)value).toLocalDate();
+                    break;
+                }
             case DATETIME:
             case TIMESTAMP:
                 // Check whether value is a valid date/time value!
                 if (!(value instanceof LocalDateTime) && !(value instanceof 
Date) && !DBDatabase.SYSDATE.equals(value))
-                {   // Parse Date
-                    try {
+                {   try {
+                        // Parse Date
                         value = ObjectUtils.toDate(value);
                     } catch(ParseException e) {
                         log.info("Parsing '{}' to Date failed for column {}. 
Message is "+e.toString(), value, getName());
@@ -420,7 +424,7 @@ public class DBTableColumn extends DBColumn
                 // check number
                 if (!(value instanceof java.lang.Number))
                 {   try
-                    {   // Convert to String and check
+                    {   // Convert to Decimal
                         value = ObjectUtils.toDecimal(value);
                         // throws NumberFormatException if not a number!
                     } catch (NumberFormatException e) {
@@ -435,11 +439,10 @@ public class DBTableColumn extends DBColumn
             case FLOAT:
                 if (!(value instanceof java.lang.Number))
                 {   try
-                    {   // Convert to String and check
+                    {   // Convert to Double
                         value = ObjectUtils.toDouble(value);
                         // throws NumberFormatException if not a number!
-                    } catch (NumberFormatException e)
-                    {
+                    } catch (NumberFormatException e) {
                         log.info("Parsing '{}' to Double failed for column {}. 
Message is "+e.toString(), value, getName());
                         throw new FieldIllegalValueException(this, 
String.valueOf(value), e);
                     }
@@ -457,11 +460,9 @@ public class DBTableColumn extends DBColumn
                 // check number
                 if (!(value instanceof java.lang.Number))
                 {   try
-                    {   // Convert to String and check
+                    {   // Convert to Long
                         value = ObjectUtils.toLong(value);
-                        // throws NumberFormatException if not an integer!
-                    } catch (NumberFormatException e)
-                    {
+                    } catch (NumberFormatException e) {
                         log.info("Parsing '{}' to Integer failed for column 
{}. Message is "+e.toString(), value, getName());
                         throw new FieldIllegalValueException(this, 
String.valueOf(value), e);
                     }

Reply via email to