Class BaseVariableWidthViewVector

java.lang.Object
org.apache.arrow.vector.BaseValueVector
org.apache.arrow.vector.BaseVariableWidthViewVector
All Implemented Interfaces:
Closeable, AutoCloseable, Iterable<ValueVector>, DensityAwareVector, ElementAddressableVector, FieldVector, ValueVector, VariableWidthFieldVector, VariableWidthVector, VectorDefinitionSetter
Direct Known Subclasses:
ViewVarBinaryVector, ViewVarCharVector

public abstract class BaseVariableWidthViewVector extends BaseValueVector implements VariableWidthFieldVector
BaseVariableWidthViewVector is a base class providing functionality for strings/bytes types in view format.
  • Field Details

    • ELEMENT_SIZE

      public static final int ELEMENT_SIZE
      See Also:
    • INITIAL_VIEW_VALUE_ALLOCATION

      public static final int INITIAL_VIEW_VALUE_ALLOCATION
      See Also:
    • INLINE_SIZE

      public static final int INLINE_SIZE
      See Also:
    • LENGTH_WIDTH

      public static final int LENGTH_WIDTH
      See Also:
    • PREFIX_WIDTH

      public static final int PREFIX_WIDTH
      See Also:
    • BUF_INDEX_WIDTH

      public static final int BUF_INDEX_WIDTH
      See Also:
    • EMPTY_BYTE_ARRAY

      public static final byte[] EMPTY_BYTE_ARRAY
    • validityBuffer

      protected ArrowBuf validityBuffer
    • viewBuffer

      protected ArrowBuf viewBuffer
    • dataBuffers

      protected List<ArrowBuf> dataBuffers
    • initialDataBufferSize

      protected int initialDataBufferSize
    • valueCount

      protected int valueCount
    • lastSet

      protected int lastSet
    • field

      protected final Field field
  • Constructor Details

    • BaseVariableWidthViewVector

      public BaseVariableWidthViewVector(Field field, BufferAllocator allocator)
      Constructs a new instance.
      Parameters:
      field - The field materialized by this vector
      allocator - The allocator to use for creating/resizing buffers
  • Method Details

    • getName

      public String getName()
      Description copied from interface: ValueVector
      Gets the name of the vector.
      Specified by:
      getName in interface ValueVector
      Specified by:
      getName in class BaseValueVector
      Returns:
      the name of the vector.
    • getValidityBuffer

      public ArrowBuf getValidityBuffer()
      Get buffer that manages the validity (NULL or NON-NULL nature) of elements in the vector. Consider it as a buffer for internal bit vector data structure.
      Specified by:
      getValidityBuffer in interface ValueVector
      Returns:
      buffer
    • getDataBuffer

      public ArrowBuf getDataBuffer()
      Get the buffer that stores the data for elements in the vector.
      Specified by:
      getDataBuffer in interface ValueVector
      Returns:
      buffer
    • getDataBuffers

      public List<ArrowBuf> getDataBuffers()
      Get the buffers that store the data for views in the vector.
      Returns:
      list of ArrowBuf
    • getOffsetBuffer

      public ArrowBuf getOffsetBuffer()
      BaseVariableWidthViewVector doesn't support offset buffer.
      Specified by:
      getOffsetBuffer in interface ValueVector
      Returns:
      throws UnsupportedOperationException
    • getOffsetBufferAddress

      public long getOffsetBufferAddress()
      BaseVariableWidthViewVector doesn't support offset buffer.
      Specified by:
      getOffsetBufferAddress in interface FieldVector
      Returns:
      throws UnsupportedOperationException
    • getValidityBufferAddress

      public long getValidityBufferAddress()
      Get the memory address of buffer that manages the validity (NULL or NON-NULL nature) of elements in the vector.
      Specified by:
      getValidityBufferAddress in interface FieldVector
      Returns:
      starting address of the buffer
    • getDataBufferAddress

      public long getDataBufferAddress()
      Get the memory address of buffer that stores the data for elements in the vector.
      Specified by:
      getDataBufferAddress in interface FieldVector
      Returns:
      starting address of the buffer
    • setInitialCapacity

      public void setInitialCapacity(int valueCount)
      Sets the desired value capacity for the vector. This function doesn't allocate any memory for the vector.
      Specified by:
      setInitialCapacity in interface ValueVector
      Parameters:
      valueCount - desired number of elements in the vector
    • setInitialCapacity

      public void setInitialCapacity(int valueCount, double density)
      Sets the desired value capacity for the vector. This function doesn't allocate any memory for the vector.
      Specified by:
      setInitialCapacity in interface DensityAwareVector
      Parameters:
      valueCount - desired number of elements in the vector
      density - average number of bytes per variable width view element
    • getDensity

      public double getDensity()
      Get the density of this ListVector.
      Returns:
      density
    • getValueCapacity

      public int getValueCapacity()
      Get the current capacity which does not exceed either validity buffer or value buffer. Note: Here the `getValueCapacity` has a relationship with the value buffer.
      Specified by:
      getValueCapacity in interface ValueVector
      Returns:
      number of elements that vector can hold.
    • zeroVector

      public void zeroVector()
      zero out the vector and the data in associated buffers.
    • reset

      public void reset()
      Reset the vector to initial state. Note that this method doesn't release any memory.
      Specified by:
      reset in interface ValueVector
    • close

      public void close()
      Close the vector and release the associated buffers.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface ValueVector
      Overrides:
      close in class BaseValueVector
    • clear

      public void clear()
      Same as close().
      Specified by:
      clear in interface ValueVector
      Overrides:
      clear in class BaseValueVector
    • clearDataBuffers

      public void clearDataBuffers()
      Release the data buffers and clear the list.
    • getFieldInnerVectors

      @Deprecated public List<BufferBacked> getFieldInnerVectors()
      Deprecated.
      This API will be removed as the current implementations no longer support inner vectors.
      Get the inner vectors.
      Specified by:
      getFieldInnerVectors in interface FieldVector
      Returns:
      the inner vectors for this field as defined by the TypeLayout
    • initializeChildrenFromFields

      public void initializeChildrenFromFields(List<Field> children)
      Initialize the children in schema for this Field. This operation is a NO-OP for scalar types since they don't have any children.
      Specified by:
      initializeChildrenFromFields in interface FieldVector
      Parameters:
      children - the schema
      Throws:
      IllegalArgumentException - if children is a non-empty list for scalar types.
    • getChildrenFromFields

      public List<FieldVector> getChildrenFromFields()
      Get the inner child vectors.
      Specified by:
      getChildrenFromFields in interface FieldVector
      Returns:
      list of child vectors for complex types, empty list for scalar vector types
    • loadFieldBuffers

      public void loadFieldBuffers(ArrowFieldNode fieldNode, List<ArrowBuf> ownBuffers)
      Load the buffers of this vector with provided source buffers. The caller manages the source buffers and populates them before invoking this method.
      Specified by:
      loadFieldBuffers in interface FieldVector
      Parameters:
      fieldNode - the fieldNode indicating the value count
      ownBuffers - the buffers for this Field (own buffers only, children not included)
    • getFieldBuffers

      public List<ArrowBuf> getFieldBuffers()
      Get the buffers belonging to this vector.
      Specified by:
      getFieldBuffers in interface FieldVector
      Returns:
      the inner buffers.
    • allocateNew

      public void allocateNew()
      Specified by:
      allocateNew in interface ValueVector
    • allocateNewSafe

      public boolean allocateNewSafe()
      Allocate memory for the vector. We internally use a default value count of 4096 to allocate memory for at least these many elements in the vector. See allocateNew(long, int) for allocating memory for specific number of elements in the vector.
      Specified by:
      allocateNewSafe in interface ValueVector
      Returns:
      false if memory allocation fails, true otherwise.
    • allocateNew

      public void allocateNew(long totalBytes, int valueCount)
      Allocate memory for the vector to support storing at least the provided number of elements in the vector. This method must be called prior to using the ValueVector.
      Specified by:
      allocateNew in interface VariableWidthVector
      Parameters:
      totalBytes - desired total memory capacity
      valueCount - the desired number of elements in the vector
      Throws:
      OutOfMemoryException - if memory allocation fails
    • allocateNew

      public void allocateNew(int valueCount)
      Description copied from interface: VariableWidthVector
      Allocate a new memory space for this vector. Must be called prior to using the ValueVector. The initial size in bytes is either default (or) reused from previous allocation
      Specified by:
      allocateNew in interface VariableWidthVector
      Parameters:
      valueCount - Number of values in the vector.
    • reAlloc

      public void reAlloc()
      Resize the vector to increase the capacity. The internal behavior is to double the current value capacity.
      Specified by:
      reAlloc in interface ValueVector
    • reallocViewBuffer

      public void reallocViewBuffer()
      Reallocate the view buffer. View Buffer stores the views for VIEWVARCHAR or VIEWVARBINARY elements in the vector. The behavior is to double the size of buffer.
      Throws:
      OversizedAllocationException - if the desired new size is more than max allowed
      OutOfMemoryException - if the internal memory allocation fails
    • reallocViewDataBuffer

      public void reallocViewDataBuffer()
      Reallocate the data buffer associated with view buffer.
    • reallocViewBuffer

      public void reallocViewBuffer(long desiredAllocSize)
      Reallocate the view buffer to given size. View Buffer stores the views for VIEWVARCHAR or VIEWVARBINARY elements in the vector. The actual allocated size may be larger than the request one because it will round up the provided value to the nearest power of two.
      Parameters:
      desiredAllocSize - the desired new allocation size
      Throws:
      OversizedAllocationException - if the desired new size is more than max allowed
      OutOfMemoryException - if the internal memory allocation fails
    • reallocViewDataBuffer

      public void reallocViewDataBuffer(long desiredAllocSize)
      Reallocate the data buffer for views.
      Parameters:
      desiredAllocSize - allocation size in bytes
    • reallocValidityBuffer

      public void reallocValidityBuffer()
      Reallocate Validity buffer.
    • getByteCapacity

      public int getByteCapacity()
      Get the size (number of bytes) of underlying view buffer.
      Specified by:
      getByteCapacity in interface VariableWidthVector
      Returns:
      number of bytes in the view buffer
    • sizeOfValueBuffer

      public int sizeOfValueBuffer()
      Description copied from interface: VariableWidthVector
      Provide the number of bytes contained in the valueBuffer.
      Specified by:
      sizeOfValueBuffer in interface VariableWidthVector
      Returns:
      the number of bytes in valueBuffer.
    • sizeOfViewBufferElements

      public int sizeOfViewBufferElements()
      Get the size (number of bytes) of underlying elements in the view buffer.
      Returns:
      number of bytes used by data in the view buffer
    • getBufferSize

      public int getBufferSize()
      Get the size (number of bytes) of underlying buffers used by this vector.
      Specified by:
      getBufferSize in interface ValueVector
      Returns:
      size of underlying buffers.
    • getBufferSizeFor

      public int getBufferSizeFor(int valueCount)
      Get the potential buffer size for a particular number of records.
      Specified by:
      getBufferSizeFor in interface ValueVector
      Parameters:
      valueCount - desired number of elements in the vector
      Returns:
      estimated size of underlying buffers if the vector holds a given number of elements
    • getField

      public Field getField()
      Get information about how this field is materialized.
      Specified by:
      getField in interface ValueVector
      Returns:
      the field corresponding to this vector
    • getBuffers

      public ArrowBuf[] getBuffers(boolean clear)
      Return the underlying buffers associated with this vector. Note that this doesn't impact the reference counts for this buffer, so it only should be used for in-context access. Also note that this buffer changes regularly, thus external classes shouldn't hold a reference to it (unless they change it).
      Specified by:
      getBuffers in interface ValueVector
      Parameters:
      clear - Whether to clear vector before returning, the buffers will still be refcounted but the returned array will be the only reference to them
      Returns:
      The underlying buffers that is used by this vector instance.
    • validateScalars

      public void validateScalars()
      Validate the scalar values held by this vector.
    • getTransferPair

      public TransferPair getTransferPair(Field field, BufferAllocator allocator, CallBack callBack)
      Construct a transfer pair of this vector and another vector of the same type.
      Specified by:
      getTransferPair in interface ValueVector
      Parameters:
      field - The field materialized by this vector.
      allocator - allocator for the target vector
      callBack - not used
      Returns:
      TransferPair
    • getTransferPair

      public TransferPair getTransferPair(String ref, BufferAllocator allocator, CallBack callBack)
      Construct a transfer pair of this vector and another vector of the same type.
      Specified by:
      getTransferPair in interface ValueVector
      Parameters:
      ref - name of the target vector
      allocator - allocator for the target vector
      callBack - not used
      Returns:
      TransferPair
    • getTransferPair

      public TransferPair getTransferPair(BufferAllocator allocator)
      Construct a transfer pair of this vector and another vector of the same type.
      Specified by:
      getTransferPair in interface ValueVector
      Overrides:
      getTransferPair in class BaseValueVector
      Parameters:
      allocator - allocator for the target vector
      Returns:
      TransferPair
    • getTransferPair

      public abstract TransferPair getTransferPair(String ref, BufferAllocator allocator)
      Construct a transfer pair of this vector and another vector of the same type.
      Specified by:
      getTransferPair in interface ValueVector
      Parameters:
      ref - name of the target vector
      allocator - allocator for the target vector
      Returns:
      TransferPair
    • getTransferPair

      public abstract TransferPair getTransferPair(Field field, BufferAllocator allocator)
      Construct a transfer pair of this vector and another vector of the same type.
      Specified by:
      getTransferPair in interface ValueVector
      Parameters:
      field - The field materialized by this vector.
      allocator - allocator for the target vector
      Returns:
      TransferPair
    • transferTo

      public void transferTo(BaseVariableWidthViewVector target)
      Transfer this vector's data to another vector. The memory associated with this vector is transferred to the allocator of target vector for accounting and management purposes.
      Parameters:
      target - destination vector for transfer
    • splitAndTransferTo

      public void splitAndTransferTo(int startIndex, int length, BaseVariableWidthViewVector target)
      Slice this vector at desired index and length and transfer the corresponding data to the target vector.
      Parameters:
      startIndex - start position of the split in source vector.
      length - length of the split.
      target - destination vector
    • getNullCount

      public int getNullCount()
      Get the number of elements that are null in the vector.
      Specified by:
      getNullCount in interface ValueVector
      Returns:
      the number of null elements.
    • isSafe

      public boolean isSafe(int index)
      Check if the given index is within the current value capacity of the vector.
      Parameters:
      index - position to check
      Returns:
      true if the index is within the current value capacity
    • isNull

      public boolean isNull(int index)
      Check if an element at given index is null.
      Specified by:
      isNull in interface ValueVector
      Parameters:
      index - position of an element
      Returns:
      true if an element at given index is null
    • isSet

      public int isSet(int index)
      Same as isNull(int).
      Parameters:
      index - position of an element
      Returns:
      1 if element at given index is not null, 0 otherwise
    • getValueCount

      public int getValueCount()
      Get the value count of vector. This will always be zero unless setValueCount(int) has been called prior to calling this.
      Specified by:
      getValueCount in interface ValueVector
      Returns:
      valueCount for the vector
    • setValueCount

      public void setValueCount(int valueCount)
      Sets the value count for the vector.
      Specified by:
      setValueCount in interface ValueVector
      Parameters:
      valueCount - value count
    • fillEmpties

      public void fillEmpties(int index)
      Create holes in the vector upto the given index (exclusive). Holes will be created from the current last-set position in the vector.
      Specified by:
      fillEmpties in interface VariableWidthFieldVector
      Parameters:
      index - target index
    • setLastSet

      public void setLastSet(int value)
      Set the index of the last non-null element in the vector. It is important to call this method with appropriate value before calling setValueCount(int).
      Specified by:
      setLastSet in interface VariableWidthFieldVector
      Parameters:
      value - desired index of last non-null element.
    • getLastSet

      public int getLastSet()
      Get the index of the last non-null element in the vector.
      Specified by:
      getLastSet in interface VariableWidthFieldVector
      Returns:
      index of the last non-null element
    • setIndexDefined

      public void setIndexDefined(int index)
      Mark the particular position in the vector as non-null.
      Specified by:
      setIndexDefined in interface VectorDefinitionSetter
      Parameters:
      index - position of the element.
    • setValueLengthSafe

      public void setValueLengthSafe(int index, int length)
      Sets the value length for an element.
      Specified by:
      setValueLengthSafe in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      length - length of the element
    • getValueLength

      public int getValueLength(int index)
      Get the length of the element at specified index.
      Specified by:
      getValueLength in interface VariableWidthFieldVector
      Parameters:
      index - position of an element to get
      Returns:
      greater than length 0 for a non-null element, 0 otherwise
    • set

      public void set(int index, byte[] value)
      Set the variable length element at the specified index to the supplied byte array. This is same as using set(int, byte[], int, int) with start as Zero and length as #value.length
      Specified by:
      set in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      value - array of bytes to write
    • setSafe

      public void setSafe(int index, byte[] value)
      Same as set(int, byte[]) except that it handles the case where index and length of a new element are beyond the existing capacity of the vector.
      Specified by:
      setSafe in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      value - array of bytes to write
    • set

      public void set(int index, byte[] value, int start, int length)
      Set the variable length element at the specified index to the supplied byte array.
      Specified by:
      set in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      value - array of bytes to write
      start - start index in an array of bytes
      length - length of data in an array of bytes
    • setSafe

      public void setSafe(int index, byte[] value, int start, int length)
      Same as set(int, byte[], int, int) except that it handles the case where index and length of a new element are beyond the existing capacity of the vector.
      Specified by:
      setSafe in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      value - array of bytes to write
      start - start index in an array of bytes
      length - length of data in an array of bytes
    • set

      public void set(int index, ByteBuffer value, int start, int length)
      Set the variable length element at the specified index to the content in supplied ByteBuffer.
      Specified by:
      set in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      value - ByteBuffer with data
      start - start index in ByteBuffer
      length - length of data in ByteBuffer
    • setSafe

      public void setSafe(int index, ByteBuffer value, int start, int length)
      Same as set(int, ByteBuffer, int, int) except that it handles the case where index and length of a new element are beyond the existing capacity of the vector.
      Specified by:
      setSafe in interface VariableWidthFieldVector
      Parameters:
      index - position of the element to set
      value - ByteBuffer with data
      start - start index in ByteBuffer
      length - length of data in ByteBuffer
    • setNull

      public void setNull(int index)
      Set the element at the given index to null.
      Specified by:
      setNull in interface FieldVector
      Parameters:
      index - position of an element
    • set

      public void set(int index, int isSet, int start, int end, ArrowBuf buffer)
      Store the given value at a particular position in the vector. isSet indicates whether the value is NULL or not.
      Parameters:
      index - position of the new value
      isSet - Zero for NULL value, 1 otherwise
      start - start position of data in buffer
      end - end position of data in buffer
      buffer - data buffer containing the variable width element to be stored in the vector
    • setSafe

      public void setSafe(int index, int isSet, int start, int end, ArrowBuf buffer)
      Same as set(int, int, int, int, ArrowBuf) except that it handles the case when index is greater than or equal to current value capacity of the vector.
      Parameters:
      index - position of the new value
      isSet - Zero for NULL value, 1 otherwise
      start - start position of data in buffer
      end - end position of data in buffer
      buffer - data buffer containing the variable width element to be stored in the vector
    • set

      public void set(int index, int start, int length, ArrowBuf buffer)
      Store the given value at a particular position in the vector. isSet indicates whether the value is NULL or not.
      Parameters:
      index - position of the new value
      start - start position of data in buffer
      length - length of data in buffer
      buffer - data buffer containing the variable width element to be stored in the vector
    • setSafe

      public void setSafe(int index, int start, int length, ArrowBuf buffer)
      Same as set(int, int, int, int, ArrowBuf) except that it handles the case when index is greater than or equal to current value capacity of the vector.
      Parameters:
      index - position of the new value
      start - start position of data in buffer
      length - length of data in buffer
      buffer - data buffer containing the variable width element to be stored in the vector
    • allocateOrGetLastDataBuffer

      protected ArrowBuf allocateOrGetLastDataBuffer(int length)
    • setBytes

      protected final void setBytes(int index, byte[] value, int start, int length)
      This method is used to create a view buffer for a variable width vector. It handles both inline and data buffers.

      If the length of the value is less than or equal to INLINE_SIZE, the value is stored in the valueBuffer directly as an inline buffer. The valueBuffer stores the length of the value followed by the value itself. If the length of the value is greater than INLINE_SIZE, a new buffer is allocated and added to dataBuffers to hold the value. The viewBuffer in this case stores the length of the value, a prefix of the value, the index of the new buffer in dataBuffers, and the offset of the value in the new buffer.

      Parameters:
      index - The index at which the new value will be inserted.
      value - The byte array that contains the data to be inserted.
      start - The start index in the byte array from where the data for the new value begins.
      length - The length of the data in the byte array that belongs to the new value.
    • setBytes

      protected final void setBytes(int index, ArrowBuf valueBuf, int start, int length)
      This method is used to create a view buffer for a variable width vector. Similar to setBytes(int index, byte[] value, int start, int length)
      Parameters:
      index - The index at which the new value will be inserted.
      valueBuf - The byte array that contains the data to be inserted.
      start - The start index in the byte array from where the data for the new value begins.
      length - The length of the data in the byte array that belongs to the new value.
    • getTotalValueLengthUpToIndex

      public final int getTotalValueLengthUpToIndex(int index)
      Get the total length of the elements up to the given index.
      Parameters:
      index - The index of the element in the vector.
      Returns:
      The total length up to the element at the given index.
    • handleSafe

      protected final void handleSafe(int index, int dataLength)
    • copyFrom

      public void copyFrom(int fromIndex, int thisIndex, ValueVector from)
      Copy a cell value from a particular index in source vector to a particular position in this vector.
      Specified by:
      copyFrom in interface ValueVector
      Overrides:
      copyFrom in class BaseValueVector
      Parameters:
      fromIndex - position to copy from in source vector
      thisIndex - position to copy to in this vector
      from - source vector
    • copyFromSafe

      public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from)
      Same as copyFrom(int, int, ValueVector) except that it handles the case when the capacity of the vector needs to be expanded before copy.
      Specified by:
      copyFromSafe in interface ValueVector
      Overrides:
      copyFromSafe in class BaseValueVector
      Parameters:
      fromIndex - position to copy from in source vector
      thisIndex - position to copy to in this vector
      from - source vector
    • getDataPointer

      public ArrowBufPointer getDataPointer(int index)
      Description copied from interface: ElementAddressableVector
      Gets the pointer for the data at the given index.
      Specified by:
      getDataPointer in interface ElementAddressableVector
      Parameters:
      index - the index for the data.
      Returns:
      the pointer to the data.
    • getDataPointer

      public ArrowBufPointer getDataPointer(int index, ArrowBufPointer reuse)
      Description copied from interface: ElementAddressableVector
      Gets the pointer for the data at the given index.
      Specified by:
      getDataPointer in interface ElementAddressableVector
      Parameters:
      index - the index for the data.
      reuse - the data pointer to fill, this avoids creating a new pointer object.
      Returns:
      the pointer to the data, it should be the same one as the input parameter
    • hashCode

      public int hashCode(int index)
      Description copied from interface: ValueVector
      Returns hashCode of element in index with the default hasher.
      Specified by:
      hashCode in interface ValueVector
    • hashCode

      public int hashCode(int index, ArrowBufHasher hasher)
      Description copied from interface: ValueVector
      Returns hashCode of element in index with the given hasher.
      Specified by:
      hashCode in interface ValueVector
    • getData

      protected byte[] getData(int index)
      Retrieves the data of a variable-width element at a given index in the vector.

      If the length of the data is greater than INLINE_SIZE, the data is stored in an inline buffer. The method retrieves the buffer index and data offset from the viewBuffer, and then retrieves the data from the corresponding buffer in the dataBuffers list.

      If the length of the data is less than or equal to INLINE_SIZE, the data is stored directly in the viewBuffer. The method retrieves the data directly from the viewBuffer.

      Parameters:
      index - position of the element in the vector
      Returns:
      byte array containing the data of the element
    • getData

      protected void getData(int index, ReusableBuffer<?> buffer)
    • accept

      public <OUT, IN> OUT accept(VectorVisitor<OUT,IN> visitor, IN value)
      Description copied from interface: ValueVector
      Accept a generic VectorVisitor and return the result.
      Specified by:
      accept in interface ValueVector
      Type Parameters:
      OUT - the output result type.
      IN - the input data together with visitor.
    • getExportedCDataBufferCount

      public int getExportedCDataBufferCount()
      Retrieves the export buffer count for the C Data Interface.

      For Variadic types, an additional buffer is kept to store the size of each variadic buffer since that information cannot be retrieved in the C Data import.

      In the C Data Interface, the binary view import expects at least three buffers. The variadic size buffer is merely allocated to determine the number of elements per each variadic buffer, and it is not part of the imported data.

      The count is set to 3 + dataBuffers.size(). Three is formed by validity, view, and variadic size buffer.

      Specified by:
      getExportedCDataBufferCount in interface FieldVector
      Returns:
      the number of buffers to be exported
    • exportCDataBuffers

      public void exportCDataBuffers(List<ArrowBuf> buffers, ArrowBuf buffersPtr, long nullValue)
      Get the data buffer of the vector. Note that an additional buffer is appended to store the size of each variadic buffer's size.
      Specified by:
      exportCDataBuffers in interface FieldVector
      Parameters:
      buffers - list of buffers to be exported
      buffersPtr - buffer to store the pointers to the exported buffers
      nullValue - null value