]> granicus.if.org Git - postgresql/commitdiff
Optimizer rename.
authorBruce Momjian <bruce@momjian.us>
Sun, 14 Feb 1999 04:57:02 +0000 (04:57 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 14 Feb 1999 04:57:02 +0000 (04:57 +0000)
12 files changed:
doc/src/sgml/ref/set.sgml
src/backend/optimizer/geqo/geqo_eval.c
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/joinpath.c
src/backend/optimizer/path/joinrels.c
src/backend/optimizer/path/prune.c
src/backend/optimizer/plan/initsplan.c
src/backend/optimizer/plan/planmain.c
src/include/optimizer/paths.h
src/include/optimizer/planmain.h
src/include/version.h.in
src/man/set.l

index ac3c225267ac367eb44b635c17c576f4c3547dd2..a88e767f037a687ae1c4cdab2e49fd83078b4d8a 100644 (file)
@@ -406,7 +406,7 @@ SET TIME ZONE { '<REPLACEABLE CLASS="PARAMETER">timezone</REPLACEABLE>' | LOCAL
          </para>
          <para>
                This algorithm is on by default, which used GEQO for
-               statements of six or more tables and indexes.
+               statements of six or more tables.
                (See the chapter on GEQO in the Programmer's Guide
                for more information).
          </para>
@@ -677,7 +677,7 @@ SET TIME ZONE { '<REPLACEABLE CLASS="PARAMETER">timezone</REPLACEABLE>' | LOCAL
          SET DATESTYLE TO 'ISO';
        </programlisting>
        <programlisting> 
-         --Enable GEQO for queries with 4 or more tables and indexes
+         --Enable GEQO for queries with 4 or more tables
          --
          SET GEQO ON=4;
        </programlisting>
index 925dbe93faf88a6e18f2f193421961ee9d8ab3d1..71d7f0f399cb59cb4d5e14af7e47e48b3998cb78 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geqo_eval.c,v 1.29 1999/02/13 23:16:07 momjian Exp $
+ * $Id: geqo_eval.c,v 1.30 1999/02/14 04:56:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -135,7 +135,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *out
                        }
 
                        /* process new_rel->pathlist */
-                       find_all_join_paths(root, new_rels);
+                       update_rels_pathlist_for_joins(root, new_rels);
 
                        /* prune new_rels */
                        /* MAU: is this necessary? */
index 892ed5b3412866a8801b076ce7f03ab6269a5517..d4c88fc694d229844146029adfbc02482d4f65b7 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.31 1999/02/13 23:16:14 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.32 1999/02/14 04:56:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -43,7 +43,7 @@ bool          _use_geqo_ = false;
 int32          _use_geqo_rels_ = GEQO_RELS;
 
 
-static void find_rel_paths(Query *root, List *rels);
+static void find_base_rel_paths(Query *root, List *rels);
 static List *find_join_paths(Query *root, List *outer_rels, int levels_needed);
 
 #ifdef OPTIMIZER_DEBUG
@@ -71,10 +71,7 @@ find_paths(Query *root, List *rels)
        if (levels_needed <= 0)
                return NIL;
 
-       /*
-        * Find the base relation paths.
-        */
-       find_rel_paths(root, rels);
+       find_base_rel_paths(root, rels);
 
        if (levels_needed <= 1)
        {
@@ -96,7 +93,7 @@ find_paths(Query *root, List *rels)
 }
 
 /*
- * find_rel_paths
+ * find_base_rel_paths
  *       Finds all paths available for scanning each relation entry in
  *       'rels'.  Sequential scan and any available indices are considered
  *       if possible(indices are not considered for lower nesting levels).
@@ -105,7 +102,7 @@ find_paths(Query *root, List *rels)
  *       MODIFIES: rels
  */
 static void
-find_rel_paths(Query *root, List *rels)
+find_base_rel_paths(Query *root, List *rels)
 {
        List       *temp;
 
@@ -154,7 +151,7 @@ find_rel_paths(Query *root, List *rels)
  *       finding ways to join relations(both original and derived) together.
  *
  * 'outer_rels' is the current list of relations for which join paths
- *                             are to be found, i.e., he current list of relations that
+ *                             are to be found, i.e., the current list of relations that
  *                             have already been derived.
  * 'levels_needed' is the number of iterations needed
  *
@@ -172,20 +169,8 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
         * genetic query optimizer entry point     *
         *        <utesch@aut.tu-freiberg.de>              *
         *******************************************/
-       {
-               List       *temp;
-               int                     paths_to_consider = 0;
-
-               foreach(temp, outer_rels)
-               {
-                       RelOptInfo *rel = (RelOptInfo *) lfirst(temp);
-                       paths_to_consider += length(rel->pathlist);
-               }
-
-               if ((_use_geqo_) && paths_to_consider >= _use_geqo_rels_)
-                       /* returns _one_ RelOptInfo, so lcons it */
-                       return lcons(geqo(root), NIL);  
-       }
+       if ((_use_geqo_) && length(root->base_relation_list_) >= _use_geqo_rels_)
+               return lcons(geqo(root), NIL);  /* returns *one* Rel, so lcons it */
        
        /*******************************************
         * rest will be deprecated in case of GEQO *
@@ -199,11 +184,11 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
                 * modify 'new_rels' accordingly, then eliminate redundant join
                 * relations.
                 */
-               new_rels = find_join_rels(root, outer_rels);
+               new_rels = make_new_rels_by_joins(root, outer_rels);
 
-               find_all_join_paths(root, new_rels);
+               update_rels_pathlist_for_joins(root, new_rels);
 
-               prune_joinrels(new_rels);
+               merge_rels_with_same_relids(new_rels);
 
 #if 0
                /*
@@ -232,11 +217,11 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
                foreach(x, new_rels)
                {
                        rel = (RelOptInfo *) lfirst(x);
+
                        if (rel->size <= 0)
                                rel->size = compute_rel_size(rel);
                        rel->width = compute_rel_width(rel);
 
-                       /* #define OPTIMIZER_DEBUG */
 #ifdef OPTIMIZER_DEBUG
                        printf("levels left: %d\n", levels_needed);
                        debug_print_rel(root, rel);
@@ -259,6 +244,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
                }
                else
                        root->join_rel_list = new_rels;
+
                if (!BushyPlanFlag)
                        outer_rels = new_rels;
        }
index aa197671a582a06628700434c7a2b3b7dcf901ba..e5d190179095062fd6e1866c817def15fa991eec 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.23 1999/02/13 23:16:18 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.24 1999/02/14 04:56:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,7 +42,7 @@ static List *hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, Rel
                                         List *hashinfo_list);
 
 /*
- * find_all_join_paths
+ * update_rels_pathlist_for_joins
  *       Creates all possible ways to process joins for each of the join
  *       relations in the list 'joinrels.'  Each unique path will be included
  *       in the join relation's 'pathlist' field.
@@ -62,16 +62,17 @@ static List *hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, Rel
  * It does a destructive modification.
  */
 void
