58 bool ignore_security);
147 bool ignore_security)
176 finfo->
fn_oid = functionId;
183 elog(
ERROR,
"cache lookup failed for function %u", functionId);
186 finfo->
fn_nargs = procedureStruct->pronargs;
187 finfo->
fn_strict = procedureStruct->proisstrict;
188 finfo->
fn_retset = procedureStruct->proretset;
204 if (!ignore_security &&
205 (procedureStruct->prosecdef ||
211 finfo->
fn_oid = functionId;
216 switch (procedureStruct->prolang)
218 case INTERNALlanguageId:
230 Anum_pg_proc_prosrc, &isnull);
237 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
238 errmsg(
"internal function \"%s\" is not in internal lookup table",
263 finfo->
fn_oid = functionId;
293 elog(
ERROR,
"cache lookup failed for function %u", functionId);
296 if (procedureStruct->prosecdef ||
301 *fn =
pstrdup(
"fmgr_security_definer");
307 switch (procedureStruct->prolang)
309 case INTERNALlanguageId:
311 Anum_pg_proc_prosrc, &isnull);
321 Anum_pg_proc_prosrc, &isnull);
323 elog(
ERROR,
"null prosrc for C function %u", functionId);
326 Anum_pg_proc_probin, &isnull);
328 elog(
ERROR,
"null probin for C function %u", functionId);
388 Anum_pg_proc_prosrc, &isnull);
390 elog(
ERROR,
"null prosrc for C function %u", functionId);
394 Anum_pg_proc_probin, &isnull);
396 elog(
ERROR,
"null probin for C function %u", functionId);
421 elog(
ERROR,
"unrecognized function API version: %d",
435 Oid language = procedureStruct->prolang;
442 elog(
ERROR,
"cache lookup failed for language %u", language);
475 infofuncname =
psprintf(
"pg_finfo_%s", funcname);
480 if (infofunc == NULL)
483 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
484 errmsg(
"could not find function information for function \"%s\"",
486 errhint(
"SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname).")));
491 inforec = (*infofunc) ();
495 elog(
ERROR,
"null result from info function \"%s\"", infofuncname);
503 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
504 errmsg(
"unrecognized API version %d reported by info function \"%s\"",
534 if (CFuncHash == NULL)
561 if (CFuncHash == NULL)
611 memcpy(dstinfo, srcinfo,
sizeof(
FmgrInfo));
664 int save_sec_context;
665 volatile int save_nestlevel;
668 if (!fcinfo->flinfo->fn_extra)
680 fcinfo->flinfo->
fn_mcxt,
true);
686 elog(
ERROR,
"cache lookup failed for function %u",
687 fcinfo->flinfo->fn_oid);
690 if (procedureStruct->prosecdef)
691 fcache->
userid = procedureStruct->proowner;
704 fcinfo->flinfo->fn_extra = fcache;
737 save_flinfo = fcinfo->flinfo;
741 fcinfo->flinfo = &fcache->
flinfo;
753 (fcinfo->resultinfo == NULL ||
759 fcinfo->flinfo = save_flinfo;
766 fcinfo->flinfo = save_flinfo;
798 fcinfo->args[0].value = arg1;
799 fcinfo->args[0].isnull =
false;
801 result = (*func) (fcinfo);
805 elog(
ERROR,
"function %p returned NULL", (
void *) func);
818 fcinfo->args[0].value = arg1;
819 fcinfo->args[0].isnull =
false;
820 fcinfo->args[1].value = arg2;
821 fcinfo->args[1].isnull =
false;
823 result = (*func) (fcinfo);
827 elog(
ERROR,
"function %p returned NULL", (
void *) func);
841 fcinfo->args[0].value = arg1;
842 fcinfo->args[0].isnull =
false;
843 fcinfo->args[1].value = arg2;
844 fcinfo->args[1].isnull =
false;
845 fcinfo->args[2].value = arg3;
846 fcinfo->args[2].isnull =
false;
848 result = (*func) (fcinfo);
852 elog(
ERROR,
"function %p returned NULL", (
void *) func);
866 fcinfo->args[0].value = arg1;
867 fcinfo->args[0].isnull =
false;
868 fcinfo->args[1].value = arg2;
869 fcinfo->args[1].isnull =
false;
870 fcinfo->args[2].value = arg3;
871 fcinfo->args[2].isnull =
false;
872 fcinfo->args[3].value = arg4;
873 fcinfo->args[3].isnull =
false;
875 result = (*func) (fcinfo);
879 elog(
ERROR,
"function %p returned NULL", (
void *) func);
893 fcinfo->args[0].value = arg1;
894 fcinfo->args[0].isnull =
false;
895 fcinfo->args[1].value = arg2;
896 fcinfo->args[1].isnull =
false;
897 fcinfo->args[2].value = arg3;
898 fcinfo->args[2].isnull =
false;
899 fcinfo->args[3].value = arg4;
900 fcinfo->args[3].isnull =
false;
901 fcinfo->args[4].value = arg5;
902 fcinfo->args[4].isnull =
false;
904 result = (*func) (fcinfo);
908 elog(
ERROR,
"function %p returned NULL", (
void *) func);
923 fcinfo->args[0].value = arg1;
924 fcinfo->args[0].isnull =
false;
925 fcinfo->args[1].value = arg2;
926 fcinfo->args[1].isnull =
false;
927 fcinfo->args[2].value = arg3;
928 fcinfo->args[2].isnull =
false;
929 fcinfo->args[3].value = arg4;
930 fcinfo->args[3].isnull =
false;
931 fcinfo->args[4].value = arg5;
932 fcinfo->args[4].isnull =
false;
933 fcinfo->args[5].value = arg6;
934 fcinfo->args[5].isnull =
false;
936 result = (*func) (fcinfo);
940 elog(
ERROR,
"function %p returned NULL", (
void *) func);
955 fcinfo->args[0].value = arg1;
956 fcinfo->args[0].isnull =
false;
957 fcinfo->args[1].value = arg2;
958 fcinfo->args[1].isnull =
false;
959 fcinfo->args[2].value = arg3;
960 fcinfo->args[2].isnull =
false;
961 fcinfo->args[3].value = arg4;
962 fcinfo->args[3].isnull =
false;
963 fcinfo->args[4].value = arg5;
964 fcinfo->args[4].isnull =
false;
965 fcinfo->args[5].value = arg6;
966 fcinfo->args[5].isnull =
false;
967 fcinfo->args[6].value = arg7;
968 fcinfo->args[6].isnull =
false;
970 result = (*func) (fcinfo);
974 elog(
ERROR,
"function %p returned NULL", (
void *) func);
989 fcinfo->args[0].value = arg1;
990 fcinfo->args[0].isnull =
false;
991 fcinfo->args[1].value = arg2;
992 fcinfo->args[1].isnull =
false;
993 fcinfo->args[2].value = arg3;
994 fcinfo->args[2].isnull =
false;
995 fcinfo->args[3].value = arg4;
996 fcinfo->args[3].isnull =
false;
997 fcinfo->args[4].value = arg5;
998 fcinfo->args[4].isnull =
false;
999 fcinfo->args[5].value = arg6;
1000 fcinfo->args[5].isnull =
false;
1001 fcinfo->args[6].value = arg7;
1002 fcinfo->args[6].isnull =
false;
1003 fcinfo->args[7].value = arg8;
1004 fcinfo->args[7].isnull =
false;
1006 result = (*func) (fcinfo);
1010 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1026 fcinfo->args[0].value = arg1;
1027 fcinfo->args[0].isnull =
false;
1028 fcinfo->args[1].value = arg2;
1029 fcinfo->args[1].isnull =
false;
1030 fcinfo->args[2].value = arg3;
1031 fcinfo->args[2].isnull =
false;
1032 fcinfo->args[3].value = arg4;
1033 fcinfo->args[3].isnull =
false;
1034 fcinfo->args[4].value = arg5;
1035 fcinfo->args[4].isnull =
false;
1036 fcinfo->args[5].value = arg6;
1037 fcinfo->args[5].isnull =
false;
1038 fcinfo->args[6].value = arg7;
1039 fcinfo->args[6].isnull =
false;
1040 fcinfo->args[7].value = arg8;
1041 fcinfo->args[7].isnull =
false;
1042 fcinfo->args[8].value = arg9;
1043 fcinfo->args[8].isnull =
false;
1045 result = (*func) (fcinfo);
1049 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1071 fcinfo->args[0].value = arg1;
1072 fcinfo->args[0].isnull =
false;
1074 result = (*func) (fcinfo);
1078 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1091 fcinfo->args[0].value = arg1;
1092 fcinfo->args[0].isnull =
false;
1093 fcinfo->args[1].value = arg2;
1094 fcinfo->args[1].isnull =
false;
1096 result = (*func) (fcinfo);
1100 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1135 fcinfo->args[0].value = arg1;
1136 fcinfo->args[0].isnull =
false;
1155 fcinfo->args[0].value = arg1;
1156 fcinfo->args[0].isnull =
false;
1157 fcinfo->args[1].value = arg2;
1158 fcinfo->args[1].isnull =
false;
1178 fcinfo->args[0].value = arg1;
1179 fcinfo->args[0].isnull =
false;
1180 fcinfo->args[1].value = arg2;
1181 fcinfo->args[1].isnull =
false;
1182 fcinfo->args[2].value = arg3;
1183 fcinfo->args[2].isnull =
false;
1203 fcinfo->args[0].value = arg1;
1204 fcinfo->args[0].isnull =
false;
1205 fcinfo->args[1].value = arg2;
1206 fcinfo->args[1].isnull =
false;
1207 fcinfo->args[2].value = arg3;
1208 fcinfo->args[2].isnull =
false;
1209 fcinfo->args[3].value = arg4;
1210 fcinfo->args[3].isnull =
false;
1230 fcinfo->args[0].value = arg1;
1231 fcinfo->args[0].isnull =
false;
1232 fcinfo->args[1].value = arg2;
1233 fcinfo->args[1].isnull =
false;
1234 fcinfo->args[2].value = arg3;
1235 fcinfo->args[2].isnull =
false;
1236 fcinfo->args[3].value = arg4;
1237 fcinfo->args[3].isnull =
false;
1238 fcinfo->args[4].value = arg5;
1239 fcinfo->args[4].isnull =
false;
1260 fcinfo->args[0].value = arg1;
1261 fcinfo->args[0].isnull =
false;
1262 fcinfo->args[1].value = arg2;
1263 fcinfo->args[1].isnull =
false;
1264 fcinfo->args[2].value = arg3;
1265 fcinfo->args[2].isnull =
false;
1266 fcinfo->args[3].value = arg4;
1267 fcinfo->args[3].isnull =
false;
1268 fcinfo->args[4].value = arg5;
1269 fcinfo->args[4].isnull =
false;
1270 fcinfo->args[5].value = arg6;
1271 fcinfo->args[5].isnull =
false;
1292 fcinfo->args[0].value = arg1;
1293 fcinfo->args[0].isnull =
false;
1294 fcinfo->args[1].value = arg2;
1295 fcinfo->args[1].isnull =
false;
1296 fcinfo->args[2].value = arg3;
1297 fcinfo->args[2].isnull =
false;
1298 fcinfo->args[3].value = arg4;
1299 fcinfo->args[3].isnull =
false;
1300 fcinfo->args[4].value = arg5;
1301 fcinfo->args[4].isnull =
false;
1302 fcinfo->args[5].value = arg6;
1303 fcinfo->args[5].isnull =
false;
1304 fcinfo->args[6].value = arg7;
1305 fcinfo->args[6].isnull =
false;
1326 fcinfo->args[0].value = arg1;
1327 fcinfo->args[0].isnull =
false;
1328 fcinfo->args[1].value = arg2;
1329 fcinfo->args[1].isnull =
false;
1330 fcinfo->args[2].value = arg3;
1331 fcinfo->args[2].isnull =
false;
1332 fcinfo->args[3].value = arg4;
1333 fcinfo->args[3].isnull =
false;
1334 fcinfo->args[4].value = arg5;
1335 fcinfo->args[4].isnull =
false;
1336 fcinfo->args[5].value = arg6;
1337 fcinfo->args[5].isnull =
false;
1338 fcinfo->args[6].value = arg7;
1339 fcinfo->args[6].isnull =
false;
1340 fcinfo->args[7].value = arg8;
1341 fcinfo->args[7].isnull =
false;
1363 fcinfo->args[0].value = arg1;
1364 fcinfo->args[0].isnull =
false;
1365 fcinfo->args[1].value = arg2;
1366 fcinfo->args[1].isnull =
false;
1367 fcinfo->args[2].value = arg3;
1368 fcinfo->args[2].isnull =
false;
1369 fcinfo->args[3].value = arg4;
1370 fcinfo->args[3].isnull =
false;
1371 fcinfo->args[4].value = arg5;
1372 fcinfo->args[4].isnull =
false;
1373 fcinfo->args[5].value = arg6;
1374 fcinfo->args[5].isnull =
false;
1375 fcinfo->args[6].value = arg7;
1376 fcinfo->args[6].isnull =
false;
1377 fcinfo->args[7].value = arg8;
1378 fcinfo->args[7].isnull =
false;
1379 fcinfo->args[8].value = arg9;
1380 fcinfo->args[8].isnull =
false;
1512 arg6, arg7, arg8, arg9);
1540 fcinfo->args[0].isnull =
false;
1542 fcinfo->args[1].isnull =
false;
1544 fcinfo->args[2].isnull =
false;
1551 if (!fcinfo->isnull)
1552 elog(
ERROR,
"input function %u returned non-NULL",
1558 elog(
ERROR,
"input function %u returned NULL",
1599 fcinfo->args[0].isnull =
false;
1601 fcinfo->args[1].isnull =
false;
1603 fcinfo->args[2].isnull =
false;
1610 if (!fcinfo->isnull)
1611 elog(
ERROR,
"receive function %u returned non-NULL",
1617 elog(
ERROR,
"receive function %u returned NULL",
1694 #ifndef USE_FLOAT8_BYVAL 1699 int64 *retval = (int64 *)
palloc(
sizeof(int64));
1741 memcpy(result, datum, len);
1786 if (!flinfo || !flinfo->
fn_expr)
1806 if (!flinfo || !flinfo->
fn_expr)
1830 args = ((
OpExpr *) expr)->args;
1871 if (!flinfo || !flinfo->
fn_expr)
1895 args = ((
OpExpr *) expr)->args;
1942 if (!flinfo || !flinfo->
fn_expr)
1948 return ((
FuncExpr *) expr)->funcvariadic;
1964 options == NULL,
false);
1998 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1999 errmsg(
"operator class options info is absent in function call context")));
2050 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
2051 errmsg(
"function with OID %u does not exist", functionOid)));
2060 elog(
ERROR,
"cache lookup failed for language %u", procStruct->prolang);
2063 if (langStruct->lanvalidator != validatorOid)
2065 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2066 errmsg(
"language validation function %u called for language %u instead of %u",
2067 validatorOid, procStruct->prolang,
2068 langStruct->lanvalidator)));
2075 NameStr(langStruct->lanname));
Datum(* PGFunction)(FunctionCallInfo fcinfo)
#define VARATT_IS_COMPRESSED(PTR)
void hash_destroy(HTAB *hashp)
Datum CallerFInfoFunctionCall1(PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1)
#define IsA(nodeptr, _type_)
int errhint(const char *fmt,...)
bool get_fn_expr_arg_stable(FmgrInfo *flinfo, int argnum)
void SetUserIdAndSecContext(Oid userid, int sec_context)
struct varlena * pg_detoast_datum_copy(struct varlena *datum)
static void fmgr_info_other_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
void(* fmgr_hook_type)(FmgrHookEventType event, FmgrInfo *flinfo, Datum *arg)
const Pg_finfo_record * inforec
Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3)
Datum CallerFInfoFunctionCall2(PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
#define PointerGetDatum(X)
Datum FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
Datum FunctionCall8Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
char * pstrdup(const char *in)
struct varlena * pg_detoast_datum(struct varlena *datum)
char * psprintf(const char *fmt,...)
bool has_fn_opclass_options(FmgrInfo *flinfo)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
Datum OidFunctionCall9Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
bytea * get_fn_opclass_options(FmgrInfo *flinfo)
bool get_fn_expr_variadic(FmgrInfo *flinfo)
Datum FunctionCall9Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
int errcode(int sqlerrcode)
Oid get_call_expr_argtype(Node *expr, int argnum)
bool heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc)
const FmgrBuiltin fmgr_builtins[]
Datum FunctionCall4Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
#define InvalidOidBuiltinMapping
void set_fn_opclass_options(FmgrInfo *flinfo, bytea *options)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
struct varlena * detoast_attr_slice(struct varlena *attr, int32 sliceoffset, int32 slicelength)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
#define OidIsValid(objectId)
#define FmgrHookIsNeeded(fn_oid)
AclResult pg_language_aclcheck(Oid lang_oid, Oid roleid, AclMode mode)
void fmgr_symbol(Oid functionId, char **mod, char **fn)
bool get_call_expr_arg_stable(Node *expr, int argnum)
Datum Float8GetDatum(float8 X)
char * OutputFunctionCall(FmgrInfo *flinfo, Datum val)
static void fmgr_info_C_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
Oid fmgr_internal_function(const char *proname)
#define VARATT_IS_EXTERNAL(PTR)
struct varlena * detoast_attr(struct varlena *attr)
const Oid fmgr_last_builtin_oid
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
void pfree(void *pointer)
Datum DirectFunctionCall8Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
#define ObjectIdGetDatum(X)
#define DatumGetCString(X)
void pgstat_init_function_usage(FunctionCallInfo fcinfo, PgStat_FunctionCallUsage *fcu)
bool(* needs_fmgr_hook_type)(Oid fn_oid)
Datum FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
bool CheckFunctionValidatorAccess(Oid validatorOid, Oid functionOid)
static void * list_nth(const List *list, int n)
Oid get_fn_expr_argtype(FmgrInfo *flinfo, int argnum)
Datum ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf, Oid typioparam, int32 typmod)
void fmgr_info(Oid functionId, FmgrInfo *finfo)
Datum DirectFunctionCall7Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
struct varlena * pg_detoast_datum_packed(struct varlena *datum)
#define DatumGetByteaP(X)
Datum OidReceiveFunctionCall(Oid functionId, StringInfo buf, Oid typioparam, int32 typmod)
void fmgr_info_copy(FmgrInfo *dstinfo, FmgrInfo *srcinfo, MemoryContext destcxt)
bytea * OidSendFunctionCall(Oid functionId, Datum val)
#define FunctionCallInvoke(fcinfo)
void GetUserIdAndSecContext(Oid *userid, int *sec_context)
void AtEOXact_GUC(bool isCommit, int nestLevel)
#define CStringGetDatum(X)
Datum DirectFunctionCall1Coll(PGFunction func, Oid collation, Datum arg1)
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
bytea * SendFunctionCall(FmgrInfo *flinfo, Datum val)
MemoryContext CurrentMemoryContext
Datum fmgr_sql(PG_FUNCTION_ARGS)
struct varlena * pg_detoast_datum_slice(struct varlena *datum, int32 first, int32 count)
Datum Int64GetDatum(int64 X)
void fmgr_info_cxt(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt)
static const FmgrBuiltin * fmgr_lookupByName(const char *name)
void clear_external_function_hash(void *filehandle)
Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2)
void * load_external_function(const char *filename, const char *funcname, bool signalNotFound, void **filehandle)
Datum DirectFunctionCall6Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
const uint16 fmgr_builtin_oid_index[]
HeapTuple SearchSysCache1(int cacheId, Datum key1)
#define TextDatumGetCString(d)
static const FmgrBuiltin * fmgr_isbuiltin(Oid id)
Oid get_fn_expr_rettype(FmgrInfo *flinfo)
void ReleaseSysCache(HeapTuple tuple)
Datum FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
#define DatumGetArrayTypePCopy(X)
Datum FunctionCall0Coll(FmgrInfo *flinfo, Oid collation)
PGDLLIMPORT fmgr_hook_type fmgr_hook
#define SECURITY_LOCAL_USERID_CHANGE
FormData_pg_proc * Form_pg_proc
void * MemoryContextAllocZero(MemoryContext context, Size size)
Datum InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod)
PGDLLIMPORT needs_fmgr_hook_type needs_fmgr_hook
void ProcessGUCArray(ArrayType *array, GucContext context, GucSource source, GucAction action)
#define ereport(elevel,...)
Datum FunctionCall3Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3)
Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1)
static void * fn(void *arg)
#define LOCAL_FCINFO(name, nargs)
static void record_C_func(HeapTuple procedureTuple, PGFunction user_fn, const Pg_finfo_record *inforec)
Datum DirectFunctionCall5Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
Datum OidFunctionCall6Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
#define HeapTupleIsValid(tuple)
Datum OidFunctionCall7Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
Datum OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
Datum fmgr_security_definer(PG_FUNCTION_ARGS)
void * lookup_external_function(void *filehandle, const char *funcname)
#define InitFunctionCallInfoData(Fcinfo, Flinfo, Nargs, Collation, Context, Resultinfo)
Oid exprType(const Node *expr)
Datum OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
static int list_length(const List *l)
Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3)
static CFuncHashTabEntry * lookup_C_func(HeapTuple procedureTuple)
#define HeapTupleHeaderGetRawXmin(tup)
Datum DirectFunctionCall9Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2)
Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
const Pg_finfo_record *(* PGFInfoFunction)(void)
const Pg_finfo_record * fetch_finfo_record(void *filehandle, const char *funcname)
#define VARATT_IS_EXTENDED(PTR)
void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize)
Oid get_base_element_type(Oid typid)
int NewGUCNestLevel(void)
char * OidOutputFunctionCall(Oid functionId, Datum val)
FormData_pg_language * Form_pg_language
int errmsg(const char *fmt,...)
Datum OidFunctionCall0Coll(Oid functionId, Oid collation)
Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2)
Datum FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
AclResult pg_proc_aclcheck(Oid proc_oid, Oid roleid, AclMode mode)
#define FunctionCall1(flinfo, arg1)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
static void fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt, bool ignore_security)