mirror of
https://github.com/django/django.git
synced 2025-06-05 11:39:13 +00:00
Fixed #31624 -- Avoided subquery usage on QuerySet.all().delete().
Thanks Adam Johnson for the report. Regression in 7acef095d73322f45dcceb99afa1a4e50b520479.
This commit is contained in:
parent
437196da9a
commit
972000420e
@ -1407,6 +1407,8 @@ class SQLInsertCompiler(SQLCompiler):
|
|||||||
class SQLDeleteCompiler(SQLCompiler):
|
class SQLDeleteCompiler(SQLCompiler):
|
||||||
@cached_property
|
@cached_property
|
||||||
def single_alias(self):
|
def single_alias(self):
|
||||||
|
# Ensure base table is in aliases.
|
||||||
|
self.query.get_initial_alias()
|
||||||
return sum(self.query.alias_refcount[t] > 0 for t in self.query.alias_map) == 1
|
return sum(self.query.alias_refcount[t] > 0 for t in self.query.alias_map) == 1
|
||||||
|
|
||||||
def _as_sql(self, query):
|
def _as_sql(self, query):
|
||||||
|
@ -605,6 +605,12 @@ class DeletionTests(TestCase):
|
|||||||
|
|
||||||
|
|
||||||
class FastDeleteTests(TestCase):
|
class FastDeleteTests(TestCase):
|
||||||
|
def test_fast_delete_all(self):
|
||||||
|
with self.assertNumQueries(1) as ctx:
|
||||||
|
User.objects.all().delete()
|
||||||
|
sql = ctx.captured_queries[0]['sql']
|
||||||
|
# No subqueries is used when performing a full delete.
|
||||||
|
self.assertNotIn('SELECT', sql)
|
||||||
|
|
||||||
def test_fast_delete_fk(self):
|
def test_fast_delete_fk(self):
|
||||||
u = User.objects.create(
|
u = User.objects.create(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user