Skip to content

Commit ef10609

Browse files
author
jef
committedSep 23, 2008
vector bugfixes
- QgsVectorLayer::commitChanges: handle deleted added features - QgsPostgresProvider: - update ids of added features only, when they were actually inserted - deallocate prepared statements after rollback (fixes #1328) git-svn-id: http://svn.osgeo.org/qgis/trunk@9381 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent ba1fa9d commit ef10609

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed
 

‎src/core/qgsvectorlayer.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2747,6 +2747,18 @@ bool QgsVectorLayer::commitChanges()
27472747
{
27482748
for ( QgsFeatureList::iterator iter = mAddedFeatures.begin(); iter != mAddedFeatures.end(); ++iter )
27492749
{
2750+
if ( mDeletedFeatureIds.contains( iter->featureId() ) )
2751+
{
2752+
mDeletedFeatureIds.remove( iter->featureId() );
2753+
2754+
if ( mChangedGeometries.contains( iter->featureId() ) )
2755+
mChangedGeometries.remove( iter->featureId() );
2756+
2757+
mAddedFeatures.erase( iter );
2758+
2759+
continue;
2760+
}
2761+
27502762
if ( mChangedGeometries.contains( iter->featureId() ) )
27512763
{
27522764
iter->setGeometry( mChangedGeometries.take( iter->featureId() ) );

‎src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1821,6 +1821,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList & flist )
18211821
PQclear( stmt );
18221822

18231823
int primaryKeyHighWater = maxPrimaryKeyValue();
1824+
QList<int> newIds;
18241825

18251826
for ( QgsFeatureList::iterator features = flist.begin(); features != flist.end(); features++ )
18261827
{
@@ -1832,7 +1833,8 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList & flist )
18321833
QStringList params;
18331834
params << geomParam;
18341835
params << QString( "%1" ).arg( ++primaryKeyHighWater );
1835-
features->setFeatureId( primaryKeyHighWater );
1836+
1837+
newIds << primaryKeyHighWater;
18361838

18371839
for ( int i = 0; i < fieldId.size(); i++ )
18381840
params << paramValue( attributevec[ fieldId[i] ].toString(), defaultValue[i] );
@@ -1843,14 +1845,17 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList & flist )
18431845
PQclear( result );
18441846
}
18451847

1848+
for ( int i = 0; i < flist.size(); i++ )
1849+
flist[i].setFeatureId( newIds[i] );
1850+
18461851
connectionRW->PQexecNR( "DEALLOCATE addfeatures" );
18471852
connectionRW->PQexecNR( "COMMIT" );
18481853
}
18491854
catch ( PGException &e )
18501855
{
18511856
e.showErrorMessage( tr( "Error while adding features" ) );
1852-
connectionRW->PQexecNR( "DEALLOCATE addfeatures" );
18531857
connectionRW->PQexecNR( "ROLLBACK" );
1858+
connectionRW->PQexecNR( "DEALLOCATE addfeatures" );
18541859
returnvalue = false;
18551860
}
18561861

@@ -2121,8 +2126,8 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
21212126
catch ( PGException &e )
21222127
{
21232128
e.showErrorMessage( tr( "Error while changing geometry values" ) );
2124-
connectionRW->PQexecNR( "DEALLOCATE updatefeatures" );
21252129
connectionRW->PQexecNR( "ROLLBACK" );
2130+
connectionRW->PQexecNR( "DEALLOCATE updatefeatures" );
21262131
returnvalue = false;
21272132
}
21282133

0 commit comments

Comments
 (0)
Please sign in to comment.