PostgreSQL Source Code  git master
fmgr.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  FmgrInfo
 
struct  FunctionCallInfoBaseData
 
struct  Pg_finfo_record
 
struct  Pg_magic_struct
 

Macros

#define FIELDNO_FUNCTIONCALLINFODATA_ISNULL   4
 
#define FIELDNO_FUNCTIONCALLINFODATA_ARGS   6
 
#define SizeForFunctionCallInfo(nargs)
 
#define LOCAL_FCINFO(name, nargs)
 
#define fmgr_info_set_expr(expr, finfo)    ((finfo)->fn_expr = (expr))
 
#define InitFunctionCallInfoData(Fcinfo, Flinfo, Nargs, Collation, Context, Resultinfo)
 
#define FunctionCallInvoke(fcinfo)   ((* (fcinfo)->flinfo->fn_addr) (fcinfo))
 
#define PG_FUNCTION_ARGS   FunctionCallInfo fcinfo
 
#define PG_GET_COLLATION()   (fcinfo->fncollation)
 
#define PG_NARGS()   (fcinfo->nargs)
 
#define PG_ARGISNULL(n)   (fcinfo->args[n].isnull)
 
#define PG_DETOAST_DATUM(datum)    pg_detoast_datum((struct varlena *) DatumGetPointer(datum))
 
#define PG_DETOAST_DATUM_COPY(datum)    pg_detoast_datum_copy((struct varlena *) DatumGetPointer(datum))
 
#define PG_DETOAST_DATUM_SLICE(datum, f, c)
 
#define PG_DETOAST_DATUM_PACKED(datum)    pg_detoast_datum_packed((struct varlena *) DatumGetPointer(datum))
 
#define PG_FREE_IF_COPY(ptr, n)
 
#define PG_GETARG_DATUM(n)   (fcinfo->args[n].value)
 
#define PG_GETARG_INT32(n)   DatumGetInt32(PG_GETARG_DATUM(n))
 
#define PG_GETARG_UINT32(n)   DatumGetUInt32(PG_GETARG_DATUM(n))
 
#define PG_GETARG_INT16(n)   DatumGetInt16(PG_GETARG_DATUM(n))
 
#define PG_GETARG_UINT16(n)   DatumGetUInt16(PG_GETARG_DATUM(n))
 
#define PG_GETARG_CHAR(n)   DatumGetChar(PG_GETARG_DATUM(n))
 
#define PG_GETARG_BOOL(n)   DatumGetBool(PG_GETARG_DATUM(n))
 
#define PG_GETARG_OID(n)   DatumGetObjectId(PG_GETARG_DATUM(n))
 
#define PG_GETARG_POINTER(n)   DatumGetPointer(PG_GETARG_DATUM(n))
 
#define PG_GETARG_CSTRING(n)   DatumGetCString(PG_GETARG_DATUM(n))
 
#define PG_GETARG_NAME(n)   DatumGetName(PG_GETARG_DATUM(n))
 
#define PG_GETARG_TRANSACTIONID(n)   DatumGetTransactionId(PG_GETARG_DATUM(n))
 
#define PG_GETARG_FLOAT4(n)   DatumGetFloat4(PG_GETARG_DATUM(n))
 
#define PG_GETARG_FLOAT8(n)   DatumGetFloat8(PG_GETARG_DATUM(n))
 
#define PG_GETARG_INT64(n)   DatumGetInt64(PG_GETARG_DATUM(n))
 
#define PG_GETARG_RAW_VARLENA_P(n)   ((struct varlena *) PG_GETARG_POINTER(n))
 
#define PG_GETARG_VARLENA_P(n)   PG_DETOAST_DATUM(PG_GETARG_DATUM(n))
 
#define PG_GETARG_VARLENA_PP(n)   PG_DETOAST_DATUM_PACKED(PG_GETARG_DATUM(n))
 
#define DatumGetByteaPP(X)   ((bytea *) PG_DETOAST_DATUM_PACKED(X))
 
#define DatumGetTextPP(X)   ((text *) PG_DETOAST_DATUM_PACKED(X))
 
#define DatumGetBpCharPP(X)   ((BpChar *) PG_DETOAST_DATUM_PACKED(X))
 
#define DatumGetVarCharPP(X)   ((VarChar *) PG_DETOAST_DATUM_PACKED(X))
 
#define DatumGetHeapTupleHeader(X)   ((HeapTupleHeader) PG_DETOAST_DATUM(X))
 
#define DatumGetByteaPCopy(X)   ((bytea *) PG_DETOAST_DATUM_COPY(X))
 
#define DatumGetTextPCopy(X)   ((text *) PG_DETOAST_DATUM_COPY(X))
 
#define DatumGetBpCharPCopy(X)   ((BpChar *) PG_DETOAST_DATUM_COPY(X))
 
#define DatumGetVarCharPCopy(X)   ((VarChar *) PG_DETOAST_DATUM_COPY(X))
 
#define DatumGetHeapTupleHeaderCopy(X)   ((HeapTupleHeader) PG_DETOAST_DATUM_COPY(X))
 
#define DatumGetByteaPSlice(X, m, n)   ((bytea *) PG_DETOAST_DATUM_SLICE(X,m,n))
 
#define DatumGetTextPSlice(X, m, n)   ((text *) PG_DETOAST_DATUM_SLICE(X,m,n))
 
#define DatumGetBpCharPSlice(X, m, n)   ((BpChar *) PG_DETOAST_DATUM_SLICE(X,m,n))
 
#define DatumGetVarCharPSlice(X, m, n)   ((VarChar *) PG_DETOAST_DATUM_SLICE(X,m,n))
 
#define PG_GETARG_BYTEA_PP(n)   DatumGetByteaPP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_TEXT_PP(n)   DatumGetTextPP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_BPCHAR_PP(n)   DatumGetBpCharPP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_VARCHAR_PP(n)   DatumGetVarCharPP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_HEAPTUPLEHEADER(n)   DatumGetHeapTupleHeader(PG_GETARG_DATUM(n))
 
#define PG_GETARG_BYTEA_P_COPY(n)   DatumGetByteaPCopy(PG_GETARG_DATUM(n))
 
#define PG_GETARG_TEXT_P_COPY(n)   DatumGetTextPCopy(PG_GETARG_DATUM(n))
 
#define PG_GETARG_BPCHAR_P_COPY(n)   DatumGetBpCharPCopy(PG_GETARG_DATUM(n))
 
#define PG_GETARG_VARCHAR_P_COPY(n)   DatumGetVarCharPCopy(PG_GETARG_DATUM(n))
 
#define PG_GETARG_HEAPTUPLEHEADER_COPY(n)   DatumGetHeapTupleHeaderCopy(PG_GETARG_DATUM(n))
 
#define PG_GETARG_BYTEA_P_SLICE(n, a, b)   DatumGetByteaPSlice(PG_GETARG_DATUM(n),a,b)
 
#define PG_GETARG_TEXT_P_SLICE(n, a, b)   DatumGetTextPSlice(PG_GETARG_DATUM(n),a,b)
 
#define PG_GETARG_BPCHAR_P_SLICE(n, a, b)   DatumGetBpCharPSlice(PG_GETARG_DATUM(n),a,b)
 
#define PG_GETARG_VARCHAR_P_SLICE(n, a, b)   DatumGetVarCharPSlice(PG_GETARG_DATUM(n),a,b)
 
#define DatumGetByteaP(X)   ((bytea *) PG_DETOAST_DATUM(X))
 
#define DatumGetTextP(X)   ((text *) PG_DETOAST_DATUM(X))
 
#define DatumGetBpCharP(X)   ((BpChar *) PG_DETOAST_DATUM(X))
 
#define DatumGetVarCharP(X)   ((VarChar *) PG_DETOAST_DATUM(X))
 
#define PG_GETARG_BYTEA_P(n)   DatumGetByteaP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_TEXT_P(n)   DatumGetTextP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_BPCHAR_P(n)   DatumGetBpCharP(PG_GETARG_DATUM(n))
 
#define PG_GETARG_VARCHAR_P(n)   DatumGetVarCharP(PG_GETARG_DATUM(n))
 
#define PG_HAS_OPCLASS_OPTIONS()   has_fn_opclass_options(fcinfo->flinfo)
 
#define PG_GET_OPCLASS_OPTIONS()   get_fn_opclass_options(fcinfo->flinfo)
 
#define PG_RETURN_NULL()    do { fcinfo->isnull = true; return (Datum) 0; } while (0)
 
#define PG_RETURN_VOID()   return (Datum) 0
 
#define PG_RETURN_DATUM(x)   return (x)
 
#define PG_RETURN_INT32(x)   return Int32GetDatum(x)
 
#define PG_RETURN_UINT32(x)   return UInt32GetDatum(x)
 
#define PG_RETURN_INT16(x)   return Int16GetDatum(x)
 
#define PG_RETURN_UINT16(x)   return UInt16GetDatum(x)
 
#define PG_RETURN_CHAR(x)   return CharGetDatum(x)
 
#define PG_RETURN_BOOL(x)   return BoolGetDatum(x)
 
#define PG_RETURN_OID(x)   return ObjectIdGetDatum(x)
 
#define PG_RETURN_POINTER(x)   return PointerGetDatum(x)
 
#define PG_RETURN_CSTRING(x)   return CStringGetDatum(x)
 
#define PG_RETURN_NAME(x)   return NameGetDatum(x)
 
#define PG_RETURN_TRANSACTIONID(x)   return TransactionIdGetDatum(x)
 
#define PG_RETURN_FLOAT4(x)   return Float4GetDatum(x)
 
#define PG_RETURN_FLOAT8(x)   return Float8GetDatum(x)
 
#define PG_RETURN_INT64(x)   return Int64GetDatum(x)
 
#define PG_RETURN_UINT64(x)   return UInt64GetDatum(x)
 
#define PG_RETURN_BYTEA_P(x)   PG_RETURN_POINTER(x)
 
#define PG_RETURN_TEXT_P(x)   PG_RETURN_POINTER(x)
 
#define PG_RETURN_BPCHAR_P(x)   PG_RETURN_POINTER(x)
 
#define PG_RETURN_VARCHAR_P(x)   PG_RETURN_POINTER(x)
 
#define PG_RETURN_HEAPTUPLEHEADER(x)   return HeapTupleHeaderGetDatum(x)
 
#define PG_FUNCTION_INFO_V1(funcname)
 
#define PG_MODULE_MAGIC_DATA
 
#define PG_MAGIC_FUNCTION_NAME   Pg_magic_func
 
#define PG_MAGIC_FUNCTION_NAME_STRING   "Pg_magic_func"
 
#define PG_MODULE_MAGIC
 
#define DirectFunctionCall1(func, arg1)    DirectFunctionCall1Coll(func, InvalidOid, arg1)
 
#define DirectFunctionCall2(func, arg1, arg2)    DirectFunctionCall2Coll(func, InvalidOid, arg1, arg2)
 
#define DirectFunctionCall3(func, arg1, arg2, arg3)    DirectFunctionCall3Coll(func, InvalidOid, arg1, arg2, arg3)
 
#define DirectFunctionCall4(func, arg1, arg2, arg3, arg4)    DirectFunctionCall4Coll(func, InvalidOid, arg1, arg2, arg3, arg4)
 
#define DirectFunctionCall5(func, arg1, arg2, arg3, arg4, arg5)    DirectFunctionCall5Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5)
 
#define DirectFunctionCall6(func, arg1, arg2, arg3, arg4, arg5, arg6)    DirectFunctionCall6Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6)
 
#define DirectFunctionCall7(func, arg1, arg2, arg3, arg4, arg5, arg6, arg7)    DirectFunctionCall7Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
 
#define DirectFunctionCall8(func, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)    DirectFunctionCall8Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
 
#define DirectFunctionCall9(func, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)    DirectFunctionCall9Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
 
#define FunctionCall1(flinfo, arg1)    FunctionCall1Coll(flinfo, InvalidOid, arg1)
 
#define FunctionCall2(flinfo, arg1, arg2)    FunctionCall2Coll(flinfo, InvalidOid, arg1, arg2)
 
#define FunctionCall3(flinfo, arg1, arg2, arg3)    FunctionCall3Coll(flinfo, InvalidOid, arg1, arg2, arg3)
 
#define FunctionCall4(flinfo, arg1, arg2, arg3, arg4)    FunctionCall4Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4)
 
#define FunctionCall5(flinfo, arg1, arg2, arg3, arg4, arg5)    FunctionCall5Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5)
 
#define FunctionCall6(flinfo, arg1, arg2, arg3, arg4, arg5, arg6)    FunctionCall6Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6)
 
#define FunctionCall7(flinfo, arg1, arg2, arg3, arg4, arg5, arg6, arg7)    FunctionCall7Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
 
#define FunctionCall8(flinfo, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)    FunctionCall8Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
 
#define FunctionCall9(flinfo, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)    FunctionCall9Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
 
#define OidFunctionCall0(functionId)    OidFunctionCall0Coll(functionId, InvalidOid)
 
#define OidFunctionCall1(functionId, arg1)    OidFunctionCall1Coll(functionId, InvalidOid, arg1)
 
#define OidFunctionCall2(functionId, arg1, arg2)    OidFunctionCall2Coll(functionId, InvalidOid, arg1, arg2)
 
#define OidFunctionCall3(functionId, arg1, arg2, arg3)    OidFunctionCall3Coll(functionId, InvalidOid, arg1, arg2, arg3)
 
#define OidFunctionCall4(functionId, arg1, arg2, arg3, arg4)    OidFunctionCall4Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4)
 
#define OidFunctionCall5(functionId, arg1, arg2, arg3, arg4, arg5)    OidFunctionCall5Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5)
 
#define OidFunctionCall6(functionId, arg1, arg2, arg3, arg4, arg5, arg6)    OidFunctionCall6Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6)
 
#define OidFunctionCall7(functionId, arg1, arg2, arg3, arg4, arg5, arg6, arg7)    OidFunctionCall7Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
 
#define OidFunctionCall8(functionId, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)    OidFunctionCall8Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
 
#define OidFunctionCall9(functionId, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)    OidFunctionCall9Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
 
#define AGG_CONTEXT_AGGREGATE   1 /* regular aggregate */
 
#define AGG_CONTEXT_WINDOW   2 /* window function */
 
#define FmgrHookIsNeeded(fn_oid)    (!needs_fmgr_hook ? false : (*needs_fmgr_hook)(fn_oid))
 

Typedefs

typedef struct NodefmNodePtr
 
typedef struct AggreffmAggrefPtr
 
typedef void(* fmExprContextCallbackFunction) (Datum arg)
 
typedef struct StringInfoDatafmStringInfo
 
typedef struct FunctionCallInfoBaseDataFunctionCallInfo
 
typedef Datum(* PGFunction) (FunctionCallInfo fcinfo)
 
typedef struct FmgrInfo FmgrInfo
 
typedef struct FunctionCallInfoBaseData FunctionCallInfoBaseData
 
typedef const Pg_finfo_record *(* PGFInfoFunction) (void)
 
typedef const Pg_magic_struct *(* PGModuleMagicFunction) (void)
 
typedef enum FmgrHookEventType FmgrHookEventType
 
typedef bool(* needs_fmgr_hook_type) (Oid fn_oid)
 
typedef void(* fmgr_hook_type) (FmgrHookEventType event, FmgrInfo *flinfo, Datum *arg)
 

Enumerations

enum  FmgrHookEventType { FHET_START , FHET_END , FHET_ABORT }
 

Functions

void fmgr_info (Oid functionId, FmgrInfo *finfo)
 
void fmgr_info_cxt (Oid functionId, FmgrInfo *finfo, MemoryContext mcxt)
 
void fmgr_info_copy (FmgrInfo *dstinfo, FmgrInfo *srcinfo, MemoryContext destcxt)
 
