libpqxx
The C++ client library for PostgreSQL
robusttransaction.hxx
Go to the documentation of this file.
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-2026, 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_ROBUSTTRANSACTION_HXX
14 #define PQXX_ROBUSTTRANSACTION_HXX
15 
16 #if !defined(PQXX_HEADER_PRE)
17 # error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
18 #endif
19 
20 #include "pqxx/dbtransaction.hxx"
21 
22 namespace pqxx::internal
23 {
26  : public dbtransaction
27 {
28 public:
31  ~basic_robusttransaction() override = 0;
32 
35 
36 protected:
37  basic_robusttransaction(connection &cx, zview begin_command, sl);
38 
39 private:
40  using IDType = unsigned long;
41 
42  std::string m_conn_string;
43  std::string m_xid;
44  int m_backendpid = -1;
45 
46  void init(zview begin_command, sl);
47 
48  // @warning This function will become `final`.
49  void do_commit(sl) override;
50 };
51 } // namespace pqxx::internal
52 
53 
54 namespace pqxx
55 {
63 
84 template<isolation_level ISOLATION = read_committed>
86 {
87 public:
92  robusttransaction(connection &cx, std::string_view tname) :
93  internal::basic_robusttransaction{
94  cx, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
95  tname}
96  {}
97 
102  robusttransaction(connection &cx, std::string &&tname) :
103  internal::basic_robusttransaction{
104  cx, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
105  std::move(tname)}
106  {}
107 
111  explicit robusttransaction(connection &cx, sl loc = sl::current()) :
112  internal::basic_robusttransaction{
113  cx, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
114  loc}
115  {}
116 
119 
120  ~robusttransaction() noexcept override { close(sl::current()); }
121 
124 };
125 
129 } // namespace pqxx
130 #endif
Connection to a database.
Definition: connection.hxx:273
Helper base class for the pqxx::robusttransaction class template.
Definition: robusttransaction.hxx:27
basic_robusttransaction & operator=(basic_robusttransaction const &)=delete
basic_robusttransaction & operator=(basic_robusttransaction &&)=delete
basic_robusttransaction(basic_robusttransaction &&)=delete
basic_robusttransaction(basic_robusttransaction const &)=delete
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:55
robusttransaction(connection &cx, sl loc=sl::current())
Definition: robusttransaction.hxx:111
robusttransaction(connection &cx, std::string &&tname)
Definition: robusttransaction.hxx:102
robusttransaction & operator=(robusttransaction const &)=delete
robusttransaction & operator=(robusttransaction &&)=delete
robusttransaction(connection &cx, std::string_view tname)
Definition: robusttransaction.hxx:92
void close(sl=sl::current()) noexcept
End transaction. To be called by implementing class' destructor.
Definition: transaction_base.cxx:372
robusttransaction(robusttransaction const &)=delete
robusttransaction(robusttransaction &&)=delete
~robusttransaction() noexcept override
Definition: robusttransaction.hxx:120
Abstract transaction base class: bracket transactions on the database.
Definition: dbtransaction.hxx:54
Slightly slower, better-fortified version of transaction.
Definition: robusttransaction.hxx:86
#define PQXX_LIBEXPORT
Definition: header-pre.hxx:206
#define PQXX_NOVTABLE
Definition: header-pre.hxx:221
Private namespace for libpqxx's internal use; do not access.
Definition: connection.cxx:333
const zview begin_cmd
The SQL command for starting a given type of transaction.
The home of all libpqxx classes, functions, templates, etc.
Definition: array.cxx:26
write_policy
Should a transaction be read-only, or read-write?
Definition: isolation.hxx:27
std::source_location sl
Convenience alias for std::source_location. It's just too long.
Definition: types.hxx:38