|
21 | 21 |
|
22 | 22 | import org.apache.arrow.memory.BufferAllocator; |
23 | 23 | import org.apache.arrow.vector.complex.UnionVector; |
| 24 | +import org.apache.arrow.vector.holders.NullableBitHolder; |
| 25 | +import org.apache.arrow.vector.holders.NullableIntHolder; |
24 | 26 | import org.apache.arrow.vector.holders.NullableUInt4Holder; |
25 | 27 | import org.apache.arrow.vector.types.Types; |
| 28 | +import org.apache.arrow.vector.types.Types.MinorType; |
| 29 | +import org.apache.arrow.vector.util.TransferPair; |
26 | 30 | import org.junit.After; |
27 | 31 | import org.junit.Before; |
28 | 32 | import org.junit.Test; |
@@ -76,4 +80,54 @@ public void testUnionVector() throws Exception { |
76 | 80 | } |
77 | 81 | } |
78 | 82 |
|
| 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 | + } |
79 | 133 | } |
0 commit comments