org.apache.derby.iapi.types
Class NumberDataType

java.lang.Object
  extended byorg.apache.derby.iapi.types.DataType
      extended byorg.apache.derby.iapi.types.NumberDataType
All Implemented Interfaces:
CloneableObject, DataValueDescriptor, java.io.Externalizable, Formatable, NumberDataValue, Orderable, java.io.Serializable, Storable, TypedFormat
Direct Known Subclasses:
BinaryDecimal, SQLDecimal, SQLDouble, SQLInteger, SQLLongint, SQLReal, SQLSmallint, SQLTinyint

public abstract class NumberDataType
extends DataType
implements NumberDataValue

NumberDataType is the superclass for all exact and approximate numeric data types. It exists for the purpose of allowing classification of types for supported implicit conversions among them.

Author:
ames
See Also:
DataType, Serialized Form

Field Summary
(package private) static java.lang.Comparable MAXLONG_PLUS_ONE
          Set by the booting DataValueFactory implementation.
(package private) static java.lang.Comparable MINLONG_MINUS_ONE
          Set by the booting DataValueFactory implementation.
(package private) static DataValueDescriptor ZERO_DECIMAL
          Set by the booting DataValueFactory implementation.
 
Fields inherited from interface org.apache.derby.iapi.types.NumberDataValue
MAX_DECIMAL_PRECISION_SCALE, MIN_DECIMAL_DIVIDE_SCALE
 
Fields inherited from interface org.apache.derby.iapi.types.Orderable
ORDER_OP_EQUALS, ORDER_OP_GREATEROREQUALS, ORDER_OP_GREATERTHAN, ORDER_OP_LESSOREQUALS, ORDER_OP_LESSTHAN
 
Constructor Summary
NumberDataType()
           
 
Method Summary
 NumberDataValue absolute(NumberDataValue result)
          Numbers check for isNegative first and negate it if negative.
 int compare(DataValueDescriptor arg)
          Compare this Orderable with a given Orderable for the purpose of index positioning.
 boolean compare(int op, DataValueDescriptor other, boolean orderedNulls, boolean unknownRV)
          Compare this Orderable with a given Orderable for the purpose of qualification and sorting.
 NumberDataValue divide(NumberDataValue dividend, NumberDataValue divisor, NumberDataValue result)
          This method implements the / operator for TINYINT, SMALLINT and INTEGER.
 NumberDataValue divide(NumberDataValue dividend, NumberDataValue divisor, NumberDataValue result, int scale)
          Suitable for integral types that ignore scale.
 int getDecimalValuePrecision()
          Return the precision of this specific DECIMAL value.
 int getDecimalValueScale()
          Return the scale of this specific DECIMAL value.
protected abstract  boolean isNegative()
          The isNegative abstract method.
 NumberDataValue minus(NumberDataValue left, NumberDataValue right, NumberDataValue result)
          This method implements the - operator for TINYINT, SMALLINT and INTEGER.
 NumberDataValue mod(NumberDataValue dividend, NumberDataValue divisor, NumberDataValue result)
          The SQL mod operator.
static double normalizeDOUBLE(double v)
          normalizeDOUBLE checks the validity of the given java double that it fits within the range of DB2 DOUBLEs.
static float normalizeREAL(double v)
          normalizeREAL checks the validity of the given java double that it fits within the range of DB2 REALs.
static float normalizeREAL(float v)
          normalizeREAL checks the validity of the given java float that it fits within the range of DB2 REALs.
protected  boolean objectNull(java.lang.Object o)
           
 NumberDataValue plus(NumberDataValue addend1, NumberDataValue addend2, NumberDataValue result)
          This method implements the + operator for TINYINT,SMALLINT,INT.
 void setBigDecimal(java.lang.Number bigDecimal)
          setValue for integral exact numerics.
 void setValue(byte theValue)
          Common code to handle converting a byte to this value by using the int to this value conversion.
 void setValue(java.lang.Number theValue)
          Common code to handle java.lang.Integer as a Number, used for TINYINT, SMALLINT, INTEGER
 void setValue(short theValue)
          Common code to handle converting a short to this value by using the int to this value conversion.
 NumberDataValue sqrt(NumberDataValue result)
          This is the sqrt method.
protected abstract  int typeCompare(DataValueDescriptor arg)
          Compare this (not null) to a non-null value.
 int typeToBigDecimal()
          Implementation for integral types.
 
Methods inherited from class org.apache.derby.iapi.types.DataType
checkHostVariable, cloneObject, coalesce, dataTypeConversion, equals, equals, flip, genericSetObject, getBoolean, getByte, getBytes, getDate, getDouble, getFloat, getInt, getLong, getNationalString, getObject, getShort, getStream, getTime, getTimestamp, greaterOrEquals, greaterThan, in, invalidFormat, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, notEquals, outOfRange, setFrom, setInto, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, throwLangSetMismatch, throwLangSetMismatch, typePrecedence
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.derby.iapi.types.NumberDataValue
minus, times
 
