You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Deneche A. Hakim (JIRA)" <ji...@apache.org> on 2016/09/28 19:31:20 UTC
[jira] [Commented] (ARROW-308) UnionListWriter.setPosition() should
not call startList()
[ https://issues.apache.org/jira/browse/ARROW-308?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15530623#comment-15530623 ]
Deneche A. Hakim commented on ARROW-308:
----------------------------------------
openend [PR#150|https://github.com/apache/arrow/pull/150]
> UnionListWriter.setPosition() should not call startList()
> ---------------------------------------------------------
>
> Key: ARROW-308
> URL: https://issues.apache.org/jira/browse/ARROW-308
> Project: Apache Arrow
> Issue Type: Bug
> Components: Java - Vectors
> Reporter: Deneche A. Hakim
> Assignee: Deneche A. Hakim
>
> UnionListWriter.setPosition() is implemented as follows:
> {code}
> @Override
> public void setPosition(int index) {
> super.setPosition(index);
> startList();
> }
> {code}
> It works fine, but if you run the following code:
> {code}
> MapVector parent = new MapVector("parent", allocator, null);
> ComplexWriter writer = new ComplexWriterImpl("root", parent);
> MapWriter rootWriter = writer.rootAsMap();
> rootWriter.start();
> rootWriter.bigInt("int").writeBigInt(0);
> rootWriter.list("list").startList();
> rootWriter.list("list").bigInt().writeBigInt(0);
> rootWriter.list("list").endList();
> rootWriter.end();
> rootWriter.setPosition(1);
> rootWriter.start();
> rootWriter.bigInt("int").writeBigInt(1);
> rootWriter.end();
> rootWriter.setPosition(2);
> rootWriter.bigInt("int").writeBigInt(2);
> rootWriter.start();
> rootWriter.list("list").startList();
> rootWriter.list("list").bigInt().writeBigInt(2);
> rootWriter.list("list").endList();
> rootWriter.end();
> writer.setValueCount(3);
> for (int i = 0; i < 3; i++) {
> parent.getReader().setPosition(i);
> System.out.printf("%d: %s%n", i, parent.getReader().readObject());
> }
> {code}
> You get:
> {noformat}
> 0: {"root":{"int":0,"list":[0]}}
> 1: {"root":{"int":1,"list":[]}}
> 2: {"root":{"int":2,"list":[2]}}
> {noformat}
> Even though we didn't write anything in the 2nd row "list", it shows up as empty instead of null. I tracked the problem to UnionListWriter.setPosition() calling startList() which marks the row as not null even if we don't write anything to it.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)