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

WIP: Add multi-id retrieval

parent 5f0242c0
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 #11620 canceled
This commit is part of merge request !8. Comments created here will be created in the context of that merge request.
......@@ -249,8 +249,8 @@ int caosdb_connection_connection_create_transaction(
caosdb_transaction_transaction *out);
int caosdb_transaction_transaction_retrieve_by_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_retrieve_by_ids(
caosdb_transaction_transaction *transaction, const char *ids[]);
int caosdb_transaction_transaction_execute(
caosdb_transaction_transaction *transaction);
// TODO(fspreck) execute_asynchronously may be added as a separate
......
......@@ -9,6 +9,7 @@
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
extern "C" {
......@@ -268,6 +269,20 @@ ERROR_RETURN_CODE(GENERIC_ERROR,
transaction->wrapped_transaction);
return wrapped_transaction->RetrieveById(std::string(id));
})
ERROR_RETURN_CODE(
GENERIC_ERROR,
int caosdb_transaction_transaction_retrieve_by_ids(
caosdb_transaction_transaction *transaction, const char *ids[]),
{
auto *wrapped_transaction = static_cast<caosdb::transaction::Transaction *>(
transaction->wrapped_transaction);
// Fill a string vector with the contents of the array of char arrays.
std::vector<std::string> str_ids;
for (const char **i = ids; *i; ++i) {
str_ids.push_back(std::string(*i));
}
return wrapped_transaction->RetrieveById(str_ids.begin(), str_ids.end());
})
ERROR_RETURN_CODE(GENERIC_ERROR,
int caosdb_transaction_transaction_execute(
......
......@@ -79,4 +79,32 @@ TEST_F(test_ccaosdb, test_execute_transaction) {
return_code = caosdb_transaction_transaction_execute(&transaction);
EXPECT_EQ(return_code, caosdb::StatusCode::CONNECTION_ERROR);
caosdb_transaction_transaction multi_transaction;
caosdb_connection_connection_create_transaction(&connection,
&multi_transaction);
// We explicitely want to define a C-style array here, so we disable
// linting
const char *ids[] = {"id1", "id2", "id3"}; // NOLINT
return_code =
caosdb_transaction_transaction_retrieve_by_ids(&multi_transaction, ids);
EXPECT_EQ(return_code, 0);
}
TEST_F(test_ccaosdb, test_multi_retrieve) {
caosdb_connection_connection connection;
caosdb_connection_connection_manager_get_connection(&connection,
"local-caosdb-admin");
caosdb_transaction_transaction multi_transaction;
caosdb_connection_connection_create_transaction(&connection,
&multi_transaction);
// We explicitely want to define a C-style array here, so we disable
// linting
const char *ids[] = {"id1", "id2", "id3"}; // NOLINT
int return_code(
caosdb_transaction_transaction_retrieve_by_ids(&multi_transaction, ids));
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