-find_all_join_paths(Query *root, List *joinrels)
+update_rels_pathlist_for_joins(Query *root, List *joinrels)
 {
        List       *mergeinfo_list = NIL;
        List       *hashinfo_list = NIL;
        List       *temp_list = NIL;
        List       *path = NIL;
+       List       *j;
 
-       while (joinrels != NIL)
+       foreach(j, joinrels)
        {
-               RelOptInfo *joinrel = (RelOptInfo *) lfirst(joinrels);
+               RelOptInfo *joinrel = (RelOptInfo *) lfirst(j);
                List       *innerrelids;
                List       *outerrelids;
                RelOptInfo *innerrel;
@@ -174,8 +175,6 @@ find_all_join_paths(Query *root, List *joinrels)
                         * since the base level
                         */
                }
-
-               joinrels = lnext(joinrels);
        }
 }
 
index e9dc2dcbb1c2043128e64ab1a3019d27ab61f353..4e0307c874929411d7aca240e2b7813d6a532c57 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.20 1999/02/13 23:16:18 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.21 1999/02/14 04:56:47 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,7 +44,7 @@ static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptI
                                 JoinInfo * jinfo);
 
 /*
- * find_join_rels
+ * make_new_rels_by_joins
  *       Find all possible joins for each of the outer join relations in
  *       'outer_rels'.  A rel node is created for each possible join relation,
  *       and the resulting list of nodes is returned.  If at all possible, only
@@ -57,7 +57,7 @@ static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptI
  * Returns a list of rel nodes corresponding to the new join relations.
  */
 List *
