[ https://issues.apache.org/jira/browse/AVRO-2278?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17103258#comment-17103258 ]
Zoltan Farkas commented on AVRO-2278: ------------------------------------- [~anhldbk] to clarify we are discussing here the semantics of GenericRecord.get. regarding Opt #1, existence of a field can already be checked with: GenericRecord.getSchema().getField(String) !=null. In both instances, leaving get as is in my opinion is a bad idea, it has the potential to hide bugs, and I would think that is not something people want to do... > 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, 1.9.2 > Reporter: Zoltan Farkas > Assignee: 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)