[ https://issues.apache.org/jira/browse/AVRO-1245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13659307#comment-13659307 ]
Scott Carey commented on AVRO-1245: ----------------------------------- Another possibility is to do it all at builder construction time -- there is less to do when you are guaranteed a clean-slate, and the existing record must be walked at least once for a deep copy anyway. {code} boolean replaceNullsWithDefaults = true; boolean replaceEmptyStringsWithDefaults = true; User.newBuilder(thirdPartyRedord, replaceNullsWithDefaults, replaceEmptyStringsWithDefaults); {code} This bears resemblance to one of our other ideas -- that there is no 'read' and 'write', only 'from' and 'to' -- a deep copy is like serializing 'from' one object 'to' another (rather than to binary, etc). Replacing values is a special case of schema resolution when translating data from one object to another. > Add Merging Functionality to Generated Builders > ----------------------------------------------- > > Key: AVRO-1245 > URL: https://issues.apache.org/jira/browse/AVRO-1245 > Project: Avro > Issue Type: Improvement > Components: java > Affects Versions: 1.7.3 > Environment: Linux Mint 32-bit, Java 7, Avro 1.7.3 > Reporter: Sharmarke Aden > Priority: Minor > > Suppose I have a record with the following schema and default values: > {code} > { > "type": "record", > "namespace": "test", > "name": "User", > "fields": [ > { > "name": "user", > "type": ["null", "string"], > "default": null > }, > { > "name": "privacy", > "type": [ > { > "type": "enum", > "name": "Privacy", > "namespace": "test", > "symbols": ["Public", "Private"] > }, > "null" > ], > "default": "Private" > } > ] > } > {code} > Now suppose I have a record supplied to me by a third party whose privacy > field value is null. Currently if you call > "Builder.newBuilder(thirdPartyRecord)" it simply creates a new record with > same values as the source record (privacy is null in the newly created > builder). > It's very important that the privacy value be set and so ideally I would like > to perform a merge to mitigate any issues with default values being absent in > the source record. I would like to propose that a new enhancement be added to > the Builder to support merging of a source record to a new record. Perhaps > something like this: > {code} > // recordWithoutDefaults record passed in. > User.Builder builder = User.newBuilder(); > //ignore null values in the source record if the schema has a default > //value for the field > boolean ignoreNull = true; > //ignore empty string values in the source record for string field > //types with default field values > boolean ignoreEmptyString = true; > //while this is simple and useful in my use-case perhaps there's a > //better/refined way of supporting veracious merging models > builder.merge(recordWithoutDefaults, ignoreNull, ignoreEmptyString); > {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira