]> granicus.if.org Git - postgresql/commitdiff
Fix merging pathes of pruned rels ("indices are unused" problem).
authorVadim B. Mikheev <vadim4o@yahoo.com>
Thu, 2 Apr 1998 07:27:15 +0000 (07:27 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Thu, 2 Apr 1998 07:27:15 +0000 (07:27 +0000)
src/backend/optimizer/path/prune.c

index 014c72e90605b483ef875e3374309856fcafd46a..250a670fc43eb354fed7ac0c75eff505144f62cf 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.12 1998/02/26 04:32:43 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.13 1998/04/02 07:27:15 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -61,39 +61,25 @@ prune_joinrels(List *rel_list)
 static List *
 prune_joinrel(Rel *rel, List *other_rels)
 {
-       List       *cur = NIL;
-       List       *return_list = NIL;
+       List       *i = NIL;
+       List       *result = NIL;
 
-       /* find first relation that doesn't match */
-       foreach(cur, other_rels)
+       foreach(i, other_rels)
        {
-               Rel                *other_rel = (Rel *) lfirst(cur);
-
-               if (!same(rel->relids, other_rel->relids))
-                       break;
-       }
-
-       /* we now know cur doesn't match, or is NIL */
-       return_list = cur;
-
-       /*
-        * remove relations that do match, we use lnext so we can remove
-        * easily
-        */
-       while (cur != NIL && lnext(cur) != NIL)
-       {
-               Rel                *other_rel = (Rel *) lfirst(lnext(cur));
-
+               Rel        *other_rel = (Rel *) lfirst(i);
+               
                if (same(rel->relids, other_rel->relids))
                {
                        rel->pathlist = add_pathlist(rel,
                                                                                 rel->pathlist,
                                                                                 other_rel->pathlist);
-                       lnext(cur) = lnext(lnext(cur));         /* delete it */
                }
-               cur = lnext(cur);
+               else
+               {
+                       result = nconc(result, lcons(other_rel, NIL));
+               }
        }
-       return return_list;
+       return (result);
 }
 
 /*