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

ASF subversion and git services commented on AVRO-3370:
-------------------------------------------------------

Commit 410231a05597da7cd2dc0591db045eecf9c7a4ab in avro's branch 
refs/heads/branch-1.11 from Martin Grigorov
[ https://gitbox.apache.org/repos/asf?p=avro.git;h=410231a ]

AVRO-3370: [Spec] Inconsistent behaviour on types as invalid names. (#1525)

Support references to types named after Avro complex types (record, enum
& fixed)

Signed-off-by: Martin Tzvetanov Grigorov <[email protected]>
(cherry picked from commit 5d3931b9ed94a6a4558432f4993948329be35357)


> [Spec] Inconsistent behaviour on types as invalid names.
> --------------------------------------------------------
>
>                 Key: AVRO-3370
>                 URL: https://issues.apache.org/jira/browse/AVRO-3370
>             Project: Apache Avro
>          Issue Type: Bug
>            Reporter: Ryan Skraba
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.11.1
>
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> We've run across this in some code that interoperates between Java and Python.
> The spec [currently 
> forbids|https://avro.apache.org/docs/current/spec.html#names] using a 
> primitive type name as a keyword: _*Primitive type names have no namespace 
> and their names may not be defined in any namespace.*_
> {code:java}
> {"type":"record","name":"long","fields":[{"name":"a1","type":"long"}]} {code}
> That fails in Java with {{"org.apache.avro.AvroTypeException: Schemas may not 
> be named after primitives: long"}}
> What do we expect to happen when a named schema uses a complex type?
> {code:java}
> {"type":"record","name":"record","fields":[{"name":"a1","type":"long"}]} 
> {code}
> This currently *succeeds* in Java and the schema can be used to serialize and 
> deserialize data.
> This currently *fails* in Python with: {{avro.schema.SchemaParseException: 
> record is a reserved type name}}
> Which one is the correct behaviour?
> This gets a bit more complicated when we consider using the name as a 
> reference.
> The following two schemas both work in Java:
> {code:java}
> {"type":"record","name":"LinkedList",
> "fields":[
>   {"name":"value","type":"int},
>   {"name":"next","type":["null","LinkedList"]}]}"  {code}
> {code:java}
> {"type":"record","name":"LinkedList",
> "fields":[
>   {"name":"value","type":"int},
>   {"name":"next","type":["null",{"type":"LinkedList"}]}]}"  
> {code}
> If we rename {{LinkedList}} to {{record}} the former succeeds in Java and the 
> latter fails with {{{}org.apache.avro.SchemaParseException: No name in 
> schema: {"type":"record"{}}}}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to