summaryrefslogtreecommitdiff
path: root/odb/mysql/transaction-impl.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-08-24 13:42:04 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-08-24 13:42:04 +0200
commitce69b47672cab339994828e0ff5e28b058a517f0 (patch)
tree809b2398a51e4388c483f4671f21ced2b47b739f /odb/mysql/transaction-impl.cxx
parent19b2244f56731cd23d0298112d1981bd0429ad4b (diff)
Add support for transaction multiplexing
Also delay getting a connection until after we do all the sanity checks (e.g., that there is no active transaction). Otherwise we are running risk of getting blocked rather than throwing an exception.
Diffstat (limited to 'odb/mysql/transaction-impl.cxx')
-rw-r--r--odb/mysql/transaction-impl.cxx23
1 files changed, 21 insertions, 2 deletions
diff --git a/odb/mysql/transaction-impl.cxx b/odb/mysql/transaction-impl.cxx
index 86cccbe..24c511f 100644
--- a/odb/mysql/transaction-impl.cxx
+++ b/odb/mysql/transaction-impl.cxx
@@ -14,11 +14,15 @@ namespace odb
namespace mysql
{
transaction_impl::
+ transaction_impl (database_type& db)
+ : odb::transaction_impl (db)
+ {
+ }
+
+ transaction_impl::
transaction_impl (connection_ptr c)
: odb::transaction_impl (c->database (), *c), connection_ (c)
{
- if (mysql_real_query (connection_->handle (), "begin", 5) != 0)
- translate_error (*connection_);
}
transaction_impl::
@@ -27,6 +31,21 @@ namespace odb
}
void transaction_impl::
+ start ()
+ {
+ // Grab a connection if we don't already have one.
+ //
+ if (connection_ == 0)
+ {
+ connection_ = static_cast<database_type&> (database_).connection ();
+ odb::transaction_impl::connection_ = connection_.get ();
+ }
+
+ if (mysql_real_query (connection_->handle (), "begin", 5) != 0)
+ translate_error (*connection_);
+ }
+
+ void transaction_impl::
commit ()
{
connection_->clear ();