[ https://issues.apache.org/jira/browse/AVRO-1994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15864171#comment-15864171 ]
Thiruvalluvan M. G. commented on AVRO-1994: ------------------------------------------- Hi [~da77a] I did consider the option of having some Null type. The reason I decided to handle nulls specifically is to avoid requiring value for Null type. It is always a problem with Null (or void) types. Java has some ugly corner issues with void and Void. C++ used to have template issues with void types. Your solution, as you point out, makes a more uniform treatment of Nulls. The only practical use of null seems to be a branch of a union. The C++ handles it in a specific way not similar to the other types. Again the reason is not having a value for null type. I think set_null() and is_null() is cleaner than set_null(blank) and get_null(). So, not using {{boost::blank}} in structs is in a way consistent with what we already do with unions. That is, while uniform treatment of nulls with other type is appealing, using a blank value looks artificial. But I can go either way. When you are ready, please go ahead and submit your patch. > C++ Code Generator Generates Invalid Code if Field is of type Null > ------------------------------------------------------------------ > > Key: AVRO-1994 > URL: https://issues.apache.org/jira/browse/AVRO-1994 > Project: Avro > Issue Type: Bug > Components: c++ > Reporter: Darryl Green > Attachments: AVRO-1994.patch > > > An simple schema like this: > { > "name": "TestPrimitiveTypes", > "type": "record", > "fields": [ > { "name": "Null", "type": "null" }, > { "name": "Boolean", "type": "boolean" }, > { "name": "Int", "type": "int" }, > { "name": "Long", "type": "long" }, > { "name": "Float", "type": "float" }, > { "name": "Double", "type": "double" }, > { "name": "Bytes", "type": "bytes" }, > { "name": "String", "type": "string" } > ] > } > Generates this C++ struct. > struct TestPrimitiveTypes { > $Undefined$ Null; // <-- BUG! > bool Boolean; > int32_t Int; > int64_t Long; > float Float; > double Double; > std::vector<uint8_t> Bytes; > std::string String; > TestPrimitiveTypes() : > Null($Undefined$()), > Boolean(bool()), > Int(int32_t()), > Long(int64_t()), > Float(float()), > Double(double()), > Bytes(std::vector<uint8_t>()), > String(std::string()) > { } > }; > Note the C++ type of the field Null is $Undefined$ which is obviously > invalid/won't compile. -- This message was sent by Atlassian JIRA (v6.3.15#6346)