Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[BUGFIX] [Oracle] Make QgsOracleFeatureIterator() robust to reference…
…s to non existing fields in filter expression and order by
  • Loading branch information
rouault authored and nyalldawson committed Jan 21, 2020
1 parent bf7dffe commit 58df76a
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/providers/oracle/qgsoraclefeatureiterator.cpp
Expand Up @@ -70,23 +70,22 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource *sour
// ensure that all attributes required for expression filter are being fetched
if ( mRequest.filterType() == QgsFeatureRequest::FilterExpression )
{
const auto constReferencedColumns = mRequest.filterExpression()->referencedColumns();
for ( const QString &field : constReferencedColumns )
const QSet<int> attributeIndexes = mRequest.filterExpression()->referencedAttributeIndexes( mSource->mFields );
for ( int attrIdx : attributeIndexes )
{
int attrIdx = mSource->mFields.lookupField( field );
if ( !mAttributeList.contains( attrIdx ) )
mAttributeList << attrIdx;
}
}

// ensure that all attributes required for order by are fetched
const QSet< QString > orderByAttributes = mRequest.orderBy().usedAttributes();
for ( const QString &attr : orderByAttributes )
const auto orderByAttributes = mRequest.orderBy().usedAttributeIndices( mSource->mFields );
for ( int attrIdx : orderByAttributes )
{
int attrIndex = mSource->mFields.lookupField( attr );
if ( !mAttributeList.contains( attrIndex ) )
mAttributeList << attrIndex;
if ( !mAttributeList.contains( attrIdx ) )
mAttributeList << attrIdx;
}

}
else
mAttributeList = mSource->mFields.allAttributesList();
Expand Down

0 comments on commit 58df76a

Please sign in to comment.