Package org.apache.druid.segment.column
Class TypeStrategies.ArrayTypeStrategy
- java.lang.Object
-
- org.apache.druid.segment.column.TypeStrategies.ArrayTypeStrategy
-
- All Implemented Interfaces:
Comparator<Object>
,TypeStrategy<Object[]>
- Enclosing class:
- TypeStrategies
public static final class TypeStrategies.ArrayTypeStrategy extends Object implements TypeStrategy<Object[]>
Read and write a non-null ARRAY which is permitted to have null elements (all elements are always read and written with aNullableTypeStrategy
wrapper on theTypeStrategy
of theTypeSignature.getElementType()
. Encodes the number of elements in the array as an integer prefix followed by the actual encoded value bytes of each element serially.
-
-
Constructor Summary
Constructors Constructor Description ArrayTypeStrategy(TypeSignature<?> type)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
compare(Object o1Obj, Object o2Obj)
int
estimateSizeBytes(Object[] value)
Estimate the size in bytes that writing this value to memory would require.Object[]
read(ByteBuffer buffer)
Read a non-null value from theByteBuffer
at the currentBuffer.position()
.boolean
readRetainsBufferReference()
Whether theTypeStrategy.read(java.nio.ByteBuffer)
methods return an object that may retain a reference to the providedByteBuffer
.int
write(ByteBuffer buffer, Object[] value, int maxSizeBytes)
Write a non-null value to theByteBuffer
at positionBuffer.position()
.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface java.util.Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Methods inherited from interface org.apache.druid.segment.column.TypeStrategy
fromBytes, read, write
-
-
-
-
Constructor Detail
-
ArrayTypeStrategy
public ArrayTypeStrategy(TypeSignature<?> type)
-
-
Method Detail
-
estimateSizeBytes
public int estimateSizeBytes(Object[] value)
Description copied from interface:TypeStrategy
Estimate the size in bytes that writing this value to memory would require. This method is not required to be exactly correct, but many implementations might be. Implementations should err on the side of over-estimating if exact sizing is not efficient. Example usage of this method is estimating heap memory usage for an aggregator or the amount of buffer which might need allocated to thenTypeStrategy.write(java.nio.ByteBuffer, T, int)
a value- Specified by:
estimateSizeBytes
in interfaceTypeStrategy<Object[]>
-
read
public Object[] read(ByteBuffer buffer)
Description copied from interface:TypeStrategy
Read a non-null value from theByteBuffer
at the currentBuffer.position()
. This will move the underlying position by the size of the value read. The value returned from this method may retain a reference to the providedByteBuffer
. If it does, thenTypeStrategy.readRetainsBufferReference()
returns true.- Specified by:
read
in interfaceTypeStrategy<Object[]>
-
readRetainsBufferReference
public boolean readRetainsBufferReference()
Description copied from interface:TypeStrategy
Whether theTypeStrategy.read(java.nio.ByteBuffer)
methods return an object that may retain a reference to the providedByteBuffer
. If a reference is sometimes retained, this method returns true. It returns false if, and only if, a reference is *never* retained.- Specified by:
readRetainsBufferReference
in interfaceTypeStrategy<Object[]>
-
write
public int write(ByteBuffer buffer, Object[] value, int maxSizeBytes)
Description copied from interface:TypeStrategy
Write a non-null value to theByteBuffer
at positionBuffer.position()
. This will move the underlying position by the size of the value written. This method returns the number of bytes written. If writing the value would take more than 'maxSizeBytes', this method will return a negative value indicating the number of additional bytes that would be required to fully write the value. Partial results may be written to the buffer when in this state, and the position may be left at whatever point the implementation ran out of space while writing the value. Callers should save the starting position if it is necessary to 'rewind' after a partial write. Callers MUST check that the return value is positive which indicates a successful write, while a negative response a partial write.- Specified by:
write
in interfaceTypeStrategy<Object[]>
- Returns:
- number of bytes written
-
-