libpqxx
The C++ client library for PostgreSQL
transaction.hxx
Go to the documentation of this file.
1 /* Definition of the pqxx::transaction class.
2  * pqxx::transaction represents a standard database transaction.
3  *
4  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/transaction instead.
5  *
6  * Copyright (c) 2000-2026, Jeroen T. Vermeulen.
7  *
8  * See COPYING for copyright license. If you did not receive a file called
9  * COPYING with this source code, please notify the distributor of this
10  * mistake, or contact the author.
11  */
12 #ifndef PQXX_TRANSACTION_HXX
13 #define PQXX_TRANSACTION_HXX
14 
15 #if !defined(PQXX_HEADER_PRE)
16 # error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
17 #endif
18 
19 #include "pqxx/dbtransaction.hxx"
20 
21 namespace pqxx::internal
22 {
25 {
26 protected:
28  connection &cx, zview begin_command, std::string_view tname,
29  sl = sl::current());
31  connection &cx, zview begin_command, std::string &&tname,
32  sl = sl::current());
33  basic_transaction(connection &cx, zview begin_command, sl = sl::current());
34 
35 private:
36  void do_commit(sl) override;
37 
38 public:
39  basic_transaction() = delete;
42 
43  // NOLINTNEXTLINE(cppcoreguidelines-virtual-class-destructor)
44  ~basic_transaction() noexcept override = 0;
45 
46  basic_transaction &operator=(basic_transaction const &) = delete;
47  basic_transaction &operator=(basic_transaction &&) = delete;
48 };
49 } // namespace pqxx::internal
50 
51 
52 namespace pqxx
53 {
55 
81 template<
85 {
86 public:
88 
93  transaction(connection &cx, std::string_view tname, sl loc = sl::current()) :
94  internal::basic_transaction{
95  cx, internal::begin_cmd<ISOLATION, READWRITE>, tname, loc}
96  {}
97 
99 
103  explicit transaction(connection &cx, sl loc = sl::current()) :
104  internal::basic_transaction{
105  cx, internal::begin_cmd<ISOLATION, READWRITE>, loc}
106  {}
107 
108  transaction(transaction const &) = delete;
109  transaction(transaction &&) = delete;
110  transaction &operator=(transaction const &) = delete;
112 
113  ~transaction() noexcept override { close(sl::current()); }
114 };
115 
116 
118 
120 using work =
122 
123 
125 
129 
130 } // namespace pqxx
131 #endif
Connection to a database.
Definition: connection.hxx:273
Helper base class for the pqxx::transaction class template.
Definition: transaction.hxx:25
basic_transaction(basic_transaction const &)=delete
basic_transaction(basic_transaction &&)=delete
~basic_transaction() noexcept override=0
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:55
transaction & operator=(transaction const &)=delete
transaction(transaction &&)=delete
transaction(connection &cx, std::string_view tname, sl loc=sl::current())
Begin a transaction.
Definition: transaction.hxx:93
transaction(connection &cx, sl loc=sl::current())
Begin a transaction.
Definition: transaction.hxx:103
transaction & operator=(transaction &&)=delete
transaction(transaction const &)=delete
~transaction() noexcept override
Definition: transaction.hxx:113
Abstract transaction base class: bracket transactions on the database.
Definition: dbtransaction.hxx:54
transaction Standard back-end transaction, templatised on isolation level.
Definition: transaction.hxx:85
#define PQXX_LIBEXPORT
Definition: header-pre.hxx:206
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
isolation_level
Transaction isolation levels.
Definition: isolation.hxx:66
@ read_committed
Definition: isolation.hxx:70