mirror of
https://github.com/django/django.git
synced 2025-07-19 09:09:13 +00:00
[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
This commit is contained in:
parent
f1c9080984
commit
b57d86f226
@ -111,14 +111,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):
|
||||||
|
@ -271,8 +271,8 @@ True
|
|||||||
# (regression test for #10362).
|
# (regression test for #10362).
|
||||||
>>> article = ArticleWithAuthor.objects.create(author="fred", headline="Hey there!", pub_date = datetime.datetime(2009, 3, 1, 8, 0, 0))
|
>>> 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!")
|
>>> ArticleWithAuthor.objects.filter(author="fred").update(headline="Oh, no!")
|
||||||
0
|
1
|
||||||
>>> ArticleWithAuthor.objects.filter(pk=article.pk).update(headline="Oh, no!")
|
>>> ArticleWithAuthor.objects.filter(pk=article.pk).update(headline="Oh, no!")
|
||||||
0
|
1
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user