Skip to content

Commit 89a84f0

Browse files
committed
[oracle] Ensure that all attributes required for order by are fetched
Fixes potentially broken iterator sorting with oracle provider when a subset of attributes is fetched (cherry-picked from d7fd14b)
1 parent 649dc19 commit 89a84f0

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

src/providers/oracle/qgsoraclefeatureiterator.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource *sour
7474
}
7575
}
7676

77+
// ensure that all attributes required for order by are fetched
78+
const QSet< QString > orderByAttributes = mRequest.orderBy().usedAttributes();
79+
for ( const QString &attr : orderByAttributes )
80+
{
81+
int attrIndex = mSource->mFields.lookupField( attr );
82+
if ( !mAttributeList.contains( attrIndex ) )
83+
mAttributeList << attrIndex;
84+
}
7785
}
7886
else
7987
mAttributeList = mSource->mFields.allAttributesList();

tests/src/python/featuresourcetestbase.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,10 @@ def runOrderByTests(self):
320320
values = [f['name'] for f in self.source.getFeatures(request)]
321321
self.assertEqual(values, ['Pear', 'Orange', 'Honey', 'Apple', NULL])
322322

323+
request = QgsFeatureRequest().addOrderBy('num_char', False)
324+
values = [f['pk'] for f in self.source.getFeatures(request)]
325+
self.assertEqual(values, [5, 4, 3, 2, 1])
326+
323327
# Case sensitivity
324328
request = QgsFeatureRequest().addOrderBy('name2')
325329
values = [f['name2'] for f in self.source.getFeatures(request)]

0 commit comments

Comments
 (0)