Skip to content

Commit d7e4fd9

Browse files
committed
Fix bug introduced into indexable_outerrelids() by an ill-considered
"optimization". When we find a potentially useful joinclause, we have to add all its other required_relids to the result, not only the other clause_relids. They are different in the case of a joinclause whose applicability has to be postponed due to outer join. We have to include the extra rels because otherwise, after best_inner_indexscan masks the join rels with index_outer_relids, it will always fail to find the joinclause as applicable. Per report from Husam Tomeh.
1 parent 8a64ec6 commit d7e4fd9

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

src/backend/optimizer/path/indxpath.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $PostgreSQL: pgsql/src/backend/optimizer/path/indxpath.c,v 1.188 2005/08/28 22:47:20 tgl Exp $
12+
* $PostgreSQL: pgsql/src/backend/optimizer/path/indxpath.c,v 1.189 2005/09/22 23:25:07 tgl Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -955,15 +955,13 @@ indexable_outerrelids(RelOptInfo *rel)
955955
/*
956956
* Examine each joinclause in the joininfo list to see if it matches any
957957
* key of any index. If so, add the clause's other rels to the result.
958-
* (Note: we consider only actual participants, not extraneous rels
959-
* possibly mentioned in required_relids.)
960958
*/
961959
foreach(l, rel->joininfo)
962960
{
963961
RestrictInfo *joininfo = (RestrictInfo *) lfirst(l);
964962
Relids other_rels;
965963

966-
other_rels = bms_difference(joininfo->clause_relids, rel->relids);
964+
other_rels = bms_difference(joininfo->required_relids, rel->relids);
967965
if (matches_any_index(joininfo, rel, other_rels))
968966
outer_relids = bms_join(outer_relids, other_rels);
969967
else

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy