Skip to content
Snippets Groups Projects
Verified Commit e7e073c2 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: retrieve multi

parent 65aedbfc
Branches
Tags
1 merge request!5F multi retrieve
Pipeline #11061 passed with warnings
Pipeline: caosdb-cppinttest

#11063

    ...@@ -65,6 +65,8 @@ public: ...@@ -65,6 +65,8 @@ public:
    */ */
    class TransactionError : public Exception { class TransactionError : public Exception {
    public: public:
    TransactionError(StatusCode code, const std::string &what_arg)
    : Exception(code, what_arg) {}
    explicit TransactionError(const std::string &what_arg) explicit TransactionError(const std::string &what_arg)
    : Exception(StatusCode::GENERIC_TRANSACTION_ERROR, what_arg) {} : Exception(StatusCode::GENERIC_TRANSACTION_ERROR, what_arg) {}
    }; };
    ......
    ...@@ -24,6 +24,10 @@ ...@@ -24,6 +24,10 @@
    /** /**
    * @brief Creation and execution of transactions. * @brief Creation and execution of transactions.
    */ */
    #include "boost/log/core/record.hpp" // for record
    #include "boost/log/sources/record_ostream.hpp" // for basic_record_o...
    #include "boost/preprocessor/seq/limits/enum_256.hpp" // for BOOST_PP_SEQ_E...
    #include "boost/preprocessor/seq/limits/size_256.hpp" // for BOOST_PP_SEQ_S...
    #include "caosdb/entity.h" // for Entity #include "caosdb/entity.h" // for Entity
    #include "caosdb/logging.h" #include "caosdb/logging.h"
    #include "caosdb/entity/v1alpha1/main.grpc.pb.h" // for EntityTransactionSe... #include "caosdb/entity/v1alpha1/main.grpc.pb.h" // for EntityTransactionSe...
    ...@@ -31,9 +35,11 @@ ...@@ -31,9 +35,11 @@
    #include "caosdb/transaction_status.h" // for TransactionStatus #include "caosdb/transaction_status.h" // for TransactionStatus
    #include "caosdb/status_code.h" // for StatusCode #include "caosdb/status_code.h" // for StatusCode
    #include "google/protobuf/util/json_util.h" // for MessageToJsonString, Jso... #include "google/protobuf/util/json_util.h" // for MessageToJsonString, Jso...
    #include <stdexcept>
    #include <iterator> #include <iterator>
    #include <memory> // for shared_ptr, unique_ptr #include <memory> // for shared_ptr, unique_ptr
    #include <string> // for string #include <string> // for string
    #include <vector> // for vector
    /* /*
    * Do all necessary checks and assure that another retrieval (by id or by * Do all necessary checks and assure that another retrieval (by id or by
    ...@@ -117,6 +123,7 @@ class ResultSet { ...@@ -117,6 +123,7 @@ class ResultSet {
    public: public:
    virtual ~ResultSet() = default; virtual ~ResultSet() = default;
    [[nodiscard]] virtual auto Size() const noexcept -> int = 0; [[nodiscard]] virtual auto Size() const noexcept -> int = 0;
    [[nodiscard]] virtual auto At(const int index) const -> const Entity & = 0;
    }; };
    class MultiResultSet : public ResultSet { class MultiResultSet : public ResultSet {
    ...@@ -150,6 +157,10 @@ public: ...@@ -150,6 +157,10 @@ public:
    [[nodiscard]] inline auto Size() const noexcept -> int override { [[nodiscard]] inline auto Size() const noexcept -> int override {
    return this->entities.size(); return this->entities.size();
    } }
    [[nodiscard]] inline auto At(const int index) const
    -> const Entity & override {
    return *(this->entities.at(index));
    }
    std::vector<std::unique_ptr<Entity>> entities; std::vector<std::unique_ptr<Entity>> entities;
    }; };
    ...@@ -162,6 +173,13 @@ public: ...@@ -162,6 +173,13 @@ public:
    : entity(new Entity(idResponse)){}; : entity(new Entity(idResponse)){};
    [[nodiscard]] auto GetEntity() const -> const Entity &; [[nodiscard]] auto GetEntity() const -> const Entity &;
    [[nodiscard]] inline auto Size() const noexcept -> int override { return 1; } [[nodiscard]] inline auto Size() const noexcept -> int override { return 1; }
    [[nodiscard]] inline auto At(const int index) const
    -> const Entity & override {
    if (index != 0) {
    throw std::out_of_range("Index out of range. Length is 1.");
    }
    return *(this->entity);
    }
    private: private:
    std::unique_ptr<Entity> entity; std::unique_ptr<Entity> entity;
    ......
    ...@@ -35,9 +35,9 @@ ...@@ -35,9 +35,9 @@
    #include "caosdb/log_level.h" // for CAOSDB_DEFAULT... #include "caosdb/log_level.h" // for CAOSDB_DEFAULT...
    #include "caosdb/status_code.h" // for StatusCode #include "caosdb/status_code.h" // for StatusCode
    #include "caosdb/utility.h" // for get_home_direc... #include "caosdb/utility.h" // for get_home_direc...
    #include <bits/exception.h> // for exception
    #include <cassert> // for assert #include <cassert> // for assert
    #include <cstdlib> // for getenv #include <cstdlib> // for getenv
    #include <exception> // IWYU pragma: keep
    #include <grpcpp/security/credentials.h> // for SslCredentials #include <grpcpp/security/credentials.h> // for SslCredentials
    #include <iterator> // for next #include <iterator> // for next
    #include <map> // for map #include <map> // for map
    ......
    ...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
    #include "caosdb/transaction.h" #include "caosdb/transaction.h"
    #include "caosdb/entity/v1alpha1/main.grpc.pb.h" // for EntityTransactionS... #include "caosdb/entity/v1alpha1/main.grpc.pb.h" // for EntityTransactionS...
    #include "caosdb/entity/v1alpha1/main.pb.h" // for SingleRetrieveRequest #include "caosdb/entity/v1alpha1/main.pb.h" // for SingleRetrieveRequest
    #include "caosdb/exceptions.h" // for TransactionError, ...
    #include "caosdb/logging.h" #include "caosdb/logging.h"
    #include "caosdb/protobuf_helper.h" // for get_arena #include "caosdb/protobuf_helper.h" // for get_arena
    #include "caosdb/status_code.h" // for StatusCode, AUTHEN... #include "caosdb/status_code.h" // for StatusCode, AUTHEN...
    ......
    ...@@ -29,7 +29,10 @@ ...@@ -29,7 +29,10 @@
    #include "gtest/gtest-message.h" // for Message #include "gtest/gtest-message.h" // for Message
    #include "gtest/gtest-test-part.h" // for SuiteApiResolver, TestPa... #include "gtest/gtest-test-part.h" // for SuiteApiResolver, TestPa...
    #include "gtest/gtest_pred_impl.h" // for Test, TestInfo, TEST #include "gtest/gtest_pred_impl.h" // for Test, TestInfo, TEST
    #include <iostream>
    #include <memory> // for allocator, unique_ptr #include <memory> // for allocator, unique_ptr
    #include <string> // for string, basic_string
    #include <vector> // for vector
    namespace caosdb::transaction { namespace caosdb::transaction {
    using caosdb::configuration::InsecureConnectionConfiguration; using caosdb::configuration::InsecureConnectionConfiguration;
    ...@@ -105,6 +108,7 @@ TEST(test_transaction, test_multi_result_set_one) { ...@@ -105,6 +108,7 @@ TEST(test_transaction, test_multi_result_set_one) {
    MultiResultSet rs(&response); MultiResultSet rs(&response);
    EXPECT_EQ(rs.Size(), 1); EXPECT_EQ(rs.Size(), 1);
    EXPECT_EQ(rs.At(0).GetId(), "100");
    } }
    TEST(test_transaction, test_multi_result_set_three) { TEST(test_transaction, test_multi_result_set_three) {
    ...@@ -113,10 +117,10 @@ TEST(test_transaction, test_multi_result_set_three) { ...@@ -113,10 +117,10 @@ TEST(test_transaction, test_multi_result_set_three) {
    ->mutable_retrieve_response() ->mutable_retrieve_response()
    ->mutable_entity() ->mutable_entity()
    ->set_id("100"); ->set_id("100");
    response.add_responses() auto *entity_with_error =
    ->mutable_retrieve_response() response.add_responses()->mutable_retrieve_response()->mutable_entity();
    ->mutable_entity() entity_with_error->set_id("101");
    ->set_id("101"); entity_with_error->add_errors()->set_code(1);
    response.add_responses() response.add_responses()
    ->mutable_retrieve_response() ->mutable_retrieve_response()
    ->mutable_entity() ->mutable_entity()
    ...@@ -124,6 +128,8 @@ TEST(test_transaction, test_multi_result_set_three) { ...@@ -124,6 +128,8 @@ TEST(test_transaction, test_multi_result_set_three) {
    MultiResultSet rs(&response); MultiResultSet rs(&response);
    EXPECT_EQ(rs.Size(), 3); EXPECT_EQ(rs.Size(), 3);
    EXPECT_TRUE(rs.At(1).HasErrors());
    std::cout << rs.At(1).ToString();
    } }
    } // namespace caosdb::transaction } // namespace caosdb::transaction
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment