fixed has one definitions

This commit is contained in:
sascha 2026-05-18 09:03:41 +02:00
parent 820b5432b2
commit 8c8423bf64
3 changed files with 6 additions and 21 deletions

View File

@ -3,6 +3,7 @@
#include "product.hpp" #include "product.hpp"
#include "matador/object/collection.hpp"
#include "matador/object/object_ptr.hpp" #include "matador/object/object_ptr.hpp"
#include "matador/utils/foreign_attributes.hpp" #include "matador/utils/foreign_attributes.hpp"
@ -13,14 +14,14 @@ struct order;
struct order_details { struct order_details {
unsigned int order_details_id; unsigned int order_details_id;
object::object_ptr<order> order_; object::object_ptr<order> order_;
object::object_ptr<product> product_; object::collection<object::object_ptr<product>> products_;
template<class Operator> template<class Operator>
void process(Operator &op) { void process(Operator &op) {
namespace field = matador::access; namespace field = matador::access;
field::primary_key(op, "order_details_id", order_details_id); field::primary_key(op, "order_details_id", order_details_id);
field::belongs_to(op, "order_id", order_, utils::CascadeNoneFetchLazy); field::belongs_to(op, "order_id", order_, utils::CascadeNoneFetchLazy);
field::has_one(op, "product_id", product_, utils::CascadeNoneFetchLazy); field::has_many(op, "order_products", products_, "product_id", utils::CascadeNoneFetchLazy);
} }
}; };
} }

View File

@ -1,17 +1,9 @@
#include <catch2/catch_test_macros.hpp> #include <catch2/catch_test_macros.hpp>
#include "matador/sql/backend_provider.hpp"
#include "matador/sql/connection_pool.hpp"
#include "matador/sql/interface/connection_impl.hpp"
#include "matador/query/generator.hpp" #include "matador/query/generator.hpp"
#include "matador/query/table.hpp" #include "matador/query/table.hpp"
#include "matador/query/schema.hpp" #include "matador/query/schema.hpp"
#include "matador/object/repository.hpp"
#include "../backend/test_backend_service.hpp"
#include "../test/models/product.hpp" #include "../test/models/product.hpp"
#include "../test/models/order.hpp" #include "../test/models/order.hpp"
#include "../test/models/book.hpp" #include "../test/models/book.hpp"
@ -23,8 +15,6 @@ using namespace matador::sql;
TEST_CASE("Generate columns from object", "[column][generator]") { TEST_CASE("Generate columns from object", "[column][generator]") {
using namespace matador::test; using namespace matador::test;
backend_provider::instance().register_backend("noop", std::make_unique<orm::test_backend_service>());
connection_pool pool("noop://noop.db", 4);
schema s; schema s;
auto result = s.attach<product>("product"); auto result = s.attach<product>("product");
@ -53,8 +43,6 @@ TEST_CASE("Generate columns from object", "[column][generator]") {
TEST_CASE("Generate columns for object with has many relation", "[column][generator][relation]") { TEST_CASE("Generate columns for object with has many relation", "[column][generator][relation]") {
using namespace matador::test; using namespace matador::test;
backend_provider::instance().register_backend("noop", std::make_unique<orm::test_backend_service>());
connection_pool pool("noop://noop.db", 4);
schema s; schema s;
auto result = s.attach<supplier>("supplier") auto result = s.attach<supplier>("supplier")
@ -82,8 +70,7 @@ TEST_CASE("Generate columns for object with has many relation", "[column][genera
{ &order_table, "ship_postal_code", "c11" }, { &order_table, "ship_postal_code", "c11" },
{ &order_table, "ship_country", "c12" }, { &order_table, "ship_country", "c12" },
{ &order_details_table, "order_details_id", "c13" }, { &order_details_table, "order_details_id", "c13" },
{ &order_details_table, "order_id", "c14" }, { &order_details_table, "order_id", "c14" }
{ &order_details_table, "product_id", "c15" }
}; };
REQUIRE(!columns.empty()); REQUIRE(!columns.empty());
REQUIRE(columns.size() == expected_columns.size()); REQUIRE(columns.size() == expected_columns.size());
@ -96,8 +83,6 @@ TEST_CASE("Generate columns for object with has many relation", "[column][genera
TEST_CASE("Generate columns for object with eager foreign key relation", "[column][generator][eager]") { TEST_CASE("Generate columns for object with eager foreign key relation", "[column][generator][eager]") {
using namespace matador::test; using namespace matador::test;
backend_provider::instance().register_backend("noop", std::make_unique<orm::test_backend_service>());
connection_pool pool("noop://noop.db", 4);
schema s; schema s;
auto result = s.attach<book>("books") auto result = s.attach<book>("books")

View File

@ -188,7 +188,7 @@ TEST_CASE("Create sql query data for entity with eager has many belongs to", "[q
REQUIRE(q.is_ok()); REQUIRE(q.is_ok());
const auto sql = q->str(db); const auto sql = q->str(db);
const std::string expected_sql = R"(SELECT "t01"."order_id", "t01"."order_date", "t01"."required_date", "t01"."shipped_date", "t01"."ship_via", "t01"."freight", "t01"."ship_name", "t01"."ship_address", "t01"."ship_city", "t01"."ship_region", "t01"."ship_postal_code", "t01"."ship_country", "t02"."order_details_id", "t02"."order_id", "t02"."product_id" FROM "orders" "t01" LEFT JOIN "order_details" "t02" ON "t01"."order_id" = "t02"."order_id" WHERE "t01"."order_id" = ? ORDER BY "t01"."order_id" ASC)"; const std::string expected_sql = R"(SELECT "t01"."order_id", "t01"."order_date", "t01"."required_date", "t01"."shipped_date", "t01"."ship_via", "t01"."freight", "t01"."ship_name", "t01"."ship_address", "t01"."ship_city", "t01"."ship_region", "t01"."ship_postal_code", "t01"."ship_country", "t02"."order_details_id", "t02"."order_id" FROM "orders" "t01" LEFT JOIN "order_details" "t02" ON "t01"."order_id" = "t02"."order_id" WHERE "t01"."order_id" = ? ORDER BY "t01"."order_id" ASC)";
REQUIRE(expected_sql == sql); REQUIRE(expected_sql == sql);
const auto& data = eqb.query_data(); const auto& data = eqb.query_data();
@ -211,8 +211,7 @@ TEST_CASE("Create sql query data for entity with eager has many belongs to", "[q
{ &orders, "ship_postal_code", "c11" }, { &orders, "ship_postal_code", "c11" },
{ &orders, "ship_country", "c12" }, { &orders, "ship_country", "c12" },
{ &order_details, "order_details_id", "c13" }, { &order_details, "order_details_id", "c13" },
{ &order_details, "order_id", "c14" }, { &order_details, "order_id", "c14" }
{ &order_details, "product_id", "c15" }
}; };
REQUIRE(data.columns.size() == expected_columns.size()); REQUIRE(data.columns.size() == expected_columns.size());
for (size_t i = 0; i != expected_columns.size(); ++i) { for (size_t i = 0; i != expected_columns.size(); ++i) {