Skip to content
Snippets Groups Projects
Commit 912a4290 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

Merge branch 'fix-11' into 'dev'

FIX: Transaction::GetResultSet() now always returns a good reference

See merge request !18
parents 85bc73d7 381bd88a
Branches
Tags
1 merge request!18FIX: Transaction::GetResultSet() now always returns a good reference
Pipeline #12624 passed with warnings
Pipeline: caosdb-cppinttest

#12625

    ...@@ -20,4 +20,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -20,4 +20,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
    ### Fixed ### Fixed
    * #11 - Transaction::GetResultSet() now always returns a valid reference.
    ### Security ### Security
    ...@@ -365,6 +365,10 @@ public: ...@@ -365,6 +365,10 @@ public:
    [[nodiscard]] inline auto GetStatus() const noexcept -> TransactionStatus { return this->status; } [[nodiscard]] inline auto GetStatus() const noexcept -> TransactionStatus { return this->status; }
    [[nodiscard]] inline auto GetResultSet() const noexcept -> const ResultSet & { [[nodiscard]] inline auto GetResultSet() const noexcept -> const ResultSet & {
    if (!this->result_set) {
    this->result_set = std::make_unique<MultiResultSet>(
    std::move(std::vector<std::unique_ptr<Entity>>()));
    }
    return *(this->result_set.get()); return *(this->result_set.get());
    } }
    ......
    ...@@ -112,7 +112,7 @@ void UnaryRpcHandler::handleCallCompleteState() { ...@@ -112,7 +112,7 @@ void UnaryRpcHandler::handleCallCompleteState() {
    switch (status_.error_code()) { switch (status_.error_code()) {
    case grpc::OK: case grpc::OK:
    CAOSDB_LOG_INFO(logger_name) << "UnaryRpcHandler finished successfully."; CAOSDB_LOG_TRACE(logger_name) << "UnaryRpcHandler finished successfully.";
    break; break;
    default: default:
    auto code(static_cast<StatusCode>(status_.error_code())); auto code(static_cast<StatusCode>(status_.error_code()));
    ......
    ...@@ -26,6 +26,7 @@ set(test_cases ...@@ -26,6 +26,7 @@ set(test_cases
    test_entity test_entity
    test_file_transmission test_file_transmission
    test_info test_info
    test_issues
    test_list_properties test_list_properties
    test_protobuf test_protobuf
    test_transaction test_transaction
    ......
    /*
    * This file is a part of the CaosDB Project.
    *
    * Copyright (C) 2021 Daniel Hornung <d.hornung@indiscale.com>
    * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
    *
    * This program is free software: you can redistribute it and/or modify
    * it under the terms of the GNU Affero General Public License as
    * published by the Free Software Foundation, either version 3 of the
    * License, or (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU Affero General Public License for more details.
    *
    * You should have received a copy of the GNU Affero General Public License
    * along with this program. If not, see <https://www.gnu.org/licenses/>.
    */
    #include "caosdb/configuration.h" // for InsecureConnectionConfig...
    #include "caosdb/connection.h" // for Connection
    #include "caosdb/exceptions.h" // for ConnectionError
    #include "caosdb/status_code.h"
    #include "caosdb/transaction.h" // for Transaction
    #include <gtest/gtest-message.h> // for Message
    #include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestPa...
    #include <gtest/gtest_pred_impl.h> // for Test, TestInfo, TEST
    namespace caosdb::transaction {
    using caosdb::configuration::InsecureConnectionConfiguration;
    using caosdb::connection::Connection;
    TEST(test_issues, test_issue_11) {
    const auto *host = "localhost";
    auto configuration = InsecureConnectionConfiguration(host, 8000);
    Connection connection(configuration);
    auto transaction = connection.CreateTransaction();
    ASSERT_EQ(transaction->GetResultSet().size(), 0);
    transaction->RetrieveById("100");
    ASSERT_EQ(StatusCode::EXECUTING, transaction->ExecuteAsynchronously());
    // Trying to obtain ResultSet while it is still empty.
    ASSERT_EQ(transaction->GetResultSet().size(), 0);
    }
    } // namespace caosdb::transaction
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment