diff --git a/test/backends/SessionTest.cpp b/test/backends/SessionTest.cpp index df5eec3..a2df001 100644 --- a/test/backends/SessionTest.cpp +++ b/test/backends/SessionTest.cpp @@ -7,6 +7,7 @@ #include "models/book.hpp" #include "models/department.hpp" #include "models/flight.hpp" +#include "models/recipe.hpp" #include @@ -202,4 +203,38 @@ TEST_CASE_METHOD(SessionFixture, "Use session to find all objects with one-to-ma std::cout << "\temployee: " << emp->first_name << " " << emp->last_name << "( " << emp->id << ")\n"; } } +} + +TEST_CASE_METHOD(SessionFixture, "Use session to find all objects with many-to-many eager relation", "[session][find][many-to-many][eager]") { + auto result = ses.attach("recipes") + .and_then( [this] { return ses.attach("ingredients"); } ) + .and_then( [this] { return ses.attach("recipe_ingredients"); } ) + .and_then( [this] { return ses.create_schema(); } ); + + tables_to_drop.emplace("recipes"); + tables_to_drop.emplace("ingredients"); + tables_to_drop.emplace("recipe_ingredients"); + + std::vector> ingredients; + ingredients.push_back(std::make_unique(1, "Apple")); + ingredients.push_back(std::make_unique(1, "Apple")); + ingredients.push_back(std::make_unique(2, "Strawberry")); + ingredients.push_back(std::make_unique(3, "Pineapple")); + ingredients.push_back(std::make_unique(4, "Sugar")); + ingredients.push_back(std::make_unique(5, "Flour")); + ingredients.push_back(std::make_unique(6, "Butter")); + ingredients.push_back(std::make_unique(7, "Beans")); + + for (auto &i: ingredients) { + auto res = ses.insert(i.release()); + REQUIRE(res.is_ok()); + } + + std::vector> recipes; + recipes.push_back(std::make_unique(7, "Apple Crumble")); + recipes.push_back(std::make_unique(8, "Beans Chili")); + recipes.push_back(std::make_unique(9, "Fruit Salad")); + + + } \ No newline at end of file diff --git a/test/models/recipe.hpp b/test/models/recipe.hpp index eb39c15..b3800a2 100644 --- a/test/models/recipe.hpp +++ b/test/models/recipe.hpp @@ -18,6 +18,10 @@ struct ingredient std::string name; std::vector> recipes{}; + ingredient()= default; + ingredient(const unsigned int id, std::string name) + : id(id), name(std::move(name)) {} + template void process(Operator &op) { namespace field = matador::access; @@ -33,6 +37,10 @@ struct recipe std::string name; std::vector> ingredients{}; + recipe()= default; + recipe(const unsigned int id, std::string name) + : id(id), name(std::move(name)) {} + template void process(Operator &op) { namespace field = matador::access; diff --git a/test/orm/backend/test_parameter_binder.cpp b/test/orm/backend/test_parameter_binder.cpp index 08a89e7..800fd9e 100644 --- a/test/orm/backend/test_parameter_binder.cpp +++ b/test/orm/backend/test_parameter_binder.cpp @@ -1,23 +1,23 @@ #include "test_parameter_binder.hpp" namespace matador::test::orm { -void test_parameter_binder::write_value(size_t pos, const int8_t &x) {} -void test_parameter_binder::write_value(size_t pos, const int16_t &x) {} -void test_parameter_binder::write_value(size_t pos, const int32_t &x) {} -void test_parameter_binder::write_value(size_t pos, const int64_t &x) {} -void test_parameter_binder::write_value(size_t pos, const uint8_t &x) {} -void test_parameter_binder::write_value(size_t pos, const uint16_t &x) {} -void test_parameter_binder::write_value(size_t pos, const uint32_t &x) {} -void test_parameter_binder::write_value(size_t pos, const uint64_t &x) {} -void test_parameter_binder::write_value(size_t pos, const bool &x) {} -void test_parameter_binder::write_value(size_t pos, const float &x) {} -void test_parameter_binder::write_value(size_t pos, const double &x) {} -void test_parameter_binder::write_value(size_t pos, const time &x) {} -void test_parameter_binder::write_value(size_t pos, const date &x) {} -void test_parameter_binder::write_value(size_t pos, const char *x) {} -void test_parameter_binder::write_value(size_t pos, const char *x, size_t size) {} -void test_parameter_binder::write_value(size_t pos, const std::string &x) {} -void test_parameter_binder::write_value(size_t pos, const std::string &x, size_t size) {} -void test_parameter_binder::write_value(size_t pos, const utils::blob &x) {} -void test_parameter_binder::write_value(size_t pos, const utils::value &x, size_t size) {} +void test_parameter_binder::write_value(size_t /*pos*/, const int8_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const int16_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const int32_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const int64_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const uint8_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const uint16_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const uint32_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const uint64_t &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const bool &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const float &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const double &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const time &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const date &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const char * /*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const char * /*x*/, size_t /*size*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const std::string &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const std::string &/*x*/, size_t /*size*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const utils::blob &/*x*/) {} +void test_parameter_binder::write_value(size_t /*pos*/, const utils::value &/*x*/, size_t /*size*/) {} }