private void createVectorAccessor()

in gluten-arrow/src/main/java/org/apache/gluten/vectorized/ArrowWritableColumnVector.java [199:271]


  private void createVectorAccessor(ValueVector vector, ValueVector dictionary) {
    if (dictionary != null) {
      if (!(vector instanceof IntVector)) {
        throw new IllegalArgumentException(
            "Expect int32 index vector. Found: " + vector.getMinorType());
      }
      IntVector index = (IntVector) vector;
      if (dictionary instanceof VarBinaryVector) {
        accessor = new DictionaryEncodedBinaryAccessor(index, (VarBinaryVector) dictionary);
      } else if (dictionary instanceof VarCharVector) {
        accessor = new DictionaryEncodedStringAccessor(index, (VarCharVector) dictionary);
      } else {
        throw new IllegalArgumentException(
            "Unrecognized index value type: " + dictionary.getMinorType());
      }
      return;
    }
    if (vector instanceof BitVector) {
      accessor = new BooleanAccessor((BitVector) vector);
    } else if (vector instanceof TinyIntVector) {
      accessor = new ByteAccessor((TinyIntVector) vector);
    } else if (vector instanceof SmallIntVector) {
      accessor = new ShortAccessor((SmallIntVector) vector);
    } else if (vector instanceof IntVector) {
      accessor = new IntAccessor((IntVector) vector);
    } else if (vector instanceof BigIntVector) {
      accessor = new LongAccessor((BigIntVector) vector);
    } else if (vector instanceof Float4Vector) {
      accessor = new FloatAccessor((Float4Vector) vector);
    } else if (vector instanceof Float8Vector) {
      accessor = new DoubleAccessor((Float8Vector) vector);
    } else if (vector instanceof DecimalVector) {
      accessor = new DecimalAccessor((DecimalVector) vector);
    } else if (vector instanceof VarCharVector) {
      accessor = new StringAccessor((VarCharVector) vector);
    } else if (vector instanceof VarBinaryVector) {
      accessor = new BinaryAccessor((VarBinaryVector) vector);
    } else if (vector instanceof DateDayVector) {
      accessor = new DateAccessor((DateDayVector) vector);
    } else if (vector instanceof TimeStampMicroVector || vector instanceof TimeStampMicroTZVector) {
      accessor = new TimestampMicroAccessor((TimeStampVector) vector);
    } else if (vector instanceof MapVector) {
      MapVector mapVector = (MapVector) vector;
      accessor = new MapAccessor(mapVector);
      reallocateChildColumns(2);
      final StructVector structVector = (StructVector) mapVector.getDataVector();
      final FieldVector keyChild = structVector.getChild(MapVector.KEY_NAME);
      final FieldVector valueChild = structVector.getChild(MapVector.VALUE_NAME);
      childColumns[0] = new ArrowWritableColumnVector(keyChild, 0, structVector.size(), false);
      childColumns[1] = new ArrowWritableColumnVector(valueChild, 1, structVector.size(), false);
    } else if (vector instanceof ListVector) {
      ListVector listVector = (ListVector) vector;
      accessor = new ArrayAccessor(listVector);
      reallocateChildColumns(1);
      childColumns[0] =
          new ArrowWritableColumnVector(listVector.getDataVector(), 0, listVector.size(), false);
    } else if (vector instanceof StructVector) {
      StructVector structVector = (StructVector) vector;
      accessor = new StructAccessor(structVector);

      reallocateChildColumns(structVector.size());
      for (int i = 0; i < childColumns.length; ++i) {
        childColumns[i] =
            new ArrowWritableColumnVector(
                structVector.getVectorById(i), i, structVector.size(), false);
      }
    } else if (vector instanceof NullVector) {
      NullVector nullVector = (NullVector) vector;
      accessor = new NullAccessor(nullVector);
    } else {
      throw new UnsupportedOperationException("Unsupported vector " + vector.getMinorType());
    }
  }