Skip to content

Commit 485bfe4

Browse files
committed
[soc2010/query-refactor] Implemented deletion. Thanks to Josh Ourisman for pointing this out.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13433 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent 59089a7 commit 485bfe4

File tree

4 files changed

+27
-2
lines changed

4 files changed

+27
-2
lines changed

django/contrib/mongodb/compiler.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,3 +176,9 @@ def update(self, result_type):
176176
vals,
177177
multi=True
178178
)
179+
180+
181+
class SQLDeleteCompiler(SQLCompiler):
182+
def delete(self, result_type):
183+
filters = self.get_filters(self.query.where)
184+
self.connection.db[self.query.model._meta.db_table].remove(filters)

django/db/models/sql/compiler.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,9 @@ def as_sql(self):
821821
where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
822822
result.append('WHERE %s' % where)
823823
return ' '.join(result), tuple(params)
824+
825+
def delete(self, *args, **kwargs):
826+
return self.execute_sql(*args, **kwargs)
824827

825828
class SQLUpdateCompiler(SQLCompiler):
826829
def as_sql(self):

django/db/models/sql/subqueries.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class DeleteQuery(Query):
2424
def do_query(self, table, where, using):
2525
self.tables = [table]
2626
self.where = where
27-
self.get_compiler(using).execute_sql(None)
27+
self.get_compiler(using).delete(None)
2828

2929
def delete_batch(self, pk_list, using):
3030
"""
@@ -36,7 +36,7 @@ def delete_batch(self, pk_list, using):
3636
for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
3737
where = self.where_class()
3838
field = self.model._meta.pk
39-
where.add((Constraint(None, field.column, field), 'in',
39+
where.add((Constraint(self.model._meta.db_table, field.column, field), 'in',
4040
pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND)
4141
self.do_query(self.model._meta.db_table, where, using=using)
4242

tests/regressiontests/mongodb/tests.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,22 @@ def test_f_expressions(self):
5050
Artist.objects.filter(pk=k.pk).update(age=1 + F("age"))
5151
self.assertEqual(Artist.objects.get(pk=k.pk).age, 58)
5252

53+
def test_delete(self):
54+
o = Artist.objects.create(name="O.A.R.", good=True)
55+
self.assertEqual(Artist.objects.count(), 1)
56+
57+
o.delete()
58+
self.assertEqual(Artist.objects.count(), 0)
59+
60+
def test_bulk_delete(self):
61+
d = Artist.objects.create(name="Dispatch", good=True)
62+
b = Artist.objects.create(name="Backstreet Boys", good=False)
63+
64+
# Good riddance.
65+
Artist.objects.filter(good=False).delete()
66+
self.assertEqual(Artist.objects.count(), 1)
67+
self.assertEqual(Artist.objects.get(), d)
68+
5369
def test_count(self):
5470
Artist.objects.create(name="Billy Joel", good=True)
5571
Artist.objects.create(name="John Mellencamp", good=True)

0 commit comments

Comments
 (0)