aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-12-14 00:17:59 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-12-14 00:17:59 +0000
commit2d8d66628a8ac49deba8483608135b3c358ae729 (patch)
tree95f321c5fc2035b5110317e25b0449e85065c8a5 /src/backend/executor
parent29cdab3d531b6f612ab53b93dbb34a131e9cdb1c (diff)
downloadpostgresql-2d8d66628a8ac49deba8483608135b3c358ae729.tar.gz
postgresql-2d8d66628a8ac49deba8483608135b3c358ae729.zip
Clean up plantree representation of SubPlan-s --- SubLink does not appear
in the planned representation of a subplan at all any more, only SubPlan. This means subselect.c doesn't scribble on its input anymore, which seems like a good thing; and there are no longer three different possible interpretations of a SubLink. Simplify node naming and improve comments in primnodes.h. No change to stored rules, though.
Diffstat (limited to 'src/backend/executor')
-rw-r--r--src/backend/executor/execAmi.c6
-rw-r--r--src/backend/executor/execProcnode.c16
-rw-r--r--src/backend/executor/execQual.c45
-rw-r--r--src/backend/executor/nodeSubplan.c47
4 files changed, 51 insertions, 63 deletions
diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index fa95ad6d992..c55e5ecd149 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.67 2002/12/13 19:45:52 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.68 2002/12/14 00:17:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -61,7 +61,7 @@ ExecReScan(PlanState *node, ExprContext *exprCtxt)
foreach(lst, node->initPlan)
{
- SubPlanExprState *sstate = (SubPlanExprState *) lfirst(lst);
+ SubPlanState *sstate = (SubPlanState *) lfirst(lst);
PlanState *splan = sstate->planstate;
if (splan->plan->extParam != NIL) /* don't care about child
@@ -72,7 +72,7 @@ ExecReScan(PlanState *node, ExprContext *exprCtxt)
}
foreach(lst, node->subPlan)
{
- SubPlanExprState *sstate = (SubPlanExprState *) lfirst(lst);
+ SubPlanState *sstate = (SubPlanState *) lfirst(lst);
PlanState *splan = sstate->planstate;
if (splan->plan->extParam != NIL)
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index 59c798b267a..dc5a3085ead 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -12,7 +12,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.33 2002/12/13 19:45:52 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.34 2002/12/14 00:17:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -228,10 +228,10 @@ ExecInitNode(Plan *node, EState *estate)
subps = NIL;
foreach(subp, node->initPlan)
{
- SubPlanExpr *subplan = (SubPlanExpr *) lfirst(subp);
- SubPlanExprState *sstate;
+ SubPlan *subplan = (SubPlan *) lfirst(subp);
+ SubPlanState *sstate;
- Assert(IsA(subplan, SubPlanExpr));
+ Assert(IsA(subplan, SubPlan));
sstate = ExecInitExprInitPlan(subplan, result);
ExecInitSubPlan(sstate, estate);
subps = lappend(subps, sstate);
@@ -247,9 +247,9 @@ ExecInitNode(Plan *node, EState *estate)
subps = NIL;
foreach(subp, result->subPlan)
{
- SubPlanExprState *sstate = (SubPlanExprState *) lfirst(subp);
+ SubPlanState *sstate = (SubPlanState *) lfirst(subp);
- Assert(IsA(sstate, SubPlanExprState));
+ Assert(IsA(sstate, SubPlanState));
ExecInitSubPlan(sstate, estate);
subps = lappend(subps, sstate);
}
@@ -500,9 +500,9 @@ ExecEndNode(PlanState *node)
/* Clean up initPlans and subPlans */
foreach(subp, node->initPlan)
- ExecEndSubPlan((SubPlanExprState *) lfirst(subp));
+ ExecEndSubPlan((SubPlanState *) lfirst(subp));
foreach(subp, node->subPlan)
- ExecEndSubPlan((SubPlanExprState *) lfirst(subp));
+ ExecEndSubPlan((SubPlanState *) lfirst(subp));
if (node->chgParam != NIL)
{
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index b529d045c4d..a3f79c3ac80 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.119 2002/12/13 19:45:52 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.120 2002/12/14 00:17:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1794,8 +1794,8 @@ ExecEvalExpr(ExprState *expression,
}
break;
}
- case T_SubPlanExpr:
- retDatum = ExecSubPlan((SubPlanExprState *) expression,
+ case T_SubPlan:
+ retDatum = ExecSubPlan((SubPlanState *) expression,
econtext,
isNull);
break;
@@ -1883,7 +1883,7 @@ ExecEvalExprSwitchContext(ExprState *expression,
* executions of the expression are needed. Typically the context will be
* the same as the per-query context of the associated ExprContext.
*
- * Any Aggref and SubplanExpr nodes found in the tree are added to the lists
+ * Any Aggref and SubPlan nodes found in the tree are added to the lists
* of such nodes held by the parent PlanState. Otherwise, we do very little
* initialization here other than building the state-node tree. Any nontrivial
* work associated with initializing runtime info for a node should happen
@@ -2003,31 +2003,26 @@ ExecInitExpr(Expr *node, PlanState *parent)
state = (ExprState *) bstate;
}
break;
- case T_SubPlanExpr:
+ case T_SubPlan:
{
/* Keep this in sync with ExecInitExprInitPlan, below */
- SubPlanExpr *subplanexpr = (SubPlanExpr *) node;
- SubLink *sublink = subplanexpr->sublink;
- SubPlanExprState *sstate = makeNode(SubPlanExprState);
+ SubPlan *subplan = (SubPlan *) node;
+ SubPlanState *sstate = makeNode(SubPlanState);
- Assert(IsA(sublink, SubLink));
if (!parent)
- elog(ERROR, "ExecInitExpr: SubPlanExpr not expected here");
+ elog(ERROR, "ExecInitExpr: SubPlan not expected here");
/*
- * Here we just add the SubPlanExprState nodes to
+ * Here we just add the SubPlanState nodes to
* parent->subPlan. The subplans will be initialized later.
*/
parent->subPlan = lcons(sstate, parent->subPlan);
sstate->planstate = NULL;
- sstate->args = (List *)
- ExecInitExpr((Expr *) subplanexpr->args, parent);
-
- if (sublink->lefthand)
- elog(ERROR, "ExecInitExpr: sublink has not been transformed");
sstate->oper = (List *)
- ExecInitExpr((Expr *) sublink->oper, parent);
+ ExecInitExpr((Expr *) subplan->oper, parent);
+ sstate->args = (List *)
+ ExecInitExpr((Expr *) subplan->args, parent);
state = (ExprState *) sstate;
}
@@ -2145,26 +2140,20 @@ ExecInitExpr(Expr *node, PlanState *parent)
* subplan expr, except we do NOT want to add the node to the parent's
* subplan list.
*/
-SubPlanExprState *
-ExecInitExprInitPlan(SubPlanExpr *node, PlanState *parent)
+SubPlanState *
+ExecInitExprInitPlan(SubPlan *node, PlanState *parent)
{
- SubLink *sublink = node->sublink;
- SubPlanExprState *sstate = makeNode(SubPlanExprState);
+ SubPlanState *sstate = makeNode(SubPlanState);
- Assert(IsA(sublink, SubLink));
if (!parent)
- elog(ERROR, "ExecInitExpr: SubPlanExpr not expected here");
+ elog(ERROR, "ExecInitExpr: SubPlan not expected here");
/* The subplan's state will be initialized later */
sstate->planstate = NULL;
+ sstate->oper = (List *) ExecInitExpr((Expr *) node->oper, parent);
sstate->args = (List *) ExecInitExpr((Expr *) node->args, parent);
- if (sublink->lefthand)
- elog(ERROR, "ExecInitExpr: sublink has not been transformed");
-
- sstate->oper = (List *) ExecInitExpr((Expr *) sublink->oper, parent);
-
sstate->xprstate.expr = (Expr *) node;
return sstate;
diff --git a/src/backend/executor/nodeSubplan.c b/src/backend/executor/nodeSubplan.c
index 69fcc58e079..3a2ca974aee 100644
--- a/src/backend/executor/nodeSubplan.c
+++ b/src/backend/executor/nodeSubplan.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v 1.37 2002/12/13 19:45:55 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v 1.38 2002/12/14 00:17:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -30,15 +30,14 @@
* ----------------------------------------------------------------
*/
Datum
-ExecSubPlan(SubPlanExprState *node,
+ExecSubPlan(SubPlanState *node,
ExprContext *econtext,
bool *isNull)
{
+ SubPlan *subplan = (SubPlan *) node->xprstate.expr;
PlanState *planstate = node->planstate;
- SubPlanExpr *subplan = (SubPlanExpr *) node->xprstate.expr;
- SubLink *sublink = subplan->sublink;
- SubLinkType subLinkType = sublink->subLinkType;
- bool useor = sublink->useor;
+ SubLinkType subLinkType = subplan->subLinkType;
+ bool useor = subplan->useor;
MemoryContext oldcontext;
TupleTableSlot *slot;
Datum result;
@@ -292,56 +291,56 @@ ExecSubPlan(SubPlanExprState *node,
* ----------------------------------------------------------------
*/
void
-ExecInitSubPlan(SubPlanExprState *sstate, EState *estate)
+ExecInitSubPlan(SubPlanState *node, EState *estate)
{
- SubPlanExpr *expr = (SubPlanExpr *) sstate->xprstate.expr;
+ SubPlan *subplan = (SubPlan *) node->xprstate.expr;
EState *sp_estate;
/*
* Do access checking on the rangetable entries in the subquery.
* Here, we assume the subquery is a SELECT.
*/
- ExecCheckRTPerms(expr->rtable, CMD_SELECT);
+ ExecCheckRTPerms(subplan->rtable, CMD_SELECT);
/*
* initialize state
*/
- sstate->needShutdown = false;
- sstate->curTuple = NULL;
+ node->needShutdown = false;
+ node->curTuple = NULL;
/*
* create an EState for the subplan
*/
sp_estate = CreateExecutorState();
- sp_estate->es_range_table = expr->rtable;
+ sp_estate->es_range_table = subplan->rtable;
sp_estate->es_param_list_info = estate->es_param_list_info;
sp_estate->es_param_exec_vals = estate->es_param_exec_vals;
sp_estate->es_tupleTable =
- ExecCreateTupleTable(ExecCountSlotsNode(expr->plan) + 10);
+ ExecCreateTupleTable(ExecCountSlotsNode(subplan->plan) + 10);
sp_estate->es_snapshot = estate->es_snapshot;
sp_estate->es_instrument = estate->es_instrument;
/*
* Start up the subplan
*/
- sstate->planstate = ExecInitNode(expr->plan, sp_estate);
+ node->planstate = ExecInitNode(subplan->plan, sp_estate);
- sstate->needShutdown = true; /* now we need to shutdown the subplan */
+ node->needShutdown = true; /* now we need to shutdown the subplan */
/*
* If this plan is un-correlated or undirect correlated one and want
* to set params for parent plan then prepare parameters.
*/
- if (expr->setParam != NIL)
+ if (subplan->setParam != NIL)
{
List *lst;
- foreach(lst, expr->setParam)
+ foreach(lst, subplan->setParam)
{
ParamExecData *prm = &(estate->es_param_exec_vals[lfirsti(lst)]);
- prm->execPlan = sstate;
+ prm->execPlan = node;
}
/*
@@ -366,11 +365,11 @@ ExecInitSubPlan(SubPlanExprState *sstate, EState *estate)
* ----------------------------------------------------------------
*/
void
-ExecSetParamPlan(SubPlanExprState *node, ExprContext *econtext)
+ExecSetParamPlan(SubPlanState *node, ExprContext *econtext)
{
+ SubPlan *subplan = (SubPlan *) node->xprstate.expr;
PlanState *planstate = node->planstate;
- SubPlanExpr *subplan = (SubPlanExpr *) node->xprstate.expr;
- SubLinkType subLinkType = subplan->sublink->subLinkType;
+ SubLinkType subLinkType = subplan->subLinkType;
MemoryContext oldcontext;
TupleTableSlot *slot;
List *lst;
@@ -473,7 +472,7 @@ ExecSetParamPlan(SubPlanExprState *node, ExprContext *econtext)
* ----------------------------------------------------------------
*/
void
-ExecEndSubPlan(SubPlanExprState *node)
+ExecEndSubPlan(SubPlanState *node)
{
if (node->needShutdown)
{
@@ -488,10 +487,10 @@ ExecEndSubPlan(SubPlanExprState *node)
}
void
-ExecReScanSetParamPlan(SubPlanExprState *node, PlanState *parent)
+ExecReScanSetParamPlan(SubPlanState *node, PlanState *parent)
{
PlanState *planstate = node->planstate;
- SubPlanExpr *subplan = (SubPlanExpr *) node->xprstate.expr;
+ SubPlan *subplan = (SubPlan *) node->xprstate.expr;
EState *estate = parent->state;
List *lst;