From 4fcf48450d38e28e69e629c779a7866183d8ea41 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 11 Dec 2015 15:52:16 -0500 Subject: Get rid of the planner's LateralJoinInfo data structure. I originally modeled this data structure on SpecialJoinInfo, but after commit acfcd45cacb6df23 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. --- src/backend/optimizer/plan/analyzejoins.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'src/backend/optimizer/plan/analyzejoins.c') diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 7912b153c59..d188d9724af 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -439,9 +439,6 @@ remove_rel_from_query(PlannerInfo *root, int relid, Relids joinrelids) sjinfo->syn_righthand = bms_del_member(sjinfo->syn_righthand, relid); } - /* There shouldn't be any LATERAL info to translate, as yet */ - Assert(root->lateral_info_list == NIL); - /* * Likewise remove references from PlaceHolderVar data structures, * removing any no-longer-needed placeholders entirely. -- cgit v1.2.3