mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Get rid of the planner's LateralJoinInfo data structure.
I originally modeled this data structure on SpecialJoinInfo, but after
commit acfcd45cac
that looks like a pretty poor decision.
All we really need is relid sets identifying laterally-referenced rels;
and most of the time, what we want to know about includes indirect lateral
references, a case the LateralJoinInfo data was unsuited to compute with
any efficiency. The previous commit redefined RelOptInfo.lateral_relids
as the transitive closure of lateral references, so that it easily supports
checking indirect references. For the places where we really do want just
direct references, add a new RelOptInfo field direct_lateral_relids, which
is easily set up as a copy of lateral_relids before we perform the
transitive closure calculation. Then we can just drop lateral_info_list
and LateralJoinInfo and the supporting code. This makes the planner's
handling of lateral references noticeably more efficient, and shorter too.
Such a change can't be back-patched into stable branches for fear of
breaking extensions that might be looking at the planner's data structures;
but it seems not too late to push it into 9.5, so I've done so.
This commit is contained in:
@@ -402,7 +402,6 @@ OffsetVarNodes_walker(Node *node, OffsetVarNodes_context *context)
|
||||
/* Shouldn't need to handle other planner auxiliary nodes here */
|
||||
Assert(!IsA(node, PlanRowMark));
|
||||
Assert(!IsA(node, SpecialJoinInfo));
|
||||
Assert(!IsA(node, LateralJoinInfo));
|
||||
Assert(!IsA(node, PlaceHolderInfo));
|
||||
Assert(!IsA(node, MinMaxAggInfo));
|
||||
|
||||
@@ -586,7 +585,6 @@ ChangeVarNodes_walker(Node *node, ChangeVarNodes_context *context)
|
||||
}
|
||||
/* Shouldn't need to handle other planner auxiliary nodes here */
|
||||
Assert(!IsA(node, SpecialJoinInfo));
|
||||
Assert(!IsA(node, LateralJoinInfo));
|
||||
Assert(!IsA(node, PlaceHolderInfo));
|
||||
Assert(!IsA(node, MinMaxAggInfo));
|
||||
|
||||
@@ -868,7 +866,6 @@ rangeTableEntry_used_walker(Node *node,
|
||||
Assert(!IsA(node, PlaceHolderVar));
|
||||
Assert(!IsA(node, PlanRowMark));
|
||||
Assert(!IsA(node, SpecialJoinInfo));
|
||||
Assert(!IsA(node, LateralJoinInfo));
|
||||
Assert(!IsA(node, AppendRelInfo));
|
||||
Assert(!IsA(node, PlaceHolderInfo));
|
||||
Assert(!IsA(node, MinMaxAggInfo));
|
||||
|
Reference in New Issue
Block a user