mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	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:
		| @@ -542,7 +542,10 @@ class Query(object): | ||||
|             first = False | ||||
|         for t in self.extra_tables: | ||||
|             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 '' | ||||
|                 result.append('%s%s' % (connector, qn(alias))) | ||||
|                 first = False | ||||
|   | ||||
| @@ -24,6 +24,10 @@ class RevisionableModel(models.Model): | ||||
|         new_revision.pk = None | ||||
|         return new_revision | ||||
|  | ||||
| class Order(models.Model): | ||||
|     created_by = models.ForeignKey(User) | ||||
|     text = models.TextField() | ||||
|  | ||||
| __test__ = {"API_TESTS": """ | ||||
| # Regression tests for #7314 and #7372 | ||||
|  | ||||
| @@ -87,4 +91,11 @@ True | ||||
| >>> qs[:1] | ||||
| [<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') | ||||
| [] | ||||
|  | ||||
| """} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user