in vector/src/main/java/org/apache/arrow/vector/TypeLayout.java [294:459]
public static int getTypeBufferCount(final ArrowType arrowType) {
return arrowType.accept(
new ArrowTypeVisitor<Integer>() {
/**
* All fixed width vectors have a common number of buffers 2: one validity buffer, plus a
* data buffer.
*/
static final int FIXED_WIDTH_BUFFER_COUNT = 2;
/**
* All variable width vectors have a common number of buffers 3: a validity buffer, an
* offset buffer, and a data buffer.
*/
static final int VARIABLE_WIDTH_BUFFER_COUNT = 3;
@Override
public Integer visit(Int type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Union type) {
switch (type.getMode()) {
case Dense:
// TODO: validate this
return 2;
case Sparse:
// type buffer
return 1;
default:
throw new UnsupportedOperationException(
"Unsupported Union Mode: " + type.getMode());
}
}
@Override
public Integer visit(Struct type) {
// validity buffer
return 1;
}
@Override
public Integer visit(Timestamp type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(ArrowType.List type) {
// validity buffer + offset buffer
return 2;
}
@Override
public Integer visit(ArrowType.ListView type) {
// validity buffer + offset buffer + size buffer
return 3;
}
@Override
public Integer visit(ArrowType.LargeList type) {
// validity buffer + offset buffer
return 2;
}
@Override
public Integer visit(ArrowType.LargeListView type) {
// validity buffer + offset buffer + size buffer
return 3;
}
@Override
public Integer visit(FixedSizeList type) {
// validity buffer
return 1;
}
@Override
public Integer visit(Map type) {
// validity buffer + offset buffer
return 2;
}
@Override
public Integer visit(FloatingPoint type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Decimal type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(FixedSizeBinary type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Bool type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Binary type) {
return VARIABLE_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(BinaryView type) {
// NOTE: only consider the validity and view buffers
return 2;
}
@Override
public Integer visit(Utf8 type) {
return VARIABLE_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Utf8View type) {
// NOTE: only consider the validity and view buffers
return 2;
}
@Override
public Integer visit(LargeUtf8 type) {
return VARIABLE_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(LargeBinary type) {
return VARIABLE_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Null type) {
return 0;
}
@Override
public Integer visit(Date type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Time type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Interval type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(Duration type) {
return FIXED_WIDTH_BUFFER_COUNT;
}
@Override
public Integer visit(RunEndEncoded type) {
return 0;
}
});
}