diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README index 98639181d4..8e9684c6d9 100644 --- a/src/backend/optimizer/README +++ b/src/backend/optimizer/README @@ -9,13 +9,36 @@ planner() preprocess target list preprocess qualifications(WHERE) --query_planner() - cnfify qualification, so qual are expressions (were AND's) and OR clauses + cnfify() + Summary: + + Simple cases with all AND's are handled by removing the AND's: + + convert: a = 1 AND b = 2 AND c = 3 + to: a = 1, b = 2, c = 3 + + Qualifications with OR's are handled differently. OR's inside AND + clauses are not modified drastically: + + convert: a = 1 AND b = 2 AND (c = 3 OR d = 4) + to: a = 1, b = 2, c = 3 OR d = 4 + + OR's in the upper level are more complex to handle: + + convert: (a = 1 AND b = 2) OR c = 3 + to: (a = 1 OR c = 3) AND (b = 2 OR c = 3) + finally: (a = 1 OR c = 3), (b = 2 OR c = 3) + + These clauses all have to be true for a result to be returned, + so the optimizer can choose the most restrictive clauses. + pull out constants from target list get a target list that only contains column names, no expressions if none, then return ---subplanner() make list of relations in target make list of relations in where clause + split up the qual into restrictions (a=1) and joins (b=c) find which relations can do merge sort and hash joins ----find_paths() find scan and all index paths for each relation not yet joined diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c index 2fa3c38302..5f66f9ee9b 100644 --- a/src/backend/optimizer/geqo/geqo_eval.c +++ b/src/backend/optimizer/geqo/geqo_eval.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_eval.c,v 1.21 1998/08/04 16:44:02 momjian Exp $ + * $Id: geqo_eval.c,v 1.22 1998/08/10 02:26:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -71,9 +71,9 @@ geqo_eval(Query *root, Gene *tour, int num_gene) List *temp; -/* remember root->join_relation_list_ ... */ -/* because root->join_relation_list_ will be changed during the following */ - temp = listCopy(root->join_relation_list_); +/* remember root->join_rel_list ... */ +/* because root->join_rel_list will be changed during the following */ + temp = listCopy(root->join_rel_list); /* joinrel is readily processed query tree -- left-sided ! */ joinrel = gimme_tree(root, tour, 0, num_gene, NULL); @@ -81,7 +81,7 @@ geqo_eval(Query *root, Gene *tour, int num_gene) /* compute fitness */ fitness = (Cost) joinrel->cheapestpath->path_cost; - root->join_relation_list_ = listCopy(temp); + root->join_rel_list = listCopy(temp); pfree(joinrel); freeList(temp); @@ -113,7 +113,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *out /* tour[0] = 3; tour[1] = 1; tour[2] = 2 */ base_rel_index = (int) tour[rel_count]; - inner_rel = (RelOptInfo *) geqo_nth(base_rel_index, root->base_relation_list_); + inner_rel = (RelOptInfo *) geqo_nth(base_rel_index, root->base_rel_list); if (rel_count == 0) { /* processing first join with @@ -169,7 +169,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *out new_rel->size = compute_rel_size(new_rel); new_rel->width = compute_rel_width(new_rel); - root->join_relation_list_ = lcons(new_rel, NIL); + root->join_rel_list = lcons(new_rel, NIL); return gimme_tree(root, tour, rel_count, num_gene, new_rel); } @@ -482,7 +482,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) */ /* - * if ( (root->join_relation_list_) != NIL ) { rel = + * if ( (root->join_rel_list) != NIL ) { rel = * get_join_rel(root, xrelid); } else { rel = * get_base_rel(root, lfirsti(xrelid)); } */ @@ -495,7 +495,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) */ relids = lconsi(lfirsti(xrelid), NIL); - rel = rel_member(relids, root->base_relation_list_); + rel = rel_member(relids, root->base_rel_list); add_superrels(rel, joinrel); } @@ -521,7 +521,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) */ /* - * if ( (root->join_relation_list_) != NIL ) { rel = + * if ( (root->join_rel_list) != NIL ) { rel = * get_join_rel(root, xrelid); } else { rel = * get_base_rel(root, lfirsti(xrelid)); } */ @@ -534,7 +534,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) */ relids = lconsi(lfirsti(xrelid), NIL); - rel = rel_member(relids, root->base_relation_list_); + rel = rel_member(relids, root->base_rel_list); super_rels = rel->superrels; new_joininfo = makeNode(JInfo); diff --git a/src/backend/optimizer/geqo/geqo_main.c b/src/backend/optimizer/geqo/geqo_main.c index 37f6ab1533..fcb81b857b 100644 --- a/src/backend/optimizer/geqo/geqo_main.c +++ b/src/backend/optimizer/geqo/geqo_main.c @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_main.c,v 1.8 1998/07/18 04:22:27 momjian Exp $ + * $Id: geqo_main.c,v 1.9 1998/08/10 02:26:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -104,7 +104,7 @@ geqo(Query *root) /* set tour size */ - number_of_rels = length(root->base_relation_list_); + number_of_rels = length(root->base_rel_list); /* set GA parameters */ geqo_params(number_of_rels);/* out of "$PGDATA/pg_geqo" file */ diff --git a/src/backend/optimizer/geqo/minspantree.c b/src/backend/optimizer/geqo/minspantree.c index 6df11b75dd..c4e1b53ad0 100644 --- a/src/backend/optimizer/geqo/minspantree.c +++ b/src/backend/optimizer/geqo/minspantree.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION -* $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.6 1998/07/18 04:22:29 momjian Exp $ +* $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.7 1998/08/10 02:26:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -43,7 +43,7 @@ void minspantree(Query *root, List *join_rels, RelOptInfo *garel) { - int number_of_rels = length(root->base_relation_list_); + int number_of_rels = length(root->base_rel_list); int number_of_joins = length(join_rels); int *connectto; diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 28515fba93..9e71ef402d 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.19 1998/08/07 05:02:15 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.20 1998/08/10 02:26:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,7 +45,9 @@ int32 _use_geqo_rels_ = GEQO_RELS; static void find_rel_paths(Query *root, List *rels); static List *find_join_paths(Query *root, List *outer_rels, int levels_needed); +#ifdef OPTIMIZER_DEBUG static void debug_print_rel(Query *root, RelOptInfo *rel); +#endif /* * find-paths-- @@ -74,7 +76,6 @@ find_paths(Query *root, List *rels) if (levels_needed <= 1) { - /* * Unsorted single relation, no more processing is required. */ @@ -82,7 +83,6 @@ find_paths(Query *root, List *rels) } else { - /* * this means that joins or sorts are required. set selectivities * of clauses that have not been set by an index. @@ -115,8 +115,7 @@ find_rel_paths(Query *root, List *rels) List *or_index_scan_list; RelOptInfo *rel = (RelOptInfo *) lfirst(temp); - sequential_scan_list = lcons(create_seqscan_path(rel), - NIL); + sequential_scan_list = lcons(create_seqscan_path(rel), NIL); rel_index_scan_list = find_index_paths(root, @@ -181,7 +180,7 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed) * * *******************************************/ - if ((_use_geqo_) && length(root->base_relation_list_) >= _use_geqo_rels_) + if ((_use_geqo_) && length(root->base_rel_list) >= _use_geqo_rels_) return lcons(geqo(root), NIL); /* returns *one* RelOptInfo, so lcons it */ /******************************************* @@ -255,10 +254,10 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed) * merge join rels if then contain the same list of base rels */ outer_rels = merge_joinrels(new_rels, outer_rels); - root->join_relation_list_ = outer_rels; + root->join_rel_list = outer_rels; } else - root->join_relation_list_ = new_rels; + root->join_rel_list = new_rels; if (!BushyPlanFlag) outer_rels = new_rels; } diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 2e15b6597c..e7a2e3c1a2 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.25 1998/08/04 16:44:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.26 1998/08/10 02:26:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -662,7 +662,7 @@ match_clause_to_indexkey(RelOptInfo *rel, join_op = ((Oper *) ((Expr *) clause)->oper)->opno; if (join_op && op_class(join_op, xclass, index->relam) && - join_clause_p((Node *) clause)) + is_joinable((Node *) clause)) { isIndexable = true; @@ -1153,7 +1153,7 @@ extract_restrict_clauses(List *clausegroup) { CInfo *cinfo = lfirst(l); - if (!join_clause_p((Node *) cinfo->clause)) + if (!is_joinable((Node *) cinfo->clause)) restrict_cls = lappend(restrict_cls, cinfo); } return restrict_cls; @@ -1282,7 +1282,7 @@ create_index_paths(Query *root, foreach(j, clausegroup) { clauseinfo = (CInfo *) lfirst(j); - if (!(join_clause_p((Node *) clauseinfo->clause) && + if (!(is_joinable((Node *) clauseinfo->clause) && equal_path_merge_ordering(index->ordering, clauseinfo->mergejoinorder))) temp = false; diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index c30d93f4f2..3f18303d97 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.12 1998/08/04 16:44:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.13 1998/08/10 02:26:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -74,7 +74,7 @@ find_join_rels(Query *root, List *outer_rels) if (BushyPlanFlag) joins = find_clauseless_joins(outer_rel, outer_rels); else - joins = find_clauseless_joins(outer_rel, root->base_relation_list_); + joins = find_clauseless_joins(outer_rel, root->base_rel_list); } join_list = nconc(join_list, joins); diff --git a/src/backend/optimizer/path/xfunc.c b/src/backend/optimizer/path/xfunc.c index bb3e50976d..ecde942e9c 100644 --- a/src/backend/optimizer/path/xfunc.c +++ b/src/backend/optimizer/path/xfunc.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.17 1998/08/04 16:44:11 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.18 1998/08/10 02:26:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -734,7 +734,7 @@ xfunc_card_unreferenced(Query *queryInfo, LispValue temp; /* find all relids of base relations referenced in query */ - foreach(temp, queryInfo->base_relation_list_) + foreach(temp, queryInfo->base_rel_list) { Assert(lnext(get_relids((RelOptInfo) lfirst(temp))) == LispNil); allrelids = lappend(allrelids, diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 7aacff64b1..feb9bff127 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.17 1998/08/09 04:59:03 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.18 1998/08/10 02:26:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -21,6 +21,10 @@ #include "nodes/relation.h" #include "nodes/makefuncs.h" +#include "access/htup.h" + +#include "catalog/pg_type.h" + #include "utils/lsyscache.h" #include "utils/palloc.h" @@ -36,9 +40,9 @@ extern int Quiet; static void add_clause_to_rels(Query *root, List *clause); -static void add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, +static void add_join_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids); -static void add_vars_to_rels(Query *root, List *vars, List *join_relids); +static void add_vars_to_targetlist(Query *root, List *vars, List *join_relids); static MergeOrder *mergejoinop(Expr *clause); static Oid hashjoinop(Expr *clause); @@ -51,7 +55,7 @@ static Oid hashjoinop(Expr *clause); *****************************************************************************/ /* - * initialize_rel_nodes-- + * init-base-rel-tlist-- * Creates rel nodes for every relation mentioned in the target list * 'tlist' (if a node hasn't already been created) and adds them to * *query-relation-list*. Creates targetlist entries for each member of @@ -60,7 +64,7 @@ static Oid hashjoinop(Expr *clause); * Returns nothing. */ void -initialize_base_rels_list(Query *root, List *tlist) +init_base_rels_tlist(Query *root, List *tlist) { List *tlist_vars = NIL; List *l = NIL; @@ -78,7 +82,7 @@ initialize_base_rels_list(Query *root, List *tlist) { Var *var; Index varno; - RelOptInfo *result; + RelOptInfo *result; var = (Var *) lfirst(tvar); varno = var->varno; @@ -89,7 +93,7 @@ initialize_base_rels_list(Query *root, List *tlist) } /* - * add_missing_variables_to_base_rels - + * add_missing-vars-to-tlist-- * If we have range variable(s) in the FROM clause that does not appear * in the target list nor qualifications, we add it to the base relation * list. For instance, "select f.x from foo f, foo f2" is a join of f and @@ -97,7 +101,7 @@ initialize_base_rels_list(Query *root, List *tlist) * into a join. */ void -add_missing_vars_to_base_rels(Query *root, List *tlist) +add_missing_vars_to_tlist(Query *root, List *tlist) { List *l; int varno; @@ -107,16 +111,15 @@ add_missing_vars_to_base_rels(Query *root, List *tlist) { RangeTblEntry *rte = (RangeTblEntry *) lfirst(l); List *relids; - RelOptInfo *result; + RelOptInfo *result; Var *var; relids = lconsi(varno, NIL); - if (rte->inFromCl && - !rel_member(relids, root->base_relation_list_)) + if (rte->inFromCl && !rel_member(relids, root->base_rel_list)) { - - var = makeVar(varno, -2, 26, -1, 0, varno, -2); - /* add it to base_relation_list_ */ + var = makeVar(varno, ObjectIdAttributeNumber, + OIDOID, -1, 0, varno, ObjectIdAttributeNumber); + /* add it to base_rel_list */ result = get_base_rel(root, varno); add_tl_element(result, var); } @@ -136,7 +139,7 @@ add_missing_vars_to_base_rels(Query *root, List *tlist) /* - * initialize-qualification-- + * init-base-rels-qual-- * Initializes ClauseInfo and JoinInfo fields of relation entries for all * relations appearing within clauses. Creates new relation entries if * necessary, adding them to *query-relation-list*. @@ -144,7 +147,7 @@ add_missing_vars_to_base_rels(Query *root, List *tlist) * Returns nothing of interest. */ void -initialize_base_rels_jinfo(Query *root, List *clauses) +init_base_rels_qual(Query *root, List *clauses) { List *clause; @@ -174,7 +177,6 @@ add_clause_to_rels(Query *root, List *clause) */ clause_get_relids_vars((Node *) clause, &relids, &vars); - clauseinfo->clause = (Expr *) clause; clauseinfo->notclause = contains_not((Node *) clause); clauseinfo->selectivity = 0; @@ -184,7 +186,7 @@ add_clause_to_rels(Query *root, List *clause) if (length(relids) == 1) { - RelOptInfo *rel = get_base_rel(root, lfirsti(relids)); + RelOptInfo *rel = get_base_rel(root, lfirsti(relids)); /* * There is only one relation participating in 'clause', so @@ -197,7 +199,6 @@ add_clause_to_rels(Query *root, List *clause) */ if (is_funcclause((Node *) clause)) { - /* * XXX If we have a func clause set selectivity to 1/3, really * need a true selectivity function. @@ -209,8 +210,7 @@ add_clause_to_rels(Query *root, List *clause) clauseinfo->selectivity = compute_clause_selec(root, (Node *) clause, NIL); } - rel->clauseinfo = lcons(clauseinfo, - rel->clauseinfo); + rel->clauseinfo = lcons(clauseinfo, rel->clauseinfo); } else { @@ -222,7 +222,6 @@ add_clause_to_rels(Query *root, List *clause) if (is_funcclause((Node *) clause)) { - /* * XXX If we have a func clause set selectivity to 1/3, really * need a true selectivity function. @@ -232,16 +231,16 @@ add_clause_to_rels(Query *root, List *clause) else { clauseinfo->selectivity = - compute_clause_selec(root, (Node *) clause, - NIL); + compute_clause_selec(root, (Node *) clause, NIL); } - add_join_clause_info_to_rels(root, clauseinfo, relids); - add_vars_to_rels(root, vars, relids); + add_join_info_to_rels(root, clauseinfo, relids); + /* we are going to be doing a join, so add var to targetlist */ + add_vars_to_targetlist(root, vars, relids); } } /* - * add-join-clause-info-to-rels-- + * add-join-info-to-rels-- * For every relation participating in a join clause, add 'clauseinfo' to * the appropriate joininfo node(creating a new one and adding it to the * appropriate rel node if necessary). @@ -253,7 +252,7 @@ add_clause_to_rels(Query *root, List *clause) * */ static void -add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids) +add_join_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids) { List *join_relid; @@ -269,8 +268,7 @@ add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids) other_rels = lappendi(other_rels, lfirsti(rel)); } - joininfo = - find_joininfo_node(get_base_rel(root, lfirsti(join_relid)), + joininfo = find_joininfo_node(get_base_rel(root, lfirsti(join_relid)), other_rels); joininfo->jinfoclauseinfo = lcons(copyObject((void *) clauseinfo), joininfo->jinfoclauseinfo); @@ -279,7 +277,7 @@ add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids) } /* - * add-vars-to-rels-- + * add-vars-to-targetlist-- * For each variable appearing in a clause, * (1) If a targetlist entry for the variable is not already present in * the appropriate relation's target list, add one. @@ -294,11 +292,11 @@ add_join_clause_info_to_rels(Query *root, CInfo *clauseinfo, List *join_relids) * Returns nothing. */ static void -add_vars_to_rels(Query *root, List *vars, List *join_relids) +add_vars_to_targetlist(Query *root, List *vars, List *join_relids) { Var *var; List *temp = NIL; - RelOptInfo *rel = (RelOptInfo *) NULL; + RelOptInfo *rel = (RelOptInfo *) NULL; TargetEntry *tlistentry; foreach(temp, vars) @@ -319,7 +317,7 @@ add_vars_to_rels(Query *root, List *vars, List *join_relids) *****************************************************************************/ /* - * initialize-join-clause-info-- + * init-join-info-- * Set the MergeJoinable or HashJoinable field for every joininfo node * (within a rel node) and the MergeJoinOrder or HashJoinOp field for * each clauseinfo node(within a joininfo node) for all relations in a @@ -328,12 +326,12 @@ add_vars_to_rels(Query *root, List *vars, List *join_relids) * Returns nothing. */ void -initialize_join_clause_info(List *rel_list) +init_join_info(List *rel_list) { List *x, *y, *z; - RelOptInfo *rel; + RelOptInfo *rel; JInfo *joininfo; CInfo *clauseinfo; Expr *clause; @@ -348,7 +346,7 @@ initialize_join_clause_info(List *rel_list) { clauseinfo = (CInfo *) lfirst(z); clause = clauseinfo->clause; - if (join_clause_p((Node *) clause)) + if (is_joinable((Node *) clause)) { MergeOrder *sortop = (MergeOrder *) NULL; Oid hashop = (Oid) NULL; diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index 1d4340e08d..91946cc509 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.24 1998/08/07 05:02:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.25 1998/08/10 02:26:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -255,33 +255,33 @@ subplanner(Query *root, List *flat_tlist, List *qual) { - RelOptInfo *final_relation; - List *final_relation_list; + RelOptInfo *final_rel; + List *final_rel_list; /* * Initialize the targetlist and qualification, adding entries to - * *query-relation-list* as relation references are found (e.g., in + * base_rel_list as relation references are found (e.g., in * the qualification, the targetlist, etc.) */ - root->base_relation_list_ = NIL; - root->join_relation_list_ = NIL; - initialize_base_rels_list(root, flat_tlist); - initialize_base_rels_jinfo(root, qual); - add_missing_vars_to_base_rels(root, flat_tlist); + root->base_rel_list = NIL; + root->join_rel_list = NIL; + + init_base_rels_tlist(root, flat_tlist); + init_base_rels_qual(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. */ - initialize_join_clause_info(root->base_relation_list_); - final_relation_list = find_paths(root, - root->base_relation_list_); + init_join_info(root->base_rel_list); + final_rel_list = find_paths(root, root->base_rel_list); - if (final_relation_list) - final_relation = (RelOptInfo *) lfirst(final_relation_list); + if (final_rel_list) + final_rel = (RelOptInfo *) lfirst(final_rel_list); else - final_relation = (RelOptInfo *) NIL; + final_rel = (RelOptInfo *) NIL; #if 0 /* fix xfunc */ @@ -294,14 +294,14 @@ subplanner(Query *root, * expensive functions left to pull up. -- JMH, 11/22/92 */ if (XfuncMode != XFUNC_OFF && XfuncMode != XFUNC_NOPM && - XfuncMode != XFUNC_NOPULL && !final_relation->pruneable) + XfuncMode != XFUNC_NOPULL && !final_rel->pruneable) { List *pathnode; - foreach(pathnode, final_relation->pathlist) + foreach(pathnode, final_rel->pathlist) { if (xfunc_do_predmig((Path *) lfirst(pathnode))) - set_cheapest(final_relation, final_relation->pathlist); + set_cheapest(final_rel, final_rel->pathlist); } } #endif @@ -310,8 +310,8 @@ subplanner(Query *root, * Determine the cheapest path and create a subplan corresponding to * it. */ - if (final_relation) - return (create_plan((Path *) final_relation->cheapestpath)); + if (final_rel) + return (create_plan((Path *) final_rel->cheapestpath)); else { elog(NOTICE, "final relation is nil"); diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 1a304e316e..653dad7f2a 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.19 1998/08/09 04:59:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.20 1998/08/10 02:26:29 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -439,13 +439,13 @@ contains_not(Node *clause) } /* - * join-clause-p-- + * is_joinable-- * * Returns t iff 'clause' is a valid join clause. * */ bool -join_clause_p(Node *clause) +is_joinable(Node *clause) { Node *leftop, *rightop; @@ -460,7 +460,7 @@ join_clause_p(Node *clause) * One side of the clause (i.e. left or right operands) must either be * a var node ... */ - if (IsA(leftop, Var) ||IsA(rightop, Var)) + if (IsA(leftop, Var) || IsA(rightop, Var)) return true; /* diff --git a/src/backend/optimizer/util/joininfo.c b/src/backend/optimizer/util/joininfo.c index 2aec33231d..fb3ac0ba30 100644 --- a/src/backend/optimizer/util/joininfo.c +++ b/src/backend/optimizer/util/joininfo.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.9 1998/08/04 16:44:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.10 1998/08/10 02:26:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -97,7 +97,7 @@ other_join_clause_var(Var *var, Expr *clause) retval = (Var *) NULL; - if (var != NULL && join_clause_p((Node *) clause)) + if (var != NULL && is_joinable((Node *) clause)) { l = (Var *) get_leftop(clause); r = (Var *) get_rightop(clause); diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index 87f0aef8d4..756ca8570e 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.6 1998/07/18 04:22:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.7 1998/08/10 02:26:32 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -34,7 +34,7 @@ get_base_rel(Query *root, int relid) RelOptInfo *rel; relids = lconsi(relid, NIL); - rel = rel_member(relids, root->base_relation_list_); + rel = rel_member(relids, root->base_rel_list); if (rel == NULL) { rel = makeNode(RelOptInfo); @@ -56,8 +56,7 @@ get_base_rel(Query *root, int relid) rel->innerjoin = NIL; rel->superrels = NIL; - root->base_relation_list_ = lcons(rel, - root->base_relation_list_); + root->base_rel_list = lcons(rel, root->base_rel_list); /* * ??? the old lispy C code (get_rel) do a listp(relid) here but @@ -66,7 +65,6 @@ get_base_rel(Query *root, int relid) */ if (relid < 0) { - /* * If the relation is a materialized relation, assume * constants for sizes. @@ -103,7 +101,7 @@ get_base_rel(Query *root, int relid) RelOptInfo * get_join_rel(Query *root, List *relid) { - return rel_member(relid, root->join_relation_list_); + return rel_member(relid, root->join_rel_list); } /* diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c index bceb0510ba..14040a73c9 100644 --- a/src/backend/parser/gram.c +++ b/src/backend/parser/gram.c @@ -219,7 +219,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.24 1998/08/06 05:12:37 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.25 1998/08/10 02:26:33 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 730a4acde8..6244a0797d 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: parsenodes.h,v 1.53 1998/08/05 04:49:13 scrappy Exp $ + * $Id: parsenodes.h,v 1.54 1998/08/10 02:26:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -62,8 +62,8 @@ typedef struct Query * query */ /* internal to planner */ - List *base_relation_list_; /* base relation list */ - List *join_relation_list_; /* list of relations */ + List *base_rel_list; /* base relation list */ + List *join_rel_list; /* list of relation involved in joins */ } Query; diff --git a/src/include/optimizer/clauses.h b/src/include/optimizer/clauses.h index 024b225907..28ac0c003b 100644 --- a/src/include/optimizer/clauses.h +++ b/src/include/optimizer/clauses.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: clauses.h,v 1.11 1998/08/09 04:59:08 momjian Exp $ + * $Id: clauses.h,v 1.12 1998/08/10 02:26:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -38,7 +38,7 @@ extern List *pull_constant_clauses(List *quals, List **constantQual); extern void clause_get_relids_vars(Node *clause, List **relids, List **vars); extern int NumRelids(Node *clause); extern bool contains_not(Node *clause); -extern bool join_clause_p(Node *clause); +extern bool is_joinable(Node *clause); extern bool qual_clause_p(Node *clause); extern void fix_opid(Node *clause); extern List *fix_opids(List *clauses); diff --git a/src/include/optimizer/planmain.h b/src/include/optimizer/planmain.h index ab4e81f543..306860031d 100644 --- a/src/include/optimizer/planmain.h +++ b/src/include/optimizer/planmain.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: planmain.h,v 1.13 1998/07/19 05:49:25 momjian Exp $ + * $Id: planmain.h,v 1.14 1998/08/10 02:26:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,10 +45,10 @@ extern Unique *make_unique(List *tlist, Plan *lefttree, char *uniqueAttr); /* * prototypes for plan/initsplan.c */ -extern void initialize_base_rels_list(Query *root, List *tlist); -extern void initialize_base_rels_jinfo(Query *root, List *clauses); -extern void initialize_join_clause_info(List *rel_list); -extern void add_missing_vars_to_base_rels(Query *root, List *tlist); +extern void init_base_rels_tlist(Query *root, List *tlist); +extern void init_base_rels_qual(Query *root, List *clauses); +extern void init_join_info(List *rel_list); +extern void add_missing_vars_to_tlist(Query *root, List *tlist); /* * prototypes for plan/setrefs.c