Author: mtredinnick
Date: 2009-02-28 19:59:18 -0600 (Sat, 28 Feb 2009)
New Revision: 9927

Modified:
   django/branches/releases/1.0.X/django/db/models/sql/query.py
   django/branches/releases/1.0.X/django/db/models/sql/subqueries.py
   django/branches/releases/1.0.X/tests/regressiontests/queries/models.py
Log:
[1.0.X] Fixed insert/update handling when no database interaction is required.

Fixed #10205 as part of this.

Backport of r9926 from trunk.

Modified: django/branches/releases/1.0.X/django/db/models/sql/query.py
===================================================================
--- django/branches/releases/1.0.X/django/db/models/sql/query.py        
2009-03-01 01:56:59 UTC (rev 9926)
+++ django/branches/releases/1.0.X/django/db/models/sql/query.py        
2009-03-01 01:59:18 UTC (rev 9927)
@@ -1743,9 +1743,11 @@
         iterator over the results if the result_type is MULTI.
 
         result_type is either MULTI (use fetchmany() to retrieve all rows),
-        SINGLE (only retrieve a single row), or None (no results expected, but
-        the cursor is returned, since it's used by subclasses such as
-        InsertQuery).
+        SINGLE (only retrieve a single row), or None. In this last case, the
+        cursor is returned if any query is executed, since it's used by
+        subclasses such as InsertQuery). It's possible, however, that no query
+        is needed, as the filters describe an empty set. In that case, None is
+        returned, to avoid any unnecessary database interaction.
         """
         try:
             sql, params = self.as_sql()

Modified: django/branches/releases/1.0.X/django/db/models/sql/subqueries.py
===================================================================
--- django/branches/releases/1.0.X/django/db/models/sql/subqueries.py   
2009-03-01 01:56:59 UTC (rev 9926)
+++ django/branches/releases/1.0.X/django/db/models/sql/subqueries.py   
2009-03-01 01:59:18 UTC (rev 9927)
@@ -115,7 +115,7 @@
         tables, but their rowcounts are not returned).
         """
         cursor = super(UpdateQuery, self).execute_sql(result_type)
-        rows = cursor.rowcount
+        rows = cursor and cursor.rowcount or 0
         del cursor
         for query in self.get_related_updates():
             query.execute_sql(result_type)
@@ -307,7 +307,7 @@
 
     def execute_sql(self, return_id=False):
         cursor = super(InsertQuery, self).execute_sql(None)
-        if return_id:
+        if return_id and cursor:
             return self.connection.ops.last_insert_id(cursor,
                     self.model._meta.db_table, self.model._meta.pk.column)
 

Modified: django/branches/releases/1.0.X/tests/regressiontests/queries/models.py
===================================================================
--- django/branches/releases/1.0.X/tests/regressiontests/queries/models.py      
2009-03-01 01:56:59 UTC (rev 9926)
+++ django/branches/releases/1.0.X/tests/regressiontests/queries/models.py      
2009-03-01 01:59:18 UTC (rev 9927)
@@ -1056,6 +1056,20 @@
 Bug #9985 -- qs.values_list(...).values(...) combinations should work.
 >>> Note.objects.values_list("note", flat=True).values("id").order_by("id")
 [{'id': 1}, {'id': 2}, {'id': 3}]
+>>> 
Annotation.objects.filter(notes__in=Note.objects.filter(note="n1").values_list('note').values('id'))
+[<Annotation: a1>]
+
+Bug #10028 -- ordering by model related to nullable relations(!) should use
+outer joins, so that all results are included.
+>>> _ = Plaything.objects.create(name="p1")
+>>> Plaything.objects.all()
+[<Plaything: p1>]
+
+Bug #10205 -- When bailing out early because of an empty "__in" filter, we need
+to set things up correctly internally so that subqueries can continue properly.
+>>> Tag.objects.filter(name__in=()).update(name="foo")
+0
+
 """}
 
 # In Python 2.3 and the Python 2.6 beta releases, exceptions raised in __len__


--~--~---------~--~----~------------~-------~--~----~
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