From 1fd206694699ab8ed0929b4504accb4e71fd7ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Fri, 10 Oct 2025 15:51:51 +0200 Subject: [PATCH] progress on session::update --- include/matador/orm/session.hpp | 3 ++- test/backends/SessionTest.cpp | 43 ++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/include/matador/orm/session.hpp b/include/matador/orm/session.hpp index 8833862..526e371 100644 --- a/include/matador/orm/session.hpp +++ b/include/matador/orm/session.hpp @@ -194,9 +194,10 @@ utils::result, utils::error> session::update( const obj return utils::failure(info.err()); } + const auto col = sql::column(info->get()->prototype().primary_key()->name()); auto res = query::query::update(info->get().name()) .set(*obj) - // .where(sql::column(info->prototype().primary_key()->name()) == _) + .where(col == utils::_) .prepare(*this); if (!res) { return utils::failure(res.err()); diff --git a/test/backends/SessionTest.cpp b/test/backends/SessionTest.cpp index c7f4cb0..3194a3c 100644 --- a/test/backends/SessionTest.cpp +++ b/test/backends/SessionTest.cpp @@ -15,6 +15,48 @@ using namespace matador; using namespace matador::object; using namespace matador::test; +TEST_CASE_METHOD(SessionFixture, "Session insert test", "[session][insert]") { + const auto result = ses.attach("airplanes") + .and_then([this] { return ses.create_schema(); } ); + REQUIRE(result.is_ok()); + + tables_to_drop.emplace("airplanes"); + + auto plane = ses.insert(1, "Boeing", "A380"); + REQUIRE(plane.is_ok()); + + const auto res = ses.find(1); + REQUIRE(res.is_ok()); + const auto& read_airplane = *res; + REQUIRE(read_airplane->id == (*plane)->id); + REQUIRE(read_airplane->brand == (*plane)->brand); + REQUIRE(read_airplane->model == (*plane)->model); +} + +TEST_CASE_METHOD(SessionFixture, "Session update test", "[session][update]") { + const auto res = ses.attach("airplanes") + .and_then([this] { return ses.create_schema(); } ); + REQUIRE(res.is_ok()); + + tables_to_drop.emplace("airplanes"); + + auto result = ses.insert(1, "Boeing", "747"); + REQUIRE(result.is_ok()); + + const auto plane = result.value(); + result = ses.find(1); + REQUIRE(result.is_ok()); + const auto& read_airplane = *result; + REQUIRE(read_airplane->id == plane->id); + REQUIRE(read_airplane->brand == plane->brand); + REQUIRE(read_airplane->model == plane->model); + + read_airplane->brand = "Airbus"; + read_airplane->model = "A380"; + + auto update_result = ses.update(read_airplane); +} + TEST_CASE_METHOD(SessionFixture, "Session relation test", "[session][relation]") { const auto result = ses.attach("airplanes") .and_then([this] { return ses.attach("flights"); } ) @@ -208,7 +250,6 @@ TEST_CASE_METHOD(SessionFixture, "Use session to find all objects with one-to-ma 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");