Changes:

    Sets the local $_TD via C instead of passing an extra argument.
    So functions no longer start with "our $_TD; local $_TD = shift;"

    Pre-extend stack for trigger arguments for slight performance gain.

Passes installcheck.

Tim.
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 5595baa..a924cfd 100644
*** a/src/pl/plperl/plperl.c
--- b/src/pl/plperl/plperl.c
*************** plperl_create_sub(plperl_proc_desc *prod
*** 1421,1427 ****
  	EXTEND(SP, 4);
  	PUSHs(sv_2mortal(newSVstring(subname)));
  	PUSHs(sv_2mortal(newRV_noinc((SV *) pragma_hv)));
! 	PUSHs(sv_2mortal(newSVstring("our $_TD; local $_TD=shift;")));
  	PUSHs(sv_2mortal(newSVstring(s)));
  	PUTBACK;
  
--- 1421,1427 ----
  	EXTEND(SP, 4);
  	PUSHs(sv_2mortal(newSVstring(subname)));
  	PUSHs(sv_2mortal(newRV_noinc((SV *) pragma_hv)));
! 	PUSHs(&PL_sv_no); /* unused */
  	PUSHs(sv_2mortal(newSVstring(s)));
  	PUTBACK;
  
*************** plperl_call_perl_func(plperl_proc_desc *
*** 1495,1502 ****
  	PUSHMARK(SP);
  	EXTEND(sp, 1 + desc->nargs);
  
- 	PUSHs(&PL_sv_undef);		/* no trigger data */
- 
  	for (i = 0; i < desc->nargs; i++)
  	{
  		if (fcinfo->argnull[i])
--- 1495,1500 ----
*************** plperl_call_perl_trigger_func(plperl_pro
*** 1583,1595 ****
  	ENTER;
  	SAVETMPS;
  
! 	PUSHMARK(sp);
  
! 	XPUSHs(td);
  
  	tg_trigger = ((TriggerData *) fcinfo->context)->tg_trigger;
  	for (i = 0; i < tg_trigger->tgnargs; i++)
! 		XPUSHs(sv_2mortal(newSVstring(tg_trigger->tgargs[i])));
  	PUTBACK;
  
  	/* Do NOT use G_KEEPERR here */
--- 1581,1596 ----
  	ENTER;
  	SAVETMPS;
  
! 	SV *TDsv = get_sv("_TD", GV_ADD);
! 	SAVESPTR(TDsv);	/* local $_TD */
! 	sv_setsv(TDsv, td);
  
! 	PUSHMARK(sp);
! 	EXTEND(sp, 1 + tg_trigger->tgnargs);
  
  	tg_trigger = ((TriggerData *) fcinfo->context)->tg_trigger;
  	for (i = 0; i < tg_trigger->tgnargs; i++)
! 		PUSHs(sv_2mortal(newSVstring(tg_trigger->tgargs[i])));
  	PUTBACK;
  
  	/* Do NOT use G_KEEPERR here */
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to