void fmgr_symbol (Oid functionId, char **mod, char **fn)
 
struct varlenapg_detoast_datum (struct varlena *datum)
 
struct varlenapg_detoast_datum_copy (struct varlena *datum)
 
struct varlenapg_detoast_datum_slice (struct varlena *datum, int32 first, int32 count)
 
struct varlenapg_detoast_datum_packed (struct varlena *datum)
 
 StaticAssertDecl (sizeof(FMGR_ABI_EXTRA)<=sizeof(((Pg_magic_struct *) 0) ->abi_extra), "FMGR_ABI_EXTRA too long")
 
Datum DirectFunctionCall1Coll (PGFunction func, Oid collation, Datum arg1)
 
Datum DirectFunctionCall2Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2)
 
Datum DirectFunctionCall3Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3)
 
Datum DirectFunctionCall4Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
 
Datum DirectFunctionCall5Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
 
Datum DirectFunctionCall6Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
 
Datum DirectFunctionCall7Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
 
Datum DirectFunctionCall8Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
 
Datum DirectFunctionCall9Coll (PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
 
Datum CallerFInfoFunctionCall1 (PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1)
 
Datum CallerFInfoFunctionCall2 (PGFunction func, FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
 
Datum FunctionCall0Coll (FmgrInfo *flinfo, Oid collation)
 
Datum FunctionCall1Coll (FmgrInfo *flinfo, Oid collation, Datum arg1)
 
Datum FunctionCall2Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
 
Datum FunctionCall3Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3)
 
Datum FunctionCall4Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
 
Datum FunctionCall5Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
 
Datum FunctionCall6Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
 
Datum FunctionCall7Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
 
Datum FunctionCall8Coll (FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
 
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 OidFunctionCall0Coll (Oid functionId, Oid collation)
 
Datum OidFunctionCall1Coll (Oid functionId, Oid collation, Datum arg1)
 
Datum OidFunctionCall2Coll (Oid functionId, Oid collation, Datum arg1, Datum arg2)
 
Datum OidFunctionCall3Coll (Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3)
 
Datum OidFunctionCall4Coll (Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
 
Datum OidFunctionCall5Coll (Oid functionId, 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)
 
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 OidFunctionCall9Coll (Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
 
Datum InputFunctionCall (FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod)
 
Datum OidInputFunctionCall (Oid functionId, char *str, Oid typioparam, int32 typmod)
 
char * OutputFunctionCall (FmgrInfo *flinfo, Datum val)
 
char * OidOutputFunctionCall (Oid functionId, Datum val)
 
Datum ReceiveFunctionCall (FmgrInfo *flinfo, fmStringInfo buf, Oid typioparam, int32 typmod)
 
Datum OidReceiveFunctionCall (Oid functionId, fmStringInfo buf, Oid typioparam, int32 typmod)
 
byteaSendFunctionCall (FmgrInfo *flinfo, Datum val)
 
byteaOidSendFunctionCall (Oid functionId, Datum val)
 
const Pg_finfo_recordfetch_finfo_record (void *filehandle, const char *funcname)
 
Oid fmgr_internal_function (const char *proname)
 
Oid get_fn_expr_rettype (FmgrInfo *flinfo)
 
Oid get_fn_expr_argtype (FmgrInfo *flinfo, int argnum)
 
Oid get_call_expr_argtype (fmNodePtr expr, int argnum)
 
bool get_fn_expr_arg_stable (FmgrInfo *flinfo, int argnum)
 
bool get_call_expr_arg_stable (fmNodePtr expr, int argnum)
 
bool get_fn_expr_variadic (FmgrInfo *flinfo)
 
byteaget_fn_opclass_options (FmgrInfo *flinfo)
 
bool has_fn_opclass_options (FmgrInfo *flinfo)
 
void set_fn_opclass_options (FmgrInfo *flinfo, bytea *options)
 
bool CheckFunctionValidatorAccess (Oid validatorOid, Oid functionOid)
 
void * load_external_function (const char *filename, const char *funcname, bool signalNotFound, void **filehandle)
 
void * lookup_external_function (void *filehandle, const char *funcname)
 
void load_file (const char *filename, bool restricted)
 
void ** find_rendezvous_variable (const char *varName)
 
Size EstimateLibraryStateSpace (void)
 
void SerializeLibraryState (Size maxsize, char *start_address)
 
void RestoreLibraryState (char *start_address)
 
int AggCheckCallContext (FunctionCallInfo fcinfo, MemoryContext *aggcontext)
 
fmAggrefPtr AggGetAggref (FunctionCallInfo fcinfo)
 
MemoryContext AggGetTempMemoryContext (FunctionCallInfo fcinfo)
 
bool AggStateIsShared (FunctionCallInfo fcinfo)
 
void AggRegisterCallback (FunctionCallInfo fcinfo, fmExprContextCallbackFunction func, Datum arg)
 

Variables

PGDLLIMPORT char * Dynamic_library_path
 
PGDLLIMPORT needs_fmgr_hook_type needs_fmgr_hook
 
PGDLLIMPORT fmgr_hook_type fmgr_hook
 

Macro Definition Documentation

◆ AGG_CONTEXT_AGGREGATE

#define AGG_CONTEXT_AGGREGATE   1 /* regular aggregate */

Definition at line 742 of file fmgr.h.

◆ AGG_CONTEXT_WINDOW

#define AGG_CONTEXT_WINDOW   2 /* window function */

Definition at line 743 of file fmgr.h.

◆ DatumGetBpCharP

#define DatumGetBpCharP (   X)    ((BpChar *) PG_DETOAST_DATUM(X))

Definition at line 333 of file fmgr.h.

◆ DatumGetBpCharPCopy

#define DatumGetBpCharPCopy (   X)    ((BpChar *) PG_DETOAST_DATUM_COPY(X))

Definition at line 299 of file fmgr.h.

◆ DatumGetBpCharPP

#define DatumGetBpCharPP (   X)    ((BpChar *) PG_DETOAST_DATUM_PACKED(X))

Definition at line 293 of file fmgr.h.

◆ DatumGetBpCharPSlice

#define DatumGetBpCharPSlice (   X,
  m,
 
)    ((BpChar *) PG_DETOAST_DATUM_SLICE(X,m,n))

Definition at line 305 of file fmgr.h.

◆ DatumGetByteaP

#define DatumGetByteaP (   X)    ((bytea *) PG_DETOAST_DATUM(X))

Definition at line 331 of file fmgr.h.

◆ DatumGetByteaPCopy

#define DatumGetByteaPCopy (   X)    ((bytea *) PG_DETOAST_DATUM_COPY(X))

Definition at line 297 of file fmgr.h.

◆ DatumGetByteaPP

#define DatumGetByteaPP (   X)    ((bytea *) PG_DETOAST_DATUM_PACKED(X))

Definition at line 291 of file fmgr.h.

◆ DatumGetByteaPSlice

#define DatumGetByteaPSlice (   X,
  m,
 
)    ((bytea *) PG_DETOAST_DATUM_SLICE(X,m,n))

Definition at line 303 of file fmgr.h.

◆ DatumGetHeapTupleHeader

#define DatumGetHeapTupleHeader (   X)    ((HeapTupleHeader) PG_DETOAST_DATUM(X))

Definition at line 295 of file fmgr.h.

◆ DatumGetHeapTupleHeaderCopy

#define DatumGetHeapTupleHeaderCopy (   X)    ((HeapTupleHeader) PG_DETOAST_DATUM_COPY(X))

Definition at line 301 of file fmgr.h.

◆ DatumGetTextP

#define DatumGetTextP (   X)    ((text *) PG_DETOAST_DATUM(X))

Definition at line 332 of file fmgr.h.

◆ DatumGetTextPCopy

#define DatumGetTextPCopy (   X)    ((text *) PG_DETOAST_DATUM_COPY(X))

Definition at line 298 of file fmgr.h.

◆ DatumGetTextPP

#define DatumGetTextPP (   X)    ((text *) PG_DETOAST_DATUM_PACKED(X))

Definition at line 292 of file fmgr.h.

◆ DatumGetTextPSlice

#define DatumGetTextPSlice (   X,
  m,
 
)    ((text *) PG_DETOAST_DATUM_SLICE(X,m,n))

Definition at line 304 of file fmgr.h.

◆ DatumGetVarCharP

#define DatumGetVarCharP (   X)    ((VarChar *) PG_DETOAST_DATUM(X))

Definition at line 334 of file fmgr.h.

◆ DatumGetVarCharPCopy

#define DatumGetVarCharPCopy (   X)    ((VarChar *) PG_DETOAST_DATUM_COPY(X))

Definition at line 300 of file fmgr.h.

◆ DatumGetVarCharPP

#define DatumGetVarCharPP (   X)    ((VarChar *) PG_DETOAST_DATUM_PACKED(X))

Definition at line 294 of file fmgr.h.

◆ DatumGetVarCharPSlice

#define DatumGetVarCharPSlice (   X,
  m,
 
)    ((VarChar *) PG_DETOAST_DATUM_SLICE(X,m,n))

Definition at line 306 of file fmgr.h.

◆ DirectFunctionCall1

#define DirectFunctionCall1 (   func,
  arg1 
)     DirectFunctionCall1Coll(func, InvalidOid, arg1)

Definition at line 631 of file fmgr.h.

◆ DirectFunctionCall2

#define DirectFunctionCall2 (   func,
  arg1,
  arg2 
)     DirectFunctionCall2Coll(func, InvalidOid, arg1, arg2)

Definition at line 633 of file fmgr.h.

◆ DirectFunctionCall3

#define DirectFunctionCall3 (   func,
  arg1,
  arg2,
  arg3 
)     DirectFunctionCall3Coll(func, InvalidOid, arg1, arg2, arg3)

Definition at line 635 of file fmgr.h.

◆ DirectFunctionCall4

#define DirectFunctionCall4 (   func,
  arg1,
  arg2,
  arg3,
  arg4 
)     DirectFunctionCall4Coll(func, InvalidOid, arg1, arg2, arg3, arg4)

Definition at line 637 of file fmgr.h.

◆ DirectFunctionCall5

#define DirectFunctionCall5 (   func,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5 
)     DirectFunctionCall5Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5)

Definition at line 639 of file fmgr.h.

◆ DirectFunctionCall6

#define DirectFunctionCall6 (   func,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6 
)     DirectFunctionCall6Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6)

Definition at line 641 of file fmgr.h.

◆ DirectFunctionCall7

#define DirectFunctionCall7 (   func,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7 
)     DirectFunctionCall7Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7)

Definition at line 643 of file fmgr.h.

◆ DirectFunctionCall8

#define DirectFunctionCall8 (   func,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7,
  arg8 
)     DirectFunctionCall8Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)

Definition at line 645 of file fmgr.h.

◆ DirectFunctionCall9

#define DirectFunctionCall9 (   func,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7,
  arg8,
  arg9 
)     DirectFunctionCall9Coll(func, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)

Definition at line 647 of file fmgr.h.

◆ FIELDNO_FUNCTIONCALLINFODATA_ARGS

#define FIELDNO_FUNCTIONCALLINFODATA_ARGS   6

Definition at line 94 of file fmgr.h.

◆ FIELDNO_FUNCTIONCALLINFODATA_ISNULL

#define FIELDNO_FUNCTIONCALLINFODATA_ISNULL   4

Definition at line 91 of file fmgr.h.

◆ fmgr_info_set_expr

#define fmgr_info_set_expr (   expr,
  finfo 
)     ((finfo)->fn_expr = (expr))

Definition at line 135 of file fmgr.h.

◆ FmgrHookIsNeeded

#define FmgrHookIsNeeded (   fn_oid)     (!needs_fmgr_hook ? false : (*needs_fmgr_hook)(fn_oid))

Definition at line 778 of file fmgr.h.

◆ FunctionCall1

#define FunctionCall1 (   flinfo,
  arg1 
)     FunctionCall1Coll(flinfo, InvalidOid, arg1)

Definition at line 649 of file fmgr.h.

◆ FunctionCall2

#define FunctionCall2 (   flinfo,
  arg1,
  arg2 
)     FunctionCall2Coll(flinfo, InvalidOid, arg1, arg2)

Definition at line 651 of file fmgr.h.

◆ FunctionCall3

#define FunctionCall3 (   flinfo,
  arg1,
  arg2,
  arg3 
)     FunctionCall3Coll(flinfo, InvalidOid, arg1, arg2, arg3)

Definition at line 653 of file fmgr.h.

◆ FunctionCall4

#define FunctionCall4 (   flinfo,
  arg1,
  arg2,
  arg3,
  arg4 
)     FunctionCall4Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4)

Definition at line 655 of file fmgr.h.

◆ FunctionCall5

#define FunctionCall5 (   flinfo,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5 
)     FunctionCall5Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5)

Definition at line 657 of file fmgr.h.

◆ FunctionCall6

#define FunctionCall6 (   flinfo,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6 
)     FunctionCall6Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6)

Definition at line 659 of file fmgr.h.

◆ FunctionCall7

#define FunctionCall7 (   flinfo,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7 
)     FunctionCall7Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7)

Definition at line 661 of file fmgr.h.

◆ FunctionCall8

#define FunctionCall8 (   flinfo,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7,
  arg8 
)     FunctionCall8Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)

Definition at line 663 of file fmgr.h.

◆ FunctionCall9

#define FunctionCall9 (   flinfo,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7,
  arg8,
  arg9 
)     FunctionCall9Coll(flinfo, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)

Definition at line 665 of file fmgr.h.

◆ FunctionCallInvoke

#define FunctionCallInvoke (   fcinfo)    ((* (fcinfo)->flinfo->fn_addr) (fcinfo))

Definition at line 172 of file fmgr.h.

◆ InitFunctionCallInfoData

#define InitFunctionCallInfoData (   Fcinfo,
  Flinfo,
  Nargs,
  Collation,
  Context,
  Resultinfo 
)
Value:
do { \
(Fcinfo).flinfo = (Flinfo); \
(Fcinfo).context = (Context); \
(Fcinfo).resultinfo = (Resultinfo); \
(Fcinfo).fncollation = (Collation); \
(Fcinfo).isnull = false; \
(Fcinfo).nargs = (Nargs); \
} while (0)

Definition at line 150 of file fmgr.h.

◆ LOCAL_FCINFO

#define LOCAL_FCINFO (   name,
  nargs 
)
Value:
/* use union with FunctionCallInfoBaseData to guarantee alignment */ \
union \
{ \
FunctionCallInfoBaseData fcinfo; \
/* ensure enough space for nargs args is available */ \
char fcinfo_data[SizeForFunctionCallInfo(nargs)]; \
} name##data; \
FunctionCallInfo name = &name##data.fcinfo
const char * name
Definition: encode.c:561
#define SizeForFunctionCallInfo(nargs)
Definition: fmgr.h:102
const void * data

Definition at line 110 of file fmgr.h.

◆ OidFunctionCall0

#define OidFunctionCall0 (   functionId)     OidFunctionCall0Coll(functionId, InvalidOid)

Definition at line 667 of file fmgr.h.

◆ OidFunctionCall1

#define OidFunctionCall1 (   functionId,
  arg1 
)     OidFunctionCall1Coll(functionId, InvalidOid, arg1)

Definition at line 669 of file fmgr.h.

◆ OidFunctionCall2

#define OidFunctionCall2 (   functionId,
  arg1,
  arg2 
)     OidFunctionCall2Coll(functionId, InvalidOid, arg1, arg2)

Definition at line 671 of file fmgr.h.

◆ OidFunctionCall3

#define OidFunctionCall3 (   functionId,
  arg1,
  arg2,
  arg3 
)     OidFunctionCall3Coll(functionId, InvalidOid, arg1, arg2, arg3)

