59 bool ignore_security);
148 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);
235 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
236 errmsg(
"internal function \"%s\" is not in internal lookup table",
261 finfo->
fn_oid = functionId;
290 elog(
ERROR,
"cache lookup failed for function %u", functionId);
293 if (procedureStruct->prosecdef ||
304 switch (procedureStruct->prolang)
306 case INTERNALlanguageId:
308 Anum_pg_proc_prosrc);
316 Anum_pg_proc_prosrc);
319 Anum_pg_proc_probin);
378 Anum_pg_proc_prosrc);
382 Anum_pg_proc_probin);
407 elog(
ERROR,
"unrecognized function API version: %d",
421 Oid language = procedureStruct->prolang;
428 elog(
ERROR,
"cache lookup failed for language %u", language);
466 if (infofunc == NULL)
469 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
470 errmsg(
"could not find function information for function \"%s\"",
472 errhint(
"SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname).")));
477 inforec = (*infofunc) ();
481 elog(
ERROR,
"null result from info function \"%s\"", infofuncname);
489 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
490 errmsg(
"unrecognized API version %d reported by info function \"%s\"",
583 memcpy(dstinfo, srcinfo,
sizeof(
FmgrInfo));
636 int save_sec_context;
637 volatile int save_nestlevel;
640 if (!fcinfo->flinfo->fn_extra)
652 fcinfo->flinfo->
fn_mcxt,
true);
658 elog(
ERROR,
"cache lookup failed for function %u",
659 fcinfo->flinfo->fn_oid);
662 if (procedureStruct->prosecdef)
663 fcache->
userid = procedureStruct->proowner;
676 fcinfo->flinfo->fn_extra = fcache;
710 save_flinfo = fcinfo->flinfo;
714 fcinfo->flinfo = &fcache->
flinfo;
726 (fcinfo->resultinfo == NULL ||
732 fcinfo->flinfo = save_flinfo;
739 fcinfo->flinfo = save_flinfo;
771 fcinfo->args[0].value = arg1;
772 fcinfo->args[0].isnull =
false;
774 result = (*func) (fcinfo);
778 elog(
ERROR,
"function %p returned NULL", (
void *) func);
791 fcinfo->args[0].value = arg1;
792 fcinfo->args[0].isnull =
false;
793 fcinfo->args[1].value = arg2;
794 fcinfo->args[1].isnull =
false;
796 result = (*func) (fcinfo);
800 elog(
ERROR,
"function %p returned NULL", (
void *) func);
814 fcinfo->args[0].value = arg1;
815 fcinfo->args[0].isnull =
false;
816 fcinfo->args[1].value = arg2;
817 fcinfo->args[1].isnull =
false;
818 fcinfo->args[2].value = arg3;
819 fcinfo->args[2].isnull =
false;
821 result = (*func) (fcinfo);
825 elog(
ERROR,
"function %p returned NULL", (
void *) func);
839 fcinfo->args[0].value = arg1;
840 fcinfo->args[0].isnull =
false;
841 fcinfo->args[1].value = arg2;
842 fcinfo->args[1].isnull =
false;
843 fcinfo->args[2].value = arg3;
844 fcinfo->args[2].isnull =
false;
845 fcinfo->args[3].value = arg4;
846 fcinfo->args[3].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;
874 fcinfo->args[4].value = arg5;
875 fcinfo->args[4].isnull =
false;
877 result = (*func) (fcinfo);
881 elog(
ERROR,
"function %p returned NULL", (
void *) func);
896 fcinfo->args[0].value = arg1;
897 fcinfo->args[0].isnull =
false;
898 fcinfo->args[1].value = arg2;
899 fcinfo->args[1].isnull =
false;
900 fcinfo->args[2].value = arg3;
901 fcinfo->args[2].isnull =
false;
902 fcinfo->args[3].value = arg4;
903 fcinfo->args[3].isnull =
false;
904 fcinfo->args[4].value = arg5;
905 fcinfo->args[4].isnull =
false;
906 fcinfo->args[5].value = arg6;
907 fcinfo->args[5].isnull =
false;
909 result = (*func) (fcinfo);
913 elog(
ERROR,
"function %p returned NULL", (
void *) func);
928 fcinfo->args[0].value = arg1;
929 fcinfo->args[0].isnull =
false;
930 fcinfo->args[1].value = arg2;
931 fcinfo->args[1].isnull =
false;
932 fcinfo->args[2].value = arg3;
933 fcinfo->args[2].isnull =
false;
934 fcinfo->args[3].value = arg4;
935 fcinfo->args[3].isnull =
false;
936 fcinfo->args[4].value = arg5;
937 fcinfo->args[4].isnull =
false;
938 fcinfo->args[5].value = arg6;
939 fcinfo->args[5].isnull =
false;
940 fcinfo->args[6].value = arg7;
941 fcinfo->args[6].isnull =
false;
943 result = (*func) (fcinfo);
947 elog(
ERROR,
"function %p returned NULL", (
void *) func);
962 fcinfo->args[0].value = arg1;
963 fcinfo->args[0].isnull =
false;
964 fcinfo->args[1].value = arg2;
965 fcinfo->args[1].isnull =
false;
966 fcinfo->args[2].value = arg3;
967 fcinfo->args[2].isnull =
false;
968 fcinfo->args[3].value = arg4;
969 fcinfo->args[3].isnull =
false;
970 fcinfo->args[4].value = arg5;
971 fcinfo->args[4].isnull =
false;
972 fcinfo->args[5].value = arg6;
973 fcinfo->args[5].isnull =
false;
974 fcinfo->args[6].value = arg7;
975 fcinfo->args[6].isnull =
false;
976 fcinfo->args[7].value = arg8;
977 fcinfo->args[7].isnull =
false;
979 result = (*func) (fcinfo);
983 elog(
ERROR,
"function %p returned NULL", (
void *) func);
999 fcinfo->args[0].value = arg1;
1000 fcinfo->args[0].isnull =
false;
1001 fcinfo->args[1].value = arg2;
1002 fcinfo->args[1].isnull =
false;
1003 fcinfo->args[2].value = arg3;
1004 fcinfo->args[2].isnull =
false;
1005 fcinfo->args[3].value = arg4;
1006 fcinfo->args[3].isnull =
false;
1007 fcinfo->args[4].value = arg5;
1008 fcinfo->args[4].isnull =
false;
1009 fcinfo->args[5].value = arg6;
1010 fcinfo->args[5].isnull =
false;
1011 fcinfo->args[6].value = arg7;
1012 fcinfo->args[6].isnull =
false;
1013 fcinfo->args[7].value = arg8;
1014 fcinfo->args[7].isnull =
false;
1015 fcinfo->args[8].value = arg9;
1016 fcinfo->args[8].isnull =
false;
1018 result = (*func) (fcinfo);
1022 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1044 fcinfo->args[0].value = arg1;
1045 fcinfo->args[0].isnull =
false;
1047 result = (*func) (fcinfo);
1051 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1064 fcinfo->args[0].value = arg1;
1065 fcinfo->args[0].isnull =
false;
1066 fcinfo->args[1].value = arg2;
1067 fcinfo->args[1].isnull =
false;
1069 result = (*func) (fcinfo);
1073 elog(
ERROR,
"function %p returned NULL", (
void *) func);
1108 fcinfo->args[0].value = arg1;
1109 fcinfo->args[0].isnull =
false;
1128 fcinfo->args[0].value = arg1;
1129 fcinfo->args[0].isnull =
false;
1130 fcinfo->args[1].value = arg2;
1131 fcinfo->args[1].isnull =
false;
1151 fcinfo->args[0].value = arg1;
1152 fcinfo->args[0].isnull =
false;
1153 fcinfo->args[1].value = arg2;
1154 fcinfo->args[1].isnull =
false;
1155 fcinfo->args[2].value = arg3;
1156 fcinfo->args[2].isnull =
false;
1176 fcinfo->args[0].value = arg1;
1177 fcinfo->args[0].isnull =
false;
1178 fcinfo->args[1].value = arg2;
1179 fcinfo->args[1].isnull =
false;
1180 fcinfo->args[2].value = arg3;
1181 fcinfo->args[2].isnull =
false;
1182 fcinfo->args[3].value = arg4;
1183 fcinfo->args[3].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;
1211 fcinfo->args[4].value = arg5;
1212 fcinfo->args[4].isnull =
false;
1233 fcinfo->args[0].value = arg1;
1234 fcinfo->args[0].isnull =
false;
1235 fcinfo->args[1].value = arg2;
1236 fcinfo->args[1].isnull =
false;
1237 fcinfo->args[2].value = arg3;
1238 fcinfo->args[2].isnull =
false;
1239 fcinfo->args[3].value = arg4;
1240 fcinfo->args[3].isnull =
false;
1241 fcinfo->args[4].value = arg5;
1242 fcinfo->args[4].isnull =
false;
1243 fcinfo->args[5].value = arg6;
1244 fcinfo->args[5].isnull =
false;
1265 fcinfo->args[0].value = arg1;
1266 fcinfo->args[0].isnull =
false;
1267 fcinfo->args[1].value = arg2;
1268 fcinfo->args[1].isnull =
false;
1269 fcinfo->args[2].value = arg3;
1270 fcinfo->args[2].isnull =
false;
1271 fcinfo->args[3].value = arg4;
1272 fcinfo->args[3].isnull =
false;
1273 fcinfo->args[4].value = arg5;
1274 fcinfo->args[4].isnull =
false;
1275 fcinfo->args[5].value = arg6;
1276 fcinfo->args[5].isnull =
false;
1277 fcinfo->args[6].value = arg7;
1278 fcinfo->args[6].isnull =
false;
1299 fcinfo->args[0].value = arg1;
1300 fcinfo->args[0].isnull =
false;
1301 fcinfo->args[1].value = arg2;
1302 fcinfo->args[1].isnull =
false;
1303 fcinfo->args[2].value = arg3;
1304 fcinfo->args[2].isnull =
false;
1305 fcinfo->args[3].value = arg4;
1306 fcinfo->args[3].isnull =
false;
1307 fcinfo->args[4].value = arg5;
1308 fcinfo->args[4].isnull =
false;
1309 fcinfo->args[5].value = arg6;
1310 fcinfo->args[5].isnull =
false;
1311 fcinfo->args[6].value = arg7;
1312 fcinfo->args[6].isnull =
false;
1313 fcinfo->args[7].value = arg8;
1314 fcinfo->args[7].isnull =
false;
1336 fcinfo->args[0].value = arg1;
1337 fcinfo->args[0].isnull =
false;
1338 fcinfo->args[1].value = arg2;
1339 fcinfo->args[1].isnull =
false;
1340 fcinfo->args[2].value = arg3;
1341 fcinfo->args[2].isnull =
false;
1342 fcinfo->args[3].value = arg4;
1343 fcinfo->args[3].isnull =
false;
1344 fcinfo->args[4].value = arg5;
1345 fcinfo->args[4].isnull =
false;
1346 fcinfo->args[5].value = arg6;
1347 fcinfo->args[5].isnull =
false;
1348 fcinfo->args[6].value = arg7;
1349 fcinfo->args[6].isnull =
false;
1350 fcinfo->args[7].value = arg8;
1351 fcinfo->args[7].isnull =
false;
1352 fcinfo->args[8].value = arg9;
1353 fcinfo->args[8].isnull =
false;
1485 arg6, arg7, arg8, arg9);
1513 fcinfo->args[0].isnull =
false;
1515 fcinfo->args[1].isnull =
false;
1517 fcinfo->args[2].isnull =
false;
1524 if (!fcinfo->isnull)
1525 elog(
ERROR,
"input function %u returned non-NULL",
1531 elog(
ERROR,
"input function %u returned NULL",
1566 *result = (
Datum) 0;
1573 fcinfo->args[0].isnull =
false;
1575 fcinfo->args[1].isnull =
false;
1577 fcinfo->args[2].isnull =
false;
1588 if (!fcinfo->isnull)
1589 elog(
ERROR,
"input function %u returned non-NULL",
1595 elog(
ERROR,
"input function %u returned NULL",
1621 *result = (
Datum) 0;
1628 fcinfo->args[0].isnull =
false;
1630 fcinfo->args[1].isnull =
false;
1632 fcinfo->args[2].isnull =
false;
1634 *result = (*func) (fcinfo);
1642 elog(
ERROR,
"input function %p returned NULL", (
void *) func);
1681 fcinfo->args[0].isnull =
false;
1683 fcinfo->args[1].isnull =
false;
1685 fcinfo->args[2].isnull =
false;
1692 if (!fcinfo->isnull)
1693 elog(
ERROR,
"receive function %u returned non-NULL",
1699 elog(
ERROR,
"receive function %u returned NULL",
1776 #ifndef USE_FLOAT8_BYVAL
1781 int64 *retval = (int64 *)
palloc(
sizeof(int64));
1823 memcpy(result, datum,
len);
1868 if (!flinfo || !flinfo->
fn_expr)
1888 if (!flinfo || !flinfo->
fn_expr)
1953 if (!flinfo || !flinfo->
fn_expr)
2024 if (!flinfo || !flinfo->
fn_expr)
2030 return ((
FuncExpr *) expr)->funcvariadic;
2060 return !expr->constisnull;
2076 return expr->constisnull ? NULL :
DatumGetByteaP(expr->constvalue);
2080 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
2081 errmsg(
"operator class options info is absent in function call context")));
2132 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
2133 errmsg(
"function with OID %u does not exist", functionOid)));
2142 elog(
ERROR,
"cache lookup failed for language %u", procStruct->prolang);
2145 if (langStruct->lanvalidator != validatorOid)
2147 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2148 errmsg(
"language validation function %u called for language %u instead of %u",
2149 validatorOid, procStruct->prolang,
2150 langStruct->lanvalidator)));
2157 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 DatumGetArrayTypePCopy(X)
#define TextDatumGetCString(d)
#define OidIsValid(objectId)
elog(ERROR, "%s: %s", p2, msg)
struct varlena * detoast_attr(struct varlena *attr)
struct varlena * detoast_attr_slice(struct varlena *attr, int32 sliceoffset, int32 slicelength)
void * load_external_function(const char *filename, const char *funcname, bool signalNotFound, void **filehandle)
void * lookup_external_function(void *filehandle, const char *funcname)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, long 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)
struct varlena * pg_detoast_datum_packed(struct varlena *datum)
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)
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)
struct varlena * pg_detoast_datum_copy(struct varlena *datum)
bool CheckFunctionValidatorAccess(Oid validatorOid, Oid functionOid)
Datum OidReceiveFunctionCall(Oid functionId, StringInfo buf, Oid typioparam, int32 typmod)
bytea * get_fn_opclass_options(FmgrInfo *flinfo)
Datum InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod)
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
void fmgr_info(Oid functionId, FmgrInfo *finfo)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
const Pg_finfo_record * fetch_finfo_record(void *filehandle, const char *funcname)
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)
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)
Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3)
void fmgr_info_cxt(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt)
Datum Int64GetDatum(int64 X)
Datum OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
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)
static const FmgrBuiltin * fmgr_isbuiltin(Oid id)
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 InputFunctionCallSafe(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod, fmNodePtr escontext, Datum *result)
Datum Float8GetDatum(float8 X)
bool has_fn_opclass_options(FmgrInfo *flinfo)
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)
char * OidOutputFunctionCall(Oid functionId, Datum val)
Datum DirectFunctionCall5Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1)
static const FmgrBuiltin * fmgr_lookupByName(const char *name)
struct varlena * pg_detoast_datum_slice(struct varlena *datum, int32 first, int32 count)
bool get_fn_expr_variadic(FmgrInfo *flinfo)
Datum DirectFunctionCall1Coll(PGFunction func, Oid collation, Datum arg1)
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 * SendFunctionCall(FmgrInfo *flinfo, Datum val)
Datum FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1)
Datum fmgr_security_definer(PG_FUNCTION_ARGS)
bool DirectInputFunctionCallSafe(PGFunction func, char *str, Oid typioparam, int32 typmod, fmNodePtr escontext, Datum *result)
bytea * OidSendFunctionCall(Oid functionId, Datum val)
Oid get_fn_expr_rettype(FmgrInfo *flinfo)
char * OutputFunctionCall(FmgrInfo *flinfo, Datum val)
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)
struct varlena * pg_detoast_datum(struct varlena *datum)
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)
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)
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)
const Pg_finfo_record *(* PGFInfoFunction)(void)
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)
void ProcessGUCArray(ArrayType *array, ArrayType *usersetArray, GucContext context, GucSource source, GucAction action)
void AtEOXact_GUC(bool isCommit, int nestLevel)
bool heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc)
#define HeapTupleIsValid(tuple)
#define HeapTupleHeaderGetRawXmin(tup)
if(TABLE==NULL||TABLE_index==NULL)
bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2)
Oid get_base_element_type(Oid typid)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
char * pstrdup(const char *in)
void pfree(void *pointer)
void * MemoryContextAllocZero(MemoryContext context, Size size)
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)
static void * list_nth(const List *list, int n)
FormData_pg_proc * Form_pg_proc
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 char * DatumGetCString(Datum X)
static Datum ObjectIdGetDatum(Oid 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)
#define VARATT_IS_EXTENDED(PTR)
#define VARATT_IS_COMPRESSED(PTR)
#define VARATT_IS_EXTERNAL(PTR)