Skip to content

Commit e918540

Browse files
committed
add testAppendLongVariableWidthViewVector
1 parent 319d45f commit e918540

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

vector/src/main/java/org/apache/arrow/vector/util/VectorAppender.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,10 @@ public ValueVector visit(BaseVariableWidthViewVector deltaVector, Void value) {
262262

263263
// make sure there is enough capacity
264264
while (targetVector.getValueCapacity() < newValueCount) {
265-
targetVector.reAlloc();
265+
// Do not call BaseVariableWidthViewVector#reAlloc() here,
266+
// because reallocViewDataBuffer() is always unnecessary
267+
((BaseVariableWidthViewVector) targetVector).reallocValidityBuffer();
268+
((BaseVariableWidthViewVector) targetVector).reallocViewBuffer();
266269
}
267270

268271
// append validity buffer

vector/src/test/java/org/apache/arrow/vector/util/TestVectorAppender.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,42 @@ public void testAppendShortLongVariableWidthViewVector() {
252252
}
253253
}
254254

255+
@Test
256+
public void testAppendLongVariableWidthViewVector() {
257+
try (ViewVarCharVector target = new ViewVarCharVector("", allocator);
258+
ViewVarCharVector delta = new ViewVarCharVector("", allocator)) {
259+
260+
String[] targetValues = randomLongViewVarCharVector(target);
261+
String[] deltaValues = randomLongViewVarCharVector(delta);
262+
263+
VectorAppender appender = new VectorAppender(target);
264+
delta.accept(appender, null);
265+
266+
assertEquals(4, target.getDataBuffers().size());
267+
try (ViewVarCharVector expected = new ViewVarCharVector("expected", allocator)) {
268+
ValueVectorDataPopulator.setVector(
269+
expected,
270+
Stream.concat(Arrays.stream(targetValues), Arrays.stream(deltaValues))
271+
.toArray(String[]::new));
272+
assertVectorsEqual(expected, target);
273+
}
274+
}
275+
}
276+
277+
private static String[] randomLongViewVarCharVector(ViewVarCharVector target) {
278+
assertEquals(0, target.getDataBuffers().size());
279+
int initial = 64;
280+
int stringCount = 128;
281+
target.setInitialCapacity(initial);
282+
String[] targetValues =
283+
IntStream.range(0, stringCount)
284+
.mapToObj(i -> TestUtils.generateRandomString(BaseVariableWidthViewVector.ELEMENT_SIZE))
285+
.toArray(String[]::new);
286+
ValueVectorDataPopulator.setVector(target, targetValues);
287+
assertEquals(2, target.getDataBuffers().size());
288+
return targetValues;
289+
}
290+
255291
@Test
256292
public void testAppendEmptyVariableWidthVector() {
257293
try (VarCharVector target = new VarCharVector("", allocator);

0 commit comments

Comments
 (0)