Refs #33766 -- Removed sql.Query.build_filtered_relation_q().
It was a copy of sql.Query._add_q that avoided JOIN updates.
This commit is contained in:
parent
1a13161eab
commit
83c9765f45
@ -433,9 +433,13 @@ class FilteredRelation:
|
|||||||
|
|
||||||
def resolve_expression(self, query, reuse, *args, **kwargs):
|
def resolve_expression(self, query, reuse, *args, **kwargs):
|
||||||
clone = self.clone()
|
clone = self.clone()
|
||||||
clone.resolved_condition = query.build_filtered_relation_q(
|
clone.resolved_condition = query.build_filter(
|
||||||
self.condition, reuse=reuse
|
self.condition,
|
||||||
)
|
can_reuse=reuse,
|
||||||
|
allow_joins=True,
|
||||||
|
split_subq=False,
|
||||||
|
update_join_types=False,
|
||||||
|
)[0]
|
||||||
return clone
|
return clone
|
||||||
|
|
||||||
def as_sql(self, compiler, connection):
|
def as_sql(self, compiler, connection):
|
||||||
|
@ -1347,6 +1347,7 @@ class Query(BaseExpression):
|
|||||||
split_subq=True,
|
split_subq=True,
|
||||||
check_filterable=True,
|
check_filterable=True,
|
||||||
summarize=False,
|
summarize=False,
|
||||||
|
update_join_types=True,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Build a WhereNode for a single filter clause but don't add it
|
Build a WhereNode for a single filter clause but don't add it
|
||||||
@ -1385,6 +1386,7 @@ class Query(BaseExpression):
|
|||||||
split_subq=split_subq,
|
split_subq=split_subq,
|
||||||
check_filterable=check_filterable,
|
check_filterable=check_filterable,
|
||||||
summarize=summarize,
|
summarize=summarize,
|
||||||
|
update_join_types=update_join_types,
|
||||||
)
|
)
|
||||||
if hasattr(filter_expr, "resolve_expression"):
|
if hasattr(filter_expr, "resolve_expression"):
|
||||||
if not getattr(filter_expr, "conditional", False):
|
if not getattr(filter_expr, "conditional", False):
|
||||||
@ -1537,6 +1539,7 @@ class Query(BaseExpression):
|
|||||||
split_subq=True,
|
split_subq=True,
|
||||||
check_filterable=True,
|
check_filterable=True,
|
||||||
summarize=False,
|
summarize=False,
|
||||||
|
update_join_types=True,
|
||||||
):
|
):
|
||||||
"""Add a Q-object to the current filter."""
|
"""Add a Q-object to the current filter."""
|
||||||
connector = q_object.connector
|
connector = q_object.connector
|
||||||
@ -1556,40 +1559,16 @@ class Query(BaseExpression):
|
|||||||
split_subq=split_subq,
|
split_subq=split_subq,
|
||||||
check_filterable=check_filterable,
|
check_filterable=check_filterable,
|
||||||
summarize=summarize,
|
summarize=summarize,
|
||||||
|
update_join_types=update_join_types,
|
||||||
)
|
)
|
||||||
joinpromoter.add_votes(needed_inner)
|
joinpromoter.add_votes(needed_inner)
|
||||||
if child_clause:
|
if child_clause:
|
||||||
target_clause.add(child_clause, connector)
|
target_clause.add(child_clause, connector)
|
||||||
|
if update_join_types:
|
||||||
needed_inner = joinpromoter.update_join_types(self)
|
needed_inner = joinpromoter.update_join_types(self)
|
||||||
return target_clause, needed_inner
|
|
||||||
|
|
||||||
def build_filtered_relation_q(
|
|
||||||
self, q_object, reuse, branch_negated=False, current_negated=False
|
|
||||||
):
|
|
||||||
"""Add a FilteredRelation object to the current filter."""
|
|
||||||
connector = q_object.connector
|
|
||||||
current_negated ^= q_object.negated
|
|
||||||
branch_negated = branch_negated or q_object.negated
|
|
||||||
target_clause = WhereNode(connector=connector, negated=q_object.negated)
|
|
||||||
for child in q_object.children:
|
|
||||||
if isinstance(child, Node):
|
|
||||||
child_clause = self.build_filtered_relation_q(
|
|
||||||
child,
|
|
||||||
reuse=reuse,
|
|
||||||
branch_negated=branch_negated,
|
|
||||||
current_negated=current_negated,
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
child_clause, _ = self.build_filter(
|
needed_inner = []
|
||||||
child,
|
return target_clause, needed_inner
|
||||||
can_reuse=reuse,
|
|
||||||
branch_negated=branch_negated,
|
|
||||||
current_negated=current_negated,
|
|
||||||
allow_joins=True,
|
|
||||||
split_subq=False,
|
|
||||||
)
|
|
||||||
target_clause.add(child_clause, connector)
|
|
||||||
return target_clause
|
|
||||||
|
|
||||||
def add_filtered_relation(self, filtered_relation, alias):
|
def add_filtered_relation(self, filtered_relation, alias):
|
||||||
filtered_relation.alias = alias
|
filtered_relation.alias = alias
|
||||||
|
Loading…
x
Reference in New Issue
Block a user