From bd751023c6208d00240d72cc45541a20bdc117df Mon Sep 17 00:00:00 2001
From: florian <f.spreckelsen@inidscale.com>
Date: Mon, 9 Aug 2021 16:23:37 +0200
Subject: [PATCH] WIP: Add queries to Extern C

---
 include/ccaosdb.h     |  2 ++
 src/ccaosdb.cpp       | 12 ++++++++++++
 test/test_ccaosdb.cpp | 14 ++++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/include/ccaosdb.h b/include/ccaosdb.h
index 245d961..fb21d00 100644
--- a/include/ccaosdb.h
+++ b/include/ccaosdb.h
@@ -251,6 +251,8 @@ int caosdb_transaction_transaction_retrieve_by_id(
   caosdb_transaction_transaction *transaction, const char *id);
 int caosdb_transaction_transaction_retrieve_by_ids(
   caosdb_transaction_transaction *transaction, const char *ids[]);
+int caosdb_transaction_transaction_query(
+  caosdb_transaction_transaction *transaction, const char *query);
 int caosdb_transaction_transaction_execute(
   caosdb_transaction_transaction *transaction);
 // TODO(fspreck) execute_asynchronously may be added as a separate
diff --git a/src/ccaosdb.cpp b/src/ccaosdb.cpp
index 0b1c7df..e847f61 100644
--- a/src/ccaosdb.cpp
+++ b/src/ccaosdb.cpp
@@ -269,6 +269,7 @@ 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(
@@ -284,6 +285,17 @@ ERROR_RETURN_CODE(
     return wrapped_transaction->RetrieveById(str_ids.begin(), str_ids.end());
   })
 
+ERROR_RETURN_CODE(GENERIC_ERROR,
+                  int caosdb_transaction_transaction_query(
+                    caosdb_transaction_transaction *transaction,
+                    const char *query),
+                  {
+                    auto *wrapped_transaction =
+                      static_cast<caosdb::transaction::Transaction *>(
+                        transaction->wrapped_transaction);
+                    return wrapped_transaction->Query(std::string(query));
+                  })
+
 ERROR_RETURN_CODE(GENERIC_ERROR,
                   int caosdb_transaction_transaction_execute(
                     caosdb_transaction_transaction *transaction),
diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp
index ff05fa0..9d06acd 100644
--- a/test/test_ccaosdb.cpp
+++ b/test/test_ccaosdb.cpp
@@ -108,3 +108,17 @@ TEST_F(test_ccaosdb, test_multi_retrieve) {
     caosdb_transaction_transaction_retrieve_by_ids(&multi_transaction, ids));
   EXPECT_EQ(return_code, 0);
 }
+
+TEST_F(test_ccaosdb, test_query) {
+  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);
+
+  int return_code(caosdb_transaction_transaction_query(
+    &transaction, "FIND ENTITY WITH id=123"));
+  EXPECT_EQ(return_code, 0);
+}
-- 
GitLab