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
18namespace pqxx::internal
19{
21class PQXX_LIBEXPORT PQXX_NOVTABLE basic_robusttransaction
22 : public dbtransaction
23{
24public:
25 virtual ~basic_robusttransaction() override = 0;
26
27protected:
29 connection &c, zview begin_command, std::string_view tname);
30 basic_robusttransaction(connection &c, zview begin_command);
31
32private:
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
47namespace pqxx
48{
56
77template<isolation_level ISOLATION = read_committed>
79{
80public:
85 robusttransaction(connection &c, std::string_view tname) :
87 c, pqxx::internal::begin_cmd<ISOLATION, write_policy::read_write>,
88 tname}
89 {}
90
95 robusttransaction(connection &c, std::string &&tname) :
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
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:23
write_policy
Should a transaction be read-only, or read-write?
Definition: isolation.hxx:23
Internal items for libpqxx' own use. Do not use these yourself.
Definition: composite.hxx:80
Connection to a database.
Definition: connection.hxx:181
Abstract transaction base class: bracket transactions on the database.
Definition: dbtransaction.hxx:50
Helper base class for the robusttransaction class template.
Definition: robusttransaction.hxx:23
virtual ~basic_robusttransaction() override=0
basic_robusttransaction(connection &c, zview begin_command, std::string_view tname)
Definition: robusttransaction.cxx:101
Slightly slower, better-fortified version of transaction.
Definition: robusttransaction.hxx:79
robusttransaction(connection &c, std::string_view tname)
Definition: robusttransaction.hxx:85
robusttransaction(connection &c)
Definition: robusttransaction.hxx:104
virtual ~robusttransaction() noexcept override
Definition: robusttransaction.hxx:109
robusttransaction(connection &c, std::string &&tname)
Definition: robusttransaction.hxx:95
void close() noexcept
End transaction. To be called by implementing class' destructor.
Definition: transaction_base.cxx:334
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:38