From 352f114a1842d7dbbc2e5f08445b89442224710d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 8 Dec 2008 00:16:09 +0000 Subject: [PATCH] Don't try to optimize EXISTS subqueries with empty FROM-lists: we need to form a join and that case doesn't have anything to join to. (We could probably make it work if we didn't pull up the subquery, but it seems to me that the case isn't worth extra code.) Per report from Greg Stark. --- src/backend/optimizer/plan/subselect.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 1bb61c34a5..7fa38f6a78 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -1097,6 +1097,12 @@ convert_EXISTS_sublink_to_join(PlannerInfo *root, SubLink *sublink, if (!simplify_EXISTS_query(subselect)) return false; + /* + * The subquery must have a nonempty jointree, else we won't have a join. + */ + if (subselect->jointree->fromlist == NIL) + return false; + /* * Separate out the WHERE clause. (We could theoretically also remove * top-level plain JOIN/ON clauses, but it's probably not worth the @@ -1180,6 +1186,7 @@ convert_EXISTS_sublink_to_join(PlannerInfo *root, SubLink *sublink, /* Identify all the rels syntactically within the subselect */ subselect_varnos = get_relids_in_jointree((Node *) subselect->jointree, true); + Assert(!bms_is_empty(subselect_varnos)); Assert(bms_is_subset(right_varnos, subselect_varnos)); /* Now we can attach the modified subquery rtable to the parent */ -- 2.39.5