You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Kalle Niemitalo (Jira)" <ji...@apache.org> on 2022/07/03 12:27:00 UTC

[jira] [Commented] (AVRO-3568) C# ToParsingForm normalizes logical type to "logical" rather than base type

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

Kalle Niemitalo commented on AVRO-3568:
---------------------------------------

The SchemaNormalization class was missed when support for logical types was added in AVRO-2359, [https://github.com/apache/avro/pull/492], [https://github.com/confluentinc/avro/pull/14].

In contrast, the Java library need not unwrap logical types in SchemaNormalization, because it has a {{LogicalType getLogicalType()}} method right in the Schema class, instead of defining a Schema.Type.LOGICAL constant and a LogicalSchema class.

> C# ToParsingForm normalizes logical type to "logical" rather than base type
> ---------------------------------------------------------------------------
>
>                 Key: AVRO-3568
>                 URL: https://issues.apache.org/jira/browse/AVRO-3568
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: csharp
>    Affects Versions: 1.11.0
>            Reporter: Kalle Niemitalo
>            Priority: Major
>              Labels: logical
>
> In the Avro C# library, if Avro.SchemaNormalization.ToParsingForm(Schema) is given a schema that includes a logical type, then it normalizes that just to "logical" and not to the base type. The resulting JSON cannot even be parsed by Avro.Schema.Parse(string). This also makes SchemaNormalization.ParsingFingerprint return an incorrect fingerprint for schemas that include logical types.
> h2. To reproduce
> {code:C#}
> using System;
> class Program
> {
>     static void Main()
>     {
>         var schema = Avro.Schema.Parse(
>             @"[""int"", {""type"": ""string"", ""logicalType"": ""uuid""}]");
>         string pcf = Avro.SchemaNormalization.ToParsingForm(schema);
>         Console.WriteLine(pcf);
>         Avro.Schema.Parse(pcf);
>     }
> }
> {code}
> h2. Expected result
> {noformat}
> ["int","string"]
> {noformat}
> h2. Actual result
> {noformat}
> ["int","logical"]
> Unhandled exception. Avro.SchemaParseException: Undefined name: logical at '[1]'
>    at Avro.Schema.ParseJson(JToken jtok, SchemaNames names, String encspace)
>    at Avro.UnionSchema.NewInstance(JArray jarr, PropertyMap props, SchemaNames names, String encspace)
>    at Avro.Schema.ParseJson(JToken jtok, SchemaNames names, String encspace)
>    at Avro.Schema.Parse(String json, SchemaNames names, String encspace)
>    at Avro.Schema.Parse(String json)
>    at Program.Main()
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)