summaryrefslogtreecommitdiff
path: root/src/backend/executor/execAmi.c
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2017-01-19 14:12:38 -0800
committerAndres Freund <andres@anarazel.de>2017-01-19 14:40:41 -0800
commitea15e18677fc2eff3135023e27f69ed8821554ed (patch)
treeb6a3d56b7603b96a5841681f0121171844a1c41c /src/backend/executor/execAmi.c
parent8eace46d34ab6ac0d887aa4d3504bc4222c2e448 (diff)
downloadpostgresql-ea15e18677fc2eff3135023e27f69ed8821554ed.tar.gz
Remove obsoleted code relating to targetlist SRF evaluation.
Since 69f4b9c plain expression evaluation (and thus normal projection) can't return sets of tuples anymore. Thus remove code dealing with that possibility. This will require adjustments in external code using ExecEvalExpr()/ExecProject() - that should neither be hard nor very common. Author: Andres Freund and Tom Lane Discussion: https://postgr.es/m/20160822214023.aaxz5l4igypowyri@alap3.anarazel.de
Diffstat (limited to 'src/backend/executor/execAmi.c')
-rw-r--r--src/backend/executor/execAmi.c44
1 files changed, 11 insertions, 33 deletions
diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index b52cfaa41f..1ca4bcb117 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -59,7 +59,6 @@
#include "utils/syscache.h"
-static bool TargetListSupportsBackwardScan(List *targetlist);
static bool IndexSupportsBackwardScan(Oid indexid);
@@ -120,7 +119,7 @@ ExecReScan(PlanState *node)
UpdateChangedParamSet(node->righttree, node->chgParam);
}
- /* Shut down any SRFs in the plan node's targetlist */
+ /* Call expression callbacks */
if (node->ps_ExprContext)
ReScanExprContext(node->ps_ExprContext);
@@ -460,8 +459,7 @@ ExecSupportsBackwardScan(Plan *node)
{
case T_Result:
if (outerPlan(node) != NULL)
- return ExecSupportsBackwardScan(outerPlan(node)) &&
- TargetListSupportsBackwardScan(node->targetlist);
+ return ExecSupportsBackwardScan(outerPlan(node));
else
return false;
@@ -478,13 +476,6 @@ ExecSupportsBackwardScan(Plan *node)
return true;
}
- case T_SeqScan:
- case T_TidScan:
- case T_FunctionScan:
- case T_ValuesScan:
- case T_CteScan:
- return TargetListSupportsBackwardScan(node->targetlist);
-
case T_SampleScan:
/* Simplify life for tablesample methods by disallowing this */
return false;
@@ -493,35 +484,34 @@ ExecSupportsBackwardScan(Plan *node)
return false;
case T_IndexScan:
- return IndexSupportsBackwardScan(((IndexScan *) node)->indexid) &&
- TargetListSupportsBackwardScan(node->targetlist);
+ return IndexSupportsBackwardScan(((IndexScan *) node)->indexid);
case T_IndexOnlyScan:
- return IndexSupportsBackwardScan(((IndexOnlyScan *) node)->indexid) &&
- TargetListSupportsBackwardScan(node->targetlist);
+ return IndexSupportsBackwardScan(((IndexOnlyScan *) node)->indexid);
case T_SubqueryScan:
- return ExecSupportsBackwardScan(((SubqueryScan *) node)->subplan) &&
- TargetListSupportsBackwardScan(node->targetlist);
+ return ExecSupportsBackwardScan(((SubqueryScan *) node)->subplan);
case T_CustomScan:
{
uint32 flags = ((CustomScan *) node)->flags;
- if ((flags & CUSTOMPATH_SUPPORT_BACKWARD_SCAN) &&
- TargetListSupportsBackwardScan(node->targetlist))
+ if (flags & CUSTOMPATH_SUPPORT_BACKWARD_SCAN)
return true;
}
return false;
+ case T_SeqScan:
+ case T_TidScan:
+ case T_FunctionScan:
+ case T_ValuesScan:
+ case T_CteScan:
case T_Material:
case T_Sort:
- /* these don't evaluate tlist */
return true;
case T_LockRows:
case T_Limit:
- /* these don't evaluate tlist */
return ExecSupportsBackwardScan(outerPlan(node));
default:
@@ -530,18 +520,6 @@ ExecSupportsBackwardScan(Plan *node)
}
/*
- * If the tlist contains set-returning functions, we can't support backward
- * scan, because the TupFromTlist code is direction-ignorant.
- */
-static bool
-TargetListSupportsBackwardScan(List *targetlist)
-{
- if (expression_returns_set((Node *) targetlist))
- return false;
- return true;
-}
-
-/*
* An IndexScan or IndexOnlyScan node supports backward scan only if the
* index's AM does.
*/