You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "John McClean (JIRA)" <ji...@apache.org> on 2016/09/09 21:56:20 UTC

[jira] [Created] (AVRO-1912) C++ Resolving Decoding doesn't work if element removed from record in array.

John McClean created AVRO-1912:
----------------------------------

             Summary: C++ Resolving Decoding doesn't work if element removed from record in array.
                 Key: AVRO-1912
                 URL: https://issues.apache.org/jira/browse/AVRO-1912
             Project: Avro
          Issue Type: Bug
            Reporter: John McClean


Writer schema:
{code}
{ 
    "type": "record",
    "name": "TestRecord",
    "fields": [
        {
            "name": "array",
            "type": {
                "type": "array",
                "items": {
                    "name": "item",
                    "type": "record",
                    "fields": [
                        { "name": "A", "type": "string" },
                        { "name": "B", "type": "string", "default": "foo" }
                    ]
                }
            }
        }
    ] 
}
{code}

Reader schema:

{code}
{ 
    "type": "record",
    "name": "TestRecord",
    "fields": [
        {
            "name": "array",
            "type": {
                "type": "array",
                "items": {
                    "name": "item",
                    "type": "record",
                    "fields": [
                        { "name": "A", "type": "string" }
                    ]
                }
            }
        }
    ] 
}
{code}

Data is:	
{code}
{
  "array": [
    {
      "A": "",
      "B": ""
    }
  ]
}
{code}
The following code fails with an exception “Expected: Repeater got String”. The equivalent java code works fine on the same schema and data.

{code}
auto decoder = avro::resolvingDecoder(writerSchema,
                                      readerSchema,
                                      avro::jsonDecoder(writerSchema));

strinstream ss = loadData();  
auto_ptr<avro::InputStream> in = avro::istreamInputStream(ss);
decoder->init(*in);

auto record = reader::TestRecord();
decode(*decoder, record);
{code}
I stepped through the code and what seems to be happening is that the code is treating “A” and “B” as distinct elements in the array, as if the array had two elements rather than one. 

I'm not sure how to go about fixing this. Any pointers would be appreciated. (I don't think it's my C++ test code. It works fine if the record above isn't in an array.)



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