Skip to content

Commit 57e122b

Browse files
authored
Merge pull request #4594 from boundlessgeo/postgis_merge_features_fix#15741
Fix Postgis Merge selected features regression (fix #15741)
2 parents e5b2843 + 53d90b5 commit 57e122b

File tree

4 files changed

+379
-0
lines changed

4 files changed

+379
-0
lines changed

src/core/qgsvectordataprovider.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider
5252
Q_OBJECT
5353

5454
friend class QgsTransaction;
55+
friend class QgsVectorLayerEditBuffer;
5556

5657
public:
5758

src/core/qgsvectorlayereditbuffer.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,35 @@ bool QgsVectorLayerEditBuffer::commitChanges( QStringList& commitErrors )
302302
// no yes => changeAttributeValues
303303
// yes yes => changeFeatures
304304

305+
// to fix https://issues.qgis.org/issues/15741
306+
// first of all check if feature to add is compatible with provider type
307+
// this check have to be done before all checks to avoid to clear internal
308+
// buffer if some of next steps success.
309+
if ( success && !mAddedFeatures.isEmpty() )
310+
{
311+
if ( cap & QgsVectorDataProvider::AddFeatures )
312+
{
313+
for ( QgsFeature f : mAddedFeatures )
314+
{
315+
if (( ! f.geometry() ) || ( f.geometry()->isEmpty() ) ||
316+
( f.geometry()->wkbType() == provider->geometryType() ) )
317+
continue;
318+
319+
if ( ! provider->convertToProviderType( f.geometry() ) )
320+
{
321+
commitErrors << tr( "ERROR: %n feature(s) not added - geometry type is not compatible with the current layer.", "not added features count", mAddedFeatures.size() );
322+
success = false;
323+
break;
324+
}
325+
}
326+
}
327+
else
328+
{
329+
commitErrors << tr( "ERROR: %n feature(s) not added - provider doesn't support adding features.", "not added features count", mAddedFeatures.size() );
330+
success = false;
331+
}
332+
}
333+
305334
//
306335
// update geometries
307336
//

tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ ADD_PYTHON_TEST(PyQgsUnitTypes test_qgsunittypes.py)
106106
ADD_PYTHON_TEST(PyQgsVectorColorRamp test_qgsvectorcolorramp.py)
107107
ADD_PYTHON_TEST(PyQgsVectorFileWriter test_qgsvectorfilewriter.py)
108108
ADD_PYTHON_TEST(PyQgsVectorLayer test_qgsvectorlayer.py)
109+
ADD_PYTHON_TEST(PyQgsVectorLayerEditBuffer test_qgsvectorlayereditbuffer.py)
109110
ADD_PYTHON_TEST(PyQgsZonalStatistics test_qgszonalstatistics.py)
110111
ADD_PYTHON_TEST(PyQgsMapLayerRegistry test_qgsmaplayerregistry.py)
111112
ADD_PYTHON_TEST(PyQgsVirtualLayerProvider test_provider_virtual.py)

0 commit comments

Comments
 (0)