From 99bc012d5198bdfd2aa67336f645dbf887bb0ec9 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Sat, 20 Nov 2010 13:57:27 -0500
Subject: [PATCH] Minor cleanup of indxpath.c.

Eliminate some superfluous notational complexity around
match_clause_to_indexcol(), and rip out the DoneMatchingIndexKeys
crock.
---
 src/backend/optimizer/path/indxpath.c | 35 ++++++---------------------
 1 file changed, 8 insertions(+), 27 deletions(-)

diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 38b09300a0d..e14d0f5f02c 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -37,11 +37,6 @@
 #include "utils/selfuncs.h"
 
 
-/*
- * DoneMatchingIndexKeys() - MACRO
- */
-#define DoneMatchingIndexKeys(families) (families[0] == InvalidOid)
-
 #define IsBooleanOpfamily(opfamily) \
 	((opfamily) == BOOL_BTREE_FAM_OID || (opfamily) == BOOL_HASH_FAM_OID)
 
@@ -83,7 +78,7 @@ static PathClauseUsage *classify_index_clause_usage(Path *path,
 static void find_indexpath_quals(Path *bitmapqual, List **quals, List **preds);
 static int	find_list_position(Node *node, List **nodelist);
 static bool match_clause_to_indexcol(IndexOptInfo *index,
-						 int indexcol, Oid opfamily,
+						 int indexcol,
 						 RestrictInfo *rinfo,
 						 Relids outer_relids,
 						 SaOpControl saop_control);
@@ -1053,7 +1048,6 @@ group_clauses_by_indexkey(IndexOptInfo *index,
 	List	   *clausegroup_list = NIL;
 	bool		found_outer_clause = false;
 	int			indexcol = 0;
-	Oid		   *families = index->opfamily;
 
 	*found_clause = false;		/* default result */
 
@@ -1062,7 +1056,6 @@ group_clauses_by_indexkey(IndexOptInfo *index,
 
 	do
 	{
-		Oid			curFamily = families[0];
 		List	   *clausegroup = NIL;
 		ListCell   *l;
 
@@ -1074,7 +1067,6 @@ group_clauses_by_indexkey(IndexOptInfo *index,
 			Assert(IsA(rinfo, RestrictInfo));
 			if (match_clause_to_indexcol(index,
 										 indexcol,
-										 curFamily,
 										 rinfo,
 										 outer_relids,
 										 saop_control))
@@ -1094,7 +1086,6 @@ group_clauses_by_indexkey(IndexOptInfo *index,
 			Assert(IsA(rinfo, RestrictInfo));
 			if (match_clause_to_indexcol(index,
 										 indexcol,
-										 curFamily,
 										 rinfo,
 										 outer_relids,
 										 saop_control))
@@ -1113,9 +1104,8 @@ group_clauses_by_indexkey(IndexOptInfo *index,
 		clausegroup_list = lappend(clausegroup_list, clausegroup);
 
 		indexcol++;
-		families++;
 
-	} while (!DoneMatchingIndexKeys(families));
+	} while (indexcol < index->ncolumns);
 
 	if (!*found_clause && !found_outer_clause)
 		return NIL;				/* no indexable clauses anywhere */
@@ -1185,7 +1175,6 @@ group_clauses_by_indexkey(IndexOptInfo *index,
 static bool
 match_clause_to_indexcol(IndexOptInfo *index,
 						 int indexcol,
-						 Oid opfamily,
 						 RestrictInfo *rinfo,
 						 Relids outer_relids,
 						 SaOpControl saop_control)
@@ -1196,6 +1185,7 @@ match_clause_to_indexcol(IndexOptInfo *index,
 	Relids		left_relids;
 	Relids		right_relids;
 	Oid			expr_op;
+	Oid			opfamily = index->opfamily[indexcol];
 	bool		plain_op;
 
 	/*
@@ -1582,23 +1572,18 @@ matches_any_index(RestrictInfo *rinfo, RelOptInfo *rel, Relids outer_relids)
 	{
 		IndexOptInfo *index = (IndexOptInfo *) lfirst(l);
 		int			indexcol = 0;
-		Oid		   *families = index->opfamily;
 
 		do
 		{
-			Oid			curFamily = families[0];
-
 			if (match_clause_to_indexcol(index,
 										 indexcol,
-										 curFamily,
 										 rinfo,
 										 outer_relids,
 										 SAOP_ALLOW))
 				return true;
 
 			indexcol++;
-			families++;
-		} while (!DoneMatchingIndexKeys(families));
+		} while (indexcol < index->ncolumns);
 	}
 
 	return false;
@@ -1621,11 +1606,10 @@ eclass_matches_any_index(EquivalenceClass *ec, EquivalenceMember *em,
 	{
 		IndexOptInfo *index = (IndexOptInfo *) lfirst(l);
 		int			indexcol = 0;
-		Oid		   *families = index->opfamily;
 
 		do
 		{
-			Oid			curFamily = families[0];
+			Oid			curFamily = index->opfamily[indexcol];
 
 			/*
 			 * If it's a btree index, we can reject it if its opfamily isn't
@@ -1643,8 +1627,7 @@ eclass_matches_any_index(EquivalenceClass *ec, EquivalenceMember *em,
 				return true;
 
 			indexcol++;
-			families++;
-		} while (!DoneMatchingIndexKeys(families));
+		} while (indexcol < index->ncolumns);
 	}
 
 	return false;
@@ -2379,7 +2362,6 @@ expand_indexqual_conditions(IndexOptInfo *index, List *clausegroups)
 	List	   *resultquals = NIL;
 	ListCell   *clausegroup_item;
 	int			indexcol = 0;
-	Oid		   *families = index->opfamily;
 
 	if (clausegroups == NIL)
 		return NIL;
@@ -2387,7 +2369,7 @@ expand_indexqual_conditions(IndexOptInfo *index, List *clausegroups)
 	clausegroup_item = list_head(clausegroups);
 	do
 	{
-		Oid			curFamily = families[0];
+		Oid			curFamily = index->opfamily[indexcol];
 		ListCell   *l;
 
 		foreach(l, (List *) lfirst(clausegroup_item))
@@ -2447,8 +2429,7 @@ expand_indexqual_conditions(IndexOptInfo *index, List *clausegroups)
 		clausegroup_item = lnext(clausegroup_item);
 
 		indexcol++;
-		families++;
-	} while (clausegroup_item != NULL && !DoneMatchingIndexKeys(families));
+	} while (clausegroup_item != NULL && indexcol < index->ncolumns);
 
 	Assert(clausegroup_item == NULL);	/* else more groups than indexkeys */
 
-- 
GitLab