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/10/14 17:45:20 UTC
[jira] [Created] (ARROW-337) UnionListWriter.list() is doing more
than it should, this can cause data corruption
Deneche A. Hakim created ARROW-337:
--------------------------------------
Summary: UnionListWriter.list() is doing more than it should, this can cause data corruption
Key: ARROW-337
URL: https://issues.apache.org/jira/browse/ARROW-337
Project: Apache Arrow
Issue Type: Bug
Components: Java - Vectors
Reporter: Deneche A. Hakim
Assignee: Steven Phillips
If you run the following code:
{code}
MapVector parent = new MapVector("parent", allocator, null);
ComplexWriter writer = new ComplexWriterImpl("root", parent);
MapWriter rootWriter = writer.rootAsMap();
ListWriter listWriter = rootWriter.list("list");
ListWriter list = listWriter.list();
rootWriter.start();
{
listWriter.startList();
{
list.startList();
list.bigInt().writeBigInt(0);
list.endList();
}
{
list.startList();
list.bigInt().writeBigInt(1);
list.endList();
}
listWriter.endList();
}
rootWriter.end();
writer.setValueCount(1);
MapReader rootReader = new SingleMapReaderImpl(parent).reader("root");
System.out.println(rootReader.reader("list").readObject());
{code}
You should expect it to print {noformat}[[0],[1]]{noformat}
but it actually prints {noformat}[[0,1]]{noformat}
If you change the code so that UnionListWriter.list() is called along with startList() then the code works fine:
{code}
MapVector parent = new MapVector("parent", allocator, null);
ComplexWriter writer = new ComplexWriterImpl("root", parent);
MapWriter rootWriter = writer.rootAsMap();
rootWriter.start();
{
ListWriter listWriter = rootWriter.list("mylist");
listWriter.startList();
{
ListWriter list = listWriter.list();
list.startList();
list.bigInt().writeBigInt(0);
list.endList();
}
{
ListWriter list = listWriter.list();
list.startList();
list.bigInt().writeBigInt(1);
list.endList();
}
listWriter.endList();
}
rootWriter.end();
writer.setValueCount(1);
MapReader rootReader = new SingleMapReaderImpl(parent).reader("root");
System.out.println(rootReader.reader("mylist").readObject());
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)