Fixed #8039 -- Make sure that extra(tables=...) tables are always included in
the resulting SQL. Previously, an optimisation was removing them in some corner cases. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8429 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
b25d759bed
commit
556fbc78a6
|
@ -542,7 +542,10 @@ class Query(object):
|
||||||
first = False
|
first = False
|
||||||
for t in self.extra_tables:
|
for t in self.extra_tables:
|
||||||
alias, unused = self.table_alias(t)
|
alias, unused = self.table_alias(t)
|
||||||
if alias not in self.alias_map:
|
# Only add the alias if it's not already present (the table_alias()
|
||||||
|
# calls increments the refcount, so an alias refcount of one means
|
||||||
|
# this is the only reference.
|
||||||
|
if alias not in self.alias_map or self.alias_refcount[alias] == 1:
|
||||||
connector = not first and ', ' or ''
|
connector = not first and ', ' or ''
|
||||||
result.append('%s%s' % (connector, qn(alias)))
|
result.append('%s%s' % (connector, qn(alias)))
|
||||||
first = False
|
first = False
|
||||||
|
|
|
@ -24,6 +24,10 @@ class RevisionableModel(models.Model):
|
||||||
new_revision.pk = None
|
new_revision.pk = None
|
||||||
return new_revision
|
return new_revision
|
||||||
|
|
||||||
|
class Order(models.Model):
|
||||||
|
created_by = models.ForeignKey(User)
|
||||||
|
text = models.TextField()
|
||||||
|
|
||||||
__test__ = {"API_TESTS": """
|
__test__ = {"API_TESTS": """
|
||||||
# Regression tests for #7314 and #7372
|
# Regression tests for #7314 and #7372
|
||||||
|
|
||||||
|
@ -87,4 +91,11 @@ True
|
||||||
>>> qs[:1]
|
>>> qs[:1]
|
||||||
[<User: fred>]
|
[<User: fred>]
|
||||||
|
|
||||||
|
# Regression test for #8039: Ordering sometimes removed relevant tables from
|
||||||
|
# extra(). This test is the critical case: ordering uses a table, but then
|
||||||
|
# removes the reference because of an optimisation. The table should still be
|
||||||
|
# present because of the extra() call.
|
||||||
|
>>> Order.objects.extra(where=["username=%s"], params=["fred"], tables=["auth_user"]).order_by('created_by')
|
||||||
|
[]
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue