forked from jtv/libpqxx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test32.cxx
78 lines (61 loc) · 1.96 KB
/
test32.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <pqxx/nontransaction>
#include <pqxx/transaction>
#include <pqxx/transactor>
#include "test_helpers.hxx"
using namespace pqxx;
// Test program for libpqxx. Verify abort behaviour of transactor.
//
// The program will attempt to add an entry to a table called "pqxxevents",
// with a key column called "year"--and then abort the change.
//
// Note for the superstitious: the numbering for this test program is pure
// coincidence.
namespace
{
// Let's take a boring year that is not going to be in the "pqxxevents" table
constexpr int BoringYear{1977};
std::pair<int, int> count_events(connection &conn, std::string const &table)
{
std::string const count_query{"SELECT count(*) FROM " + table};
work tx{conn};
return std::make_pair(
tx.query_value<int>(count_query),
tx.query_value<int>(count_query + " WHERE year=" + to_string(BoringYear)));
}
struct deliberate_error : std::exception
{};
void test_032()
{
connection conn;
{
nontransaction tx{conn};
test::create_pqxxevents(tx);
}
std::string const Table{"pqxxevents"};
std::pair<int, int> const Before{
perform([&conn, &Table] { return count_events(conn, Table); })};
PQXX_CHECK_EQUAL(
Before.second, 0,
"Already have event for " + to_string(BoringYear) + ", cannot test.");
{
quiet_errorhandler d(conn);
PQXX_CHECK_THROWS(
perform([&conn, &Table] {
work{conn}.exec0(
"INSERT INTO " + Table + " VALUES (" + to_string(BoringYear) +
", "
"'yawn')");
throw deliberate_error();
}),
deliberate_error,
"Did not get expected exception from failing transactor.");
}
std::pair<int, int> const After{
perform([&conn, &Table] { return count_events(conn, Table); })};
PQXX_CHECK_EQUAL(After.first, Before.first, "Event count changed.");
PQXX_CHECK_EQUAL(
After.second, Before.second,
"Event count for " + to_string(BoringYear) + " changed.");
}
PQXX_REGISTER_TEST(test_032);
} // namespace