diff options
author | Andrew Gierth <rhodiumtoad@postgresql.org> | 2017-06-28 18:59:01 +0100 |
---|---|---|
committer | Andrew Gierth <rhodiumtoad@postgresql.org> | 2017-06-28 18:59:01 +0100 |
commit | c46c0e5202e8cfe750c6629db7852fdb15d528f3 (patch) | |
tree | 710f0377e15e9ddad018d53fbd09aade535136d6 /src/backend/executor/nodeModifyTable.c | |
parent | 501ed02cf6f4f60c3357775eb07578aebc912d3a (diff) | |
download | postgresql-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.c | 16 |
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 */ |