Skip to content

Commit af73f30

Browse files
committed
ogr provider: actually only use relevant fields in feature iterator (fixes #9062)
1 parent eabfa48 commit af73f30

File tree

3 files changed

+8
-8
lines changed

3 files changed

+8
-8
lines changed

src/providers/ogr/qgsogrfeatureiterator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ void QgsOgrFeatureIterator::ensureRelevantFields()
9191
{
9292
mFetchGeometry = ( mRequest.filterType() == QgsFeatureRequest::FilterRect ) || !( mRequest.flags() & QgsFeatureRequest::NoGeometry );
9393
QgsAttributeList attrs = ( mRequest.flags() & QgsFeatureRequest::SubsetOfAttributes ) ? mRequest.subsetOfAttributes() : P->attributeIndexes();
94-
P->setRelevantFields( mFetchGeometry, attrs );
94+
P->setRelevantFields( ogrLayer, mFetchGeometry, attrs );
9595
P->mRelevantFieldsForNextFeature = true;
9696
}
9797

src/providers/ogr/qgsogrprovider.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ QStringList QgsOgrProvider::subLayers() const
555555
// Count features for geometry types
556556
QMap<OGRwkbGeometryType, int> fCount;
557557
// TODO: avoid reading attributes, setRelevantFields cannot be called here because it is not constant
558-
//setRelevantFields( true, QgsAttributeList() );
558+
//setRelevantFields( ogrLayer, true, QgsAttributeList() );
559559
OGR_L_ResetReading( layer );
560560
OGRFeatureH fet;
561561
while (( fet = OGR_L_GetNextFeature( layer ) ) )
@@ -714,7 +714,7 @@ QString QgsOgrProvider::storageType() const
714714
return ogrDriverName;
715715
}
716716

717-
void QgsOgrProvider::setRelevantFields( bool fetchGeometry, const QgsAttributeList &fetchAttributes )
717+
void QgsOgrProvider::setRelevantFields( OGRLayerH ogrLayer, bool fetchGeometry, const QgsAttributeList &fetchAttributes )
718718
{
719719
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1800
720720
if ( OGR_L_TestCapability( ogrLayer, OLCIgnoreFields ) )
@@ -972,7 +972,7 @@ bool QgsOgrProvider::addFeature( QgsFeature& f )
972972

973973
bool QgsOgrProvider::addFeatures( QgsFeatureList & flist )
974974
{
975-
setRelevantFields( true, attributeIndexes() );
975+
setRelevantFields( ogrLayer, true, attributeIndexes() );
976976

977977
bool returnvalue = true;
978978
for ( QgsFeatureList::iterator it = flist.begin(); it != flist.end(); ++it )
@@ -1074,7 +1074,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
10741074

10751075
clearMinMaxCache();
10761076

1077-
setRelevantFields( true, attributeIndexes() );
1077+
setRelevantFields( ogrLayer, true, attributeIndexes() );
10781078

10791079
for ( QgsChangedAttributesMap::const_iterator it = attr_map.begin(); it != attr_map.end(); ++it )
10801080
{
@@ -1170,7 +1170,7 @@ bool QgsOgrProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
11701170
OGRFeatureH theOGRFeature = 0;
11711171
OGRGeometryH theNewGeometry = 0;
11721172

1173-
setRelevantFields( true, attributeIndexes() );
1173+
setRelevantFields( ogrLayer, true, attributeIndexes() );
11741174

11751175
for ( QgsGeometryMap::iterator it = geometry_map.begin(); it != geometry_map.end(); ++it )
11761176
{
@@ -2382,7 +2382,7 @@ void QgsOgrProvider::recalculateFeatureCount()
23822382
{
23832383
featuresCounted = 0;
23842384
OGR_L_ResetReading( ogrLayer );
2385-
setRelevantFields( true, QgsAttributeList() );
2385+
setRelevantFields( ogrLayer, true, QgsAttributeList() );
23862386
OGR_L_ResetReading( ogrLayer );
23872387
OGRFeatureH fet;
23882388
while (( fet = OGR_L_GetNextFeature( ogrLayer ) ) )

src/providers/ogr/qgsogrprovider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ class QgsOgrProvider : public QgsVectorDataProvider
270270
void recalculateFeatureCount();
271271

272272
/** tell OGR, which fields to fetch in nextFeature/featureAtId (ie. which not to ignore) */
273-
void setRelevantFields( bool fetchGeometry, const QgsAttributeList& fetchAttributes );
273+
void setRelevantFields( OGRLayerH ogrLayer, bool fetchGeometry, const QgsAttributeList& fetchAttributes );
274274

275275
/** convert a QgsField to work with OGR */
276276
static bool convertField( QgsField &field, const QTextCodec &encoding );

0 commit comments

Comments
 (0)