Definition at line 673 of file fmgr.h.

◆ OidFunctionCall4

#define OidFunctionCall4 (   functionId,
  arg1,
  arg2,
  arg3,
  arg4 
)     OidFunctionCall4Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4)

Definition at line 675 of file fmgr.h.

◆ OidFunctionCall5

#define OidFunctionCall5 (   functionId,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5 
)     OidFunctionCall5Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5)

Definition at line 677 of file fmgr.h.

◆ OidFunctionCall6

#define OidFunctionCall6 (   functionId,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6 
)     OidFunctionCall6Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6)

Definition at line 679 of file fmgr.h.

◆ OidFunctionCall7

#define OidFunctionCall7 (   functionId,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7 
)     OidFunctionCall7Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7)

Definition at line 681 of file fmgr.h.

◆ OidFunctionCall8

#define OidFunctionCall8 (   functionId,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7,
  arg8 
)     OidFunctionCall8Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)

Definition at line 683 of file fmgr.h.

◆ OidFunctionCall9

#define OidFunctionCall9 (   functionId,
  arg1,
  arg2,
  arg3,
  arg4,
  arg5,
  arg6,
  arg7,
  arg8,
  arg9 
)     OidFunctionCall9Coll(functionId, InvalidOid, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)

Definition at line 685 of file fmgr.h.

◆ PG_ARGISNULL

#define PG_ARGISNULL (   n)    (fcinfo->args[n].isnull)

Definition at line 209 of file fmgr.h.

◆ PG_DETOAST_DATUM

#define PG_DETOAST_DATUM (   datum)     pg_detoast_datum((struct varlena *) DatumGetPointer(datum))

Definition at line 240 of file fmgr.h.

◆ PG_DETOAST_DATUM_COPY

#define PG_DETOAST_DATUM_COPY (   datum)     pg_detoast_datum_copy((struct varlena *) DatumGetPointer(datum))

Definition at line 242 of file fmgr.h.

◆ PG_DETOAST_DATUM_PACKED

#define PG_DETOAST_DATUM_PACKED (   datum)     pg_detoast_datum_packed((struct varlena *) DatumGetPointer(datum))

Definition at line 248 of file fmgr.h.

◆ PG_DETOAST_DATUM_SLICE

#define PG_DETOAST_DATUM_SLICE (   datum,
  f,
  c 
)
Value:
(int32) (f), (int32) (c))
signed int int32
Definition: c.h:440
struct varlena * pg_detoast_datum_slice(struct varlena *datum, int32 first, int32 count)
Definition: fmgr.c:1733
#define DatumGetPointer(X)
Definition: postgres.h:593
char * c
Definition: c.h:633

Definition at line 244 of file fmgr.h.

◆ PG_FREE_IF_COPY

#define PG_FREE_IF_COPY (   ptr,
 
)
Value:
do { \
if ((Pointer) (ptr) != PG_GETARG_POINTER(n)) \
pfree(ptr); \
} while (0)
char * Pointer
Definition: c.h:429
#define PG_GETARG_POINTER(n)
Definition: fmgr.h:276

Definition at line 260 of file fmgr.h.

◆ PG_FUNCTION_ARGS

#define PG_FUNCTION_ARGS   FunctionCallInfo fcinfo

Definition at line 193 of file fmgr.h.

◆ PG_FUNCTION_INFO_V1

#define PG_FUNCTION_INFO_V1 (   funcname)
Value:
extern Datum funcname(PG_FUNCTION_ARGS); \
extern PGDLLEXPORT const Pg_finfo_record * CppConcat(pg_finfo_,funcname)(void); \
const Pg_finfo_record * \
CppConcat(pg_finfo_,funcname) (void) \
{ \
static const Pg_finfo_record my_finfo = { 1 }; \
return &my_finfo; \
} \
extern int no_such_variable
#define CppConcat(x, y)
Definition: c.h:301
#define PGDLLEXPORT
Definition: c.h:1353
#define PG_FUNCTION_ARGS
Definition: fmgr.h:193
uintptr_t Datum
Definition: postgres.h:411

Definition at line 415 of file fmgr.h.

◆ PG_GET_COLLATION

#define PG_GET_COLLATION ( )    (fcinfo->fncollation)

Definition at line 198 of file fmgr.h.

◆ PG_GET_OPCLASS_OPTIONS

#define PG_GET_OPCLASS_OPTIONS ( )    get_fn_opclass_options(fcinfo->flinfo)

Definition at line 342 of file fmgr.h.

◆ PG_GETARG_BOOL

#define PG_GETARG_BOOL (   n)    DatumGetBool(PG_GETARG_DATUM(n))

Definition at line 274 of file fmgr.h.

◆ PG_GETARG_BPCHAR_P

#define PG_GETARG_BPCHAR_P (   n)    DatumGetBpCharP(PG_GETARG_DATUM(n))

Definition at line 337 of file fmgr.h.

◆ PG_GETARG_BPCHAR_P_COPY

#define PG_GETARG_BPCHAR_P_COPY (   n)    DatumGetBpCharPCopy(PG_GETARG_DATUM(n))

Definition at line 316 of file fmgr.h.

◆ PG_GETARG_BPCHAR_P_SLICE

#define PG_GETARG_BPCHAR_P_SLICE (   n,
  a,
  b 
)    DatumGetBpCharPSlice(PG_GETARG_DATUM(n),a,b)

Definition at line 322 of file fmgr.h.

◆ PG_GETARG_BPCHAR_PP

#define PG_GETARG_BPCHAR_PP (   n)    DatumGetBpCharPP(PG_GETARG_DATUM(n))

Definition at line 310 of file fmgr.h.

◆ PG_GETARG_BYTEA_P

#define PG_GETARG_BYTEA_P (   n)    DatumGetByteaP(PG_GETARG_DATUM(n))

Definition at line 335 of file fmgr.h.

◆ PG_GETARG_BYTEA_P_COPY

#define PG_GETARG_BYTEA_P_COPY (   n)    DatumGetByteaPCopy(PG_GETARG_DATUM(n))

Definition at line 314 of file fmgr.h.

◆ PG_GETARG_BYTEA_P_SLICE

#define PG_GETARG_BYTEA_P_SLICE (   n,
  a,
  b 
)    DatumGetByteaPSlice(PG_GETARG_DATUM(n),a,b)

Definition at line 320 of file fmgr.h.

◆ PG_GETARG_BYTEA_PP

#define PG_GETARG_BYTEA_PP (   n)    DatumGetByteaPP(PG_GETARG_DATUM(n))

Definition at line 308 of file fmgr.h.

◆ PG_GETARG_CHAR

#define PG_GETARG_CHAR (   n)    DatumGetChar(PG_GETARG_DATUM(n))

Definition at line 273 of file fmgr.h.

◆ PG_GETARG_CSTRING

#define PG_GETARG_CSTRING (   n)    DatumGetCString(PG_GETARG_DATUM(n))

Definition at line 277 of file fmgr.h.

◆ PG_GETARG_DATUM

#define PG_GETARG_DATUM (   n)    (fcinfo->args[n].value)

Definition at line 268 of file fmgr.h.

◆ PG_GETARG_FLOAT4

#define PG_GETARG_FLOAT4 (   n)    DatumGetFloat4(PG_GETARG_DATUM(n))

Definition at line 281 of file fmgr.h.

◆ PG_GETARG_FLOAT8

#define PG_GETARG_FLOAT8 (   n)    DatumGetFloat8(PG_GETARG_DATUM(n))

Definition at line 282 of file fmgr.h.

◆ PG_GETARG_HEAPTUPLEHEADER

#define PG_GETARG_HEAPTUPLEHEADER (   n)    DatumGetHeapTupleHeader(PG_GETARG_DATUM(n))

Definition at line 312 of file fmgr.h.

◆ PG_GETARG_HEAPTUPLEHEADER_COPY

#define PG_GETARG_HEAPTUPLEHEADER_COPY (   n)    DatumGetHeapTupleHeaderCopy(PG_GETARG_DATUM(n))

Definition at line 318 of file fmgr.h.

◆ PG_GETARG_INT16

#define PG_GETARG_INT16 (   n)    DatumGetInt16(PG_GETARG_DATUM(n))

Definition at line 271 of file fmgr.h.

◆ PG_GETARG_INT32

#define PG_GETARG_INT32 (   n)    DatumGetInt32(PG_GETARG_DATUM(n))

Definition at line 269 of file fmgr.h.

◆ PG_GETARG_INT64

#define PG_GETARG_INT64 (   n)    DatumGetInt64(PG_GETARG_DATUM(n))

Definition at line 283 of file fmgr.h.

◆ PG_GETARG_NAME

#define PG_GETARG_NAME (   n)    DatumGetName(PG_GETARG_DATUM(n))

Definition at line 278 of file fmgr.h.

◆ PG_GETARG_OID

#define PG_GETARG_OID (   n)    DatumGetObjectId(PG_GETARG_DATUM(n))

Definition at line 275 of file fmgr.h.

◆ PG_GETARG_POINTER

#define PG_GETARG_POINTER (   n)    DatumGetPointer(PG_GETARG_DATUM(n))

Definition at line 276 of file fmgr.h.

◆ PG_GETARG_RAW_VARLENA_P

#define PG_GETARG_RAW_VARLENA_P (   n)    ((struct varlena *) PG_GETARG_POINTER(n))

Definition at line 285 of file fmgr.h.

◆ PG_GETARG_TEXT_P

#define PG_GETARG_TEXT_P (   n)    DatumGetTextP(PG_GETARG_DATUM(n))

Definition at line 336 of file fmgr.h.

◆ PG_GETARG_TEXT_P_COPY

#define PG_GETARG_TEXT_P_COPY (   n)    DatumGetTextPCopy(PG_GETARG_DATUM(n))

Definition at line 315 of file fmgr.h.

◆ PG_GETARG_TEXT_P_SLICE

#define PG_GETARG_TEXT_P_SLICE (   n,
  a,
  b 
)    DatumGetTextPSlice(PG_GETARG_DATUM(n),a,b)

Definition at line 321 of file fmgr.h.

◆ PG_GETARG_TEXT_PP

#define PG_GETARG_TEXT_PP (   n)    DatumGetTextPP(PG_GETARG_DATUM(n))

Definition at line 309 of file fmgr.h.

◆ PG_GETARG_TRANSACTIONID

#define PG_GETARG_TRANSACTIONID (   n)    DatumGetTransactionId(PG_GETARG_DATUM(n))

Definition at line 279 of file fmgr.h.

◆ PG_GETARG_UINT16

#define PG_GETARG_UINT16 (   n)    DatumGetUInt16(PG_GETARG_DATUM(n))

Definition at line 272 of file fmgr.h.

◆ PG_GETARG_UINT32

#define PG_GETARG_UINT32 (   n)    DatumGetUInt32(PG_GETARG_DATUM(n))

Definition at line 270 of file fmgr.h.

◆ PG_GETARG_VARCHAR_P

#define PG_GETARG_VARCHAR_P (   n)    DatumGetVarCharP(PG_GETARG_DATUM(n))

Definition at line 338 of file fmgr.h.

◆ PG_GETARG_VARCHAR_P_COPY

#define PG_GETARG_VARCHAR_P_COPY (   n)    DatumGetVarCharPCopy(PG_GETARG_DATUM(n))

Definition at line 317 of file fmgr.h.

◆ PG_GETARG_VARCHAR_P_SLICE

#define PG_GETARG_VARCHAR_P_SLICE (   n,
  a,
  b 
)    DatumGetVarCharPSlice(PG_GETARG_DATUM(n),a,b)

Definition at line 323 of file fmgr.h.

◆ PG_GETARG_VARCHAR_PP

#define PG_GETARG_VARCHAR_PP (   n)    DatumGetVarCharPP(PG_GETARG_DATUM(n))

Definition at line 311 of file fmgr.h.

◆ PG_GETARG_VARLENA_P

#define PG_GETARG_VARLENA_P (   n)    PG_DETOAST_DATUM(PG_GETARG_DATUM(n))

Definition at line 287 of file fmgr.h.

◆ PG_GETARG_VARLENA_PP

#define PG_GETARG_VARLENA_PP (   n)    PG_DETOAST_DATUM_PACKED(PG_GETARG_DATUM(n))

Definition at line 289 of file fmgr.h.

◆ PG_HAS_OPCLASS_OPTIONS

#define PG_HAS_OPCLASS_OPTIONS ( )    has_fn_opclass_options(fcinfo->flinfo)

Definition at line 341 of file fmgr.h.

◆ PG_MAGIC_FUNCTION_NAME

#define PG_MAGIC_FUNCTION_NAME   Pg_magic_func

Definition at line 485 of file fmgr.h.

◆ PG_MAGIC_FUNCTION_NAME_STRING

#define PG_MAGIC_FUNCTION_NAME_STRING   "Pg_magic_func"

Definition at line 486 of file fmgr.h.

◆ PG_MODULE_MAGIC

#define PG_MODULE_MAGIC
Value:
const Pg_magic_struct * \
PG_MAGIC_FUNCTION_NAME(void) \
{ \
static const Pg_magic_struct Pg_magic_data = PG_MODULE_MAGIC_DATA; \
return &Pg_magic_data; \
} \
extern int no_such_variable
#define PG_MODULE_MAGIC_DATA
Definition: fmgr.h:465
#define PG_MAGIC_FUNCTION_NAME
Definition: fmgr.h:485

Definition at line 488 of file fmgr.h.

◆ PG_MODULE_MAGIC_DATA

#define PG_MODULE_MAGIC_DATA
Value:
{ \
sizeof(Pg_magic_struct), \
PG_VERSION_NUM / 100, \
FUNC_MAX_ARGS, \
INDEX_MAX_KEYS, \
NAMEDATALEN, \
FLOAT8PASSBYVAL, \
FMGR_ABI_EXTRA, \
}

Definition at line 465 of file fmgr.h.

◆ PG_NARGS

#define PG_NARGS ( )    (fcinfo->nargs)

Definition at line 203 of file fmgr.h.

◆ PG_RETURN_BOOL

#define PG_RETURN_BOOL (   x)    return BoolGetDatum(x)

Definition at line 359 of file fmgr.h.

◆ PG_RETURN_BPCHAR_P

#define PG_RETURN_BPCHAR_P (   x)    PG_RETURN_POINTER(x)

Definition at line 373 of file fmgr.h.

◆ PG_RETURN_BYTEA_P

#define PG_RETURN_BYTEA_P (   x)    PG_RETURN_POINTER(x)

Definition at line 371 of file fmgr.h.

◆ PG_RETURN_CHAR

#define PG_RETURN_CHAR (   x)    return CharGetDatum(x)

Definition at line 358 of file fmgr.h.

◆ PG_RETURN_CSTRING

#define PG_RETURN_CSTRING (   x)    return CStringGetDatum(x)

Definition at line 362 of file fmgr.h.

◆ PG_RETURN_DATUM

#define PG_RETURN_DATUM (   x)    return (x)

Definition at line 353 of file fmgr.h.

◆ PG_RETURN_FLOAT4

#define PG_RETURN_FLOAT4 (   x)    return Float4GetDatum(x)

Definition at line 366 of file fmgr.h.

◆ PG_RETURN_FLOAT8

#define PG_RETURN_FLOAT8 (   x)    return Float8GetDatum(x)

Definition at line 367 of file fmgr.h.

◆ PG_RETURN_HEAPTUPLEHEADER

#define PG_RETURN_HEAPTUPLEHEADER (   x)    return HeapTupleHeaderGetDatum(x)

Definition at line 375 of file fmgr.h.

◆ PG_RETURN_INT16

#define PG_RETURN_INT16 (   x)    return Int16GetDatum(x)

Definition at line 356 of file fmgr.h.

