Allow FDWs to push down quals without breaking EvalPlanQual rechecks.

Robert Haas <rhaas@postgresql.org>

Commit: 5043193b78919a1bd144563aadc2f7f726549913
Author: Robert Haas <rhaas@postgresql.org>
Date: 2015-10-15T17:10:39Z
Releases: 9.5.0
Allow FDWs to push down quals without breaking EvalPlanQual rechecks.

This fixes a long-standing bug which was discovered while investigating
the interaction between the new join pushdown code and the EvalPlanQual
machinery: if a ForeignScan appears on the inner side of a paramaterized
nestloop, an EPQ recheck would re-return the original tuple even if
it no longer satisfied the pushed-down quals due to changed parameter
values.

This fix adds a new member to ForeignScan and ForeignScanState and a
new argument to make_foreignscan, and requires changes to FDWs which
push down quals to populate that new argument with a list of quals they
have chosen to push down.  Therefore, I'm only back-patching to 9.5,
even though the bug is not new in 9.5.

Etsuro Fujita, reviewed by me and by Kyotaro Horiguchi.

Files