David Maughan created AVRO-1965:
-----------------------------------

             Summary: Reparsing an existing schema mutates the schema
                 Key: AVRO-1965
                 URL: https://issues.apache.org/jira/browse/AVRO-1965
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.8.1
            Reporter: David Maughan
            Priority: Minor


h2. Overview

In certain scenarios re-parsing a schema constructed via {{SchemaBuilder}} or 
{{Schema.createRecord}} produces a schema that is no longer equal to the 
original. In the below example, after parsing the existing schema, the 
namespace of the top level record is cascaded down to the bottom level record. 
Note that the way the top level record is being created with the namespace as 
part of the name {{default.a}} is the same way Hive's {{AvroSerDe}} constructs 
a schema from a Hive table's metadata.

h2. Failing test case

{code}
Schema d = SchemaBuilder.builder().intType();
Schema c = 
SchemaBuilder.record("c").fields().name("d").type(d).noDefault().endRecord();
Schema b = 
SchemaBuilder.record("b").fields().name("c").type(c).noDefault().endRecord();

Schema a1 = 
SchemaBuilder.record("default.a").fields().name("b").type(b).noDefault().endRecord();
Schema a2 = new Schema.Parser().parse(a1.toString());

// a1 = 
{"type":"record","name":"a","namespace":"default","fields":[{"name":"b","type":{"type":"record","name":"b","namespace":"","fields":[{"name":"c","type":{"type":"record","name":"c","fields":[{"name":"d","type":"int"}]}}]}}]}
// a2 = 
{"type":"record","name":"a","namespace":"default","fields":[{"name":"b","type":{"type":"record","name":"b","namespace":"","fields":[{"name":"c","type":{"type":"record","name":"c","namespace":"default","fields":[{"name":"d","type":"int"}]}}]}}]}

assertThat(a2, is(a1));
{code}



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

Reply via email to