diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-14 00:17:59 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-14 00:17:59 +0000 |
commit | 2d8d66628a8ac49deba8483608135b3c358ae729 (patch) | |
tree | 95f321c5fc2035b5110317e25b0449e85065c8a5 /src/backend/executor | |
parent | 29cdab3d531b6f612ab53b93dbb34a131e9cdb1c (diff) | |
download | postgresql-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.c | 6 | ||||
-rw-r--r-- | src/backend/executor/execProcnode.c | 16 | ||||
-rw-r--r-- | src/backend/executor/execQual.c | 45 | ||||
-rw-r--r-- | src/backend/executor/nodeSubplan.c | 47 |
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; |