diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-01-18 10:23:39 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-01-18 10:23:39 +0200 |
commit | d304a4b2b19dca115954f209d6a37a6958e73ab9 (patch) | |
tree | 0822a40a7d44e7921076b6ad458d29e3ad91c525 /common/transaction/driver.cxx | |
parent | 856a438b33184959b64864f1afdf5a6a2fd6b0d2 (diff) |
Add support for post-commit/rollback callbacks
New test: common/transaction/callback.
Diffstat (limited to 'common/transaction/driver.cxx')
-rw-r--r-- | common/transaction/driver.cxx | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/common/transaction/driver.cxx b/common/transaction/driver.cxx deleted file mode 100644 index f785870..0000000 --- a/common/transaction/driver.cxx +++ /dev/null @@ -1,149 +0,0 @@ -// file : common/transaction/driver.cxx -// copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC -// license : GNU GPL v2; see accompanying LICENSE file - -// Test transaction operations. -// - -#include <string> -#include <cassert> -#include <iostream> - -#include <odb/tracer.hxx> -#include <odb/database.hxx> -#include <odb/transaction.hxx> -#include <odb/statement.hxx> -#include <odb/exceptions.hxx> - -#include <common/common.hxx> -#include <common/concrete.hxx> - -using namespace std; -using namespace odb::core; - -struct transaction_tracer: odb::tracer -{ - virtual void - execute (connection&, const char* s) - { - string str (s); - - if (str == "BEGIN") - cout << "begin transaction" << endl; - else if (str == "COMMIT") - cout << "commit transaction" << endl; - else if (str == "ROLLBACK") - cout << "rollback transaction" << endl; - } - - // Override the other version to get rid of a Sun CC warning. - // - virtual void - execute (connection& c, const statement& s) - { - execute (c, s.text ()); - } -}; - -int -main (int argc, char* argv[]) -{ - { - transaction_tracer tracer; - auto_ptr<database> db (create_database (argc, argv, false)); - db->tracer (tracer); - - assert (!transaction::has_current ()); - - // Current and db accessors. - // - cout << "test 001" << endl; - { - transaction t (db->begin ()); - assert (&t.database () == db.get ()); - assert (transaction::has_current ()); - assert (&transaction::current () == &t); - - transaction::reset_current (); - assert (!transaction::has_current ()); - - transaction t2 (db->begin (), false); - assert (!transaction::has_current ()); - - transaction::current (t2); - assert (&transaction::current () == &t2); - } - - // Commit. - // - cout << "test 002" << endl; - { - transaction t (db->begin ()); - t.commit (); - } - - // Rollback. - // - cout << "test 003" << endl; - { - transaction t (db->begin ()); - t.rollback (); - } - - // Auto rollback. - // - cout << "test 004" << endl; - { - transaction t (db->begin ()); - } - - // Nested transaction. - // - cout << "test 005" << endl; - { - transaction t (db->begin ()); - - try - { - transaction n (db->begin ()); - } - catch (const already_in_transaction&) - { - cout << "already_in_transaction" << endl; - } - } - - // Concrete transaction type. - // - cout << "test 006" << endl; - { - assert (sizeof (odb_db::transaction) == sizeof (transaction)); - - odb_db::transaction t (static_cast<odb_db::database&> (*db).begin ()); - odb_db::transaction& r (odb_db::transaction::current ()); - assert (&t == &r); - } - - // Transaction restart. - // - cout << "test 007" << endl; - { - transaction t (db->begin ()); - t.commit (); - t.reset (db->begin ()); - t.commit (); - } - } - - // Test early connection release. - // - { - auto_ptr<database> db (create_database (argc, argv, false, 1)); - transaction t1 (db->begin ()); - t1.commit (); - transaction t2 (db->begin ()); - t2.rollback (); - transaction t3 (db->begin ()); - t3.commit (); - } -} |