more optimizer cleanups
authorBruce Momjian
Thu, 18 Feb 1999 04:45:36 +0000 (04:45 +0000)
committerBruce Momjian
Thu, 18 Feb 1999 04:45:36 +0000 (04:45 +0000)
src/backend/optimizer/path/joinrels.c
src/include/optimizer/paths.h

index df74130cfcbdebc590acb01d74adbda994beb89f..195e72a052c4cd7f0e566a829d06bc452f4e7d41 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.27 1999/02/18 00:49:20 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.28 1999/02/18 04:45:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -46,37 +46,35 @@ static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel,
  *   of these exist for a given relation, all remaining possibilities are
  *   considered.
  *
- * 'outer_rels' is the list of rel nodes
- *
  * Returns a list of rel nodes corresponding to the new join relations.
  */
 List *
-make_rels_by_joins(Query *root, List *outer_rels)
+make_rels_by_joins(Query *root, List *old_rels)
 {
-   List       *joins = NIL;
+   List       *joined_rels = NIL;
    List       *join_list = NIL;
    List       *r = NIL;
 
-   foreach(r, outer_rels)
+   foreach(r, old_rels)
    {
-       RelOptInfo *outer_rel = (RelOptInfo *) lfirst(r);
+       RelOptInfo *old_rel = (RelOptInfo *) lfirst(r);
 
-       if (!(joins = make_rels_by_clause_joins(root, outer_rel,
-                                                   outer_rel->joininfo,
+       if (!(joined_rels = make_rels_by_clause_joins(root, old_rel,
+                                                   old_rel->joininfo,
                                                    NIL)))
        {
            /*
             * Oops, we have a relation that is not joined to any other
             * relation.  Cartesian product time.
             */
-           if (!BushyPlanFlag)
-               joins = make_rels_by_clauseless_joins(outer_rel,
-                                                     root->base_rel_list);
-           else
-               joins = make_rels_by_clauseless_joins(outer_rel, outer_rels);
+           joined_rels = make_rels_by_clauseless_joins(old_rel,
+                                                       root->base_rel_list);
+           if (BushyPlanFlag)
+               joined_rels = make_rels_by_clauseless_joins(old_rel,
+                                                           old_rels);
        }
 
-       join_list = nconc(join_list, joins);
+       join_list = nconc(join_list, joined_rels);
    }
 
    return join_list;
@@ -98,7 +96,7 @@ make_rels_by_joins(Query *root, List *outer_rels)
  * Returns a list of new join relations.
  */
 List *
-make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
+make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel,
                                List *joininfo_list, Relids only_relids)
 {
    List       *join_list = NIL;
@@ -107,7 +105,7 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
    foreach(i, joininfo_list)
    {
        JoinInfo   *joininfo = (JoinInfo *) lfirst(i);
-       RelOptInfo *rel;
+       RelOptInfo *joined_rel;
        Relids      unjoined_relids = joininfo->unjoined_relids;
 
        if (unjoined_relids != NIL)
@@ -117,20 +115,21 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
                /* geqo only wants certain relids to make new rels */
                 intMember(lfirsti(unjoined_relids), only_relids)))
            {
-               rel = make_join_rel(outer_rel,
-                               get_base_rel(root, lfirsti(unjoined_relids)),
+               joined_rel = make_join_rel(old_rel,
+                                   get_base_rel(root,
+                                                lfirsti(unjoined_relids)),
                                    joininfo);
-               join_list = lappend(join_list, rel);
+               join_list = lappend(join_list, joined_rel);
 
                /* Right-sided plan */
                if (_use_right_sided_plans_ &&
-                   length(outer_rel->relids) > 1)
+                   length(old_rel->relids) > 1)
                {
-                   rel = make_join_rel(
+                   joined_rel = make_join_rel(
                                get_base_rel(root, lfirsti(unjoined_relids)),
-                                       outer_rel,
-                                       joininfo);
-                   join_list = lappend(join_list, rel);
+                                           old_rel,
+                                           joininfo);
+                   join_list = lappend(join_list, joined_rel);
                }
            }
 
@@ -144,22 +143,12 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
 
                    Assert(length(join_rel->relids) > 1);
                    if (is_subset(unjoined_relids, join_rel->relids) &&
-                       nonoverlap_sets(outer_rel->relids, join_rel->relids))
+                       nonoverlap_sets(old_rel->relids, join_rel->relids))
                    {
-                       rel = make_join_rel(outer_rel,
-                                               join_rel,
-                                               joininfo);
-                       join_list = lappend(join_list, rel);
-
-                       /* Right-sided plan */
-                       if (_use_right_sided_plans_ &&
-                           length(outer_rel->relids) > 1)
-                       {
-                           rel = make_join_rel(join_rel,
-                                               outer_rel,
-                                               joininfo);
-                           join_list = lappend(join_list, rel);
-                       }                           
+                       joined_rel = make_join_rel(old_rel,
+                                                   join_rel,
+                                                   joininfo);
+                       join_list = lappend(join_list, joined_rel);
                    }
                }
            }
