diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-20 18:55:07 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-20 18:55:07 +0000 |
| commit | bdfbfde1b168b3332c4cdac34ac86a80aaf4d442 (patch) | |
| tree | f35bf1af04733069f3a6b0a2698ac10dbd6544ed /src/backend/optimizer/geqo/geqo_main.c | |
| parent | be2b660ecd5ca205570825633e7b8479379ddc64 (diff) | |
| download | postgresql-bdfbfde1b168b3332c4cdac34ac86a80aaf4d442.tar.gz | |
IN clauses appearing at top level of WHERE can now be handled as joins.
There are two implementation techniques: the executor understands a new
JOIN_IN jointype, which emits at most one matching row per left-hand row,
or the result of the IN's sub-select can be fed through a DISTINCT filter
and then joined as an ordinary relation.
Along the way, some minor code cleanup in the optimizer; notably, break
out most of the jointree-rearrangement preprocessing in planner.c and
put it in a new file prep/prepjointree.c.
Diffstat (limited to 'src/backend/optimizer/geqo/geqo_main.c')
| -rw-r--r-- | src/backend/optimizer/geqo/geqo_main.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/backend/optimizer/geqo/geqo_main.c b/src/backend/optimizer/geqo/geqo_main.c index c9993680b5..c517652dab 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-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/geqo_main.c,v 1.33 2002/12/16 21:30:29 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/geqo_main.c,v 1.34 2003/01/20 18:54:49 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -228,20 +228,25 @@ geqo(Query *root, int number_of_rels, List *initial_rels) #endif -/* got the cheapest query tree processed by geqo; - first element of the population indicates the best query tree */ - + /* + * got the cheapest query tree processed by geqo; + * first element of the population indicates the best query tree + */ best_tour = (Gene *) pool->data[0].string; -/* root->join_rel_list will be modified during this ! */ + /* root->join_rel_list will be modified during this ! */ best_rel = gimme_tree(root, initial_rels, best_tour, pool->string_length); -/* DBG: show the query plan -print_plan(best_plan, root); - DBG */ + if (best_rel == NULL) + elog(ERROR, "geqo: failed to make a valid plan"); + + /* DBG: show the query plan */ +#ifdef NOT_USED + print_plan(best_plan, root); +#endif -/* ... free memory stuff */ + /* ... free memory stuff */ free_chromo(momma); free_chromo(daddy); |
