From 27fc8af1cf1de1596b27dae44881ae4ce0e71c6e Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Fri, 21 Oct 2022 17:38:27 +0200 Subject: [PATCH] WIP: SELECT for GRPC API --- test/test_select.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/test/test_select.cpp b/test/test_select.cpp index 9d4024b..e15f83a 100644 --- a/test/test_select.cpp +++ b/test/test_select.cpp @@ -20,28 +20,107 @@ * */ #include "caosdb/connection.h" // for Connection, ConnectionManager +#include "caosdb/data_type.h" // for AtomicDataType #include "caosdb/transaction.h" // for Transaction, ResultTable +#include "caosdb/value.h" // for Value #include <gtest/gtest-message.h> // for Message #include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestFactoryImpl #include <gtest/gtest_pred_impl.h> // for Test, TestInfo, EXPECT_EQ, TEST #include <memory> // for allocator, unique_ptr, __shared_p... // namespace caosdb::transaction { +using caosdb::entity::AtomicDataType; +using caosdb::entity::Role; +using caosdb::entity::Property; +using caosdb::entity::Parent; +using caosdb::entity::Entity; +using caosdb::entity::Value; + +class test_select : public ::testing::Test { +public: + + static void DeleteEntities() { + // delete all entities + const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); + auto query_transaction(connection->CreateTransaction()); + query_transaction->Query("FIND Test*"); + query_transaction->Execute(); + if (query_transaction->GetResultSet().size() > 0) { + std::cout << "Cleanup: Deleting " << query_transaction->GetResultSet().size() << " entities." + << std::endl; + auto delete_transaction(connection->CreateTransaction()); + for (const Entity &entity : query_transaction->GetResultSet()) { + delete_transaction->DeleteById(entity.GetId()); + } + delete_transaction->Execute(); + } + } + + static auto CreateTestProp() -> Entity { + Entity entity; + entity.SetRole(Role::PROPERTY); + entity.SetName("TestProp"); + entity.SetDataType(AtomicDataType::TEXT); + return entity; + } + + static auto CreateTestRT() -> Entity { + Entity entity; + entity.SetRole(Role::RECORD_TYPE); + entity.SetName("TestRT"); + return entity; + } + + static auto CreateRecord(const std::string &property_name, Value value) -> Entity { + Entity entity; + entity.SetRole(Role::RECORD); + Parent parent; + parent.SetName("TestRT"); + entity.AppendParent(parent); + Property property; + property.SetName(property_name); + property.SetValue(value); + entity.AppendProperty(property); + + return entity; + } + +protected: + // Fixture methods ////////////////////////////////////////////////////////// + + void SetUp() override { + DeleteEntities(); + + const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); + auto insert_transaction(connection->CreateTransaction()); + insert_transaction->InsertEntity(CreateTestRT()); + insert_transaction->InsertEntity(CreateTestProp()); + insert_transaction->Execute(); + } + + void TearDown() override { + DeleteEntities(); + } +}; /* * Test select query on empty database. */ -TEST(test_transaction, test_select) { +TEST_F(test_select, test_select_name) { const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); auto query_transaction(connection->CreateTransaction()); - query_transaction->Query("SELECT name FROM ENTITY WITH id > 99"); + query_transaction->Query("SELECT name FROM RecordType TestRT"); query_transaction->Execute(); - EXPECT_EQ(query_transaction->GetResultTable().size(), 0); EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1); for(const auto &column : query_transaction->GetResultTable().GetHeader()) { EXPECT_EQ(column.GetName(), "name"); } + + EXPECT_EQ(query_transaction->GetResultTable().size(), 1); + for(const auto &row : query_transaction->GetResultTable().GetRows()) { + EXPECT_EQ(row.GetValue("name").GetAsString(), "bla"); + } } } // namespace caosdb::transaction -- GitLab