Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Z/src/ngldb/dbtransaction.cpp
T

83 lines
1.4 KiB
C++
Executable File

#include "dbtransaction.h"
#include "ngldb_logger.h"
#include <QtSql/QSqlError>
thread_local int s_refCounter = 0;
DBTransaction::DBTransaction(const QSqlDatabase &db)
: m_db(db)
, m_bCommitted(true)
, mLogger(NGLDB::getLogger("DBTransaction"))
{
++s_refCounter;
if (s_refCounter == 1)
begin();
}
DBTransaction::~DBTransaction()
{
if (s_refCounter == 1)
{
if (!m_bCommitted)
rollback();
}
--s_refCounter;
}
bool DBTransaction::begin()
{
if (!m_bCommitted)
return setState(false);
if (!m_db.transaction())
{
ERROR_LOG(mLogger) << "Error starting a transaction: " << m_db.lastError().driverText();
return setState(false);
}
m_bCommitted = false;
return setState(true);
}
bool DBTransaction::commit()
{
if (s_refCounter == 1)
{
if (!m_db.commit())
{
ERROR_LOG(mLogger) << "Error committing a transaction: " << m_db.lastError().driverText();
return setState(false);
}
m_bCommitted = true;
return setState(true);
}
return true;
}
bool DBTransaction::rollback()
{
if (s_refCounter == 1)
{
if (!m_db.rollback())
{
ERROR_LOG(mLogger) << "Error rolling back a transaction" << m_db.lastError().driverText();
return setState(false);
}
m_bCommitted = true;
return setState(true);
}
return true;
}
bool DBTransaction::state() const
{
return m_lastState;
}
bool DBTransaction::setState(bool bState)
{
m_lastState = bState;
return m_lastState;
}