You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Tom Zöhner (Jira)" <ji...@apache.org> on 2020/06/11 05:16:00 UTC

[jira] [Commented] (AVRO-2670) Inconsistent data types for logicalType = date

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

Tom Zöhner commented on AVRO-2670:
----------------------------------

Your case 3 seems to be fixed with avro 1.9.2 for the {{date}} type. If I define the following required field:
{code:java}
{
  "name" : "date",
  "type" : {
    "type" : "int",
    "logicalType" : "date"
  },
  "doc" : "The date in days from the epoch on 1 January 1970."
}
{code}
The correct java code is generated:
{code:java}
/** The date in days from the epoch on 1 January 1970. */
 private java.time.LocalDate date;
{code}
If I use the type {{timestamp-millis}} or {{timestamp-micros }}(on a required long) I get the same issue you observed: the type becomes {{java.lang.Object}}.

> Inconsistent data types for logicalType = date
> ----------------------------------------------
>
>                 Key: AVRO-2670
>                 URL: https://issues.apache.org/jira/browse/AVRO-2670
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java, logical types
>    Affects Versions: 1.9.1
>            Reporter: Marcel Stokman
>            Priority: Major
>
> When defining a date field in the avro schema the generated java class files contains different types based on the given types.
>  
> Giving a schema that contains date's, some are optional and some required.
> {code:java}
> {
>     "type": "record",
>     "name": "DateData",
>     "namespace": "com.keylane.ics.data",
>     "fields": [
>         {
>             "name": "dateAsInt",
>             "type": "int",
>             "logicalType": "date"
>         },
>         {
>             "name": "dateAsOptionalInt",
>             "type": [
>                 "null",
>                 "int"
>             ],
>             "logicalType": "date"
>         },
>         {
>             "name": "dateAsObject",
>             "type": [
>                 {
>                     "type": "int",
>                     "logicalType": "date"
>                 }
>             ]
>         },
>         {
>             "name": "dateAsOptionalLocalDate",
>             "type": [
>                 "null",
>                 {
>                     "type": "int",
>                     "logicalType": "date"
>                 }
>             ]
>         }
>     ]
> }
> {code}
>  
> The generated class file defines the 4 fields with different java types
>  
> {code:java}
>   @Deprecated public int dateAsInt;
>   @Deprecated public java.lang.Integer dateAsOptionalInt;
>   @Deprecated public java.lang.Object dateAsObject;
>   @Deprecated public java.time.LocalDate dateAsOptionalLocalDate;
> {code}
>  
> We would prefer to have the type as a LocalDate, so that case 3 and 4 give the same field definition.
>  
> Is this a bug or should the schema definition be different (and how)?
>  



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