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
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------