Created Pgsql::Transaction class for handling of transactions. It auto rollsback if no commit has been done.
Also moved some code out of the connection files to their own files.
This commit is contained in:
parent
255b2ec970
commit
e32c82ac6f
12 changed files with 394 additions and 130 deletions
178
pgsql/Pgsql_Transaction.cpp
Normal file
178
pgsql/Pgsql_Transaction.cpp
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
#include "Pgsql_Transaction.h"
|
||||
|
||||
#include "Pgsql_Connection.h"
|
||||
#include <boost/assert.hpp>
|
||||
|
||||
namespace Pgsql {
|
||||
|
||||
Transaction Transaction::startTransaction(Connection &conn)
|
||||
{
|
||||
conn.query("BEGIN");
|
||||
return Transaction(&conn);
|
||||
}
|
||||
|
||||
Transaction::~Transaction()
|
||||
{
|
||||
if (m_conn && !m_committed && !m_rolledback) {
|
||||
m_conn->query("ROLLBACK");
|
||||
}
|
||||
}
|
||||
|
||||
void Transaction::rollback()
|
||||
{
|
||||
m_conn->query("ROLLBACK");
|
||||
m_rolledback = true;
|
||||
}
|
||||
|
||||
void Transaction::commit()
|
||||
{
|
||||
m_conn->query("COMMIT");
|
||||
m_committed = true;
|
||||
}
|
||||
|
||||
Canceller Transaction::getCancel()
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->getCancel();
|
||||
}
|
||||
|
||||
std::string Transaction::getErrorMessage() const
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->getErrorMessage();
|
||||
}
|
||||
|
||||
Result Transaction::query(const char * command)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->query(command);
|
||||
}
|
||||
|
||||
Result Transaction::query(const QString &command)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->query(command);
|
||||
}
|
||||
|
||||
Result Transaction::queryParam(const char * command, const Params ¶ms)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->queryParam(command, params);
|
||||
}
|
||||
|
||||
Result Transaction::queryParam(const QString &command, const Params ¶ms)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->queryParam(command, params);
|
||||
}
|
||||
|
||||
bool Transaction::sendQuery(const char * query)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->sendQuery(query);
|
||||
}
|
||||
|
||||
bool Transaction::sendQuery(const std::string &command)
|
||||
{
|
||||
return sendQuery(command.c_str());
|
||||
}
|
||||
|
||||
bool Transaction::sendQuery(const QString &command)
|
||||
{
|
||||
return sendQuery(command.toUtf8().data());
|
||||
}
|
||||
|
||||
bool Transaction::sendQueryParams(const char * command, const Params ¶ms)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->sendQueryParams(command, params);
|
||||
}
|
||||
|
||||
std::shared_ptr<Result> Transaction::getResult()
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->getResult();
|
||||
}
|
||||
|
||||
bool Transaction::consumeInput()
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->consumeInput();
|
||||
}
|
||||
|
||||
bool Transaction::isBusy()
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
BOOST_ASSERT(m_committed == false);
|
||||
BOOST_ASSERT(m_rolledback == false);
|
||||
|
||||
return m_conn->isBusy();
|
||||
}
|
||||
|
||||
std::string Transaction::escapeLiteral(const std::string_view &literal)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
|
||||
return m_conn->escapeLiteral(literal);
|
||||
}
|
||||
|
||||
QString Transaction::escapeLiteral(const QString &literal)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
|
||||
return m_conn->escapeLiteral(literal);
|
||||
}
|
||||
|
||||
std::string Transaction::escapeIdentifier(const std::string_view &ident)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
|
||||
return m_conn->escapeIdentifier(ident);
|
||||
}
|
||||
|
||||
QString Transaction::escapeIdentifier(const QString &ident)
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
|
||||
return m_conn->escapeIdentifier(ident);
|
||||
}
|
||||
|
||||
|
||||
QString Transaction::getDBName() const
|
||||
{
|
||||
BOOST_ASSERT(m_conn != nullptr);
|
||||
|
||||
return m_conn->getDBName();
|
||||
}
|
||||
|
||||
} // end of namespace Pgsql
|
||||
Loading…
Add table
Add a link
Reference in a new issue