Showing with 17 additions and 5 deletions.
  1. +4 −3 src/core/qgsvectorlayerfeatureiterator.cpp
  2. +13 −2 src/providers/spatialite/qgsspatialitefeatureiterator.cpp
7 changes: 4 additions & 3 deletions src/core/qgsvectorlayerfeatureiterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ QgsVectorLayerFeatureIterator::QgsVectorLayerFeatureIterator( QgsVectorLayer* la
{
QgsVectorLayerJoinBuffer* joinBuffer = L->mJoinBuffer;

// by default provider's request is the same
mProviderRequest = mRequest;
mChangedFeaturesRequest = mRequest;

if ( L->editBuffer() )
Expand All @@ -44,6 +42,9 @@ QgsVectorLayerFeatureIterator::QgsVectorLayerFeatureIterator( QgsVectorLayer* la
if ( joinBuffer->containsJoins() )
prepareJoins();

// by default provider's request is the same
mProviderRequest = mRequest;

if ( mProviderRequest.flags() & QgsFeatureRequest::SubsetOfAttributes )
{
// prepare list of attributes to match provider fields
Expand Down Expand Up @@ -208,7 +209,7 @@ bool QgsVectorLayerFeatureIterator::fetchNextAddedFeature( QgsFeature& f )
// must have changed geometry outside rectangle
continue;

if ( !mRequest.acceptFeature ( *mFetchAddedFeaturesIt ) )
if ( !mRequest.acceptFeature( *mFetchAddedFeaturesIt ) )
// skip features which are not accepted by the filter
continue;

Expand Down
15 changes: 13 additions & 2 deletions src/providers/spatialite/qgsspatialitefeatureiterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,19 @@ bool QgsSpatiaLiteFeatureIterator::getFeature( sqlite3_stmt *stmt, QgsFeature &f
}
else
{
int attrIndex = subsetAttributes ? mRequest.subsetOfAttributes()[ic-1] : ic - 1;
feature.setAttribute( attrIndex, getFeatureAttribute( stmt, ic, P->attributeFields[attrIndex].type() ) );
if ( subsetAttributes )
{
if ( mRequest.subsetOfAttributes().contains( ic - 1 ) )
{
int attrIndex = mRequest.subsetOfAttributes()[ic-1];
feature.setAttribute( attrIndex, getFeatureAttribute( stmt, ic, P->attributeFields[attrIndex].type() ) );
}
}
else
{
int attrIndex = subsetAttributes ? mRequest.subsetOfAttributes()[ic-1] : ic - 1;
feature.setAttribute( attrIndex, getFeatureAttribute( stmt, ic, P->attributeFields[attrIndex].type() ) );
}
}
}

Expand Down