|
23 | 23 | import static org.junit.jupiter.api.Assertions.assertThrows; |
24 | 24 | import static org.junit.jupiter.api.Assertions.assertTrue; |
25 | 25 |
|
| 26 | +import java.nio.ByteBuffer; |
26 | 27 | import java.util.ArrayList; |
27 | 28 | import java.util.Arrays; |
28 | 29 | import java.util.List; |
| 30 | +import java.util.UUID; |
29 | 31 | import org.apache.arrow.memory.ArrowBuf; |
30 | 32 | import org.apache.arrow.memory.BufferAllocator; |
31 | 33 | import org.apache.arrow.util.AutoCloseables; |
32 | 34 | import org.apache.arrow.vector.complex.BaseRepeatedValueVector; |
33 | 35 | import org.apache.arrow.vector.complex.ListVector; |
| 36 | +import org.apache.arrow.vector.complex.impl.UnionListReader; |
34 | 37 | import org.apache.arrow.vector.complex.impl.UnionListWriter; |
| 38 | +import org.apache.arrow.vector.complex.impl.UuidWriterFactory; |
35 | 39 | import org.apache.arrow.vector.complex.reader.FieldReader; |
| 40 | +import org.apache.arrow.vector.complex.writer.BaseWriter.ExtensionWriter; |
| 41 | +import org.apache.arrow.vector.holder.UuidHolder; |
36 | 42 | import org.apache.arrow.vector.holders.DurationHolder; |
37 | 43 | import org.apache.arrow.vector.holders.FixedSizeBinaryHolder; |
38 | 44 | import org.apache.arrow.vector.holders.TimeStampMilliTZHolder; |
|
41 | 47 | import org.apache.arrow.vector.types.pojo.ArrowType; |
42 | 48 | import org.apache.arrow.vector.types.pojo.Field; |
43 | 49 | import org.apache.arrow.vector.types.pojo.FieldType; |
| 50 | +import org.apache.arrow.vector.types.pojo.UuidType; |
44 | 51 | import org.apache.arrow.vector.util.TransferPair; |
45 | 52 | import org.junit.jupiter.api.AfterEach; |
46 | 53 | import org.junit.jupiter.api.BeforeEach; |
@@ -1198,6 +1205,71 @@ public void testGetTransferPairWithField() { |
1198 | 1205 | } |
1199 | 1206 | } |
1200 | 1207 |
|
| 1208 | + @Test |
| 1209 | + public void testListVectorWithExtensionType() throws Exception { |
| 1210 | + final FieldType type = FieldType.nullable(new UuidType()); |
| 1211 | + try (final ListVector inVector = new ListVector("list", allocator, type, null)) { |
| 1212 | + UnionListWriter writer = inVector.getWriter(); |
| 1213 | + writer.allocate(); |
| 1214 | + writer.setPosition(0); |
| 1215 | + UUID u1 = UUID.randomUUID(); |
| 1216 | + UUID u2 = UUID.randomUUID(); |
| 1217 | + writer.startList(); |
| 1218 | + ExtensionWriter extensionWriter = writer.extension(new UuidType()); |
| 1219 | + extensionWriter.addExtensionTypeWriterFactory(new UuidWriterFactory()); |
| 1220 | + extensionWriter.writeExtension(u1); |
| 1221 | + extensionWriter.writeExtension(u2); |
| 1222 | + writer.endList(); |
| 1223 | + |
| 1224 | + writer.setValueCount(1); |
| 1225 | + |
| 1226 | + FieldReader reader = inVector.getReader(); |
| 1227 | + assertTrue(reader.isSet(), "shouldn't be null"); |
| 1228 | + Object result = inVector.getObject(0); |
| 1229 | + ArrayList<UUID> resultSet = (ArrayList<UUID>) result; |
| 1230 | + assertEquals(2, resultSet.size()); |
| 1231 | + assertEquals(u1, resultSet.get(0)); |
| 1232 | + assertEquals(u2, resultSet.get(1)); |
| 1233 | + } |
| 1234 | + } |
| 1235 | + |
| 1236 | + @Test |
| 1237 | + public void testListVectorReaderForExtensionType() throws Exception { |
| 1238 | + final FieldType type = FieldType.nullable(new UuidType()); |
| 1239 | + try (final ListVector inVector = new ListVector("list", allocator, type, null)) { |
| 1240 | + UnionListWriter writer = inVector.getWriter(); |
| 1241 | + writer.allocate(); |
| 1242 | + writer.setPosition(0); |
| 1243 | + UUID u1 = UUID.randomUUID(); |
| 1244 | + UUID u2 = UUID.randomUUID(); |
| 1245 | + writer.startList(); |
| 1246 | + ExtensionWriter extensionWriter = writer.extension(new UuidType()); |
| 1247 | + extensionWriter.addExtensionTypeWriterFactory(new UuidWriterFactory()); |
| 1248 | + extensionWriter.writeExtension(u1); |
| 1249 | + extensionWriter.writeExtension(u2); |
| 1250 | + writer.endList(); |
| 1251 | + |
| 1252 | + writer.setValueCount(1); |
| 1253 | + |
| 1254 | + UnionListReader reader = inVector.getReader(); |
| 1255 | + assertTrue(reader.isSet(), "shouldn't be null"); |
| 1256 | + reader.setPosition(0); |
| 1257 | + reader.next(); |
| 1258 | + FieldReader uuidReader = reader.reader(); |
| 1259 | + UuidHolder holder = new UuidHolder(); |
| 1260 | + uuidReader.read(holder); |
| 1261 | + ByteBuffer bb = ByteBuffer.wrap(holder.value); |
| 1262 | + UUID actualUuid = new UUID(bb.getLong(), bb.getLong()); |
| 1263 | + assertEquals(u1, actualUuid); |
| 1264 | + reader.next(); |
| 1265 | + uuidReader = reader.reader(); |
| 1266 | + uuidReader.read(holder); |
| 1267 | + bb = ByteBuffer.wrap(holder.value); |
| 1268 | + actualUuid = new UUID(bb.getLong(), bb.getLong()); |
| 1269 | + assertEquals(u2, actualUuid); |
| 1270 | + } |
| 1271 | + } |
| 1272 | + |
1201 | 1273 | private void writeIntValues(UnionListWriter writer, int[] values) { |
1202 | 1274 | writer.startList(); |
1203 | 1275 | for (int v : values) { |
|
0 commit comments