From 9a0be04113bcb673eeba5febd54cf4af860c36a5 Mon Sep 17 00:00:00 2001 From: Daniel Vaz Date: Thu, 27 Jun 2013 22:20:16 -0300 Subject: [PATCH] fixing bug #7822 --- src/core/qgsvectorfilewriter.cpp | 18 ++++++++++++++++++ src/core/qgsvectorfilewriter.h | 3 +++ 2 files changed, 21 insertions(+) diff --git a/src/core/qgsvectorfilewriter.cpp b/src/core/qgsvectorfilewriter.cpp index 0855e3e78ba..3f165faecb6 100644 --- a/src/core/qgsvectorfilewriter.cpp +++ b/src/core/qgsvectorfilewriter.cpp @@ -801,6 +801,16 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer, writer->startRender( layer ); + // enabling transaction on databases that support it + bool transactionsEnabled = true; + OGRLayerH ogrCurrentLayer = writer->getLayer(); + + if ( OGRERR_NONE != OGR_L_StartTransaction(ogrCurrentLayer) ) + { + QgsDebugMsg("Error when trying to enable transactions on OGRLayer."); + transactionsEnabled = false; + } + // write all features while ( fit.nextFeature( fet ) ) { @@ -862,6 +872,14 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer, n++; } + if ( transactionsEnabled ) + { + if ( OGRERR_NONE != OGR_L_CommitTransaction(ogrCurrentLayer) ) + { + QgsDebugMsg("Error while commiting transaction on OGRLayer."); + } + } + writer->stopRender( layer ); delete writer; diff --git a/src/core/qgsvectorfilewriter.h b/src/core/qgsvectorfilewriter.h index e05d9792811..04c024bf88c 100644 --- a/src/core/qgsvectorfilewriter.h +++ b/src/core/qgsvectorfilewriter.h @@ -154,6 +154,9 @@ class CORE_EXPORT QgsVectorFileWriter double symbologyScaleDenominator() const { return mSymbologyScaleDenominator; } void setSymbologyScaleDenominator( double d ) { mSymbologyScaleDenominator = d; } + + /**Returns OGRLayer used to begin and commit transactions on database*/ + OGRLayerH getLayer() { return mLayer; } protected: //! @note not available in python bindings