-find_join_rels(Query *root, List *outer_rels)
+make_new_rels_by_joins(Query *root, List *outer_rels)
 {
        List       *joins = NIL;
        List       *join_list = NIL;
@@ -69,6 +69,10 @@ find_join_rels(Query *root, List *outer_rels)
 
                if (!(joins = find_clause_joins(root, outer_rel, outer_rel->joininfo)))
                {
+                       /*
+                        * Oops, we have a relation that is not joined to any other
+                        * relation.  Cartesian product time.
+                        */
                        if (BushyPlanFlag)
                                joins = find_clauseless_joins(outer_rel, outer_rels);
                        else
@@ -124,7 +128,8 @@ find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list)
                                        {
                                                if (rel != NULL)
                                                        join_list = lappend(join_list, rel);
-                                               rel = init_join_rel(get_base_rel(root, lfirsti(other_rels)),
+                                               rel = init_join_rel(get_base_rel(root,
+                                                                                                                lfirsti(other_rels)),
                                                                                        outer_rel,
                                                                                        joininfo);
                                        }
index ce6b22d98e6a4fd513ac65b2da7193dd9bc19fac..828b8cce80f2f8d18cba37e13c6c896756319d8b 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.31 1999/02/13 23:16:23 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.32 1999/02/14 04:56:47 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "utils/elog.h"
 
 
-static List *prune_joinrel(RelOptInfo *rel, List *other_rels);
+static List *merge_rel_with_same_relids(RelOptInfo *rel, List *other_rels);
 
 /*
- * prune_joinrels
+ * merge_rels_with_same_relids
  *       Removes any redundant relation entries from a list of rel nodes
  *       'rel_list'.  Obviously, the first relation can't be a duplicate.
  *
@@ -35,7 +35,7 @@ static List *prune_joinrel(RelOptInfo *rel, List *other_rels);
  *
  */
 void
-prune_joinrels(List *rel_list)
+merge_rels_with_same_relids(List *rel_list)
 {
        List       *i;
 
@@ -44,11 +44,11 @@ prune_joinrels(List *rel_list)
         * deleted
         */
        foreach(i, rel_list)
-               lnext(i) = prune_joinrel((RelOptInfo *) lfirst(i), lnext(i));
+               lnext(i) = merge_rel_with_same_relids((RelOptInfo *) lfirst(i), lnext(i));
 }
 
 /*
- * prune_joinrel
+ * merge_rel_with_same_relids
  *       Prunes those relations from 'other_rels' that are redundant with
  *       'rel'.  A relation is redundant if it is built up of the same
  *       relations as 'rel'.  Paths for the redundant relation are merged into
@@ -59,7 +59,7 @@ prune_joinrels(List *rel_list)
  *
  */
 static List *
-prune_joinrel(RelOptInfo *rel, List *other_rels)
+merge_rel_with_same_relids(RelOptInfo *rel, List *other_rels)
 {
        List       *i = NIL;
        List       *result = NIL;
@@ -126,7 +126,7 @@ merge_joinrels(List *rel_list1, List *rel_list2)
        {
                RelOptInfo *rel = (RelOptInfo *) lfirst(xrel);
 
-               rel_list2 = prune_joinrel(rel, rel_list2);
+               rel_list2 = merge_rel_with_same_relids(rel, rel_list2);
        }
        return append(rel_list1, rel_list2);
 }
index 40ab228721de2ea2166be96ffb104db22516f085..a1762ad8dfee10a9a845fe8fcbd7ccc61a68b571 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.23 1999/02/13 23:16:29 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.24 1999/02/14 04:56:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -303,16 +303,16 @@ add_vars_to_targetlist(Query *root, List *vars, List *join_relids)
  *****************************************************************************/
 
 /*
- * init_join_info
+ * set_joininfo_mergeable_hashable
  *       Set the MergeJoinable or HashJoinable field for every joininfo node
- *       (within a rel node) and the MergeJoinOrder or HashJoinOp field for
+ *       (within a rel node) and the mergejoinorder or hashjoinop field for
  *       each restrictinfo node(within a joininfo node) for all relations in a
  *       query.
  *
  *       Returns nothing.
  */
 void
-init_join_info(List *rel_list)
+set_joininfo_mergeable_hashable(List *rel_list)
 {
        List       *x,
                           *y,
index 8e56f228c565d821cbaad99fc9c9ff5be1e3abc8..ff84df67edabad6901f51d9ad7100e2a0f10d2e1 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.31 1999/02/13 23:16:30 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.32 1999/02/14 04:56:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -157,7 +157,7 @@ query_planner(Query *root,
                                        else
                                                return (Plan *) scan;
                                }
-                               break;
+                               break;
                        default:
                                return (Plan *) NULL;
                }
@@ -257,12 +257,7 @@ subplanner(Query *root,
        add_restrict_and_join_to_rels(root, qual);
        add_missing_vars_to_tlist(root, flat_tlist);
 
-       /*
-        * Find all possible scan and join paths. Mark all the clauses and
-        * relations that can be processed using special join methods, then do
-        * the exhaustive path search.
-        */
-       init_join_info(root->base_rel_list);
+       set_joininfo_mergeable_hashable(root->base_rel_list);
 
        final_rel_list = find_paths(root, root->base_rel_list);
 
index 5938e0e849ee9fa356b6b0d60bea4692a183ada8..99a1cad98048a5abd1a8184ba060494ff0158acc 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: paths.h,v 1.15 1999/02/13 23:21:50 momjian Exp $
+ * $Id: paths.h,v 1.16 1999/02/14 04:56:55 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -35,7 +35,7 @@ extern List *find_index_paths(Query *root, RelOptInfo *rel, List *indices,
  * joinpath.h
  *        routines to create join paths
  */
-extern void find_all_join_paths(Query *root, List *joinrels);
+extern void update_rels_pathlist_for_joins(Query *root, List *joinrels);
 
 
 /*
@@ -77,14 +77,14 @@ extern MergeInfo *match_order_mergeinfo(PathOrder *ordering,
  * joinrels.h
  *       routines to determine which relations to join
  */
-extern List *find_join_rels(Query *root, List *outer_rels);
+extern List *make_new_rels_by_joins(Query *root, List *outer_rels);
 extern void add_new_joininfos(Query *root, List *joinrels, List *outerrels);
 extern List *final_join_rels(List *join_rel_list);
 
 /*
  * prototypes for path/prune.c
  */
-extern void prune_joinrels(List *rel_list);
+extern void merge_rels_with_same_relids(List *rel_list);
 extern void rels_set_cheapest(List *rel_list);
 extern List *merge_joinrels(List *rel_list1, List *rel_list2);
 extern List *prune_oldrels(List *old_rels);
index 8c10eddc55353524523f185d98d7e350e1f1c2e9..42e22e150f30cb6dcb6b6289f7e62e8f183c6a24 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: planmain.h,v 1.21 1999/02/13 23:21:50 momjian Exp $
+ * $Id: planmain.h,v 1.22 1999/02/14 04:56:58 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -43,7 +43,7 @@ extern Unique *make_unique(List *tlist, Plan *lefttree, char *uniqueAttr);
  */
 extern void make_var_only_tlist(Query *root, List *tlist);
 extern void add_restrict_and_join_to_rels(Query *root, List *clauses);
-extern void init_join_info(List *rel_list);
+extern void set_joininfo_mergeable_hashable(List *rel_list);
 extern void add_missing_vars_to_tlist(Query *root, List *tlist);
 
 /*
index 964fa70a92aec1570340b3693dff98740e5262f5..0544b8819a614086a1d6a41b71fc08a18ff9d663 100644 (file)
@@ -1,10 +1,10 @@
-/*-------------------------------------------------------------------------
+/*------------------------------------------------------------------------- 
  *
- * version.h.in--
+ * version.h.in
  *       this file contains the interface to version.c.
  *       Also some parameters.
  *
- * $Header: /cvsroot/pgsql/src/include/Attic/version.h.in,v 1.4 1998/12/25 02:20:11 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/include/Attic/version.h.in,v 1.5 1999/02/14 04:56:54 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
index d3e5f53bf32f26b1c5293b2915e76b5bbb4029b8..d47e571ac3766062e78132920a3195017dcb1323 100644 (file)
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.13 1999/02/02 20:30:18 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.14 1999/02/14 04:57:02 momjian Exp $
 .TH SET SQL 05/14/97 PostgreSQL PostgreSQL
 .SH NAME
 set - set run-time parameters for session
@@ -44,7 +44,7 @@ determines the output format for the date and time data types.
 .IR GEQO
 enables or disables the genetic optimizer algorithm. This algorithm is
 .IR on
-by default, which used GEQO for statements of six or more tables and indexes.
+by default, which used GEQO for statements of six or more tables.
 Set the
 .IR Programmer's Guide
 for more information.
@@ -101,7 +101,7 @@ set DateStyle to 'SQL,European'
 .PP
 .nf
 --
---Use GEQO for statements with 4 or more tables and indexes
+--Use GEQO for statements with 4 or more tables
 --
 set GEQO to 'on=4'
 --