◆ PG_RETURN_INT32

#define PG_RETURN_INT32 (   x)    return Int32GetDatum(x)

Definition at line 354 of file fmgr.h.

◆ PG_RETURN_INT64

#define PG_RETURN_INT64 (   x)    return Int64GetDatum(x)

Definition at line 368 of file fmgr.h.

◆ PG_RETURN_NAME

#define PG_RETURN_NAME (   x)    return NameGetDatum(x)

Definition at line 363 of file fmgr.h.

◆ PG_RETURN_NULL

#define PG_RETURN_NULL ( )     do { fcinfo->isnull = true; return (Datum) 0; } while (0)

Definition at line 345 of file fmgr.h.

◆ PG_RETURN_OID

#define PG_RETURN_OID (   x)    return ObjectIdGetDatum(x)

Definition at line 360 of file fmgr.h.

◆ PG_RETURN_POINTER

#define PG_RETURN_POINTER (   x)    return PointerGetDatum(x)

Definition at line 361 of file fmgr.h.

◆ PG_RETURN_TEXT_P

#define PG_RETURN_TEXT_P (   x)    PG_RETURN_POINTER(x)

Definition at line 372 of file fmgr.h.

◆ PG_RETURN_TRANSACTIONID

#define PG_RETURN_TRANSACTIONID (   x)    return TransactionIdGetDatum(x)

Definition at line 364 of file fmgr.h.

◆ PG_RETURN_UINT16

#define PG_RETURN_UINT16 (   x)    return UInt16GetDatum(x)

Definition at line 357 of file fmgr.h.

◆ PG_RETURN_UINT32

#define PG_RETURN_UINT32 (   x)    return UInt32GetDatum(x)

Definition at line 355 of file fmgr.h.

◆ PG_RETURN_UINT64

#define PG_RETURN_UINT64 (   x)    return UInt64GetDatum(x)

Definition at line 369 of file fmgr.h.

◆ PG_RETURN_VARCHAR_P

#define PG_RETURN_VARCHAR_P (   x)    PG_RETURN_POINTER(x)

Definition at line 374 of file fmgr.h.

◆ PG_RETURN_VOID

#define PG_RETURN_VOID ( )    return (Datum) 0

Definition at line 349 of file fmgr.h.

◆ SizeForFunctionCallInfo

#define SizeForFunctionCallInfo (   nargs)
Value:

Definition at line 102 of file fmgr.h.

Typedef Documentation

◆ fmAggrefPtr

typedef struct Aggref* fmAggrefPtr

Definition at line 23 of file fmgr.h.

◆ fmExprContextCallbackFunction

typedef void(* fmExprContextCallbackFunction) (Datum arg)

Definition at line 26 of file fmgr.h.

◆ fmgr_hook_type

typedef void(* fmgr_hook_type) (FmgrHookEventType event, FmgrInfo *flinfo, Datum *arg)

Definition at line 772 of file fmgr.h.

◆ FmgrHookEventType

◆ FmgrInfo

typedef struct FmgrInfo FmgrInfo

◆ fmNodePtr

typedef struct Node* fmNodePtr

Definition at line 22 of file fmgr.h.

◆ fmStringInfo

typedef struct StringInfoData* fmStringInfo

Definition at line 29 of file fmgr.h.

◆ FunctionCallInfo

Definition at line 38 of file fmgr.h.

◆ FunctionCallInfoBaseData

◆ needs_fmgr_hook_type

typedef bool(* needs_fmgr_hook_type) (Oid fn_oid)

Definition at line 770 of file fmgr.h.

◆ PGFInfoFunction

typedef const Pg_finfo_record*(* PGFInfoFunction) (void)

Definition at line 401 of file fmgr.h.

◆ PGFunction

typedef Datum(* PGFunction) (FunctionCallInfo fcinfo)

Definition at line 40 of file fmgr.h.

◆ PGModuleMagicFunction

typedef const Pg_magic_struct*(* PGModuleMagicFunction) (void)

Definition at line 483 of file fmgr.h.

Enumeration Type Documentation

◆ FmgrHookEventType

Enumerator
FHET_START 
FHET_END 
FHET_ABORT 

Definition at line 763 of file fmgr.h.

764 {
765  FHET_START,
766  FHET_END,
767  FHET_ABORT
FmgrHookEventType
Definition: fmgr.h:764
@ FHET_END
Definition: fmgr.h:766
@ FHET_ABORT
Definition: fmgr.h:767
@ FHET_START
Definition: fmgr.h:765

Function Documentation

◆ AggCheckCallContext()

int AggCheckCallContext ( FunctionCallInfo  fcinfo,
MemoryContext aggcontext 
)

Definition at line 4487 of file nodeAgg.c.

4488 {
4489  if (fcinfo->context && IsA(fcinfo->context, AggState))
4490  {
4491  if (aggcontext)
4492  {
4493  AggState *aggstate = ((AggState *) fcinfo->context);
4494  ExprContext *cxt = aggstate->curaggcontext;
4495 
4496  *aggcontext = cxt->ecxt_per_tuple_memory;
4497  }
4498  return AGG_CONTEXT_AGGREGATE;
4499  }
4500  if (fcinfo->context && IsA(fcinfo->context, WindowAggState))
4501  {
4502  if (aggcontext)
4503  *aggcontext = ((WindowAggState *) fcinfo->context)->curaggcontext;
4504  return AGG_CONTEXT_WINDOW;
4505  }
4506 
4507  /* this is just to prevent "uninitialized variable" warnings */
4508  if (aggcontext)
4509  *aggcontext = NULL;
4510  return 0;
4511 }
#define AGG_CONTEXT_WINDOW
Definition: fmgr.h:743
#define AGG_CONTEXT_AGGREGATE
Definition: fmgr.h:742
#define IsA(nodeptr, _type_)
Definition: nodes.h:625
ExprContext * curaggcontext
Definition: execnodes.h:2341
MemoryContext ecxt_per_tuple_memory
Definition: execnodes.h:240
fmNodePtr context
Definition: fmgr.h:88

References AGG_CONTEXT_AGGREGATE, AGG_CONTEXT_WINDOW, FunctionCallInfoBaseData::context, AggState::curaggcontext, ExprContext::ecxt_per_tuple_memory, and IsA.

Referenced by array_agg_array_finalfn(), array_agg_array_transfn(), array_agg_finalfn(), array_agg_transfn(), bytea_string_agg_finalfn(), fetch_array_arg_replace_nulls(), float4_accum(), float8_accum(), float8_combine(), float8_regr_accum(), float8_regr_combine(), hypothetical_dense_rank_final(), hypothetical_rank_common(), int2_avg_accum(), int2_avg_accum_inv(), int2_sum(), int4_avg_accum(), int4_avg_accum_inv(), int4_avg_combine(), int4_sum(), int8_avg_combine(), int8_avg_deserialize(), int8_avg_serialize(), int8dec(), int8inc(), json_agg_finalfn(), json_agg_transfn_worker(), json_object_agg_finalfn(), json_object_agg_transfn_worker(), jsonb_agg_finalfn(), jsonb_agg_transfn_worker(), jsonb_object_agg_finalfn(), jsonb_object_agg_transfn_worker(), makeBoolAggState(), makeNumericAggState(), makeStringAggState(), mode_final(), multirange_agg_transfn(), multirange_intersect_agg_transfn(), numeric_avg_combine(), numeric_avg_deserialize(), numeric_avg_serialize(), numeric_combine(), numeric_deserialize(), numeric_poly_combine(), numeric_poly_deserialize(), numeric_poly_serialize(), numeric_serialize(), ordered_set_startup(), percentile_cont_final_common(), percentile_cont_multi_final_common(), percentile_disc_final(), percentile_disc_multi_final(), range_agg_finalfn(), range_agg_transfn(), range_intersect_agg_transfn(), and string_agg_finalfn().

◆ AggGetAggref()

fmAggrefPtr AggGetAggref ( FunctionCallInfo  fcinfo)

Definition at line 4531 of file nodeAgg.c.

4532 {
4533  if (fcinfo->context && IsA(fcinfo->context, AggState))
4534  {
4535  AggState *aggstate = (AggState *) fcinfo->context;
4536  AggStatePerAgg curperagg;
4537  AggStatePerTrans curpertrans;
4538 
4539  /* check curperagg (valid when in a final function) */
4540  curperagg = aggstate->curperagg;
4541 
4542  if (curperagg)
4543  return curperagg->aggref;
4544 
4545  /* check curpertrans (valid when in a transition function) */
4546  curpertrans = aggstate->curpertrans;
4547 
4548  if (curpertrans)
4549  return curpertrans->aggref;
4550  }
4551  return NULL;
4552 }
if(TABLE==NULL||TABLE_index==NULL)
Definition: isn.c:77
Aggref * aggref
Definition: nodeAgg.h:44
AggStatePerTrans curpertrans
Definition: execnodes.h:2344
AggStatePerAgg curperagg
Definition: execnodes.h:2342

References AggStatePerTransData::aggref, FunctionCallInfoBaseData::context, AggState::curperagg, AggState::curpertrans, if(), and IsA.

Referenced by ordered_set_startup().

◆ AggGetTempMemoryContext()

MemoryContext AggGetTempMemoryContext ( FunctionCallInfo  fcinfo)

Definition at line 4565 of file nodeAgg.c.

4566 {
4567  if (fcinfo->context && IsA(fcinfo->context, AggState))
4568  {
4569  AggState *aggstate = (AggState *) fcinfo->context;
4570 
4571  return aggstate->tmpcontext->ecxt_per_tuple_memory;
4572  }
4573  return NULL;
4574 }
ExprContext * tmpcontext
Definition: execnodes.h:2339

References FunctionCallInfoBaseData::context, ExprContext::ecxt_per_tuple_memory, IsA, and AggState::tmpcontext.

◆ AggRegisterCallback()

void AggRegisterCallback ( FunctionCallInfo  fcinfo,
fmExprContextCallbackFunction  func,
Datum  arg 
)

Definition at line 4630 of file nodeAgg.c.

4633 {
4634  if (fcinfo->context && IsA(fcinfo->context, AggState))
4635  {
4636  AggState *aggstate = (AggState *) fcinfo->context;
4637  ExprContext *cxt = aggstate->curaggcontext;
4638 
4639  RegisterExprContextCallback(cxt, func, arg);
4640 
4641  return;
4642  }
4643  elog(ERROR, "aggregate function cannot register a callback in this context");
4644 }
#define ERROR
Definition: elog.h:33
void RegisterExprContextCallback(ExprContext *econtext, ExprContextCallbackFunction function, Datum arg)
Definition: execUtils.c:925
void * arg

References arg, FunctionCallInfoBaseData::context, AggState::curaggcontext, elog(), ERROR, IsA, and RegisterExprContextCallback().

Referenced by ordered_set_startup().

◆ AggStateIsShared()

bool AggStateIsShared ( FunctionCallInfo  fcinfo)

Definition at line 4591 of file nodeAgg.c.

4592 {
4593  if (fcinfo->context && IsA(fcinfo->context, AggState))
4594  {
4595  AggState *aggstate = (AggState *) fcinfo->context;
4596  AggStatePerAgg curperagg;
4597  AggStatePerTrans curpertrans;
4598 
4599  /* check curperagg (valid when in a final function) */
4600  curperagg = aggstate->curperagg;
4601 
4602  if (curperagg)
4603  return aggstate->pertrans[curperagg->transno].aggshared;
4604 
4605  /* check curpertrans (valid when in a transition function) */
4606  curpertrans = aggstate->curpertrans;
4607 
4608  if (curpertrans)
4609  return curpertrans->aggshared;
4610  }
4611  return true;
4612 }
AggStatePerTrans pertrans
Definition: execnodes.h:2336

References AggStatePerTransData::aggshared, FunctionCallInfoBaseData::context, AggState::curperagg, AggState::curpertrans, if(), IsA, and AggState::pertrans.

Referenced by ordered_set_startup().

◆ CallerFInfoFunctionCall1()

Datum CallerFInfoFunctionCall1 ( PGFunction  func,
FmgrInfo flinfo,
Oid  collation,
Datum  arg1 
)

Definition at line 1050 of file fmgr.c.

1051 {
1052  LOCAL_FCINFO(fcinfo, 1);
1053  Datum result;
1054 
1055  InitFunctionCallInfoData(*fcinfo, flinfo, 1, collation, NULL, NULL);
1056 
1057  fcinfo->args[0].value = arg1;
1058  fcinfo->args[0].isnull = false;
1059 
1060  result = (*func) (fcinfo);
1061 
1062  /* Check for null result, since caller is clearly not expecting one */
1063  if (fcinfo->isnull)
1064  elog(ERROR, "function %p returned NULL", (void *) func);
1065 
1066  return result;
1067 }
#define InitFunctionCallInfoData(Fcinfo, Flinfo, Nargs, Collation, Context, Resultinfo)
Definition: fmgr.h:150
#define LOCAL_FCINFO(name, nargs)
Definition: fmgr.h:110

References elog(), ERROR, fmgr_security_definer_cache::flinfo, InitFunctionCallInfoData, and LOCAL_FCINFO.

◆ CallerFInfoFunctionCall2()

Datum CallerFInfoFunctionCall2 ( PGFunction  func,
FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2 
)

Definition at line 1070 of file fmgr.c.

1071 {
1072  LOCAL_FCINFO(fcinfo, 2);
1073  Datum result;
1074 
1075  InitFunctionCallInfoData(*fcinfo, flinfo, 2, collation, NULL, NULL);
1076 
1077  fcinfo->args[0].value = arg1;
1078  fcinfo->args[0].isnull = false;
1079  fcinfo->args[1].value = arg2;
1080  fcinfo->args[1].isnull = false;
1081 
1082  result = (*func) (fcinfo);
1083 
1084  /* Check for null result, since caller is clearly not expecting one */
1085  if (fcinfo->isnull)
1086  elog(ERROR, "function %p returned NULL", (void *) func);
1087 
1088  return result;
1089 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by gbt_enumge(), gbt_enumgt(), gbt_enumkey_cmp(), gbt_enumle(), gbt_enumlt(), gin_btree_compare_prefix(), and gin_enum_cmp().

◆ CheckFunctionValidatorAccess()

bool CheckFunctionValidatorAccess ( Oid  validatorOid,
Oid  functionOid 
)

Definition at line 2021 of file fmgr.c.

2022 {
2023  HeapTuple procTup;
2024  HeapTuple langTup;
2025  Form_pg_proc procStruct;
2026  Form_pg_language langStruct;
2027  AclResult aclresult;
2028 
2029  /*
2030  * Get the function's pg_proc entry. Throw a user-facing error for bad
2031  * OID, because validators can be called with user-specified OIDs.
2032  */
2033  procTup = SearchSysCache1(PROCOID, ObjectIdGetDatum(functionOid));
2034  if (!HeapTupleIsValid(procTup))
2035  ereport(ERROR,
2036  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2037  errmsg("function with OID %u does not exist", functionOid)));
2038  procStruct = (Form_pg_proc) GETSTRUCT(procTup);
2039 
2040  /*
2041  * Fetch pg_language entry to know if this is the correct validation
2042  * function for that pg_proc entry.
2043  */
2044  langTup = SearchSysCache1(LANGOID, ObjectIdGetDatum(procStruct->prolang));
2045  if (!HeapTupleIsValid(langTup))
2046  elog(ERROR, "cache lookup failed for language %u", procStruct->prolang);
2047  langStruct = (Form_pg_language) GETSTRUCT(langTup);
2048 
2049  if (langStruct->lanvalidator != validatorOid)
2050  ereport(ERROR,
2051  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2052  errmsg("language validation function %u called for language %u instead of %u",
2053  validatorOid, procStruct->prolang,
2054  langStruct->lanvalidator)));
2055 
2056  /* first validate that we have permissions to use the language */
2057  aclresult = pg_language_aclcheck(procStruct->prolang, GetUserId(),
2058  ACL_USAGE);
2059  if (aclresult != ACLCHECK_OK)
2060  aclcheck_error(aclresult, OBJECT_LANGUAGE,
2061  NameStr(langStruct->lanname));
2062 
2063  /*
2064  * Check whether we are allowed to execute the function itself. If we can
2065  * execute it, there should be no possible side-effect of
2066  * compiling/validation that execution can't have.
2067  */
2068  aclresult = pg_proc_aclcheck(functionOid, GetUserId(), ACL_EXECUTE);
2069  if (aclresult != ACLCHECK_OK)
2070  aclcheck_error(aclresult, OBJECT_FUNCTION, NameStr(procStruct->proname));
2071 
2072  ReleaseSysCache(procTup);
2073  ReleaseSysCache(langTup);
2074 
2075  return true;
2076 }
AclResult
Definition: acl.h:181
@ ACLCHECK_OK
Definition: acl.h:182
AclResult pg_language_aclcheck(Oid lang_oid, Oid roleid, AclMode mode)
Definition: aclchk.c:5083
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
Definition: aclchk.c:3512
AclResult pg_proc_aclcheck(Oid proc_oid, Oid roleid, AclMode mode)
Definition: aclchk.c:5071
#define NameStr(name)
Definition: c.h:692
int errcode(int sqlerrcode)
Definition: elog.c:693
int errmsg(const char *fmt,...)
Definition: elog.c:904
#define ereport(elevel,...)
Definition: elog.h:143
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define GETSTRUCT(TUP)
Definition: htup_details.h:649
Oid GetUserId(void)
Definition: miscinit.c:491
#define ACL_USAGE
Definition: parsenodes.h:90
@ OBJECT_LANGUAGE
Definition: parsenodes.h:2156
@ OBJECT_FUNCTION
Definition: parsenodes.h:2154
#define ACL_EXECUTE
Definition: parsenodes.h:89
FormData_pg_language * Form_pg_language
Definition: pg_language.h:65
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:136
#define ObjectIdGetDatum(X)
Definition: postgres.h:551
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1221
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:1173
@ PROCOID
Definition: syscache.h:79
@ LANGOID
Definition: syscache.h:68

