@@ -108,14 +108,16 @@ bool QgsMemoryFeatureIterator::nextFeatureUsingList( QgsFeature &feature )
108
108
bool hasFeature = false ;
109
109
110
110
// option 1: we have a list of features to traverse
111
+ QgsFeature candidate;
111
112
while ( mFeatureIdListIterator != mFeatureIdList .constEnd () )
112
113
{
114
+ candidate = mSource ->mFeatures .value ( *mFeatureIdListIterator );
113
115
if ( !mFilterRect .isNull () )
114
116
{
115
117
if ( mRequest .flags () & QgsFeatureRequest::ExactIntersect )
116
118
{
117
119
// do exact check in case we're doing intersection
118
- if ( mSource -> mFeatures . value ( * mFeatureIdListIterator ). hasGeometry () && mSelectRectEngine ->intersects ( mSource -> mFeatures . value ( * mFeatureIdListIterator ) .geometry ().constGet () ) )
120
+ if ( candidate. hasGeometry () && mSelectRectEngine ->intersects ( candidate .geometry ().constGet () ) )
119
121
hasFeature = true ;
120
122
}
121
123
else if ( mSource ->mSpatialIndex )
@@ -126,16 +128,16 @@ bool QgsMemoryFeatureIterator::nextFeatureUsingList( QgsFeature &feature )
126
128
else
127
129
{
128
130
// do bounding box check if we aren't using a spatial index
129
- if ( mSource -> mFeatures . value ( * mFeatureIdListIterator ). hasGeometry () && mSource -> mFeatures . value ( * mFeatureIdListIterator ) .geometry ().boundingBoxIntersects ( mFilterRect ) )
131
+ if ( candidate. hasGeometry () && candidate .geometry ().boundingBoxIntersects ( mFilterRect ) )
130
132
hasFeature = true ;
131
133
}
132
134
}
133
135
else
134
136
hasFeature = true ;
135
137
136
- if ( mSubsetExpression )
138
+ if ( hasFeature && mSubsetExpression )
137
139
{
138
- mSource ->mExpressionContext .setFeature ( mSource -> mFeatures . value ( * mFeatureIdListIterator ) );
140
+ mSource ->mExpressionContext .setFeature ( candidate );
139
141
if ( !mSubsetExpression ->evaluate ( &mSource ->mExpressionContext ).toBool () )
140
142
hasFeature = false ;
141
143
}
@@ -149,7 +151,7 @@ bool QgsMemoryFeatureIterator::nextFeatureUsingList( QgsFeature &feature )
149
151
// copy feature
150
152
if ( hasFeature )
151
153
{
152
- feature = mSource -> mFeatures . value ( * mFeatureIdListIterator ) ;
154
+ feature = candidate ;
153
155
++mFeatureIdListIterator ;
154
156
}
155
157
else
0 commit comments