Class ArrayBlock
java.lang.Object
io.trino.spi.block.ArrayBlock
- All Implemented Interfaces:
Block
,ValueBlock
-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescription<T> T
apply
(ArrayBlock.ArrayBlockFunction<T> function, int position) copyPositions
(int[] positions, int offset, int length) Returns a block containing the specified positions.copyRegion
(int position, int length) Returns a block starting at the specified position and extends for the specified length.Returns a block that contains a copy of the contents of the current block, and an appended null at the end.Returns the number of bytes (in terms ofBlock.getSizeInBytes()
) required per position that this block contains, assuming that the number of bytes required is a known static quantity and not dependent on any particular specific position.static ArrayBlock
fromElementBlock
(int positionCount, Optional<boolean[]> valueIsNullOptional, int[] arrayOffset, Block values) Create an array block directly from columnar nulls, values, and offsets into the values.getArray
(int position) Get the encoding for this block.long
getEstimatedDataSizeForStats
(int position) Returns the estimated in memory data size for stats of position.Returns a fully loaded block that assures all data is in memory.getNulls()
Returns a ByteArrayBlock specifying whether the current positions in the Block contain a NULL.int
Returns the number of positions in this block.long
getPositionsSizeInBytes
(boolean[] positions, int selectedArrayPositions) Returns the size of all positions marked true in the positions array.getRegion
(int position, int length) Returns a block starting at the specified position and extends for the specified length.long
getRegionSizeInBytes
(int position, int length) Returns the size ofblock.getRegion(position, length)
.long
Returns the retained size of this block in memory, including over-allocations.getSingleValueBlock
(int position) Gets the value at the specified position as a single element block.long
Returns the size of this block as if it was compacted, ignoring any over-allocations and any unloaded nested blocks.Returns the underlying value block underlying this block.boolean
isLoaded()
Returns true if block data is fully loaded into memory.boolean
isNull
(int position) Is the specified position null?boolean
Is it possible the block may have a null value?void
retainedBytesForEachPart
(ObjLongConsumer<Object> consumer) consumer
visits each of the internal data container and accepts the size for it.toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface io.trino.spi.block.Block
getPositions
Methods inherited from interface io.trino.spi.block.ValueBlock
getUnderlyingValuePosition
-
Method Details
-
fromElementBlock
public static ArrayBlock fromElementBlock(int positionCount, Optional<boolean[]> valueIsNullOptional, int[] arrayOffset, Block values) Create an array block directly from columnar nulls, values, and offsets into the values. A null array must have no entries. -
getPositionCount
public int getPositionCount()Description copied from interface:Block
Returns the number of positions in this block.- Specified by:
getPositionCount
in interfaceBlock
-
getSizeInBytes
public long getSizeInBytes()Description copied from interface:Block
Returns the size of this block as if it was compacted, ignoring any over-allocations and any unloaded nested blocks. For example, in dictionary blocks, this only counts each dictionary entry once, rather than each time a value is referenced.- Specified by:
getSizeInBytes
in interfaceBlock
-
getRetainedSizeInBytes
public long getRetainedSizeInBytes()Description copied from interface:Block
Returns the retained size of this block in memory, including over-allocations. This method is called from the inner most execution loop and must be fast.- Specified by:
getRetainedSizeInBytes
in interfaceBlock
-
retainedBytesForEachPart
Description copied from interface:Block
consumer
visits each of the internal data container and accepts the size for it. This method can be helpful in cases such as memory counting for internal data structure. Also, the method should be non-recursive, only visit the elements at the top level, and specifically should not call retainedBytesForEachPart on nested blocksconsumer
should be called at least once with the current block and must include the instance size of the current block- Specified by:
retainedBytesForEachPart
in interfaceBlock
-
getElementsBlock
-
getEncodingName
Description copied from interface:Block
Get the encoding for this block.- Specified by:
getEncodingName
in interfaceBlock
-
mayHaveNull
public boolean mayHaveNull()Description copied from interface:Block
Is it possible the block may have a null value? If false, the block cannot contain a null, but if true, the block may or may not have a null.- Specified by:
mayHaveNull
in interfaceBlock
-
toString
-
isLoaded
-
getLoadedBlock
Description copied from interface:Block
Returns a fully loaded block that assures all data is in memory. Neither the returned block nor any nested block will be aLazyBlock
. The same block will be returned if neither the current block nor any nested blocks areLazyBlock
,This allows streaming data sources to skip sections that are not accessed in a query.
- Specified by:
getLoadedBlock
in interfaceBlock
-
copyWithAppendedNull
Description copied from interface:Block
Returns a block that contains a copy of the contents of the current block, and an appended null at the end. The original block will not be modified. The purpose of this method is to leverage the contents of a block and the structure of the implementation to efficiently produce a copy of the block with a NULL element inserted - so that it can be used as a dictionary. This method is expected to be invoked on completely builtBlock
instances i.e. not on in-progress block builders.- Specified by:
copyWithAppendedNull
in interfaceBlock
- Specified by:
copyWithAppendedNull
in interfaceValueBlock
-
copyPositions
Description copied from interface:Block
Returns a block containing the specified positions. Positions to copy are stored in a subarray withinpositions
array that starts atoffset
and has length oflength
. All specified positions must be valid for this block.The returned block must be a compact representation of the original block.
- Specified by:
copyPositions
in interfaceBlock
- Specified by:
copyPositions
in interfaceValueBlock
-
getRegion
Description copied from interface:Block
Returns a block starting at the specified position and extends for the specified length. The specified region must be entirely contained within this block.The region can be a view over this block. If this block is released the region block may also be released. If the region block is released this block may also be released.
- Specified by:
getRegion
in interfaceBlock
- Specified by:
getRegion
in interfaceValueBlock
-
fixedSizeInBytesPerPosition
Description copied from interface:Block
Returns the number of bytes (in terms ofBlock.getSizeInBytes()
) required per position that this block contains, assuming that the number of bytes required is a known static quantity and not dependent on any particular specific position. This allows for some complex block wrappings to potentially avoid having to callBlock.getPositionsSizeInBytes(boolean[], int)
which would require computing the specific positions selected- Specified by:
fixedSizeInBytesPerPosition
in interfaceBlock
- Returns:
- The size in bytes, per position, if this block type does not require specific position information to compute its size
-
getRegionSizeInBytes
public long getRegionSizeInBytes(int position, int length) Description copied from interface:Block
Returns the size ofblock.getRegion(position, length)
. The method can be expensive. Do not use it outside an implementation of Block.- Specified by:
getRegionSizeInBytes
in interfaceBlock
-
getPositionsSizeInBytes
public long getPositionsSizeInBytes(boolean[] positions, int selectedArrayPositions) Description copied from interface:Block
Returns the size of all positions marked true in the positions array. This is equivalent to multiple calls ofblock.getRegionSizeInBytes(position, length)
where you mark all positions for the regions first. The 'selectedPositionsCount' variable may be used to skip iterating through the positions array in case this is a fixed-width block- Specified by:
getPositionsSizeInBytes
in interfaceBlock
-
copyRegion
Description copied from interface:Block
Returns a block starting at the specified position and extends for the specified length. The specified region must be entirely contained within this block.The region returned must be a compact representation of the original block, unless their internal representation will be exactly the same. This method is useful for operators that hold on to a range of values without holding on to the entire block.
- Specified by:
copyRegion
in interfaceBlock
- Specified by:
copyRegion
in interfaceValueBlock
-
getArray
-
getSingleValueBlock
Description copied from interface:Block
Gets the value at the specified position as a single element block. The method must copy the data into a new block.This method is useful for operators that hold on to a single value without holding on to the entire block.
- Specified by:
getSingleValueBlock
in interfaceBlock
-
getEstimatedDataSizeForStats
public long getEstimatedDataSizeForStats(int position) Description copied from interface:Block
Returns the estimated in memory data size for stats of position. Do not use it for other purpose.- Specified by:
getEstimatedDataSizeForStats
in interfaceBlock
-
isNull
-
getUnderlyingValueBlock
Description copied from interface:Block
Returns the underlying value block underlying this block.- Specified by:
getUnderlyingValueBlock
in interfaceBlock
- Specified by:
getUnderlyingValueBlock
in interfaceValueBlock
-
getNulls
Description copied from interface:ValueBlock
Returns a ByteArrayBlock specifying whether the current positions in the Block contain a NULL. Returns Optional.empty() when there are no NULLs in the Block. The returned ByteArrayBlock must not contain NULL values.- Specified by:
getNulls
in interfaceValueBlock
-
apply
-