diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2017-01-05 21:02:54 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2017-01-08 19:33:30 +0000 |
commit | b67dd43bbdca2563ed29e84d37efc91b99f9a8bf (patch) | |
tree | d3041e23231691de56cc57e8ff5920d51eefe06b /libpqpp | |
parent | Add PQ specific command options to control page size and the use of bulk -v- ... (diff) | |
download | libdbpp-postgresql-b67dd43bbdca2563ed29e84d37efc91b99f9a8bf.tar.bz2 libdbpp-postgresql-b67dd43bbdca2563ed29e84d37efc91b99f9a8bf.tar.xz libdbpp-postgresql-b67dd43bbdca2563ed29e84d37efc91b99f9a8bf.zip |
Fix bug where prepared statement cache wasn't cleared on connection reset leading to random failure due to prepapred statements not existing
Diffstat (limited to 'libpqpp')
-rw-r--r-- | libpqpp/pq-connection.cpp | 1 | ||||
-rw-r--r-- | libpqpp/pq-connection.h | 2 | ||||
-rw-r--r-- | libpqpp/unittests/testpq.cpp | 2 |
3 files changed, 4 insertions, 1 deletions
diff --git a/libpqpp/pq-connection.cpp b/libpqpp/pq-connection.cpp index 5b560a9..547923f 100644 --- a/libpqpp/pq-connection.cpp +++ b/libpqpp/pq-connection.cpp @@ -88,6 +88,7 @@ PQ::Connection::ping() const if (inTx()) { throw ConnectionError(conn); } + preparedStatements.clear(); PQreset(conn); if (PQstatus(conn) != CONNECTION_OK) { throw ConnectionError(conn); diff --git a/libpqpp/pq-connection.h b/libpqpp/pq-connection.h index d5cbde6..1659c13 100644 --- a/libpqpp/pq-connection.h +++ b/libpqpp/pq-connection.h @@ -43,7 +43,7 @@ namespace PQ { void checkResultFree(PGresult * res, int expected, int alternative = -1) const; PGconn * conn; - PreparedStatements preparedStatements; + mutable PreparedStatements preparedStatements; private: static bool checkResultInt(PGresult * res, int expected, int alternative); diff --git a/libpqpp/unittests/testpq.cpp b/libpqpp/unittests/testpq.cpp index f7c327f..fcf01e3 100644 --- a/libpqpp/unittests/testpq.cpp +++ b/libpqpp/unittests/testpq.cpp @@ -232,6 +232,7 @@ BOOST_AUTO_TEST_CASE( reconnect ) int pid1 = PQbackendPID(pqconn->conn); BOOST_REQUIRE(pid1); ro->ping(); + ro->modify("TRUNCATE TABLE test")->execute(); auto kil = rok->newModifyCommand("SELECT pg_terminate_backend(?)"); kil->bindParamI(0, pid1); kil->execute(); @@ -241,6 +242,7 @@ BOOST_AUTO_TEST_CASE( reconnect ) int pid2 = PQbackendPID(pqconn->conn); BOOST_REQUIRE(pid2); BOOST_REQUIRE(pid1 != pid2); + ro->modify("TRUNCATE TABLE test")->execute(); delete ro; delete rok; } |