From f3e419f52b42cfefa9b3eedbde3697c8b95c92a7 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 22 Nov 2010 12:09:48 +0200 Subject: Make query result aware of session and const objects --- odb/mysql/forward.hxx | 2 ++ odb/mysql/result.hxx | 19 +++++++++++++------ odb/mysql/result.txx | 29 ++++++++++++++++++----------- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/odb/mysql/forward.hxx b/odb/mysql/forward.hxx index 3b36780..d334cb3 100644 --- a/odb/mysql/forward.hxx +++ b/odb/mysql/forward.hxx @@ -20,6 +20,8 @@ namespace odb // Implementation details. // + class select_statement; + template class object_statements; diff --git a/odb/mysql/result.hxx b/odb/mysql/result.hxx index fe4fcfb..336d46c 100644 --- a/odb/mysql/result.hxx +++ b/odb/mysql/result.hxx @@ -24,18 +24,25 @@ namespace odb class result_impl: public odb::result_impl { public: - typedef object_traits traits; - typedef typename traits::pointer_type pointer_type; - typedef typename traits::pointer_traits pointer_traits; + typedef typename odb::result_impl::pointer_type pointer_type; + typedef typename odb::result_impl::pointer_traits pointer_traits; + + typedef typename odb::result_impl::object_type object_type; + typedef typename odb::result_impl::id_type id_type; + typedef typename odb::result_impl::object_traits object_traits; + virtual ~result_impl (); result_impl (details::shared_ptr statement, - object_statements& statements); + object_statements& statements); virtual void - current (T&); + current (object_type&); + + virtual id_type + current_id (); virtual void next (); @@ -50,7 +57,7 @@ namespace odb private: details::shared_ptr statement_; - object_statements& statements_; + object_statements& statements_; }; } } diff --git a/odb/mysql/result.txx b/odb/mysql/result.txx index c342b17..bb1fe01 100644 --- a/odb/mysql/result.txx +++ b/odb/mysql/result.txx @@ -16,19 +16,26 @@ namespace odb template result_impl:: result_impl (details::shared_ptr statement, - object_statements& statements) - : statement_ (statement), statements_ (statements) + object_statements& statements) + : odb::result_impl (statements.connection ().database ()), + statement_ (statement), + statements_ (statements) { next (); } template void result_impl:: - current (T& x) + current (object_type& x) { - if (!this->end_) - traits::init ( - x, statements_.image (), statements_.connection ().database ()); + object_traits::init (x, statements_.image (), this->database ()); + } + + template + typename result_impl::id_type result_impl:: + current_id () + { + return object_traits::id (statements_.image ()); } template @@ -42,12 +49,12 @@ namespace odb // if (statement_->cached ()) { - typename traits::image_type& im (statements_.image ()); + typename object_traits::image_type& im (statements_.image ()); if (im.version != statements_.out_image_version ()) { binding& b (statements_.out_image_binding ()); - traits::bind (b.bind, im, true); + object_traits::bind (b.bind, im, true); statements_.out_image_version (im.version); b.version++; } @@ -59,13 +66,13 @@ namespace odb { case select_statement::truncated: { - typename traits::image_type& im (statements_.image ()); - traits::grow (im, statements_.out_image_error ()); + typename object_traits::image_type& im (statements_.image ()); + object_traits::grow (im, statements_.out_image_error ()); if (im.version != statements_.out_image_version ()) { binding& b (statements_.out_image_binding ()); - traits::bind (b.bind, im, true); + object_traits::bind (b.bind, im, true); statements_.out_image_version (im.version); b.version++; statement_->refetch (); -- cgit v1.1