plperl trigger handler tried to fetch new/old tuples even when fired
authorTom Lane
Fri, 14 Jan 2005 16:25:42 +0000 (16:25 +0000)
committerTom Lane
Fri, 14 Jan 2005 16:25:42 +0000 (16:25 +0000)
as a statement trigger :-(.  Per report from Sokolov Yura.

src/pl/plperl/plperl.c

index a88411e851fe512b099ac09bfd6bc81dbdb460e4..2167f3f548bd5a4f60707cc3a87572e3cefce025 100644 (file)
@@ -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++)