Methods inherited from interface org.apache.derby.iapi.types.DataValueDescriptor
checkHostVariable, coalesce, equals, estimateMemoryUsage, getBoolean, getByte, getBytes, getClone, getDate, getDouble, getFloat, getInt, getLength, getLong, getNewNull, getObject, getShort, getStream, getString, getTime, getTimestamp, getTypeName, greaterOrEquals, greaterThan, in, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, notEquals, readExternalFromArray, setInto, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValueFromResultSet, typePrecedence
 
Methods inherited from interface org.apache.derby.iapi.services.io.Storable
isNull, restoreToNull
 
Methods inherited from interface java.io.Externalizable
readExternal, writeExternal
 
Methods inherited from interface org.apache.derby.iapi.services.io.TypedFormat
getTypeFormatId
 

Field Detail

ZERO_DECIMAL

static DataValueDescriptor ZERO_DECIMAL
Set by the booting DataValueFactory implementation.


MINLONG_MINUS_ONE

static java.lang.Comparable MINLONG_MINUS_ONE
Set by the booting DataValueFactory implementation.


MAXLONG_PLUS_ONE

static java.lang.Comparable MAXLONG_PLUS_ONE
Set by the booting DataValueFactory implementation.

Constructor Detail

NumberDataType

public NumberDataType()
Method Detail

absolute

public final NumberDataValue absolute(NumberDataValue result)
                               throws StandardException
Numbers check for isNegative first and negate it if negative.

Specified by:
absolute in interface NumberDataValue
Parameters:
result - The result of the previous call to this method, null if not called yet.
Returns:
this object's absolute value. Null if object is null.
Throws:
StandardException - thrown on error.

sqrt

public NumberDataValue sqrt(NumberDataValue result)
                     throws StandardException
This is the sqrt method.

Specified by:
sqrt in interface NumberDataValue
Parameters:
result - The result of the previous call to this method, null if not call yet.
Returns:
this object's sqrt value. Null if object is null. Note: -0.0f and -0.0d returns 0.0f and 0.0d.
Throws:
StandardException - thrown on a negative number.

plus

public NumberDataValue plus(NumberDataValue addend1,
                            NumberDataValue addend2,
                            NumberDataValue result)
                     throws StandardException
This method implements the + operator for TINYINT,SMALLINT,INT.

Specified by:
plus in interface NumberDataValue
Parameters:
addend1 - One of the addends
addend2 - The other addend
result - The result of a previous call to this method, null if not called yet
Returns:
A NumberDataValue containing the result of the addition
Throws:
StandardException - Thrown on error

minus

public NumberDataValue minus(NumberDataValue left,
                             NumberDataValue right,
                             NumberDataValue result)
                      throws StandardException
This method implements the - operator for TINYINT, SMALLINT and INTEGER.

Specified by:
minus in interface NumberDataValue
Parameters:
left - The value to be subtracted from
right - The value to be subtracted
result - The result of a previous call to this method, null if not called yet
Returns:
A SQLInteger containing the result of the subtraction
Throws:
StandardException - Thrown on error

divide

public NumberDataValue divide(NumberDataValue dividend,
                              NumberDataValue divisor,
                              NumberDataValue result)
                       throws StandardException
This method implements the / operator for TINYINT, SMALLINT and INTEGER. Specialized methods are not required for TINYINT and SMALLINT as the Java virtual machine always executes byte and int division as integer.

Specified by:
divide in interface NumberDataValue
Parameters:
dividend - The numerator
divisor - The denominator
result - The result of a previous call to this method, null if not called yet
Returns:
A SQLInteger containing the result of the division
Throws:
StandardException - Thrown on error

divide

public NumberDataValue divide(NumberDataValue dividend,
                              NumberDataValue divisor,
                              NumberDataValue result,
                              int scale)
                       throws StandardException
Suitable for integral types that ignore scale.

Specified by:
divide in interface NumberDataValue
Parameters:
dividend - The numerator
divisor - The denominator
result - The result of the previous call to this method, null if not called yet.
scale - The scale of the result, for decimal type. If pass in value < 0, can calculate it dynamically.
Returns:
dividend / divisor
Throws:
StandardException - Thrown on error, if result is non-null then its value will be unchanged.

mod

public NumberDataValue mod(NumberDataValue dividend,
                           NumberDataValue divisor,
                           NumberDataValue result)
                    throws StandardException
Description copied from interface: NumberDataValue
The SQL mod operator.

Specified by:
mod in interface NumberDataValue
Parameters:
dividend - The numerator
divisor - The denominator
result - The result of the previous call to this method, null if not called yet.
Returns:
dividend / divisor
Throws:
StandardException - Thrown on error, if result is non-null then its value will be unchanged.

compare

public final int compare(DataValueDescriptor arg)
                  throws StandardException
