diff options
Diffstat (limited to 'src/dal/dataprovider.cpp')
-rw-r--r-- | src/dal/dataprovider.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/dal/dataprovider.cpp b/src/dal/dataprovider.cpp index f6bcbdf..b0f05d3 100644 --- a/src/dal/dataprovider.cpp +++ b/src/dal/dataprovider.cpp @@ -27,21 +27,28 @@ namespace dal PerformTransaction::PerformTransaction(DataProvider *dataProvider) : mDataProvider(dataProvider) + , mTransactionStarted(false) , mCommitted(false) { - mDataProvider->beginTransaction(); + if (!mDataProvider->inTransaction()) { + mDataProvider->beginTransaction(); + mTransactionStarted = true; + } } PerformTransaction::~PerformTransaction() { - if (!mCommitted) + if (mTransactionStarted && !mCommitted) mDataProvider->rollbackTransaction(); } void PerformTransaction::commit() { - mDataProvider->commitTransaction(); - mCommitted = true; + if (mTransactionStarted) { + mDataProvider->commitTransaction(); + mCommitted = true; + mTransactionStarted = false; + } } |