Skip to content
Snippets Groups Projects
Commit b1b0a8c6 authored by florian's avatar florian
Browse files

WIP: Implement transactions in Extern C

parent c84a193c
No related branches found
No related tags found
3 merge requests!12F consolidation,!9Draft: API: remove UniqueResult, lower-case at, size for ResultSet,!8ENH: Add retrieval and queries to Extern C interface
...@@ -249,8 +249,12 @@ int caosdb_connection_connection_create_transaction( ...@@ -249,8 +249,12 @@ int caosdb_connection_connection_create_transaction(
caosdb_transaction_transaction *out); caosdb_transaction_transaction *out);
int caosdb_transaction_transaction_retrieve_by_id( int caosdb_transaction_transaction_retrieve_by_id(
caosdb_transaction_transaction *transaction, const char *id); caosdb_transaction_transaction *transaction, const char *id);
// TODO(fspreck) retrieve_by_ids what do we do about iterators in Extern C? Is
// this even a problem?
int caosdb_transaction_transaction_execute( int caosdb_transaction_transaction_execute(
caosdb_transaction_transaction *transaction); caosdb_transaction_transaction *transaction);
// TODO(fspreck) execute_asynchronously may be added as a separate
// function once we actually support asynchronous execution.
typedef struct { typedef struct {
void *wrapped_result_set; void *wrapped_result_set;
......
...@@ -241,4 +241,43 @@ ERROR_RETURN_CODE(GENERIC_ERROR, ...@@ -241,4 +241,43 @@ ERROR_RETURN_CODE(GENERIC_ERROR,
.get(); .get();
return 0; return 0;
}) })
/****************************************************************************
* ENTITY STUFF AND TRANSACTIONS
****************************************************************************/
ERROR_RETURN_CODE(GENERIC_ERROR,
int caosdb_connection_connection_create_transaction(
caosdb_connection_connection *connection,
caosdb_transaction_transaction *out),
{
caosdb::connection::Connection *wrapped_connection =
static_cast<caosdb::connection::Connection *>(
connection->wrapped_connection);
out->wrapped_transaction =
wrapped_connection->CreateTransaction().get();
return 0;
})
ERROR_RETURN_CODE(GENERIC_ERROR,
int caosdb_transaction_transaction_retrieve_by_id(
caosdb_transaction_transaction *transaction,
const char *id),
{
caosdb::transaction::Transaction *wrapped_transaction =
static_cast<caosdb::transaction::Transaction *>(
transaction->wrapped_transaction);
wrapped_transaction->RetrieveById(id);
return 0;
})
ERROR_RETURN_CODE(GENERIC_ERROR,
int caosdb_transaction_transaction_execute(
caosdb_transaction_transaction *transaction),
{
caosdb::transaction::Transaction *wrapped_transaction =
static_cast<caosdb::transaction::Transaction *>(
transaction->wrapped_transaction);
wrapped_transaction->Execute();
return 0;
})
} }
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
*/ */
#include "caosdb/configuration.h" #include "caosdb/configuration.h"
#include "caosdb/status_code.h" // for StatusCode
#include "caosdb_test_utility.h" // for EXPECT_THROW_MESSAGE, TEST_DATA_DIR #include "caosdb_test_utility.h" // for EXPECT_THROW_MESSAGE, TEST_DATA_DIR
#include "ccaosdb.h" // for caosdb_utility_get_env_var #include "ccaosdb.h" // for caosdb_utility_get_env_var
#include <gtest/gtest-message.h> // for Message #include <gtest/gtest-message.h> // for Message
...@@ -61,3 +62,21 @@ TEST_F(test_ccaosdb, test_get_connection) { ...@@ -61,3 +62,21 @@ TEST_F(test_ccaosdb, test_get_connection) {
"local-caosdb-admin"); "local-caosdb-admin");
EXPECT_TRUE(out.wrapped_connection); EXPECT_TRUE(out.wrapped_connection);
} }
TEST_F(test_ccaosdb, test_execute_transaction) {
caosdb_connection_connection connection;
caosdb_connection_connection_manager_get_connection(&connection,
"local-caosdb-admin");
caosdb_transaction_transaction transaction;
caosdb_connection_connection_create_transaction(&connection, &transaction);
EXPECT_TRUE(transaction.wrapped_transaction);
int return_code(
caosdb_transaction_transaction_retrieve_by_id(&transaction, "some_id"));
EXPECT_EQ(return_code, 0);
return_code = caosdb_transaction_transaction_execute(&transaction);
EXPECT_EQ(return_code, caosdb::StatusCode::CONNECTION_ERROR);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment