From baa732ac9f18b6ed0ca386c632e15c9fb3037e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anssi=20K=C3=A4=C3=A4ri=C3=A4inen?= Date: Fri, 17 Jul 2015 09:26:43 +0300 Subject: [PATCH] Refs #23622 -- Added tests to ensure ordering is retained for distinct on fields subqueries. The ticket was already fixed by b68212f539f206679580afbfd008e7d329c9cd31. Thanks to Beauhurst for commissioning the work on this ticket. --- tests/queries/tests.py | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/tests/queries/tests.py b/tests/queries/tests.py index 26b9b1eb32..8dabbc96fe 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -3732,3 +3732,71 @@ class TestTicket24605(TestCase): ).order_by('pk'), [i1, i2, i3], lambda x: x ) + + +class Ticket23622Tests(TestCase): + @skipUnlessDBFeature('can_distinct_on_fields') + def test_ticket_23622(self): + """ + Make sure __pk__in and __in work the same for related fields when + using a distinct on subquery. + """ + a1 = Ticket23605A.objects.create() + a2 = Ticket23605A.objects.create() + c1 = Ticket23605C.objects.create(field_c0=0.0) + Ticket23605B.objects.create( + modela_fk=a1, field_b0=123, + field_b1=datetime.date(2013, 1, 6), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a1, field_b0=23, + field_b1=datetime.date(2011, 6, 6), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a1, field_b0=234, + field_b1=datetime.date(2011, 9, 2), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a1, field_b0=12, + field_b1=datetime.date(2012, 9, 15), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a2, field_b0=567, + field_b1=datetime.date(2014, 3, 1), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a2, field_b0=76, + field_b1=datetime.date(2011, 3, 3), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a2, field_b0=7, + field_b1=datetime.date(2012, 10, 20), + modelc_fk=c1, + ) + Ticket23605B.objects.create( + modela_fk=a2, field_b0=56, + field_b1=datetime.date(2011, 1, 27), + modelc_fk=c1, + ) + qx = ( + Q(ticket23605b__pk__in=Ticket23605B.objects.order_by('modela_fk', '-field_b1').distinct('modela_fk')) + & Q(ticket23605b__field_b0__gte=300) + ) + qy = ( + Q(ticket23605b__in=Ticket23605B.objects.order_by('modela_fk', '-field_b1').distinct('modela_fk')) + & Q(ticket23605b__field_b0__gte=300) + ) + self.assertEqual( + set(Ticket23605A.objects.filter(qx).values_list('pk', flat=True)), + set(Ticket23605A.objects.filter(qy).values_list('pk', flat=True)) + ) + self.assertQuerysetEqual( + Ticket23605A.objects.filter(qx), + [a2], lambda x: x + )