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
Следующее
От: Josh Berkus
Дата:
Сообщение: Re: [pgsql-bugs] Daily digest v1.1341 (25 messages)