References ACL_EXECUTE, ACL_USAGE, aclcheck_error(), ACLCHECK_OK, elog(), ereport, errcode(), errmsg(), ERROR, GETSTRUCT, GetUserId(), HeapTupleIsValid, LANGOID, NameStr, OBJECT_FUNCTION, OBJECT_LANGUAGE, ObjectIdGetDatum, pg_language_aclcheck(), pg_proc_aclcheck(), PROCOID, ReleaseSysCache(), and SearchSysCache1().

Referenced by fmgr_c_validator(), fmgr_internal_validator(), fmgr_sql_validator(), plperl_validator(), plpgsql_validator(), and plpython3_validator().

◆ DirectFunctionCall1Coll()

Datum DirectFunctionCall1Coll ( PGFunction  func,
Oid  collation,
Datum  arg1 
)

Definition at line 777 of file fmgr.c.

778 {
779  LOCAL_FCINFO(fcinfo, 1);
780  Datum result;
781 
782  InitFunctionCallInfoData(*fcinfo, NULL, 1, collation, NULL, NULL);
783 
784  fcinfo->args[0].value = arg1;
785  fcinfo->args[0].isnull = false;
786 
787  result = (*func) (fcinfo);
788 
789  /* Check for null result, since caller is clearly not expecting one */
790  if (fcinfo->isnull)
791  elog(ERROR, "function %p returned NULL", (void *) func);
792 
793  return result;
794 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by Generic_Text_IC_like(), libpqrcv_create_slot(), and texthashfast().

◆ DirectFunctionCall2Coll()

Datum DirectFunctionCall2Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2 
)

Definition at line 797 of file fmgr.c.

798 {
799  LOCAL_FCINFO(fcinfo, 2);
800  Datum result;
801 
802  InitFunctionCallInfoData(*fcinfo, NULL, 2, collation, NULL, NULL);
803 
804  fcinfo->args[0].value = arg1;
805  fcinfo->args[0].isnull = false;
806  fcinfo->args[1].value = arg2;
807  fcinfo->args[1].isnull = false;
808 
809  result = (*func) (fcinfo);
810 
811  /* Check for null result, since caller is clearly not expecting one */
812  if (fcinfo->isnull)
813  elog(ERROR, "function %p returned NULL", (void *) func);
814 
815  return result;
816 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by gbt_bpcharcmp(), gbt_bpchareq(), gbt_bpcharge(), gbt_bpchargt(), gbt_bpcharle(), gbt_bpcharlt(), gbt_textcmp(), gbt_texteq(), gbt_textge(), gbt_textgt(), gbt_textle(), gbt_textlt(), spg_text_leaf_consistent(), text_isequal(), and texteqfast().

◆ DirectFunctionCall3Coll()

Datum DirectFunctionCall3Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3 
)

Definition at line 819 of file fmgr.c.

821 {
822  LOCAL_FCINFO(fcinfo, 3);
823  Datum result;
824 
825  InitFunctionCallInfoData(*fcinfo, NULL, 3, collation, NULL, NULL);
826 
827  fcinfo->args[0].value = arg1;
828  fcinfo->args[0].isnull = false;
829  fcinfo->args[1].value = arg2;
830  fcinfo->args[1].isnull = false;
831  fcinfo->args[2].value = arg3;
832  fcinfo->args[2].isnull = false;
833 
834  result = (*func) (fcinfo);
835 
836  /* Check for null result, since caller is clearly not expecting one */
837  if (fcinfo->isnull)
838  elog(ERROR, "function %p returned NULL", (void *) func);
839 
840  return result;
841 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by execute_extension_script().

◆ DirectFunctionCall4Coll()

Datum DirectFunctionCall4Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4 
)

Definition at line 844 of file fmgr.c.

846 {
847  LOCAL_FCINFO(fcinfo, 4);
848  Datum result;
849 
850  InitFunctionCallInfoData(*fcinfo, NULL, 4, collation, NULL, NULL);
851 
852  fcinfo->args[0].value = arg1;
853  fcinfo->args[0].isnull = false;
854  fcinfo->args[1].value = arg2;
855  fcinfo->args[1].isnull = false;
856  fcinfo->args[2].value = arg3;
857  fcinfo->args[2].isnull = false;
858  fcinfo->args[3].value = arg4;
859  fcinfo->args[3].isnull = false;
860 
861  result = (*func) (fcinfo);
862 
863  /* Check for null result, since caller is clearly not expecting one */
864  if (fcinfo->isnull)
865  elog(ERROR, "function %p returned NULL", (void *) func);
866 
867  return result;
868 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by execute_extension_script().

◆ DirectFunctionCall5Coll()

Datum DirectFunctionCall5Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5 
)

Definition at line 871 of file fmgr.c.

873 {
874  LOCAL_FCINFO(fcinfo, 5);
875  Datum result;
876 
877  InitFunctionCallInfoData(*fcinfo, NULL, 5, collation, NULL, NULL);
878 
879  fcinfo->args[0].value = arg1;
880  fcinfo->args[0].isnull = false;
881  fcinfo->args[1].value = arg2;
882  fcinfo->args[1].isnull = false;
883  fcinfo->args[2].value = arg3;
884  fcinfo->args[2].isnull = false;
885  fcinfo->args[3].value = arg4;
886  fcinfo->args[3].isnull = false;
887  fcinfo->args[4].value = arg5;
888  fcinfo->args[4].isnull = false;
889 
890  result = (*func) (fcinfo);
891 
892  /* Check for null result, since caller is clearly not expecting one */
893  if (fcinfo->isnull)
894  elog(ERROR, "function %p returned NULL", (void *) func);
895 
896  return result;
897 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by neqjoinsel().

◆ DirectFunctionCall6Coll()

Datum DirectFunctionCall6Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6 
)

Definition at line 900 of file fmgr.c.

903 {
904  LOCAL_FCINFO(fcinfo, 6);
905  Datum result;
906 
907  InitFunctionCallInfoData(*fcinfo, NULL, 6, collation, NULL, NULL);
908 
909  fcinfo->args[0].value = arg1;
910  fcinfo->args[0].isnull = false;
911  fcinfo->args[1].value = arg2;
912  fcinfo->args[1].isnull = false;
913  fcinfo->args[2].value = arg3;
914  fcinfo->args[2].isnull = false;
915  fcinfo->args[3].value = arg4;
916  fcinfo->args[3].isnull = false;
917  fcinfo->args[4].value = arg5;
918  fcinfo->args[4].isnull = false;
919  fcinfo->args[5].value = arg6;
920  fcinfo->args[5].isnull = false;
921 
922  result = (*func) (fcinfo);
923 
924  /* Check for null result, since caller is clearly not expecting one */
925  if (fcinfo->isnull)
926  elog(ERROR, "function %p returned NULL", (void *) func);
927 
928  return result;
929 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

◆ DirectFunctionCall7Coll()

Datum DirectFunctionCall7Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7 
)

Definition at line 932 of file fmgr.c.

935 {
936  LOCAL_FCINFO(fcinfo, 7);
937  Datum result;
938 
939  InitFunctionCallInfoData(*fcinfo, NULL, 7, collation, NULL, NULL);
940 
941  fcinfo->args[0].value = arg1;
942  fcinfo->args[0].isnull = false;
943  fcinfo->args[1].value = arg2;
944  fcinfo->args[1].isnull = false;
945  fcinfo->args[2].value = arg3;
946  fcinfo->args[2].isnull = false;
947  fcinfo->args[3].value = arg4;
948  fcinfo->args[3].isnull = false;
949  fcinfo->args[4].value = arg5;
950  fcinfo->args[4].isnull = false;
951  fcinfo->args[5].value = arg6;
952  fcinfo->args[5].isnull = false;
953  fcinfo->args[6].value = arg7;
954  fcinfo->args[6].isnull = false;
955 
956  result = (*func) (fcinfo);
957 
958  /* Check for null result, since caller is clearly not expecting one */
959  if (fcinfo->isnull)
960  elog(ERROR, "function %p returned NULL", (void *) func);
961 
962  return result;
963 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

◆ DirectFunctionCall8Coll()

Datum DirectFunctionCall8Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7,
Datum  arg8 
)

Definition at line 966 of file fmgr.c.

969 {
970  LOCAL_FCINFO(fcinfo, 8);
971  Datum result;
972 
973  InitFunctionCallInfoData(*fcinfo, NULL, 8, collation, NULL, NULL);
974 
975  fcinfo->args[0].value = arg1;
976  fcinfo->args[0].isnull = false;
977  fcinfo->args[1].value = arg2;
978  fcinfo->args[1].isnull = false;
979  fcinfo->args[2].value = arg3;
980  fcinfo->args[2].isnull = false;
981  fcinfo->args[3].value = arg4;
982  fcinfo->args[3].isnull = false;
983  fcinfo->args[4].value = arg5;
984  fcinfo->args[4].isnull = false;
985  fcinfo->args[5].value = arg6;
986  fcinfo->args[5].isnull = false;
987  fcinfo->args[6].value = arg7;
988  fcinfo->args[6].isnull = false;
989  fcinfo->args[7].value = arg8;
990  fcinfo->args[7].isnull = false;
991 
992  result = (*func) (fcinfo);
993 
994  /* Check for null result, since caller is clearly not expecting one */
995  if (fcinfo->isnull)
996  elog(ERROR, "function %p returned NULL", (void *) func);
997 
998  return result;
999 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

◆ DirectFunctionCall9Coll()

Datum DirectFunctionCall9Coll ( PGFunction  func,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7,
Datum  arg8,
Datum  arg9 
)

Definition at line 1002 of file fmgr.c.

1006 {
1007  LOCAL_FCINFO(fcinfo, 9);
1008  Datum result;
1009 
1010  InitFunctionCallInfoData(*fcinfo, NULL, 9, collation, NULL, NULL);
1011 
1012  fcinfo->args[0].value = arg1;
1013  fcinfo->args[0].isnull = false;
1014  fcinfo->args[1].value = arg2;
1015  fcinfo->args[1].isnull = false;
1016  fcinfo->args[2].value = arg3;
1017  fcinfo->args[2].isnull = false;
1018  fcinfo->args[3].value = arg4;
1019  fcinfo->args[3].isnull = false;
1020  fcinfo->args[4].value = arg5;
1021  fcinfo->args[4].isnull = false;
1022  fcinfo->args[5].value = arg6;
1023  fcinfo->args[5].isnull = false;
1024  fcinfo->args[6].value = arg7;
1025  fcinfo->args[6].isnull = false;
1026  fcinfo->args[7].value = arg8;
1027  fcinfo->args[7].isnull = false;
1028  fcinfo->args[8].value = arg9;
1029  fcinfo->args[8].isnull = false;
1030 
1031  result = (*func) (fcinfo);
1032 
1033  /* Check for null result, since caller is clearly not expecting one */
1034  if (fcinfo->isnull)
1035  elog(ERROR, "function %p returned NULL", (void *) func);
1036 
1037  return result;
1038 }

References elog(), ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

◆ EstimateLibraryStateSpace()

Size EstimateLibraryStateSpace ( void  )

Definition at line 654 of file dfmgr.c.

655 {
656  DynamicFileList *file_scanner;
657  Size size = 1;
658 
659  for (file_scanner = file_list;
660  file_scanner != NULL;
661  file_scanner = file_scanner->next)
662  size = add_size(size, strlen(file_scanner->filename) + 1);
663 
664  return size;
665 }
size_t Size
Definition: c.h:551
static DynamicFileList * file_list
Definition: dfmgr.c:66
Size add_size(Size s1, Size s2)
Definition: shmem.c:502
Definition: dfmgr.c:55
struct df_files * next
Definition: dfmgr.c:56
char filename[FLEXIBLE_ARRAY_MEMBER]
Definition: dfmgr.c:63

References add_size(), file_list, df_files::filename, and df_files::next.

Referenced by InitializeParallelDSM().

◆ fetch_finfo_record()

const Pg_finfo_record* fetch_finfo_record ( void *  filehandle,
const char *  funcname 
)

Definition at line 469 of file fmgr.c.

470 {
471  char *infofuncname;
472  PGFInfoFunction infofunc;
473  const Pg_finfo_record *inforec;
474 
475  infofuncname = psprintf("pg_finfo_%s", funcname);
476 
477  /* Try to look up the info function */
478  infofunc = (PGFInfoFunction) lookup_external_function(filehandle,
479  infofuncname);
480  if (infofunc == NULL)
481  {
482  ereport(ERROR,
483  (errcode(ERRCODE_UNDEFINED_FUNCTION),
484  errmsg("could not find function information for function \"%s\"",
485  funcname),
486  errhint("SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname).")));
487  return NULL; /* silence compiler */
488  }
489 
490  /* Found, so call it */
491  inforec = (*infofunc) ();
492 
493  /* Validate result as best we can */
494  if (inforec == NULL)
495  elog(ERROR, "null result from info function \"%s\"", infofuncname);
496  switch (inforec->api_version)
497  {
498  case 1:
499  /* OK, no additional fields to validate */
500  break;
501  default:
502  ereport(ERROR,
503  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
504  errmsg("unrecognized API version %d reported by info function \"%s\"",
505  inforec->api_version, infofuncname)));
506  break;
507  }
508 
509  pfree(infofuncname);
510  return inforec;
511 }
void * lookup_external_function(void *filehandle, const char *funcname)
Definition: dfmgr.c:166
int errhint(const char *fmt,...)
Definition: elog.c:1151
const Pg_finfo_record *(* PGFInfoFunction)(void)
Definition: fmgr.h:401
void pfree(void *pointer)
Definition: mcxt.c:1175
char * psprintf(const char *fmt,...)
Definition: psprintf.c:46
int api_version
Definition: fmgr.h:396

