avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pierre de Frém <theped...@hotmail.com>
Subject C++: default values serialization (Patch for JIRA-1335?)
Date Tue, 19 May 2015 12:21:23 GMT
Hello, 
I made a patch to the C++ avro to be able to serialize default values in avro schemas.
Should I post the patch as a solution for JIRA-1335?https://issues.apache.org/jira/browse/AVRO-1335

What do you think of it?
Thanks in advance,
Regards.
Pierre
PS: This is my original message posted on the user list (in my patch I implemented what I
was asking below):
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hello,I'm using the avro c++ api (1.7.8) to serialize/deserialize avro files.The schema I
want to use is the following:{
    "name": "cpx",
    "type": "record",
    "fields": [
        {"name": "numbername", "type": "string"},
        {"name": "re", "type": "double"},
        {"name": "im", "type": "double", "default": 0}     ]
}I try to write programmatically the schema above in c++ in the following way:#include <avro/Schema.hh>

static avro::Schema getMySchema() {    avro::RecordSchema node0("cpx");
    {        avro::Schema node1 = avro::StringSchema();        node0.addField("numbername",
node1);    }    {        avro::Schema node1 = avro::DoubleSchema();        node0.addField("re",
node1);    }    {        avro::Schema node1 = avro::DoubleSchema();        node0.addField("im",
node1);    }
    return node0;}
Then I write the file using something like:...
...
avro::DataFileWriter<ObjAvro> pDfw_m = new avro::DataFileWriter<ObjAvro>(filename_p,
*(
                       new avro::ValidSchema(getMySchema());
...
...
const ObjAvro& avro_l = ...
pDfw_m.write(avro_l);
...
The problem is that the schema at the top of the output file created is different tothe input
schema. It looks like:{
    "name": "cpx",
    "type": "record",
    "fields": [
        {"name": "numbername", "type": "string"},
        {"name": "re", "type": "double"},
        {"name": "im", "type": "double"}     ]
}Is there a way to specify the default values directly in the c++ code above (in the method
getMySchema)? (So that the schema of my output file will match the one of my input file.)After
a look in the source code, I see where the defaultAttributes are stored for a record node,
and what the method .addField does.The method addField adds the name of the leaf to the Node
member leafNameAttributes_ and the leaf to the Node member leafAttributes_, but I can't see
a simple way to add default values to the NodeRecord member defaultValues (NodeImpl.hh).Thanks
in advance.Regards.Pierre
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 		 	   		  
Mime
  • Unnamed multipart/mixed (inline, None, 0 bytes)
View raw message