[3.1.x] Fixed #31624 -- Avoided subquery usage on QuerySet.all().delete().
Thanks Adam Johnson for the report. Regression in7acef095d7
. Backport of972000420e
from master
This commit is contained in:
parent
6e3c543909
commit
d91095def4
|
@ -1400,6 +1400,8 @@ class SQLInsertCompiler(SQLCompiler):
|
|||
class SQLDeleteCompiler(SQLCompiler):
|
||||
@cached_property
|
||||
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
|
||||
|
||||
def _as_sql(self, query):
|
||||
|
|
|
@ -605,6 +605,12 @@ class DeletionTests(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):
|
||||
u = User.objects.create(
|
||||
|
|
Loading…
Reference in New Issue