Commit 081a6048 authored by Tom Lane's avatar Tom Lane

Fix another oversight in CustomScan patch.

execCurrent.c's search_plan_tree() must recognize a CustomScan on the
target relation.  This would only be helpful for custom providers that
support CurrentOfExpr quals, which is probably a bit far-fetched, but
it's not impossible I think.  But even without assuming that, we need
to recognize a scanned-relation match so that we will properly throw
error if the desired relation is being scanned with both a CustomScan
and a regular scan (ie, self-join).

Also recognize ForeignScanState for similar reasons.  Supporting WHERE
CURRENT OF on a foreign table is probably even more far-fetched than
it is for custom scans, but I think in principle you could do it with
postgres_fdw (or another FDW that supports the ctid column).  This
would be a back-patchable bug fix if existing FDWs handled CurrentOfExpr,
but I doubt any do so I won't bother back-patching.
parent 03e574af
...@@ -258,13 +258,15 @@ search_plan_tree(PlanState *node, Oid table_oid) ...@@ -258,13 +258,15 @@ search_plan_tree(PlanState *node, Oid table_oid)
switch (nodeTag(node)) switch (nodeTag(node))
{ {
/* /*
* scan nodes can all be treated alike * Relation scan nodes can all be treated alike
*/ */
case T_SeqScanState: case T_SeqScanState:
case T_IndexScanState: case T_IndexScanState:
case T_IndexOnlyScanState: case T_IndexOnlyScanState:
case T_BitmapHeapScanState: case T_BitmapHeapScanState:
case T_TidScanState: case T_TidScanState:
case T_ForeignScanState:
case T_CustomScanState:
{ {
ScanState *sstate = (ScanState *) node; ScanState *sstate = (ScanState *) node;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment