Add FunctionOidExtended function

pull/2533/head
velioglu 2018-12-10 11:59:41 +03:00
parent 4af40eee76
commit 3e0cff94a6
2 changed files with 27 additions and 4 deletions

View File

@ -18,11 +18,27 @@
#endif
/*
* FunctionOid looks for a function that has the given name and the given number
* of arguments, and returns the corresponding function's oid.
* FunctionOid searches for a function that has the given name and the given
* number of arguments, and returns the corresponding function's oid. The
* function reports error if the target function is not found, or it found more
* matching instances.
*/
Oid
FunctionOid(const char *schemaName, const char *functionName, int argumentCount)
{
return FunctionOidExtended(schemaName, functionName, argumentCount, false);
}
/*
* FunctionOidExtended searches for a given function identified by schema,
* functionName, and argumentCount. It reports error if the function is not
* found or there are more than one match. If the missingOK parameter is set
* and there are no matches, then the function returns InvalidOid.
*/
Oid
FunctionOidExtended(const char *schemaName, const char *functionName, int argumentCount,
bool missingOK)
{
FuncCandidateList functionList = NULL;
Oid functionOid = InvalidOid;
@ -32,14 +48,18 @@ FunctionOid(const char *schemaName, const char *functionName, int argumentCount)
List *argumentList = NIL;
const bool findVariadics = false;
const bool findDefaults = false;
const bool missingOK = true;
functionList = FuncnameGetCandidates(qualifiedFunctionNameList, argumentCount,
argumentList, findVariadics,
findDefaults, missingOK);
findDefaults, true);
if (functionList == NULL)
{
if (missingOK)
{
return InvalidOid;
}
ereport(ERROR, (errcode(ERRCODE_UNDEFINED_FUNCTION),
errmsg("function \"%s\" does not exist", functionName)));
}
@ -51,6 +71,7 @@ FunctionOid(const char *schemaName, const char *functionName, int argumentCount)
/* get function oid from function list's head */
functionOid = functionList->oid;
return functionOid;
}

View File

@ -14,5 +14,7 @@
/* Function declaration for getting oid for the given function name */
extern Oid FunctionOid(const char *schemaName, const char *functionName,
int argumentCount);
extern Oid FunctionOidExtended(const char *schemaName, const char *functionName, int
argumentCount, bool missingOK);
extern ReturnSetInfo * FunctionCallGetTupleStore1(PGFunction function, Oid functionId,
Datum argument);