summaryrefslogtreecommitdiffstats
path: root/src/dal/dataprovider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dal/dataprovider.cpp')
-rw-r--r--src/dal/dataprovider.cpp15
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;
+ }
}