From 29c78d04e7371b21fbc3e7aef07b17ffd651e4f1 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 30 Dec 2015 06:13:56 +0000 Subject: Only open select transactions when the connection doesn't already have one --- libpqpp/pq-selectcommand.cpp | 2 +- libpqpp/unittests/testpq.cpp | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libpqpp/pq-selectcommand.cpp b/libpqpp/pq-selectcommand.cpp index e5a6cf2..6c02fc4 100644 --- a/libpqpp/pq-selectcommand.cpp +++ b/libpqpp/pq-selectcommand.cpp @@ -64,7 +64,7 @@ void PQ::SelectCommand::execute() { if (!executed) { - if (!txOpened) { + if (!c->inTx()) { c->beginTx(); txOpened = true; } diff --git a/libpqpp/unittests/testpq.cpp b/libpqpp/unittests/testpq.cpp index ed6c4bc..c49fa34 100644 --- a/libpqpp/unittests/testpq.cpp +++ b/libpqpp/unittests/testpq.cpp @@ -80,6 +80,25 @@ BOOST_AUTO_TEST_CASE( bindAndSelect ) delete ro; } +BOOST_AUTO_TEST_CASE( selectInTx ) +{ + auto db = DB::MockDatabase::openConnectionTo("pqmock"); + + auto select = db->newSelectCommand("SELECT * FROM test"); + while (select->fetch()) { } + delete select; + db->finish(); + + db->beginTx(); + select = db->newSelectCommand("SELECT * FROM test"); + while (select->fetch()) { } + delete select; + db->commitTx(); + db->finish(); + + delete db; +} + BOOST_AUTO_TEST_CASE( bindAndSelectOther ) { auto ro = DB::MockDatabase::openConnectionTo("pqmock"); -- cgit v1.2.3