aboutsummaryrefslogtreecommitdiff
path: root/odb/mysql/view-result.txx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-10-15 13:17:30 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-10-15 13:17:30 +0200
commitc3a2b62f33e1f3fe19700257efdba7123b272cc4 (patch)
tree281f2275a2a7202c24bf114532adcd5752eaf19d /odb/mysql/view-result.txx
parent9126281b53722115b2e8624632f2dd616f0c26a0 (diff)
Implement early connection release
Diffstat (limited to 'odb/mysql/view-result.txx')
-rw-r--r--odb/mysql/view-result.txx23
1 files changed, 17 insertions, 6 deletions
diff --git a/odb/mysql/view-result.txx b/odb/mysql/view-result.txx
index 27eb1ab..5c26fce 100644
--- a/odb/mysql/view-result.txx
+++ b/odb/mysql/view-result.txx
@@ -20,11 +20,24 @@ namespace odb
}
template <typename T>
+ void view_result_impl<T>::
+ invalidate ()
+ {
+ if (!this->end_)
+ {
+ statement_->free_result ();
+ this->end_ = true;
+ }
+
+ statement_.reset ();
+ }
+
+ template <typename T>
view_result_impl<T>::
view_result_impl (const query_base&,
details::shared_ptr<select_statement> statement,
statements_type& statements)
- : base_type (statements.connection ().database ()),
+ : base_type (statements.connection ()),
statement_ (statement),
statements_ (statements),
count_ (0)
@@ -38,11 +51,9 @@ namespace odb
if (count_ > statement_->fetched ())
fetch ();
- odb::database& db (this->database ());
-
- view_traits::callback (db, view, callback_event::pre_load);
- view_traits::init (view, statements_.image (), &db);
- view_traits::callback (db, view, callback_event::post_load);
+ view_traits::callback (this->db_, view, callback_event::pre_load);
+ view_traits::init (view, statements_.image (), &this->db_);
+ view_traits::callback (this->db_, view, callback_event::post_load);
}
template <typename T>