diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-08-24 13:42:04 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-08-24 13:42:04 +0200 |
commit | 7392db256c1587ff8fe87d95c5ae5c10f854f79e (patch) | |
tree | b41dd7cea27ef46e13def92af80de1d310e3c43d /odb/sqlite/transaction-impl.cxx | |
parent | 80c9352bdb197cea6a1fddc9f9e623c06e5d71ce (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/sqlite/transaction-impl.cxx')
-rw-r--r-- | odb/sqlite/transaction-impl.cxx | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/odb/sqlite/transaction-impl.cxx b/odb/sqlite/transaction-impl.cxx index 772b274..b425ed8 100644 --- a/odb/sqlite/transaction-impl.cxx +++ b/odb/sqlite/transaction-impl.cxx @@ -14,12 +14,38 @@ namespace odb namespace sqlite { transaction_impl:: + transaction_impl (database_type& db, lock l) + : odb::transaction_impl (db), lock_ (l) + { + } + + transaction_impl:: transaction_impl (connection_ptr c, lock l) - : odb::transaction_impl (c->database (), *c), connection_ (c) + : odb::transaction_impl (c->database (), *c), + connection_ (c), + lock_ (l) + { + } + + transaction_impl:: + ~transaction_impl () + { + } + + 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 (); + } + statement_cache& sc (connection_->statement_cache ()); - switch (l) + switch (lock_) { case deferred: { @@ -39,11 +65,6 @@ namespace odb } } - transaction_impl:: - ~transaction_impl () - { - } - void transaction_impl:: commit () { |