OSDN Git Service

Minor cleanup of indxpath.c.
authorRobert Haas <rhaas@postgresql.org>
Sat, 20 Nov 2010 18:57:27 +0000 (13:57 -0500)
committerRobert Haas <rhaas@postgresql.org>
Sat, 20 Nov 2010 18:57:27 +0000 (13:57 -0500)
Eliminate some superfluous notational complexity around
match_clause_to_indexcol(), and rip out the DoneMatchingIndexKeys
crock.

src/backend/optimizer/path/indxpath.c

index 38b0930..e14d0f5 100644 (file)
 #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 */