Skip to content

Commit 33fe0e2

Browse files
committed
Also use FilterFids when field calculator is only updating selected
features. Results in similar speed improvements when updating only selected features from a large PostGIS layer
1 parent f0d31b0 commit 33fe0e2

File tree

1 file changed

+6
-12
lines changed

1 file changed

+6
-12
lines changed

src/app/qgsfieldcalculator.cpp

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,6 @@ void QgsFieldCalculator::accept()
258258
bool calculationSuccess = true;
259259
QString error;
260260

261-
bool onlySelected = mOnlyUpdateSelectedCheckBox->isChecked();
262-
QgsFeatureIds selectedIds = mVectorLayer->selectedFeaturesIds();
263-
264261
bool useGeometry = exp.needsGeometry();
265262
int rownum = 1;
266263

@@ -271,17 +268,14 @@ void QgsFieldCalculator::accept()
271268
if ( newField )
272269
emptyAttribute = QVariant( field.type() );
273270

274-
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFlags( useGeometry ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
271+
QgsFeatureRequest req = QgsFeatureRequest().setFlags( useGeometry ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry );
272+
if ( mOnlyUpdateSelectedCheckBox->isChecked() )
273+
{
274+
req.setFilterFids( mVectorLayer->selectedFeaturesIds() );
275+
}
276+
QgsFeatureIterator fit = mVectorLayer->getFeatures( req );
275277
while ( fit.nextFeature( feature ) )
276278
{
277-
if ( onlySelected )
278-
{
279-
if ( !selectedIds.contains( feature.id() ) )
280-
{
281-
continue;
282-
}
283-
}
284-
285279
expContext.setFeature( feature );
286280
expContext.lastScope()->setVariable( QString( "row_number" ), rownum );
287281

0 commit comments

Comments
 (0)