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

ENH: Add destructor for transactions to Extern C

parent 72e8d4c5
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
Pipeline #11650 failed
This commit is part of merge request !8. Comments created here will be created in the context of that merge request.
......@@ -265,9 +265,17 @@ typedef struct {
void *wrapped_transaction;
} caosdb_transaction_transaction;
/**
* Create a transaction on an existing connection.
*
* This transaction has to be deleted manually by
* caosdb_transaction_delete_transaction() later on.
*/
int caosdb_connection_connection_create_transaction(
caosdb_connection_connection *connection,
caosdb_transaction_transaction *out);
int caosdb_transaction_delete_transaction(
caosdb_transaction_transaction *transaction);
int caosdb_transaction_transaction_retrieve_by_id(
caosdb_transaction_transaction *transaction, const char *id);
int caosdb_transaction_transaction_retrieve_by_ids(
......@@ -302,9 +310,10 @@ typedef struct {
char **version_id;
} caosdb_entity_entity;
int caosdb_transaction_result_set_get_entity(
caosdb_transaction_result_set *result_set, caosdb_entity_entity *entity,
int index);
int caosdb_transaction_result_set_at(caosdb_transaction_result_set *result_set,
caosdb_entity_entity *entity, int index);
int caosdb_transaction_result_set_size(
caosdb_transaction_result_set *result_set, int *out);
typedef struct {
void *wrapped_property;
......
......@@ -276,7 +276,16 @@ ERROR_RETURN_CODE(GENERIC_ERROR,
static_cast<caosdb::connection::Connection *>(
connection->wrapped_connection);
out->wrapped_transaction =
wrapped_connection->CreateTransaction().get();
wrapped_connection->CreateTransaction().release();
return 0;
})
ERROR_RETURN_CODE(GENERIC_ERROR,
int caosdb_transaction_delete_transaction(
caosdb_transaction_transaction *transaction),
{
delete static_cast<caosdb::transaction::Transaction *>(
transaction->wrapped_transaction);
return 0;
})
......@@ -352,4 +361,21 @@ ERROR_RETURN_CODE(GENERIC_ERROR,
*out = cr;
return 0;
})
ERROR_RETURN_CODE(GENERIC_ERROR,
int caosdb_transaction_result_set_at(
caosdb_transaction_result_set *result_set,
caosdb_entity_entity *entity, int index),
{
// TODO(fspreck) how do we treat this? ResultSet
// is an abstract class, can we always fall back
// to MultiResultSet?
auto *wrapped_result_set =
static_cast<caosdb::transaction::MultiResultSet *>(
result_set->wrapped_result_set);
auto requested_entity = wrapped_result_set->At(index);
entity->wrapped_entity = (void *)(&requested_entity);
return 0;
})
}
......@@ -75,11 +75,14 @@ TEST_F(test_ccaosdb, test_execute_transaction) {
int return_code(
caosdb_transaction_transaction_retrieve_by_id(&transaction, "some_id"));
EXPECT_EQ(return_code, 0);
EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
return_code = caosdb_transaction_transaction_execute(&transaction);
EXPECT_EQ(return_code, caosdb::StatusCode::CONNECTION_ERROR);
return_code = caosdb_transaction_delete_transaction(&transaction);
EXPECT_EQ(return_code, 0);
caosdb_transaction_transaction multi_transaction;
caosdb_connection_connection_create_transaction(&connection,
&multi_transaction);
......@@ -89,6 +92,9 @@ TEST_F(test_ccaosdb, test_execute_transaction) {
const char *ids[] = {"id1", "id2", "id3"}; // NOLINT
return_code =
caosdb_transaction_transaction_retrieve_by_ids(&multi_transaction, ids);
EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
return_code = caosdb_transaction_delete_transaction(&multi_transaction);
EXPECT_EQ(return_code, 0);
}
......@@ -106,6 +112,9 @@ TEST_F(test_ccaosdb, test_multi_retrieve) {
const char *ids[] = {"id1", "id2", "id3"}; // NOLINT
int return_code(
caosdb_transaction_transaction_retrieve_by_ids(&multi_transaction, ids));
EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
return_code = caosdb_transaction_delete_transaction(&multi_transaction);
EXPECT_EQ(return_code, 0);
}
......@@ -119,5 +128,8 @@ TEST_F(test_ccaosdb, test_query) {
int return_code(caosdb_transaction_transaction_query(
&transaction, "FIND ENTITY WITH id=123"));
EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
return_code = caosdb_transaction_delete_transaction(&transaction);
EXPECT_EQ(return_code, 0);
}
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