> * Is it safe to replace outerjoinpath with its fdw_outerpath the following
> way? I think that if the join relation represented by outerjoinpath has
> local conditions that can't be executed remotely, we have to keep
> outerjoinpath in the path tree; we will otherwise fail to execute the local
> conditions. No?
>
> + /*
> + * If either inner or outer path is a ForeignPath
> corresponding to
> + * a pushed down join, replace it with the
> fdw_outerpath, so that we
> + * maintain path for EPQ checks built entirely of
> local join
> + * strategies.
> + */
> + if (IsA(joinpath->outerjoinpath, ForeignPath))
> + {
> + ForeignPath *foreign_path;
> + foreign_path = (ForeignPath
> *)joinpath->outerjoinpath;
> + if (foreign_path->path.parent->reloptkind
> == RELOPT_JOINREL)
> + joinpath->outerjoinpath =
> foreign_path->fdw_outerpath;
> + }
>
>
all the conditions (local and remote) should be part of fdw_outerpath as
well, since that's the alternate local path, which should produce (when
converted to the plan) the same result as the foreign path. fdw_outerpath
should be a local path set when paths for outerjoinpath->parent was being
created. Am I missing something?
--
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company