postgres_fdw: Remove redundant check in semijoin_target_ok()
authorAlexander Korotkov <akorotkov@postgresql.org>
Tue, 25 Mar 2025 10:48:48 +0000 (12:48 +0200)
committerAlexander Korotkov <akorotkov@postgresql.org>
Tue, 25 Mar 2025 10:49:01 +0000 (12:49 +0200)
If a var belongs to the innerrel of the joinrel, it's not possible that
it belongs to the outerrel.  This commit removes the redundant check from
the if-clause but keeps it as an assertion.

Discussion: https://postgr.es/m/flat/CAHewXN=8aW4hd_W71F7Ua4+_w0=bppuvvTEBFBF6G0NuSXLwUw@mail.gmail.com
Author: Tender Wang <tndrwang@gmail.com>
Reviewed-by: Alexander Pyhalov <a.yhalov@postgrespro.ru>
Backpatch-through: 17

contrib/postgres_fdw/postgres_fdw.c

index d94c4ce9fd77d32c6e65f4132f1b965ab635e9af..7a5439a460b8f11e6df63bdf09dfb192bdfeeb2c 100644 (file)
@@ -5768,8 +5768,7 @@ semijoin_target_ok(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel,
        if (!IsA(var, Var))
            continue;
 
-       if (bms_is_member(var->varno, innerrel->relids) &&
-           !bms_is_member(var->varno, outerrel->relids))
+       if (bms_is_member(var->varno, innerrel->relids))
        {
            /*
             * The planner can create semi-join, which refers to inner rel
@@ -5777,6 +5776,7 @@ semijoin_target_ok(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel,
             * exists() subquery, so can't handle references to inner rel in
             * the target list.
             */
+           Assert(!bms_is_member(var->varno, outerrel->relids));
            ok = false;
            break;
        }