From 0b0998dc151feb77068e2387c34cc50ef6b356ae Mon Sep 17 00:00:00 2001 From: 4the4ryushin Date: Fri, 28 Apr 2023 02:33:25 +0530 Subject: Fixed #33759 -- Avoided unnecessary subquery in QuerySet.delete() with self-referential subqueries if supported. --- tests/delete_regress/tests.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/delete_regress/tests.py b/tests/delete_regress/tests.py index 173f767b28..2540fd2802 100644 --- a/tests/delete_regress/tests.py +++ b/tests/delete_regress/tests.py @@ -379,15 +379,20 @@ class DeleteTests(TestCase): child = Child.objects.create(name="Juan") Book.objects.create(pagecount=500, owner=child) PlayedWith.objects.create(child=child, toy=toy, date=datetime.date.today()) - Book.objects.filter( - Exists( - Book.objects.filter( - pk=OuterRef("pk"), - owner__toys=toy.pk, - ), - ) - ).delete() + with self.assertNumQueries(1) as ctx: + Book.objects.filter( + Exists( + Book.objects.filter( + pk=OuterRef("pk"), + owner__toys=toy.pk, + ), + ) + ).delete() + self.assertIs(Book.objects.exists(), False) + sql = ctx.captured_queries[0]["sql"].lower() + if connection.features.delete_can_self_reference_subquery: + self.assertEqual(sql.count("select"), 1) class DeleteDistinct(SimpleTestCase): -- cgit v1.3