@@ -1030,7 +1030,8 @@ QgsFeatureRequest QgsWFSFeatureIterator::buildRequestCache( int genCounter )
1030
1030
{
1031
1031
QgsFields dataProviderFields = mShared ->mCacheDataProvider ->fields ();
1032
1032
QgsAttributeList cacheSubSet;
1033
- Q_FOREACH ( int i, mRequest .subsetOfAttributes () )
1033
+ const auto subsetOfAttributes = mRequest .subsetOfAttributes ();
1034
+ for ( int i : subsetOfAttributes )
1034
1035
{
1035
1036
int idx = dataProviderFields.indexFromName ( mShared ->mFields .at ( i ).name () );
1036
1037
if ( idx >= 0 )
@@ -1043,7 +1044,8 @@ QgsFeatureRequest QgsWFSFeatureIterator::buildRequestCache( int genCounter )
1043
1044
// ensure that all attributes required for expression filter are being fetched
1044
1045
if ( mRequest .filterType () == QgsFeatureRequest::FilterExpression )
1045
1046
{
1046
- Q_FOREACH ( const QString &field, mRequest .filterExpression ()->referencedColumns () )
1047
+ const auto referencedColumns = mRequest .filterExpression ()->referencedColumns ();
1048
+ for ( const QString &field : referencedColumns )
1047
1049
{
1048
1050
int idx = dataProviderFields.indexFromName ( field );
1049
1051
if ( idx >= 0 && !cacheSubSet.contains ( idx ) )
@@ -1057,15 +1059,18 @@ QgsFeatureRequest QgsWFSFeatureIterator::buildRequestCache( int genCounter )
1057
1059
// also need attributes required by order by
1058
1060
if ( mRequest .flags () & QgsFeatureRequest::SubsetOfAttributes && !mRequest .orderBy ().isEmpty () )
1059
1061
{
1060
- Q_FOREACH ( const QString &attr, mRequest .orderBy ().usedAttributes () )
1062
+ const auto usedProviderAttributeIndices = mRequest .orderBy ().usedAttributeIndices ( dataProviderFields );
1063
+ for ( int attrIdx : usedProviderAttributeIndices )
1061
1064
{
1062
- int idx = dataProviderFields. indexFromName ( attr );
1063
- if ( idx >= 0 && ! cacheSubSet.contains ( idx ) )
1064
- cacheSubSet. append ( idx );
1065
+ if ( !cacheSubSet. contains ( attrIdx ) )
1066
+ cacheSubSet.append ( attrIdx );
1067
+ }
1065
1068
1066
- idx = mShared ->mFields .indexFromName ( attr );
1067
- if ( idx >= 0 && !mSubSetAttributes .contains ( idx ) )
1068
- mSubSetAttributes .append ( idx );
1069
+ const auto usedSharedAttributeIndices = mRequest .orderBy ().usedAttributeIndices ( mShared ->mFields );
1070
+ for ( int attrIdx : usedSharedAttributeIndices )
1071
+ {
1072
+ if ( !mSubSetAttributes .contains ( attrIdx ) )
1073
+ mSubSetAttributes .append ( attrIdx );
1069
1074
}
1070
1075
}
1071
1076
0 commit comments