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/include/commands/trigger.h | |
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/include/commands/trigger.h')
-rw-r--r-- | src/include/commands/trigger.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/include/commands/trigger.h b/src/include/commands/trigger.h index 51a25c8ddc2..06199953fe9 100644 --- a/src/include/commands/trigger.h +++ b/src/include/commands/trigger.h @@ -42,8 +42,8 @@ typedef struct TriggerData } TriggerData; /* - * Meta-data to control the capture of old and new tuples into transition - * tables from child tables. + * The state for capturing old and new tuples into transition tables for a + * single ModifyTable node. */ typedef struct TransitionCaptureState { @@ -72,6 +72,10 @@ typedef struct TransitionCaptureState * the original tuple directly. */ HeapTuple tcs_original_insert_tuple; + + /* The tuplestores backing the transition tables. */ + Tuplestorestate *tcs_old_tuplestore; + Tuplestorestate *tcs_new_tuplestore; } TransitionCaptureState; /* @@ -162,13 +166,15 @@ extern TriggerDesc *CopyTriggerDesc(TriggerDesc *trigdesc); extern const char *FindTriggerIncompatibleWithInheritance(TriggerDesc *trigdesc); extern TransitionCaptureState *MakeTransitionCaptureState(TriggerDesc *trigdesc); +extern void DestroyTransitionCaptureState(TransitionCaptureState *tcs); extern void FreeTriggerDesc(TriggerDesc *trigdesc); extern void ExecBSInsertTriggers(EState *estate, ResultRelInfo *relinfo); extern void ExecASInsertTriggers(EState *estate, - ResultRelInfo *relinfo); + ResultRelInfo *relinfo, + TransitionCaptureState *transition_capture); extern TupleTableSlot *ExecBRInsertTriggers(EState *estate, ResultRelInfo *relinfo, TupleTableSlot *slot); @@ -183,7 +189,8 @@ extern TupleTableSlot *ExecIRInsertTriggers(EState *estate, extern void ExecBSDeleteTriggers(EState *estate, ResultRelInfo *relinfo); extern void ExecASDeleteTriggers(EState *estate, - ResultRelInfo *relinfo); + ResultRelInfo *relinfo, + TransitionCaptureState *transition_capture); extern bool ExecBRDeleteTriggers(EState *estate, EPQState *epqstate, ResultRelInfo *relinfo, @@ -200,7 +207,8 @@ extern bool ExecIRDeleteTriggers(EState *estate, extern void ExecBSUpdateTriggers(EState *estate, ResultRelInfo *relinfo); extern void ExecASUpdateTriggers(EState *estate, - ResultRelInfo *relinfo); + ResultRelInfo *relinfo, + TransitionCaptureState *transition_capture); extern TupleTableSlot *ExecBRUpdateTriggers(EState *estate, EPQState *epqstate, ResultRelInfo *relinfo, |