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/02/08 23:29:12 UTC

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

Sharmarke Aden created AVRO-1245:
------------------------------------

             Summary: Add Merging Functionality to Generated Builders
                 Key: AVRO-1245
                 URL: https://issues.apache.org/jira/browse/AVRO-1245
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.7.3
         Environment: Linux Mint 32-bit, Java 7, Avro 1.7.3
            Reporter: Sharmarke Aden


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