diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-09-19 18:42:34 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-09-19 18:42:34 +0000 |
| commit | ba2ea6e0f5f270571e7f661cd2c7645160a9562a (patch) | |
| tree | 7dc8d44926b39a3afe68798e8514bbf43161a7e2 /src/backend/optimizer/geqo/geqo_main.c | |
| parent | 457ac0331cd3e28ecc5d783e7504645837c41a1d (diff) | |
| download | postgresql-ba2ea6e0f5f270571e7f661cd2c7645160a9562a.tar.gz | |
Fix GEQO optimizer to work correctly with new outer-join-capable
query representation. Note that GEQO_RELS setting is now interpreted
as the number of top-level items in the FROM list, not necessarily the
number of relations in the query. This seems appropriate since we are
only doing join-path searching over the top-level items.
Diffstat (limited to 'src/backend/optimizer/geqo/geqo_main.c')
| -rw-r--r-- | src/backend/optimizer/geqo/geqo_main.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/backend/optimizer/geqo/geqo_main.c b/src/backend/optimizer/geqo/geqo_main.c index eb99c2478f..755c33168d 100644 --- a/src/backend/optimizer/geqo/geqo_main.c +++ b/src/backend/optimizer/geqo/geqo_main.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_main.c,v 1.23 2000/08/07 00:51:23 tgl Exp $ + * $Id: geqo_main.c,v 1.24 2000/09/19 18:42:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -65,13 +65,12 @@ static int gimme_number_generations(int pool_size, int effort); */ RelOptInfo * -geqo(Query *root) +geqo(Query *root, int number_of_rels, List *initial_rels) { int generation; Chromosome *momma; Chromosome *daddy; Chromosome *kid; - int number_of_rels; Pool *pool; int pool_size, number_generations, @@ -95,9 +94,6 @@ geqo(Query *root) #endif -/* set tour size */ - number_of_rels = length(root->base_rel_list); - /* set GA parameters */ pool_size = gimme_pool_size(number_of_rels); number_generations = gimme_number_generations(pool_size, Geqo_effort); @@ -114,7 +110,7 @@ geqo(Query *root) pool = alloc_pool(pool_size, number_of_rels); /* random initialization of the pool */ - random_init_pool(root, pool, 0, pool->size); + random_init_pool(root, initial_rels, pool, 0, pool->size); /* sort the pool according to cheapest path as fitness */ sort_pool(pool); /* we have to do it only one time, since @@ -204,7 +200,8 @@ geqo(Query *root) /* EVALUATE FITNESS */ - kid->worth = geqo_eval(root, kid->string, pool->string_length); + kid->worth = geqo_eval(root, initial_rels, + kid->string, pool->string_length); /* push the kid into the wilderness of life according to its worth */ spread_chromo(kid, pool); @@ -247,9 +244,10 @@ geqo(Query *root) best_tour = (Gene *) pool->data[0].string; -/* root->join_relation_list_ will be modified during this ! */ - best_rel = (RelOptInfo *) gimme_tree(root, best_tour, 0, - pool->string_length, NULL); +/* root->join_rel_list will be modified during this ! */ + best_rel = (RelOptInfo *) gimme_tree(root, initial_rels, + best_tour, pool->string_length, + 0, NULL); /* DBG: show the query plan print_plan(best_plan, root); |
