diff options
author | Andres Freund <andres@anarazel.de> | 2017-12-29 12:26:29 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2017-12-29 12:26:29 -0800 |
commit | 4717fdb14cf0a62ffe1b1023e1c5ea8866e34fa0 (patch) | |
tree | aff7d9798c1d056d1c253bccd9a8bdc242c733f7 /src/backend/executor/nodeModifyTable.c | |
parent | d02974e32e028fc078d8f5eca1d6a4516efb0aa6 (diff) | |
download | postgresql-4717fdb14cf0a62ffe1b1023e1c5ea8866e34fa0.tar.gz postgresql-4717fdb14cf0a62ffe1b1023e1c5ea8866e34fa0.zip |
Rely on executor utils to build targetlist for DML RETURNING.
This is useful because it gets rid of the sole direct user of
ExecAssignResultType(). A future commit will likely make use of that
and combine creating the targetlist with the initialization of the
result slot. But it seems like good code hygiene anyway.
Author: Andres Freund
Discussion: https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de
Diffstat (limited to 'src/backend/executor/nodeModifyTable.c')
-rw-r--r-- | src/backend/executor/nodeModifyTable.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index afb83ed3ae1..82cd4462a3e 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -1828,7 +1828,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) int nplans = list_length(node->plans); ResultRelInfo *saved_resultRelInfo; ResultRelInfo *resultRelInfo; - TupleDesc tupDesc; Plan *subplan; ListCell *l; int i; @@ -2068,12 +2067,11 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) * Initialize result tuple slot and assign its rowtype using the first * RETURNING list. We assume the rest will look the same. */ - tupDesc = ExecTypeFromTL((List *) linitial(node->returningLists), - false); + mtstate->ps.plan->targetlist = (List *) linitial(node->returningLists); /* Set up a slot for the output of the RETURNING projection(s) */ ExecInitResultTupleSlot(estate, &mtstate->ps); - ExecAssignResultType(&mtstate->ps, tupDesc); + ExecAssignResultTypeFromTL(&mtstate->ps); slot = mtstate->ps.ps_ResultTupleSlot; /* Need an econtext too */ @@ -2126,9 +2124,9 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) * We still must construct a dummy result tuple type, because InitPlan * expects one (maybe should change that?). */ - tupDesc = ExecTypeFromTL(NIL, false); + mtstate->ps.plan->targetlist = NIL; ExecInitResultTupleSlot(estate, &mtstate->ps); - ExecAssignResultType(&mtstate->ps, tupDesc); + ExecAssignResultTypeFromTL(&mtstate->ps); mtstate->ps.ps_ExprContext = NULL; } |