diff --git a/src/app/qgsattributetabledialog.cpp b/src/app/qgsattributetabledialog.cpp index 109da4d36751..e5cc01d2387f 100644 --- a/src/app/qgsattributetabledialog.cpp +++ b/src/app/qgsattributetabledialog.cpp @@ -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; diff --git a/src/app/qgsfieldcalculator.cpp b/src/app/qgsfieldcalculator.cpp index 6b0ef76c4750..7c5e8317f349 100644 --- a/src/app/qgsfieldcalculator.cpp +++ b/src/app/qgsfieldcalculator.cpp @@ -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() );