From ce6e2fada0243f925e191a62eedf90f5919525f3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 14 Jan 2005 16:25:42 +0000 Subject: [PATCH] plperl trigger handler tried to fetch new/old tuples even when fired as a statement trigger :-(. Per report from Sokolov Yura. --- src/pl/plperl/plperl.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c index a88411e851..2167f3f548 100644 --- a/src/pl/plperl/plperl.c +++ b/src/pl/plperl/plperl.c @@ -33,7 +33,7 @@ * ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.66 2005/01/11 06:08:45 tgl Exp $ + * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.67 2005/01/14 16:25:42 tgl Exp $ * **********************************************************************/ @@ -338,35 +338,39 @@ plperl_trigger_build_args(FunctionCallInfo fcinfo) if (TRIGGER_FIRED_BY_INSERT(tdata->tg_event)) { event = "INSERT"; - hv_store(hv, "new", 3, - plperl_hash_from_tuple(tdata->tg_trigtuple, tupdesc), - 0); + if (TRIGGER_FIRED_FOR_ROW(tdata->tg_event)) + hv_store(hv, "new", 3, + plperl_hash_from_tuple(tdata->tg_trigtuple, tupdesc), + 0); } else if (TRIGGER_FIRED_BY_DELETE(tdata->tg_event)) { event = "DELETE"; - hv_store(hv, "old", 3, - plperl_hash_from_tuple(tdata->tg_trigtuple, tupdesc), - 0); + if (TRIGGER_FIRED_FOR_ROW(tdata->tg_event)) + hv_store(hv, "old", 3, + plperl_hash_from_tuple(tdata->tg_trigtuple, tupdesc), + 0); } else if (TRIGGER_FIRED_BY_UPDATE(tdata->tg_event)) { event = "UPDATE"; - hv_store(hv, "old", 3, - plperl_hash_from_tuple(tdata->tg_trigtuple, tupdesc), - 0); - hv_store(hv, "new", 3, - plperl_hash_from_tuple(tdata->tg_newtuple, tupdesc), - 0); + if (TRIGGER_FIRED_FOR_ROW(tdata->tg_event)) + { + hv_store(hv, "old", 3, + plperl_hash_from_tuple(tdata->tg_trigtuple, tupdesc), + 0); + hv_store(hv, "new", 3, + plperl_hash_from_tuple(tdata->tg_newtuple, tupdesc), + 0); + } } - else { + else event = "UNKNOWN"; - } hv_store(hv, "event", 5, newSVpv(event, 0), 0); hv_store(hv, "argc", 4, newSViv(tdata->tg_trigger->tgnargs), 0); - if (tdata->tg_trigger->tgnargs != 0) + if (tdata->tg_trigger->tgnargs > 0) { AV *av = newAV(); for (i=0; i < tdata->tg_trigger->tgnargs; i++) -- GitLab