References Pg_finfo_record::api_version, elog(), ereport, errcode(), errhint(), errmsg(), ERROR, lookup_external_function(), pfree(), and psprintf().

Referenced by fmgr_c_validator(), and fmgr_info_C_lang().

◆ find_rendezvous_variable()

void** find_rendezvous_variable ( const char *  varName)

Definition at line 616 of file dfmgr.c.

617 {
618  static HTAB *rendezvousHash = NULL;
619 
620  rendezvousHashEntry *hentry;
621  bool found;
622 
623  /* Create a hashtable if we haven't already done so in this process */
624  if (rendezvousHash == NULL)
625  {
626  HASHCTL ctl;
627 
628  ctl.keysize = NAMEDATALEN;
629  ctl.entrysize = sizeof(rendezvousHashEntry);
630  rendezvousHash = hash_create("Rendezvous variable hash",
631  16,
632  &ctl,
634  }
635 
636  /* Find or create the hashtable entry for this varName */
637  hentry = (rendezvousHashEntry *) hash_search(rendezvousHash,
638  varName,
639  HASH_ENTER,
640  &found);
641 
642  /* Initialize to NULL if first time */
643  if (!found)
644  hentry->varValue = NULL;
645 
646  return &hentry->varValue;
647 }
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
Definition: dynahash.c:954
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
Definition: dynahash.c:349
#define HASH_STRINGS
Definition: hsearch.h:96
@ HASH_ENTER
Definition: hsearch.h:114
#define HASH_ELEM
Definition: hsearch.h:95
#define NAMEDATALEN
Size keysize
Definition: hsearch.h:75
Size entrysize
Definition: hsearch.h:76
Definition: dynahash.c:220
void * varValue
Definition: dfmgr.c:47

References HASHCTL::entrysize, hash_create(), HASH_ELEM, HASH_ENTER, hash_search(), HASH_STRINGS, HASHCTL::keysize, NAMEDATALEN, and rendezvousHashEntry::varValue.

Referenced by _PG_init().

◆ fmgr_info()

void fmgr_info ( Oid  functionId,
FmgrInfo finfo 
)

Definition at line 126 of file fmgr.c.

127 {
128  fmgr_info_cxt_security(functionId, finfo, CurrentMemoryContext, false);
129 }
static void fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt, bool ignore_security)
Definition: fmgr.c:146
MemoryContext CurrentMemoryContext
Definition: mcxt.c:42

References CurrentMemoryContext, and fmgr_info_cxt_security().

Referenced by _bt_find_extreme_element(), _bt_sort_array_elements(), _sv_to_datum_finfo(), BeginCopyFrom(), brin_minmax_multi_summary_out(), brin_page_items(), build_pertrans_for_aggref(), call_pltcl_start_proc(), compute_distinct_stats(), create_foreign_modify(), DoCopyTo(), eqjoinsel_inner(), eqjoinsel_semi(), EventTriggerInvoke(), ExecBuildGroupingEqual(), ExecBuildParamSetEqual(), ExecCallTriggerFunc(), ExecHashTableCreate(), ExecInitAgg(), ExecInitExprRec(), ExecInitFunc(), ExecInitMemoize(), ExecInitSubPlan(), ExecInitTableFuncScan(), ExecInitWindowAgg(), execTuplesHashPrepare(), ExecuteCallStmt(), fetch_fp_info(), generic_restriction_selectivity(), get_stats_slot_range(), gincost_pattern(), hash_array(), inet_mcv_join_sel(), initialize_peragg(), match_pattern_prefix(), mcv_get_match_bitmap(), networkjoinsel_semi(), networksel(), OidFunctionCall0Coll(), OidFunctionCall1Coll(), OidFunctionCall2Coll(), OidFunctionCall3Coll(), OidFunctionCall4Coll(), OidFunctionCall5Coll(), OidFunctionCall6Coll(), OidFunctionCall7Coll(), OidFunctionCall8Coll(), OidFunctionCall9Coll(), OidInputFunctionCall(), OidOutputFunctionCall(), OidReceiveFunctionCall(), OidSendFunctionCall(), patternsel_common(), pg_get_catalog_foreign_keys(), pg_stats_ext_mcvlist_items(), plperl_ref_from_pg_array(), prefix_selectivity(), prepare_query_params(), printtup_prepare_info(), scalararraysel(), scalarineqsel(), ScanKeyEntryInitialize(), ScanKeyInit(), text_format(), TupleDescGetAttInMetadata(), and var_eq_const().

◆ fmgr_info_copy()

void fmgr_info_copy ( FmgrInfo dstinfo,
FmgrInfo srcinfo,
MemoryContext  destcxt 
)

Definition at line 594 of file fmgr.c.

596 {
597  memcpy(dstinfo, srcinfo, sizeof(FmgrInfo));
598  dstinfo->fn_mcxt = destcxt;
599  dstinfo->fn_extra = NULL;
600 }
Definition: fmgr.h:57
void * fn_extra
Definition: fmgr.h:64
MemoryContext fn_mcxt
Definition: fmgr.h:65

References FmgrInfo::fn_extra, and FmgrInfo::fn_mcxt.

Referenced by bloom_get_procinfo(), bringetbitmap(), find_partition_scheme(), gistrescan(), inclusion_get_procinfo(), initBloomState(), initGinState(), initGISTstate(), minmax_multi_get_procinfo(), perform_pruning_base_step(), satisfies_hash_partition(), ScanKeyEntryInitializeWithInfo(), and spgbeginscan().

◆ fmgr_info_cxt()

◆ fmgr_internal_function()

Oid fmgr_internal_function ( const char *  proname)

Definition at line 609 of file fmgr.c.

610 {
611  const FmgrBuiltin *fbp = fmgr_lookupByName(proname);
612 
613  if (fbp == NULL)
614  return InvalidOid;
615  return fbp->foid;
616 }
static const FmgrBuiltin * fmgr_lookupByName(const char *name)
Definition: fmgr.c:100
NameData proname
Definition: pg_proc.h:35
#define InvalidOid
Definition: postgres_ext.h:36
Oid foid
Definition: fmgrtab.h:27

References fmgr_lookupByName(), FmgrBuiltin::foid, InvalidOid, and proname.

Referenced by fmgr_internal_validator().

◆ fmgr_symbol()

void fmgr_symbol ( Oid  functionId,
char **  mod,
char **  fn 
)

Definition at line 283 of file fmgr.c.

284 {
285  HeapTuple procedureTuple;
286  Form_pg_proc procedureStruct;
287  bool isnull;
288  Datum prosrcattr;
289  Datum probinattr;
290 
291  procedureTuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(functionId));
292  if (!HeapTupleIsValid(procedureTuple))
293  elog(ERROR, "cache lookup failed for function %u", functionId);
294  procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple);
295 
296  if (procedureStruct->prosecdef ||
297  !heap_attisnull(procedureTuple, Anum_pg_proc_proconfig, NULL) ||
298  FmgrHookIsNeeded(functionId))
299  {
300  *mod = NULL; /* core binary */
301  *fn = pstrdup("fmgr_security_definer");
302  ReleaseSysCache(procedureTuple);
303  return;
304  }
305 
306  /* see fmgr_info_cxt_security for the individual cases */
307  switch (procedureStruct->prolang)
308  {
309  case INTERNALlanguageId:
310  prosrcattr = SysCacheGetAttr(PROCOID, procedureTuple,
311  Anum_pg_proc_prosrc, &isnull);
312  if (isnull)
313  elog(ERROR, "null prosrc");
314 
315  *mod = NULL; /* core binary */
316  *fn = TextDatumGetCString(prosrcattr);
317  break;
318 
319  case ClanguageId:
320  prosrcattr = SysCacheGetAttr(PROCOID, procedureTuple,
321  Anum_pg_proc_prosrc, &isnull);
322  if (isnull)
323  elog(ERROR, "null prosrc for C function %u", functionId);
324 
325  probinattr = SysCacheGetAttr(PROCOID, procedureTuple,
326  Anum_pg_proc_probin, &isnull);
327  if (isnull)
328  elog(ERROR, "null probin for C function %u", functionId);
329 
330  /*
331  * No need to check symbol presence / API version here, already
332  * checked in fmgr_info_cxt_security.
333  */
334  *mod = TextDatumGetCString(probinattr);
335  *fn = TextDatumGetCString(prosrcattr);
336  break;
337 
338  case SQLlanguageId:
339  *mod = NULL; /* core binary */
340  *fn = pstrdup("fmgr_sql");
341  break;
342 
343  default:
344  *mod = NULL;
345  *fn = NULL; /* unknown, pass pointer */
346  break;
347  }
348 
349  ReleaseSysCache(procedureTuple);
350 }
#define TextDatumGetCString(d)
Definition: builtins.h:86
#define FmgrHookIsNeeded(fn_oid)
Definition: fmgr.h:778
bool heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc)
Definition: heaptuple.c:359
char * pstrdup(const char *in)
Definition: mcxt.c:1305
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition: syscache.c:1434
static void * fn(void *arg)

References elog(), ERROR, FmgrHookIsNeeded, fn(), GETSTRUCT, heap_attisnull(), HeapTupleIsValid, ObjectIdGetDatum, PROCOID, pstrdup(), ReleaseSysCache(), SearchSysCache1(), SysCacheGetAttr(), and TextDatumGetCString.

Referenced by llvm_function_reference().

◆ FunctionCall0Coll()

Datum FunctionCall0Coll ( FmgrInfo flinfo,
Oid  collation 
)

Definition at line 1097 of file fmgr.c.

1098 {
1099  LOCAL_FCINFO(fcinfo, 0);
1100  Datum result;
1101 
1102  InitFunctionCallInfoData(*fcinfo, flinfo, 0, collation, NULL, NULL);
1103 
1104  result = FunctionCallInvoke(fcinfo);
1105 
1106  /* Check for null result, since caller is clearly not expecting one */
1107  if (fcinfo->isnull)
1108  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1109 
1110  return result;
1111 }
#define FunctionCallInvoke(fcinfo)
Definition: fmgr.h:172
Oid fn_oid
Definition: fmgr.h:59

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by OidFunctionCall0Coll().

◆ FunctionCall1Coll()

Datum FunctionCall1Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1 
)

Definition at line 1114 of file fmgr.c.

1115 {
1116  LOCAL_FCINFO(fcinfo, 1);
1117  Datum result;
1118 
1119  InitFunctionCallInfoData(*fcinfo, flinfo, 1, collation, NULL, NULL);
1120 
1121  fcinfo->args[0].value = arg1;
1122  fcinfo->args[0].isnull = false;
1123 
1124  result = FunctionCallInvoke(fcinfo);
1125 
1126  /* Check for null result, since caller is clearly not expecting one */
1127  if (fcinfo->isnull)
1128  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1129 
1130  return result;
1131 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by _hash_datum2hashkey(), brin_bloom_add_value(), brin_bloom_consistent(), brin_inclusion_add_value(), element_hash(), ExecHashBuildSkewHash(), ExecHashGetHashValue(), gistCompressValues(), gistdentryinit(), gistFetchAtt(), hash_multirange(), hash_range(), MemoizeHash_hash(), OidFunctionCall1Coll(), signValue(), spgdoinsert(), and TupleHashTableHash_internal().

◆ FunctionCall2Coll()

Datum FunctionCall2Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2 
)

Definition at line 1134 of file fmgr.c.

1135 {
1136  LOCAL_FCINFO(fcinfo, 2);
1137  Datum result;
1138 
1139  InitFunctionCallInfoData(*fcinfo, flinfo, 2, collation, NULL, NULL);
1140 
1141  fcinfo->args[0].value = arg1;
1142  fcinfo->args[0].isnull = false;
1143  fcinfo->args[1].value = arg2;
1144  fcinfo->args[1].isnull = false;
1145 
1146  result = FunctionCallInvoke(fcinfo);
1147 
1148  /* Check for null result, since caller is clearly not expecting one */
1149  if (fcinfo->isnull)
1150  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1151 
1152  return result;
1153 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by _bt_check_rowcompare(), _bt_checkkeys(), _bt_compare(), _bt_compare_array_elements(), _bt_compare_scankey_args(), _bt_find_extreme_element(), _bt_keep_natts(), _hash_checkqual(), array_position_common(), array_positions(), AssertCheckExpandedRanges(), AssertCheckRanges(), brin_inclusion_add_value(), brin_inclusion_consistent(), brin_inclusion_union(), brin_minmax_add_value(), brin_minmax_consistent(), brin_minmax_multi_consistent(), brin_minmax_union(), build_distances(), call_subtype_diff(), cmpEntries(), compare_expanded_ranges(), compare_values(), compute_distinct_stats(), compute_partition_hash_value(), compute_range_stats(), create_range_bounds(), doPickSplit(), element_compare(), execTuplesUnequal(), genericPickSplit(), get_distance(), get_position(), get_stats_slot_range(), ginCompareEntries(), gistMakeUnionItVec(), gistMakeUnionKey(), gistUserPicksplit(), has_matching_range(), hash_multirange_extended(), hash_range_extended(), ineq_histogram_selectivity(), make_greater_string(), mcv_get_match_bitmap(), merge_list_bounds(), merge_overlapping_ranges(), mode_final(), multirange_elem_bsearch_comparison(), OidFunctionCall2Coll(), partition_list_bsearch(), partition_rbound_cmp(), partition_rbound_datum_cmp(), process_ordered_aggregate_single(), qsort_partition_list_value_cmp(), range_cmp_bound_values(), range_cmp_bounds(), range_contains_elem_internal(), range_contains_value(), ri_AttributesEqual(), satisfies_hash_partition(), spgdoinsert(), spgGetCache(), spgInnerTest(), spgLeafTest(), and tuples_equal().

◆ FunctionCall3Coll()

Datum FunctionCall3Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3 
)

Definition at line 1156 of file fmgr.c.

1158 {
1159  LOCAL_FCINFO(fcinfo, 3);
1160  Datum result;
1161 
1162  InitFunctionCallInfoData(*fcinfo, flinfo, 3, collation, NULL, NULL);
1163 
1164  fcinfo->args[0].value = arg1;
1165  fcinfo->args[0].isnull = false;
1166  fcinfo->args[1].value = arg2;
1167  fcinfo->args[1].isnull = false;
1168  fcinfo->args[2].value = arg3;
1169  fcinfo->args[2].isnull = false;
1170 
1171  result = FunctionCallInvoke(fcinfo);
1172 
1173  /* Check for null result, since caller is clearly not expecting one */
1174  if (fcinfo->isnull)
1175  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1176 
1177  return result;
1178 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by bringetbitmap(), ginExtractEntries(), gistKeyIsEQ(), gistpenalty(), OidFunctionCall3Coll(), and union_tuples().

◆ FunctionCall4Coll()

Datum FunctionCall4Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4 
)

Definition at line 1181 of file fmgr.c.

1183 {
1184  LOCAL_FCINFO(fcinfo, 4);
1185  Datum result;
1186 
1187  InitFunctionCallInfoData(*fcinfo, flinfo, 4, collation, NULL, NULL);
1188 
1189  fcinfo->args[0].value = arg1;
1190  fcinfo->args[0].isnull = false;
1191  fcinfo->args[1].value = arg2;
1192  fcinfo->args[1].isnull = false;
1193  fcinfo->args[2].value = arg3;
1194  fcinfo->args[2].isnull = false;
1195  fcinfo->args[3].value = arg4;
1196  fcinfo->args[3].isnull = false;
1197 
1198  result = FunctionCallInvoke(fcinfo);
1199 
1200  /* Check for null result, since caller is clearly not expecting one */
1201  if (fcinfo->isnull)
1202  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1203 
1204  return result;
1205 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by add_values_to_range(), bringetbitmap(), collectMatchBitmap(), matchPartialInPendingList(), OidFunctionCall4Coll(), and scalararraysel().

◆ FunctionCall5Coll()

Datum FunctionCall5Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5 
)

