@@ -59,10 +59,17 @@ QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrFeatureSource* source, bool
59
59
mSubsetStringSet = true ;
60
60
}
61
61
62
- // make sure we fetch just relevant fields
63
62
mFetchGeometry = ( mRequest .filterType () == QgsFeatureRequest::FilterRect ) || !( mRequest .flags () & QgsFeatureRequest::NoGeometry );
64
63
QgsAttributeList attrs = ( mRequest .flags () & QgsFeatureRequest::SubsetOfAttributes ) ? mRequest .subsetOfAttributes () : mSource ->mFields .allAttributesList ();
65
- QgsOgrUtils::setRelevantFields ( ogrLayer, mSource ->mFields .count (), mFetchGeometry , attrs );
64
+
65
+ // make sure we fetch just relevant fields
66
+ // unless it's a VRT data source filtered by geometry as we don't know which
67
+ // attributes make up the geometry and OGR won't fetch them to evaluate the
68
+ // filter if we choose to ignore them (fixes #11223)
69
+ if ( mSource ->mDriverName != " OGR_VRT" || mRequest .filterType () != QgsFeatureRequest::FilterRect )
70
+ {
71
+ QgsOgrUtils::setRelevantFields ( ogrLayer, mSource ->mFields .count (), mFetchGeometry , attrs );
72
+ }
66
73
67
74
// spatial query to select features
68
75
if ( mRequest .filterType () == QgsFeatureRequest::FilterRect )
@@ -337,6 +344,7 @@ QgsOgrFeatureSource::QgsOgrFeatureSource( const QgsOgrProvider* p )
337
344
mSubsetString = p->mSubsetString ;
338
345
mEncoding = p->mEncoding ; // no copying - this is a borrowed pointer from Qt
339
346
mFields = p->mAttributeFields ;
347
+ mDriverName = p->ogrDriverName ;
340
348
mOgrGeometryTypeFilter = wkbFlatten ( p->mOgrGeometryTypeFilter );
341
349
}
342
350
0 commit comments