You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Sharmarke Aden (JIRA)" <ji...@apache.org> on 2013/05/14 23:25:16 UTC

[jira] [Commented] (AVRO-1245) Add Merging Functionality to Generated Builders

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

Sharmarke Aden commented on AVRO-1245:
--------------------------------------

It would be nice to use fluent method chaining to specify merge conditions though calling "newBuilder(thirdPartyRecord)" first wouldn't be as performant. Perhaps we can do something like this and delay merging until the end:

{code}
User.newBuilder()
    .ignoreNullValues()
    .ignoreEmptyStrings()
    .merge(thirdPartyRecord)
    .build();
{code}

Of course doing something like the above would require keeping state information in the builder.


[~cutting],

Any thoughts on this feature?

                
> 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