Skip to content

Commit d59ab80

Browse files
committedJan 12, 2014
avoid saving OGR layer to the very same OGR layer (fixes #9221)
1 parent 134dc48 commit d59ab80

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed
 

‎src/core/qgsvectorfilewriter.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "qgsvectorfilewriter.h"
2727
#include "qgsrendererv2.h"
2828
#include "qgssymbollayerv2.h"
29+
#include "qgsvectordataprovider.h"
2930

3031
#include <QFile>
3132
#include <QSettings>
@@ -109,7 +110,7 @@ QgsVectorFileWriter::QgsVectorFileWriter(
109110

110111
poDriver = OGRGetDriverByName( ogrDriverName.toLocal8Bit().data() );
111112

112-
if ( poDriver == NULL )
113+
if ( !poDriver )
113114
{
114115
mErrorMessage = QObject::tr( "OGR driver for '%1' not found (OGR error: %2)" )
115116
.arg( driverName )
@@ -1835,8 +1836,22 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
18351836
else
18361837
{
18371838
// This means we shouldn't transform, use source CRS as output (if defined)
1838-
outputCRS = &( layer->crs() );
1839+
outputCRS = &layer->crs();
18391840
}
1841+
1842+
if ( layer->providerType() == "ogr" )
1843+
{
1844+
QStringList theURIParts = layer->dataProvider()->dataSourceUri().split( "|" );
1845+
QString srcFileName = theURIParts[0];
1846+
1847+
if ( QFile::exists( srcFileName ) && QFileInfo( fileName ).canonicalFilePath() == QFileInfo( srcFileName ).canonicalFilePath() )
1848+
{
1849+
if ( errorMessage )
1850+
*errorMessage = QObject::tr( "Cannot overwrite a OGR layer in place" );
1851+
return ErrCreateDataSource;
1852+
}
1853+
}
1854+
18401855
QgsVectorFileWriter* writer =
18411856
new QgsVectorFileWriter( fileName, fileEncoding, skipAttributeCreation ? QgsFields() : layer->pendingFields(), layer->wkbType(), outputCRS, driverName, datasourceOptions, layerOptions, newFilename, symbologyExport );
18421857
writer->setSymbologyScaleDenominator( symbologyScale );

0 commit comments

Comments
 (0)
Please sign in to comment.