From c81618066a1993d8450afa91dfe5078f3923b221 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Thu, 5 Aug 2021 10:39:51 +0200
Subject: [PATCH] Moved around some code

---
 CMakeLists.txt               |  2 +-
 include/caosdb/transaction.h | 29 ++++-------------------------
 src/caosdb/configuration.cpp | 11 ++++++-----
 src/caosdb/transaction.cpp   | 25 ++++++++++++++++++++++++-
 4 files changed, 35 insertions(+), 32 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5efa13e..2f454fe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -299,7 +299,7 @@ if(_LINTING)
     else()
         message(STATUS "clang-tidy: ${clang_tidy}")
         set(_CMAKE_CXX_CLANG_TIDY_CHECKS
-            "--checks=*,-fuchsia-*,-llvmlibc-*,-readability-convert-member-functions-to-static,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay,-llvm-else-after-return,-readability-else-after-return,-modernize-use-trailing-return-type")
+            "--checks=*,-fuchsia-*,-llvmlibc-*,-readability-convert-member-functions-to-static,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay,-llvm-else-after-return,-readability-else-after-return,-modernize-use-trailing-return-type,-bugprone-branch-clone")
         set(_CMAKE_C_CLANG_TIDY_CHECKS "${_CMAKE_CXX_CLANG_TIDY_CHECKS}")
         set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}"
             "--header-filter=caosdb/.*[^\(\.pb\.h\)]$"
diff --git a/include/caosdb/transaction.h b/include/caosdb/transaction.h
index 653dcf7..fbbd081 100644
--- a/include/caosdb/transaction.h
+++ b/include/caosdb/transaction.h
@@ -33,6 +33,7 @@
 #include "google/protobuf/util/json_util.h" // for MessageToJsonString, Jso...
 #include <stdexcept>
 #include <iterator>
+// IWYU pragma: no_include <ext/alloc_traits.h>
 #include <memory> // for shared_ptr, unique_ptr
 #include <string> // for string
 #include <vector> // for vector
@@ -119,6 +120,8 @@ using caosdb::transaction::TransactionStatus;
 using WrappedResponseCase =
   caosdb::entity::v1alpha1::TransactionResponse::WrappedResponseCase;
 
+class Transaction;
+
 static const std::string logger_name = "caosdb::transaction";
 
 class ResultSet {
@@ -131,31 +134,7 @@ public:
 class MultiResultSet : public ResultSet {
 public:
   ~MultiResultSet() = default;
-  explicit inline MultiResultSet(MultiTransactionResponse *response) {
-    auto responses = response->mutable_responses();
-    Entity *entity = nullptr;
-    for (auto sub_response : *responses) {
-      switch (sub_response.wrapped_response_case()) {
-      case WrappedResponseCase::kRetrieveResponse:
-        entity = new Entity(
-          sub_response.mutable_retrieve_response()->release_entity());
-        break;
-      case WrappedResponseCase::kInsertResponse:
-
-        entity = new Entity(sub_response.release_insert_response());
-        break;
-      case WrappedResponseCase::kDeleteResponse:
-        entity = new Entity(sub_response.release_delete_response());
-        break;
-      default:
-        // TODO(tf) Updates
-        break;
-      }
-      if (entity) {
-        this->entities.push_back(std::unique_ptr<Entity>(entity));
-      }
-    }
-  }
+  explicit MultiResultSet(MultiTransactionResponse *response);
   [[nodiscard]] inline auto Size() const noexcept -> int override {
     return this->entities.size();
   }
diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp
index ffa8604..76c4372 100644
--- a/src/caosdb/configuration.cpp
+++ b/src/caosdb/configuration.cpp
@@ -39,11 +39,12 @@
 #include <cstdlib>                                     // for getenv
 #include <cstring>                                     // for strcmp
 #include <exception>                                   // IWYU pragma: keep
-#include <grpcpp/security/credentials.h>               // for SslCredentials
-#include <iterator>                                    // for next
-#include <map>                                         // for map
-#include <stdexcept>                                   // for out_of_range
-#include <string>                                      // for string, operator+
+// IWYU pragma: no_include <bits/exception.h>
+#include <grpcpp/security/credentials.h> // for SslCredentials
+#include <iterator>                      // for next
+#include <map>                           // for map
+#include <stdexcept>                     // for out_of_range
+#include <string>                        // for string, operator+
 
 namespace caosdb::configuration {
 using boost::filesystem::exists;
diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp
index e900560..d0b9025 100644
--- a/src/caosdb/transaction.cpp
+++ b/src/caosdb/transaction.cpp
@@ -90,6 +90,29 @@ using grpc::ClientAsyncResponseReader;
 using ProtoEntity = caosdb::entity::v1alpha1::Entity;
 using grpc::CompletionQueue;
 
+MultiResultSet::MultiResultSet(MultiTransactionResponse *response) {
+  auto *responses = response->mutable_responses();
+  for (auto sub_response : *responses) {
+    switch (sub_response.wrapped_response_case()) {
+    case WrappedResponseCase::kRetrieveResponse:
+      this->entities.push_back(std::make_unique<Entity>(
+        sub_response.mutable_retrieve_response()->release_entity()));
+      break;
+    case WrappedResponseCase::kInsertResponse:
+      this->entities.push_back(
+        std::make_unique<Entity>(sub_response.release_insert_response()));
+      break;
+    case WrappedResponseCase::kDeleteResponse:
+      this->entities.push_back(
+        std::make_unique<Entity>(sub_response.release_insert_response()));
+      break;
+    default:
+      // TODO(tf) Updates
+      break;
+    }
+  }
+}
+
 [[nodiscard]] auto UniqueResult::GetEntity() const -> const Entity & {
   const Entity *result = this->entity.get();
   return *result;
@@ -239,7 +262,7 @@ auto Transaction::WaitForIt() const noexcept -> TransactionStatus {
       this->result_set = std::make_unique<UniqueResult>(deletedIdResponse);
     } break;
     default:
-      // TODO(tf)
+      // TODO(tf) Error and Update
       break;
     }
   } else {
-- 
GitLab