> * 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

Reply via email to