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