in java/fury-format/src/main/java/org/apache/fury/format/vectorized/ArrowWriter.java [101:202]
private static ArrowArrayWriter createFieldWriter(ValueVector vector) {
DefaultTypeVisitor<ArrowArrayWriter> typeVisitor =
new DefaultTypeVisitor<ArrowArrayWriter>() {
@Override
public ArrowArrayWriter visit(ArrowType.Bool type) {
return new BooleanWriter((BitVector) vector);
}
@Override
public ArrowArrayWriter visit(ArrowType.Int type) {
if (type.getIsSigned()) {
int byteWidth = type.getBitWidth() / 8;
switch (byteWidth) {
case 1:
return new ByteWriter((TinyIntVector) vector);
case 2:
return new ShortWriter((SmallIntVector) vector);
case 4:
return new IntWriter((IntVector) vector);
case 8:
return new LongWriter((BigIntVector) vector);
default:
return unsupported(type);
}
}
return unsupported(type);
}
@Override
public ArrowArrayWriter visit(ArrowType.FloatingPoint type) {
switch (type.getPrecision()) {
case SINGLE:
return new FloatWriter((Float4Vector) vector);
case DOUBLE:
return new DoubleWriter((Float8Vector) vector);
default:
return unsupported(type);
}
}
@Override
public ArrowArrayWriter visit(ArrowType.Date type) {
if (type.getUnit() == DateUnit.DAY) {
return new DateWriter((DateDayVector) vector);
}
return unsupported(type);
}
@Override
public ArrowArrayWriter visit(ArrowType.Timestamp type) {
return new TimestampWriter((TimeStampMicroTZVector) vector);
}
@Override
public ArrowArrayWriter visit(ArrowType.Binary type) {
return new BinaryWriter((VarBinaryVector) vector);
}
@Override
public ArrowArrayWriter visit(ArrowType.Decimal type) {
return new DecimalWriter((DecimalVector) vector);
}
@Override
public ArrowArrayWriter visit(ArrowType.Utf8 type) {
return new StringWriter((VarCharVector) vector);
}
@Override
public ArrowArrayWriter visit(ArrowType.Struct type) {
StructVector structVector = (StructVector) (vector);
ArrowArrayWriter[] childWriters =
IntStream.range(0, structVector.size())
.mapToObj(i -> createFieldWriter(structVector.getChildByOrdinal(i)))
.toArray(ArrowArrayWriter[]::new);
return new StructWriter(structVector, childWriters);
}
@Override
public ArrowArrayWriter visit(ArrowType.List type) {
ListVector listVector = (ListVector) (vector);
return new ListWriter(listVector, createFieldWriter(listVector.getDataVector()));
}
@Override
public ArrowArrayWriter visit(ArrowType.Map type) {
MapVector mapVector = (MapVector) (vector);
StructVector structVector = (StructVector) (mapVector.getDataVector());
ArrowArrayWriter keyWriter =
createFieldWriter(structVector.getChild(MapVector.KEY_NAME));
ArrowArrayWriter valueWriter =
createFieldWriter(structVector.getChild(MapVector.VALUE_NAME));
return new MapWriter(mapVector, keyWriter, valueWriter);
}
};
try {
return vector.getField().getType().accept(typeVisitor);
} catch (RuntimeException e) {
throw e;
}
}