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
This commit is contained in:
Malcolm Tredinnick 2009-03-04 05:33:23 +00:00
parent c7a1a9f380
commit 14c8e5227a
1 changed files with 8 additions and 3 deletions

View File

@ -113,14 +113,19 @@ class UpdateQuery(Query):
def execute_sql(self, result_type=None): def execute_sql(self, result_type=None):
""" """
Execute the specified update. Returns the number of rows affected by Execute the specified update. Returns the number of rows affected by
the primary update query (there could be other updates on related the primary update query. The "primary update query" is the first
tables, but their rowcounts are not returned). non-empty query that is executed. Row counts for any subsequent,
related queries are not available.
""" """
cursor = super(UpdateQuery, self).execute_sql(result_type) cursor = super(UpdateQuery, self).execute_sql(result_type)
rows = cursor and cursor.rowcount or 0 rows = cursor and cursor.rowcount or 0
is_empty = cursor is None
del cursor del cursor
for query in self.get_related_updates(): 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 return rows
def as_sql(self): def as_sql(self):