Skip to content

Commit c76ebd3

Browse files
committed
GH-301: Allow adding a vector at the end of VectorSchemaRoot
1 parent 9fd4973 commit c76ebd3

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,18 @@ public FieldVector getVector(int index) {
199199
*/
200200
public VectorSchemaRoot addVector(int index, FieldVector vector) {
201201
Preconditions.checkNotNull(vector);
202-
Preconditions.checkArgument(index >= 0 && index < fieldVectors.size());
202+
Preconditions.checkArgument(index >= 0 && index <= fieldVectors.size());
203203
List<FieldVector> newVectors = new ArrayList<>();
204-
for (int i = 0; i < fieldVectors.size(); i++) {
205-
if (i == index) {
206-
newVectors.add(vector);
204+
if (index == fieldVectors.size()) {
205+
newVectors.addAll(fieldVectors);
206+
newVectors.add(vector);
207+
} else {
208+
for (int i = 0; i < fieldVectors.size(); i++) {
209+
if (i == index) {
210+
newVectors.add(vector);
211+
}
212+
newVectors.add(fieldVectors.get(i));
207213
}
208-
newVectors.add(fieldVectors.get(i));
209214
}
210215
return new VectorSchemaRoot(newVectors);
211216
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,26 @@ public void testAddVector() {
171171
}
172172
}
173173

174+
@Test
175+
public void testAddVectorAtEnd() {
176+
try (final IntVector intVector1 = new IntVector("intVector1", allocator);
177+
final IntVector intVector2 = new IntVector("intVector2", allocator);
178+
final IntVector intVector3 = new IntVector("intVector3", allocator); ) {
179+
180+
VectorSchemaRoot original = new VectorSchemaRoot(Arrays.asList(intVector1, intVector2));
181+
assertEquals(2, original.getFieldVectors().size());
182+
183+
VectorSchemaRoot newRecordBatch = original.addVector(2, intVector3);
184+
assertEquals(3, newRecordBatch.getFieldVectors().size());
185+
assertEquals(intVector1, newRecordBatch.getFieldVectors().get(0));
186+
assertEquals(intVector2, newRecordBatch.getFieldVectors().get(1));
187+
assertEquals(intVector3, newRecordBatch.getFieldVectors().get(2));
188+
189+
original.close();
190+
newRecordBatch.close();
191+
}
192+
}
193+
174194
@Test
175195
public void testRemoveVector() {
176196
try (final IntVector intVector1 = new IntVector("intVector1", allocator);

0 commit comments

Comments
 (0)