From ce6e2fada0243f925e191a62eedf90f5919525f3 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
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 a88411e851f..2167f3f548b 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