@@ -178,7 +167,7 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
  * Returns a list of new join relations.
  */
 List *
-make_rels_by_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels)
+make_rels_by_clauseless_joins(RelOptInfo *old_rel, List *inner_rels)
 {
    RelOptInfo *inner_rel;
    List       *t_list = NIL;
@@ -187,10 +176,10 @@ make_rels_by_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels)
    foreach(i, inner_rels)
    {
        inner_rel = (RelOptInfo *) lfirst(i);
-       if (nonoverlap_sets(inner_rel->relids, outer_rel->relids))
+       if (nonoverlap_sets(inner_rel->relids, old_rel->relids))
        {
            t_list = lappend(t_list,
-                            make_join_rel(outer_rel,
+                            make_join_rel(old_rel,
                                           inner_rel,
                                           (JoinInfo *) NULL));
        }
@@ -223,11 +212,9 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo)
     * of the outer and inner join relations and then merging the results
     * together.
     */
-   new_outer_tlist = new_join_tlist(outer_rel->targetlist, /* XXX 1-based attnos */
-                      inner_rel->relids, 1);
-   new_inner_tlist = new_join_tlist(inner_rel->targetlist, /* XXX 1-based attnos */
-                      outer_rel->relids,
-                      length(new_outer_tlist) + 1);
+   new_outer_tlist = new_join_tlist(outer_rel->targetlist, 1);
+   new_inner_tlist = new_join_tlist(inner_rel->targetlist,
+                                    length(new_outer_tlist) + 1);
 
    joinrel->relids = NIL;
    joinrel->indexed = false;
@@ -286,7 +273,6 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo)
  */
 List *
 new_join_tlist(List *tlist,
-              Relids other_relids,
               int first_resdomno)
 {
    int         resdomno = first_resdomno - 1;
index f49d018255eb98f03b54adfc58c4e411b8e36ce7..ca84268b1de24c884d18f36442e04b0ded21a7d5 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: paths.h,v 1.21 1999/02/18 00:49:47 momjian Exp $
+ * $Id: paths.h,v 1.22 1999/02/18 04:45:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -77,13 +77,13 @@ extern MergeInfo *match_order_mergeinfo(PathOrder *ordering,
  * joinrels.h
  *   routines to determine which relations to join
  */
-extern List *make_rels_by_joins(Query *root, List *outer_rels);
-extern List *make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
+extern List *make_rels_by_joins(Query *root, List *old_rels);
+extern List *make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel,
                                List *joininfo_list, Relids only_relids);
-extern List *make_rels_by_clauseless_joins(RelOptInfo *outer_rel,
+extern List *make_rels_by_clauseless_joins(RelOptInfo *old_rel,
                                                List *inner_rels);
 extern RelOptInfo *make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo);
-extern List *new_join_tlist(List *tlist, List *other_relids,int first_resdomno);
+extern List *new_join_tlist(List *tlist, int first_resdomno);
 extern RelOptInfo *get_cheapest_complete_rel(List *join_rel_list);
 
 /*