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

Zoltan Farkas commented on AVRO-2278:
-------------------------------------

[~rskraba] Excellent points!
I would make all accesses by index to throw IndexOutOfBoundsException 
consistently. The exception I think is a better fit for this scenario.
The SpecificRecord access by name NPE behavior needs to be changed to be in 
sync with the GenericRecord.

The change in behavior might break apps, which is why we would make this change 
in a release where at lear the minor version number changes.

Will update the PR with your suggestions.

> GenericData.Record field getter not correct
> -------------------------------------------
>
>                 Key: AVRO-2278
>                 URL: https://issues.apache.org/jira/browse/AVRO-2278
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.8.2
>            Reporter: Zoltan Farkas
>            Priority: Major
>
> Currently the get field implementation is not correct in GenericData.Record:
> at: 
> https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java#L209
> {code}
>    @Override public Object get(String key) {
>       Field field = schema.getField(key);
>       if (field == null) return null;
>       return values[field.pos()];
>     }
> {code}
> The method returns null when a field is not present, making it impossible to 
> distinguish between:
> field value = null
> and
> field does not exist.
> A more "correct" implementation would be:
> {code}
>     @Override public Object get(String key) {
>       Field field = schema.getField(key);
>       if (field == null) {
>         throw new IllegalArgumentException("Invalid field " + key);
>       }
>       return values[field.pos()];
>     }
> {code}
> this will make the behavior consistent with put which will throw a exception 
> when setting a non existent field.
> when I make this change in my fork, some bugs in unit tests showed up....



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

Reply via email to