diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2011-08-21 18:16:08 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2011-08-21 18:16:08 -0400 |
| commit | 52120ee8346aa42d26e4c2244574df4d90f4bda6 (patch) | |
| tree | 6927a43174138a5abe84beb3f97e7de662836895 /src/include/nodes/execnodes.h | |
| parent | 706493a1f7cbd9c7d3a792fd5066b55c145b9b01 (diff) | |
Fix trigger WHEN conditions when both BEFORE and AFTER triggers exist.
Due to tuple-slot mismanagement, evaluation of WHEN conditions for AFTER
ROW UPDATE triggers could crash if there had been a BEFORE ROW trigger
fired for the same update. Fix by not trying to overload the use of
estate->es_trig_tuple_slot. Per report from Yoran Heling.
Back-patch to 9.0, when trigger WHEN conditions were introduced.
Diffstat (limited to 'src/include/nodes/execnodes.h')
| -rw-r--r-- | src/include/nodes/execnodes.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index ac0de093f16..f7a6787b55a 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -354,7 +354,7 @@ typedef struct EState /* Stuff used for firing triggers: */ List *es_trig_target_relations; /* trigger-only ResultRelInfos */ TupleTableSlot *es_trig_tuple_slot; /* for trigger output tuples */ - TupleTableSlot *es_trig_oldtup_slot; /* for trigger old tuples */ + TupleTableSlot *es_trig_oldtup_slot; /* for TriggerEnabled */ /* Parameter info: */ ParamListInfo es_param_list_info; /* values of external params */ @@ -397,6 +397,12 @@ typedef struct EState HeapTuple *es_epqTuple; /* array of EPQ substitute tuples */ bool *es_epqTupleSet; /* true if EPQ tuple is provided */ bool *es_epqScanDone; /* true if EPQ tuple has been fetched */ + + /* + * this field added at end of struct to avoid post-release ABI breakage in + * existing release branches. It'll be in a more logical place in 9.2. + */ + TupleTableSlot *es_trig_newtup_slot; /* for TriggerEnabled */ } EState; |
