1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-03 15:22:11 +03:00

Fix optimizer and make faster.

This commit is contained in:
Bruce Momjian
1999-02-12 05:57:08 +00:00
parent 55d0465009
commit 3fdb9bb9c7
15 changed files with 60 additions and 145 deletions

View File

@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.27 1999/02/11 14:58:54 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.28 1999/02/12 05:56:51 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -77,42 +77,28 @@ prune_joinrel(RelOptInfo *rel, List *other_rels)
rel->pathlist,
other_rel->pathlist);
else
result = nconc(result, lcons(other_rel, NIL));
result = lappend(result, other_rel);
}
return result;
}
/*
* prune-rel-paths--
* rels-set-cheapest
* For each relation entry in 'rel-list' (which corresponds to a join
* relation), set pointers to the unordered path and cheapest paths
* (if the unordered path isn't the cheapest, it is pruned), and
* reset the relation's size field to reflect the join.
*
* Returns nothing of interest.
*
* relation), set pointers to the cheapest path
*/
void
prune_rel_paths(List *rel_list)
rels_set_cheapest(List *rel_list)
{
List *x = NIL;
List *y = NIL;
Path *path = NULL;
RelOptInfo *rel = (RelOptInfo *) NULL;
JoinPath *cheapest = (JoinPath *) NULL;
JoinPath *cheapest;
foreach(x, rel_list)
{
rel = (RelOptInfo *) lfirst(x);
rel->size = 0;
foreach(y, rel->pathlist)
{
path = (Path *) lfirst(y);
if (!path->pathorder->ord.sortop)
break;
}
cheapest = (JoinPath *) prune_rel_path(rel, path);
cheapest = (JoinPath *) set_cheapest(rel, rel->pathlist);
if (IsA_JoinPath(cheapest))
rel->size = compute_joinrel_size(cheapest);
else
@@ -121,33 +107,6 @@ prune_rel_paths(List *rel_list)
}
/*
* prune-rel-path--
* Compares the unordered path for a relation with the cheapest path. If
* the unordered path is not cheapest, it is pruned.
*
* Resets the pointers in 'rel' for unordered and cheapest paths.
*
* Returns the cheapest path.
*
*/
Path *
prune_rel_path(RelOptInfo *rel, Path *unorderedpath)
{
Path *cheapest = set_cheapest(rel, rel->pathlist);
/* don't prune if not pruneable -- JMH, 11/23/92 */
if (unorderedpath != cheapest && rel->pruneable)
{
rel->unorderedpath = (Path *) NULL;
rel->pathlist = lremove(unorderedpath, rel->pathlist);
}
else
rel->unorderedpath = (Path *) unorderedpath;
return cheapest;
}
/*
* merge-joinrels--
* Given two lists of rel nodes that are already