From af7b76b6bc14c57a753d6a58365bd4a6cc4e914d Mon Sep 17 00:00:00 2001
From: randomdan <randomdan@localhost>
Date: Sun, 27 Jan 2013 18:18:31 +0000
Subject: Record tx open separately from executed for the cases when the
 execute fails

---
 libpqpp/selectcommand.cpp | 6 +++++-
 libpqpp/selectcommand.h   | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/libpqpp/selectcommand.cpp b/libpqpp/selectcommand.cpp
index cc92540..3798406 100644
--- a/libpqpp/selectcommand.cpp
+++ b/libpqpp/selectcommand.cpp
@@ -8,6 +8,7 @@ PQ::SelectCommand::SelectCommand(const Connection * conn, const std::string & sq
 	DB::SelectCommand(sql),
 	PQ::Command(conn, sql, no),
 	executed(false),
+	txOpened(false),
 	nTuples(0),
 	tuple(0),
 	execRes(NULL)
@@ -16,8 +17,10 @@ PQ::SelectCommand::SelectCommand(const Connection * conn, const std::string & sq
 
 PQ::SelectCommand::~SelectCommand()
 {
-	if (executed) {
+	if (txOpened) {
 		c->commitTx();
+	}
+	if (executed) {
 		PQclear(PQexec(c->conn, ("CLOSE " + stmntName).c_str()));
 		if (execRes) {
 			PQclear(execRes);
@@ -54,6 +57,7 @@ PQ::SelectCommand::execute()
 			}
 		}
 		c->beginTx();
+		txOpened = true;
 		c->checkResultFree(
 				PQexecParams(c->conn, psql.c_str(), values.size(), NULL, &values.front(), &lengths.front(), &formats.front(), 0),
 				PGRES_COMMAND_OK);
diff --git a/libpqpp/selectcommand.h b/libpqpp/selectcommand.h
index 932717d..507bf43 100644
--- a/libpqpp/selectcommand.h
+++ b/libpqpp/selectcommand.h
@@ -22,6 +22,7 @@ namespace PQ {
 			unsigned int getOrdinal(const Glib::ustring&) const;
 		private:
 			mutable bool executed;
+			mutable bool txOpened;
 			std::vector<Column *> fields;
 			std::map<Glib::ustring, Column *> fieldsName;
 			int nTuples, tuple;
-- 
cgit v1.2.3