libpqxx  7.0.2
robusttransaction.hxx
1 /* Definition of the pqxx::robusttransaction class.
2  *
3  * pqxx::robusttransaction is a slower but safer transaction class.
4  *
5  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/robusttransaction instead.
6  *
7  * Copyright (c) 2000-2020, Jeroen T. Vermeulen.
8  *
9  * See COPYING for copyright license. If you did not receive a file called
10  * COPYING with this source code, please notify the distributor of this
11  * mistake, or contact the author.
12  */
13 #ifndef PQXX_H_ROBUSTTRANSACTION
14 #define PQXX_H_ROBUSTTRANSACTION
15 
16 #include "pqxx/compiler-public.hxx"
17 #include "pqxx/internal/compiler-internal-pre.hxx"
18 
19 #include "pqxx/dbtransaction.hxx"
20 
21 namespace pqxx::internal
22 {
24 class PQXX_LIBEXPORT PQXX_NOVTABLE basic_robusttransaction
25  : public dbtransaction
26 {
27 public:
28  virtual ~basic_robusttransaction() override = 0;
29 
30 protected:
31  basic_robusttransaction(connection &c, char const begin_command[]);
32 
33 private:
34  using IDType = unsigned long;
35 
36  std::string m_conn_string;
37  std::string m_xid;
38  int m_backendpid = -1;
39 
40  virtual void do_commit() override;
41  virtual void do_abort() override;
42 };
43 } // namespace pqxx::internal
44 
45 
46 namespace pqxx
47 {
54 
76 template<isolation_level ISOLATION = read_committed>
78 {
79 public:
85  connection &c, std::string_view name = std::string_view{}) :
86  namedclass{"robusttransaction", name},
87  internal::basic_robusttransaction{
88  c,
89  pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>.c_str()}
90  {}
91 
92  virtual ~robusttransaction() noexcept override { close(); }
93 };
94 
98 } // namespace pqxx
99 
100 #include "pqxx/internal/compiler-internal-post.hxx"
101 #endif
pqxx::nontransaction
Simple "transaction" class offering no transactional integrity.
Definition: nontransaction.hxx:52
pqxx::internal::basic_robusttransaction::basic_robusttransaction
basic_robusttransaction(connection &c, char const begin_command[])
Definition: robusttransaction.cxx:78
pqxx::transaction_base::query_value
TYPE query_value(std::string const &query, std::string const &desc=std::string{})
Execute query, expecting exactly 1 row with 1 field.
Definition: transaction_base.hxx:275
pqxx
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:25
pqxx::robusttransaction::~robusttransaction
virtual ~robusttransaction() noexcept override
Definition: robusttransaction.hxx:92
pqxx::robusttransaction
Slightly slower, better-fortified version of transaction.
Definition: robusttransaction.hxx:77
pqxx::internal::basic_robusttransaction
Helper base class for the robusttransaction class template.
Definition: robusttransaction.hxx:24
pqxx::to_string
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:478
pqxx::robusttransaction::robusttransaction
robusttransaction(connection &c, std::string_view name=std::string_view{})
Definition: robusttransaction.hxx:84
pqxx::internal
Private namespace for libpqxx's internal use; do not access.
Definition: connection.hxx:59
pqxx::internal::namedclass::namedclass
namedclass(std::string_view classname)
Definition: util.hxx:211
pqxx::internal::namedclass
Helper base class: object descriptions for error messages and such.
Definition: util.hxx:208
pqxx::dbtransaction
Abstract transaction base class: bracket transactions on the database.
Definition: dbtransaction.hxx:52
pqxx::broken_connection
Exception class for lost or failed backend connection.
Definition: except.hxx:67
pqxx::internal_error
Internal error in libpqxx library.
Definition: except.hxx:157
pqxx::connection
Connection to a database.
Definition: connection.hxx:135
pqxx::transaction_base::close
void close() noexcept
End transaction. To be called by implementing class' destructor.
Definition: transaction_base.cxx:308
pqxx::internal::basic_robusttransaction::~basic_robusttransaction
virtual ~basic_robusttransaction() override=0
pqxx::internal::namedclass::name
const std::string & name() const noexcept
Object name, or the empty string if no name was given.
Definition: util.hxx:229