Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Changed the row count value returned from update queries in some cases.

If an update only affected an ancestor model (not the child), we were
returning 0 for the number of rows updated. This could have been
misleading if the value is used to detect an update occuring. So we now
return the rowcount from the first non-trivial query that is executed
(if any). Still a slight compromise, but better than what we had.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9966 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 14c8e5227af756a5dea207d8255bc3b3c941340c 1 parent c7a1a9f
@malcolmt malcolmt authored
Showing with 8 additions and 3 deletions.
  1. +8 −3 django/db/models/sql/subqueries.py
View
11 django/db/models/sql/subqueries.py
@@ -113,14 +113,19 @@ def clone(self, klass=None, **kwargs):
def execute_sql(self, result_type=None):
"""
Execute the specified update. Returns the number of rows affected by
- the primary update query (there could be other updates on related
- tables, but their rowcounts are not returned).
+ the primary update query. The "primary update query" is the first
+ non-empty query that is executed. Row counts for any subsequent,
+ related queries are not available.
"""
cursor = super(UpdateQuery, self).execute_sql(result_type)
rows = cursor and cursor.rowcount or 0
+ is_empty = cursor is None
del cursor
for query in self.get_related_updates():
- query.execute_sql(result_type)
+ aux_rows = query.execute_sql(result_type)
+ if is_empty:
+ rows = aux_rows
+ is_empty = False
return rows
def as_sql(self):
Please sign in to comment.
Something went wrong with that request. Please try again.