libpqxx  7.3.0
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:
32  connection &c, zview begin_command, std::string_view tname);
33  basic_robusttransaction(connection &c, zview begin_command);
34 
35 private:
36  using IDType = unsigned long;
37 
38  std::string m_conn_string;
39  std::string m_xid;
40  int m_backendpid = -1;
41 
42  void init(zview begin_command);
43 
44  // @warning This function will become @c final.
45  virtual void do_commit() override;
46 };
47 } // namespace pqxx::internal
48 
49 
50 namespace pqxx
51 {
58 
80 template<isolation_level ISOLATION = read_committed>
82 {
83 public:
88  robusttransaction(connection &c, std::string_view tname) :
89  internal::basic_robusttransaction{
90  c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
91  tname}
92  {}
93 
98  robusttransaction(connection &c, std::string &&tname) :
99  internal::basic_robusttransaction{
100  c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
101  std::move(tname)}
102  {}
103 
109  internal::basic_robusttransaction{
110  c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>}
111  {}
112 
113  virtual ~robusttransaction() noexcept override { close(); }
114 };
115 
119 } // namespace pqxx
120 
121 #include "pqxx/internal/compiler-internal-post.hxx"
122 #endif
pqxx::robusttransaction::robusttransaction
robusttransaction(connection &c)
Definition: robusttransaction.hxx:108
pqxx::dbtransaction
Abstract transaction base class: bracket transactions on the database.
Definition: dbtransaction.hxx:53
pqxx
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:26
pqxx::robusttransaction
Slightly slower, better-fortified version of transaction.
Definition: robusttransaction.hxx:82
pqxx::robusttransaction::~robusttransaction
virtual ~robusttransaction() noexcept override
Definition: robusttransaction.hxx:113
pqxx::robusttransaction::robusttransaction
robusttransaction(connection &c, std::string_view tname)
Definition: robusttransaction.hxx:88
pqxx::robusttransaction::robusttransaction
robusttransaction(connection &c, std::string &&tname)
Definition: robusttransaction.hxx:98
pqxx::internal::basic_robusttransaction::basic_robusttransaction
basic_robusttransaction(connection &c, zview begin_command, std::string_view tname)
Definition: robusttransaction.cxx:100
pqxx::internal
Internal items for libpqxx' own use. Do not use these yourself.
Definition: composite.hxx:74
pqxx::connection
Connection to a database.
Definition: connection.hxx:164
pqxx::internal_error
Internal error in libpqxx library.
Definition: except.hxx:158
pqxx::broken_connection
Exception class for lost or failed backend connection.
Definition: except.hxx:68
pqxx::internal::basic_robusttransaction::~basic_robusttransaction
virtual ~basic_robusttransaction() override=0
pqxx::internal::basic_robusttransaction
Helper base class for the robusttransaction class template.
Definition: robusttransaction.hxx:26
pqxx::zview
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:38
pqxx::transaction_base::exec1
row exec1(zview query, std::string_view desc=std::string_view{})
Execute query returning a single row of data.
Definition: transaction_base.hxx:233
pqxx::nontransaction
Simple "transaction" class offering no transactional integrity.
Definition: nontransaction.hxx:53
pqxx::transaction_base::close
void close() noexcept
End transaction. To be called by implementing class' destructor.
Definition: transaction_base.cxx:328
pqxx::connection::connection_string
std::string connection_string() const
Return a connection string encapsulating this connection's options.
Definition: connection.cxx:1132