Skip to content

Commit 431874f

Browse files
author
vkorukanti
committed
ARROW-403: [Java] Create transfer pairs for internal vectors in UnionVector transfer impl
1 parent 0ac01a5 commit 431874f

File tree

2 files changed

+64
-9
lines changed

2 files changed

+64
-9
lines changed

java/vector/src/main/codegen/templates/UnionVector.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,6 @@ public TransferPair makeTransferPair(ValueVector target) {
246246
return new TransferImpl((UnionVector) target);
247247
}
248248
249-
public void transferTo(org.apache.arrow.vector.complex.UnionVector target) {
250-
typeVector.makeTransferPair(target.typeVector).transfer();
251-
internalMap.makeTransferPair(target.internalMap).transfer();
252-
target.valueCount = valueCount;
253-
}
254-
255249
public void copyFrom(int inIndex, int outIndex, UnionVector from) {
256250
from.getReader().setPosition(inIndex);
257251
getWriter().setPosition(outIndex);
@@ -275,20 +269,27 @@ public FieldVector addVector(FieldVector v) {
275269
}
276270
277271
private class TransferImpl implements TransferPair {
278-
279-
UnionVector to;
272+
private final TransferPair internalMapVectorTransferPair;
273+
private final TransferPair typeVectorTransferPair;
274+
private final UnionVector to;
280275
281276
public TransferImpl(String name, BufferAllocator allocator) {
282277
to = new UnionVector(name, allocator, null);
278+
internalMapVectorTransferPair = internalMap.makeTransferPair(to.internalMap);
279+
typeVectorTransferPair = typeVector.makeTransferPair(to.typeVector);
283280
}
284281
285282
public TransferImpl(UnionVector to) {
286283
this.to = to;
284+
internalMapVectorTransferPair = internalMap.makeTransferPair(to.internalMap);
285+
typeVectorTransferPair = typeVector.makeTransferPair(to.typeVector);
287286
}
288287
289288
@Override
290289
public void transfer() {
291-
transferTo(to);
290+
internalMapVectorTransferPair.transfer();
291+
typeVectorTransferPair.transfer();
292+
to.valueCount = valueCount;
292293
}
293294
294295
@Override

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@
2121

2222
import org.apache.arrow.memory.BufferAllocator;
2323
import org.apache.arrow.vector.complex.UnionVector;
24+
import org.apache.arrow.vector.holders.NullableBitHolder;
25+
import org.apache.arrow.vector.holders.NullableIntHolder;
2426
import org.apache.arrow.vector.holders.NullableUInt4Holder;
2527
import org.apache.arrow.vector.types.Types;
28+
import org.apache.arrow.vector.types.Types.MinorType;
29+
import org.apache.arrow.vector.util.TransferPair;
2630
import org.junit.After;
2731
import org.junit.Before;
2832
import org.junit.Test;
@@ -76,4 +80,54 @@ public void testUnionVector() throws Exception {
7680
}
7781
}
7882

83+
@Test
84+
public void testTransfer() throws Exception {
85+
try (UnionVector srcVector = new UnionVector(EMPTY_SCHEMA_PATH, allocator, null)) {
86+
srcVector.allocateNew();
87+
88+
// write some data
89+
final UnionVector.Mutator mutator = srcVector.getMutator();
90+
mutator.setType(0, MinorType.INT);
91+
mutator.setSafe(0, newIntHolder(5));
92+
mutator.setType(1, MinorType.BIT);
93+
mutator.setSafe(1, newBitHolder(false));
94+
mutator.setType(3, MinorType.INT);
95+
mutator.setSafe(3, newIntHolder(10));
96+
mutator.setType(5, MinorType.BIT);
97+
mutator.setSafe(5, newBitHolder(false));
98+
mutator.setValueCount(6);
99+
100+
try(UnionVector destVector = new UnionVector(EMPTY_SCHEMA_PATH, allocator, null)) {
101+
TransferPair pair = srcVector.makeTransferPair(destVector);
102+
103+
// Creating the transfer should transfer the type of the field at least.
104+
assertEquals(srcVector.getField(), destVector.getField());
105+
106+
// transfer
107+
pair.transfer();
108+
109+
assertEquals(srcVector.getField(), destVector.getField());
110+
111+
// now check the values are transferred
112+
assertEquals(srcVector.getAccessor().getValueCount(), destVector.getAccessor().getValueCount());
113+
for(int i=0; i<srcVector.getAccessor().getValueCount(); i++) {
114+
assertEquals("Different values at index " + i, srcVector.getAccessor().get(i), destVector.getAccessor().get(i));
115+
}
116+
}
117+
}
118+
}
119+
120+
private static NullableIntHolder newIntHolder(int value) {
121+
final NullableIntHolder holder = new NullableIntHolder();
122+
holder.isSet = 1;
123+
holder.value = value;
124+
return holder;
125+
}
126+
127+
private static NullableBitHolder newBitHolder(boolean value) {
128+
final NullableBitHolder holder = new NullableBitHolder();
129+
holder.isSet = 1;
130+
holder.value = value ? 1 : 0;
131+
return holder;
132+
}
79133
}

0 commit comments

Comments
 (0)