Repository: arrow Updated Branches: refs/heads/master 2d8e82056 -> 1196691e2
ARROW-326: Initialize nested writers in MapWriter based on the underlying MapVector's field Closes #163 Project: http://git-wip-us.apache.org/repos/asf/arrow/repo Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/1196691e Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/1196691e Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/1196691e Branch: refs/heads/master Commit: 1196691e221c5b00bbf9bf47eead6f684b61fe62 Parents: 2d8e820 Author: Steven Phillips <ste...@dremio.com> Authored: Fri Oct 7 13:12:35 2016 -0700 Committer: Steven Phillips <ste...@dremio.com> Committed: Fri Oct 7 14:43:27 2016 -0700 ---------------------------------------------------------------------- .../src/main/codegen/templates/MapWriters.java | 22 ++++++++++++++++++++ .../complex/impl/TestPromotableWriter.java | 21 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/arrow/blob/1196691e/java/vector/src/main/codegen/templates/MapWriters.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/MapWriters.java b/java/vector/src/main/codegen/templates/MapWriters.java index 7f319a9..9fe20df 100644 --- a/java/vector/src/main/codegen/templates/MapWriters.java +++ b/java/vector/src/main/codegen/templates/MapWriters.java @@ -56,6 +56,28 @@ public class ${mode}MapWriter extends AbstractFieldWriter { } </#if> this.container = container; + for (Field child : container.getField().getChildren()) { + switch (Types.getMinorTypeForArrowType(child.getType())) { + case MAP: + map(child.getName()); + break; + case LIST: + list(child.getName()); + break; + case UNION: + UnionWriter writer = new UnionWriter(container.addOrGet(child.getName(), MinorType.UNION, UnionVector.class)); + fields.put(child.getName().toLowerCase(), writer); + break; +<#list vv.types as type><#list type.minor as minor> +<#assign lowerName = minor.class?uncap_first /> +<#if lowerName == "int" ><#assign lowerName = "integer" /></#if> +<#assign upperName = minor.class?upper_case /> + case ${upperName}: + ${lowerName}(child.getName()); + break; +</#list></#list> + } + } } @Override http://git-wip-us.apache.org/repos/asf/arrow/blob/1196691e/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java ---------------------------------------------------------------------- diff --git a/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java b/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java index 689c96f..d439ceb 100644 --- a/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java +++ b/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java @@ -21,13 +21,16 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import org.apache.arrow.flatbuf.Type; import org.apache.arrow.memory.BufferAllocator; import org.apache.arrow.vector.DirtyRootAllocator; import org.apache.arrow.vector.complex.AbstractMapVector; import org.apache.arrow.vector.complex.MapVector; import org.apache.arrow.vector.complex.NullableMapVector; import org.apache.arrow.vector.complex.UnionVector; +import org.apache.arrow.vector.complex.writer.BaseWriter.MapWriter; import org.apache.arrow.vector.types.Types.MinorType; +import org.apache.arrow.vector.types.pojo.Field; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -50,7 +53,7 @@ public class TestPromotableWriter { @Test public void testPromoteToUnion() throws Exception { - try (final AbstractMapVector container = new MapVector(EMPTY_SCHEMA_PATH, allocator, null); + try (final MapVector container = new MapVector(EMPTY_SCHEMA_PATH, allocator, null); final NullableMapVector v = container.addOrGet("test", MinorType.MAP, NullableMapVector.class); final PromotableWriter writer = new PromotableWriter(v, container)) { @@ -92,6 +95,22 @@ public class TestPromotableWriter { assertFalse("4 shouldn't be null", accessor.isNull(4)); assertEquals(100, accessor.getObject(4)); + + container.clear(); + container.allocateNew(); + + ComplexWriterImpl newWriter = new ComplexWriterImpl(EMPTY_SCHEMA_PATH, container); + + MapWriter newMapWriter = newWriter.rootAsMap(); + + newMapWriter.start(); + + newMapWriter.setPosition(2); + newMapWriter.integer("A").writeInt(10); + + Field childField = container.getField().getChildren().get(0).getChildren().get(0); + assertEquals("Child field should be union type: " + childField.getName(), Type.Union, childField.getType().getTypeType()); + } } }