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)