Skip to content

Commit e604a48

Browse files
committedNov 18, 2015
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)
Please sign in to comment.