You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by mg...@apache.org on 2022/08/12 08:42:50 UTC

[avro] branch avro-3601-c++-simplify-custom-attributes-2 created (now 49bed3180)

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a change to branch avro-3601-c++-simplify-custom-attributes-2
in repository https://gitbox.apache.org/repos/asf/avro.git


      at 49bed3180 AVRO-3601: CustomAttributes#getAttribute() now returns boost::optional

This branch includes the following new commits:

     new 49bed3180 AVRO-3601: CustomAttributes#getAttribute() now returns boost::optional

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[avro] 01/01: AVRO-3601: CustomAttributes#getAttribute() now returns boost::optional

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch avro-3601-c++-simplify-custom-attributes-2
in repository https://gitbox.apache.org/repos/asf/avro.git

commit 49bed31807e14cbb4b040f4000af96a991101c3d
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Fri Aug 12 11:41:57 2022 +0300

    AVRO-3601: CustomAttributes#getAttribute() now returns boost::optional
    
    Add unit tests for CustomAttributes#getAttribute(string)
    
    Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
---
 lang/c++/api/CustomAttributes.hh  |  3 ++-
 lang/c++/impl/CustomAttributes.cc |  8 +++++---
 lang/c++/test/unittest.cc         | 12 ++++++++++--
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/lang/c++/api/CustomAttributes.hh b/lang/c++/api/CustomAttributes.hh
index 2bd572c57..adad6f6de 100644
--- a/lang/c++/api/CustomAttributes.hh
+++ b/lang/c++/api/CustomAttributes.hh
@@ -19,6 +19,7 @@
 #ifndef avro_CustomAttributes_hh__
 #define avro_CustomAttributes_hh__
 
+#include <boost/optional.hpp>
 #include <iostream>
 #include <map>
 #include <string>
@@ -33,7 +34,7 @@ class AVRO_DECL CustomAttributes {
   public:
     // Retrieves the custom attribute json entity for that attributeName, returns an
     // null if the attribute doesn't exist.
-    std::string getAttribute(const std::string &name) const;
+    boost::optional<std::string> getAttribute(const std::string &name) const;
 
     // Adds a custom attribute. If the attribute already exists, throw an exception.
     void addAttribute(const std::string &name, const std::string &value);
diff --git a/lang/c++/impl/CustomAttributes.cc b/lang/c++/impl/CustomAttributes.cc
index bb5643856..1186d9e26 100644
--- a/lang/c++/impl/CustomAttributes.cc
+++ b/lang/c++/impl/CustomAttributes.cc
@@ -23,13 +23,15 @@
 
 namespace avro {
 
-std::string CustomAttributes::getAttribute(const std::string &name) const {
+boost::optional<std::string> CustomAttributes::getAttribute(const std::string &name) const {
+    boost::optional<std::string> result;
     std::map<std::string, std::string>::const_iterator iter =
         attributes_.find(name);
     if (iter == attributes_.end()) {
-      return NULL;
+      return result;
     }
-    return iter->second;
+    result = iter->second;
+    return result;
 }
 
 void CustomAttributes::addAttribute(const std::string& name,
diff --git a/lang/c++/test/unittest.cc b/lang/c++/test/unittest.cc
index 2a5c51786..0057e8287 100644
--- a/lang/c++/test/unittest.cc
+++ b/lang/c++/test/unittest.cc
@@ -467,8 +467,6 @@ struct TestSchema {
         concepts::MultiAttribute<NodePtr> fieldValues;
         std::vector<GenericDatum> defaultValues;
 
-        CustomAttributes cf;
-        cf.addAttribute("extra field", std::string("1"));
         fieldNames.add("f1");
         fieldValues.add(NodePtr( new NodePrimitive(Type::AVRO_LONG)));
 
@@ -481,6 +479,15 @@ struct TestSchema {
                     expectedJsonWithoutCustomAttribute);
     }
 
+    void checkCustomAttributes_getAttribute()
+    {
+        CustomAttributes cf;
+        cf.addAttribute("field1", std::string("1"));
+
+        BOOST_CHECK_EQUAL(std::string("1"), *cf.getAttribute("field1"));
+        BOOST_CHECK_EQUAL(false, cf.getAttribute("not_existing").is_initialized());
+    }
+
     void test() {
         std::cout << "Before\n";
         schema_.toJson(std::cout);
@@ -505,6 +512,7 @@ struct TestSchema {
 
         checkNodeRecordWithoutCustomAttribute();
         checkNodeRecordWithCustomAttribute();
+        checkCustomAttributes_getAttribute();
     }
 
     ValidSchema schema_;