aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeModifyTable.c
diff options
context:
space:
mode:
authorAndrew Gierth <rhodiumtoad@postgresql.org>2017-06-28 18:59:01 +0100
committerAndrew Gierth <rhodiumtoad@postgresql.org>2017-06-28 18:59:01 +0100
commitc46c0e5202e8cfe750c6629db7852fdb15d528f3 (patch)
tree710f0377e15e9ddad018d53fbd09aade535136d6 /src/backend/executor/nodeModifyTable.c
parent501ed02cf6f4f60c3357775eb07578aebc912d3a (diff)
downloadpostgresql-c46c0e5202e8cfe750c6629db7852fdb15d528f3.tar.gz
postgresql-c46c0e5202e8cfe750c6629db7852fdb15d528f3.zip
Fix transition tables for wCTEs.
The original coding didn't handle this case properly; each separate DML substatement needs its own set of transitions. Patch by Thomas Munro Discussion: https://postgr.es/m/CAL9smLCDQ%3D2o024rBgtD4WihzX8B3C6u_oSQ2K3%2BR5grJrV0bg%40mail.gmail.com
Diffstat (limited to 'src/backend/executor/nodeModifyTable.c')
-rw-r--r--src/backend/executor/nodeModifyTable.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c
index f2534f20622..8d17425abea 100644
--- a/src/backend/executor/nodeModifyTable.c
+++ b/src/backend/executor/nodeModifyTable.c
@@ -1442,14 +1442,18 @@ fireASTriggers(ModifyTableState *node)
case CMD_INSERT:
if (node->mt_onconflict == ONCONFLICT_UPDATE)
ExecASUpdateTriggers(node->ps.state,
- resultRelInfo);
- ExecASInsertTriggers(node->ps.state, resultRelInfo);
+ resultRelInfo,
+ node->mt_transition_capture);
+ ExecASInsertTriggers(node->ps.state, resultRelInfo,
+ node->mt_transition_capture);
break;
case CMD_UPDATE:
- ExecASUpdateTriggers(node->ps.state, resultRelInfo);
+ ExecASUpdateTriggers(node->ps.state, resultRelInfo,
+ node->mt_transition_capture);
break;
case CMD_DELETE:
- ExecASDeleteTriggers(node->ps.state, resultRelInfo);
+ ExecASDeleteTriggers(node->ps.state, resultRelInfo,
+ node->mt_transition_capture);
break;
default:
elog(ERROR, "unknown operation");
@@ -2304,6 +2308,10 @@ ExecEndModifyTable(ModifyTableState *node)
{
int i;
+ /* Free transition tables */
+ if (node->mt_transition_capture != NULL)
+ DestroyTransitionCaptureState(node->mt_transition_capture);
+
/*
* Allow any FDWs to shut down
*/