Skip to content

Commit e604a48

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 (cherry-picked from 33fe0e2)
1 parent 57381f4 commit e604a48

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
@@ -246,9 +246,6 @@ void QgsFieldCalculator::accept()
246246
bool calculationSuccess = true;
247247
QString error;
248248

249-
bool onlySelected = mOnlyUpdateSelectedCheckBox->isChecked();
250-
QgsFeatureIds selectedIds = mVectorLayer->selectedFeaturesIds();
251-
252249
bool useGeometry = exp.needsGeometry();
253250
int rownum = 1;
254251

@@ -259,17 +256,14 @@ void QgsFieldCalculator::accept()
259256
if ( newField )
260257
emptyAttribute = QVariant( field.type() );
261258

262-
QgsFeatureIterator fit = mVectorLayer->getFeatures( QgsFeatureRequest().setFlags( useGeometry ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
259+
QgsFeatureRequest req = QgsFeatureRequest().setFlags( useGeometry ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry );
260+
if ( mOnlyUpdateSelectedCheckBox->isChecked() )
261+
{
262+
req.setFilterFids( mVectorLayer->selectedFeaturesIds() );
263+
}
264+
QgsFeatureIterator fit = mVectorLayer->getFeatures( req );
263265
while ( fit.nextFeature( feature ) )
264266
{
265-
if ( onlySelected )
266-
{
267-
if ( !selectedIds.contains( feature.id() ) )
268-
{
269-
continue;
270-
}
271-
}
272-
273267
expContext.setFeature( feature );
274268
expContext.lastScope()->setVariable( QString( "row_number" ), rownum );
275269

0 commit comments

Comments
 (0)