Definition at line 1208 of file fmgr.c.

1210 {
1211  LOCAL_FCINFO(fcinfo, 5);
1212  Datum result;
1213 
1214  InitFunctionCallInfoData(*fcinfo, flinfo, 5, collation, NULL, NULL);
1215 
1216  fcinfo->args[0].value = arg1;
1217  fcinfo->args[0].isnull = false;
1218  fcinfo->args[1].value = arg2;
1219  fcinfo->args[1].isnull = false;
1220  fcinfo->args[2].value = arg3;
1221  fcinfo->args[2].isnull = false;
1222  fcinfo->args[3].value = arg4;
1223  fcinfo->args[3].isnull = false;
1224  fcinfo->args[4].value = arg5;
1225  fcinfo->args[4].isnull = false;
1226 
1227  result = FunctionCallInvoke(fcinfo);
1228 
1229  /* Check for null result, since caller is clearly not expecting one */
1230  if (fcinfo->isnull)
1231  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1232 
1233  return result;
1234 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by gistindex_keytest(), OidFunctionCall5Coll(), scalararraysel(), update_frameheadpos(), and update_frametailpos().

◆ FunctionCall6Coll()

Datum FunctionCall6Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6 
)

Definition at line 1237 of file fmgr.c.

1240 {
1241  LOCAL_FCINFO(fcinfo, 6);
1242  Datum result;
1243 
1244  InitFunctionCallInfoData(*fcinfo, flinfo, 6, collation, NULL, NULL);
1245 
1246  fcinfo->args[0].value = arg1;
1247  fcinfo->args[0].isnull = false;
1248  fcinfo->args[1].value = arg2;
1249  fcinfo->args[1].isnull = false;
1250  fcinfo->args[2].value = arg3;
1251  fcinfo->args[2].isnull = false;
1252  fcinfo->args[3].value = arg4;
1253  fcinfo->args[3].isnull = false;
1254  fcinfo->args[4].value = arg5;
1255  fcinfo->args[4].isnull = false;
1256  fcinfo->args[5].value = arg6;
1257  fcinfo->args[5].isnull = false;
1258 
1259  result = FunctionCallInvoke(fcinfo);
1260 
1261  /* Check for null result, since caller is clearly not expecting one */
1262  if (fcinfo->isnull)
1263  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1264 
1265  return result;
1266 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by OidFunctionCall6Coll().

◆ FunctionCall7Coll()

Datum FunctionCall7Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7 
)

Definition at line 1269 of file fmgr.c.

1272 {
1273  LOCAL_FCINFO(fcinfo, 7);
1274  Datum result;
1275 
1276  InitFunctionCallInfoData(*fcinfo, flinfo, 7, collation, NULL, NULL);
1277 
1278  fcinfo->args[0].value = arg1;
1279  fcinfo->args[0].isnull = false;
1280  fcinfo->args[1].value = arg2;
1281  fcinfo->args[1].isnull = false;
1282  fcinfo->args[2].value = arg3;
1283  fcinfo->args[2].isnull = false;
1284  fcinfo->args[3].value = arg4;
1285  fcinfo->args[3].isnull = false;
1286  fcinfo->args[4].value = arg5;
1287  fcinfo->args[4].isnull = false;
1288  fcinfo->args[5].value = arg6;
1289  fcinfo->args[5].isnull = false;
1290  fcinfo->args[6].value = arg7;
1291  fcinfo->args[6].isnull = false;
1292 
1293  result = FunctionCallInvoke(fcinfo);
1294 
1295  /* Check for null result, since caller is clearly not expecting one */
1296  if (fcinfo->isnull)
1297  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1298 
1299  return result;
1300 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by directTriConsistentFn(), gincost_pattern(), OidFunctionCall7Coll(), and shimBoolConsistentFn().

◆ FunctionCall8Coll()

Datum FunctionCall8Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7,
Datum  arg8 
)

Definition at line 1303 of file fmgr.c.

1306 {
1307  LOCAL_FCINFO(fcinfo, 8);
1308  Datum result;
1309 
1310  InitFunctionCallInfoData(*fcinfo, flinfo, 8, collation, NULL, NULL);
1311 
1312  fcinfo->args[0].value = arg1;
1313  fcinfo->args[0].isnull = false;
1314  fcinfo->args[1].value = arg2;
1315  fcinfo->args[1].isnull = false;
1316  fcinfo->args[2].value = arg3;
1317  fcinfo->args[2].isnull = false;
1318  fcinfo->args[3].value = arg4;
1319  fcinfo->args[3].isnull = false;
1320  fcinfo->args[4].value = arg5;
1321  fcinfo->args[4].isnull = false;
1322  fcinfo->args[5].value = arg6;
1323  fcinfo->args[5].isnull = false;
1324  fcinfo->args[6].value = arg7;
1325  fcinfo->args[6].isnull = false;
1326  fcinfo->args[7].value = arg8;
1327  fcinfo->args[7].isnull = false;
1328 
1329  result = FunctionCallInvoke(fcinfo);
1330 
1331  /* Check for null result, since caller is clearly not expecting one */
1332  if (fcinfo->isnull)
1333  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1334 
1335  return result;
1336 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by directBoolConsistentFn(), and OidFunctionCall8Coll().

◆ FunctionCall9Coll()

Datum FunctionCall9Coll ( FmgrInfo flinfo,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7,
Datum  arg8,
Datum  arg9 
)

Definition at line 1339 of file fmgr.c.

1343 {
1344  LOCAL_FCINFO(fcinfo, 9);
1345  Datum result;
1346 
1347  InitFunctionCallInfoData(*fcinfo, flinfo, 9, collation, NULL, NULL);
1348 
1349  fcinfo->args[0].value = arg1;
1350  fcinfo->args[0].isnull = false;
1351  fcinfo->args[1].value = arg2;
1352  fcinfo->args[1].isnull = false;
1353  fcinfo->args[2].value = arg3;
1354  fcinfo->args[2].isnull = false;
1355  fcinfo->args[3].value = arg4;
1356  fcinfo->args[3].isnull = false;
1357  fcinfo->args[4].value = arg5;
1358  fcinfo->args[4].isnull = false;
1359  fcinfo->args[5].value = arg6;
1360  fcinfo->args[5].isnull = false;
1361  fcinfo->args[6].value = arg7;
1362  fcinfo->args[6].isnull = false;
1363  fcinfo->args[7].value = arg8;
1364  fcinfo->args[7].isnull = false;
1365  fcinfo->args[8].value = arg9;
1366  fcinfo->args[8].isnull = false;
1367 
1368  result = FunctionCallInvoke(fcinfo);
1369 
1370  /* Check for null result, since caller is clearly not expecting one */
1371  if (fcinfo->isnull)
1372  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1373 
1374  return result;
1375 }

References elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FunctionCallInvoke, InitFunctionCallInfoData, and LOCAL_FCINFO.

Referenced by OidFunctionCall9Coll().

◆ get_call_expr_arg_stable()

bool get_call_expr_arg_stable ( fmNodePtr  expr,
int  argnum 
)

◆ get_call_expr_argtype()

Oid get_call_expr_argtype ( fmNodePtr  expr,
int  argnum 
)

◆ get_fn_expr_arg_stable()

bool get_fn_expr_arg_stable ( FmgrInfo flinfo,
int  argnum 
)

Definition at line 1851 of file fmgr.c.

1852 {
1853  /*
1854  * can't return anything useful if we have no FmgrInfo or if its fn_expr
1855  * node has not been initialized
1856  */
1857  if (!flinfo || !flinfo->fn_expr)
1858  return false;
1859 
1860  return get_call_expr_arg_stable(flinfo->fn_expr, argnum);
1861 }
bool get_call_expr_arg_stable(Node *expr, int argnum)
Definition: fmgr.c:1870
fmNodePtr fn_expr
Definition: fmgr.h:66

References FmgrInfo::fn_expr, and get_call_expr_arg_stable().

Referenced by extract_variadic_args(), leadlag_common(), and window_nth_value().

◆ get_fn_expr_argtype()

◆ get_fn_expr_rettype()

Oid get_fn_expr_rettype ( FmgrInfo flinfo)

Definition at line 1764 of file fmgr.c.

1765 {
1766  Node *expr;
1767 
1768  /*
1769  * can't return anything useful if we have no FmgrInfo or if its fn_expr
1770  * node has not been initialized
1771  */
1772  if (!flinfo || !flinfo->fn_expr)
1773  return InvalidOid;
1774 
1775  expr = flinfo->fn_expr;
1776 
1777  return exprType(expr);
1778 }
Oid exprType(const Node *expr)
Definition: nodeFuncs.c:41
Definition: nodes.h:575

References exprType(), FmgrInfo::fn_expr, and InvalidOid.

Referenced by do_compile(), multirange_constructor0(), multirange_constructor1(), multirange_constructor2(), range_agg_finalfn(), range_constructor2(), and range_constructor3().

◆ get_fn_expr_variadic()

bool get_fn_expr_variadic ( FmgrInfo flinfo)

Definition at line 1920 of file fmgr.c.

1921 {
1922  Node *expr;
1923 
1924  /*
1925  * can't return anything useful if we have no FmgrInfo or if its fn_expr
1926  * node has not been initialized
1927  */
1928  if (!flinfo || !flinfo->fn_expr)
1929  return false;
1930 
1931  expr = flinfo->fn_expr;
1932 
1933  if (IsA(expr, FuncExpr))
1934  return ((FuncExpr *) expr)->funcvariadic;
1935  else
1936  return false;
1937 }

References FmgrInfo::fn_expr, and IsA.

Referenced by concat_internal(), count_nulls(), extract_variadic_args(), satisfies_hash_partition(), and text_format().

◆ get_fn_opclass_options()

bytea* get_fn_opclass_options ( FmgrInfo flinfo)

Definition at line 1973 of file fmgr.c.

1974 {
1975  if (flinfo && flinfo->fn_expr && IsA(flinfo->fn_expr, Const))
1976  {
1977  Const *expr = (Const *) flinfo->fn_expr;
1978 
1979  if (expr->consttype == BYTEAOID)
1980  return expr->constisnull ? NULL : DatumGetByteaP(expr->constvalue);
1981  }
1982 
1983  ereport(ERROR,
1984  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1985  errmsg("operator class options info is absent in function call context")));
1986 
1987  return NULL;
1988 }
#define DatumGetByteaP(X)
Definition: fmgr.h:331
Oid consttype
Definition: primnodes.h:256
Datum constvalue
Definition: primnodes.h:260
bool constisnull
Definition: primnodes.h:261

References Const::constisnull, Const::consttype, Const::constvalue, DatumGetByteaP, ereport, errcode(), errmsg(), ERROR, FmgrInfo::fn_expr, if(), and IsA.

◆ has_fn_opclass_options()

bool has_fn_opclass_options ( FmgrInfo flinfo)

Definition at line 1957 of file fmgr.c.

1958 {
1959  if (flinfo && flinfo->fn_expr && IsA(flinfo->fn_expr, Const))
1960  {
1961  Const *expr = (Const *) flinfo->fn_expr;
1962 
1963  if (expr->consttype == BYTEAOID)
1964  return !expr->constisnull;
1965  }
1966  return false;
1967 }

References Const::constisnull, Const::consttype, FmgrInfo::fn_expr, if(), and IsA.

◆ InputFunctionCall()

Datum InputFunctionCall ( FmgrInfo flinfo,
char *  str,
Oid  typioparam,
int32  typmod 
)

Definition at line 1515 of file fmgr.c.

1516 {
1517  LOCAL_FCINFO(fcinfo, 3);
1518  Datum result;
1519 
1520  if (str == NULL && flinfo->fn_strict)
1521  return (Datum) 0; /* just return null result */
1522 
1523  InitFunctionCallInfoData(*fcinfo, flinfo, 3, InvalidOid, NULL, NULL);
1524 
1525  fcinfo->args[0].value = CStringGetDatum(str);
1526  fcinfo->args[0].isnull = false;
1527  fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
1528  fcinfo->args[1].isnull = false;
1529  fcinfo->args[2].value = Int32GetDatum(typmod);
1530  fcinfo->args[2].isnull = false;
1531 
1532  result = FunctionCallInvoke(fcinfo);
1533 
1534  /* Should get null result if and only if str is NULL */
1535  if (str == NULL)
1536  {
1537  if (!fcinfo->isnull)
1538  elog(ERROR, "input function %u returned non-NULL",
1539  flinfo->fn_oid);
1540  }
1541  else
1542  {
1543  if (fcinfo->isnull)
1544  elog(ERROR, "input function %u returned NULL",
1545  flinfo->fn_oid);
1546  }
1547 
1548  return result;
1549 }
#define CStringGetDatum(X)
Definition: postgres.h:622
#define Int32GetDatum(X)
Definition: postgres.h:523
bool fn_strict
Definition: fmgr.h:61

References CStringGetDatum, elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FmgrInfo::fn_strict, FunctionCallInvoke, InitFunctionCallInfoData, Int32GetDatum, InvalidOid, LOCAL_FCINFO, ObjectIdGetDatum, and generate_unaccent_rules::str.

Referenced by BuildTupleFromCStrings(), domain_in(), ExecEvalJsonExprCoercion(), hstore_populate_record(), make_tuple_from_result_row(), multirange_in(), NextCopyFrom(), OidInputFunctionCall(), plperl_sv_to_datum(), plsample_func_handler(), pltcl_func_handler(), pltcl_returnnext(), pltcl_SPI_execute_plan(), PLyObject_ToScalar(), PLyUnicode_ToComposite(), populate_scalar(), range_in(), ReadArrayStr(), record_in(), and XmlTableGetValue().

◆ load_external_function()

void* load_external_function ( const char *  filename,
const char *  funcname,
bool  signalNotFound,
void **  filehandle 
)

Definition at line 105 of file dfmgr.c.

107 {
108  char *fullname;
109  void *lib_handle;
110  void *retval;
111 
112  /* Expand the possibly-abbreviated filename to an exact path name */
114 
115  /* Load the shared library, unless we already did */
116  lib_handle = internal_load_library(fullname);
117 
118  /* Return handle if caller wants it */
119  if (filehandle)
120  *filehandle = lib_handle;
121 
122  /* Look up the function within the library. */
123  retval = dlsym(lib_handle, funcname);
124 
125  if (retval == NULL && signalNotFound)
126  ereport(ERROR,
127  (errcode(ERRCODE_UNDEFINED_FUNCTION),
128  errmsg("could not find function \"%s\" in file \"%s\"",
129  funcname, fullname)));
130 
131  pfree(fullname);
132  return retval;
133 }
static char * expand_dynamic_library_name(const char *name)
Definition: dfmgr.c:431
static void * internal_load_library(const char *libname)
Definition: dfmgr.c:184
static char * filename
Definition: pg_dumpall.c:94
void * dlsym(void *handle, const char *symbol)

References dlsym(), ereport, errcode(), errmsg(), ERROR, expand_dynamic_library_name(), filename, internal_load_library(), and pfree().

Referenced by _PG_init(), fmgr_c_validator(), fmgr_info_C_lang(), llvm_resolve_symbol(), LoadArchiveLibrary(), LoadOutputPlugin(), LookupBackgroundWorkerFunction(), LookupParallelWorkerFunction(), and provider_init().

