From 24842f33130b02890b5af57e65ae7d3512d925d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Mon, 13 Oct 2025 07:07:00 +0200 Subject: [PATCH] session update progress --- include/matador/query/key_value_generator.hpp | 2 +- include/matador/sql/interface/statement_impl.hpp | 6 ++++-- include/matador/sql/object_parameter_binder.hpp | 8 +++++++- source/orm/sql/object_parameter_binder.cpp | 7 +++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/include/matador/query/key_value_generator.hpp b/include/matador/query/key_value_generator.hpp index bf55e90..96d0fab 100644 --- a/include/matador/query/key_value_generator.hpp +++ b/include/matador/query/key_value_generator.hpp @@ -29,7 +29,7 @@ public: template < class V > void on_primary_key(const char *id, V &x, const utils::primary_key_attribute& /*attr*/ = utils::default_pk_attributes) { - result_.emplace_back(id, x); + // result_.emplace_back(id, x); } void on_revision(const char *id, uint64_t &/*rev*/); diff --git a/include/matador/sql/interface/statement_impl.hpp b/include/matador/sql/interface/statement_impl.hpp index 8d9724f..09e79c4 100644 --- a/include/matador/sql/interface/statement_impl.hpp +++ b/include/matador/sql/interface/statement_impl.hpp @@ -26,10 +26,12 @@ public: virtual utils::result, utils::error> fetch(const parameter_binder& bindings) = 0; template < class Type > - void bind_object(Type &obj, parameter_binder& bindings) { - object_parameter_binder object_binder_; + size_t bind_object(Type &obj, parameter_binder& bindings) { + object_parameter_binder object_binder_(query_.command != sql_command::SQL_UPDATE); object_binder_.reset(start_index()); object_binder_.bind(obj, bindings); + + return object_binder_.current_index(); } template < class Type > diff --git a/include/matador/sql/object_parameter_binder.hpp b/include/matador/sql/object_parameter_binder.hpp index 3989bc2..8d62185 100644 --- a/include/matador/sql/object_parameter_binder.hpp +++ b/include/matador/sql/object_parameter_binder.hpp @@ -61,6 +61,8 @@ private: class object_parameter_binder { public: + explicit object_parameter_binder(bool include_primary_key = true); + template void bind(Type &obj, utils::attribute_writer &binder) { binder_ = &binder; @@ -69,10 +71,13 @@ public: } void reset(size_t start_index); + [[nodiscard]] size_t current_index() const; template < class Type > void on_primary_key(const char * /*id*/, Type &val, const utils::primary_key_attribute& attr = utils::default_pk_attributes) { - utils::data_type_traits::bind_value(*binder_, index_++, val, attr.size()); + if (include_primary_key_) { + utils::data_type_traits::bind_value(*binder_, index_++, val, attr.size()); + } } void on_revision(const char *id, uint64_t &/*rev*/); @@ -109,6 +114,7 @@ private: utils::attribute_writer *binder_{}; size_t index_{0}; detail::fk_binder fk_binder_; + bool include_primary_key_{true}; }; namespace detail { diff --git a/source/orm/sql/object_parameter_binder.cpp b/source/orm/sql/object_parameter_binder.cpp index ba08265..03fad1b 100644 --- a/source/orm/sql/object_parameter_binder.cpp +++ b/source/orm/sql/object_parameter_binder.cpp @@ -2,12 +2,19 @@ #include "matador/sql/interface/parameter_binder.hpp" namespace matador::sql { +object_parameter_binder::object_parameter_binder(bool include_primary_key) +: include_primary_key_(include_primary_key) { +} void object_parameter_binder::reset(const size_t start_index) { index_ = start_index; } +size_t object_parameter_binder::current_index() const { + return index_; +} + void object_parameter_binder::on_revision(const char * /*id*/, uint64_t &rev) { utils::data_type_traits::bind_value(*binder_, index_++, rev);