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 57255a1  EMPIREDB-362 validateValue allow override in DBDatabase
57255a1 is described below

commit 57255a187930f9284d7264a19dbc482f0dad4d4e
Author: Rainer Döbele <[email protected]>
AuthorDate: Sat Jan 22 14:58:30 2022 +0100

    EMPIREDB-362 validateValue allow override in DBDatabase
---
 .../empire/jsf2/utils/TagEncodingHelper.java       |   4 +-
 .../main/java/org/apache/empire/data/Column.java   |   2 +-
 .../org/apache/empire/data/bean/BeanProperty.java  |   2 +-
 .../apache/empire/data/bean/BeanRecordProxy.java   |   2 +-
 .../main/java/org/apache/empire/db/DBColumn.java   |  12 +-
 .../java/org/apache/empire/db/DBCommandExpr.java   |   2 +-
 .../main/java/org/apache/empire/db/DBDatabase.java | 220 +++++++++++++++++++++
 .../main/java/org/apache/empire/db/DBQuery.java    |   2 +-
 .../java/org/apache/empire/db/DBQueryColumn.java   |   4 +-
 .../main/java/org/apache/empire/db/DBRecord.java   |   2 +-
 .../main/java/org/apache/empire/db/DBTable.java    |   8 +
 .../java/org/apache/empire/db/DBTableColumn.java   | 206 +------------------
 .../src/main/java/org/apache/empire/db/DBView.java |   4 +-
 13 files changed, 245 insertions(+), 225 deletions(-)

diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 70823ac..1fdd4d1 100644
--- 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -179,7 +179,7 @@ public class TagEncodingHelper implements NamingContainer
         }
 
         @Override
-        public Object validate(Object value)
+        public Object validateValue(Object value)
         {
             log.warn("validate not supported for {}", expr.getName());
             return value;
@@ -325,7 +325,7 @@ public class TagEncodingHelper implements NamingContainer
             if ((getRecord() instanceof Record))
                ((Record)getRecord()).validateValue(column, value);
             else
-                column.validate(value);
+                column.validateValue(value);
         }
 
         @Override
diff --git a/empire-db/src/main/java/org/apache/empire/data/Column.java 
b/empire-db/src/main/java/org/apache/empire/data/Column.java
index 938ca1b..2c100dd 100644
--- a/empire-db/src/main/java/org/apache/empire/data/Column.java
+++ b/empire-db/src/main/java/org/apache/empire/data/Column.java
@@ -91,6 +91,6 @@ public interface Column extends ColumnExpr
      * If not, an exception is thrown
      * @return the value the validated and possibly converted value
      */
-    Object validate(Object value);
+    Object validateValue(Object value);
 
 }
diff --git 
a/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java 
b/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java
index 9efba03..c38d3d2 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java
@@ -225,7 +225,7 @@ public class BeanProperty implements Column
     }
 
     @Override
