[ 
https://issues.apache.org/jira/browse/AVRO-1674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Charlie Quillard updated AVRO-1674:
-----------------------------------
    Description: 
I have to implement an optional field in my avro schema and when i test this 
one with avro-py that works and that does not works with avro-cpp.

That is my schema (cpx.json) :
{code}
{
  "type" : "record",
  "name" : "example",
  "fields" : [
    {
      "name": "city",
      "type": ["null", "string"],
      "defaults":null
    }
  ]
}
{code}

That is my cpp code:
{code}
typedef std::pair<avro::ValidSchema, avro::GenericDatum> Pair;

int main(int ac, char **av)
{

    std::ifstream ifs("cpx.json");
    avro::ValidSchema schema;
    avro::compileJsonSchema(ifs, schema);

    Pair p(schema, avro::GenericDatum());

    avro::GenericDatum &Data = p.second;
    Data = avro::GenericDatum(schema);
    avro::GenericRecord &sReord = Data.value<avro::GenericRecord>();
    sReord.setFieldAt(sReord.fieldIndex("city"), avro::GenericDatum("test"));
    avro::DataFileWriter<Pair> dataFileWriter("test.bin", schema);
    dataFileWriter.write(p);
    dataFileWriter.close();
}
{code}

This is my error when i transform my binary to json with avo-tools :
{quote}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
        at 
org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:402)
        at 
org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
        at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
        at 
org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
        at 
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
        at 
org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
        at 
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
        at 
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
        at 
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
        at org.apache.avro.file.DataFileStream.next(DataFileStream.java:233)
        at org.apache.avro.file.DataFileStream.next(DataFileStream.java:220)
        at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:77)
        at org.apache.avro.tool.Main.run(Main.java:84)
        at org.apache.avro.tool.Main.main(Main.java:73)
{quote}

  was:
I have to implement an optional field in my avro schema and when i test this 
one with avro-py that works and that does not works with avro-cpp.

That is my schema (cpx.json) :
{code}
{
  "type" : "record",
  "name" : "example",
  "fields" : [
    {
      "name": "city",
      "type": ["null", "string"],
      "defaults":null
    }
  ]
}
{code}

That is my cpp code when i test without fill my field:
{code}
typedef std::pair<avro::ValidSchema, avro::GenericDatum> Pair;

int main(int ac, char **av)
{

    std::ifstream ifs("cpx.json");
    avro::ValidSchema schema;
    avro::compileJsonSchema(ifs, schema);

    Pair p(schema, avro::GenericDatum());

    avro::GenericDatum &Data = p.second;
    Data = avro::GenericDatum(schema);
    avro::GenericRecord &sReord = Data.value<avro::GenericRecord>();
    sReord.setFieldAt(sReord.fieldIndex("city"), avro::GenericDatum("test"));
    avro::DataFileWriter<Pair> dataFileWriter("test.bin", schema);
    dataFileWriter.write(p);
    dataFileWriter.close();
}
{code}

This is my error when i transform my binary to json with avo-tools :
{quote}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
        at 
org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:402)
        at 
org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
        at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
        at 
org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
        at 
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
        at 
org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
        at 
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
        at 
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
        at 
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
        at org.apache.avro.file.DataFileStream.next(DataFileStream.java:233)
        at org.apache.avro.file.DataFileStream.next(DataFileStream.java:220)
        at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:77)
        at org.apache.avro.tool.Main.run(Main.java:84)
        at org.apache.avro.tool.Main.main(Main.java:73)
{quote}


> Optional field does not work in avro-cpp
> ----------------------------------------
>
>                 Key: AVRO-1674
>                 URL: https://issues.apache.org/jira/browse/AVRO-1674
>             Project: Avro
>          Issue Type: Bug
>          Components: c++
>    Affects Versions: 1.7.7
>            Reporter: Charlie Quillard
>
> I have to implement an optional field in my avro schema and when i test this 
> one with avro-py that works and that does not works with avro-cpp.
> That is my schema (cpx.json) :
> {code}
> {
>   "type" : "record",
>   "name" : "example",
>   "fields" : [
>     {
>       "name": "city",
>       "type": ["null", "string"],
>       "defaults":null
>     }
>   ]
> }
> {code}
> That is my cpp code:
> {code}
> typedef std::pair<avro::ValidSchema, avro::GenericDatum> Pair;
> int main(int ac, char **av)
> {
>     std::ifstream ifs("cpx.json");
>     avro::ValidSchema schema;
>     avro::compileJsonSchema(ifs, schema);
>     Pair p(schema, avro::GenericDatum());
>     avro::GenericDatum &Data = p.second;
>     Data = avro::GenericDatum(schema);
>     avro::GenericRecord &sReord = Data.value<avro::GenericRecord>();
>     sReord.setFieldAt(sReord.fieldIndex("city"), avro::GenericDatum("test"));
>     avro::DataFileWriter<Pair> dataFileWriter("test.bin", schema);
>     dataFileWriter.write(p);
>     dataFileWriter.close();
> }
> {code}
> This is my error when i transform my binary to json with avo-tools :
> {quote}
> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
>       at 
> org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:402)
>       at 
> org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
>       at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
>       at 
> org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
>       at 
> org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
>       at 
> org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
>       at org.apache.avro.file.DataFileStream.next(DataFileStream.java:233)
>       at org.apache.avro.file.DataFileStream.next(DataFileStream.java:220)
>       at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:77)
>       at org.apache.avro.tool.Main.run(Main.java:84)
>       at org.apache.avro.tool.Main.main(Main.java:73)
> {quote}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to