]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix for OR handling with multiple indexes.
authorBruce Momjian <bruce@momjian.us>
Sun, 2 Aug 1998 07:10:38 +0000 (07:10 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 2 Aug 1998 07:10:38 +0000 (07:10 +0000)
src/backend/optimizer/path/indxpath.c

index 851ca064deb43ff41e6d33533cc93485dc21cbf2..d8453a9455dfc08ff63f50a7f7266c88e199dc7a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.21 1998/08/01 22:44:53 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.22 1998/08/02 07:10:38 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -307,13 +307,18 @@ match_index_orclause(RelOptInfo *rel,
                                         List *other_matching_indices)
 {
        Node       *clause = NULL;
-       List       *matched_indices = other_matching_indices;
+       List       *matched_indices;
        List       *index_list = NIL;
        List       *clist;
 
        foreach(clist, or_clauses)
        {
                clause = lfirst(clist);
+               if (other_matching_indices)
+                       matched_indices = lfirst(other_matching_indices);
+               else
+                       matched_indices = NIL;
+                       
                if (is_opclause(clause) &&
                        op_class(((Oper *) ((Expr *) clause)->oper)->opno,
                                         xclass, index->relam) &&
@@ -330,11 +335,12 @@ match_index_orclause(RelOptInfo *rel,
                {
                        matched_indices = lcons(index, matched_indices);
                }
-               index_list = lappend(index_list, matched_indices);
 
                /* for the first index, we are creating the indexids list */
-               if (matched_indices)
-                       matched_indices = lnext(matched_indices);
+               index_list = lappend(index_list, matched_indices);
+
+               if (other_matching_indices)
+                       other_matching_indices = lnext(other_matching_indices);
        }
        return (index_list);