Author: Alex
Date: 2010-07-16 21:38:10 -0500 (Fri, 16 Jul 2010)
New Revision: 13433

Modified:
   django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py
   django/branches/soc2010/query-refactor/django/db/models/sql/compiler.py
   django/branches/soc2010/query-refactor/django/db/models/sql/subqueries.py
   django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py
Log:
[soc2010/query-refactor] Implemented deletion.  Thanks to Josh Ourisman for 
pointing this out.

Modified: 
django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py
===================================================================
--- django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py   
2010-07-17 02:20:29 UTC (rev 13432)
+++ django/branches/soc2010/query-refactor/django/contrib/mongodb/compiler.py   
2010-07-17 02:38:10 UTC (rev 13433)
@@ -176,3 +176,9 @@
             vals,
             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)

Modified: 
django/branches/soc2010/query-refactor/django/db/models/sql/compiler.py
===================================================================
--- django/branches/soc2010/query-refactor/django/db/models/sql/compiler.py     
2010-07-17 02:20:29 UTC (rev 13432)
+++ django/branches/soc2010/query-refactor/django/db/models/sql/compiler.py     
2010-07-17 02:38:10 UTC (rev 13433)
@@ -821,6 +821,9 @@
         where, params = self.query.where.as_sql(qn=qn, 
connection=self.connection)
         result.append('WHERE %s' % where)
         return ' '.join(result), tuple(params)
+    
+    def delete(self, *args, **kwargs):
+        return self.execute_sql(*args, **kwargs)
 
 class SQLUpdateCompiler(SQLCompiler):
     def as_sql(self):

Modified: 
django/branches/soc2010/query-refactor/django/db/models/sql/subqueries.py
===================================================================
--- django/branches/soc2010/query-refactor/django/db/models/sql/subqueries.py   
2010-07-17 02:20:29 UTC (rev 13432)
+++ django/branches/soc2010/query-refactor/django/db/models/sql/subqueries.py   
2010-07-17 02:38:10 UTC (rev 13433)
@@ -24,7 +24,7 @@
     def do_query(self, table, where, using):
         self.tables = [table]
         self.where = where
-        self.get_compiler(using).execute_sql(None)
+        self.get_compiler(using).delete(None)
 
     def delete_batch(self, pk_list, using):
         """
@@ -36,7 +36,7 @@
         for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
             where = self.where_class()
             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)
             self.do_query(self.model._meta.db_table, where, using=using)
 

Modified: 
django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py
===================================================================
--- 
django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py   
    2010-07-17 02:20:29 UTC (rev 13432)
+++ 
django/branches/soc2010/query-refactor/tests/regressiontests/mongodb/tests.py   
    2010-07-17 02:38:10 UTC (rev 13433)
@@ -50,6 +50,22 @@
         Artist.objects.filter(pk=k.pk).update(age=1 + F("age"))
         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):
         Artist.objects.create(name="Billy Joel", good=True)
         Artist.objects.create(name="John Mellencamp", good=True)

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to