Repository: avro
Updated Branches:
  refs/heads/master ec8514f71 -> 230c7e753


Fix for AVRO-1994: C++ Code Generator Generates Invalid Code if Field is of 
type Null


Project: http://git-wip-us.apache.org/repos/asf/avro/repo
Commit: http://git-wip-us.apache.org/repos/asf/avro/commit/230c7e75
Tree: http://git-wip-us.apache.org/repos/asf/avro/tree/230c7e75
Diff: http://git-wip-us.apache.org/repos/asf/avro/diff/230c7e75

Branch: refs/heads/master
Commit: 230c7e75392d3c3dc2598f027603b4fc9d78d041
Parents: ec8514f
Author: Thiruvalluvan M. G <[email protected]>
Authored: Sun Feb 19 21:47:01 2017 +0530
Committer: Thiruvalluvan M G <[email protected]>
Committed: Sun Feb 19 21:47:01 2017 +0530

----------------------------------------------------------------------
 CHANGES.txt                      |  2 ++
 lang/c++/CMakeLists.txt          |  3 ++-
 lang/c++/api/Specific.hh         | 24 ++++++++++++++++++++++++
 lang/c++/impl/avrogencpp.cc      |  2 ++
 lang/c++/jsonschemas/bigrecord   |  4 ++++
 lang/c++/test/AvrogencppTests.cc |  1 +
 6 files changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/avro/blob/230c7e75/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 83c9a4d..93ea0d7 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -141,6 +141,8 @@ Trunk (not yet released)
 
     AVRO-1892. C++ library cannot parse unions with default values (Hua Zhang 
via thiru)
 
+    AVRO-1994. C++ Code Generator Generates Invalid Code if Field is of type 
Null (Darryl Green via thiru)
+
 Avro 1.8.1 (14 May 2016)
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/avro/blob/230c7e75/lang/c++/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/lang/c++/CMakeLists.txt b/lang/c++/CMakeLists.txt
index c9ba587..cf18243 100644
--- a/lang/c++/CMakeLists.txt
+++ b/lang/c++/CMakeLists.txt
@@ -128,6 +128,7 @@ gen (circulardep cd)
 gen (tree1 tr1)
 gen (tree2 tr2)
 gen (crossref cr)
+gen (primitivetypes pt)
 
 add_executable (avrogencpp impl/avrogencpp.cc)
 target_link_libraries (avrogencpp avrocpp_s ${Boost_LIBRARIES})
@@ -157,7 +158,7 @@ add_dependencies (AvrogencppTests bigrecord_hh 
bigrecord_r_hh bigrecord2_hh
     tweet_hh
     union_array_union_hh union_map_union_hh union_conflict_hh
     recursive_hh reuse_hh circulardep_hh tree1_hh tree2_hh crossref_hh
-    empty_record_hh)
+    primitivetypes_hh empty_record_hh)
 
 include (InstallRequiredSystemLibraries)
 

http://git-wip-us.apache.org/repos/asf/avro/blob/230c7e75/lang/c++/api/Specific.hh
----------------------------------------------------------------------
diff --git a/lang/c++/api/Specific.hh b/lang/c++/api/Specific.hh
index ef50318..0a00fb3 100644
--- a/lang/c++/api/Specific.hh
+++ b/lang/c++/api/Specific.hh
@@ -25,6 +25,7 @@
 #include <algorithm>
 
 #include "boost/array.hpp"
+#include "boost/blank.hpp"
 
 #include "Config.hh"
 #include "Encoder.hh"
@@ -46,6 +47,8 @@
  */
 namespace avro {
 
+typedef boost::blank null;
+
 template <typename T> void encode(Encoder& e, const T& t);
 template <typename T> void decode(Decoder& d, T& t);
 
@@ -290,6 +293,27 @@ template <typename T> struct 
codec_traits<std::map<std::string, T> > {
 };
 
 /**
+* codec_traits for Avro null.
+*/
+template <> struct codec_traits<avro::null> {
+       /**
+       * Encodes a given value.
+       */
+       static void encode(Encoder& e, const avro::null&) {
+               e.encodeNull();
+       }
+
+       /**
+       * Decodes into a given value.
+       */
+       static void decode(Decoder& d, avro::null&) {
+               d.decodeNull();
+       }
+};
+
+
+
+/**
  * Generic encoder function that makes use of the codec_traits.
  */
 template <typename T>

http://git-wip-us.apache.org/repos/asf/avro/blob/230c7e75/lang/c++/impl/avrogencpp.cc
----------------------------------------------------------------------
diff --git a/lang/c++/impl/avrogencpp.cc b/lang/c++/impl/avrogencpp.cc
index 1bf0e19..a44fe7d 100644
--- a/lang/c++/impl/avrogencpp.cc
+++ b/lang/c++/impl/avrogencpp.cc
@@ -173,6 +173,8 @@ string CodeGen::cppTypeOf(const NodePtr& n)
         return cppTypeOf(resolveSymbol(n));
     case avro::AVRO_UNION:
         return fullname(done[n]);
+    case avro::AVRO_NULL:
+        return "avro::null";
     default:
         return "$Undefined$";
     }

http://git-wip-us.apache.org/repos/asf/avro/blob/230c7e75/lang/c++/jsonschemas/bigrecord
----------------------------------------------------------------------
diff --git a/lang/c++/jsonschemas/bigrecord b/lang/c++/jsonschemas/bigrecord
index 02dbccb..ba430a0 100644
--- a/lang/c++/jsonschemas/bigrecord
+++ b/lang/c++/jsonschemas/bigrecord
@@ -102,6 +102,10 @@
         {
             "name": "bytes",
             "type": "bytes"
+        },
+                       {
+            "name": "null",
+            "type": "null"
         }
     ]
 }

http://git-wip-us.apache.org/repos/asf/avro/blob/230c7e75/lang/c++/test/AvrogencppTests.cc
----------------------------------------------------------------------
diff --git a/lang/c++/test/AvrogencppTests.cc b/lang/c++/test/AvrogencppTests.cc
index add78f5..1b42943 100644
--- a/lang/c++/test/AvrogencppTests.cc
+++ b/lang/c++/test/AvrogencppTests.cc
@@ -30,6 +30,7 @@
 #include "tree1.hh"
 #include "tree2.hh"
 #include "crossref.hh"
+#include "primitivetypes.hh"
 #include "Compiler.hh"
 
 #include <fstream>

Reply via email to