From 55667635034e5844b73b065928683d01bb874d40 Mon Sep 17 00:00:00 2001
From: Alexander Korotkov <akorotkov@postgresql.org>
Date: Thu, 2 May 2024 23:20:36 +0300
Subject: [PATCH v2 2/4] Minor refactoring for self-join elimination code

This commit makes some minor miscellaneous refactoring for the self-join
elimination code including:
 * Empty lines for better code readability,
 * Rearrangement of local variables in remove_self_joins_recurse() for the
   sake of brevity and clarity,
 * Remove redundant check for not null RangeTblEntry pointer, which has been
   dereferenced before.

Discussion: https://postgr.es/m/CAMbWs49Q8g1LPVCeNHYv-Y-gFo826ertrg6nYNC9LL%3D8%3DzHP3g%40mail.gmail.com
Author: Richard Guo
Reviewed-by: Alexander Korotkov
---
 src/backend/optimizer/plan/analyzejoins.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index b2a633ba4d7..a46c3ffaa5a 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -457,15 +457,20 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel,
 			phinfo->ph_eval_at = replace_relid(phinfo->ph_eval_at, relid, subst);
 			phinfo->ph_eval_at = replace_relid(phinfo->ph_eval_at, ojrelid, subst);
 			Assert(!bms_is_empty(phinfo->ph_eval_at));	/* checked previously */
+
 			phinfo->ph_needed = replace_relid(phinfo->ph_needed, relid, subst);
 			phinfo->ph_needed = replace_relid(phinfo->ph_needed, ojrelid, subst);
 			/* ph_needed might or might not become empty */
+
 			phinfo->ph_lateral = replace_relid(phinfo->ph_lateral, relid, subst);
 			/* ph_lateral might or might not be empty */
+
 			phv->phrels = replace_relid(phv->phrels, relid, subst);
 			phv->phrels = replace_relid(phv->phrels, ojrelid, subst);
 			Assert(!bms_is_empty(phv->phrels));
+
 			replace_varno((Node *) phv->phexpr, relid, subst);
+
 			Assert(phv->phnullingrels == NULL); /* no need to adjust */
 		}
 	}
@@ -2292,25 +2297,26 @@ remove_self_joins_recurse(PlannerInfo *root, List *joinlist, Relids toRemove)
 
 		if (IsA(jlnode, RangeTblRef))
 		{
-			RangeTblRef *ref = (RangeTblRef *) jlnode;
-			RangeTblEntry *rte = root->simple_rte_array[ref->rtindex];
+			int			varno = ((RangeTblRef *) jlnode)->rtindex;
+			RangeTblEntry *rte = root->simple_rte_array[varno];
 
 			/*
 			 * We only care about base relations from which we select
 			 * something.
 			 */
 			if (rte->rtekind == RTE_RELATION &&
-				rte->relkind == RELKIND_RELATION &&
-				root->simple_rel_array[ref->rtindex] != NULL)
+				rte->relkind == RELKIND_RELATION)
 			{
-				Assert(!bms_is_member(ref->rtindex, relids));
-				relids = bms_add_member(relids, ref->rtindex);
+				Assert(!bms_is_member(varno, relids));
+				relids = bms_add_member(relids, varno);
 			}
 		}
 		else if (IsA(jlnode, List))
+		{
 			/* Recursively go inside the sub-joinlist */
 			toRemove = remove_self_joins_recurse(root, (List *) jlnode,
 												 toRemove);
+		}
 		else
 			elog(ERROR, "unrecognized joinlist node type: %d",
 				 (int) nodeTag(jlnode));
-- 
2.39.3 (Apple Git-145)

