Class ColumnBlockConversions

java.lang.Object
org.elasticsearch.xpack.esql.datasources.spi.ColumnBlockConversions

public final class ColumnBlockConversions extends Object
Converts columnar primitive arrays to ESQL Blocks, avoiding the per-element overhead of Block.Builder when the source data is already in columnar form.

Used by format readers (ORC, and future Parquet ColumnReader) that produce data as typed arrays. Three fast paths are provided for each type:

  • Repeating: a single value broadcast to all positions via constant block.
  • No nulls: bulk array copy + direct vector wrap (no builder, no per-element dispatch).
  • With nulls: bulk array copy + null bitmap conversion + array block.

The longColumn and doubleColumn entry points expose a copyValues parameter: callers such as ORC that recycle their column buffers across batches pass true, while callers that transfer ownership of a freshly allocated array (e.g. the Parquet reader) pass false to avoid the extra copy. The remaining entry points convert between primitive types and always allocate a fresh target array.

  • Method Details

    • longColumn

      public static Block longColumn(BlockFactory blockFactory, long[] values, int rowCount, boolean noNulls, boolean isRepeating, BitSet isNull, boolean copyValues)
      Converts a long[] column to a Block (LONG data type).

      Pass copyValues = true when the caller reuses values across batches (e.g. ORC's ColumnVector), and false when the caller transfers ownership of a freshly allocated array.

    • intColumnFromLongs

      public static Block intColumnFromLongs(BlockFactory blockFactory, long[] values, int rowCount, boolean noNulls, boolean isRepeating, BitSet isNull)
      Converts a long[] column to a Block (INTEGER data type) by downcasting.
    • doubleColumn

      public static Block doubleColumn(BlockFactory blockFactory, double[] values, int rowCount, boolean noNulls, boolean isRepeating, BitSet isNull, boolean copyValues)
      Converts a double[] column to a Block (DOUBLE data type).

      Pass copyValues = true when the caller reuses values across batches (e.g. ORC's ColumnVector), and false when the caller transfers ownership of a freshly allocated array.

    • booleanColumnFromLongs

      public static Block booleanColumnFromLongs(BlockFactory blockFactory, long[] values, int rowCount, boolean noNulls, boolean isRepeating, BitSet isNull)
      Converts a long[] column to a Block (BOOLEAN data type). ORC stores booleans as longs where 0 = false.
    • doubleColumnFromLongs

      public static Block doubleColumnFromLongs(BlockFactory blockFactory, long[] values, int rowCount, boolean noNulls, boolean isRepeating, BitSet isNull)
      Converts a long[] column to a Block (DOUBLE data type) by widening. Used for ORC DECIMAL types that arrive as LongColumnVector.
    • toBitSet

      public static BitSet toBitSet(boolean[] isNull, int length)
      Converts a boolean[] null-flag array to a BitSet. Returns null when the input is null, so callers can forward an absent null mask through ColumnBlockConversions entry points without a separate guard.