Hi Jack, Yes, this is the issue being fixed with this ticket! Please test the branch against your local work and report back! Thank you!
Martin On Mon, Mar 7, 2022 at 12:20 AM Jack Klamer <[email protected]> wrote: > This may be related to another issue I am currently facing while working on > avro_derive. Right now, schema parsing will replace Schema::Ref 's inside > the json, with the fully qualified definitions, and when printing the > canonical form, it uses the fully qualifies definition: > Parsing this schema: > { > "type":"record", > "name":"TestStruct", > "fields": [ > { > "name":"a", > "type":{ > "type":"record", > "name": "Inner", > "fields": [ { > "name":"z", > "type":"int" > }] > } > }, > { > "name":"b", > "type":"Inner" > } > ] > } > Results in this internal Schema enum representation: > Record { > name: Name { name: "TestStruct", namespace: None, aliases: None }, > doc: None, > fields: [ > RecordField { > name: "a", > doc: None, > default: None, > schema: Record { > name: Name { name: "Inner", namespace: None, aliases: None }, > doc: None, > fields: [ > RecordField { > name: "z", > doc: None, > default: None, > schema: Int, > order: Ascending, > position: 0 > } > ], > lookup: {"z": 0} > }, > order: Ascending, position: 0 }, > RecordField { > name: "b", > doc: None, > default: None, > schema: Record { > name: Name { name: "Inner", namespace: None, aliases: None }, > doc: None, > fields: [ > RecordField { > name: "z", > doc: None, default: None, > schema: Int, > order: Ascending, > position: 0 > } > ], > lookup: {"z": 0} > }, > order: Ascending, position: 1 } > ], > lookup: {"a": 0, "b": 1} } > > which results in this cannotical form: > { > "name": "TestStruct", > "type": "record", > "fields": [ > { > "name": "a", > "type": { > "name": "Inner", > "type": "record", > "fields": [ > { > "name": "z", > "type": "int" > } > ] > } > }, > { > "name": "b", > "type": { > "name": "Inner", > "type": "record", > "fields": [ > { > "name": "z", > "type": "int" > } > ] > } > } > ] > } > > > TLDR: > Parsing and printing a schema with Shema::Ref's in the schema definition > results in a printed definition that is logically different than the input. > > On Sun, Mar 6, 2022 at 3:14 PM ASF subversion and git services (Jira) < > [email protected]> wrote: > > > > > [ > > > https://issues.apache.org/jira/browse/AVRO-3433?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17502017#comment-17502017 > > ] > > > > ASF subversion and git services commented on AVRO-3433: > > ------------------------------------------------------- > > > > Commit e64fe245707647251e462d126cabaccce0aa9191 in avro's branch > > refs/heads/avro-3433-preserve-schema-ref-in-json from Martin Tzvetanov > > Grigorov > > [ https://gitbox.apache.org/repos/asf?p=avro.git;h=e64fe24 ] > > > > AVRO-3433: Use Name as a key for parsed/resolving/input schemata > > > > This is needed to have the fullname (namespace + '.' + name) for lookups > > > > Signed-off-by: Martin Tzvetanov Grigorov <[email protected]> > > > > > > > Rust: The canonical form should preserve schema references > > > ---------------------------------------------------------- > > > > > > Key: AVRO-3433 > > > URL: https://issues.apache.org/jira/browse/AVRO-3433 > > > Project: Apache Avro > > > Issue Type: Bug > > > Components: rust > > > Affects Versions: 1.12.0 > > > Reporter: Martin Tzvetanov Grigorov > > > Assignee: Martin Tzvetanov Grigorov > > > Priority: Major > > > Labels: pull-request-available > > > Time Spent: 10m > > > Remaining Estimate: 0h > > > > > > Reported at [ > > https://github.com/flavray/avro-rs/issues/182#issuecomment-1059762821] > > > ================================= > > > There still seems to be an issue with {{can't refine}} errors, at least > > in some non-recursive cases. Take the following example: > > > {code:java} > > > fn main() { > > > let schema = r#" > > > { > > > "name": "test.test", > > > "type": "record", > > > "fields": [ > > > { > > > "name": "bar", > > > "type": { "name": "test.foo", "type": "record", "fields": [{ > > "name": "id", "type": "long" }] } > > > }, > > > { "name": "baz", "type": "test.foo" } > > > ] > > > } > > > "#; > > > let schema = > > apache_avro::schema::Schema::parse_str(&schema).unwrap(); > > > println!("{}", serde_json::to_string(&schema).unwrap()); > > > } {code} > > > This prints the following (the same thing happens if the {{test.foo}} > > definition is in a separate file): > > > {code:java} > > > $ target/release/avro-test | jq > > > { > > > "type": "record", > > > "name": "test.test", > > > "fields": [ > > > { > > > "name": "bar", > > > "type": { > > > "type": "record", > > > "name": "test.foo", > > > "fields": [ > > > { > > > "name": "id", > > > "type": "long" > > > } > > > ] > > > } > > > }, > > > { > > > "name": "baz", > > > "type": { > > > "type": "record", > > > "name": "test.foo", > > > "fields": [ > > > { > > > "name": "id", > > > "type": "long" > > > } > > > ] > > > } > > > } > > > ] > > > } {code} > > > Which will cause the Java tooling to fail with the > > {{org.apache.avro.SchemaParseException: Can't redefine: test}} error > above. > > > > > > > > -- > > This message was sent by Atlassian Jira > > (v8.20.1#820001) > > >
