Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

dbtransaction.hxx

Go to the documentation of this file.
00001 /*------------------------------------------------------------------------- 00002 * 00003 * FILE 00004 * pqxx/dbtransaction.hxx 00005 * 00006 * DESCRIPTION 00007 * definition of the pqxx::dbtransaction abstract base class. 00008 * pqxx::dbransaction defines a real transaction on the database 00009 * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/dbtransaction instead. 00010 * 00011 * Copyright (c) 2004, Jeroen T. Vermeulen <jtv@xs4all.nl> 00012 * 00013 * See COPYING for copyright license. If you did not receive a file called 00014 * COPYING with this source code, please notify the distributor of this mistake, 00015 * or contact the author. 00016 * 00017 *------------------------------------------------------------------------- 00018 */ 00019 #include <string> 00020 00021 #include "pqxx/transaction_base" 00022 00023 namespace pqxx 00024 { 00025 00027 00054 class PQXX_LIBEXPORT dbtransaction : public transaction_base 00055 { 00056 protected: 00057 explicit dbtransaction(connection_base &C, 00058 const PGSTD::string &IsolationString, 00059 const PGSTD::string &NName, 00060 const PGSTD::string &CName) : 00061 transaction_base(C, NName, CName), 00062 m_StartCmd() 00063 { 00064 if (IsolationString != isolation_traits<read_committed>::name()) 00065 m_StartCmd = "SET TRANSACTION ISOLATION LEVEL " + IsolationString; 00066 } 00067 00069 void start_backend_transaction() 00070 { 00071 DirectExec("BEGIN", 2); 00072 if (!startcommand().empty()) DirectExec(startcommand().c_str()); 00073 } 00074 00076 const PGSTD::string &startcommand() const { return m_StartCmd; } 00077 00078 #ifdef PQXX_DEPRECATED_HEADERS 00079 00080 const PGSTD::string &StartCmd() const { return startcommand(); } 00081 #endif 00082 00083 private: 00084 00086 virtual void do_begin() =0; 00088 virtual result do_exec(const char Query[]); //[t1] 00090 virtual void do_commit() =0; 00092 virtual void do_abort() =0; 00093 00095 PGSTD::string m_StartCmd; 00096 }; 00097 00098 00099 inline result dbtransaction::do_exec(const char Query[]) 00100 { 00101 result R; 00102 try 00103 { 00104 R = DirectExec(Query); 00105 } 00106 catch (const PGSTD::exception &) 00107 { 00108 try { abort(); } catch (const PGSTD::exception &) {} 00109 throw; 00110 } 00111 return R; 00112 } 00113 00114 } // namespace pqxx 00115

Generated on Sun Jun 20 00:35:43 2004 for libpqxx by doxygen 1.3.7