• Robert Haas's avatar
    Allow foreign and custom joins to handle EvalPlanQual rechecks. · 385f337c
    Robert Haas authored
    Commit e7cb7ee1 provided basic
    infrastructure for allowing a foreign data wrapper or custom scan
    provider to replace a join of one or more tables with a scan.
    However, this infrastructure failed to take into account the need
    for possible EvalPlanQual rechecks, and ExecScanFetch would fail
    an assertion (or just overwrite memory) if such a check was attempted
    for a plan containing a pushed-down join.  To fix, adjust the EPQ
    machinery to skip some processing steps when scanrelid == 0, making
    those the responsibility of scan's recheck method, which also has
    the responsibility in this case of correctly populating the relevant
    slot.
    
    To allow foreign scans to gain control in the right place to make
    use of this new facility, add a new, optional RecheckForeignScan
    method.  Also, allow a foreign scan to have a child plan, which can
    be used to correctly populate the slot (or perhaps for something
    else, but this is the only use currently envisioned).
    
    KaiGai Kohei, reviewed by Robert Haas, Etsuro Fujita, and Kyotaro
    Horiguchi.
    385f337c
createplan.c 150 KB