Re: BUG #1391: Perl trusted language triggers can't properly access $_SHARED
От | Tom Lane |
---|---|
Тема | Re: BUG #1391: Perl trusted language triggers can't properly access $_SHARED |
Дата | |
Msg-id | 24097.1105720048@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | BUG #1391: Perl trusted language triggers can't properly access $_SHARED ("Sokolov Yura" <falcon@intercable.ru>) |
Список | pgsql-bugs |
"Sokolov Yura" <falcon@intercable.ru> writes: > I created triggers In Perl trusted (ActivePerl 5.8.4 build 810) and it > crashes when triggers FOR EACH STATEMENT tried to access $_SHARED when > triggers FOR EACH ROW not accessed it before Actually _SHARED had nothing to do with it: the trigger handler was trying to fetch new/old tuples even though FOR EACH STATEMENT. I've applied the attached patch. Thanks for the report! regards, tom lane *** src/pl/plperl/plperl.c.orig Tue Jan 11 10:35:22 2005 --- src/pl/plperl/plperl.c Fri Jan 14 11:19:23 2005 *************** *** 338,372 **** if (TRIGGER_FIRED_BY_INSERT(tdata->tg_event)) { event = "INSERT"; ! 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); } 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); } ! 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) { AV *av = newAV(); for (i=0; i < tdata->tg_trigger->tgnargs; i++) --- 338,376 ---- if (TRIGGER_FIRED_BY_INSERT(tdata->tg_event)) { event = "INSERT"; ! 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"; ! 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"; ! 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 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) { AV *av = newAV(); for (i=0; i < tdata->tg_trigger->tgnargs; i++)
В списке pgsql-bugs по дате отправления:
Предыдущее
От: Bruno Wolff IIIДата:
Сообщение: Re: BUG #1388: documentation/announcement suggestion