pgLab/pgsql/Pgsql_Transaction.cpp
eelke e32c82ac6f 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.
2018-12-09 20:24:11 +01:00

178 lines
3.7 KiB
C++

#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 &params)
{
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 &params)
{
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 &params)
{
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