|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.derby.iapi.types.DataType
org.apache.derby.iapi.types.NumberDataType
org.apache.derby.iapi.types.SQLDecimal
SQLDecimal satisfies the DataValueDescriptor interfaces (i.e., OrderableDataType). It implements a numeric/decimal column, e.g. for * storing a column value; it can be specified when constructed to not allow nulls. Nullability cannot be changed after construction, as it affects the storage size and mechanism.
Because OrderableDataType is a subtype of DataType, SQLDecimal can play a role in either a DataType/Row or a OrderableDataType/Row, interchangeably.
We assume the store has a flag for nullness of the value, and simply return a 0-length array for the stored form when the value is null.
Field Summary | |
private static int |
BASE_MEMORY_USAGE
|
private static java.lang.reflect.Method |
bdPrecision
|
private static int |
BIG_DECIMAL_MEMORY_USAGE
|
(package private) static java.math.BigDecimal |
MAXLONG_PLUS_ONE
|
(package private) static java.math.BigDecimal |
MINLONG_MINUS_ONE
|
private static java.math.BigDecimal |
ONE
|
private byte[] |
rawData
See comments for value |
private int |
rawScale
See comments for value |
private static java.lang.reflect.Method |
toPlainString
|
private java.math.BigDecimal |
value
object state. |
private static java.math.BigDecimal |
ZERO
|
Fields inherited from class org.apache.derby.iapi.types.NumberDataType |
ZERO_DECIMAL |
Fields inherited from interface org.apache.derby.iapi.types.VariableSizeDataValue |
IGNORE_PRECISION |
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 | |
SQLDecimal()
no-arg constructor, required by Formattable |
|
SQLDecimal(java.math.BigDecimal val)
|
|
SQLDecimal(java.math.BigDecimal val,
int nprecision,
int scale)
|
|
SQLDecimal(java.lang.String val)
|
Method Summary | |
NumberDataValue |
divide(NumberDataValue dividend,
NumberDataValue divisor,
NumberDataValue result)
This method implements the / operator for BigDecimal/BigDecimal |
NumberDataValue |
divide(NumberDataValue dividend,
NumberDataValue divisor,
NumberDataValue result,
int scale)
This method implements the / operator for BigDecimal/BigDecimal |
int |
estimateMemoryUsage()
Estimate the memory usage in bytes of the data value and the overhead of the class. |
private java.math.BigDecimal |
getBigDecimal()
|
static java.math.BigDecimal |
getBigDecimal(DataValueDescriptor value)
Get a BigDecimal representing the value of a DataValueDescriptor |
boolean |
getBoolean()
Gets the value in the data value descriptor as a boolean. |
byte |
getByte()
Gets the value in the data value descriptor as a byte. |
DataValueDescriptor |
getClone()
WARNING clone is a shallow copy |
int |
getDecimalValuePrecision()
Return the SQL scale of this value, number of digits after the decimal point, or zero for a whole number. |
int |
getDecimalValueScale()
Return the SQL scale of this value, number of digits after the decimal point, or zero for a whole number. |
double |
getDouble()
If we have a value that is greater than the maximum double, exception is thrown. |
float |
getFloat()
Gets the value in the data value descriptor as a float. |
int |
getInt()
Gets the value in the data value descriptor as an int. |
int |
getLength()
Gets the length of the data value. |
long |
getLong()
Gets the value in the data value descriptor as a long. |
DataValueDescriptor |
getNewNull()
Get a new null value of the same type as this data value. |
java.lang.Object |
getObject()
Gets the value in the data value descriptor as a Java Object. |
short |
getShort()
Gets the value in the data value descriptor as a short. |
java.lang.String |
getString()
Gets the value in the data value descriptor as a String. |
int |
getTypeFormatId()
Return my format identifier. |
java.lang.String |
getTypeName()
Get the SQL name of the datatype |
private static int |
getWholeDigits(java.math.BigDecimal decimalValue)
Calculate the number of digits to the left of the decimal point of the passed in value. |
int |
hashCode()
|
protected boolean |
isNegative()
This method implements the isNegative method. |
boolean |
isNull()
Return whether the value is null or not. |
NumberDataValue |
minus(NumberDataValue result)
This method implements the unary minus operator for double. |
NumberDataValue |
minus(NumberDataValue left,
NumberDataValue right,
NumberDataValue result)
This method implements the - operator for "decimal - decimal". |
void |
normalize(DataTypeDescriptor desiredType,
DataValueDescriptor source)
Normalization method - this method may be called when putting a value into a SQLDecimal, for example, when inserting into a SQLDecimal column. |
NumberDataValue |
plus(NumberDataValue addend1,
NumberDataValue addend2,
NumberDataValue result)
This method implements the + operator for DECIMAL. |
void |
readExternal(java.io.ObjectInput in)
Note the use of rawData: we reuse the array if the incoming array is the same length or smaller than the array length. |
void |
readExternalFromArray(ArrayInputStream in)
Read the DataValueDescriptor from the stream. |
void |
restoreToNull()
Restore this object to its (SQL)null value. |
void |
setBigDecimal(java.lang.Number theValue)
Only to be called when the application sets a value using BigDecimal through setBigDecimal calls. |
private void |
setCoreValue(java.math.BigDecimal theValue)
|
private void |
setCoreValue(double theValue)
|
protected void |
setFrom(DataValueDescriptor theValue)
|
void |
setInto(java.sql.PreparedStatement ps,
int position)
Set the value into a PreparedStatement. |
void |
setValue(boolean theValue)
Set the value. |
void |
setValue(double theValue)
Set the value of this DataValueDescriptor to the given double value |
void |
setValue(float theValue)
Set the value of this DataValueDescriptor to the given double value |
void |
setValue(int theValue)
Set the value of this DataValueDescriptor to the given int value |
void |
setValue(long theValue)
Set the value of this DataValueDescriptor to the given long value |
void |
setValue(java.lang.Number theValue)
Called when setting a DECIMAL value internally or from through a procedure or function. |
void |
setValue(java.lang.Object theValue)
Set the value of this DataValueDescriptor to the given value |
void |
setValue(java.lang.String theValue)
WARNING there is no checking to make sure that theValue doesn't exceed the precision/scale of the current SQLDecimal. |
void |
setValueFromResultSet(java.sql.ResultSet resultSet,
int colNumber,
boolean isNullable)
Set the value based on the value for the specified DataValueDescriptor from the specified ResultSet. |
DataValueDescriptor |
setWidth(int desiredPrecision,
int desiredScale,
boolean errorOnTrunc)
Set the precision/scale of the to the desired values. |
NumberDataValue |
times(NumberDataValue left,
NumberDataValue right,
NumberDataValue result)
This method implements the * operator for "double * double". |
java.lang.String |
toString()
|
protected int |
typeCompare(DataValueDescriptor arg)
Compare this (not null) to a non-null value. |
int |
typePrecedence()
Each built-in type in JSQL has a precedence. |
int |
typeToBigDecimal()
DECIMAL implementation. |
void |
writeExternal(java.io.ObjectOutput out)
Distill the BigDecimal to a byte array and write out: scale (zero or positive) as a byte length of byte array as a byte the byte array |
Methods inherited from class org.apache.derby.iapi.types.NumberDataType |
absolute, compare, compare, mod, normalizeDOUBLE, normalizeREAL, normalizeREAL, objectNull, setValue, setValue, sqrt |
Methods inherited from class org.apache.derby.iapi.types.DataType |
checkHostVariable, cloneObject, coalesce, dataTypeConversion, equals, equals, flip, genericSetObject, getBytes, getDate, getNationalString, getStream, getTime, getTimestamp, greaterOrEquals, greaterThan, in, invalidFormat, isNotNull, isNullOp, lessOrEquals, lessThan, notEquals, outOfRange, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, throwLangSetMismatch, throwLangSetMismatch |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface org.apache.derby.iapi.types.DataValueDescriptor |
checkHostVariable, coalesce, equals, getBytes, getDate, getStream, getTime, getTimestamp, greaterOrEquals, greaterThan, in, isNotNull, isNullOp, lessOrEquals, lessThan, notEquals, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue |
Field Detail |
private static final java.math.BigDecimal ZERO
private static final java.math.BigDecimal ONE
static final java.math.BigDecimal MAXLONG_PLUS_ONE
static final java.math.BigDecimal MINLONG_MINUS_ONE
private java.math.BigDecimal value
This means that this field must be accessed for read indirectly through the getBigDecimal() method, and when setting it the rawData field must be set to null.
private byte[] rawData
private int rawScale
private static final int BASE_MEMORY_USAGE
private static final int BIG_DECIMAL_MEMORY_USAGE
private static final java.lang.reflect.Method toPlainString
private static final java.lang.reflect.Method bdPrecision
Constructor Detail |
public SQLDecimal()
public SQLDecimal(java.math.BigDecimal val)
public SQLDecimal(java.math.BigDecimal val, int nprecision, int scale) throws StandardException
public SQLDecimal(java.lang.String val)
Method Detail |
public int estimateMemoryUsage()
DataValueDescriptor
estimateMemoryUsage
in interface DataValueDescriptor
public int getInt() throws StandardException
DataValueDescriptor
getInt
in interface DataValueDescriptor
getInt
in class DataType
StandardException
- thrown on failure to convertpublic byte getByte() throws StandardException
DataValueDescriptor
getByte
in interface DataValueDescriptor
getByte
in class DataType
StandardException
- thrown on failure to convertpublic short getShort() throws StandardException
DataValueDescriptor
getShort
in interface DataValueDescriptor
getShort
in class DataType
StandardException
- thrown on failure to convertpublic long getLong() throws StandardException
DataValueDescriptor
getLong
in interface DataValueDescriptor
getLong
in class DataType
StandardException
- thrown on failure to convertpublic float getFloat() throws StandardException
DataValueDescriptor
getFloat
in interface DataValueDescriptor
getFloat
in class DataType
StandardException
- thrown on failure to convertpublic double getDouble() throws StandardException
getDouble
in interface DataValueDescriptor
getDouble
in class DataType
StandardException
- thrown on failure to convertprivate java.math.BigDecimal getBigDecimal()
public int typeToBigDecimal()
typeToBigDecimal
in interface DataValueDescriptor
typeToBigDecimal
in class NumberDataType
public boolean getBoolean()
DataValueDescriptor
getBoolean
in interface DataValueDescriptor
getBoolean
in class DataType
public java.lang.String getString()
DataValueDescriptor
getString
in interface DataValueDescriptor
public java.lang.Object getObject()
DataValueDescriptor
getObject
in interface DataValueDescriptor
getObject
in class DataType
public void setValue(java.lang.Object theValue) throws StandardException
DataValueDescriptor
setValue
in interface DataValueDescriptor
setValue
in class DataType
StandardException
DataValueDescriptor.setValue(java.lang.Object)
protected void setFrom(DataValueDescriptor theValue) throws StandardException
setFrom
in class DataType
StandardException
public int getLength()
DataValueDescriptor
getLength
in interface DataValueDescriptor
public java.lang.String getTypeName()
DataValueDescriptor
getTypeName
in interface DataValueDescriptor
public int getTypeFormatId()
getTypeFormatId
in interface TypedFormat
TypedFormat.getTypeFormatId()
public boolean isNull()
Storable
isNull
in interface Storable
Storable.isNull()
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException
writeExternal
in interface java.io.Externalizable
java.io.IOException
public void readExternal(java.io.ObjectInput in) throws java.io.IOException
readExternal
in interface java.io.Externalizable
java.io.IOException
Externalizable.readExternal(java.io.ObjectInput)
public void readExternalFromArray(ArrayInputStream in) throws java.io.IOException
DataValueDescriptor
Initialize the data value by reading it's values from the ArrayInputStream. This interface is provided as a way to achieve possible performance enhancement when reading an array can be optimized over reading from a generic stream from readExternal().
readExternalFromArray
in interface DataValueDescriptor
in
- The array stream positioned at the beginning of the
byte stream to read from.
java.io.IOException
- Usual error is if you try to read
past limit on the stream.public void restoreToNull()
Storable
restoreToNull
in interface Storable
Storable.restoreToNull()
protected int typeCompare(DataValueDescriptor arg) throws StandardException
NumberDataType
typeCompare
in class NumberDataType
StandardException
- Thrown on errorpublic DataValueDescriptor getClone()
getClone
in interface DataValueDescriptor
DataValueDescriptor.getClone()
public DataValueDescriptor getNewNull()
DataValueDescriptor
getNewNull
in interface DataValueDescriptor
DataValueDescriptor.getNewNull()
public void setValueFromResultSet(java.sql.ResultSet resultSet, int colNumber, boolean isNullable) throws java.sql.SQLException
DataValueDescriptor
setValueFromResultSet
in interface DataValueDescriptor
resultSet
- The specified ResultSet.colNumber
- The 1-based column # into the resultSet.isNullable
- Whether or not the column is nullable
(No need to call wasNull() if not)
java.sql.SQLException
- Thrown on errorDataValueDescriptor.setValueFromResultSet(java.sql.ResultSet, int, boolean)
public final void setInto(java.sql.PreparedStatement ps, int position) throws java.sql.SQLException
setInto
in interface DataValueDescriptor
setInto
in class DataType
java.sql.SQLException
- Error setting value in PreparedStatementpublic void setValue(java.lang.String theValue) throws StandardException
setValue
in interface DataValueDescriptor
setValue
in class DataType
theValue
- The BigDecimal value to set this DataValueDescriptor to
StandardException
- throws NumberFormatException
when the String format is not recognized.public void setValue(double theValue) throws StandardException
DataValueDescriptor
setValue
in interface DataValueDescriptor
setValue
in class DataType
theValue
- The value to set this DataValueDescriptor to
StandardException
- Thrown on errorNumberDataValue.setValue(java.lang.Number)
public void setValue(float theValue) throws StandardException
DataValueDescriptor
setValue
in interface DataValueDescriptor
setValue
in class DataType
theValue
- The value to set this DataValueDescriptor to
StandardException
- Thrown on errorNumberDataValue.setValue(java.lang.Number)
public void setValue(long theValue)
DataValueDescriptor
setValue
in interface DataValueDescriptor
setValue
in class DataType
theValue
- The value to set this DataValueDescriptor to
NumberDataValue.setValue(java.lang.Number)
public void setValue(int theValue)
DataValueDescriptor
setValue
in interface DataValueDescriptor
setValue
in class DataType
theValue
- The value to set this DataValueDescriptor to
NumberDataValue.setValue(java.lang.Number)
public void setBigDecimal(java.lang.Number theValue) throws StandardException
setBigDecimal
in interface DataValueDescriptor
setBigDecimal
in class NumberDataType
StandardException
public void setValue(java.lang.Number theValue) throws StandardException
setValue
in interface NumberDataValue
setValue
in class NumberDataType
StandardException
- Thrown on errorNumberDataValue.setValue(java.lang.Number)
public void setValue(boolean theValue)
DataValueDescriptor
setValue
in interface DataValueDescriptor
setValue
in class DataType
theValue
- Contains the boolean value to set this to
NumberDataValue.setValue(java.lang.Number)
public int typePrecedence()
DataValueDescriptor
typePrecedence
in interface DataValueDescriptor
typePrecedence
in class DataType
DataValueDescriptor.typePrecedence()
private void setCoreValue(java.math.BigDecimal theValue)
private void setCoreValue(double theValue)
public void normalize(DataTypeDescriptor desiredType, DataValueDescriptor source) throws StandardException
Note that truncation is allowed on the decimal portion of a numeric only.
normalize
in interface DataValueDescriptor
normalize
in class DataType
desiredType
- The type to normalize the source column tosource
- The value to normalize
StandardException
- Thrown for null into
non-nullable column, and for
truncation errorpublic NumberDataValue plus(NumberDataValue addend1, NumberDataValue addend2, NumberDataValue result) throws StandardException
plus
in interface NumberDataValue
plus
in class NumberDataType
addend1
- One of the addendsaddend2
- The other addendresult
- The result of a previous call to this method, null
if not called yet
StandardException
- Thrown on errorpublic NumberDataValue minus(NumberDataValue left, NumberDataValue right, NumberDataValue result) throws StandardException
minus
in interface NumberDataValue
minus
in class NumberDataType
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
StandardException
- Thrown on errorpublic NumberDataValue times(NumberDataValue left, NumberDataValue right, NumberDataValue result) throws StandardException
times
in interface NumberDataValue
left
- The first value to be multipliedright
- The second value to be multipliedresult
- The result of a previous call to this method, null
if not called yet
StandardException
- Thrown on errorpublic NumberDataValue divide(NumberDataValue dividend, NumberDataValue divisor, NumberDataValue result) throws StandardException
divide
in interface NumberDataValue
divide
in class NumberDataType
dividend
- The numeratordivisor
- The denominatorresult
- The result of a previous call to this method, null
if not called yet
StandardException
- Thrown on errorpublic NumberDataValue divide(NumberDataValue dividend, NumberDataValue divisor, NumberDataValue result, int scale) throws StandardException
divide
in interface NumberDataValue
divide
in class NumberDataType
dividend
- The numeratordivisor
- The denominatorresult
- The result of a previous call to this method, null
if not called yetscale
- The result scale, if < 0, calculate the scale according
to the actual values' sizes
StandardException
- Thrown on errorpublic NumberDataValue minus(NumberDataValue result) throws StandardException
minus
in interface NumberDataValue
result
- The result of a previous call to this method, null
if not called yet
StandardException
- Thrown on errorprotected boolean isNegative()
isNegative
in class NumberDataType
public java.lang.String toString()
public int hashCode()
public DataValueDescriptor setWidth(int desiredPrecision, int desiredScale, boolean errorOnTrunc) throws StandardException
setWidth
in interface VariableSizeDataValue
desiredPrecision
- the desired precision -- IGNORE_PREICISION
if it is to be ignored.desiredScale
- the desired scaleerrorOnTrunc
- throw error on truncation (ignored --
always thrown if we truncate the non-decimal part of
the value)
StandardException
- Thrown on non-zero truncation
if errorOnTrunc is truepublic int getDecimalValuePrecision()
getDecimalValuePrecision
in interface NumberDataValue
getDecimalValuePrecision
in class NumberDataType
public int getDecimalValueScale()
getDecimalValueScale
in interface NumberDataValue
getDecimalValueScale
in class NumberDataType
public static java.math.BigDecimal getBigDecimal(DataValueDescriptor value) throws StandardException
value
- Non-null value to be converted
StandardException
- Invalid conversion or out of range.private static int getWholeDigits(java.math.BigDecimal decimalValue)
decimalValue
- Value to get whole digits from, never null.
|
Built on Tue 2006-10-10 19:23:47+0200, from revision exported | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |