Package org.h2.mvstore.type
Class ObjectDataType
- java.lang.Object
-
- org.h2.mvstore.type.BasicDataType<java.lang.Object>
-
- org.h2.mvstore.type.ObjectDataType
-
- All Implemented Interfaces:
java.util.Comparator<java.lang.Object>,DataType<java.lang.Object>
public class ObjectDataType extends BasicDataType<java.lang.Object>
A data type implementation for the most common data types, including serializable objects.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classObjectDataType.AutoDetectDataType<T>The base class for auto-detect data types.(package private) static classObjectDataType.BigDecimalTypeThe type for BigDecimal objects.(package private) static classObjectDataType.BigIntegerTypeThe type for BigInteger objects.(package private) static classObjectDataType.BooleanTypeThe type for boolean true and false.(package private) static classObjectDataType.ByteTypeThe type for byte objects.(package private) static classObjectDataType.CharacterTypeThe type for character objects.(package private) static classObjectDataType.DateTypeThe type for java.util.Date objects.(package private) static classObjectDataType.DoubleTypeThe type for double objects.(package private) static classObjectDataType.FloatTypeThe type for float objects.private static classObjectDataType.Holder(package private) static classObjectDataType.IntegerTypeThe type for integer objects.(package private) static classObjectDataType.LongTypeThe type for long objects.(package private) static classObjectDataType.NullTypeThe type for the null value(package private) static classObjectDataType.ObjectArrayTypeThe type for object arrays.(package private) static classObjectDataType.SerializedObjectTypeThe type for serialized objects.(package private) static classObjectDataType.ShortTypeThe type for short objects.(package private) static classObjectDataType.StringTypeThe type for string objects.(package private) static classObjectDataType.UUIDTypeThe type for UUID objects.
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.lang.Class<?>[]COMMON_CLASSES(package private) static longDOUBLE_ONE_BITS(package private) static longDOUBLE_ZERO_BITS(package private) static intFLOAT_ONE_BITS(package private) static intFLOAT_ZERO_BITSConstants for floating point synchronization.private ObjectDataType.AutoDetectDataType<java.lang.Object>last(package private) static intTAG_BIG_DECIMAL_0(package private) static intTAG_BIG_DECIMAL_1(package private) static intTAG_BIG_DECIMAL_SMALL(package private) static intTAG_BIG_DECIMAL_SMALL_SCALED(package private) static intTAG_BIG_INTEGER_0(package private) static intTAG_BIG_INTEGER_1(package private) static intTAG_BIG_INTEGER_SMALL(package private) static intTAG_BOOLEAN_TRUEFor very common values (e.g.(package private) static intTAG_BYTE_ARRAY_0_15(package private) static intTAG_DOUBLE_0(package private) static intTAG_DOUBLE_1(package private) static intTAG_DOUBLE_FIXED(package private) static intTAG_FLOAT_0(package private) static intTAG_FLOAT_1(package private) static intTAG_FLOAT_FIXED(package private) static intTAG_INTEGER_0_15For small-values/small-arrays, we encode the value/array-length in the tag.(package private) static intTAG_INTEGER_FIXED(package private) static intTAG_INTEGER_NEGATIVE(package private) static intTAG_LONG_0_7(package private) static intTAG_LONG_FIXED(package private) static intTAG_LONG_NEGATIVE(package private) static intTAG_STRING_0_15(package private) static intTYPE_ARRAY(package private) static intTYPE_BIG_DECIMAL(package private) static intTYPE_BIG_INTEGER(package private) static intTYPE_BOOLEAN(package private) static intTYPE_BYTE(package private) static intTYPE_CHAR(package private) static intTYPE_DATE(package private) static intTYPE_DOUBLE(package private) static intTYPE_FLOAT(package private) static intTYPE_INT(package private) static intTYPE_LONG(package private) static intTYPE_NULLThe type constants are also used as tag values.(package private) static intTYPE_SERIALIZED_OBJECT(package private) static intTYPE_SHORT(package private) static intTYPE_STRING(package private) static intTYPE_UUID
-
Constructor Summary
Constructors Constructor Description ObjectDataType()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intcompare(java.lang.Object a, java.lang.Object b)Compare two keys.static intcompareNotNull(byte[] data1, byte[] data2)Compare the contents of two byte arrays.java.lang.Object[]createStorage(int size)Create storage object of array type to hold valuesstatic java.lang.Objectdeserialize(byte[] data)De-serialize the byte array to an object.intgetMemory(java.lang.Object obj)Calculates the amount of used memory in bytes.private static intgetTypeId(java.lang.Object obj)(package private) static booleanisArray(java.lang.Object obj)Check whether this object is an array.(package private) static booleanisBigDecimal(java.lang.Object obj)Check whether this object is a BigDecimal.(package private) static booleanisBigInteger(java.lang.Object obj)Check whether this object is a BigInteger.(package private) static booleanisDate(java.lang.Object obj)Check whether this object is a date.private ObjectDataType.AutoDetectDataType<java.lang.Object>newType(int typeId)java.lang.Objectread(java.nio.ByteBuffer buff)Read an object.private ObjectDataType.AutoDetectDataTypeselectDataType(int typeId)static byte[]serialize(java.lang.Object obj)Serialize the object to a byte array.(package private) ObjectDataType.AutoDetectDataType<java.lang.Object>switchType(java.lang.Object obj)Switch the last remembered type to match the type of the given object.voidwrite(WriteBuffer buff, java.lang.Object obj)Write an object.-
Methods inherited from class org.h2.mvstore.type.BasicDataType
binarySearch, cast, equals, hashCode, isMemoryEstimationAllowed, read, write
-
-
-
-
Field Detail
-
TYPE_NULL
static final int TYPE_NULL
The type constants are also used as tag values.- See Also:
- Constant Field Values
-
TYPE_BOOLEAN
static final int TYPE_BOOLEAN
- See Also:
- Constant Field Values
-
TYPE_BYTE
static final int TYPE_BYTE
- See Also:
- Constant Field Values
-
TYPE_SHORT
static final int TYPE_SHORT
- See Also:
- Constant Field Values
-
TYPE_INT
static final int TYPE_INT
- See Also:
- Constant Field Values
-
TYPE_LONG
static final int TYPE_LONG
- See Also:
- Constant Field Values
-
TYPE_BIG_INTEGER
static final int TYPE_BIG_INTEGER
- See Also:
- Constant Field Values
-
TYPE_FLOAT
static final int TYPE_FLOAT
- See Also:
- Constant Field Values
-
TYPE_DOUBLE
static final int TYPE_DOUBLE
- See Also:
- Constant Field Values
-
TYPE_BIG_DECIMAL
static final int TYPE_BIG_DECIMAL
- See Also:
- Constant Field Values
-
TYPE_CHAR
static final int TYPE_CHAR
- See Also:
- Constant Field Values
-
TYPE_STRING
static final int TYPE_STRING
- See Also:
- Constant Field Values
-
TYPE_UUID
static final int TYPE_UUID
- See Also:
- Constant Field Values
-
TYPE_DATE
static final int TYPE_DATE
- See Also:
- Constant Field Values
-
TYPE_ARRAY
static final int TYPE_ARRAY
- See Also:
- Constant Field Values
-
TYPE_SERIALIZED_OBJECT
static final int TYPE_SERIALIZED_OBJECT
- See Also:
- Constant Field Values
-
TAG_BOOLEAN_TRUE
static final int TAG_BOOLEAN_TRUE
For very common values (e.g. 0 and 1) we save space by encoding the value in the tag. e.g. TAG_BOOLEAN_TRUE and TAG_FLOAT_0.- See Also:
- Constant Field Values
-
TAG_INTEGER_NEGATIVE
static final int TAG_INTEGER_NEGATIVE
- See Also:
- Constant Field Values
-
TAG_INTEGER_FIXED
static final int TAG_INTEGER_FIXED
- See Also:
- Constant Field Values
-
TAG_LONG_NEGATIVE
static final int TAG_LONG_NEGATIVE
- See Also:
- Constant Field Values
-
TAG_LONG_FIXED
static final int TAG_LONG_FIXED
- See Also:
- Constant Field Values
-
TAG_BIG_INTEGER_0
static final int TAG_BIG_INTEGER_0
- See Also:
- Constant Field Values
-
TAG_BIG_INTEGER_1
static final int TAG_BIG_INTEGER_1
- See Also:
- Constant Field Values
-
TAG_BIG_INTEGER_SMALL
static final int TAG_BIG_INTEGER_SMALL
- See Also:
- Constant Field Values
-
TAG_FLOAT_0
static final int TAG_FLOAT_0
- See Also:
- Constant Field Values
-
TAG_FLOAT_1
static final int TAG_FLOAT_1
- See Also:
- Constant Field Values
-
TAG_FLOAT_FIXED
static final int TAG_FLOAT_FIXED
- See Also:
- Constant Field Values
-
TAG_DOUBLE_0
static final int TAG_DOUBLE_0
- See Also:
- Constant Field Values
-
TAG_DOUBLE_1
static final int TAG_DOUBLE_1
- See Also:
- Constant Field Values
-
TAG_DOUBLE_FIXED
static final int TAG_DOUBLE_FIXED
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_0
static final int TAG_BIG_DECIMAL_0
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_1
static final int TAG_BIG_DECIMAL_1
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_SMALL
static final int TAG_BIG_DECIMAL_SMALL
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_SMALL_SCALED
static final int TAG_BIG_DECIMAL_SMALL_SCALED
- See Also:
- Constant Field Values
-
TAG_INTEGER_0_15
static final int TAG_INTEGER_0_15
For small-values/small-arrays, we encode the value/array-length in the tag.- See Also:
- Constant Field Values
-
TAG_LONG_0_7
static final int TAG_LONG_0_7
- See Also:
- Constant Field Values
-
TAG_STRING_0_15
static final int TAG_STRING_0_15
- See Also:
- Constant Field Values
-
TAG_BYTE_ARRAY_0_15
static final int TAG_BYTE_ARRAY_0_15
- See Also:
- Constant Field Values
-
FLOAT_ZERO_BITS
static final int FLOAT_ZERO_BITS
Constants for floating point synchronization.
-
FLOAT_ONE_BITS
static final int FLOAT_ONE_BITS
-
DOUBLE_ZERO_BITS
static final long DOUBLE_ZERO_BITS
-
DOUBLE_ONE_BITS
static final long DOUBLE_ONE_BITS
-
COMMON_CLASSES
static final java.lang.Class<?>[] COMMON_CLASSES
-
last
private ObjectDataType.AutoDetectDataType<java.lang.Object> last
-
-
Method Detail
-
createStorage
public java.lang.Object[] createStorage(int size)
Description copied from interface:DataTypeCreate storage object of array type to hold values- Parameters:
size- number of values to hold- Returns:
- storage object
-
compare
public int compare(java.lang.Object a, java.lang.Object b)Description copied from interface:DataTypeCompare two keys.- Specified by:
comparein interfacejava.util.Comparator<java.lang.Object>- Specified by:
comparein interfaceDataType<java.lang.Object>- Overrides:
comparein classBasicDataType<java.lang.Object>- Parameters:
a- the first keyb- the second key- Returns:
- -1 if the first key is smaller, 1 if larger, and 0 if equal
-
getMemory
public int getMemory(java.lang.Object obj)
Description copied from interface:DataTypeCalculates the amount of used memory in bytes.- Specified by:
getMemoryin interfaceDataType<java.lang.Object>- Specified by:
getMemoryin classBasicDataType<java.lang.Object>- Parameters:
obj- the object- Returns:
- the used memory
-
write
public void write(WriteBuffer buff, java.lang.Object obj)
Description copied from interface:DataTypeWrite an object.- Specified by:
writein interfaceDataType<java.lang.Object>- Specified by:
writein classBasicDataType<java.lang.Object>- Parameters:
buff- the target bufferobj- the value
-
newType
private ObjectDataType.AutoDetectDataType<java.lang.Object> newType(int typeId)
-
selectDataType
private ObjectDataType.AutoDetectDataType selectDataType(int typeId)
-
read
public java.lang.Object read(java.nio.ByteBuffer buff)
Description copied from interface:DataTypeRead an object.- Specified by:
readin interfaceDataType<java.lang.Object>- Specified by:
readin classBasicDataType<java.lang.Object>- Parameters:
buff- the source buffer- Returns:
- the object
-
getTypeId
private static int getTypeId(java.lang.Object obj)
-
switchType
ObjectDataType.AutoDetectDataType<java.lang.Object> switchType(java.lang.Object obj)
Switch the last remembered type to match the type of the given object.- Parameters:
obj- the object- Returns:
- the auto-detected type used
-
isBigInteger
static boolean isBigInteger(java.lang.Object obj)
Check whether this object is a BigInteger.- Parameters:
obj- the object- Returns:
- true if yes
-
isBigDecimal
static boolean isBigDecimal(java.lang.Object obj)
Check whether this object is a BigDecimal.- Parameters:
obj- the object- Returns:
- true if yes
-
isDate
static boolean isDate(java.lang.Object obj)
Check whether this object is a date.- Parameters:
obj- the object- Returns:
- true if yes
-
isArray
static boolean isArray(java.lang.Object obj)
Check whether this object is an array.- Parameters:
obj- the object- Returns:
- true if yes
-
serialize
public static byte[] serialize(java.lang.Object obj)
Serialize the object to a byte array.- Parameters:
obj- the object to serialize- Returns:
- the byte array
-
deserialize
public static java.lang.Object deserialize(byte[] data)
De-serialize the byte array to an object.- Parameters:
data- the byte array- Returns:
- the object
-
compareNotNull
public static int compareNotNull(byte[] data1, byte[] data2)Compare the contents of two byte arrays. If the content or length of the first array is smaller than the second array, -1 is returned. If the content or length of the second array is smaller than the first array, 1 is returned. If the contents and lengths are the same, 0 is returned.This method interprets bytes as unsigned.
- Parameters:
data1- the first byte array (must not be null)data2- the second byte array (must not be null)- Returns:
- the result of the comparison (-1, 1 or 0)
-
-