Andrew Dunstan wrote:
>
> The attached patch moves a plperl sanity check into the correct
> position. Performing the check in the existing position allows the call
> to go through to perl first, possibly resulting in a SEGV.
OK, patch applied. Your version didn't apply cleanly so I just moved
the block manually.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: src/pl/plperl/plperl.c
===================================================================
RCS file: /cvsroot/pgsql/src/pl/plperl/plperl.c,v
retrieving revision 1.86
diff -c -c -r1.86 plperl.c
*** src/pl/plperl/plperl.c 12 Jul 2005 20:35:42 -0000 1.86
--- src/pl/plperl/plperl.c 12 Aug 2005 20:45:56 -0000
***************
*** 921,926 ****
--- 921,936 ----
plperl_current_tuple_store = 0;
plperl_current_tuple_desc = 0;
+ if (!rsi || !IsA(rsi, ReturnSetInfo) ||
+ (rsi->allowedModes & SFRM_Materialize) == 0 ||
+ rsi->expectedDesc == NULL)
+ {
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("set-valued function called in context that "
+ "cannot accept a set")));
+ }
+
perlret = plperl_call_perl_func(prodesc, fcinfo);
/************************************************************
***************
*** 936,951 ****
if (prodesc->fn_retisset)
{
- if (!rsi || !IsA(rsi, ReturnSetInfo) ||
- (rsi->allowedModes & SFRM_Materialize) == 0 ||
- rsi->expectedDesc == NULL)
- {
- ereport(ERROR,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("set-valued function called in context that "
- "cannot accept a set")));
- }
-
/* If the Perl function returned an arrayref, we pretend that it
* called return_next() for each element of the array, to handle
* old SRFs that didn't know about return_next(). Any other sort
--- 946,951 ----