Re: Foreign join pushdown vs EvalPlanQual - Mailing list pgsql-hackers
| From | Kyotaro HORIGUCHI |
|---|---|
| Subject | Re: Foreign join pushdown vs EvalPlanQual |
| Date | |
| Msg-id | 20150907.180803.182409165.horiguchi.kyotaro@lab.ntt.co.jp Whole thread Raw |
| In response to | Re: Foreign join pushdown vs EvalPlanQual (Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>) |
| List | pgsql-hackers |
Hello, sorry in advance for possible brought up of past
discussions or pointless discussion.
> I'm attaching an updated version of the patch. The patch is based on
> the SS_finalize_plan patch that has been recently committed. I'd be
> happy if this helps people discuss more about how to fix this issue.
The two patches make a good contrast to clarify the problem for
me, maybe.
> > code in ExecInitForeignScan, ExecForeignScan, ExecEndForeignScan, and
> > ExecReScanForeignScan. I think that would resolve the name problem
> > also.
I found two points in this discussion.
1. Where (or When) to initialize a foreign/custom scan node for recheck.
Having a new list to hold substitute plans in planner global (and PlannedStmt) is added, EvalPlanQualStart() looks
tobe the best place to initialize them.
Of couse it could not be a solution unless the new member and related code are not acceptable or rather
unreasonable.The possible timing left for the case would be ExecInitNode() (as v2.0) or FDW routines (as v1.0).
2. How the core informs fdw/custom scan handlers wheter it is during recheck.
In v1.0 patch, nodeForignscan.c routines detect the situation using es_epqTuple and Scan.scanrelid which the core as
is gives, and v2.0 alternatively replaces scan node implicitly (and maybe irregularly) itself on initialization. The
latter don't looks to me tidy.
I think refining v1.0 would be more desirable, and resolving the redundancy would be simply a matter of notation.
If I understand there correctly, Exec*ForeignScan() other than ExecInitForeignScan() can determine the behavior
simply looking outerPlanState(scanstate). (If we continue to use the member lefttree for the purpose..). Is it right?
anddoes it eliminate the redundancy?
ExecEndForeignScan()
{ if ((outerplan = outerPlanState(node)) != NULL) ExecEndNode(outerPlan);
...
regards,
At Fri, 04 Sep 2015 19:50:46 +0900, Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp> wrote in
<55E97786.30404@lab.ntt.co.jp>
> On 2015/09/03 19:25, Etsuro Fujita wrote:
> > On 2015/09/03 14:22, Etsuro Fujita wrote:
> >> On 2015/09/03 9:41, Robert Haas wrote:
> >>> That having been said, I don't entirely like Fujita-san's patch
> >>> either. Much of the new code is called immediately adjacent to an FDW
> >>> callback which could pretty trivially do the same thing itself, if
> >>> needed.
...
> > I gave it another thought; the following changes to ExecInitNode would
> > make the patch much simpler, ie, we would no longer need to call the
> > new
> > code in ExecInitForeignScan, ExecForeignScan, ExecEndForeignScan, and
> > ExecReScanForeignScan. I think that would resolve the name problem
> > also.
>
> I'm attaching an updated version of the patch. The patch is based on
> the SS_finalize_plan patch that has been recently committed. I'd be
> happy if this helps people discuss more about how to fix this issue.
--
Kyotaro Horiguchi
NTT Open Source Software Center
pgsql-hackers by date: