C++ generate nullable types for optional fields int the schema 
---------------------------------------------------------------

                 Key: AVRO-840
                 URL: https://issues.apache.org/jira/browse/AVRO-840
             Project: Avro
          Issue Type: Improvement
          Components: c++
            Reporter: Ramana Suvarapu
            Priority: Critical


To represent optional fields, we use unions in our schema. See the example 
below.
{
   "type" : "record",
   "name" : "Contact",
   "fields" : [ 
    {"name" : "FirstName","type" : ["string" ]},
    {"name" : "MiddleName","type" : [null, "string" ]},
    {"name" : "LastName",  "type" : ["string" ]},
    {"name" : "PhoneNum","type" : [null, "string" ]},
    {"name" : "Id","type" : [null, "long" ]}
   ] 
}
In this schema PhoneNum, MiddleName and Id fields are declared as unions as 
they are optional fields.  For this schema, Avrogencpp generates Contact 
structure and 3 separate union structures for each of the optional fields in 
the schema.

struct  Contact
{
    String FirstName;
    String LastName;
    Union_0 MiddleName;
    Union_1 PhoneNum;
    Union_3 Id;                        
}
Instead is it possible to create a new template based NullableType to represent 
optional fields. Basically if the schema has union with 2 fields and first 
field is null, it should generate Nullable type.

For the above scheme, it should generate something like this.
struct  Contact
{
   String FirstName;
   String LastName;
   Nullable<string> MiddleName;
   Nullable<string> PhoneNum;
   Nullable< long > Id;                         
}
This will reduce the number of generated unions in generated code and improve 
the readability and usability of the code.

Let me know if it's feasible to implement this.
Thanks,
Ramana


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to