Class RunLengthEncodedBlock

java.lang.Object
io.trino.spi.block.RunLengthEncodedBlock
All Implemented Interfaces:
Block

public final class RunLengthEncodedBlock extends Object implements Block
  • Method Summary

    Modifier and Type
    Method
    Description
    copyPositions(int[] positions, int offset, int length)
    Returns a block containing the specified positions.
    copyRegion(int positionOffset, 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.
    static Block
    create(Block value, int positionCount)
     
    static Block
    create(Type type, Object value, int positionCount)
     
    Returns the number of bytes (in terms of Block.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.
    byte
    getByte(int position, int offset)
    Gets a byte at offset in the value at position.
    Gets the direct child blocks of this block.
    Get the encoding for this block.
    long
    Returns the estimated in memory data size for stats of position.
    int
    getInt(int position, int offset)
    Gets a little endian int at offset in the value at position.
    long
    Returns the size of the block contents, regardless of internal representation.
    long
    getLong(int position, int offset)
    Gets a little endian long at offset in the value at position.
    <T> T
    getObject(int position, Class<T> clazz)
    Gets an object in the value at position.
    int
    Position count will always be at least 2
    getPositions(int[] positions, int offset, int length)
    Create a new block from the current block by keeping the same elements only with respect to positions that starts at offset and has length of length.
    long
    getPositionsSizeInBytes(boolean[] positions, int selectedPositionCount)
    Returns the size of all positions marked true in the positions array.
    getRegion(int positionOffset, 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 of block.getRegion(position, length).
    long
    Returns the retained size of this block in memory, including over-allocations.
    short
    getShort(int position, int offset)
    Gets a little endian short at offset in the value at position.
    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.
    io.airlift.slice.Slice
    getSlice(int position, int offset, int length)
    Gets a slice at offset in the value at position.
    int
    getSliceLength(int position)
    Gets the length of the value at the position.
    Returns the underlying value block underlying this block.
    int
    Returns the position in the underlying value block corresponding to the specified position in this block.
     
    boolean
    isNull(int position)
    Is the specified position null?
    boolean
    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.
    void
    consumer visits each of the internal data container and accepts the size for it.
     

    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

    getLoadedBlock, isLoaded
  • Method Details

    • create

      public static Block create(Type type, Object value, int positionCount)
    • create

      public static Block create(Block value, int positionCount)
    • getChildren

      public List<Block> getChildren()
      Description copied from interface: Block
      Gets the direct child blocks of this block.
      Specified by:
      getChildren in interface Block
    • getValue

      public ValueBlock getValue()
    • getPositionCount

      public int getPositionCount()
      Position count will always be at least 2
      Specified by:
      getPositionCount in interface Block
    • fixedSizeInBytesPerPosition

      public OptionalInt fixedSizeInBytesPerPosition()
      Description copied from interface: Block
      Returns the number of bytes (in terms of Block.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 call Block.getPositionsSizeInBytes(boolean[], int) which would require computing the specific positions selected
      Specified by:
      fixedSizeInBytesPerPosition in interface Block
      Returns:
      The size in bytes, per position, if this block type does not require specific position information to compute its size
    • 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 interface Block
    • getLogicalSizeInBytes

      public long getLogicalSizeInBytes()
      Description copied from interface: Block
      Returns the size of the block contents, regardless of internal representation. The same logical data values should always have the same size, no matter what block type is used or how they are represented within a specific block.

      This can differ substantially from Block.getSizeInBytes() for certain block types. For RLE, it will be N times larger. For dictionary, it will be larger based on how many times dictionary entries are reused.

      Specified by:
      getLogicalSizeInBytes in interface Block
    • 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 interface Block
    • 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 interface Block
    • retainedBytesForEachPart

      public void retainedBytesForEachPart(ObjLongConsumer<Object> consumer)
      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 blocks consumer should be called at least once with the current block and must include the instance size of the current block
      Specified by:
      retainedBytesForEachPart in interface Block
    • getEncodingName

      public String getEncodingName()
      Description copied from interface: Block
      Get the encoding for this block.
      Specified by:
      getEncodingName in interface Block
    • getPositions

      public Block getPositions(int[] positions, int offset, int length)
      Description copied from interface: Block
      Create a new block from the current block by keeping the same elements only with respect to positions that starts at offset and has length of length. The implementation may return a view over the data in this block or may return a copy, and the implementation is allowed to retain the positions array for use in the view.
      Specified by:
      getPositions in interface Block
    • copyPositions

      public Block copyPositions(int[] positions, int offset, int length)
      Description copied from interface: Block
      Returns a block containing the specified positions. Positions to copy are stored in a subarray within positions array that starts at offset and has length of length. 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 interface Block
    • getRegion

      public Block getRegion(int positionOffset, int length)
      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 interface Block
    • getRegionSizeInBytes

      public long getRegionSizeInBytes(int position, int length)
      Description copied from interface: Block
      Returns the size of block.getRegion(position, length). The method can be expensive. Do not use it outside an implementation of Block.
      Specified by:
      getRegionSizeInBytes in interface Block
    • getPositionsSizeInBytes

      public long getPositionsSizeInBytes(@Nullable boolean[] positions, int selectedPositionCount)
      Description copied from interface: Block
      Returns the size of all positions marked true in the positions array. This is equivalent to multiple calls of block.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 interface Block
    • copyRegion

      public Block copyRegion(int positionOffset, int length)
      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 interface Block
    • getSliceLength

      public int getSliceLength(int position)
      Description copied from interface: Block
      Gets the length of the value at the position. This method must be implemented if @{code getSlice} is implemented.
      Specified by:
      getSliceLength in interface Block
    • getByte

      public byte getByte(int position, int offset)
      Description copied from interface: Block
      Gets a byte at offset in the value at position.
      Specified by:
      getByte in interface Block
    • getShort

      public short getShort(int position, int offset)
      Description copied from interface: Block
      Gets a little endian short at offset in the value at position.
      Specified by:
      getShort in interface Block
    • getInt

      public int getInt(int position, int offset)
      Description copied from interface: Block
      Gets a little endian int at offset in the value at position.
      Specified by:
      getInt in interface Block
    • getLong

      public long getLong(int position, int offset)
      Description copied from interface: Block
      Gets a little endian long at offset in the value at position.
      Specified by:
      getLong in interface Block
    • getSlice

      public io.airlift.slice.Slice getSlice(int position, int offset, int length)
      Description copied from interface: Block
      Gets a slice at offset in the value at position.
      Specified by:
      getSlice in interface Block
    • getObject

      public <T> T getObject(int position, Class<T> clazz)
      Description copied from interface: Block
      Gets an object in the value at position.
      Specified by:
      getObject in interface Block
    • getSingleValueBlock

      public ValueBlock getSingleValueBlock(int position)
      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 interface Block
    • 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 interface Block
    • isNull

      public boolean isNull(int position)
      Description copied from interface: Block
      Is the specified position null?
      Specified by:
      isNull in interface Block
    • copyWithAppendedNull

      public Block 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 built Block instances i.e. not on in-progress block builders.
      Specified by:
      copyWithAppendedNull in interface Block
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getUnderlyingValueBlock

      public ValueBlock getUnderlyingValueBlock()
      Description copied from interface: Block
      Returns the underlying value block underlying this block.
      Specified by:
      getUnderlyingValueBlock in interface Block
    • getUnderlyingValuePosition

      public int getUnderlyingValuePosition(int position)
      Description copied from interface: Block
      Returns the position in the underlying value block corresponding to the specified position in this block.
      Specified by:
      getUnderlyingValuePosition in interface Block