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