Skip to content

Commit 4825856

Browse files
committed
Fix provider ordering by test to correctly also test compiled order by
...and as a result, disable compiled order by support for postgres due to bugs exposed by the test
1 parent 96d8986 commit 4825856

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/providers/postgres/qgspostgresfeatureiterator.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource
116116

117117
mOrderByCompiled = true;
118118

119+
// THIS CODE IS BROKEN - since every retrieved column is cast as text during declareCursor, this method of sorting will always be
120+
// performed using a text sort.
121+
// TODO - fix ordering by so that instead of
122+
// SELECT my_int_col::text FROM some_table ORDER BY my_int_col
123+
// we instead use
124+
// SELECT my_int_col::text FROM some_table ORDER BY some_table.my_int_col
125+
// but that's non-trivial
126+
#if 0
119127
if ( QSettings().value( "/qgis/compileExpressions", true ).toBool() )
120128
{
121129
Q_FOREACH ( const QgsFeatureRequest::OrderByClause& clause, request.orderBy() )
@@ -142,6 +150,7 @@ QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource
142150
}
143151
}
144152
else
153+
#endif
145154
{
146155
mOrderByCompiled = false;
147156
}

tests/src/python/providertestbase.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,21 @@ def getSubsetString(self):
161161
"""Individual providers may need to override this depending on their subset string formats"""
162162
return '"cnt" > 100 and "cnt" < 410'
163163

164-
def testOrderBy(self):
164+
def testOrderByUncompiled(self):
165+
try:
166+
self.disableCompiler()
167+
except AttributeError:
168+
pass
169+
self.runOrderByTests()
170+
171+
def testOrderByCompiled(self):
172+
try:
173+
self.enableCompiler()
174+
self.runOrderByTests()
175+
except AttributeError:
176+
print 'Provider does not support compiling'
177+
178+
def runOrderByTests(self):
165179
request = QgsFeatureRequest().addOrderBy('cnt')
166180
values = [f['cnt'] for f in self.provider.getFeatures(request)]
167181
self.assertEquals(values, [-200, 100, 200, 300, 400])
@@ -201,6 +215,11 @@ def testOrderBy(self):
201215
values = [f['pk'] for f in self.provider.getFeatures(request)]
202216
self.assertEquals(values, [5, 4, 3, 2, 1])
203217

218+
# Order reversing expression
219+
request = QgsFeatureRequest().addOrderBy('pk*-1', False)
220+
values = [f['pk'] for f in self.provider.getFeatures(request)]
221+
self.assertEquals(values, [1, 2, 3, 4, 5])
222+
204223
# Type dependent expression
205224
request = QgsFeatureRequest().addOrderBy('num_char*2', False)
206225
values = [f['pk'] for f in self.provider.getFeatures(request)]

0 commit comments

Comments
 (0)