60 bool ignore_security);
149 bool ignore_security)
177 finfo->
fn_oid = functionId;
184 elog(
ERROR,
"cache lookup failed for function %u", functionId);
187 finfo->
fn_nargs = procedureStruct->pronargs;
188 finfo->
fn_strict = procedureStruct->proisstrict;
189 finfo->
fn_retset = procedureStruct->proretset;
205 if (!ignore_security &&
206 (procedureStruct->prosecdef ||
212 finfo->
fn_oid = functionId;
217 switch (procedureStruct->prolang)
219 case INTERNALlanguageId:
231 Anum_pg_proc_prosrc);
236 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
237 errmsg(
"internal function \"%s\" is not in internal lookup table",
262 finfo->
fn_oid = functionId;
291 elog(
ERROR,
"cache lookup failed for function %u", functionId);
294 if (procedureStruct->prosecdef ||
305 switch (procedureStruct->prolang)
307 case INTERNALlanguageId:
309 Anum_pg_proc_prosrc);
317 Anum_pg_proc_prosrc);
320 Anum_pg_proc_probin);
379 Anum_pg_proc_prosrc);
383 Anum_pg_proc_probin);
408 elog(
ERROR,
"unrecognized function API version: %d",
422 Oid language = procedureStruct->prolang;
429 elog(
ERROR,
"cache lookup failed for language %u", language);
467 if (infofunc == NULL)
470 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
471 errmsg(
"could not find function information for function \"%s\"",
473 errhint(
"SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname).")));
478 inforec = (*infofunc) ();
482 elog(
ERROR,
"null result from info function \"%s\"", infofuncname);
490 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
491 errmsg(
"unrecognized API version %d reported by info function \"%s\"",
584 memcpy(dstinfo, srcinfo,
sizeof(
FmgrInfo));
639 int save_sec_context;
646 if (!fcinfo->flinfo->fn_extra)
658 fcinfo->flinfo->
fn_mcxt,
true);
664 elog(
ERROR,
"cache lookup failed for function %u",
665 fcinfo->flinfo->fn_oid);
668 if (procedureStruct->prosecdef)
669 fcache->
userid = procedureStruct->proowner;
698 fcinfo->flinfo->fn_extra = fcache;
739 save_flinfo = fcinfo->flinfo;
743 fcinfo->flinfo = &fcache->
flinfo;
755 (fcinfo->resultinfo == NULL ||
761 fcinfo->flinfo = save_flinfo;
768 fcinfo->flinfo = save_flinfo;
800 fcinfo->args[0].value = arg1;
801 fcinfo->args[0].isnull =
false;
803 result = (*func) (fcinfo);
807 elog(
ERROR,
"function %p returned NULL", (
void *) func);
820 fcinfo->args[0].value = arg1;
821 fcinfo->args[0].isnull =
false;
822 fcinfo->args[1].value = arg2;
823 fcinfo->args[1].isnull =
false;
825 result = (*func) (fcinfo);
829 elog(
ERROR,
"function %p returned NULL", (
void *) func);
843 fcinfo->args[0].value = arg1;
844 fcinfo->args[0].isnull =
false;
845 fcinfo->args[1].value = arg2;
846 fcinfo->args[1].isnull =
false;
847 fcinfo->args[2].value = arg3;
848 fcinfo->args[2].isnull =
false;
850 result = (*func) (fcinfo);
854 elog(
ERROR,
"function %p returned NULL", (
void *) func);
868 fcinfo->args[0].value = arg1;
869 fcinfo->args[0].isnull =
false;
870 fcinfo->args[1].value = arg2;
871 fcinfo->args[1].isnull =
false;
872 fcinfo->args[2].value = arg3;
873 fcinfo->args[2].isnull =
false;
874 fcinfo->args[3].value = arg4;
875 fcinfo->args[3].isnull =
false;
877 result = (*func) (fcinfo);
881 elog(
ERROR,
"function %p returned NULL", (
void *) func);
895 fcinfo->args[0].value = arg1;
896 fcinfo->args[0].isnull =
false;
897 fcinfo->args[1].value = arg2;
898 fcinfo->args[1].isnull =
false;
899 fcinfo->args[2].value = arg3;
900 fcinfo->args[2].isnull =
false;
901 fcinfo->args[3].value = arg4;
902 fcinfo->args[3].isnull =
false;
903 fcinfo->args[4].value = arg5;
904 fcinfo->args[4].isnull =
false;
906 result = (*func) (fcinfo);
910 elog(
ERROR,
"function %p returned NULL", (
void *) func);
925 fcinfo->args[0].value = arg1;
926 fcinfo->args[0].isnull =
false;
927 fcinfo->args[1].value = arg2;
928 fcinfo->args[1].isnull =
false;
929 fcinfo->args[2].value = arg3;
930 fcinfo->args[2].isnull =
false;
931 fcinfo->args[3].value = arg4;
932 fcinfo->args[3].isnull =
false;
933 fcinfo->args[4].value = arg5;
934 fcinfo->args[4].isnull =
false;
935 fcinfo->args[5].value = arg6;
936 fcinfo->args[5].isnull =
false;
938 result = (*func) (fcinfo);
942 elog(
ERROR,
"function %p returned NULL", (
void *) func);
957 fcinfo->args[0].value = arg1;
958 fcinfo->args[0].isnull =
false;
959 fcinfo->args[1].value = arg2;
960 fcinfo->args[1].isnull =
false;
961 fcinfo->args[2].value = arg3;
962 fcinfo->args[2].isnull =
false;
963 fcinfo->args[3].value = arg4;
964 fcinfo->args[3].isnull =
false;
965 fcinfo->args[4].value = arg5;
966 fcinfo->args[4].isnull =
false;
967 fcinfo->args[5].value = arg6;
968 fcinfo->args[5].isnull =
false;
969 fcinfo->args[6].value = arg7;
970 fcinfo->args[6].isnull =
false;
972 result = (*func) (fcinfo);
976 elog(
ERROR,
"function %p returned NULL", (
void *) func);
991 fcinfo->args[0].value = arg1;
992 fcinfo->args[0].isnull =
false;
993 fcinfo->args[1].value = arg2;
994 fcinfo->args[1].isnull =
false;
995 fcinfo->args[2].value = arg3;
996 fcinfo->args[2].isnull =
false;
997 fcinfo->args[3].value = arg4;
998 fcinfo->args[3].isnull =
false;
999 fcinfo->args[4].value = arg5;
1000 fcinfo->args[4].isnull =
false;
1001 fcinfo->args[5].value = arg6;
1002 fcinfo->args[5].isnull =
false;
1003 fcinfo->args[6].value = arg7;
1004 fcinfo->args[6].isnull =
false;
1005 fcinfo->args[7].value = arg8;
1006 fcinfo->args[7].isnull =
false;
1008 result = (*func) (fcinfo);
1012 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1028 fcinfo->args[0].value = arg1;
1029 fcinfo->args[0].isnull =
false;
1030 fcinfo->args[1].value = arg2;
1031 fcinfo->args[1].isnull =
false;
1032 fcinfo->args[2].value = arg3;
1033 fcinfo->args[2].isnull =
false;
1034 fcinfo->args[3].value = arg4;
1035 fcinfo->args[3].isnull =
false;
1036 fcinfo->args[4].value = arg5;
1037 fcinfo->args[4].isnull =
false;
1038 fcinfo->args[5].value = arg6;
1039 fcinfo->args[5].isnull =
false;
1040 fcinfo->args[6].value = arg7;
1041 fcinfo->args[6].isnull =
false;
1042 fcinfo->args[7].value = arg8;
1043 fcinfo->args[7].isnull =
false;
1044 fcinfo->args[8].value = arg9;
1045 fcinfo->args[8].isnull =
false;
1047 result = (*func) (fcinfo);
1051 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1073 fcinfo->args[0].value = arg1;
1074 fcinfo->args[0].isnull =
false;
1076 result = (*func) (fcinfo);
1080 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1093 fcinfo->args[0].value = arg1;
1094 fcinfo->args[0].isnull =
false;
1095 fcinfo->args[1].value = arg2;
1096 fcinfo->args[1].isnull =
false;
1098 result = (*func) (fcinfo);
1102 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1137 fcinfo->args[0].value = arg1;
1138 fcinfo->args[0].isnull =
false;
1157 fcinfo->args[0].value = arg1;
1158 fcinfo->args[0].isnull =
false;
1159 fcinfo->args[1].value = arg2;
1160 fcinfo->args[1].isnull =
false;
1180 fcinfo->args[0].value = arg1;
1181 fcinfo->args[0].isnull =
false;
1182 fcinfo->args[1].value = arg2;
1183 fcinfo->args[1].isnull =
false;
1184 fcinfo->args[2].value = arg3;
1185 fcinfo->args[2].isnull =
false;
1205 fcinfo->args[0].value = arg1;
1206 fcinfo->args[0].isnull =
false;
1207 fcinfo->args[1].value = arg2;
1208 fcinfo->args[1].isnull =
false;
1209 fcinfo->args[2].value = arg3;
1210 fcinfo->args[2].isnull =
false;
1211 fcinfo->args[3].value = arg4;
1212 fcinfo->args[3].isnull =
false;
1232 fcinfo->args[0].value = arg1;
1233 fcinfo->args[0].isnull =
false;
1234 fcinfo->args[1].value = arg2;
1235 fcinfo->args[1].isnull =
false;
1236 fcinfo->args[2].value = arg3;
1237 fcinfo->args[2].isnull =
false;
1238 fcinfo->args[3].value = arg4;
1239 fcinfo->args[3].isnull =
false;
1240 fcinfo->args[4].value = arg5;
1241 fcinfo->args[4].isnull =
false;
1262 fcinfo->args[0].value = arg1;
1263 fcinfo->args[0].isnull =
false;
1264 fcinfo->args[1].value = arg2;
1265 fcinfo->args[1].isnull =
false;
1266 fcinfo->args[2].value = arg3;
1267 fcinfo->args[2].isnull =
false;
1268 fcinfo->args[3].value = arg4;
1269 fcinfo->args[3].isnull =
false;
1270 fcinfo->args[4].value = arg5;
1271 fcinfo->args[4].isnull =
false;
1272 fcinfo->args[5].value = arg6;
1273 fcinfo->args[5].isnull =
false;
1294 fcinfo->args[0].value = arg1;
1295 fcinfo->args[0].isnull =
false;
1296 fcinfo->args[1].value = arg2;
1297 fcinfo->args[1].isnull =
false;
1298 fcinfo->args[2].value = arg3;
1299 fcinfo->args[2].isnull =
false;
1300 fcinfo->args[3].value = arg4;
1301 fcinfo->args[3].isnull =
false;
1302 fcinfo->args[4].value = arg5;
1303 fcinfo->args[4].isnull =
false;
1304 fcinfo->args[5].value = arg6;
1305 fcinfo->args[5].isnull =
false;
1306 fcinfo->args[6].value = arg7;
1307 fcinfo->args[6].isnull =
false;
1328 fcinfo->args[0].value = arg1;
1329 fcinfo->args[0].isnull =
false;
1330 fcinfo->args[1].value = arg2;
1331 fcinfo->args[1].isnull =
false;
1332 fcinfo->args[2].value = arg3;
1333 fcinfo->args[2].isnull =
false;
1334 fcinfo->args[3].value = arg4;
1335 fcinfo->args[3].isnull =
false;
1336 fcinfo->args[4].value = arg5;
1337 fcinfo->args[4].isnull =
false;
1338 fcinfo->args[5].value = arg6;
1339 fcinfo->args[5].isnull =
false;
1340 fcinfo->args[6].value = arg7;
1341 fcinfo->args[6].isnull =
false;
1342 fcinfo->args[7].value = arg8;
1343 fcinfo->args[7].isnull =
false;
1365 fcinfo->args[0].value = arg1;
1366 fcinfo->args[0].isnull =
false;
1367 fcinfo->args[1].value = arg2;
1368 fcinfo->args[1].isnull =
false;
1369 fcinfo->args[2].value = arg3;
1370 fcinfo->args[2].isnull =
false;
1371 fcinfo->args[3].value = arg4;
1372 fcinfo->args[3].isnull =
false;
1373 fcinfo->args[4].value = arg5;
1374 fcinfo->args[4].isnull =
false;
1375 fcinfo->args[5].value = arg6;
1376 fcinfo->args[5].isnull =
false;
1377 fcinfo->args[6].value = arg7;
1378 fcinfo->args[6].isnull =
false;
1379 fcinfo->args[7].value = arg8;
1380 fcinfo->args[7].isnull =
false;
1381 fcinfo->args[8].value = arg9;
1382 fcinfo->args[8].isnull =
false;
1514 arg6, arg7, arg8, arg9);
1542 fcinfo->args[0].isnull =
false;
1544 fcinfo->args[1].isnull =
false;
1546 fcinfo->args[2].isnull =
false;
1553 if (!fcinfo->isnull)
1554 elog(
ERROR,
"input function %u returned non-NULL",
1560 elog(
ERROR,
"input function %u returned NULL",
1594 *result = (
Datum) 0;
1601 fcinfo->args[0].isnull =
false;
1603 fcinfo->args[1].isnull =
false;
1605 fcinfo->args[2].isnull =
false;
1616 if (!fcinfo->isnull)
1617 elog(
ERROR,
"input function %u returned non-NULL",
1623 elog(
ERROR,
"input function %u returned NULL",
1649 *result = (
Datum) 0;
1656 fcinfo->args[0].isnull =
false;
1658 fcinfo->args[1].isnull =
false;
1660 fcinfo->args[2].isnull =
false;
1662 *result = (*func) (fcinfo);
1670 elog(
ERROR,
"input function %p returned NULL", (
void *) func);
1709 fcinfo->args[0].isnull =
false;
1711 fcinfo->args[1].isnull =
false;
1713 fcinfo->args[2].isnull =
false;
1720 if (!fcinfo->isnull)
1721 elog(
ERROR,
"receive function %u returned non-NULL",
1727 elog(
ERROR,
"receive function %u returned NULL",
1816 memcpy(result, datum,
len);
1861 if (!flinfo || !flinfo->
fn_expr)
1881 if (!flinfo || !flinfo->
fn_expr)
1946 if (!flinfo || !flinfo->
fn_expr)
2017 if (!flinfo || !flinfo->
fn_expr)
2023 return ((
FuncExpr *) expr)->funcvariadic;
2053 return !expr->constisnull;
2069 return expr->constisnull ? NULL :
DatumGetByteaP(expr->constvalue);
2073 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
2074 errmsg(
"operator class options info is absent in function call context")));
2125 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
2126 errmsg(
"function with OID %u does not exist", functionOid)));
2135 elog(
ERROR,
"cache lookup failed for language %u", procStruct->prolang);
2138 if (langStruct->lanvalidator != validatorOid)
2140 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2141 errmsg(
"language validation function %u called for language %u instead of %u",
2142 validatorOid, procStruct->prolang,
2143 langStruct->lanvalidator)));
2150 NameStr(langStruct->lanname));
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode)
#define DatumGetArrayTypeP(X)
#define TextDatumGetCString(d)
#define OidIsValid(objectId)
struct varlena * detoast_attr(struct varlena *attr)
struct varlena * detoast_attr_slice(struct varlena *attr, int32 sliceoffset, int32 slicelength)
void * lookup_external_function(void *filehandle, const char *funcname)
void * load_external_function(const char *filename, const char *funcname, bool signalNotFound, void **filehandle)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, int64 nelem, const HASHCTL *info, int flags)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Datum FunctionCall4Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2)
void set_fn_opclass_options(FmgrInfo *flinfo, bytea *options)
Oid fmgr_internal_function(const char *proname)
Datum OidFunctionCall9Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
bool get_fn_expr_arg_stable(FmgrInfo *flinfo, int argnum)
struct varlena * pg_detoast_datum_copy(struct varlena *datum)
struct varlena * pg_detoast_datum_slice(struct varlena *datum, int32 first, int32 count)
Datum OidFunctionCall6Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
Datum FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
Datum OidFunctionCall5Coll(Oid functionId, 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)
bool CheckFunctionValidatorAccess(Oid validatorOid, Oid functionOid)
Datum OidReceiveFunctionCall(Oid functionId, StringInfo buf, Oid typioparam, int32 typmod)
Datum InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod)
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
static const FmgrBuiltin * fmgr_lookupByName(const char *name)
void fmgr_info(Oid functionId, FmgrInfo *finfo)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
PGDLLIMPORT needs_fmgr_hook_type needs_fmgr_hook
Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2)
static void fmgr_info_C_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
bool DirectInputFunctionCallSafe(PGFunction func, char *str, Oid typioparam, int32 typmod, Node *escontext, Datum *result)
struct varlena * pg_detoast_datum_packed(struct varlena *datum)
char * OidOutputFunctionCall(Oid functionId, Datum val)
Datum FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
static void fmgr_info_other_lang(Oid functionId, FmgrInfo *finfo, HeapTuple procedureTuple)
const Pg_finfo_record * fetch_finfo_record(void *filehandle, const char *funcname)
struct varlena * pg_detoast_datum(struct varlena *datum)
Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3)
void fmgr_info_cxt(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt)
Datum OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
bytea * SendFunctionCall(FmgrInfo *flinfo, Datum val)
Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
Datum OidFunctionCall7Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
PGDLLIMPORT fmgr_hook_type fmgr_hook
bool has_fn_opclass_options(FmgrInfo *flinfo)
bool InputFunctionCallSafe(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod, Node *escontext, Datum *result)
Datum CallerFInfoFunctionCall2(PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
Datum CallerFInfoFunctionCall1(PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1)
Datum DirectFunctionCall6Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
Datum DirectFunctionCall5Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1)
char * OutputFunctionCall(FmgrInfo *flinfo, Datum val)
bool get_fn_expr_variadic(FmgrInfo *flinfo)
Datum DirectFunctionCall1Coll(PGFunction func, Oid collation, Datum arg1)
bytea * get_fn_opclass_options(FmgrInfo *flinfo)
Datum FunctionCall3Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3)
Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3)
Oid get_call_expr_argtype(Node *expr, int argnum)
Datum FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
Oid get_fn_expr_argtype(FmgrInfo *flinfo, int argnum)
Datum OidFunctionCall0Coll(Oid functionId, Oid collation)
void fmgr_symbol(Oid functionId, char **mod, char **fn)
Datum DirectFunctionCall9Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
bytea * OidSendFunctionCall(Oid functionId, Datum val)
Datum FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1)
Datum fmgr_security_definer(PG_FUNCTION_ARGS)
Oid get_fn_expr_rettype(FmgrInfo *flinfo)
void fmgr_info_copy(FmgrInfo *dstinfo, FmgrInfo *srcinfo, MemoryContext destcxt)
static void record_C_func(HeapTuple procedureTuple, PGFunction user_fn, const Pg_finfo_record *inforec)
static void fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt, bool ignore_security)
Datum FunctionCall0Coll(FmgrInfo *flinfo, Oid collation)
Datum FunctionCall9Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
Datum DirectFunctionCall7Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
static CFuncHashTabEntry * lookup_C_func(HeapTuple procedureTuple)
static const FmgrBuiltin * fmgr_isbuiltin(Oid id)
bool get_call_expr_arg_stable(Node *expr, int argnum)
Datum ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf, Oid typioparam, int32 typmod)
Datum DirectFunctionCall8Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
const Pg_finfo_record *(* PGFInfoFunction)(void)
bool(* needs_fmgr_hook_type)(Oid fn_oid)
#define InitFunctionCallInfoData(Fcinfo, Flinfo, Nargs, Collation, Context, Resultinfo)
#define LOCAL_FCINFO(name, nargs)
#define FunctionCall1(flinfo, arg1)
#define FunctionCallInvoke(fcinfo)
void(* fmgr_hook_type)(FmgrHookEventType event, FmgrInfo *flinfo, Datum *arg)
Datum(* PGFunction)(FunctionCallInfo fcinfo)
#define FmgrHookIsNeeded(fn_oid)
#define DatumGetByteaP(X)
PGDLLIMPORT const Oid fmgr_last_builtin_oid
PGDLLIMPORT const int fmgr_nbuiltins
PGDLLIMPORT const FmgrBuiltin fmgr_builtins[]
#define InvalidOidBuiltinMapping
PGDLLIMPORT const uint16 fmgr_builtin_oid_index[]
Datum fmgr_sql(PG_FUNCTION_ARGS)
int NewGUCNestLevel(void)
config_handle * get_config_handle(const char *name)
int set_config_with_handle(const char *name, config_handle *handle, const char *value, GucContext context, GucSource source, Oid srole, GucAction action, bool changeVal, int elevel, bool is_reload)
void TransformGUCArray(ArrayType *array, List **names, List **values)
void AtEOXact_GUC(bool isCommit, int nestLevel)
bool heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc)
#define HeapTupleIsValid(tuple)
static TransactionId HeapTupleHeaderGetRawXmin(const HeapTupleHeaderData *tup)
static void * GETSTRUCT(const HeapTupleData *tuple)
if(TABLE==NULL||TABLE_index==NULL)
bool ItemPointerEquals(const ItemPointerData *pointer1, const ItemPointerData *pointer2)
List * lappend(List *list, void *datum)
Oid get_base_element_type(Oid typid)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
void * MemoryContextAllocZero(MemoryContext context, Size size)
char * pstrdup(const char *in)
void pfree(void *pointer)
MemoryContext CurrentMemoryContext
#define SECURITY_LOCAL_USERID_CHANGE
void GetUserIdAndSecContext(Oid *userid, int *sec_context)
void SetUserIdAndSecContext(Oid userid, int sec_context)
#define SOFT_ERROR_OCCURRED(escontext)
Oid exprType(const Node *expr)
#define IsA(nodeptr, _type_)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
FormData_pg_language * Form_pg_language
static int list_length(const List *l)
#define forthree(cell1, list1, cell2, list2, cell3, list3)
static void * list_nth(const List *list, int n)
FormData_pg_proc * Form_pg_proc
static rewind_source * source
void pgstat_init_function_usage(FunctionCallInfo fcinfo, PgStat_FunctionCallUsage *fcu)
void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize)
static Datum PointerGetDatum(const void *X)
static Datum ObjectIdGetDatum(Oid X)
static char * DatumGetCString(Datum X)
static Datum CStringGetDatum(const char *X)
static Datum Int32GetDatum(int32 X)
char * psprintf(const char *fmt,...)
const Pg_finfo_record * inforec
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, AttrNumber attributeNumber)
static void * fn(void *arg)
static bool VARATT_IS_EXTENDED(const void *PTR)
static bool VARATT_IS_EXTERNAL(const void *PTR)
static Size VARSIZE(const void *PTR)
static bool VARATT_IS_COMPRESSED(const void *PTR)