forked from jtv/libpqxx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test72.cxx
50 lines (38 loc) · 1.29 KB
/
test72.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
#include <iostream>
#include "test_helpers.hxx"
using namespace pqxx;
// Test program for libpqxx. Test error handling for pipeline.
namespace
{
void test_072()
{
connection conn;
work tx{conn};
pipeline P{tx};
// Ensure all queries are issued at once to make the test more interesting
P.retain();
// The middle query should fail; the surrounding two should succeed
auto const id_1{P.insert("SELECT 1")};
auto const id_f{P.insert("SELECT * FROM pg_nonexist")};
auto const id_2{P.insert("SELECT 2")};
// See that we can process the queries without stumbling over the error
P.complete();
// We should be able to get the first result, which preceeds the error
auto const res_1{P.retrieve(id_1).at(0).at(0).as<int>()};
PQXX_CHECK_EQUAL(res_1, 1, "Got wrong result from pipeline.");
// We should *not* get a result for the query behind the error
{
quiet_errorhandler d{conn};
PQXX_CHECK_THROWS(
P.retrieve(id_2).at(0).at(0).as<int>(), std::runtime_error,
"Pipeline wrongly resumed after SQL error.");
}
// Now see that we get an exception when we touch the failed result
{
quiet_errorhandler d{conn};
PQXX_CHECK_THROWS(
P.retrieve(id_f), sql_error, "Pipeline failed to register SQL error.");
}
}
} // namespace
PQXX_REGISTER_TEST(test_072);