libpqxx  7.7.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-2022, 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/dbtransaction.hxx"
17 
18 namespace pqxx::internal
19 {
21 class PQXX_LIBEXPORT PQXX_NOVTABLE basic_robusttransaction
22  : public dbtransaction
23 {
24 public:
25  virtual ~basic_robusttransaction() override = 0;
26 
27 protected:
29  connection &c, zview begin_command, std::string_view tname);
30  basic_robusttransaction(connection &c, zview begin_command);
31 
32 private:
33  using IDType = unsigned long;
34 
35  std::string m_conn_string;
36  std::string m_xid;
37  int m_backendpid = -1;
38 
39  void init(zview begin_command);
40 
41  // @warning This function will become `final`.
42  virtual void do_commit() override;
43 };
44 } // namespace pqxx::internal
45 
46 
47 namespace pqxx
48 {
55 
77 template<isolation_level ISOLATION = read_committed>
79 {
80 public:
85  robusttransaction(connection &c, std::string_view tname) :
86  internal::basic_robusttransaction{
87  c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
88  tname}
89  {}
90 
95  robusttransaction(connection &c, std::string &&tname) :
96  internal::basic_robusttransaction{
97  c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
98  std::move(tname)}
99  {}
100 
105  internal::basic_robusttransaction{
106  c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>}
107  {}
108 
109  virtual ~robusttransaction() noexcept override { close(); }
110 };
111 
115 } // namespace pqxx
116 #endif
Helper base class for the robusttransaction class template.
Definition: robusttransaction.hxx:21
Abstract transaction base class: bracket transactions on the database.
Definition: dbtransaction.hxx:49
robusttransaction(connection &c, std::string_view tname)
Definition: robusttransaction.hxx:85
robusttransaction(connection &c, std::string &&tname)
Definition: robusttransaction.hxx:95
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:37
Internal items for libpqxx&#39; own use. Do not use these yourself.
Definition: composite.hxx:79
Connection to a database.
Definition: connection.hxx:180
robusttransaction(connection &c)
Definition: robusttransaction.hxx:104
Slightly slower, better-fortified version of transaction.
Definition: robusttransaction.hxx:78
virtual ~robusttransaction() noexcept override
Definition: robusttransaction.hxx:109
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:22