Package org.apache.derby.iapi.types
Class UserType
- java.lang.Object
-
- org.apache.derby.iapi.types.DataType
-
- org.apache.derby.iapi.types.UserType
-
- All Implemented Interfaces:
java.io.Externalizable
,java.io.Serializable
,java.lang.Comparable
,Formatable
,Storable
,TypedFormat
,DataValueDescriptor
,Orderable
,UserDataValue
- Direct Known Subclasses:
UTF
public class UserType extends DataType implements UserDataValue
This contains an instance of a user-defined type, that is, a java object.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private static int
BASE_MEMORY_USAGE
private java.lang.Object
value
-
Fields inherited from interface org.apache.derby.iapi.types.DataValueDescriptor
UNKNOWN_LOGICAL_LENGTH
-
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
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description DataValueDescriptor
cloneValue(boolean forceMaterialization)
Clone this DataValueDescriptor.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 other)
Orderable interfaceBooleanDataValue
equals(DataValueDescriptor left, DataValueDescriptor right)
The = operator as called from the language module, as opposed to the storage module.int
estimateMemoryUsage()
Estimate the memory usage in bytes of the data value and the overhead of the class.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.byte[]
getBytes()
Gets the value in the data value descriptor as a byte[].java.sql.Date
getDate(java.util.Calendar cal)
Gets the value in the data value descriptor as a java.sql.Date.double
getDouble()
Gets the value in the data value descriptor as a double.float
getFloat()
Gets the value in the data value descriptor as a float.int
getInt()
Gets the value in the data value descriptor as a 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 int.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.java.sql.Time
getTime(java.util.Calendar cal)
Gets the value in the data value descriptor as a java.sql.Time.java.sql.Timestamp
getTimestamp(java.util.Calendar cal)
Gets the value in the data value descriptor as a java.sql.Timestamp.int
getTypeFormatId()
Return my format identifier.java.lang.String
getTypeName()
Get the SQL name of the datatype(package private) java.lang.String
getTypeName(java.lang.String className)
Get the type name of this value, overriding with the passed in class name (for user/java types).int
hashCode()
boolean
isNull()
Check if the value is null.BooleanDataValue
notEquals(DataValueDescriptor left, DataValueDescriptor right)
The <> operator as called from the language module, as opposed to the storage module.void
readExternal(java.io.ObjectInput in)
void
restoreToNull()
Restore this object to its (SQL)null value.void
setBigDecimal(java.math.BigDecimal theValue)
Only to be called when the application sets a value using BigDecimalprotected void
setFrom(DataValueDescriptor theValue)
Set the value of this DataValueDescriptor based on the value of the specified DataValueDescriptor.(package private) void
setObject(java.lang.Object theValue)
Set the value from an non-null object.void
setValue(java.lang.Object value)
Set the value of this DataValueDescriptor.void
setValue(java.lang.String theValue)
Set the value of this DataValueDescriptor.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.java.lang.String
toString()
int
typePrecedence()
Each built-in type in JSQL has a precedence.void
writeExternal(java.io.ObjectOutput out)
-
Methods inherited from class org.apache.derby.iapi.types.DataType
checkHostVariable, cloneHolder, coalesce, compare, compare, compareTo, dataTypeConversion, equals, flip, genericSetObject, getStream, getTraceString, greaterOrEquals, greaterThan, hasStream, in, invalidFormat, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, outOfRange, readExternalFromArray, recycle, setInto, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, throwLangSetMismatch, throwLangSetMismatch, typeToBigDecimal
-
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, cloneHolder, coalesce, compare, compare, getStream, getTraceString, greaterOrEquals, greaterThan, hasStream, in, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, readExternalFromArray, recycle, setInto, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, typeToBigDecimal
-
-
-
-
Method Detail
-
estimateMemoryUsage
public int estimateMemoryUsage()
Description copied from interface:DataValueDescriptor
Estimate the memory usage in bytes of the data value and the overhead of the class.- Specified by:
estimateMemoryUsage
in interfaceDataValueDescriptor
- Returns:
- the estimated memory usage
-
getString
public java.lang.String getString()
Description copied from interface:DataValueDescriptor
Gets the value in the data value descriptor as a String. Throws an exception if the data value is not a string.- Specified by:
getString
in interfaceDataValueDescriptor
- Returns:
- The data value as a String.
-
getBoolean
public boolean getBoolean() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a boolean. Throws an exception if the data value is not receivable as a boolean.- Specified by:
getBoolean
in interfaceDataValueDescriptor
- Overrides:
getBoolean
in classDataType
- Returns:
- The data value as a boolean.
- Throws:
StandardException
- thrown on failure to convert
-
getByte
public byte getByte() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a byte. Throws an exception if the data value is not receivable as a byte.- Specified by:
getByte
in interfaceDataValueDescriptor
- Overrides:
getByte
in classDataType
- Returns:
- The data value as a byte.
- Throws:
StandardException
- thrown on failure to convert
-
getShort
public short getShort() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a short. Throws an exception if the data value is not receivable as a short.- Specified by:
getShort
in interfaceDataValueDescriptor
- Overrides:
getShort
in classDataType
- Returns:
- The data value as a short.
- Throws:
StandardException
- thrown on failure to convert
-
getInt
public int getInt() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a int. Throws an exception if the data value is not receivable as a int.- Specified by:
getInt
in interfaceDataValueDescriptor
- Overrides:
getInt
in classDataType
- Returns:
- The data value as a int.
- Throws:
StandardException
- thrown on failure to convert
-
getLong
public long getLong() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a long. Throws an exception if the data value is not receivable as a long.- Specified by:
getLong
in interfaceDataValueDescriptor
- Overrides:
getLong
in classDataType
- Returns:
- The data value as a long.
- Throws:
StandardException
- thrown on failure to convert
-
getFloat
public float getFloat() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a float. Throws an exception if the data value is not receivable as a float.- Specified by:
getFloat
in interfaceDataValueDescriptor
- Overrides:
getFloat
in classDataType
- Returns:
- The data value as a float.
- Throws:
StandardException
- thrown on failure to convert
-
getDouble
public double getDouble() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a double. Throws an exception if the data value is not receivable as a double.- Specified by:
getDouble
in interfaceDataValueDescriptor
- Overrides:
getDouble
in classDataType
- Returns:
- The data value as a double.
- Throws:
StandardException
- thrown on failure to convert
-
getBytes
public byte[] getBytes() throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a byte[]. Throws an exception if the data value is not receivable as a Binary or Varbinary.- Specified by:
getBytes
in interfaceDataValueDescriptor
- Overrides:
getBytes
in classDataType
- Returns:
- The Binary value as a byte[].
- Throws:
StandardException
- thrown on failure to convert
-
getDate
public java.sql.Date getDate(java.util.Calendar cal) throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a java.sql.Date. Throws an exception if the data value is not receivable as a Date.- Specified by:
getDate
in interfaceDataValueDescriptor
- Overrides:
getDate
in classDataType
- Parameters:
cal
- calendar for object creation- Returns:
- The data value as a java.sql.Date.
- Throws:
StandardException
- thrown on failure
-
getTime
public java.sql.Time getTime(java.util.Calendar cal) throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a java.sql.Time. Throws an exception if the data value is not receivable as a Time.- Specified by:
getTime
in interfaceDataValueDescriptor
- Overrides:
getTime
in classDataType
- Parameters:
cal
- calendar for object creation- Returns:
- The data value as a java.sql.Time.
- Throws:
StandardException
- thrown on failure
-
getTimestamp
public java.sql.Timestamp getTimestamp(java.util.Calendar cal) throws StandardException
Description copied from class:DataType
Gets the value in the data value descriptor as a java.sql.Timestamp. Throws an exception if the data value is not receivable as a Timestamp.- Specified by:
getTimestamp
in interfaceDataValueDescriptor
- Overrides:
getTimestamp
in classDataType
- Parameters:
cal
- calendar for object creation- Returns:
- The data value as a java.sql.Timestamp.
- Throws:
StandardException
- thrown on failure
-
setObject
void setObject(java.lang.Object theValue)
Description copied from class:DataType
Set the value from an non-null object. Usually overridden. This implementation throws an exception. The object will have been correctly typed from the call to setObjectForCast.
-
getObject
public java.lang.Object getObject()
Description copied from class:DataType
Gets the value in the data value descriptor as a int. Throws an exception if the data value is not receivable as a int.- Specified by:
getObject
in interfaceDataValueDescriptor
- Overrides:
getObject
in classDataType
- Returns:
- The data value as a int.
-
getLength
public int getLength()
Description copied from interface:DataValueDescriptor
Gets the length of the data value. The meaning of this is implementation-dependent. For string types, it is the number of characters in the string. For numeric types, it is the number of bytes used to store the number. This is the actual length of this value, not the length of the type it was defined as. For example, a VARCHAR value may be shorter than the declared VARCHAR (maximum) length.- Specified by:
getLength
in interfaceDataValueDescriptor
- Returns:
- The length of the data value
-
getTypeName
public java.lang.String getTypeName()
Description copied from interface:DataValueDescriptor
Get the SQL name of the datatype- Specified by:
getTypeName
in interfaceDataValueDescriptor
- Returns:
- The SQL name of the datatype
-
getTypeName
java.lang.String getTypeName(java.lang.String className)
Get the type name of this value, overriding with the passed in class name (for user/java types).- Overrides:
getTypeName
in classDataType
-
getTypeFormatId
public int getTypeFormatId()
Return my format identifier.- Specified by:
getTypeFormatId
in interfaceTypedFormat
- Returns:
- The identifier. (A UUID stuffed in an array of 16 bytes).
- See Also:
TypedFormat.getTypeFormatId()
-
writeExternal
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException
- Specified by:
writeExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
- error writing data
-
readExternal
public void readExternal(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundException
- Specified by:
readExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
- Thrown on error reading the objectjava.lang.ClassNotFoundException
- Thrown if the class of the object is not found- See Also:
Externalizable.readExternal(java.io.ObjectInput)
-
cloneValue
public DataValueDescriptor cloneValue(boolean forceMaterialization)
Description copied from interface:DataValueDescriptor
Clone this DataValueDescriptor. Results in a new object that has the same value as this but can be modified independently.Even though the objects can be modified independently regardless of the value of
forceMaterialization
, both the clone and the original may be dependent on the store state ifforceMaterialization
is set tofalse
. An example is if you need to access the value you just read usingcloneValue
after the current transaction has ended, or after the source result set has been closed.- Specified by:
cloneValue
in interfaceDataValueDescriptor
- Parameters:
forceMaterialization
- any streams representing the data value will be materialized iftrue
, the data value will be kept as a stream if possible iffalse
- Returns:
- A clone of the
DataValueDescriptor
with the same initial value as this. - See Also:
DataValueDescriptor.cloneValue(boolean)
-
getNewNull
public DataValueDescriptor getNewNull()
Description copied from interface:DataValueDescriptor
Get a new null value of the same type as this data value.- Specified by:
getNewNull
in interfaceDataValueDescriptor
- See Also:
DataValueDescriptor.getNewNull()
-
restoreToNull
public void restoreToNull()
Description copied from interface:Storable
Restore this object to its (SQL)null value.- Specified by:
restoreToNull
in interfaceStorable
- See Also:
Storable.restoreToNull()
-
setValueFromResultSet
public void setValueFromResultSet(java.sql.ResultSet resultSet, int colNumber, boolean isNullable) throws java.sql.SQLException
Description copied from interface:DataValueDescriptor
Set the value based on the value for the specified DataValueDescriptor from the specified ResultSet.- Specified by:
setValueFromResultSet
in interfaceDataValueDescriptor
- Parameters:
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)- Throws:
java.sql.SQLException
- Thrown on error- See Also:
DataValueDescriptor.setValueFromResultSet(java.sql.ResultSet, int, boolean)
-
compare
public int compare(DataValueDescriptor other) throws StandardException
Orderable interface- Specified by:
compare
in interfaceDataValueDescriptor
- Parameters:
other
- 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 failure- See Also:
Orderable
-
compare
public 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
-
setValue
public void setValue(java.lang.Object value)
Description copied from class:DataType
Set the value of this DataValueDescriptor. At DataType level just throws an error lower classes will override- Specified by:
setValue
in interfaceDataValueDescriptor
- Specified by:
setValue
in interfaceUserDataValue
- Overrides:
setValue
in classDataType
- Parameters:
value
- The Object value to set this DataValueDescriptor to- See Also:
UserDataValue.setValue(java.lang.Object)
-
setFrom
protected void setFrom(DataValueDescriptor theValue) throws StandardException
Description copied from class:DataType
Set the value of this DataValueDescriptor based on the value of the specified DataValueDescriptor.- Overrides:
setFrom
in classDataType
- Parameters:
theValue
- The DataValueDescriptor that holds the value to which we want to set this DataValueDescriptor's value.- Throws:
StandardException
-
setBigDecimal
public void setBigDecimal(java.math.BigDecimal theValue)
Description copied from class:DataType
Only to be called when the application sets a value using BigDecimal- Specified by:
setBigDecimal
in interfaceDataValueDescriptor
- Overrides:
setBigDecimal
in classDataType
- Parameters:
theValue
- required to be a BigDecimal or null.- See Also:
UserDataValue.setValue(java.lang.Object)
-
setValue
public void setValue(java.lang.String theValue)
Description copied from class:DataType
Set the value of this DataValueDescriptor. At DataType level just throws an error lower classes will override- Specified by:
setValue
in interfaceDataValueDescriptor
- Overrides:
setValue
in classDataType
- Parameters:
theValue
- The BigDecimal value to set this DataValueDescriptor to
-
equals
public BooleanDataValue equals(DataValueDescriptor left, DataValueDescriptor right) throws StandardException
The = operator as called from the language module, as opposed to the storage module.- Specified by:
equals
in interfaceDataValueDescriptor
- Overrides:
equals
in classDataType
- Parameters:
left
- The value on the left side of the =right
- The value on the right side of the =- Returns:
- A SQL boolean value telling whether the two parameters are equal
- Throws:
StandardException
- Thrown on error
-
notEquals
public BooleanDataValue notEquals(DataValueDescriptor left, DataValueDescriptor right) throws StandardException
The <> operator as called from the language module, as opposed to the storage module.- Specified by:
notEquals
in interfaceDataValueDescriptor
- Overrides:
notEquals
in classDataType
- Parameters:
left
- The value on the left side of the operatorright
- The value on the right side of the operator- Returns:
- A SQL boolean value telling whether the two parameters are not equal
- Throws:
StandardException
- Thrown on error
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
typePrecedence
public int typePrecedence()
Description copied from class:DataType
Each built-in type in JSQL has a precedence. This precedence determines how to do type promotion when using binary operators. For example, float has a higher precedence than int, so when adding an int to a float, the result type is float. The precedence for some types is arbitrary. For example, it doesn't matter what the precedence of the boolean type is, since it can't be mixed with other types. But the precedence for the number types is critical. The SQL standard requires that exact numeric types be promoted to approximate numeric when one operator uses both. Also, the precedence is arranged so that one will not lose precision when promoting a type.- Specified by:
typePrecedence
in interfaceDataValueDescriptor
- Overrides:
typePrecedence
in classDataType
- Returns:
- The precedence of this type.
- See Also:
DataValueDescriptor.typePrecedence()
-
-