Skip to content

Commit bd6b92f

Browse files
committed
isVariableBuffer
1 parent bad3584 commit bd6b92f

File tree

2 files changed

+155
-11
lines changed

2 files changed

+155
-11
lines changed

vector/src/main/java/org/apache/arrow/vector/TypeLayout.java

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@
3737
import org.apache.arrow.vector.types.pojo.ArrowType.Int;
3838
import org.apache.arrow.vector.types.pojo.ArrowType.Interval;
3939
import org.apache.arrow.vector.types.pojo.ArrowType.LargeBinary;
40+
import org.apache.arrow.vector.types.pojo.ArrowType.LargeList;
41+
import org.apache.arrow.vector.types.pojo.ArrowType.LargeListView;
4042
import org.apache.arrow.vector.types.pojo.ArrowType.LargeUtf8;
43+
import org.apache.arrow.vector.types.pojo.ArrowType.ListView;
4144
import org.apache.arrow.vector.types.pojo.ArrowType.Map;
4245
import org.apache.arrow.vector.types.pojo.ArrowType.Null;
4346
import org.apache.arrow.vector.types.pojo.ArrowType.RunEndEncoded;
@@ -458,6 +461,142 @@ public Integer visit(RunEndEncoded type) {
458461
});
459462
}
460463

464+
public static boolean isVariableBuffer(final ArrowType arrowType) {
465+
return arrowType.accept(
466+
new ArrowTypeVisitor<>() {
467+
468+
@Override
469+
public Boolean visit(Null type) {
470+
return false;
471+
}
472+
473+
@Override
474+
public Boolean visit(Struct type) {
475+
return false;
476+
}
477+
478+
@Override
479+
public Boolean visit(ArrowType.List type) {
480+
return false;
481+
}
482+
483+
@Override
484+
public Boolean visit(LargeList type) {
485+
return false;
486+
}
487+
488+
@Override
489+
public Boolean visit(FixedSizeList type) {
490+
return false;
491+
}
492+
493+
@Override
494+
public Boolean visit(Union type) {
495+
return false;
496+
}
497+
498+
@Override
499+
public Boolean visit(Map type) {
500+
return false;
501+
}
502+
503+
@Override
504+
public Boolean visit(Int type) {
505+
return false;
506+
}
507+
508+
@Override
509+
public Boolean visit(FloatingPoint type) {
510+
return false;
511+
}
512+
513+
@Override
514+
public Boolean visit(Utf8 type) {
515+
return false;
516+
}
517+
518+
@Override
519+
public Boolean visit(Utf8View type) {
520+
return true;
521+
}
522+
523+
@Override
524+
public Boolean visit(LargeUtf8 type) {
525+
return false;
526+
}
527+
528+
@Override
529+
public Boolean visit(Binary type) {
530+
return false;
531+
}
532+
533+
@Override
534+
public Boolean visit(BinaryView type) {
535+
return true;
536+
}
537+
538+
@Override
539+
public Boolean visit(LargeBinary type) {
540+
return false;
541+
}
542+
543+
@Override
544+
public Boolean visit(FixedSizeBinary type) {
545+
return false;
546+
}
547+
548+
@Override
549+
public Boolean visit(Bool type) {
550+
return false;
551+
}
552+
553+
@Override
554+
public Boolean visit(Decimal type) {
555+
return false;
556+
}
557+
558+
@Override
559+
public Boolean visit(Date type) {
560+
return false;
561+
}
562+
563+
@Override
564+
public Boolean visit(Time type) {
565+
return false;
566+
}
567+
568+
@Override
569+
public Boolean visit(Timestamp type) {
570+
return false;
571+
}
572+
573+
@Override
574+
public Boolean visit(Interval type) {
575+
return false;
576+
}
577+
578+
@Override
579+
public Boolean visit(Duration type) {
580+
return false;
581+
}
582+
583+
@Override
584+
public Boolean visit(ListView type) {
585+
return false;
586+
}
587+
588+
@Override
589+
public Boolean visit(LargeListView type) {
590+
return false;
591+
}
592+
593+
@Override
594+
public Boolean visit(RunEndEncoded type) {
595+
return false;
596+
}
597+
});
598+
}
599+
461600
private final List<BufferLayout> bufferLayouts;
462601

463602
private final boolean isFixedBufferCount;

vector/src/main/java/org/apache/arrow/vector/validate/ValidateVectorBufferVisitor.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,22 @@ private void validateVectorCommon(ValueVector vector) {
5252

5353
if (vector instanceof FieldVector) {
5454
FieldVector fieldVector = (FieldVector) vector;
55-
// TODO: https://github.com/apache/arrow/issues/41734
5655
int typeBufferCount = TypeLayout.getTypeBufferCount(arrowType);
57-
validateOrThrow(
58-
fieldVector.getFieldBuffers().size() == typeBufferCount,
59-
"Expected %s buffers in vector of type %s, got %s.",
60-
typeBufferCount,
61-
vector.getField().getType().toString(),
62-
fieldVector.getFieldBuffers().size());
56+
if (TypeLayout.isVariableBuffer(arrowType)) {
57+
validateOrThrow(
58+
fieldVector.getFieldBuffers().size() >= typeBufferCount,
59+
"Expected at least %s buffers in vector of type %s, got %s.",
60+
typeBufferCount,
61+
vector.getField().getType().toString(),
62+
fieldVector.getFieldBuffers().size());
63+
} else {
64+
validateOrThrow(
65+
fieldVector.getFieldBuffers().size() == typeBufferCount,
66+
"Expected %s buffers in vector of type %s, got %s.",
67+
typeBufferCount,
68+
vector.getField().getType().toString(),
69+
fieldVector.getFieldBuffers().size());
70+
}
6371
}
6472
}
6573

@@ -159,10 +167,7 @@ public Void visit(BaseLargeVariableWidthVector vector, Void value) {
159167
@Override
160168
public Void visit(BaseVariableWidthViewVector vector, Void value) {
161169
final int valueCount = vector.getValueCount();
162-
validateOrThrow(
163-
vector.getValueCount() >= 0,
164-
"Vector valueCount %s is negative.",
165-
vector.getValueCapacity());
170+
validateVectorCommon(vector);
166171
validateOrThrow(vector.getFieldBuffers().size() >= 2, "Expected at least 2 buffers.");
167172
validateValidityBuffer(vector, valueCount);
168173
validateDataBuffer(vector, (long) valueCount * BaseVariableWidthViewVector.ELEMENT_SIZE);

0 commit comments

Comments
 (0)