|
31 | 31 | import java.util.HashSet; |
32 | 32 | import java.util.List; |
33 | 33 | import java.util.Set; |
| 34 | +import java.util.UUID; |
34 | 35 | import org.apache.arrow.memory.ArrowBuf; |
35 | 36 | import org.apache.arrow.memory.BufferAllocator; |
36 | 37 | import org.apache.arrow.memory.RootAllocator; |
|
64 | 65 | import org.apache.arrow.vector.complex.impl.UnionMapReader; |
65 | 66 | import org.apache.arrow.vector.complex.impl.UnionReader; |
66 | 67 | import org.apache.arrow.vector.complex.impl.UnionWriter; |
| 68 | +import org.apache.arrow.vector.complex.impl.UuidWriterFactory; |
67 | 69 | import org.apache.arrow.vector.complex.reader.BaseReader.StructReader; |
68 | 70 | import org.apache.arrow.vector.complex.reader.BigIntReader; |
69 | 71 | import org.apache.arrow.vector.complex.reader.FieldReader; |
70 | 72 | import org.apache.arrow.vector.complex.reader.Float4Reader; |
71 | 73 | import org.apache.arrow.vector.complex.reader.Float8Reader; |
72 | 74 | import org.apache.arrow.vector.complex.reader.IntReader; |
73 | 75 | import org.apache.arrow.vector.complex.writer.BaseWriter.ComplexWriter; |
| 76 | +import org.apache.arrow.vector.complex.writer.BaseWriter.ExtensionWriter; |
74 | 77 | import org.apache.arrow.vector.complex.writer.BaseWriter.ListWriter; |
75 | 78 | import org.apache.arrow.vector.complex.writer.BaseWriter.MapWriter; |
76 | 79 | import org.apache.arrow.vector.complex.writer.BaseWriter.StructWriter; |
| 80 | +import org.apache.arrow.vector.holder.UuidHolder; |
77 | 81 | import org.apache.arrow.vector.holders.DecimalHolder; |
78 | 82 | import org.apache.arrow.vector.holders.DurationHolder; |
79 | 83 | import org.apache.arrow.vector.holders.FixedSizeBinaryHolder; |
|
93 | 97 | import org.apache.arrow.vector.types.pojo.ArrowType.Utf8; |
94 | 98 | import org.apache.arrow.vector.types.pojo.Field; |
95 | 99 | import org.apache.arrow.vector.types.pojo.FieldType; |
| 100 | +import org.apache.arrow.vector.types.pojo.UuidType; |
96 | 101 | import org.apache.arrow.vector.util.CallBack; |
97 | 102 | import org.apache.arrow.vector.util.DecimalUtility; |
98 | 103 | import org.apache.arrow.vector.util.JsonStringArrayList; |
@@ -2489,4 +2494,35 @@ public void unionWithVarCharAndBinaryHelpers() throws Exception { |
2489 | 2494 | "row12", new String(vector.getLargeVarBinaryVector().get(11), StandardCharsets.UTF_8)); |
2490 | 2495 | } |
2491 | 2496 | } |
| 2497 | + |
| 2498 | + @Test |
| 2499 | + public void extensionWriterReader() throws Exception { |
| 2500 | + // test values |
| 2501 | + UUID u1 = UUID.randomUUID(); |
| 2502 | + |
| 2503 | + try (NonNullableStructVector parent = NonNullableStructVector.empty("parent", allocator)) { |
| 2504 | + // write |
| 2505 | + |
| 2506 | + ComplexWriter writer = new ComplexWriterImpl("root", parent); |
| 2507 | + StructWriter rootWriter = writer.rootAsStruct(); |
| 2508 | + |
| 2509 | + { |
| 2510 | + ExtensionWriter extensionWriter = rootWriter.extension("uuid1", new UuidType()); |
| 2511 | + extensionWriter.setPosition(0); |
| 2512 | + extensionWriter.addExtensionTypeWriterFactory(new UuidWriterFactory()); |
| 2513 | + extensionWriter.writeExtension(u1); |
| 2514 | + } |
| 2515 | + // read |
| 2516 | + StructReader rootReader = new SingleStructReaderImpl(parent).reader("root"); |
| 2517 | + { |
| 2518 | + FieldReader uuidReader = rootReader.reader("uuid1"); |
| 2519 | + uuidReader.setPosition(0); |
| 2520 | + UuidHolder uuidHolder = new UuidHolder(); |
| 2521 | + uuidReader.read(uuidHolder); |
| 2522 | + final ByteBuffer bb = ByteBuffer.wrap(uuidHolder.value); |
| 2523 | + UUID actualUuid = new UUID(bb.getLong(), bb.getLong()); |
| 2524 | + assertEquals(u1, actualUuid); |
| 2525 | + } |
| 2526 | + } |
| 2527 | + } |
2492 | 2528 | } |
0 commit comments