mirror of https://github.com/django/django.git
parent
edf93127bf
commit
10f9ba046f
|
@ -524,31 +524,15 @@ class Query(object):
|
||||||
# the join type for the unused alias.
|
# the join type for the unused alias.
|
||||||
self.unref_alias(new_alias)
|
self.unref_alias(new_alias)
|
||||||
|
|
||||||
# So that we don't exclude valid results in an "or" query combination,
|
# So that we don't exclude valid results in an OR query combination,
|
||||||
# all joins exclusive to either the lhs or the rhs must be converted
|
# all joins exclusive to either the lhs or the rhs must be converted
|
||||||
# to an outer join.
|
# to an outer join. RHS joins were already set to outer joins above,
|
||||||
|
# so check which joins were used only in the lhs query.
|
||||||
if not conjunction:
|
if not conjunction:
|
||||||
l_tables = set(self.tables)
|
rhs_used_joins = set(change_map.values())
|
||||||
r_tables = set(rhs.tables)
|
to_promote = [alias for alias in self.tables
|
||||||
# Update r_tables aliases.
|
if alias not in rhs_used_joins]
|
||||||
for alias in change_map:
|
self.promote_joins(to_promote, True)
|
||||||
if alias in r_tables:
|
|
||||||
# r_tables may contain entries that have a refcount of 0
|
|
||||||
# if the query has references to a table that can be
|
|
||||||
# trimmed because only the foreign key is used.
|
|
||||||
# We only need to fix the aliases for the tables that
|
|
||||||
# actually have aliases.
|
|
||||||
if rhs.alias_refcount[alias]:
|
|
||||||
r_tables.remove(alias)
|
|
||||||
r_tables.add(change_map[alias])
|
|
||||||
# Find aliases that are exclusive to rhs or lhs.
|
|
||||||
# These are promoted to outer joins.
|
|
||||||
outer_tables = (l_tables | r_tables) - (l_tables & r_tables)
|
|
||||||
for alias in outer_tables:
|
|
||||||
# Again, some of the tables won't have aliases due to
|
|
||||||
# the trimming of unnecessary tables.
|
|
||||||
if self.alias_refcount.get(alias) or rhs.alias_refcount.get(alias):
|
|
||||||
self.promote_joins([alias], True)
|
|
||||||
|
|
||||||
# Now relabel a copy of the rhs where-clause and add it to the current
|
# Now relabel a copy of the rhs where-clause and add it to the current
|
||||||
# one.
|
# one.
|
||||||
|
|
Loading…
Reference in New Issue