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)