Skip to content

Commit

Permalink
vector bugfixes
Browse files Browse the repository at this point in the history
- 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/qgis@9381 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
jef committed Sep 23, 2008
1 parent f463dfb commit fc11ff6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
12 changes: 12 additions & 0 deletions src/core/qgsvectorlayer.cpp
Expand Up @@ -2747,6 +2747,18 @@ bool QgsVectorLayer::commitChanges()
{
for ( QgsFeatureList::iterator iter = mAddedFeatures.begin(); iter != mAddedFeatures.end(); ++iter )
{
if ( mDeletedFeatureIds.contains( iter->featureId() ) )
{
mDeletedFeatureIds.remove( iter->featureId() );

if ( mChangedGeometries.contains( iter->featureId() ) )
mChangedGeometries.remove( iter->featureId() );

mAddedFeatures.erase( iter );

continue;
}

if ( mChangedGeometries.contains( iter->featureId() ) )
{
iter->setGeometry( mChangedGeometries.take( iter->featureId() ) );
Expand Down
11 changes: 8 additions & 3 deletions src/providers/postgres/qgspostgresprovider.cpp
Expand Up @@ -1821,6 +1821,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList & flist )
PQclear( stmt );

int primaryKeyHighWater = maxPrimaryKeyValue();
QList<int> newIds;

for ( QgsFeatureList::iterator features = flist.begin(); features != flist.end(); features++ )
{
Expand All @@ -1832,7 +1833,8 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList & flist )
QStringList params;
params << geomParam;
params << QString( "%1" ).arg( ++primaryKeyHighWater );
features->setFeatureId( primaryKeyHighWater );

newIds << primaryKeyHighWater;

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

for ( int i = 0; i < flist.size(); i++ )
flist[i].setFeatureId( newIds[i] );

connectionRW->PQexecNR( "DEALLOCATE addfeatures" );
connectionRW->PQexecNR( "COMMIT" );
}
catch ( PGException &e )
{
e.showErrorMessage( tr( "Error while adding features" ) );
connectionRW->PQexecNR( "DEALLOCATE addfeatures" );
connectionRW->PQexecNR( "ROLLBACK" );
connectionRW->PQexecNR( "DEALLOCATE addfeatures" );
returnvalue = false;
}

Expand Down Expand Up @@ -2121,8 +2126,8 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
catch ( PGException &e )
{
e.showErrorMessage( tr( "Error while changing geometry values" ) );
connectionRW->PQexecNR( "DEALLOCATE updatefeatures" );
connectionRW->PQexecNR( "ROLLBACK" );
connectionRW->PQexecNR( "DEALLOCATE updatefeatures" );
returnvalue = false;
}

Expand Down

0 comments on commit fc11ff6

Please sign in to comment.