◆ load_file()

void load_file ( const char *  filename,
bool  restricted 
)

Definition at line 144 of file dfmgr.c.

145 {
146  char *fullname;
147 
148  /* Apply security restriction if requested */
149  if (restricted)
151 
152  /* Expand the possibly-abbreviated filename to an exact path name */
154 
155  /* Load the shared library */
156  (void) internal_load_library(fullname);
157 
158  pfree(fullname);
159 }
static void check_restricted_library_name(const char *name)
Definition: dfmgr.c:486

References check_restricted_library_name(), expand_dynamic_library_name(), filename, internal_load_library(), and pfree().

Referenced by AlterSubscription(), AlterSubscription_refresh(), ApplyWorkerMain(), CreateSubscription(), DropSubscription(), load_libraries(), ReplicationSlotDropAtPubNode(), standard_ProcessUtility(), and WalReceiverMain().

◆ lookup_external_function()

void* lookup_external_function ( void *  filehandle,
const char *  funcname 
)

Definition at line 166 of file dfmgr.c.

167 {
168  return dlsym(filehandle, funcname);
169 }

References dlsym().

Referenced by fetch_finfo_record().

◆ OidFunctionCall0Coll()

Datum OidFunctionCall0Coll ( Oid  functionId,
Oid  collation 
)

Definition at line 1386 of file fmgr.c.

1387 {
1388  FmgrInfo flinfo;
1389 
1390  fmgr_info(functionId, &flinfo);
1391 
1392  return FunctionCall0Coll(&flinfo, collation);
1393 }
void fmgr_info(Oid functionId, FmgrInfo *finfo)
Definition: fmgr.c:126
Datum FunctionCall0Coll(FmgrInfo *flinfo, Oid collation)
Definition: fmgr.c:1097

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall0Coll().

◆ OidFunctionCall1Coll()

Datum OidFunctionCall1Coll ( Oid  functionId,
Oid  collation,
Datum  arg1 
)

Definition at line 1396 of file fmgr.c.

1397 {
1398  FmgrInfo flinfo;
1399 
1400  fmgr_info(functionId, &flinfo);
1401 
1402  return FunctionCall1Coll(&flinfo, collation, arg1);
1403 }
Datum FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1)
Definition: fmgr.c:1114

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall1Coll().

Referenced by _bt_allequalimage(), and _hash_datum2hashkey_type().

◆ OidFunctionCall2Coll()

Datum OidFunctionCall2Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2 
)

Definition at line 1406 of file fmgr.c.

1407 {
1408  FmgrInfo flinfo;
1409 
1410  fmgr_info(functionId, &flinfo);
1411 
1412  return FunctionCall2Coll(&flinfo, collation, arg1, arg2);
1413 }
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
Definition: fmgr.c:1134

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall2Coll().

Referenced by _bt_compare_scankey_args(), and index_recheck_constraint().

◆ OidFunctionCall3Coll()

Datum OidFunctionCall3Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3 
)

Definition at line 1416 of file fmgr.c.

1418 {
1419  FmgrInfo flinfo;
1420 
1421  fmgr_info(functionId, &flinfo);
1422 
1423  return FunctionCall3Coll(&flinfo, collation, arg1, arg2, arg3);
1424 }
Datum FunctionCall3Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3)
Definition: fmgr.c:1156

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall3Coll().

◆ OidFunctionCall4Coll()

Datum OidFunctionCall4Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4 
)

Definition at line 1427 of file fmgr.c.

1429 {
1430  FmgrInfo flinfo;
1431 
1432  fmgr_info(functionId, &flinfo);
1433 
1434  return FunctionCall4Coll(&flinfo, collation, arg1, arg2, arg3, arg4);
1435 }
Datum FunctionCall4Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
Definition: fmgr.c:1181

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall4Coll().

Referenced by restriction_selectivity().

◆ OidFunctionCall5Coll()

Datum OidFunctionCall5Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5 
)

Definition at line 1438 of file fmgr.c.

1440 {
1441  FmgrInfo flinfo;
1442 
1443  fmgr_info(functionId, &flinfo);
1444 
1445  return FunctionCall5Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5);
1446 }
Datum FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
Definition: fmgr.c:1208

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall5Coll().

Referenced by join_selectivity().

◆ OidFunctionCall6Coll()

Datum OidFunctionCall6Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6 
)

Definition at line 1449 of file fmgr.c.

1452 {
1453  FmgrInfo flinfo;
1454 
1455  fmgr_info(functionId, &flinfo);
1456 
1457  return FunctionCall6Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1458  arg6);
1459 }
Datum FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
Definition: fmgr.c:1237

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall6Coll().

◆ OidFunctionCall7Coll()

Datum OidFunctionCall7Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7 
)

Definition at line 1462 of file fmgr.c.

1465 {
1466  FmgrInfo flinfo;
1467 
1468  fmgr_info(functionId, &flinfo);
1469 
1470  return FunctionCall7Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1471  arg6, arg7);
1472 }
Datum FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
Definition: fmgr.c:1269

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall7Coll().

◆ OidFunctionCall8Coll()

Datum OidFunctionCall8Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7,
Datum  arg8 
)

Definition at line 1475 of file fmgr.c.

1478 {
1479  FmgrInfo flinfo;
1480 
1481  fmgr_info(functionId, &flinfo);
1482 
1483  return FunctionCall8Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1484  arg6, arg7, arg8);
1485 }
Datum FunctionCall8Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8)
Definition: fmgr.c:1303

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall8Coll().

◆ OidFunctionCall9Coll()

Datum OidFunctionCall9Coll ( Oid  functionId,
Oid  collation,
Datum  arg1,
Datum  arg2,
Datum  arg3,
Datum  arg4,
Datum  arg5,
Datum  arg6,
Datum  arg7,
Datum  arg8,
Datum  arg9 
)

Definition at line 1488 of file fmgr.c.

1492 {
1493  FmgrInfo flinfo;
1494 
1495  fmgr_info(functionId, &flinfo);
1496 
1497  return FunctionCall9Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1498  arg6, arg7, arg8, arg9);
1499 }
Datum FunctionCall9Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9)
Definition: fmgr.c:1339

References fmgr_security_definer_cache::flinfo, fmgr_info(), and FunctionCall9Coll().

◆ OidInputFunctionCall()

Datum OidInputFunctionCall ( Oid  functionId,
char *  str,
Oid  typioparam,
int32  typmod 
)

Definition at line 1630 of file fmgr.c.

1631 {
1632  FmgrInfo flinfo;
1633 
1634  fmgr_info(functionId, &flinfo);
1635  return InputFunctionCall(&flinfo, str, typioparam, typmod);
1636 }
Datum InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod)
Definition: fmgr.c:1515

References fmgr_security_definer_cache::flinfo, fmgr_info(), InputFunctionCall(), and generate_unaccent_rules::str.

Referenced by DefineAggregate(), exec_bind_message(), get_typdefault(), GetAggInitVal(), InsertOneValue(), parse_fcall_arguments(), slot_modify_data(), slot_store_data(), and stringTypeDatum().

◆ OidOutputFunctionCall()

◆ OidReceiveFunctionCall()

Datum OidReceiveFunctionCall ( Oid  functionId,
fmStringInfo  buf,
Oid  typioparam,
int32  typmod 
)

Definition at line 1648 of file fmgr.c.

1650 {
1651  FmgrInfo flinfo;
1652 
1653  fmgr_info(functionId, &flinfo);
1654  return ReceiveFunctionCall(&flinfo, buf, typioparam, typmod);
1655 }
Datum ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf, Oid typioparam, int32 typmod)
Definition: fmgr.c:1573
static char * buf
Definition: pg_test_fsync.c:67

References buf, fmgr_security_definer_cache::flinfo, fmgr_info(), and ReceiveFunctionCall().

Referenced by exec_bind_message(), parse_fcall_arguments(), slot_modify_data(), and slot_store_data().

◆ OidSendFunctionCall()

bytea* OidSendFunctionCall ( Oid  functionId,
Datum  val 
)

Definition at line 1658 of file fmgr.c.

1659 {
1660  FmgrInfo flinfo;
1661 
1662  fmgr_info(functionId, &flinfo);
1663  return SendFunctionCall(&flinfo, val);
1664 }
bytea * SendFunctionCall(FmgrInfo *flinfo, Datum val)
Definition: fmgr.c:1620

References fmgr_security_definer_cache::flinfo, fmgr_info(), SendFunctionCall(), and val.

Referenced by logicalrep_write_tuple(), and SendFunctionResult().

◆ OutputFunctionCall()

◆ pg_detoast_datum()

struct varlena* pg_detoast_datum ( struct varlena datum)

Definition at line 1708 of file fmgr.c.

1709 {
1710  if (VARATT_IS_EXTENDED(datum))
1711  return detoast_attr(datum);
1712  else
1713  return datum;
1714 }
struct varlena * detoast_attr(struct varlena *attr)
Definition: detoast.c:116
#define VARATT_IS_EXTENDED(PTR)
Definition: postgres.h:340

References detoast_attr(), and VARATT_IS_EXTENDED.

◆ pg_detoast_datum_copy()

struct varlena* pg_detoast_datum_copy ( struct varlena datum)

Definition at line 1717 of file fmgr.c.

1718 {
1719  if (VARATT_IS_EXTENDED(datum))
1720  return detoast_attr(datum);
1721  else
1722  {
1723  /* Make a modifiable copy of the varlena object */
1724  Size len = VARSIZE(datum);
1725  struct varlena *result = (struct varlena *) palloc(len);
1726 
1727  memcpy(result, datum, len);
1728  return result;
1729  }
1730 }
void * palloc(Size size)
Definition: mcxt.c:1068
const void size_t len
#define VARSIZE(PTR)
Definition: postgres.h:316

References detoast_attr(), len, palloc(), VARATT_IS_EXTENDED, and VARSIZE.

◆ pg_detoast_datum_packed()

struct varlena* pg_detoast_datum_packed ( struct varlena datum)

Definition at line 1740 of file fmgr.c.

1741 {
1742  if (VARATT_IS_COMPRESSED(datum) || VARATT_IS_EXTERNAL(datum))
1743  return detoast_attr(datum);
1744  else
1745  return datum;
1746 }
#define VARATT_IS_COMPRESSED(PTR)
Definition: postgres.h:325
#define VARATT_IS_EXTERNAL(PTR)
Definition: postgres.h:326

References detoast_attr(), VARATT_IS_COMPRESSED, and VARATT_IS_EXTERNAL.

Referenced by text_to_cstring(), and text_to_cstring_buffer().

◆ pg_detoast_datum_slice()

struct varlena* pg_detoast_datum_slice ( struct varlena datum,
int32  first,
int32  count 
)

Definition at line 1733 of file fmgr.c.

1734 {
1735  /* Only get the specified portion from the toast rel */
1736  return detoast_attr_slice(datum, first, count);
1737 }
struct varlena * detoast_attr_slice(struct varlena *attr, int32 sliceoffset, int32 slicelength)
Definition: detoast.c:205

References detoast_attr_slice().

◆ ReceiveFunctionCall()

Datum ReceiveFunctionCall ( FmgrInfo flinfo,
fmStringInfo  buf,
Oid  typioparam,
int32  typmod 
)

Definition at line 1573 of file fmgr.c.

1575 {
1576  LOCAL_FCINFO(fcinfo, 3);
1577  Datum result;
1578 
1579  if (buf == NULL && flinfo->fn_strict)
1580  return (Datum) 0; /* just return null result */
1581 
1582  InitFunctionCallInfoData(*fcinfo, flinfo, 3, InvalidOid, NULL, NULL);
1583 
1584  fcinfo->args[0].value = PointerGetDatum(buf);
1585  fcinfo->args[0].isnull = false;
1586  fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
1587  fcinfo->args[1].isnull = false;
1588  fcinfo->args[2].value = Int32GetDatum(typmod);
1589  fcinfo->args[2].isnull = false;
1590 
1591  result = FunctionCallInvoke(fcinfo);
1592 
1593  /* Should get null result if and only if buf is NULL */
1594  if (buf == NULL)
1595  {
1596  if (!fcinfo->isnull)
1597  elog(ERROR, "receive function %u returned non-NULL",
1598  flinfo->fn_oid);
1599  }
1600  else
1601  {
1602  if (fcinfo->isnull)
1603  elog(ERROR, "receive function %u returned NULL",
1604  flinfo->fn_oid);
1605  }
1606 
1607  return result;
1608 }
#define PointerGetDatum(X)
Definition: postgres.h:600

References buf, elog(), ERROR, fmgr_security_definer_cache::flinfo, FmgrInfo::fn_oid, FmgrInfo::fn_strict, FunctionCallInvoke, InitFunctionCallInfoData, Int32GetDatum, InvalidOid, LOCAL_FCINFO, ObjectIdGetDatum, and PointerGetDatum.

Referenced by CopyReadBinaryAttribute(), domain_recv(), multirange_recv(), OidReceiveFunctionCall(), range_recv(), ReadArrayBinary(), and record_recv().

◆ RestoreLibraryState()

void RestoreLibraryState ( char *  start_address)

Definition at line 693 of file dfmgr.c.

694 {
695  while (*start_address != '\0')
696  {
697  internal_load_library(start_address);
698  start_address += strlen(start_address) + 1;
699  }
700 }

References internal_load_library().

Referenced by ParallelWorkerMain().

◆ SendFunctionCall()

bytea* SendFunctionCall ( FmgrInfo flinfo,
Datum  val 
)

◆ SerializeLibraryState()

void SerializeLibraryState ( Size  maxsize,
char *  start_address 
)

Definition at line 671 of file dfmgr.c.

672 {
673  DynamicFileList *file_scanner;
674 
675  for (file_scanner = file_list;
676  file_scanner != NULL;
677  file_scanner = file_scanner->next)
678  {
679  Size len;
680 
681  len = strlcpy(start_address, file_scanner->filename, maxsize) + 1;
682  Assert(len < maxsize);
683  maxsize -= len;
684  start_address += len;
685  }
686  start_address[0] = '\0';
687 }
Assert(fmt[strlen(fmt) - 1] !='\n')
size_t strlcpy(char *dst, const char *src, size_t siz)
Definition: strlcpy.c:45

References Assert(), file_list, df_files::filename, len, df_files::next, and strlcpy().

Referenced by InitializeParallelDSM().

◆ set_fn_opclass_options()

void set_fn_opclass_options ( FmgrInfo flinfo,
bytea options 
)

Definition at line 1946 of file fmgr.c.

1947 {
1948  flinfo->fn_expr = (Node *) makeConst(BYTEAOID, -1, InvalidOid, -1,
1950  options == NULL, false);
1951 }
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:300

References FmgrInfo::fn_expr, InvalidOid, makeConst(), and PointerGetDatum.

Referenced by gincost_pattern(), and index_getprocinfo().

◆ StaticAssertDecl()

StaticAssertDecl ( sizeof(FMGR_ABI_EXTRA)<=sizeof(((Pg_magic_struct *) 0) ->abi_extra)  ,
"FMGR_ABI_EXTRA too long"   
)

Variable Documentation

◆ Dynamic_library_path

PGDLLIMPORT char* Dynamic_library_path
extern

Definition at line 76 of file dfmgr.c.

Referenced by find_in_dynamic_libpath().

◆ fmgr_hook

PGDLLIMPORT fmgr_hook_type fmgr_hook
extern

Definition at line 39 of file fmgr.c.

Referenced by fmgr_security_definer(), and sepgsql_init_client_label().

◆ needs_fmgr_hook

PGDLLIMPORT needs_fmgr_hook_type needs_fmgr_hook
extern

Definition at line 38 of file fmgr.c.

Referenced by sepgsql_init_client_label().