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

Ryan Skraba commented on AVRO-2872:
-----------------------------------

I think most actual use cases of UNION are to make a field nullable, so it 
should be alright to apply your fix if and only if the UNION contains a logical 
type plus NULL.

Other cases should be rare, so if we maintain the existing behaviour for UNIONs 
with three branches, or two logical types or some other non-obvious conversion, 
then we are (at worst) _equally_ buggy as we are today for those cases.  That's 
why I'm curious about the symptoms we're seeing today!

I would expect the first three fields in the following record to find the 
Converter correctly -- today only the first one does!

{code}
{
  "type": "record",  "name": "Messages",
  "fields": [ {
    "name": "timestamp",
    "type": { "type": "long", "logicalType": "timestamp-millis" }
    }, {
      "name": "unionWithOnlyTimestamp",
      "type": [ { "type": "long", "logicalType": "timestamp-millis" } ]
    }, {
      "name": "nullableTimestamp",
      "type": [ "null", { "type": "long", "logicalType": "timestamp-millis" } ]
    }, {
      "name": "dateOrTimestamp",
      "type": [ { "type": "int", "logicalType": "date" }, { "type": "long", 
"logicalType": "timestamp-millis" } ]
    }]
}
{code}

> 'conversions' array is not populated for Avro Union Logicaltype fields 
> -----------------------------------------------------------------------
>
>                 Key: AVRO-2872
>                 URL: https://issues.apache.org/jira/browse/AVRO-2872
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: logical types
>    Affects Versions: 1.9.2
>         Environment: * Apache Avro Version [1.9.2]
> * Java Version [11]
>            Reporter: Pádraig de Buitléar
>            Priority: Minor
>
> Steps to reproduce :
>  # Using the maven/gradle plugin generate code with the following avsc:
>    
> {code:java}
> {
>   "type": "record",
>   "name": "Messages",
>   "namespace": "com.somedomain",
>   "fields": [
>     {
>       "name": "start",
>       "type": {
>         "type": "long",
>         "logicalType": "timestamp-millis"
>       }
>     },
>     {
>       "name": "optional_date",
>       "type": [
>         "null",
>         {
>           "type": "long",
>           "logicalType": "timestamp-millis"
>         }
>       ],
>       "default": null
>     }
>   ]
> }{code}
>  
> *Actual behavior*
>  In the generated code, the return types of the getter methods for both 
> fields are correct, however the conversions array only has an element for the 
> field which isn't a union.
>   
> {code:java}
>   private static final org.apache.avro.Conversion<?>[] conversions =
>       new org.apache.avro.Conversion<?>[] {
>       new org.apache.avro.data.TimeConversions.TimestampMillisConversion(),
>       null,
>       null
>   };
> {code}
>  
> *Expected output:*
>  Based on the above avsc the following is expected.
>   
> {code:java}
>   private static final org.apache.avro.Conversion[] conversions =
>       new org.apache.avro.Conversion[] {
>       new org.apache.avro.data.TimeConversions.TimestampMillisConversion(),
>       new org.apache.avro.data.TimeConversions.TimestampMillisConversion(),
>       null
>   };
> {code}
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to