Description copied from interface: DataValueDescriptor
Compare this Orderable with a given Orderable for the purpose of index positioning. This method treats nulls as ordered values - that is, it treats SQL null as equal to null and less than all other values.

Specified by:
compare in interface DataValueDescriptor
Parameters:
arg - The Orderable to compare this one to.
Returns:
<0 - this Orderable is less than other. 0 - this Orderable equals other. >0 - this Orderable is greater than other. The code should not explicitly look for -1, or 1.
Throws:
StandardException - Thrown on error

typeCompare

protected abstract int typeCompare(DataValueDescriptor arg)
                            throws StandardException
Compare this (not null) to a non-null value.

Throws:
StandardException - Thrown on error

compare

public final boolean compare(int op,
                             DataValueDescriptor other,
                             boolean orderedNulls,
                             boolean unknownRV)
                      throws StandardException
Description copied from interface: DataValueDescriptor
Compare this Orderable with a given Orderable for the purpose of qualification and sorting. The caller gets to determine how nulls should be treated - they can either be ordered values or unknown values.

Specified by:
compare in interface DataValueDescriptor
Overrides:
compare in class DataType
Throws:
StandardException - thrown on error

isNegative

protected abstract boolean isNegative()
The isNegative abstract method. Checks to see if this.value is negative. To be implemented by each NumberDataType.

Returns:
A boolean. If this.value is negative, return true. For positive values or null, return false.

setValue

public void setValue(short theValue)
              throws StandardException
Common code to handle converting a short to this value by using the int to this value conversion. Simply calls setValue(int).

Specified by:
setValue in interface DataValueDescriptor
Overrides:
setValue in class DataType
Parameters:
theValue - The value to set this DataValueDescriptor to
Returns:
This DataValueDescriptor
Throws:
StandardException - Thrown on error

setValue

public void setValue(byte theValue)
              throws StandardException
Common code to handle converting a byte to this value by using the int to this value conversion. Simply calls setValue(int).

Specified by:
setValue in interface DataValueDescriptor
Overrides:
setValue in class DataType
Parameters:
theValue - The value to set this DataValueDescriptor to
Returns:
This DataValueDescriptor
Throws:
StandardException - Thrown on error

setValue

public void setValue(java.lang.Number theValue)
              throws StandardException
Common code to handle java.lang.Integer as a Number, used for TINYINT, SMALLINT, INTEGER

Specified by:
setValue in interface NumberDataValue
Parameters:
theValue - An Number containing the value to set this NumberDataValue to. Null means set the value to SQL null.
Returns:
This NumberDataValue
Throws:
StandardException - Thrown on error
See Also:
NumberDataValue.setValue(java.lang.Number)

setBigDecimal

public void setBigDecimal(java.lang.Number bigDecimal)
                   throws StandardException
setValue for integral exact numerics. Converts the BigDecimal to a long to preserve precision

Specified by:
setBigDecimal in interface DataValueDescriptor
Overrides:
setBigDecimal in class DataType
Throws:
StandardException

typeToBigDecimal

public int typeToBigDecimal()
Implementation for integral types. Convert to a BigDecimal using long

Specified by:
typeToBigDecimal in interface DataValueDescriptor
Overrides:
typeToBigDecimal in class DataType

getDecimalValuePrecision

public int getDecimalValuePrecision()
Return the precision of this specific DECIMAL value. If the value does not represent a SQL DECIMAL then the return is undefined.

Specified by:
getDecimalValuePrecision in interface NumberDataValue

getDecimalValueScale

public int getDecimalValueScale()
Return the scale of this specific DECIMAL value. If the value does not represent a SQL DECIMAL then the return is undefined.

Specified by:
getDecimalValueScale in interface NumberDataValue

objectNull

protected final boolean objectNull(java.lang.Object o)

normalizeREAL

public static float normalizeREAL(float v)
                           throws StandardException
normalizeREAL checks the validity of the given java float that it fits within the range of DB2 REALs. In addition it normalizes the value, so that negative zero (-0.0) becomes positive.

Throws:
StandardException

normalizeREAL

public static float normalizeREAL(double v)
                           throws StandardException
normalizeREAL checks the validity of the given java double that it fits within the range of DB2 REALs. In addition it normalizes the value, so that negative zero (-0.0) becomes positive. The reason for having normalizeREAL with two signatures is to avoid that normalizeREAL is called with a casted (float)doublevalue, since this invokes an unwanted rounding (of underflow values to 0.0), in contradiction to DB2s casting semantics.

Throws:
StandardException

normalizeDOUBLE

public static double normalizeDOUBLE(double v)
                              throws StandardException
normalizeDOUBLE checks the validity of the given java double that it fits within the range of DB2 DOUBLEs. In addition it normalizes the value, so that negative zero (-0.0) becomes positive.

Throws:
StandardException

Built on Mon 2007-06-04 09:58:47+0400, from revision ???

Apache Derby V10.1 Engine Documentation - Copyright © 1997,2005 The Apache Software Foundation or its licensors, as applicable.