Commit b57d86f2 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

[1.0.X] 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.

Backport of r9966 from trunk (turns out this *is* a bugfix, since the returned
rowcount is used in Model.save(force_update=True)).

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9969 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent f1c90809
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -111,14 +111,19 @@ class UpdateQuery(Query):
    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):
+2 −2
Original line number Diff line number Diff line
@@ -271,8 +271,8 @@ True
# (regression test for #10362).
>>> article = ArticleWithAuthor.objects.create(author="fred", headline="Hey there!", pub_date = datetime.datetime(2009, 3, 1, 8, 0, 0))
>>> ArticleWithAuthor.objects.filter(author="fred").update(headline="Oh, no!")
0
1
>>> ArticleWithAuthor.objects.filter(pk=article.pk).update(headline="Oh, no!")
0
1

"""}