00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "pqxx/libcompiler.h"
00020
00021
00022 #include "pqxx/dbtransaction"
00023
00024
00025
00026
00027
00028
00029
00030 namespace pqxx
00031 {
00032
00037
00038 class PQXX_LIBEXPORT basic_transaction : public dbtransaction
00039 {
00040 protected:
00041 explicit basic_transaction(connection_base &C,
00042 const PGSTD::string &IsolationLevel,
00043 const PGSTD::string &TName);
00044
00045 private:
00046 virtual void do_begin();
00047 virtual void do_commit();
00048 virtual void do_abort();
00049 };
00050
00051
00053
00081 template<isolation_level ISOLATIONLEVEL=read_committed>
00082 class transaction : public basic_transaction
00083 {
00084 public:
00085 typedef isolation_traits<ISOLATIONLEVEL> isolation_tag;
00086
00088
00093 explicit transaction(connection_base &C, const PGSTD::string &TName):
00094 basic_transaction(C, isolation_tag::name(), TName)
00095 { Begin(); }
00096
00097 explicit transaction(connection_base &C) :
00098 basic_transaction(C, isolation_tag::name(), PGSTD::string())
00099 { Begin(); }
00100
00101 virtual ~transaction() throw ()
00102 {
00103 #ifdef PQXX_QUIET_DESTRUCTORS
00104 internal::disable_noticer Quiet(conn());
00105 #endif
00106 End();
00107 }
00108
00109 protected:
00110 virtual const char *classname() const throw () { return "transaction"; }
00111 };
00112
00113
00115 typedef transaction<> work;
00116
00118
00119 }
00120
00121