mirror of
https://github.com/postgres/postgres.git
synced 2025-07-14 08:21:07 +03:00
Fix a conceptual error in my patch of 2007-10-26 that avoided considering
clauseless joins of relations that have unexploited join clauses. Rather than looking at every other base relation in the query, the correct thing is to examine the other relations in the "initial_rels" list of the current make_rel_from_joinlist() invocation, because those are what we actually have the ability to join against. This might be a subset of the whole query in cases where join_collapse_limit or from_collapse_limit or full joins have prevented merging the whole query into a single join problem. This is a bit untidy because we have to pass those rels down through a new PlannerInfo field, but it's necessary. Per bug #3865 from Oleg Kharin.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.167 2008/01/01 19:45:50 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.168 2008/01/11 04:02:18 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -674,7 +674,12 @@ make_rel_from_joinlist(PlannerInfo *root, List *joinlist)
|
||||
/*
|
||||
* Consider the different orders in which we could join the rels,
|
||||
* using a plugin, GEQO, or the regular join search code.
|
||||
*
|
||||
* We put the initial_rels list into a PlannerInfo field because
|
||||
* has_legal_joinclause() needs to look at it (ugly :-().
|
||||
*/
|
||||
root->initial_rels = initial_rels;
|
||||
|
||||
if (join_search_hook)
|
||||
return (*join_search_hook) (root, levels_needed, initial_rels);
|
||||
else if (enable_geqo && levels_needed >= geqo_threshold)
|
||||
|
Reference in New Issue
Block a user