From 55c3a7c0a5b335f03bf1bd26f1b7542d5305d256 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 2 Nov 2010 18:45:50 -0400 Subject: [PATCH] Fix adjust_semi_join to be more cautious about clauseless joins. It was reporting that these were fully indexed (hence cheap), when of course they're the exact opposite of that. I'm not certain if the case would arise in practice, since a clauseless semijoin is hard to produce in SQL, but if it did happen we'd make some dumb decisions. --- src/backend/optimizer/path/costsize.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 9b35253fe5..46a4639eb5 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -2579,12 +2579,20 @@ adjust_semi_join(PlannerInfo *root, JoinPath *path, SpecialJoinInfo *sjinfo, */ if (indexed_join_quals) { - List *nrclauses; + if (path->joinrestrictinfo != NIL) + { + List *nrclauses; - nrclauses = select_nonredundant_join_clauses(root, - path->joinrestrictinfo, - path->innerjoinpath); - *indexed_join_quals = (nrclauses == NIL); + nrclauses = select_nonredundant_join_clauses(root, + path->joinrestrictinfo, + path->innerjoinpath); + *indexed_join_quals = (nrclauses == NIL); + } + else + { + /* a clauseless join does NOT qualify */ + *indexed_join_quals = false; + } } return true;