Commit 65790b9e authored by Tom Lane's avatar Tom Lane

Un-break plperl for non-set case.

parent 7d781c62
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
* ENHANCEMENTS, OR MODIFICATIONS. * ENHANCEMENTS, OR MODIFICATIONS.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.88 2005/08/12 21:09:34 momjian Exp $ * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.89 2005/08/12 21:26:32 tgl Exp $
* *
**********************************************************************/ **********************************************************************/
...@@ -923,14 +923,16 @@ plperl_func_handler(PG_FUNCTION_ARGS) ...@@ -923,14 +923,16 @@ plperl_func_handler(PG_FUNCTION_ARGS)
rsi = (ReturnSetInfo *)fcinfo->resultinfo; rsi = (ReturnSetInfo *)fcinfo->resultinfo;
if (!rsi || !IsA(rsi, ReturnSetInfo) || if (prodesc->fn_retisset)
(rsi->allowedModes & SFRM_Materialize) == 0 ||
rsi->expectedDesc == NULL)
{ {
ereport(ERROR, /* Check context before allowing the call to go through */
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), if (!rsi || !IsA(rsi, ReturnSetInfo) ||
errmsg("set-valued function called in context that " (rsi->allowedModes & SFRM_Materialize) == 0 ||
"cannot accept a set"))); 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); perlret = plperl_call_perl_func(prodesc, fcinfo);
...@@ -944,12 +946,14 @@ plperl_func_handler(PG_FUNCTION_ARGS) ...@@ -944,12 +946,14 @@ plperl_func_handler(PG_FUNCTION_ARGS)
if (SPI_finish() != SPI_OK_FINISH) if (SPI_finish() != SPI_OK_FINISH)
elog(ERROR, "SPI_finish() failed"); elog(ERROR, "SPI_finish() failed");
if (prodesc->fn_retisset) if (prodesc->fn_retisset)
{ {
/* If the Perl function returned an arrayref, we pretend that it /*
* If the Perl function returned an arrayref, we pretend that it
* called return_next() for each element of the array, to handle * called return_next() for each element of the array, to handle
* old SRFs that didn't know about return_next(). Any other sort * old SRFs that didn't know about return_next(). Any other sort
* of return value is an error. */ * of return value is an error.
*/
if (SvTYPE(perlret) == SVt_RV && if (SvTYPE(perlret) == SVt_RV &&
SvTYPE(SvRV(perlret)) == SVt_PVAV) SvTYPE(SvRV(perlret)) == SVt_PVAV)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment