* as a sublink that is executed only for row pairs that meet the
* other join conditions. Fixing this seems to require considerable
* restructuring of the executor, but maybe someday it can happen.
+ * (See also the comparable case in pull_up_sublinks_qual_recurse.)
*
* We don't expect to see any pre-existing JOIN_SEMI or JOIN_ANTI
* nodes here.
j->rarg = pull_up_sublinks_jointree_recurse(root,
j->rarg,
&child_rels);
- /* Pulled-up ANY/EXISTS quals can use those rels too */
- child_rels = bms_add_members(child_rels, available_rels);
- /* ... and any inserted joins get stacked onto j->rarg */
+ /* Any inserted joins get stacked onto j->rarg */
j->quals = pull_up_sublinks_qual_recurse(root,
j->quals,
child_rels,
j->rarg = pull_up_sublinks_jointree_recurse(root,
j->rarg,
&child_rels);
- /* Pulled-up ANY/EXISTS quals can use those rels too */
- child_rels = bms_add_members(child_rels, available_rels);
- /* ... and any inserted joins get stacked onto j->rarg */
+ /* Any inserted joins get stacked onto j->rarg */
j->quals = pull_up_sublinks_qual_recurse(root,
j->quals,
child_rels,
/* If the immediate argument of NOT is EXISTS, try to convert */
SubLink *sublink = (SubLink *) get_notclausearg((Expr *) node);
JoinExpr *j;
- Relids child_rels;
if (sublink && IsA(sublink, SubLink))
{
available_rels);
if (j)
{
+ /*
+ * For the moment, refrain from recursing underneath NOT.
+ * As in pull_up_sublinks_jointree_recurse, recursing here
+ * would result in inserting a join underneath an ANTI
+ * join with which it could not commute, and that could
+ * easily lead to a worse plan than what we've
+ * historically generated.
+ */
+#ifdef NOT_USED
/* Yes; recursively process what we pulled up */
+ Relids child_rels;
+
j->rarg = pull_up_sublinks_jointree_recurse(root,
j->rarg,
&child_rels);
- /* Pulled-up ANY/EXISTS quals can use those rels too */
- child_rels = bms_add_members(child_rels, available_rels);
- /* ... and any inserted joins get stacked onto j->rarg */
+ /* Any inserted joins get stacked onto j->rarg */
j->quals = pull_up_sublinks_qual_recurse(root,
j->quals,
child_rels,
&j->rarg);
+#endif
/* Now insert the new join node into the join tree */
j->larg = *jtlink;
*jtlink = (Node *) j;