-    public Object validate(Object value)
+    public Object validateValue(Object value)
     {
         if (ObjectUtils.isEmpty(value) && isRequired())
             throw new FieldNotNullException(this);
diff --git 
a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java 
b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
index 5858622..1cd589f 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
@@ -257,7 +257,7 @@ public class BeanRecordProxy<T> implements Record
     @Override
     public Object validateValue(Column column, Object value)
     {
-        return column.validate(value);
+        return column.validateValue(value);
     }
 
     /**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java 
b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
index d9c3eac..d23e09d 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
@@ -232,17 +232,11 @@ public abstract class DBColumn extends DBColumnExpr
      * If not, an exception is thrown
      */
     @Override
-    public abstract Object validate(Object value);
-    
+    public abstract Object validateValue(Object value);
+
     /**
-     * @deprecated use validate() instead 
+     * Appends column meta information to the parent element
      */
-    @Deprecated
-    public final void checkValue(Object value)
-    {
-        validate(value);
-    }
-    
     @Override
     public abstract Element addXml(Element parent, long flags);
 
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
index 6a51360..abf2936 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
@@ -284,7 +284,7 @@ public abstract class DBCommandExpr extends DBExpr
          * Not applicable - always return the value.
          */
         @Override
-        public Object validate(Object value)
+        public Object validateValue(Object value)
         {   // Nothing to check.
             return value;
         }
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 baba3ba..02c20c9 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
@@ -20,6 +20,11 @@ package org.apache.empire.db;
 
 import java.io.Serializable;
 import java.lang.ref.WeakReference;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.ParseException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -29,9 +34,15 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.data.Column;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.DBRelation.DBCascadeAction;
 import org.apache.empire.db.exceptions.DatabaseNotOpenException;
+import org.apache.empire.db.exceptions.FieldIllegalValueException;
+import org.apache.empire.db.exceptions.FieldNotNullException;
+import org.apache.empire.db.exceptions.FieldValueOutOfRangeException;
+import org.apache.empire.db.exceptions.FieldValueTooLongException;
 import org.apache.empire.db.expr.column.DBCaseWhenExpr;
 import org.apache.empire.db.expr.column.DBValueExpr;
 import org.apache.empire.db.expr.compare.DBCompareExpr;
@@ -858,6 +869,215 @@ public abstract class DBDatabase extends DBObject
     }
     
     /**
+     * Checks whether the supplied value is valid for the given column.
+     * If the type of the value supplied does not match the columns
+     * data type the value will be checked for compatibility.
+     * If the value is not valid a FieldIllegalValueException is thrown
+     * 
+     * @param column the column to check
+     * @param value the checked to check for validity
+     * @return the (possibly converted) value
+     * 
+     * @throws FieldValueException
+     */
+    protected Object validateValue(DBTableColumn column, Object value)
+    {
+        DataType type = column.getDataType();
+        // Check for NULL
+        if (ObjectUtils.isEmpty(value))
+        {   // Null value   
+            if (column.isRequired())
+                throw new FieldNotNullException(column);
+            // Null is allowed
+            return null;
+        }
+        // Check for Column expression
+        if (value instanceof DBColumnExpr)
+        {   DataType funcType = ((DBColumnExpr)value).getDataType();
+            if (!type.isCompatible(funcType))
+            {   // Incompatible data types
+                log.info("Incompatible data types in expression for column {} 
using function {}!", column.getName(), value.toString());
+                throw new FieldIllegalValueException(column, 
String.valueOf(value));
+            }
+            // allowed
+            return value; 
+        }
+        // Check for Command expression
+        if (value instanceof DBCommandExpr)
+        {   DBColumnExpr[] exprList = 
((DBCommandExpr)value).getSelectExprList();
+            if (exprList.length!=1)
+            {   // Incompatible data types
+                log.info("Invalid command expression for column {} using 
command {}!", column.getName(), ((DBCommandExpr)value).getSelect());
+                throw new FieldIllegalValueException(column, 
((DBCommandExpr)value).getSelect());
+            }
+            // Compare types
+            if (!type.isCompatible(exprList[0].getDataType()))
+            {   // Incompatible data types
+                log.info("Incompatible data types in expression for column {} 
using function {}!", column.getName(), value.toString());
+                throw new FieldIllegalValueException(column, 
String.valueOf(value));
+            }
+            // allowed
+            return value; 
+        }
+        // Is value valid
+        switch (type)
+        {
+            case DATE:
+                // 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))
+                {   try {
+                        // Parse Date
+                        value = ObjectUtils.toDate(value);
+                    } catch(ParseException e) {
+                        log.info("Parsing '{}' to Date failed for column {}. 
Message is "+e.toString(), value, column.getName());
+                        throw new FieldIllegalValueException(column, 
String.valueOf(value), e);
+                    }
+                }    
+                break;
+
+            case DECIMAL:
+                // check enum
+                if (value instanceof Enum<?>)
+                {   // convert enum   
+                    value = ((Enum<?>)value).ordinal();
+                }
+                // check number
+                if (!(value instanceof java.lang.Number))
+                {   try
+                    {   // Convert to Decimal
+                        value = ObjectUtils.toDecimal(value);
+                        // throws NumberFormatException if not a number!
+                    } catch (NumberFormatException e) {
+                        log.info("Parsing '{}' to Decimal failed for column 
{}. Message is "+e.toString(), value, column.getName());
+                        throw new FieldIllegalValueException(column, 
String.valueOf(value), e);
+                    }
+                }
+                // validate Number
+                value = validateNumber(column, type, (Number)value);
+                break;
+
+            case FLOAT:
+                if (!(value instanceof java.lang.Number))
+                {   try
+                    {   // Convert to Double
+                        value = ObjectUtils.toDouble(value);
+                        // throws NumberFormatException if not a number!
+                    } catch (NumberFormatException e) {
+                        log.info("Parsing '{}' to Double failed for column {}. 
Message is "+e.toString(), value, column.getName());
+                        throw new FieldIllegalValueException(column, 
String.valueOf(value), e);
+                    }
+                }
+                // validate Number
+                value = validateNumber(column, type, (Number)value);
+                break;
+
+            case INTEGER:
+                // check enum
+                if (value instanceof Enum<?>)
+                {   // convert enum   
+                    value = ((Enum<?>)value).ordinal();
+                }
+                // check number
+                if (!(value instanceof java.lang.Number))
+                {   try
+                    {   // Convert to Long
+                        value = ObjectUtils.toLong(value);
+                    } catch (NumberFormatException e) {
+                        log.info("Parsing '{}' to Integer failed for column 
{}. Message is "+e.toString(), value, column.getName());
+                        throw new FieldIllegalValueException(column, 
String.valueOf(value), e);
+                    }
+                }
+                // validate Number
+                value = validateNumber(column, type, (Number)value);
+                break;
+
+            case VARCHAR:
+            case CHAR:
+                // check enum
+                if (value instanceof Enum<?>)
+                {   // convert enum   
+                    value = ObjectUtils.getString((Enum<?>)value);
+                }
+                // check length
+                if (value.toString().length() > (int)column.getSize())
+                {
+                    throw new FieldValueTooLongException(column);
+                }
+                break;
+                
+            default:
+                if (log.isDebugEnabled())
+                    log.debug("No column validation has been implemented for 
data type " + type);
+                break;
+        }
+        return value;
+    }
+    
+    protected Number validateNumber(DBTableColumn column, DataType type, 
Number n)
+    {
+        // Check Range
+        Object min = column.getAttribute(Column.COLATTR_MINVALUE);
+        Object max = column.getAttribute(Column.COLATTR_MAXVALUE);
+        if (min!=null && max!=null)
+        {   // Check Range
+            long minVal = ObjectUtils.getLong(min);
+            long maxVal = ObjectUtils.getLong(max);
+            if (n.longValue()<minVal || n.longValue()>maxVal)
+            {   // Out of Range
+                throw new FieldValueOutOfRangeException(column, minVal, 
maxVal);
+            }
+        }
+        else if (min!=null)
+        {   // Check Min Value
+            long minVal = ObjectUtils.getLong(min);
+            if (n.longValue()<minVal)
+            {   // Out of Range
+                throw new FieldValueOutOfRangeException(column, minVal, false);
+            }
+        }
+        else if (max!=null)
+        {   // Check Max Value
+            long maxVal = ObjectUtils.getLong(max);
+            if (n.longValue()>maxVal)
+            {   // Out of Range
+                throw new FieldValueOutOfRangeException(column, maxVal, true);
+            }
+        }
+        // Check overall
+        if (type==DataType.DECIMAL)
+        {   // Convert to Decimal
+            BigDecimal dv = ObjectUtils.toDecimal(n);
+            int prec = dv.precision();
+            int scale = dv.scale();
+            // check precision and scale
+            double size = column.getSize();
+            int reqPrec = (int)size;
+            int reqScale = column.getDecimalScale();
+            if (scale>reqScale)
+            {   // Round if scale is exceeded
+                dv = dv.setScale(reqScale, RoundingMode.HALF_UP);
+                prec  = dv.precision();
+                scale = dv.scale();
+                n = dv;
+            }
+            if ((prec-scale)>(reqPrec-reqScale))
+            {   
+                throw new FieldValueOutOfRangeException(column);
+            }
+        }
+        return n;
+    }
+    
+    /**
      * Creates a case column expression
      * "case when <condition> then <trueValue> else <falseValue> end"
      * This is a helper function to simplify client usage
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java 
b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index ee1dbf7..5574da0 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -461,7 +461,7 @@ public class DBQuery extends DBRowSet
                 if (col.isReadOnly() && log.isDebugEnabled())
                     log.debug("updateRecord: Read-only column '" + 
col.getName() + " has been modified!");
                 // Check the value
-                col.validate(fields[i]);
+                col.validateValue(fields[i]);
                 // Set
                 updCmd.set(col.to(fields[i]));
             }
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java 
b/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java
index c088512..e9c95fc 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java
@@ -106,12 +106,12 @@ public class DBQueryColumn extends DBColumn
     }
 
     @Override
-    public Object validate(Object value)
+    public Object validateValue(Object value)
     {
         DBColumn column = expr.getUpdateColumn();
         if (column==null)
             return value;
-        return column.validate(value);
+        return column.validateValue(value);
     }
 
     @Override
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 4d15c8f..a5b0005 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
@@ -687,7 +687,7 @@ public class DBRecord extends DBRecordData implements 
DBContextAware, Record, Cl
     @Override
     public Object validateValue(Column column, Object value)
     {
-       return column.validate(value);
+       return column.validateValue(value);
     }
 
     /**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTable.java 
b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
index f166e05..ec76802 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTable.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
@@ -724,4 +724,12 @@ public class DBTable extends DBRowSet implements Cloneable
         return Collections.unmodifiableList(relations);        
     }
 
+    /**
+     * validates a column value
+     * @return the validated (possibly converted) value
+     */
+    protected Object validateValue(DBTableColumn column, Object value)
+    {
+        return db.validateValue(column, value);
+    }
 }
\ No newline at end of file
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 0b9026e..00e1a22 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
@@ -18,13 +18,7 @@
  */
 package org.apache.empire.db;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.sql.Connection;
-import java.text.ParseException;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Date;
 
 import org.apache.empire.commons.Attributes;
 import org.apache.empire.commons.ObjectUtils;
@@ -32,10 +26,6 @@ import org.apache.empire.commons.OptionEntry;
 import org.apache.empire.commons.Options;
 import org.apache.empire.data.Column;
 import org.apache.empire.data.DataType;
-import org.apache.empire.db.exceptions.FieldIllegalValueException;
-import org.apache.empire.db.exceptions.FieldNotNullException;
-import org.apache.empire.db.exceptions.FieldValueOutOfRangeException;
-import org.apache.empire.db.exceptions.FieldValueTooLongException;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.InvalidPropertyException;
 import org.apache.empire.exceptions.NotSupportedException;
@@ -352,201 +342,9 @@ public class DBTableColumn extends DBColumn
      * @return true if the value is valid or false otherwise.
      */
     @Override
-    public Object validate(Object value)
+    public Object validateValue(Object value)
     {
-        // Check for NULL
-        if (ObjectUtils.isEmpty(value))
-        {   // Null value   
-            if (isRequired())
-                throw new FieldNotNullException(this);
-            // Null is allowed
-            return null;
-        }
-        // Check for Column expression
-        if (value instanceof DBColumnExpr)
-        {   DataType funcType = ((DBColumnExpr)value).getDataType();
-            if (!type.isCompatible(funcType))
-            {   // Incompatible data types
-                log.info("Incompatible data types in expression for column {} 
using function {}!", getName(), value.toString());
-                throw new FieldIllegalValueException(this, 
String.valueOf(value));
-            }
-            // allowed
-            return value; 
-        }
-        // Check for Command expression
-        if (value instanceof DBCommandExpr)
-        {   DBColumnExpr[] exprList = 
((DBCommandExpr)value).getSelectExprList();
-            if (exprList.length!=1)
-            {   // Incompatible data types
-                log.info("Invalid command expression for column {} using 
command {}!", getName(), ((DBCommandExpr)value).getSelect());
-                throw new FieldIllegalValueException(this, 
((DBCommandExpr)value).getSelect());
-            }
-            // Compare types
-            if (!type.isCompatible(exprList[0].getDataType()))
-            {   // Incompatible data types
-                log.info("Incompatible data types in expression for column {} 
using function {}!", getName(), value.toString());
-                throw new FieldIllegalValueException(this, 
String.valueOf(value));
-            }
-            // allowed
-            return value; 
-        }
-        // Is value valid
-        switch (type)
-        {
-            case DATE:
-                // 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))
-                {   try {
-                        // Parse Date
-                        value = ObjectUtils.toDate(value);
-                    } catch(ParseException e) {
-                        log.info("Parsing '{}' to Date failed for column {}. 
Message is "+e.toString(), value, getName());
-                        throw new FieldIllegalValueException(this, 
String.valueOf(value), e);
-                    }
-                }    
-                break;
-
-            case DECIMAL:
-                // check enum
-                if (value instanceof Enum<?>)
-                {   // convert enum   
-                    value = ((Enum<?>)value).ordinal();
-                }
-                // check number
-                if (!(value instanceof java.lang.Number))
-                {   try
-                    {   // Convert to Decimal
-                        value = ObjectUtils.toDecimal(value);
-                        // throws NumberFormatException if not a number!
-                    } catch (NumberFormatException e) {
-                        log.info("Parsing '{}' to Decimal failed for column 
{}. Message is "+e.toString(), value, getName());
-                        throw new FieldIllegalValueException(this, 
String.valueOf(value), e);
-                    }
-                }
-                // validate Number
-                value = validateNumber(type, (Number)value);
-                break;
-
-            case FLOAT:
-                if (!(value instanceof java.lang.Number))
-                {   try
-                    {   // Convert to Double
-                        value = ObjectUtils.toDouble(value);
-                        // throws NumberFormatException if not a number!
-                    } 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);
-                    }
-                }
-                // validate Number
-                value = validateNumber(type, (Number)value);
-                break;
-
-            case INTEGER:
-                // check enum
-                if (value instanceof Enum<?>)
-                {   // convert enum   
-                    value = ((Enum<?>)value).ordinal();
-                }
-                // check number
-                if (!(value instanceof java.lang.Number))
-                {   try
-                    {   // Convert to Long
-                        value = ObjectUtils.toLong(value);
-                    } 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);
-                    }
-                }
-                // validate Number
-                value = validateNumber(type, (Number)value);
-                break;
-
-            case VARCHAR:
-            case CHAR:
-                // check enum
-                if (value instanceof Enum<?>)
-                {   // convert enum   
-                    value = ObjectUtils.getString((Enum<?>)value);
-                }
-                // check length
-                if (value.toString().length() > size)
-                {
-                    throw new FieldValueTooLongException(this);
-                }
-                break;
-                
-            default:
-                if (log.isDebugEnabled())
-                    log.debug("No column validation has been implemented for 
data type " + type);
-                break;
-
-        }
-        return value;
-    }
-    
-    protected Number validateNumber(DataType type, Number n)
-    {
-        // Check Range
-        Object min = getAttribute(Column.COLATTR_MINVALUE);
-        Object max = getAttribute(Column.COLATTR_MAXVALUE);
-        if (min!=null && max!=null)
-        {   // Check Range
-            long minVal = ObjectUtils.getLong(min);
-            long maxVal = ObjectUtils.getLong(max);
-            if (n.longValue()<minVal || n.longValue()>maxVal)
-            {   // Out of Range
-                throw new FieldValueOutOfRangeException(this, minVal, maxVal);
-            }
-        }
-        else if (min!=null)
-        {   // Check Min Value
-            long minVal = ObjectUtils.getLong(min);
-            if (n.longValue()<minVal)
-            {   // Out of Range
-                throw new FieldValueOutOfRangeException(this, minVal, false);
-            }
-        }
-        else if (max!=null)
-        {   // Check Max Value
-            long maxVal = ObjectUtils.getLong(max);
-            if (n.longValue()>maxVal)
-            {   // Out of Range
-                throw new FieldValueOutOfRangeException(this, maxVal, true);
-            }
-        }
-        // Check overall
-        if (type==DataType.DECIMAL)
-        {   // Convert to Decimal
-            BigDecimal dv = ObjectUtils.toDecimal(n);
-            int prec = dv.precision();
-            int scale = dv.scale();
-            // check precision and scale
-            double size = getSize();
-            int reqPrec = (int)size;
-            int reqScale = getDecimalScale();
-            if (scale>reqScale)
-            {   // Round if scale is exceeded
-                dv = dv.setScale(reqScale, RoundingMode.HALF_UP);
-                prec  = dv.precision();
-                scale = dv.scale();
-                n = dv;
-            }
-            if ((prec-scale)>(reqPrec-reqScale))
-            {   
-                throw new FieldValueOutOfRangeException(this);
-            }
-        }
-        return n;
+        return ((DBTable)rowset).validateValue(this, value);
     }
 
     /**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBView.java 
b/empire-db/src/main/java/org/apache/empire/db/DBView.java
index f18570c..f361e81 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBView.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBView.java
@@ -125,11 +125,11 @@ public abstract class DBView extends DBRowSet
         }    
 
         @Override
-        public Object validate(Object value)
+        public Object validateValue(Object value)
         {
             if (updateColumn==null)
                 return value;
-            return updateColumn.validate(value);
+            return updateColumn.validateValue(value);
         }
 
         @Override

Reply via email to