From be0d409e79aa51211b93a50411be8659650deeeb Mon Sep 17 00:00:00 2001 From: xiyang Date: Mon, 6 Mar 2023 14:34:33 -0500 Subject: [PATCH] patch c str api --- src/include/main/connection.h | 5 ++++ src/include/main/database.h | 5 ++++ src/main/connection.cpp | 4 +++ src/main/database.cpp | 6 +++++ .../main_test_helper/main_test_helper.h | 2 +- test/main/CMakeLists.txt | 1 + test/main/capi_test.cpp | 25 +++++++++++++++++++ 7 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/main/capi_test.cpp diff --git a/src/include/main/connection.h b/src/include/main/connection.h index adcb958441..74fcb343c7 100644 --- a/src/include/main/connection.h +++ b/src/include/main/connection.h @@ -73,6 +73,7 @@ class Connection { * @return the maximum number of threads to use for execution in the current connection. */ KUZU_API uint64_t getMaxNumThreadForExec(); + /** * @brief Executes the given query and returns the result. * @param query The query to execute. @@ -126,6 +127,10 @@ class Connection { */ KUZU_API std::string getRelPropertyNames(const std::string& relTableName); + // Temporary patching for C-style APIs. + // TODO(Change): move this to C-header once we have C-APIs. + KUZU_API std::unique_ptr kuzu_query(const char* queryString); + protected: ConnectionTransactionMode getTransactionMode(); void setTransactionModeNoLock(ConnectionTransactionMode newTransactionMode); diff --git a/src/include/main/database.h b/src/include/main/database.h index 04f6b06676..877bc242ae 100644 --- a/src/include/main/database.h +++ b/src/include/main/database.h @@ -72,6 +72,11 @@ class Database { */ KUZU_API void resizeBufferManager(uint64_t newSize); + // Temporary patching for C-style APIs. + // TODO(Change): move this to C-header once we have C-APIs. + KUZU_API explicit Database(const char* databasePath); + KUZU_API Database(const char* databasePath, SystemConfig systemConfig); + private: // Commits and checkpoints a write transaction or rolls that transaction back. This involves // either replaying the WAL and either redoing or undoing and in either case at the end WAL is diff --git a/src/main/connection.cpp b/src/main/connection.cpp index 665612f944..c78b86c280 100644 --- a/src/main/connection.cpp +++ b/src/main/connection.cpp @@ -267,6 +267,10 @@ std::string Connection::getRelPropertyNames(const std::string& relTableName) { return result; } +std::unique_ptr Connection::kuzu_query(const char* queryString) { + return query(queryString); +} + std::unique_ptr Connection::executeWithParams(PreparedStatement* preparedStatement, std::unordered_map>& inputParams) { lock_t lck{mtx}; diff --git a/src/main/database.cpp b/src/main/database.cpp index a0b71cc3ed..cd25ad7208 100644 --- a/src/main/database.cpp +++ b/src/main/database.cpp @@ -52,6 +52,12 @@ Database::Database(std::string databasePath, SystemConfig systemConfig) transactionManager = std::make_unique(*wal); } +Database::Database(const char* databasePath) + : Database{std::string{databasePath}, SystemConfig()} {} + +Database::Database(const char* databasePath, SystemConfig systemConfig) + : Database{std::string{databasePath}, systemConfig} {} + Database::~Database() { dropLoggers(); } diff --git a/test/include/main_test_helper/main_test_helper.h b/test/include/main_test_helper/main_test_helper.h index d4572c7976..30962eea91 100644 --- a/test/include/main_test_helper/main_test_helper.h +++ b/test/include/main_test_helper/main_test_helper.h @@ -7,7 +7,6 @@ namespace kuzu { namespace testing { class ApiTest : public BaseGraphTest { - public: void SetUp() override { BaseGraphTest::SetUp(); @@ -29,5 +28,6 @@ class ApiTest : public BaseGraphTest { ASSERT_FALSE(result->hasNext()); } }; + } // namespace testing } // namespace kuzu diff --git a/test/main/CMakeLists.txt b/test/main/CMakeLists.txt index 62f403786b..3c37efc2f8 100644 --- a/test/main/CMakeLists.txt +++ b/test/main/CMakeLists.txt @@ -1,4 +1,5 @@ add_kuzu_test(main_test + capi_test.cpp config_test.cpp connection_test.cpp csv_output_test.cpp diff --git a/test/main/capi_test.cpp b/test/main/capi_test.cpp new file mode 100644 index 0000000000..1d27e8f53b --- /dev/null +++ b/test/main/capi_test.cpp @@ -0,0 +1,25 @@ +#include "graph_test/graph_test.h" + +using namespace kuzu::testing; + +class CApiTest : public BaseGraphTest { +public: + void SetUp() override { + BaseGraphTest::SetUp(); + const char* dbPath = databasePath.c_str(); + database = std::make_unique(dbPath, *systemConfig); + conn = std::make_unique(database.get()); + initGraph(); + } + + std::string getInputDir() override { + return TestHelper::appendKuzuRootPath("dataset/tinysnb/"); + } +}; + +TEST_F(CApiTest, Basic) { + char query[] = "MATCH (a:person) RETURN COUNT(*)"; + auto result = conn->kuzu_query(query); + auto groundTruth = std::vector{"8"}; + ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); +}