Skip to content

Commit 9d50ee1

Browse files
DX-122953 Add empty split transfer coverage
1 parent 3c55ad4 commit 9d50ee1

3 files changed

Lines changed: 86 additions & 7 deletions

File tree

vector/src/test/java/org/apache/arrow/vector/TestLargeListVector.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,39 @@ public void testSplitAndTransferEmptyLargeListOffsetBuffer() {
992992
}
993993
}
994994

995+
@Test
996+
public void testSplitAndTransferEmptyLargeListAllocatesOffsetBuffer() {
997+
try (LargeListVector fromVector = LargeListVector.empty("fromVector", allocator);
998+
LargeListVector toVector = LargeListVector.empty("toVector", allocator)) {
999+
fromVector.addOrGetVector(FieldType.nullable(MinorType.INT.getType()));
1000+
fromVector.allocateNew();
1001+
fromVector.setValueCount(0);
1002+
1003+
TransferPair transferPair = fromVector.makeTransferPair(toVector);
1004+
transferPair.splitAndTransfer(0, 0);
1005+
1006+
assertAllocatedEmptyLargeListOffsetBuffer(toVector);
1007+
}
1008+
}
1009+
1010+
@Test
1011+
public void testSplitAndTransferEmptyNestedLargeListAllocatesOffsetBuffers() {
1012+
try (LargeListVector fromVector = LargeListVector.empty("fromVector", allocator);
1013+
LargeListVector toVector = LargeListVector.empty("toVector", allocator)) {
1014+
fromVector.addOrGetVector(FieldType.nullable(MinorType.LARGELIST.getType()));
1015+
LargeListVector childVector = (LargeListVector) fromVector.getDataVector();
1016+
childVector.addOrGetVector(FieldType.nullable(MinorType.INT.getType()));
1017+
fromVector.allocateNew();
1018+
fromVector.setValueCount(0);
1019+
1020+
TransferPair transferPair = fromVector.makeTransferPair(toVector);
1021+
transferPair.splitAndTransfer(0, 0);
1022+
1023+
assertAllocatedEmptyLargeListOffsetBuffer(toVector);
1024+
assertAllocatedEmptyLargeListOffsetBuffer((LargeListVector) toVector.getDataVector());
1025+
}
1026+
}
1027+
9951028
private ArrowBuf assertEmptyLargeListOffsetBuffer(LargeListVector list) {
9961029
List<ArrowBuf> buffers = list.getFieldBuffers();
9971030
ArrowBuf offsetBuffer = buffers.get(1);
@@ -1001,6 +1034,12 @@ private ArrowBuf assertEmptyLargeListOffsetBuffer(LargeListVector list) {
10011034
return offsetBuffer;
10021035
}
10031036

1037+
private void assertAllocatedEmptyLargeListOffsetBuffer(LargeListVector list) {
1038+
ArrowBuf offsetBuffer = list.getOffsetBuffer();
1039+
assertTrue(offsetBuffer.capacity() >= LargeListVector.OFFSET_WIDTH);
1040+
assertEquals(0L, offsetBuffer.getLong(0));
1041+
}
1042+
10041043
@Test
10051044
public void testIsEmpty() {
10061045
try (final LargeListVector vector = LargeListVector.empty("list", allocator)) {

vector/src/test/java/org/apache/arrow/vector/TestListVector.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,6 +1172,39 @@ public void testSplitAndTransferEmptyListOffsetBuffer() {
11721172
}
11731173
}
11741174

1175+
@Test
1176+
public void testSplitAndTransferEmptyListAllocatesOffsetBuffer() {
1177+
try (ListVector fromVector = ListVector.empty("fromVector", allocator);
1178+
ListVector toVector = ListVector.empty("toVector", allocator)) {
1179+
fromVector.addOrGetVector(FieldType.nullable(MinorType.INT.getType()));
1180+
fromVector.allocateNew();
1181+
fromVector.setValueCount(0);
1182+
1183+
TransferPair transferPair = fromVector.makeTransferPair(toVector);
1184+
transferPair.splitAndTransfer(0, 0);
1185+
1186+
assertAllocatedEmptyListOffsetBuffer(toVector);
1187+
}
1188+
}
1189+
1190+
@Test
1191+
public void testSplitAndTransferEmptyNestedListAllocatesOffsetBuffers() {
1192+
try (ListVector fromVector = ListVector.empty("fromVector", allocator);
1193+
ListVector toVector = ListVector.empty("toVector", allocator)) {
1194+
fromVector.addOrGetVector(FieldType.nullable(MinorType.LIST.getType()));
1195+
ListVector childVector = (ListVector) fromVector.getDataVector();
1196+
childVector.addOrGetVector(FieldType.nullable(MinorType.INT.getType()));
1197+
fromVector.allocateNew();
1198+
fromVector.setValueCount(0);
1199+
1200+
TransferPair transferPair = fromVector.makeTransferPair(toVector);
1201+
transferPair.splitAndTransfer(0, 0);
1202+
1203+
assertAllocatedEmptyListOffsetBuffer(toVector);
1204+
assertAllocatedEmptyListOffsetBuffer((ListVector) toVector.getDataVector());
1205+
}
1206+
}
1207+
11751208
private ArrowBuf assertEmptyListOffsetBuffer(ListVector list) {
11761209
List<ArrowBuf> buffers = list.getFieldBuffers();
11771210
ArrowBuf offsetBuffer = buffers.get(1);
@@ -1181,6 +1214,12 @@ private ArrowBuf assertEmptyListOffsetBuffer(ListVector list) {
11811214
return offsetBuffer;
11821215
}
11831216

1217+
private void assertAllocatedEmptyListOffsetBuffer(ListVector list) {
1218+
ArrowBuf offsetBuffer = list.getOffsetBuffer();
1219+
assertTrue(offsetBuffer.capacity() >= BaseRepeatedValueVector.OFFSET_WIDTH);
1220+
assertEquals(0, offsetBuffer.getInt(0));
1221+
}
1222+
11841223
@Test
11851224
public void testIsEmpty() {
11861225
try (final ListVector vector = ListVector.empty("list", allocator)) {

vector/src/test/java/org/apache/arrow/vector/TestSplitAndTransfer.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,16 @@ private void populateDenseUnionVector(final DenseUnionVector vector, int valueCo
114114
@Test
115115
public void testWithEmptyVector() {
116116
// MapVector use TransferImpl from ListVector
117-
ListVector listVector = ListVector.empty("", allocator);
118-
TransferPair transferPair = listVector.getTransferPair(allocator);
119-
transferPair.splitAndTransfer(0, 0);
120-
assertEquals(0, transferPair.getTo().getValueCount());
121-
transferPair.getTo().clear();
122-
listVector.clear();
117+
try (ListVector listVector = ListVector.empty("", allocator)) {
118+
TransferPair transferPair = listVector.getTransferPair(allocator);
119+
try (ValueVector toVector = transferPair.getTo()) {
120+
transferPair.splitAndTransfer(0, 0);
121+
assertEquals(0, toVector.getValueCount());
122+
}
123+
}
123124
// BaseFixedWidthVector
124125
IntVector intVector = new IntVector("", allocator);
125-
transferPair = intVector.getTransferPair(allocator);
126+
TransferPair transferPair = intVector.getTransferPair(allocator);
126127
transferPair.splitAndTransfer(0, 0);
127128
assertEquals(0, transferPair.getTo().getValueCount());
128129
// BaseVariableWidthVector

0 commit comments

Comments
 (0)