mirror of
https://github.com/django/django.git
synced 2025-07-04 09:49:12 +00:00
[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
This commit is contained in:
parent
59089a7d13
commit
485bfe4861
@ -176,3 +176,9 @@ class SQLUpdateCompiler(SQLCompiler):
|
|||||||
vals,
|
vals,
|
||||||
multi=True
|
multi=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SQLDeleteCompiler(SQLCompiler):
|
||||||
|
def delete(self, result_type):
|
||||||
|
filters = self.get_filters(self.query.where)
|
||||||
|
self.connection.db[self.query.model._meta.db_table].remove(filters)
|
||||||
|
@ -821,6 +821,9 @@ class SQLDeleteCompiler(SQLCompiler):
|
|||||||
where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
|
where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
|
||||||
result.append('WHERE %s' % where)
|
result.append('WHERE %s' % where)
|
||||||
return ' '.join(result), tuple(params)
|
return ' '.join(result), tuple(params)
|
||||||
|
|
||||||
|
def delete(self, *args, **kwargs):
|
||||||
|
return self.execute_sql(*args, **kwargs)
|
||||||
|
|
||||||
class SQLUpdateCompiler(SQLCompiler):
|
class SQLUpdateCompiler(SQLCompiler):
|
||||||
def as_sql(self):
|
def as_sql(self):
|
||||||
|
@ -24,7 +24,7 @@ class DeleteQuery(Query):
|
|||||||
def do_query(self, table, where, using):
|
def do_query(self, table, where, using):
|
||||||
self.tables = [table]
|
self.tables = [table]
|
||||||
self.where = where
|
self.where = where
|
||||||
self.get_compiler(using).execute_sql(None)
|
self.get_compiler(using).delete(None)
|
||||||
|
|
||||||
def delete_batch(self, pk_list, using):
|
def delete_batch(self, pk_list, using):
|
||||||
"""
|
"""
|
||||||
@ -36,7 +36,7 @@ class DeleteQuery(Query):
|
|||||||
for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
|
for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
|
||||||
where = self.where_class()
|
where = self.where_class()
|
||||||
field = self.model._meta.pk
|
field = self.model._meta.pk
|
||||||
where.add((Constraint(None, field.column, field), 'in',
|
where.add((Constraint(self.model._meta.db_table, field.column, field), 'in',
|
||||||
pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND)
|
pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND)
|
||||||
self.do_query(self.model._meta.db_table, where, using=using)
|
self.do_query(self.model._meta.db_table, where, using=using)
|
||||||
|
|
||||||
|
@ -50,6 +50,22 @@ class MongoTestCase(TestCase):
|
|||||||
Artist.objects.filter(pk=k.pk).update(age=1 + F("age"))
|
Artist.objects.filter(pk=k.pk).update(age=1 + F("age"))
|
||||||
self.assertEqual(Artist.objects.get(pk=k.pk).age, 58)
|
self.assertEqual(Artist.objects.get(pk=k.pk).age, 58)
|
||||||
|
|
||||||
|
def test_delete(self):
|
||||||
|
o = Artist.objects.create(name="O.A.R.", good=True)
|
||||||
|
self.assertEqual(Artist.objects.count(), 1)
|
||||||
|
|
||||||
|
o.delete()
|
||||||
|
self.assertEqual(Artist.objects.count(), 0)
|
||||||
|
|
||||||
|
def test_bulk_delete(self):
|
||||||
|
d = Artist.objects.create(name="Dispatch", good=True)
|
||||||
|
b = Artist.objects.create(name="Backstreet Boys", good=False)
|
||||||
|
|
||||||
|
# Good riddance.
|
||||||
|
Artist.objects.filter(good=False).delete()
|
||||||
|
self.assertEqual(Artist.objects.count(), 1)
|
||||||
|
self.assertEqual(Artist.objects.get(), d)
|
||||||
|
|
||||||
def test_count(self):
|
def test_count(self):
|
||||||
Artist.objects.create(name="Billy Joel", good=True)
|
Artist.objects.create(name="Billy Joel", good=True)
|
||||||
Artist.objects.create(name="John Mellencamp", good=True)
|
Artist.objects.create(name="John Mellencamp", good=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user