diff --git a/src/providers/ogr/qgsogrfeatureiterator.cpp b/src/providers/ogr/qgsogrfeatureiterator.cpp index e5513019237..4a22d4d776c 100644 --- a/src/providers/ogr/qgsogrfeatureiterator.cpp +++ b/src/providers/ogr/qgsogrfeatureiterator.cpp @@ -363,7 +363,7 @@ bool QgsOgrFeatureIterator::readFeature( gdal::ogr_feature_unique_ptr fet, QgsFe feature.initAttributes( mSource->mFields.count() ); feature.setFields( mSource->mFields ); // allow name-based attribute lookups - bool useIntersect = mRequest.flags() & QgsFeatureRequest::ExactIntersect; + bool useIntersect = !mRequest.filterRect().isNull() && mRequest.flags() & QgsFeatureRequest::ExactIntersect; bool geometryTypeFilter = mSource->mOgrGeometryTypeFilter != wkbUnknown; if ( mFetchGeometry || useIntersect || geometryTypeFilter ) { diff --git a/tests/src/python/featuresourcetestbase.py b/tests/src/python/featuresourcetestbase.py index a801f4013a7..28e757d2f84 100644 --- a/tests/src/python/featuresourcetestbase.py +++ b/tests/src/python/featuresourcetestbase.py @@ -485,6 +485,14 @@ class FeatureSourceTestCase(object): assert set(features) == set([1, 2, 3, 4, 5]), 'Got {} instead'.format(features) self.assertTrue(all_valid) + # ExactIntersection flag set, but no filter rect set. Should be ignored. + request = QgsFeatureRequest() + request.setFlags(QgsFeatureRequest.ExactIntersect) + features = [f['pk'] for f in self.source.getFeatures(request)] + all_valid = (all(f.isValid() for f in self.source.getFeatures(request))) + assert set(features) == set([1, 2, 3, 4, 5]), 'Got {} instead'.format(features) + self.assertTrue(all_valid) + def testRectAndExpression(self): extent = QgsRectangle(-70, 67, -60, 80) request = QgsFeatureRequest().setFilterExpression('"cnt">200').setFilterRect(extent)