Class BinaryArrayData

java.lang.Object
org.apache.flink.table.data.binary.BinarySection
org.apache.flink.table.data.binary.BinaryArrayData
All Implemented Interfaces:
ArrayData, BinaryFormat, TypedSetters

@Internal public final class BinaryArrayData extends BinarySection implements ArrayData, TypedSetters
A binary implementation of ArrayData which is backed by MemorySegments.

For fields that hold fixed-length primitive types, such as long, double or int, they are stored compacted in bytes, just like the original java array.

The binary layout of BinaryArrayData:

 [size(int)] + [null bits(4-byte word boundaries)] + [values or offset&length] + [variable length part].
 
  • Constructor Details

    • BinaryArrayData

      public BinaryArrayData()
  • Method Details

    • calculateHeaderInBytes

      public static int calculateHeaderInBytes(int numFields)
    • calculateFixLengthPartSize

      public static int calculateFixLengthPartSize(LogicalType type)
      It store real value when type is primitive. It store the length and offset of variable-length part when type is string, map, etc.
    • size

      public int size()
      Description copied from interface: ArrayData
      Returns the number of elements in this array.
      Specified by:
      size in interface ArrayData
    • pointTo

      public void pointTo(org.apache.flink.core.memory.MemorySegment[] segments, int offset, int sizeInBytes)
      Overrides:
      pointTo in class BinarySection
    • isNullAt

      public boolean isNullAt(int pos)
      Description copied from interface: ArrayData
      Returns true if the element is null at the given position.
      Specified by:
      isNullAt in interface ArrayData
    • setNullAt

      public void setNullAt(int pos)
      Specified by:
      setNullAt in interface TypedSetters
    • setNotNullAt

      public void setNotNullAt(int pos)
    • getLong

      public long getLong(int pos)
      Description copied from interface: ArrayData
      Returns the long value at the given position.
      Specified by:
      getLong in interface ArrayData
    • setLong

      public void setLong(int pos, long value)
      Specified by:
      setLong in interface TypedSetters
    • setNullLong

      public void setNullLong(int pos)
    • getInt

      public int getInt(int pos)
      Description copied from interface: ArrayData
      Returns the integer value at the given position.
      Specified by:
      getInt in interface ArrayData
    • setInt

      public void setInt(int pos, int value)
      Specified by:
      setInt in interface TypedSetters
    • setNullInt

      public void setNullInt(int pos)
    • getString

      public StringData getString(int pos)
      Description copied from interface: ArrayData
      Returns the string value at the given position.
      Specified by:
      getString in interface ArrayData
    • getDecimal

      public DecimalData getDecimal(int pos, int precision, int scale)
      Description copied from interface: ArrayData
      Returns the decimal value at the given position.

      The precision and scale are required to determine whether the decimal value was stored in a compact representation (see DecimalData).

      Specified by:
      getDecimal in interface ArrayData
    • getTimestamp

      public TimestampData getTimestamp(int pos, int precision)
      Description copied from interface: ArrayData
      Returns the timestamp value at the given position.

      The precision is required to determine whether the timestamp value was stored in a compact representation (see TimestampData).

      Specified by:
      getTimestamp in interface ArrayData
    • getRawValue

      public <T> RawValueData<T> getRawValue(int pos)
      Description copied from interface: ArrayData
      Returns the raw value at the given position.
      Specified by:
      getRawValue in interface ArrayData
    • getBinary

      public byte[] getBinary(int pos)
      Description copied from interface: ArrayData
      Returns the binary value at the given position.
      Specified by:
      getBinary in interface ArrayData
    • getArray

      public ArrayData getArray(int pos)
      Description copied from interface: ArrayData
      Returns the array value at the given position.
      Specified by:
      getArray in interface ArrayData
    • getMap

      public MapData getMap(int pos)
      Description copied from interface: ArrayData
      Returns the map value at the given position.
      Specified by:
      getMap in interface ArrayData
    • getRow

      public RowData getRow(int pos, int numFields)
      Description copied from interface: ArrayData
      Returns the row value at the given position.

      The number of fields is required to correctly extract the row.

      Specified by:
      getRow in interface ArrayData
    • getBoolean

      public boolean getBoolean(int pos)
      Description copied from interface: ArrayData
      Returns the boolean value at the given position.
      Specified by:
      getBoolean in interface ArrayData
    • setBoolean

      public void setBoolean(int pos, boolean value)
      Specified by:
      setBoolean in interface TypedSetters
    • setNullBoolean

      public void setNullBoolean(int pos)
    • getByte

      public byte getByte(int pos)
      Description copied from interface: ArrayData
      Returns the byte value at the given position.
      Specified by:
      getByte in interface ArrayData
    • setByte

      public void setByte(int pos, byte value)
      Specified by:
      setByte in interface TypedSetters
    • setNullByte

      public void setNullByte(int pos)
    • getShort

      public short getShort(int pos)
      Description copied from interface: ArrayData
      Returns the short value at the given position.
      Specified by:
      getShort in interface ArrayData
    • setShort

      public void setShort(int pos, short value)
      Specified by:
      setShort in interface TypedSetters
    • setNullShort

      public void setNullShort(int pos)
    • getFloat

      public float getFloat(int pos)
      Description copied from interface: ArrayData
      Returns the float value at the given position.
      Specified by:
      getFloat in interface ArrayData
    • setFloat

      public void setFloat(int pos, float value)
      Specified by:
      setFloat in interface TypedSetters
    • setNullFloat

      public void setNullFloat(int pos)
    • getDouble

      public double getDouble(int pos)
      Description copied from interface: ArrayData
      Returns the double value at the given position.
      Specified by:
      getDouble in interface ArrayData
    • setDouble

      public void setDouble(int pos, double value)
      Specified by:
      setDouble in interface TypedSetters
    • setNullDouble

      public void setNullDouble(int pos)
    • setDecimal

      public void setDecimal(int pos, DecimalData value, int precision)
      Description copied from interface: TypedSetters
      Set the decimal column value.

      Note: Precision is compact: can call TypedSetters.setNullAt(int) when decimal is null. Precision is not compact: can not call TypedSetters.setNullAt(int) when decimal is null, must call setDecimal(pos, null, precision) because we need update var-length-part.

      Specified by:
      setDecimal in interface TypedSetters
    • setTimestamp

      public void setTimestamp(int pos, TimestampData value, int precision)
      Description copied from interface: TypedSetters
      Set Timestamp value.

      Note: If precision is compact: can call TypedSetters.setNullAt(int) when TimestampData value is null. Otherwise: can not call TypedSetters.setNullAt(int) when TimestampData value is null, must call setTimestamp(pos, null, precision) because we need to update var-length-part.

      Specified by:
      setTimestamp in interface TypedSetters
    • anyNull

      public boolean anyNull()
    • toBooleanArray

      public boolean[] toBooleanArray()
      Specified by:
      toBooleanArray in interface ArrayData
    • toByteArray

      public byte[] toByteArray()
      Specified by:
      toByteArray in interface ArrayData
    • toShortArray

      public short[] toShortArray()
      Specified by:
      toShortArray in interface ArrayData
    • toIntArray

      public int[] toIntArray()
      Specified by:
      toIntArray in interface ArrayData
    • toLongArray

      public long[] toLongArray()
      Specified by:
      toLongArray in interface ArrayData
    • toFloatArray

      public float[] toFloatArray()
      Specified by:
      toFloatArray in interface ArrayData
    • toDoubleArray

      public double[] toDoubleArray()
      Specified by:
      toDoubleArray in interface ArrayData
    • toObjectArray

      public <T> T[] toObjectArray(LogicalType elementType)
    • copy

      public BinaryArrayData copy()
    • copy

      public BinaryArrayData copy(BinaryArrayData reuse)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class BinarySection
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(boolean[] arr)
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(byte[] arr)
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(short[] arr)
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(int[] arr)
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(long[] arr)
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(float[] arr)
    • fromPrimitiveArray

      public static BinaryArrayData fromPrimitiveArray(double[] arr)