From 8ac115c730353dfc6bdbd03e0671a978dcc99e15 Mon Sep 17 00:00:00 2001 From: François Freitag Date: Wed, 28 Sep 2016 22:39:50 -0700 Subject: Fixed #27193 -- Preserved ordering in select_for_update subqueries. --- tests/select_for_update/tests.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tests') diff --git a/tests/select_for_update/tests.py b/tests/select_for_update/tests.py index e6e1155ee2..4c30ff7179 100644 --- a/tests/select_for_update/tests.py +++ b/tests/select_for_update/tests.py @@ -300,3 +300,12 @@ class SelectForUpdateTests(TransactionTestCase): def test_nowait_and_skip_locked(self): with self.assertRaisesMessage(ValueError, 'The nowait option cannot be used with skip_locked.'): Person.objects.select_for_update(nowait=True, skip_locked=True) + + def test_ordered_select_for_update(self): + """ + Subqueries should respect ordering as an ORDER BY clause may be useful + to specify a row locking order to prevent deadlocks (#27193). + """ + with transaction.atomic(): + qs = Person.objects.filter(id__in=Person.objects.order_by('-id').select_for_update()) + self.assertIn('ORDER BY', str(qs.query)) -- cgit v1.3