diff --git a/include/matador/orm/session.hpp b/include/matador/orm/session.hpp index 16eab0e..0cebe6c 100644 --- a/include/matador/orm/session.hpp +++ b/include/matador/orm/session.hpp @@ -32,10 +32,14 @@ struct session_context { template class lazy_object_resolver final : public object::object_resolver { public: + explicit lazy_object_resolver(sql::statement &&stmt) : stmt_(std::move(stmt)) {} + Type* resolve(const object::object_proxy& proxy) const override { return proxy.resolve(); } +private: + sql::statement stmt_; }; class prototype_builder final { @@ -43,6 +47,15 @@ public: explicit prototype_builder(const std::unordered_map &statements_per_column) : statements_per_column_(statements_per_column) {} + + template < typename Type > + Type build() const { + Type obj; + access::process(*this, obj); + + return obj; + } + template < class V > static void on_primary_key(const char * /*id*/, V &/*pk*/, const utils::primary_key_attribute& /*attr*/ = utils::default_pk_attributes) {} static void on_revision(const char * /*id*/, unsigned long long &/*rev*/) {} @@ -50,6 +63,11 @@ public: static void on_attribute(const char * /*id*/, Type &/*obj*/, const utils::field_attributes &/*attr*/ = utils::null_attributes) {} template void on_belongs_to(const char *id, Pointer &obj, const utils::foreign_attributes &attr) { + const auto it = statements_per_column_.find(id); + if (it == statements_per_column_.end()) { + return; + } + } template