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)