Fixed test failure caused by different NULL ordering between backends

This commit is contained in:
Anssi Kääriäinen 2013-08-20 11:33:44 +03:00 committed by Andrew Godwin
parent cea7204504
commit ced3e6b17d
4 changed files with 15 additions and 3 deletions

View File

@ -599,6 +599,9 @@ class BaseDatabaseFeatures(object):
# to remove any ordering? # to remove any ordering?
requires_explicit_null_ordering_when_grouping = False requires_explicit_null_ordering_when_grouping = False
# Does the backend order NULL values as largest or smallest?
nulls_order_largest = False
# Is there a 1000 item limit on query parameters? # Is there a 1000 item limit on query parameters?
supports_1000_query_parameters = True supports_1000_query_parameters = True

View File

@ -58,6 +58,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
can_distinct_on_fields = True can_distinct_on_fields = True
can_rollback_ddl = True can_rollback_ddl = True
supports_combined_alters = True supports_combined_alters = True
nulls_order_largest = True
class DatabaseWrapper(BaseDatabaseWrapper): class DatabaseWrapper(BaseDatabaseWrapper):

View File

@ -262,9 +262,13 @@ class ReservedName(models.Model):
return self.name return self.name
# A simpler shared-foreign-key setup that can expose some problems. # A simpler shared-foreign-key setup that can expose some problems.
@python_2_unicode_compatible
class SharedConnection(models.Model): class SharedConnection(models.Model):
data = models.CharField(max_length=10) data = models.CharField(max_length=10)
def __str__(self):
return self.data
class PointerA(models.Model): class PointerA(models.Model):
connection = models.ForeignKey(SharedConnection) connection = models.ForeignKey(SharedConnection)

View File

@ -2984,7 +2984,11 @@ class Ticket14056Tests(TestCase):
s2 = SharedConnection.objects.create(data='s2') s2 = SharedConnection.objects.create(data='s2')
s3 = SharedConnection.objects.create(data='s3') s3 = SharedConnection.objects.create(data='s3')
PointerA.objects.create(connection=s2) PointerA.objects.create(connection=s2)
self.assertQuerysetEqual( expected_ordering = (
SharedConnection.objects.order_by('pointera__connection', 'pk'), [s1, s3, s2] if connection.features.nulls_order_largest
[s1, s3, s2], lambda x: x else [s2, s1, s3]
)
self.assertQuerysetEqual(
SharedConnection.objects.order_by('-pointera__connection', 'pk'),
expected_ordering, lambda x: x
) )