Package org.apache.derby.iapi.types
Class NumberDataType
- java.lang.Object
-
- org.apache.derby.iapi.types.DataType
-
- org.apache.derby.iapi.types.NumberDataType
-
- All Implemented Interfaces:
java.io.Externalizable
,java.io.Serializable
,java.lang.Comparable
,Formatable
,Storable
,TypedFormat
,DataValueDescriptor
,NumberDataValue
,Orderable
- Direct Known Subclasses:
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.- See Also:
DataType
, Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.math.BigDecimal
MAXLONG_PLUS_ONE
(package private) static java.math.BigDecimal
MINLONG_MINUS_ONE
-
Fields inherited from interface org.apache.derby.iapi.types.DataValueDescriptor
UNKNOWN_LOGICAL_LENGTH
-
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
Constructors Constructor Description NumberDataType()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description NumberDataValue
absolute(NumberDataValue result)
Numbers check for isNegative first and negate it if negative.boolean
compare(int op, DataValueDescriptor other, boolean orderedNulls, boolean unknownRV)
Compare this Orderable with a given Orderable for the purpose of qualification and sorting.int
compare(DataValueDescriptor arg)
Compare this Orderable with a given Orderable for the purpose of index positioning.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.private static Context
getContextOrNull(java.lang.String contextID)
Privileged lookup of a Context.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 normalizes the value, so that negative zero (-0.0) becomes positive.static float
normalizeREAL(double v)
normalizeREAL normalizes the value, so that negative zero (-0.0) becomes positive.static float
normalizeREAL(float v)
normalizeREAL normalizes the value, so that negative zero (-0.0) becomes positive.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.math.BigDecimal bigDecimal)
setValue for integral exact numerics.(package private) void
setObject(java.lang.Object theValue)
Set the value from a correctly typed Integer object.void
setValue(byte theValue)
Common code to handle converting a byte to this value by using the int to this value conversion.void
setValue(short theValue)
Common code to handle converting a short 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, INTEGERNumberDataValue
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.private static boolean
useDB2Limits()
Controls use of old DB2 limits (DERBY-3398).-
Methods inherited from class org.apache.derby.iapi.types.DataType
checkHostVariable, cloneHolder, coalesce, compare, compare, compareTo, dataTypeConversion, equals, equals, flip, genericSetObject, getBoolean, getByte, getBytes, getDate, getDouble, getFloat, getInt, getLong, getObject, getShort, getStream, getTime, getTimestamp, getTraceString, getTypeName, greaterOrEquals, greaterThan, hasStream, in, invalidFormat, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, notEquals, outOfRange, readExternalFromArray, recycle, setFrom, setInto, setInto, setObjectForCast, setToNull, setValue, setValue, 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.DataValueDescriptor
checkHostVariable, cloneHolder, cloneValue, coalesce, compare, compare, equals, estimateMemoryUsage, getBoolean, getByte, getBytes, getDate, getDouble, getFloat, getInt, getLength, getLong, getNewNull, getObject, getShort, getStream, getString, getTime, getTimestamp, getTraceString, getTypeName, greaterOrEquals, greaterThan, hasStream, in, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, notEquals, readExternalFromArray, recycle, setInto, setInto, setObjectForCast, setToNull, setValue, setValue, 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.types.NumberDataValue
minus, times
-
Methods inherited from interface org.apache.derby.iapi.services.io.Storable
isNull, restoreToNull
-
Methods inherited from interface org.apache.derby.iapi.services.io.TypedFormat
getTypeFormatId
-
-
-
-
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 interfaceNumberDataValue
- 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 interfaceNumberDataValue
- 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 interfaceNumberDataValue
- Parameters:
addend1
- One of the addendsaddend2
- The other addendresult
- 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 interfaceNumberDataValue
- Parameters:
left
- The value to be subtracted fromright
- The value to be subtractedresult
- 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 interfaceNumberDataValue
- Parameters:
dividend
- The numeratordivisor
- The denominatorresult
- 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 interfaceNumberDataValue
- Parameters:
dividend
- The numeratordivisor
- The denominatorresult
- 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 interfaceNumberDataValue
- Parameters:
dividend
- The numeratordivisor
- The denominatorresult
- 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 greater than all other values.- Specified by:
compare
in interfaceDataValueDescriptor
- 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 interfaceDataValueDescriptor
- Overrides:
compare
in classDataType
- Parameters:
op
- Orderable.ORDER_OP_EQUALS means do an = comparison. Orderable.ORDER_OP_LESSTHAN means compare this < other. Orderable.ORDER_OP_LESSOREQUALS means compare this <= other.other
- The DataValueDescriptor to compare this one to.orderedNulls
- True means to treat nulls as ordered values, that is, treat SQL null as equal to null, and less than all other values. False means to treat nulls as unknown values, that is, the result of any comparison with a null is the UNKNOWN truth value.unknownRV
- The return value to use if the result of the comparison is the UNKNOWN truth value. In other words, if orderedNulls is false, and a null is involved in the comparison, return unknownRV. This parameter is not used orderedNulls is true.- Returns:
- true if the comparison is true (duh!)
- 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 interfaceDataValueDescriptor
- Overrides:
setValue
in classDataType
- Parameters:
theValue
- The value to set this DataValueDescriptor to- 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 interfaceDataValueDescriptor
- Overrides:
setValue
in classDataType
- Parameters:
theValue
- The value to set this DataValueDescriptor to- 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 interfaceNumberDataValue
- Parameters:
theValue
- An Number containing the value to set this NumberDataValue to. Null means set the value to SQL null.- Throws:
StandardException
- Thrown on error- See Also:
NumberDataValue.setValue(java.lang.Number)
-
setObject
void setObject(java.lang.Object theValue) throws StandardException
Set the value from a correctly typed Integer object. Used for TINYINT, SMALLINT, INTEGER.- Overrides:
setObject
in classDataType
- Throws:
StandardException
-
setBigDecimal
public void setBigDecimal(java.math.BigDecimal bigDecimal) throws StandardException
setValue for integral exact numerics. Converts the BigDecimal to a long to preserve precision- Specified by:
setBigDecimal
in interfaceDataValueDescriptor
- Overrides:
setBigDecimal
in classDataType
- Parameters:
bigDecimal
- required to be a BigDecimal or null.- Throws:
StandardException
-
typeToBigDecimal
public int typeToBigDecimal()
Implementation for integral types. Convert to a BigDecimal using long- Specified by:
typeToBigDecimal
in interfaceDataValueDescriptor
- Overrides:
typeToBigDecimal
in classDataType
- Returns:
- Types.CHAR for String conversion through getString Types.DECIMAL for BigDecimal through getObject or Types.BIGINT for long conversion through getLong
-
objectNull
protected final boolean objectNull(java.lang.Object o)
-
normalizeREAL
public static float normalizeREAL(float v) throws StandardException
normalizeREAL normalizes the value, so that negative zero (-0.0) becomes positive.- Throws:
StandardException
- if the value is not a number (NaN) or is infinite.
-
normalizeREAL
public static float normalizeREAL(double v) throws StandardException
normalizeREAL 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 accidentally called with a casted
(float)<double value>
since this can introduce an undetected underflow values to 0.0f.- Throws:
StandardException
- if the value is not a number (NaN) or is infinite or on underflow (the value has magnitude too small to be represented as a float).
-
normalizeDOUBLE
public static double normalizeDOUBLE(double v) throws StandardException
normalizeDOUBLE normalizes the value, so that negative zero (-0.0) becomes positive.- Throws:
StandardException
- if v is not a number (NaN) or is infinite.
-
useDB2Limits
private static boolean useDB2Limits() throws StandardException
Controls use of old DB2 limits (DERBY-3398).- Returns:
- false if dictionary is new enough, see DD_Version.
- Throws:
StandardException
-
getContextOrNull
private static Context getContextOrNull(java.lang.String contextID)
Privileged lookup of a Context. Must be private so that user code can't call this entry point.
-
-