/** * @file CSQLiteTransaction.cpp * @ingroup SQLiteCpp * @brief A CSQLiteTransaction is way to group multiple SQL statements into an atomic secured operation. * * Copyright (c) 2012-2013 Sebastien Rombauts (sebastien.rombauts@gmail.com) * * Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt * or copy at http://opensource.org/licenses/MIT) */ #include "pch.h" #include "CSQLite/CSQLiteTransaction.h" #include "CSQLite/CSQLiteDB.h" // Begins the SQLite CSQLiteTransaction CSQLiteTransaction::CSQLiteTransaction(CSQLiteDB & aDatabase, bool startnow) : mDatabase(aDatabase), mbCommited(false) { if(startnow) { mDatabase.exec("BEGIN"); mbCommited = false; }else{ mbCommited = true; } } // Safely rollback the CSQLiteTransaction if it has not been committed. CSQLiteTransaction::~CSQLiteTransaction() { if (false == mbCommited) { try { mDatabase.exec("ROLLBACK"); } catch (CSQLiteException&) { // Never throw an exception in a destructor: error if already rollbacked, but no harm is caused by this. } } } // Commit the CSQLiteTransaction. void CSQLiteTransaction::commit() { if (false == mbCommited) { mDatabase.exec("COMMIT"); mbCommited = true; } else { throw CSQLiteException("CSQLiteTransaction already commited."); } }