[ 
https://issues.apache.org/jira/browse/AVRO-2648?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jeffrey Mullins updated AVRO-2648:
----------------------------------
    Description: 
Validation of numeric default values is incorrect and results in API 
inconsistencies. Below are a few examples.

Double value as int default value:
{code:java}
 public void testDoubleAsIntDefaultValue() {
    Schema.Field field = new Schema.Field("myField", 
Schema.create(Schema.Type.INT), "doc", 1.1);
    field.hasDefaultValue(); // true
    field.defaultValue(); // internal DoubleNode (1.1)
    field.defaultVal(); // null
    GenericData.get().getDefaultValue(field); // Integer (1)
    
    field = new Schema.Field("myField", Schema.create(Schema.Type.INT), "doc", 
1.0);
    field.hasDefaultValue(); // true
    field.defaultValue(); // internal DoubleNode (1.0)
    field.defaultVal(); // null
    GenericData.get().getDefaultValue(field); // Integer (1)
}{code}
 

{color:#172b4d}Invalid long as int default value:{color}
{code:java}
 public void testInvalidLongAsIntDefault() {
    Schema.Field field = new Schema.Field("myField", 
Schema.create(Schema.Type.INT), "doc", Integer.MAX_VALUE + 1L);
    field.hasDefaultValue(); // true
    field.defaultValue(); // internal LongNode (2147483648)
    field.defaultVal(); // Long (2147483648)
    GenericData.get().getDefaultValue(field); // Integer (-2147483648)
}{code}
Additionally, since the underlying Schema.FIeld.defaultValue() is no longer 
public it's not possible for users to disable default value validation and 
reliably validate schemas independently.

  was:
Validation of numeric default values is incorrect and results in API 
inconsistencies. Below are a few examples.

Double value as int default value:
{code:java}
 public void testDoubleAsIntDefaultValue() {
    Schema.Field field = new Schema.Field("myField", 
Schema.create(Schema.Type.INT), "doc", 1.1);
    field.hasDefaultValue(); // true
    field.defaultValue(); // internal DoubleNode (1.1)
    field.defaultVal(); // null
    GenericData.get().getDefaultValue(field); // Integer (1)
    
    field = new Schema.Field("myField", Schema.create(Schema.Type.INT), "doc", 
1.0);
    field.hasDefaultValue(); // true
    field.defaultValue(); // internal DoubleNode (1.0)
    field.defaultVal(); // null
    GenericData.get().getDefaultValue(field); // Integer (1)
}{code}
 

{color:#172b4d}Invalid long as int default value:{color}
{code:java}
 public void testInvalidLongAsIntDefault() {
    Schema.Field field = new Schema.Field("myField", 
Schema.create(Schema.Type.INT), "doc", Integer.MAX_VALUE + 1L);
    field.hasDefaultValue(); // true
    field.defaultValue(); // internal LongNode (2147483648)
    field.defaultVal(); // Lone (2147483648)
    GenericData.get().getDefaultValue(field); // Integer (-2147483648)
}{code}

Additionally, since the underlying Schema.FIeld.defaultValue() is no longer 
public it's not possible for users to disable default value validation and 
reliably validate schemas independently.


> Incorrect validation of numeric default values
> ----------------------------------------------
>
>                 Key: AVRO-2648
>                 URL: https://issues.apache.org/jira/browse/AVRO-2648
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java
>            Reporter: Jeffrey Mullins
>            Assignee: Jeffrey Mullins
>            Priority: Major
>
> Validation of numeric default values is incorrect and results in API 
> inconsistencies. Below are a few examples.
> Double value as int default value:
> {code:java}
>  public void testDoubleAsIntDefaultValue() {
>     Schema.Field field = new Schema.Field("myField", 
> Schema.create(Schema.Type.INT), "doc", 1.1);
>     field.hasDefaultValue(); // true
>     field.defaultValue(); // internal DoubleNode (1.1)
>     field.defaultVal(); // null
>     GenericData.get().getDefaultValue(field); // Integer (1)
>     
>     field = new Schema.Field("myField", Schema.create(Schema.Type.INT), 
> "doc", 1.0);
>     field.hasDefaultValue(); // true
>     field.defaultValue(); // internal DoubleNode (1.0)
>     field.defaultVal(); // null
>     GenericData.get().getDefaultValue(field); // Integer (1)
> }{code}
>  
> {color:#172b4d}Invalid long as int default value:{color}
> {code:java}
>  public void testInvalidLongAsIntDefault() {
>     Schema.Field field = new Schema.Field("myField", 
> Schema.create(Schema.Type.INT), "doc", Integer.MAX_VALUE + 1L);
>     field.hasDefaultValue(); // true
>     field.defaultValue(); // internal LongNode (2147483648)
>     field.defaultVal(); // Long (2147483648)
>     GenericData.get().getDefaultValue(field); // Integer (-2147483648)
> }{code}
> Additionally, since the underlying Schema.FIeld.defaultValue() is no longer 
> public it's not possible for users to disable default value validation and 
> reliably validate schemas independently.



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

Reply via email to