aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1999-02-22 05:26:58 +0000
committerBruce Momjian <bruce@momjian.us>1999-02-22 05:26:58 +0000
commit1ed5cbbfd847f0011a6fe3670deb75b1a7407f61 (patch)
tree01c424ce1005bbeef3a947a6b6c6ec2cfe5a464f
parent47dd11bdd034a8afeab5e9a3ed12ddbebb475d25 (diff)
downloadpostgresql-1ed5cbbfd847f0011a6fe3670deb75b1a7407f61.tar.gz
postgresql-1ed5cbbfd847f0011a6fe3670deb75b1a7407f61.zip
Final optimizer cleanups.
-rw-r--r--src/backend/nodes/list.c6
-rw-r--r--src/backend/optimizer/path/allpaths.c4
-rw-r--r--src/backend/optimizer/path/hashutils.c6
-rw-r--r--src/backend/optimizer/path/indxpath.c4
-rw-r--r--src/backend/optimizer/path/joinpath.c19
-rw-r--r--src/backend/optimizer/path/joinrels.c12
-rw-r--r--src/backend/optimizer/path/pathkeys.c215
-rw-r--r--src/backend/optimizer/plan/initsplan.c4
-rw-r--r--src/backend/optimizer/util/joininfo.c6
-rw-r--r--src/backend/optimizer/util/var.c5
-rw-r--r--src/backend/parser/gram.c4
-rw-r--r--src/backend/rewrite/rewriteHandler.c6
-rw-r--r--src/include/nodes/pg_list.h5
-rw-r--r--src/include/optimizer/paths.h6
-rw-r--r--src/interfaces/libpq/fe-misc.c6
-rw-r--r--src/man/postmaster.129
16 files changed, 174 insertions, 163 deletions
diff --git a/src/backend/nodes/list.c b/src/backend/nodes/list.c
index 83de976c970..4ac40a1c1da 100644
--- a/src/backend/nodes/list.c
+++ b/src/backend/nodes/list.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.17 1999/02/13 23:15:57 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.18 1999/02/22 05:26:18 momjian Exp $
*
* NOTES
* XXX a few of the following functions are duplicated to handle
@@ -109,6 +109,7 @@ nconc(List *l1, List *l2)
}
+#ifdef NOT_USED
List *
nreverse(List *list)
{
@@ -128,6 +129,7 @@ nreverse(List *list)
lnext(list) = lnext(rlist);
return list;
}
+#endif
Value *
makeInteger(long i)
@@ -245,6 +247,7 @@ append(List *l1, List *l2)
return newlist;
}
+#ifdef NOT_USED
/*
* below are for backwards compatibility
*/
@@ -266,6 +269,7 @@ intAppend(List *l1, List *l2)
lnext(p) = newlist2;
return newlist;
}
+#endif
/*
* same
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 6babe4bd746..ba421b4f5ff 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.43 1999/02/21 03:48:41 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.44 1999/02/22 05:26:18 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -126,7 +126,7 @@ set_base_rel_pathlist(Query *root, List *rels)
rel->pathlist = add_pathlist(rel,
sequential_scan_list,
- append(rel_index_scan_list,
+ nconc(rel_index_scan_list,
or_index_scan_list));
set_cheapest(rel, rel->pathlist);
diff --git a/src/backend/optimizer/path/hashutils.c b/src/backend/optimizer/path/hashutils.c
index 53201e0621d..78441f041a1 100644
--- a/src/backend/optimizer/path/hashutils.c
+++ b/src/backend/optimizer/path/hashutils.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.13 1999/02/13 23:16:16 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.14 1999/02/22 05:26:18 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -83,9 +83,7 @@ group_clauses_by_hashop(List *restrictinfo_list,
xhashinfo->jmethod.jmkeys = NIL;
xhashinfo->jmethod.clauses = NIL;
- /* XXX was push */
- hashinfo_list = lappend(hashinfo_list, xhashinfo);
- hashinfo_list = nreverse(hashinfo_list);
+ hashinfo_list = lcons(xhashinfo, hashinfo_list);
}
xhashinfo->jmethod.clauses = lcons(clause, xhashinfo->jmethod.clauses);
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index e23b65067c9..c955f256278 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.52 1999/02/21 03:48:44 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.53 1999/02/22 05:26:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1384,7 +1384,7 @@ create_index_path_group(Query *root,
static List *
add_index_paths(List *indexpaths, List *new_indexpaths)
{
- return append(indexpaths, new_indexpaths);
+ return nconc(indexpaths, new_indexpaths);
}
static bool
diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c
index 95907f40729..47668a69b81 100644
--- a/src/backend/optimizer/path/joinpath.c
+++ b/src/backend/optimizer/path/joinpath.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.31 1999/02/21 01:55:02 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.32 1999/02/22 05:26:20 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -104,7 +104,8 @@ update_rels_pathlist_for_joins(Query *root, List *joinrels)
lfirsti(innerrel->relids));
/* need to flatten the relids list */
- joinrel->relids = intAppend(outerrelids, innerrelids);
+ joinrel->relids = nconc(listCopy(outerrelids),
+ listCopy(innerrelids));
/*
* 1. Consider mergejoin paths where both relations must be
@@ -213,11 +214,11 @@ sort_inner_and_outer(RelOptInfo *joinrel,
{
xmergeinfo = (MergeInfo *) lfirst(i);
- outerkeys = extract_path_keys(xmergeinfo->jmethod.jmkeys,
+ outerkeys = make_pathkeys_from_joinkeys(xmergeinfo->jmethod.jmkeys,
outerrel->targetlist,
OUTER);
- innerkeys = extract_path_keys(xmergeinfo->jmethod.jmkeys,
+ innerkeys = make_pathkeys_from_joinkeys(xmergeinfo->jmethod.jmkeys,
innerrel->targetlist,
INNER);
@@ -352,7 +353,7 @@ match_unsorted_outer(RelOptInfo *joinrel,
innerrel->width, false))));
if (!path_is_cheaper_than_sort)
{
- varkeys = extract_path_keys(matchedJoinKeys,
+ varkeys = make_pathkeys_from_joinkeys(matchedJoinKeys,
innerrel->targetlist,
INNER);
}
@@ -473,7 +474,7 @@ match_unsorted_inner(RelOptInfo *joinrel,
if (temp2)
{
- List *outerkeys = extract_path_keys(matchedJoinKeys,
+ List *outerkeys = make_pathkeys_from_joinkeys(matchedJoinKeys,
outerrel->targetlist,
OUTER);
List *merge_pathkeys = new_join_pathkeys(outerkeys,
@@ -551,10 +552,12 @@ hash_inner_and_outer(RelOptInfo *joinrel,
foreach(i, hashinfo_list)
{
xhashinfo = (HashInfo *) lfirst(i);
- outerkeys = extract_path_keys(((JoinMethod *) xhashinfo)->jmkeys,
+ outerkeys = make_pathkeys_from_joinkeys(
+ ((JoinMethod *) xhashinfo)->jmkeys,
outerrel->targetlist,
OUTER);
- innerkeys = extract_path_keys(((JoinMethod *) xhashinfo)->jmkeys,
+ innerkeys = make_pathkeys_from_joinkeys(
+ ((JoinMethod *) xhashinfo)->jmkeys,
innerrel->targetlist,
INNER);
hash_pathkeys = new_join_pathkeys(outerkeys,
diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c
index 8add86750b9..208aacb2056 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.30 1999/02/18 06:00:46 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.31 1999/02/22 05:26:20 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -62,7 +62,7 @@ make_rels_by_joins(Query *root, List *old_rels)
joined_rels = make_rels_by_clauseless_joins(old_rel,
root->base_rel_list);
joined_rels = append(joined_rels,
- make_rels_by_clauseless_joins(old_rel,
+ make_rels_by_clauseless_joins(old_rel,
old_rels));
}
@@ -235,9 +235,11 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo)
if (joininfo)
joinrel->restrictinfo = joininfo->jinfo_restrictinfo;
- joinrel_joininfo_list = new_joininfo_list(append(outer_rel->joininfo,
- inner_rel->joininfo),
- intAppend(outer_rel->relids, inner_rel->relids));
+ joinrel_joininfo_list = new_joininfo_list(
+ append(outer_rel->joininfo,
+ inner_rel->joininfo),
+ nconc(listCopy(outer_rel->relids),
+ listCopy(inner_rel->relids)));
joinrel->joininfo = joinrel_joininfo_list;
diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c
index 522f303d27d..fa9ac394788 100644
--- a/src/backend/optimizer/path/pathkeys.c
+++ b/src/backend/optimizer/path/pathkeys.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.6 1999/02/21 01:55:02 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.7 1999/02/22 05:26:20 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -27,9 +27,9 @@
static int match_pathkey_joinkeys(List *pathkey, List *joinkeys,
int outer_or_inner);
-static List *new_join_pathkey(List *subkeys, List *considered_subkeys,
- List *join_rel_tlist, List *joinclauses);
-static List *new_matching_subkeys(Var *subkey, List *considered_subkeys,
+static List *new_join_pathkey(List *pathkeys, List *join_rel_tlist,
+ List *joinclauses);
+static List *get_joinvars_for_var(Var *pathkey, List **considered_pathkeys,
List *join_rel_tlist, List *joinclauses);
@@ -86,7 +86,7 @@ static List *new_matching_subkeys(Var *subkey, List *considered_subkeys,
* ( (outer inner) (outer inner) ... )
* 'joinclauses' is a list of clauses corresponding to the join keys in
* 'joinkeys'
- * 'outer_or_inner' is a flag that selects the desired subkey of a join key
+ * 'outer_or_inner' is a flag that selects the desired pathkey of a join key
* in 'joinkeys'
*
* Returns the join keys and corresponding join clauses in a list if all
@@ -133,10 +133,11 @@ order_joinkeys_by_pathkeys(List *pathkeys,
matched_joinkeys = lappend(matched_joinkeys, joinkey);
}
- if (matchedJoinClausesPtr && joinclauses)
+ if (matchedJoinClausesPtr)
{
Expr *joinclause = nth(matched_joinkey_index,
joinclauses);
+ Assert(joinclauses);
matched_joinclauses = lappend(matched_joinclauses, joinclause);
}
}
@@ -169,7 +170,7 @@ order_joinkeys_by_pathkeys(List *pathkeys,
/*
* match_pathkey_joinkeys
* Returns the 0-based index into 'joinkeys' of the first joinkey whose
- * outer or inner subkey matches any subkey of 'pathkey'.
+ * outer or inner pathkey matches any subkey of 'pathkey'.
*
* All these keys are equivalent, so any of them can match. See above.
*/
@@ -178,19 +179,19 @@ match_pathkey_joinkeys(List *pathkey,
List *joinkeys,
int outer_or_inner)
{
- Var *path_subkey;
+ Var *key;
int pos;
List *i, *x;
JoinKey *jk;
foreach(i, pathkey)
{
- path_subkey = (Var *) lfirst(i);
+ key = (Var *) lfirst(i);
pos = 0;
foreach(x, joinkeys)
{
jk = (JoinKey *) lfirst(x);
- if (var_equal(path_subkey, extract_join_key(jk, outer_or_inner)))
+ if (equal(key, extract_join_key(jk, outer_or_inner)))
return pos;
pos++;
}
@@ -204,9 +205,9 @@ match_pathkey_joinkeys(List *pathkey,
* Attempts to find a path in 'paths' whose keys match a set of join
* keys 'joinkeys'. To match,
* 1. the path node ordering must equal 'ordering'.
- * 2. each subkey of a given path must match(i.e., be(var_equal) to) the
- * appropriate subkey of the corresponding join key in 'joinkeys',
- * i.e., the Nth path key must match its subkeys against the subkey of
+ * 2. each pathkey of a given path must match(i.e., be(equal) to) the
+ * appropriate pathkey of the corresponding join key in 'joinkeys',
+ * i.e., the Nth path key must match its pathkeys against the pathkey of
* the Nth join key in 'joinkeys'.
*
* 'joinkeys' is the list of key pairs to which the path keys must be
@@ -215,7 +216,7 @@ match_pathkey_joinkeys(List *pathkey,
* must correspond
* 'paths' is a list of(inner) paths which are to be matched against
* each join key in 'joinkeys'
- * 'outer_or_inner' is a flag that selects the desired subkey of a join key
+ * 'outer_or_inner' is a flag that selects the desired pathkey of a join key
* in 'joinkeys'
*
* Find the cheapest path that matches the join keys
@@ -232,7 +233,7 @@ get_cheapest_path_for_joinkeys(List *joinkeys,
foreach(i, paths)
{
Path *path = (Path *) lfirst(i);
- int better_sort, better_key;
+ int better_sort;
if (order_joinkeys_by_pathkeys(path->pathkeys, joinkeys, NIL,
outer_or_inner, NULL, NULL) &&
@@ -251,23 +252,23 @@ get_cheapest_path_for_joinkeys(List *joinkeys,
/*
- * extract_path_keys
- * Builds a subkey list for a path by pulling one of the subkeys from
+ * make_pathkeys_from_joinkeys
+ * Builds a pathkey list for a path by pulling one of the pathkeys from
* a list of join keys 'joinkeys' and then finding the var node in the
- * target list 'tlist' that corresponds to that subkey.
+ * target list 'tlist' that corresponds to that pathkey.
*
* 'joinkeys' is a list of join key pairs
* 'tlist' is a relation target list
- * 'outer_or_inner' is a flag that selects the desired subkey of a join key
+ * 'outer_or_inner' is a flag that selects the desired pathkey of a join key
* in 'joinkeys'
*
* Returns a list of pathkeys: ((tlvar1)(tlvar2)...(tlvarN)).
* It is a list of lists because of multi-key indexes.
*/
List *
-extract_path_keys(List *joinkeys,
- List *tlist,
- int outer_or_inner)
+make_pathkeys_from_joinkeys(List *joinkeys,
+ List *tlist,
+ int outer_or_inner)
{
List *pathkeys = NIL;
List *jk;
@@ -275,30 +276,38 @@ extract_path_keys(List *joinkeys,
foreach(jk, joinkeys)
{
JoinKey *jkey = (JoinKey *) lfirst(jk);
- Var *var,
- *key;
- List *p;
+ Var *key;
+ List *p, *p2;
+ bool found = false;
- /*
- * find the right Var in the target list for this key
- */
- var = (Var *) extract_join_key(jkey, outer_or_inner);
- key = (Var *) matching_tlist_var(var, tlist);
+ key = (Var *) extract_join_key(jkey, outer_or_inner);
- /*
- * Include it in the pathkeys list if we haven't already done so
- */
- foreach(p, pathkeys)
+ /* check to see if it is in the target list */
+ if (matching_tlist_var(key, tlist))
{
- Var *pkey = lfirst((List *) lfirst(p)); /* XXX fix me */
-
- if (key == pkey)
- break;
+ /*
+ * Include it in the pathkeys list if we haven't already done so
+ */
+ foreach(p, pathkeys)
+ {
+ List *pathkey = lfirst(p);
+
+ foreach(p2, pathkey)
+ {
+ Var *pkey = lfirst(p2);
+
+ if (equal(key, pkey))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ if (!found)
+ pathkeys = lappend(pathkeys, lcons(key, NIL));
}
- if (p != NIL)
- continue; /* key already in pathkeys */
-
- pathkeys = lappend(pathkeys, lcons(key, NIL));
}
return pathkeys;
}
@@ -331,99 +340,100 @@ new_join_pathkeys(List *outer_pathkeys,
List *joinclauses)
{
List *outer_pathkey = NIL;
- List *t_list = NIL;
- List *x;
+ List *final_pathkeys = NIL;
+ List *new_pathkey;
List *i = NIL;
foreach(i, outer_pathkeys)
{
outer_pathkey = lfirst(i);
- x = new_join_pathkey(outer_pathkey, NIL, join_rel_tlist, joinclauses);
- if (x != NIL)
- t_list = lappend(t_list, x);
+ new_pathkey = new_join_pathkey(outer_pathkey, join_rel_tlist,
+ joinclauses);
+ if (new_pathkey != NIL)
+ final_pathkeys = lappend(final_pathkeys, new_pathkey);
}
- return t_list;
+ return final_pathkeys;
}
/*
* new_join_pathkey
- * Finds new vars that become subkeys due to qualification clauses that
- * contain any previously considered subkeys. These new subkeys plus the
- * subkeys from 'subkeys' form a new pathkey for the join relation.
+ * Finds new vars that become pathkeys due to qualification clauses that
+ * contain any previously considered pathkeys. These new pathkeys plus the
+ * pathkeys from 'pathkeys' form a new pathkey for the join relation.
*
- * Note that each returned subkey is the var node found in
+ * Note that each returned pathkey is the var node found in
* 'join_rel_tlist' rather than the joinclause var node.
*
- * 'subkeys' is a list of subkeys for which matching subkeys are to be
+ * 'pathkeys' is a list of pathkeys for which matching pathkeys are to be
* found
- * 'considered_subkeys' is the current list of all subkeys corresponding
+ * 'considered_pathkeys' is the current list of all pathkeys corresponding
* to a given pathkey
*
- * Returns a new pathkey(list of subkeys).
+ * Returns a new pathkey(list of pathkeys).
*
*/
static List *
-new_join_pathkey(List *subkeys,
- List *considered_subkeys,
+new_join_pathkey(List *pathkey,
List *join_rel_tlist,
List *joinclauses)
{
- List *t_list = NIL;
- Var *subkey;
+ List *final_pathkey = NIL;
List *i = NIL;
- List *matched_subkeys = NIL;
- Expr *tlist_key = (Expr *) NULL;
- List *newly_considered_subkeys = NIL;
+ List *considered_pathkeys = NIL;
- foreach(i, subkeys)
+ foreach(i, pathkey)
{
- subkey = (Var *) lfirst(i);
- if (subkey == NULL)
- break; /* XXX something is wrong */
- matched_subkeys = new_matching_subkeys(subkey, considered_subkeys,
- join_rel_tlist, joinclauses);
- tlist_key = matching_tlist_var(subkey, join_rel_tlist);
- newly_considered_subkeys = NIL;
-
- if (tlist_key)
+ Var *key = (Var *) lfirst(i);
+ List *joined_keys;
+ Expr *tlist_key;
+
+ Assert(key);
+ joined_keys = get_joinvars_for_var(key, &considered_pathkeys,
+ join_rel_tlist, joinclauses);
+ if (joined_keys)
{
- if (!member(tlist_key, matched_subkeys))
- newly_considered_subkeys = lcons(tlist_key, matched_subkeys);
+ considered_pathkeys = nconc(considered_pathkeys, joined_keys);
+ final_pathkey = nconc(final_pathkey, joined_keys);
+ }
+
+ tlist_key = matching_tlist_var(key, join_rel_tlist);
+ if (tlist_key && !member(tlist_key, considered_pathkeys))
+ {
+ /*
+ * If pathkey is in the target list, and not considered,
+ * add it
+ */
+ considered_pathkeys = lcons(tlist_key, considered_pathkeys);
+ final_pathkey = lcons(tlist_key, final_pathkey);
}
- else
- newly_considered_subkeys = matched_subkeys;
-
- considered_subkeys = append(considered_subkeys, newly_considered_subkeys);
-
- t_list = nconc(t_list, newly_considered_subkeys);
}
- return t_list;
+ return copyObject(final_pathkey);
}
/*
- * new_matching_subkeys
- * Returns a list of new subkeys:
- * (1) which are not listed in 'considered_subkeys'
+ * get_joinvars_for_var
+ * Returns a list of new pathkeys:
+ * (1) which are not listed in 'considered_pathkeys'
* (2) for which the "other" variable in some clause in 'joinclauses' is
- * 'subkey'
+ * 'pathkey'
* (3) which are mentioned in 'join_rel_tlist'
*
- * Note that each returned subkey is the var node found in
+ * Note that each returned pathkey is the var node found in
* 'join_rel_tlist' rather than the joinclause var node.
*
- * 'subkey' is the var node for which we are trying to find matching
+ * 'pathkey' is the var node for which we are trying to find matching
* clauses
*
- * Returns a list of new subkeys.
+ * Returns a list of new pathkeys.
*
*/
static List *
-new_matching_subkeys(Var *subkey,
- List *considered_subkeys,
+get_joinvars_for_var(Var *key,
+ List **considered_pathkeys,
List *join_rel_tlist,
List *joinclauses)
{
- List *t_list = NIL;
+ List *final_pathkey = NIL;
Expr *joinclause;
List *i;
Expr *tlist_other_var;
@@ -431,25 +441,20 @@ new_matching_subkeys(Var *subkey,
foreach(i, joinclauses)
{
joinclause = lfirst(i);
- tlist_other_var = matching_tlist_var(
- other_join_clause_var(subkey, joinclause),
- join_rel_tlist);
+ tlist_other_var = matching_tlist_var(
+ other_join_clause_var(key, joinclause),
+ join_rel_tlist);
if (tlist_other_var &&
- !(member(tlist_other_var, considered_subkeys)))
+ !member(tlist_other_var, *considered_pathkeys))
{
-
- /* XXX was "push" function */
- considered_subkeys = lappend(considered_subkeys,
- tlist_other_var);
-
/*
- * considered_subkeys = nreverse(considered_subkeys); XXX -- I
- * am not sure of this.
+ * The key has a join variable that is in the target list,
+ * and has not been considered.
*/
-
- t_list = lappend(t_list, tlist_other_var);
+ *considered_pathkeys = lcons(tlist_other_var, *considered_pathkeys);
+ final_pathkey = lcons(tlist_other_var, final_pathkey);
}
}
- return t_list;
+ return final_pathkey;
}
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index b4ecb4dd01b..0b54bd8c4bc 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.28 1999/02/18 00:49:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.29 1999/02/22 05:26:21 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -72,7 +72,7 @@ make_var_only_tlist(Query *root, List *tlist)
{
TargetEntry *entry = (TargetEntry *) lfirst(l);
- tlist_vars = append(tlist_vars, pull_var_clause(entry->expr));
+ tlist_vars = nconc(tlist_vars, pull_var_clause(entry->expr));
}
/* now, the target list only contains Var nodes */
diff --git a/src/backend/optimizer/util/joininfo.c b/src/backend/optimizer/util/joininfo.c
index 880cfa5f422..f3797aa3b96 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.18 1999/02/18 00:49:37 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.19 1999/02/22 05:26:26 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -101,9 +101,9 @@ other_join_clause_var(Var *var, Expr *clause)
l = (Var *) get_leftop(clause);
r = (Var *) get_rightop(clause);
- if (var_equal(var, l))
+ if (equal(var, l))
retval = r;
- else if (var_equal(var, r))
+ else if (equal(var, r))
retval = l;
}
diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c
index 0e4b350c52c..914f33f50ea 100644
--- a/src/backend/optimizer/util/var.c
+++ b/src/backend/optimizer/util/var.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.16 1999/02/13 23:16:50 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.17 1999/02/22 05:26:27 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -235,6 +235,9 @@ pull_var_clause(Node *clause)
/*
* var_equal
*
+ * The only difference between this an equal() is that this does not
+ * test varnoold and varoattno.
+ *
* Returns t iff two var nodes correspond to the same attribute.
*/
bool
diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c
index 55359837ecb..1f36b39ea73 100644
--- a/src/backend/parser/gram.c
+++ b/src/backend/parser/gram.c
@@ -242,7 +242,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.73 1999/02/14 05:14:09 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.74 1999/02/22 05:26:33 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -11574,7 +11574,7 @@ makeRowExpr(char *opr, List *largs, List *rargs)
elog(ERROR,"Operator '%s' not implemented for row expressions",opr);
}
-#if FALSE
+#ifdef NOT_USED
while ((largs != NIL) && (rargs != NIL))
{
larg = lfirst(largs);
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index 989f1353465..a9ff8a0a3b1 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.36 1999/02/21 03:49:18 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.37 1999/02/22 05:26:46 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -97,7 +97,7 @@ gatherRewriteMeta(Query *parsetree,
info->current_varno = rt_index;
info->rt = parsetree->rtable;
rt_length = length(info->rt);
- info->rt = append(info->rt, info->rule_action->rtable);
+ info->rt = nconc(info->rt, copyObject(info->rule_action->rtable));
info->new_varno = PRS2_NEW_VARNO + rt_length;
OffsetVarNodes(info->rule_action->qual, rt_length, 0);
@@ -2206,7 +2206,7 @@ CopyAndAddQual(Query *parsetree,
rtable = new_tree->rtable;
rt_length = length(rtable);
- rtable = append(rtable, listCopy(rule_action->rtable));
+ rtable = nconc(rtable, copyObject(rule_action->rtable));
new_tree->rtable = rtable;
OffsetVarNodes(new_qual, rt_length, 0);
ChangeVarNodes(new_qual, PRS2_CURRENT_VARNO + rt_length, rt_index, 0);
diff --git a/src/include/nodes/pg_list.h b/src/include/nodes/pg_list.h
index 56296747380..de481f4e464 100644
--- a/src/include/nodes/pg_list.h
+++ b/src/include/nodes/pg_list.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_list.h,v 1.10 1999/02/13 23:21:39 momjian Exp $
+ * $Id: pg_list.h,v 1.11 1999/02/22 05:26:47 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -82,7 +82,6 @@ typedef struct List
* function prototypes in nodes/list.c
*/
extern int length(List *list);
-extern List *append(List *list1, List *list2);
extern List *nconc(List *list1, List *list2);
extern List *lcons(void *datum, List *list);
extern bool member(void *foo, List *bar);
@@ -101,11 +100,9 @@ extern void set_nth(List *l, int n, void *elem);
List *lconsi(int datum, List *list);
List *lappendi(List *list, int datum);
extern bool intMember(int, List *);
-extern List *intAppend(List *list1, List *list2);
extern int nthi(int n, List *l);
-extern List *nreverse(List *);
extern List *set_difference(List *, List *);
extern List *set_differencei(List *, List *);
extern List *LispUnion(List *foo, List *bar);
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index fb9ef20b288..dfd2dfa7871 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: paths.h,v 1.25 1999/02/21 01:55:03 momjian Exp $
+ * $Id: paths.h,v 1.26 1999/02/22 05:26:52 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -58,8 +58,8 @@ extern bool order_joinkeys_by_pathkeys(List *pathkeys,
List *joinkeys, List *joinclauses, int outer_or_inner,
List **matchedJoinKeysPtr,
List **matchedJoinClausesPtr);
-extern List *extract_path_keys(List *joinkeys, List *tlist,
- int outer_or_inner);
+extern List *make_pathkeys_from_joinkeys(List *joinkeys, List *tlist,
+ int outer_or_inner);
extern Path *get_cheapest_path_for_joinkeys(List *joinkeys,
PathOrder *ordering, List *paths, int outer_or_inner);
extern List *new_join_pathkeys(List *outer_pathkeys,
diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c
index 7c8ea05f570..726279291a9 100644
--- a/src/interfaces/libpq/fe-misc.c
+++ b/src/interfaces/libpq/fe-misc.c
@@ -24,7 +24,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.22 1998/09/20 04:51:12 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.23 1999/02/22 05:26:53 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -438,8 +438,8 @@ tryAgain2:
definitelyFailed:
sprintf(conn->errorMessage,
"pqReadData() -- backend closed the channel unexpectedly.\n"
- "\tThis probably means the backend terminated abnormally"
- " before or while processing the request.\n");
+ "\tThis probably means the backend terminated abnormally\n"
+ "\tbefore or while processing the request.\n");
conn->status = CONNECTION_BAD; /* No more connection to backend */
#ifdef WIN32
closesocket(conn->sock);
diff --git a/src/man/postmaster.1 b/src/man/postmaster.1
index 59ba1d5e03f..4740cd41896 100644
--- a/src/man/postmaster.1
+++ b/src/man/postmaster.1
@@ -1,6 +1,6 @@
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/postmaster.1,v 1.14 1999/02/21 03:17:31 tgl Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/postmaster.1,v 1.15 1999/02/22 05:26:58 momjian Exp $
.TH POSTMASTER UNIX 02/20/99 PostgreSQL PostgreSQL
.SH "NAME"
postmaster - run the Postgres postmaster
@@ -13,17 +13,17 @@ n_buffers]
.BR "-D"
data_dir]
[\c
+.BR "-N"
+n_backends]
+.br
+.in +5n
+[\c
.BR "-S" \c
]
[\c
.BR "-a"
system]
[\c
-.BR "-N"
-n_backends]
-.br
-.in +5n
-[\c
.BR "-b"
backend_pathname]
[\c
@@ -35,7 +35,6 @@ backend_pathname]
[\c
.BR "-n" \c
]
-.br
[\c
.BR "-o"
backend_options]
@@ -81,6 +80,14 @@ is not set, then the directory used is
option is not specified, the default directory that was
set at compile-time is used.
.TP
+.BR "-N" " n_backends"
+.IR "n_backends"
+is the maximum number of backend server processes that this postmaster
+is allowed to start. In the stock configuration, this value defaults
+to 64, and can be set as high as 1024 if your system will support that
+many processes. Both the default and upper limit values can be altered
+when building Postgres.
+.TP
.BR "-S"
Specifies that the
.IR "postmaster"
@@ -108,14 +115,6 @@ connections, use
.BR "-a nounauth .
This option no longer has any effect.
.TP
-.BR "-N" " n_backends"
-.IR "n_backends"
-is the maximum number of backend server processes that this postmaster
-is allowed to start. In the stock configuration, this value defaults
-to 64, and can be set as high as 1024 if your system will support that
-many processes. Both the default and upper limit values can be altered
-when building Postgres.
-.TP
.BR "-b" " backend_pathname"
.IR "backend_pathname"
is the full pathname of the Postgres backend server executable file that