mirror of
https://github.com/postgres/postgres.git
synced 2025-11-12 05:01:15 +03:00
Error message editing in backend/utils (except /adt).
This commit is contained in:
@@ -311,7 +311,7 @@ the target function); they will just set it NULL. This is unlikely to
|
||||
bother any built-in function that could be called this way. Note also
|
||||
that this style of coding cannot pass a NULL input value nor cope with
|
||||
a NULL result (it couldn't before, either!). We can make the helper
|
||||
routines elog an error if they see that the function returns a NULL.
|
||||
routines ereport an error if they see that the function returns a NULL.
|
||||
|
||||
When invoking a function that has a known argument signature, we have
|
||||
usually written either
|
||||
@@ -395,7 +395,7 @@ to a bitmask that's the OR of the modes the caller can support. The actual
|
||||
mode used by the function is returned in another field "returnMode". For
|
||||
backwards-compatibility reasons, returnMode is initialized to value-per-call
|
||||
and need only be changed if the function wants to use a different mode.
|
||||
The function should elog() if it cannot use any of the modes the caller is
|
||||
The function should ereport() if it cannot use any of the modes the caller is
|
||||
willing to support.
|
||||
|
||||
Value-per-call mode works like this: ReturnSetInfo contains a field
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.72 2003/07/01 00:04:38 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.73 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -186,8 +186,7 @@ fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt,
|
||||
ObjectIdGetDatum(functionId),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(procedureTuple))
|
||||
elog(ERROR, "fmgr_info: function %u: cache lookup failed",
|
||||
functionId);
|
||||
elog(ERROR, "cache lookup failed for function %u", functionId);
|
||||
procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple);
|
||||
|
||||
finfo->fn_nargs = procedureStruct->pronargs;
|
||||
@@ -219,8 +218,10 @@ fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt,
|
||||
PointerGetDatum(&procedureStruct->prosrc)));
|
||||
fbp = fmgr_lookupByName(prosrc);
|
||||
if (fbp == NULL)
|
||||
elog(ERROR, "fmgr_info: function %s not in internal table",
|
||||
prosrc);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_FUNCTION),
|
||||
errmsg("internal function \"%s\" is not in table",
|
||||
prosrc)));
|
||||
pfree(prosrc);
|
||||
/* Should we check that nargs, strict, retset match the table? */
|
||||
finfo->fn_addr = fbp->func;
|
||||
@@ -266,15 +267,13 @@ fmgr_info_C_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
|
||||
prosrcattr = SysCacheGetAttr(PROCOID, procedureTuple,
|
||||
Anum_pg_proc_prosrc, &isnull);
|
||||
if (isnull)
|
||||
elog(ERROR, "fmgr: Could not extract prosrc for %u from pg_proc",
|
||||
functionId);
|
||||
elog(ERROR, "null prosrc for function %u", functionId);
|
||||
prosrcstring = DatumGetCString(DirectFunctionCall1(textout, prosrcattr));
|
||||
|
||||
probinattr = SysCacheGetAttr(PROCOID, procedureTuple,
|
||||
Anum_pg_proc_probin, &isnull);
|
||||
if (isnull)
|
||||
elog(ERROR, "fmgr: Could not extract probin for %u from pg_proc",
|
||||
functionId);
|
||||
elog(ERROR, "null probin for function %u", functionId);
|
||||
probinstring = DatumGetCString(DirectFunctionCall1(textout, probinattr));
|
||||
|
||||
/* Look up the function itself */
|
||||
@@ -306,7 +305,7 @@ fmgr_info_C_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
|
||||
break;
|
||||
default:
|
||||
/* Shouldn't get here if fetch_finfo_record did its job */
|
||||
elog(ERROR, "Unknown function API version %d",
|
||||
elog(ERROR, "unrecognized function API version: %d",
|
||||
inforec->api_version);
|
||||
break;
|
||||
}
|
||||
@@ -332,8 +331,7 @@ fmgr_info_other_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
|
||||
ObjectIdGetDatum(language),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(languageTuple))
|
||||
elog(ERROR, "fmgr_info: cache lookup for language %u failed",
|
||||
language);
|
||||
elog(ERROR, "cache lookup failed for language %u", language);
|
||||
languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
|
||||
|
||||
fmgr_info(languageStruct->lanplcallfoid, &plfinfo);
|
||||
@@ -345,8 +343,7 @@ fmgr_info_other_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
|
||||
* oldstyle PL handlers.
|
||||
*/
|
||||
if (plfinfo.fn_extra != NULL)
|
||||
elog(ERROR, "fmgr_info: language %u has old-style handler",
|
||||
language);
|
||||
elog(ERROR, "language %u has old-style handler", language);
|
||||
|
||||
ReleaseSysCache(languageTuple);
|
||||
}
|
||||
@@ -393,7 +390,7 @@ fetch_finfo_record(void *filehandle, char *funcname)
|
||||
|
||||
/* Validate result as best we can */
|
||||
if (inforec == NULL)
|
||||
elog(ERROR, "Null result from %s", infofuncname);
|
||||
elog(ERROR, "null result from info function \"%s\"", infofuncname);
|
||||
switch (inforec->api_version)
|
||||
{
|
||||
case 0:
|
||||
@@ -401,8 +398,10 @@ fetch_finfo_record(void *filehandle, char *funcname)
|
||||
/* OK, no additional fields to validate */
|
||||
break;
|
||||
default:
|
||||
elog(ERROR, "Unknown version %d reported by %s",
|
||||
inforec->api_version, infofuncname);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("unrecognized API version %d reported by info function \"%s\"",
|
||||
inforec->api_version, infofuncname)));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -469,7 +468,7 @@ fmgr_oldstyle(PG_FUNCTION_ARGS)
|
||||
char *returnValue;
|
||||
|
||||
if (fcinfo->flinfo == NULL || fcinfo->flinfo->fn_extra == NULL)
|
||||
elog(ERROR, "Internal error: fmgr_oldstyle received NULL pointer");
|
||||
elog(ERROR, "fmgr_oldstyle received NULL pointer");
|
||||
fnextra = (Oldstyle_fnextra *) fcinfo->flinfo->fn_extra;
|
||||
|
||||
/*
|
||||
@@ -618,8 +617,10 @@ fmgr_oldstyle(PG_FUNCTION_ARGS)
|
||||
* needed to support old-style functions with many arguments,
|
||||
* but making 'em be new-style is probably a better idea.
|
||||
*/
|
||||
elog(ERROR, "fmgr_oldstyle: function %u: too many arguments (%d > %d)",
|
||||
fcinfo->flinfo->fn_oid, n_arguments, 16);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_TOO_MANY_ARGUMENTS),
|
||||
errmsg("function %u has too many arguments (%d > %d)",
|
||||
fcinfo->flinfo->fn_oid, n_arguments, 16)));
|
||||
returnValue = NULL; /* keep compiler quiet */
|
||||
break;
|
||||
}
|
||||
@@ -663,9 +664,11 @@ fmgr_security_definer(PG_FUNCTION_ARGS)
|
||||
fmgr_info_cxt_security(fcinfo->flinfo->fn_oid, &fcache->flinfo,
|
||||
fcinfo->flinfo->fn_mcxt, true);
|
||||
|
||||
tuple = SearchSysCache(PROCOID, ObjectIdGetDatum(fcinfo->flinfo->fn_oid), 0, 0, 0);
|
||||
tuple = SearchSysCache(PROCOID,
|
||||
ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
elog(ERROR, "fmgr_security_definer: function %u: cache lookup failed",
|
||||
elog(ERROR, "cache lookup failed for function %u",
|
||||
fcinfo->flinfo->fn_oid);
|
||||
fcache->userid = ((Form_pg_proc) GETSTRUCT(tuple))->proowner;
|
||||
ReleaseSysCache(tuple);
|
||||
@@ -727,8 +730,7 @@ DirectFunctionCall1(PGFunction func, Datum arg1)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall1: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -755,8 +757,7 @@ DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall2: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -778,8 +779,7 @@ DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall3: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -802,8 +802,7 @@ DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall4: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -827,8 +826,7 @@ DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall5: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -854,8 +852,7 @@ DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall6: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -882,8 +879,7 @@ DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall7: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -911,8 +907,7 @@ DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall8: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -942,8 +937,7 @@ DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "DirectFunctionCall9: function %p returned NULL",
|
||||
(void *) func);
|
||||
elog(ERROR, "function %p returned NULL", (void *) func);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -973,8 +967,7 @@ FunctionCall1(FmgrInfo *flinfo, Datum arg1)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall1: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1001,8 +994,7 @@ FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall2: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1025,8 +1017,7 @@ FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall3: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1050,8 +1041,7 @@ FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall4: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1076,8 +1066,7 @@ FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall5: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1104,8 +1093,7 @@ FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall6: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1133,8 +1121,7 @@ FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall7: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1163,8 +1150,7 @@ FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall8: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1195,8 +1181,7 @@ FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "FunctionCall9: function %u returned NULL",
|
||||
fcinfo.flinfo->fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1226,8 +1211,7 @@ OidFunctionCall1(Oid functionId, Datum arg1)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall1: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1251,8 +1235,7 @@ OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall2: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1278,8 +1261,7 @@ OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall3: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1306,8 +1288,7 @@ OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall4: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1335,8 +1316,7 @@ OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall5: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1366,8 +1346,7 @@ OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall6: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1398,8 +1377,7 @@ OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall7: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1431,8 +1409,7 @@ OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall8: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1466,8 +1443,7 @@ OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2,
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "OidFunctionCall9: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1505,8 +1481,10 @@ fmgr(Oid procedureId,...)
|
||||
int i;
|
||||
|
||||
if (n_arguments > FUNC_MAX_ARGS)
|
||||
elog(ERROR, "fmgr: function %u: too many arguments (%d > %d)",
|
||||
flinfo.fn_oid, n_arguments, FUNC_MAX_ARGS);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_TOO_MANY_ARGUMENTS),
|
||||
errmsg("function %u has too many arguments (%d > %d)",
|
||||
flinfo.fn_oid, n_arguments, FUNC_MAX_ARGS)));
|
||||
va_start(pvar, procedureId);
|
||||
for (i = 0; i < n_arguments; i++)
|
||||
fcinfo.arg[i] = (Datum) va_arg(pvar, char *);
|
||||
@@ -1517,8 +1495,7 @@ fmgr(Oid procedureId,...)
|
||||
|
||||
/* Check for null result, since caller is clearly not expecting one */
|
||||
if (fcinfo.isnull)
|
||||
elog(ERROR, "fmgr: function %u returned NULL",
|
||||
flinfo.fn_oid);
|
||||
elog(ERROR, "function %u returned NULL", flinfo.fn_oid);
|
||||
|
||||
return (char *) result;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Copyright (c) 2002, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/funcapi.c,v 1.6 2002/09/04 20:31:30 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/funcapi.c,v 1.7 2003/07/25 20:17:52 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -33,7 +33,9 @@ init_MultiFuncCall(PG_FUNCTION_ARGS)
|
||||
* Bail if we're called in the wrong context
|
||||
*/
|
||||
if (fcinfo->resultinfo == NULL || !IsA(fcinfo->resultinfo, ReturnSetInfo))
|
||||
elog(ERROR, "function called in context that does not accept a set result");
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("set function called in context that does not accept a set result")));
|
||||
|
||||
if (fcinfo->flinfo->fn_extra == NULL)
|
||||
{
|
||||
@@ -63,8 +65,8 @@ init_MultiFuncCall(PG_FUNCTION_ARGS)
|
||||
fcinfo->flinfo->fn_extra = retval;
|
||||
}
|
||||
else
|
||||
/* second and subsequent calls */
|
||||
{
|
||||
/* second and subsequent calls */
|
||||
elog(ERROR, "init_MultiFuncCall may not be called more than once");
|
||||
|
||||
/* never reached, but keep compiler happy */
|
||||
|
||||
Reference in New Issue
Block a user