More efficient field calculator iteration

This commit is contained in:
Nyall Dawson 2018-10-14 15:16:47 +10:00
parent 0db9f05789
commit 9f3b90775a
2 changed files with 7 additions and 0 deletions

View File

@ -536,6 +536,10 @@ void QgsAttributeTableDialog::runFieldCalculation( QgsVectorLayer *layer, const
QgsField fld = layer->fields().at( fieldindex );
QSet< QString >referencedColumns = exp.referencedColumns();
referencedColumns.insert( fld.name() ); // need existing column value to store old attribute when changing field values
request.setSubsetOfAttributes( referencedColumns, layer->fields() );
//go through all the features and change the new attributes
QgsFeatureIterator fit = layer->getFeatures( request );
QgsFeature feature;

View File

@ -281,6 +281,9 @@ void QgsFieldCalculator::accept()
emptyAttribute = QVariant( field.type() );
QgsFeatureRequest req = QgsFeatureRequest().setFlags( useGeometry ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry );
QSet< QString > referencedColumns = exp.referencedColumns();
referencedColumns.insert( field.name() ); // need existing column value to store old attribute when changing field values
req.setSubsetOfAttributes( referencedColumns, mVectorLayer->fields() );
if ( mOnlyUpdateSelectedCheckBox->isChecked() )
{
req.setFilterFids( mVectorLayer->selectedFeatureIds() );