You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Gabor Szadovszky (JIRA)" <ji...@apache.org> on 2017/02/13 12:49:41 UTC

[jira] [Commented] (AVRO-1965) Reparsing an existing schema mutates the schema

    [ https://issues.apache.org/jira/browse/AVRO-1965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15863610#comment-15863610 ] 

Gabor Szadovszky commented on AVRO-1965:
----------------------------------------

It looks good to me.

> 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
>            Assignee: Doug Cutting
>             Fix For: 1.8.2
>
>         Attachments: AVRO-1965.patch
>
>
> 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.15#6346)