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)
 
PGDLLEXPORT void _PG_init (void)
 
 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)
 
bool InputFunctionCallSafe (FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod, fmNodePtr escontext, Datum *result)
 
bool DirectInputFunctionCallSafe (PGFunction func, char *str, Oid typioparam, int32 typmod, fmNodePtr escontext, Datum *result)
 
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 760 of file fmgr.h.

◆ AGG_CONTEXT_WINDOW

#define AGG_CONTEXT_WINDOW   2 /* window function */

Definition at line 761 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 641 of file fmgr.h.

◆ DirectFunctionCall2

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

Definition at line 643 of file fmgr.h.

◆ DirectFunctionCall3

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

Definition at line 645 of file fmgr.h.

◆ DirectFunctionCall4

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

Definition at line 647 of file fmgr.h.

◆ DirectFunctionCall5

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

Definition at line 649 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 651 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 653 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 655 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 657 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 796 of file fmgr.h.

◆ FunctionCall1

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

Definition at line 659 of file fmgr.h.

◆ FunctionCall2

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

Definition at line 661 of file fmgr.h.

◆ FunctionCall3

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

Definition at line 663 of file fmgr.h.

◆ FunctionCall4

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

Definition at line 665 of file fmgr.h.

◆ FunctionCall5

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

Definition at line 667 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 669 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 671 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 673 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 675 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)
tree context
Definition: radixtree.h:1835

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
#define SizeForFunctionCallInfo(nargs)
Definition: fmgr.h:102
const void * data
const char * name

Definition at line 110 of file fmgr.h.

◆ OidFunctionCall0

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

Definition at line 677 of file fmgr.h.

◆ OidFunctionCall1

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

Definition at line 679 of file fmgr.h.

◆ OidFunctionCall2

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

Definition at line 681 of file fmgr.h.

◆ OidFunctionCall3

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

Definition at line 683 of file fmgr.h.

◆ OidFunctionCall4

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

Definition at line 685 of file fmgr.h.

◆ OidFunctionCall5

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

Definition at line 687 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 689 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 691 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 693 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 695 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:482
struct varlena * pg_detoast_datum_slice(struct varlena *datum, int32 first, int32 count)
Definition: fmgr.c:1857
static Pointer DatumGetPointer(Datum X)
Definition: postgres.h:312
char * c
Definition: c.h:666

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:472
#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 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:343
#define PGDLLEXPORT
Definition: c.h:1310
#define PG_FUNCTION_ARGS
Definition: fmgr.h:193
#define funcname
Definition: indent_codes.h:69
uintptr_t Datum
Definition: postgres.h:64

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 495 of file fmgr.h.

◆ PG_MAGIC_FUNCTION_NAME_STRING

#define PG_MAGIC_FUNCTION_NAME_STRING   "Pg_magic_func"

Definition at line 496 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:475
#define PG_MAGIC_FUNCTION_NAME
Definition: fmgr.h:495

Definition at line 498 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 475 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 790 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 788 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 493 of file fmgr.h.

Enumeration Type Documentation

◆ FmgrHookEventType

Enumerator
FHET_START 
FHET_END 
FHET_ABORT 

Definition at line 781 of file fmgr.h.

782 {
783  FHET_START,
784  FHET_END,
785  FHET_ABORT,
FmgrHookEventType
Definition: fmgr.h:782
@ FHET_END
Definition: fmgr.h:784
@ FHET_ABORT
Definition: fmgr.h:785
@ FHET_START
Definition: fmgr.h:783

Function Documentation

◆ _PG_init()

PGDLLEXPORT void _PG_init ( void  )

Definition at line 52 of file auth_delay.c.

53 {
54  /* Define custom GUC variables */
55  DefineCustomIntVariable("auth_delay.milliseconds",
56  "Milliseconds to delay before reporting authentication failure",
57  NULL,
59  0,
60  0, INT_MAX / 1000,
61  PGC_SIGHUP,
63  NULL,
64  NULL,
65  NULL);
66 
67  MarkGUCPrefixReserved("auth_delay");
68 
69  /* Install Hooks */
72 }
ClientAuthentication_hook_type ClientAuthentication_hook
Definition: auth.c:230
static void auth_delay_checks(Port *port, int status)
Definition: auth_delay.c:31
static int auth_delay_milliseconds
Definition: auth_delay.c:22
static ClientAuthentication_hook_type original_client_auth_hook
Definition: auth_delay.c:25
void MarkGUCPrefixReserved(const char *className)
Definition: guc.c:5279
void DefineCustomIntVariable(const char *name, const char *short_desc, const char *long_desc, int *valueAddr, int bootValue, int minValue, int maxValue, GucContext context, int flags, GucIntCheckHook check_hook, GucIntAssignHook assign_hook, GucShowHook show_hook)
Definition: guc.c:5158
#define GUC_UNIT_MS
Definition: guc.h:235
@ PGC_SIGHUP
Definition: guc.h:71

References AccessExclusiveLock, add_int_reloption(), add_reloption_kind(), apw_start_leader_worker(), archive_directory, AssertVariableIsOfType, auth_delay_checks(), auth_delay_milliseconds, auto_explain_log_analyze, auto_explain_log_buffers, auto_explain_log_format, auto_explain_log_level, auto_explain_log_min_duration, auto_explain_log_nested_statements, auto_explain_log_parameter_max_length, auto_explain_log_settings, auto_explain_log_timing, auto_explain_log_triggers, auto_explain_log_verbose, auto_explain_log_wal, auto_explain_sample_rate, autoprewarm, autoprewarm_interval, BaseBackupAddTarget(), BackgroundWorker::bgw_flags, BackgroundWorker::bgw_function_name, BackgroundWorker::bgw_library_name, BackgroundWorker::bgw_main_arg, BGW_MAXLEN, BackgroundWorker::bgw_name, BGW_NEVER_RESTART, BackgroundWorker::bgw_notify_pid, BackgroundWorker::bgw_restart_time, BackgroundWorker::bgw_start_time, BackgroundWorker::bgw_type, BGWORKER_BACKEND_DATABASE_CONNECTION, BGWORKER_SHMEM_ACCESS, BgWorkerStart_RecoveryFinished, bl_relopt_kind, bl_relopt_tab, buf, check_archive_directory(), check_password(), check_password_hook, ClientAuthentication_hook, create_reloptions_table(), DEFAULT_BLOOM_BITS, DEFAULT_BLOOM_LENGTH, DefineCustomBoolVariable(), DefineCustomEnumVariable(), DefineCustomIntVariable(), DefineCustomRealVariable(), DefineCustomStringVariable(), delay_execution_planner(), dummy_object_relabel(), EAN13_index, EAN13_range, elog, EnableQueryId(), HASHCTL::entrysize, ereport, errcode(), errdetail(), errmsg(), ERROR, ExecutorCheckPerms_hook, ExecutorEnd_hook, ExecutorFinish_hook, ExecutorRun_hook, ExecutorStart_hook, explain_ExecutorEnd(), explain_ExecutorFinish(), explain_ExecutorRun(), explain_ExecutorStart(), EXPLAIN_FORMAT_TEXT, find_rendezvous_variable(), format_options, gettext_noop, GUC_LIST_INPUT, GUC_NOT_IN_SAMPLE, GUC_UNIT_BYTE, GUC_UNIT_MS, GUC_UNIT_S, HASH_BLOBS, hash_create(), HASH_ELEM, hstoreCheckKeyLen, hstoreCheckKeyLen_p, hstoreCheckValLen, hstoreCheckValLen_p, hstorePairs, hstorePairs_p, hstoreUniquePairs, hstoreUniquePairs_p, hstoreUpgrade, hstoreUpgrade_p, i, INDEX_MAX_KEYS, inj_stats_enabled, injection_shmem_request(), injection_shmem_startup(), Int32GetDatum(), ISBN_index, ISBN_range, ISMN_index, ISMN_range, ISN_DEBUG, ISSN_index, ISSN_range, IsUnderPostmaster, HASHCTL::keysize, ldap_password_hook, load_external_function(), LOG, loglevel_options, MarkGUCPrefixReserved(), MAX_BLOOM_BITS, MAX_BLOOM_LENGTH, MemoryContextStrdup(), next_exec_check_perms_hook, next_object_access_hook, next_object_access_hook_str, next_ProcessUtility_hook, object_access_hook, object_access_hook_str, relopt_parse_elt::offset, openssl_tls_init_hook, relopt_parse_elt::optname, relopt_parse_elt::opttype, original_client_auth_hook, pg_bindtextdomain(), PGC_POSTMASTER, PGC_SIGHUP, PGC_SUSET, PGC_USERSET, pgfdw_application_name, pgss_ExecutorEnd(), pgss_ExecutorFinish(), pgss_ExecutorRun(), pgss_ExecutorStart(), pgss_max, pgss_planner(), pgss_post_parse_analyze(), pgss_ProcessUtility(), pgss_save, pgss_shmem_request(), pgss_shmem_startup(), pgss_track, pgss_track_planning, PGSS_TRACK_TOP, pgss_track_utility, pgstat_register_inj(), pgstat_register_inj_fixed(), planner_hook, plperl_held_interp, plperl_init_interp(), plperl_interp_hash, plperl_on_init, plperl_on_plperl_init, plperl_on_plperlu_init, plperl_opmask, plperl_proc_hash, plperl_use_strict, plpgsql_check_asserts, plpgsql_extra_checks_check_hook(), plpgsql_extra_errors_assign_hook(), plpgsql_extra_errors_string, plpgsql_extra_warnings_assign_hook(), plpgsql_extra_warnings_string, plpgsql_HashTableInit(), plpgsql_plugin_ptr, plpgsql_print_strict_params, PLPGSQL_RESOLVE_ERROR, plpgsql_subxact_cb(), plpgsql_variable_conflict, plpgsql_xact_cb(), plpython_version_bitmask, plpython_version_bitmask_ptr, pltcl_AlertNotifier(), pltcl_CreateFileHandler(), pltcl_DeleteFileHandler(), pltcl_FinalizeNotifier(), pltcl_hold_interp, pltcl_InitNotifier(), pltcl_interp_htab, pltcl_pm_init_done, pltcl_proc_htab, pltcl_ServiceModeHook(), pltcl_SetTimer(), pltcl_start_proc, pltcl_WaitForEvent(), pltclu_start_proc, PLy_elog_impl(), PLy_elog_impl_p, PLyObject_AsString, PLyObject_AsString_p, PLyUnicode_FromStringAndSize, PLyUnicode_FromStringAndSize_p, post_parse_analyze_hook, post_planning_lock_id, PQWalReceiverFunctions, prev_check_password_hook, prev_ExecutorEnd, prev_ExecutorFinish, prev_ExecutorRun, prev_ExecutorStart, prev_planner_hook, prev_post_parse_analyze_hook, prev_ProcessUtility, prev_shmem_request_hook, prev_shmem_startup_hook, process_shared_preload_libraries_in_progress, ProcessUtility_hook, register_label_provider(), RegisterBackgroundWorker(), RegisterCustomRmgr(), RegisterSubXactCallback(), RegisterXactCallback(), REGRESS_audit, REGRESS_deny_alter_system, REGRESS_deny_exec_perms, REGRESS_deny_object_access, REGRESS_deny_set_variable, REGRESS_deny_utility_commands, REGRESS_exec_check_perms(), REGRESS_object_access_hook(), REGRESS_object_access_hook_str(), REGRESS_suset_variable1, REGRESS_suset_variable2, REGRESS_userset_variable1, REGRESS_userset_variable2, REGRESS_utility_command(), RELOPT_TYPE_INT, RM_TESTCUSTOMRMGRS_ID, rot13_passphrase(), row_security_policy_hook_permissive, row_security_policy_hook_restrictive, sepgsql_avc_init(), sepgsql_context_info, sepgsql_debug_audit, sepgsql_exec_check_perms(), sepgsql_init_client_label(), SEPGSQL_LABEL_TAG, SEPGSQL_MODE_DISABLED, sepgsql_object_access(), sepgsql_object_relabel(), sepgsql_permissive, sepgsql_set_mode(), sepgsql_utility_command(), set_rot13(), shell_check_detail(), shell_command, shell_get_sink(), shell_required_role, shmem_request_hook, shmem_startup_hook, similarity_threshold, snprintf, sprintf, ssl_passphrase, strict_word_similarity_threshold, test_rls_hooks_permissive(), test_rls_hooks_restrictive(), test_slru_shmem_request(), test_slru_shmem_startup(), testcustomrmgrs_rmgr, TEXTDOMAIN, TopMemoryContext, track_options, UPC_index, UPC_range, variable_conflict_options, WalReceiverFunctions, word_similarity_threshold, worker_spi_database, worker_spi_naptime, worker_spi_role, and worker_spi_total_workers.

◆ AggCheckCallContext()

int AggCheckCallContext ( FunctionCallInfo  fcinfo,
MemoryContext aggcontext 
)

Definition at line 4510 of file nodeAgg.c.

4511 {
4512  if (fcinfo->context && IsA(fcinfo->context, AggState))
4513  {
4514  if (aggcontext)
4515  {
4516  AggState *aggstate = ((AggState *) fcinfo->context);
4517  ExprContext *cxt = aggstate->curaggcontext;
4518 
4519  *aggcontext = cxt->ecxt_per_tuple_memory;
4520  }
4521  return AGG_CONTEXT_AGGREGATE;
4522  }
4523  if (fcinfo->context && IsA(fcinfo->context, WindowAggState))
4524  {
4525  if (aggcontext)
4526  *aggcontext = ((WindowAggState *) fcinfo->context)->curaggcontext;
4527  return AGG_CONTEXT_WINDOW;
4528  }
4529 
4530  /* this is just to prevent "uninitialized variable" warnings */
4531  if (aggcontext)
4532  *aggcontext = NULL;
4533  return 0;
4534 }
#define AGG_CONTEXT_WINDOW
Definition: fmgr.h:761
#define AGG_CONTEXT_AGGREGATE
Definition: fmgr.h:760
#define IsA(nodeptr, _type_)
Definition: nodes.h:158
ExprContext * curaggcontext
Definition: execnodes.h:2512
MemoryContext ecxt_per_tuple_memory
Definition: execnodes.h:266
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_combine(), array_agg_array_deserialize(), array_agg_array_finalfn(), array_agg_array_serialize(), array_agg_array_transfn(), array_agg_combine(), array_agg_deserialize(), array_agg_finalfn(), array_agg_serialize(), 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(), interval_avg_deserialize(), interval_avg_serialize(), 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(), makeIntervalAggState(), 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(), string_agg_combine(), string_agg_deserialize(), string_agg_finalfn(), and string_agg_serialize().

◆ AggGetAggref()

fmAggrefPtr AggGetAggref ( FunctionCallInfo  fcinfo)

Definition at line 4554 of file nodeAgg.c.

4555 {
4556  if (fcinfo->context && IsA(fcinfo->context, AggState))
4557  {
4558  AggState *aggstate = (AggState *) fcinfo->context;
4559  AggStatePerAgg curperagg;
4560  AggStatePerTrans curpertrans;
4561 
4562  /* check curperagg (valid when in a final function) */
4563  curperagg = aggstate->curperagg;
4564 
4565  if (curperagg)
4566  return curperagg->aggref;
4567 
4568  /* check curpertrans (valid when in a transition function) */
4569  curpertrans = aggstate->curpertrans;
4570 
4571  if (curpertrans)
4572  return curpertrans->aggref;
4573  }
4574  return NULL;
4575 }
if(TABLE==NULL||TABLE_index==NULL)
Definition: isn.c:76
Aggref * aggref
Definition: nodeAgg.h:44
AggStatePerTrans curpertrans
Definition: execnodes.h:2515
AggStatePerAgg curperagg
Definition: execnodes.h:2513

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 4588 of file nodeAgg.c.

4589 {
4590  if (fcinfo->context && IsA(fcinfo->context, AggState))
4591  {
4592  AggState *aggstate = (AggState *) fcinfo->context;
4593 
4594  return aggstate->tmpcontext->ecxt_per_tuple_memory;
4595  }
4596  return NULL;
4597 }
ExprContext * tmpcontext
Definition: execnodes.h:2510

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

◆ AggRegisterCallback()

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

Definition at line 4653 of file nodeAgg.c.

4656 {
4657  if (fcinfo->context && IsA(fcinfo->context, AggState))
4658  {
4659  AggState *aggstate = (AggState *) fcinfo->context;
4660  ExprContext *cxt = aggstate->curaggcontext;
4661 
4662  RegisterExprContextCallback(cxt, func, arg);
4663 
4664  return;
4665  }
4666  elog(ERROR, "aggregate function cannot register a callback in this context");
4667 }
#define ERROR
Definition: elog.h:39
#define elog(elevel,...)
Definition: elog.h:225
void RegisterExprContextCallback(ExprContext *econtext, ExprContextCallbackFunction function, Datum arg)
Definition: execUtils.c:899
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 4614 of file nodeAgg.c.

4615 {
4616  if (fcinfo->context && IsA(fcinfo->context, AggState))
4617  {
4618  AggState *aggstate = (AggState *) fcinfo->context;
4619  AggStatePerAgg curperagg;
4620  AggStatePerTrans curpertrans;
4621 
4622  /* check curperagg (valid when in a final function) */
4623  curperagg = aggstate->curperagg;
4624 
4625  if (curperagg)
4626  return aggstate->pertrans[curperagg->transno].aggshared;
4627 
4628  /* check curpertrans (valid when in a transition function) */
4629  curpertrans = aggstate->curpertrans;
4630 
4631  if (curpertrans)
4632  return curpertrans->aggshared;
4633  }
4634  return true;
4635 }
AggStatePerTrans pertrans
Definition: execnodes.h:2507

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 1065 of file fmgr.c.

1066 {
1067  LOCAL_FCINFO(fcinfo, 1);
1068  Datum result;
1069 
1070  InitFunctionCallInfoData(*fcinfo, flinfo, 1, collation, NULL, NULL);
1071 
1072  fcinfo->args[0].value = arg1;
1073  fcinfo->args[0].isnull = false;
1074 
1075  result = (*func) (fcinfo);
1076 
1077  /* Check for null result, since caller is clearly not expecting one */
1078  if (fcinfo->isnull)
1079  elog(ERROR, "function %p returned NULL", (void *) func);
1080 
1081  return result;
1082 }
#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 1085 of file fmgr.c.

1086 {
1087  LOCAL_FCINFO(fcinfo, 2);
1088  Datum result;
1089 
1090  InitFunctionCallInfoData(*fcinfo, flinfo, 2, collation, NULL, NULL);
1091 
1092  fcinfo->args[0].value = arg1;
1093  fcinfo->args[0].isnull = false;
1094  fcinfo->args[1].value = arg2;
1095  fcinfo->args[1].isnull = false;
1096 
1097  result = (*func) (fcinfo);
1098 
1099  /* Check for null result, since caller is clearly not expecting one */
1100  if (fcinfo->isnull)
1101  elog(ERROR, "function %p returned NULL", (void *) func);
1102 
1103  return result;
1104 }

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 2145 of file fmgr.c.

2146 {
2147  HeapTuple procTup;
2148  HeapTuple langTup;
2149  Form_pg_proc procStruct;
2150  Form_pg_language langStruct;
2151  AclResult aclresult;
2152 
2153  /*
2154  * Get the function's pg_proc entry. Throw a user-facing error for bad
2155  * OID, because validators can be called with user-specified OIDs.
2156  */
2157  procTup = SearchSysCache1(PROCOID, ObjectIdGetDatum(functionOid));
2158  if (!HeapTupleIsValid(procTup))
2159  ereport(ERROR,
2160  (errcode(ERRCODE_UNDEFINED_FUNCTION),
2161  errmsg("function with OID %u does not exist", functionOid)));
2162  procStruct = (Form_pg_proc) GETSTRUCT(procTup);
2163 
2164  /*
2165  * Fetch pg_language entry to know if this is the correct validation
2166  * function for that pg_proc entry.
2167  */
2168  langTup = SearchSysCache1(LANGOID, ObjectIdGetDatum(procStruct->prolang));
2169  if (!HeapTupleIsValid(langTup))
2170  elog(ERROR, "cache lookup failed for language %u", procStruct->prolang);
2171  langStruct = (Form_pg_language) GETSTRUCT(langTup);
2172 
2173  if (langStruct->lanvalidator != validatorOid)
2174  ereport(ERROR,
2175  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
2176  errmsg("language validation function %u called for language %u instead of %u",
2177  validatorOid, procStruct->prolang,
2178  langStruct->lanvalidator)));
2179 
2180  /* first validate that we have permissions to use the language */
2181  aclresult = object_aclcheck(LanguageRelationId, procStruct->prolang, GetUserId(),
2182  ACL_USAGE);
2183  if (aclresult != ACLCHECK_OK)
2184  aclcheck_error(aclresult, OBJECT_LANGUAGE,
2185  NameStr(langStruct->lanname));
2186 
2187  /*
2188  * Check whether we are allowed to execute the function itself. If we can
2189  * execute it, there should be no possible side-effect of
2190  * compiling/validation that execution can't have.
2191  */
2192  aclresult = object_aclcheck(ProcedureRelationId, functionOid, GetUserId(), ACL_EXECUTE);
2193  if (aclresult != ACLCHECK_OK)
2194  aclcheck_error(aclresult, OBJECT_FUNCTION, NameStr(procStruct->proname));
2195 
2196  ReleaseSysCache(procTup);
2197  ReleaseSysCache(langTup);
2198 
2199  return true;
2200 }
AclResult
Definition: acl.h:182
@ ACLCHECK_OK
Definition: acl.h:183
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
Definition: aclchk.c:2622
AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode)
Definition: aclchk.c:3810
#define NameStr(name)
Definition: c.h:725
int errcode(int sqlerrcode)
Definition: elog.c:853
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define ereport(elevel,...)
Definition: elog.h:149
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
#define GETSTRUCT(TUP)
Definition: htup_details.h:653
Oid GetUserId(void)
Definition: miscinit.c:524
#define ACL_USAGE
Definition: parsenodes.h:84
@ OBJECT_LANGUAGE
Definition: parsenodes.h:2289
@ OBJECT_FUNCTION
Definition: parsenodes.h:2287
#define ACL_EXECUTE
Definition: parsenodes.h:83
FormData_pg_language * Form_pg_language
Definition: pg_language.h:65
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:136
static Datum ObjectIdGetDatum(Oid X)
Definition: postgres.h:252
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:269
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:221

References ACL_EXECUTE, ACL_USAGE, aclcheck_error(), ACLCHECK_OK, elog, ereport, errcode(), errmsg(), ERROR, GETSTRUCT, GetUserId(), HeapTupleIsValid, NameStr, object_aclcheck(), OBJECT_FUNCTION, OBJECT_LANGUAGE, ObjectIdGetDatum(), 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 792 of file fmgr.c.

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

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 812 of file fmgr.c.

813 {
814  LOCAL_FCINFO(fcinfo, 2);
815  Datum result;
816 
817  InitFunctionCallInfoData(*fcinfo, NULL, 2, collation, NULL, NULL);
818 
819  fcinfo->args[0].value = arg1;
820  fcinfo->args[0].isnull = false;
821  fcinfo->args[1].value = arg2;
822  fcinfo->args[1].isnull = false;
823 
824  result = (*func) (fcinfo);
825 
826  /* Check for null result, since caller is clearly not expecting one */
827  if (fcinfo->isnull)
828  elog(ERROR, "function %p returned NULL", (void *) func);
829 
830  return result;
831 }

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 834 of file fmgr.c.

836 {
837  LOCAL_FCINFO(fcinfo, 3);
838  Datum result;
839 
840  InitFunctionCallInfoData(*fcinfo, NULL, 3, collation, NULL, NULL);
841 
842  fcinfo->args[0].value = arg1;
843  fcinfo->args[0].isnull = false;
844  fcinfo->args[1].value = arg2;
845  fcinfo->args[1].isnull = false;
846  fcinfo->args[2].value = arg3;
847  fcinfo->args[2].isnull = false;
848 
849  result = (*func) (fcinfo);
850 
851  /* Check for null result, since caller is clearly not expecting one */
852  if (fcinfo->isnull)
853  elog(ERROR, "function %p returned NULL", (void *) func);
854 
855  return result;
856 }

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 859 of file fmgr.c.

861 {
862  LOCAL_FCINFO(fcinfo, 4);
863  Datum result;
864 
865  InitFunctionCallInfoData(*fcinfo, NULL, 4, collation, NULL, NULL);
866 
867  fcinfo->args[0].value = arg1;
868  fcinfo->args[0].isnull = false;
869  fcinfo->args[1].value = arg2;
870  fcinfo->args[1].isnull = false;
871  fcinfo->args[2].value = arg3;
872  fcinfo->args[2].isnull = false;
873  fcinfo->args[3].value = arg4;
874  fcinfo->args[3].isnull = false;
875 
876  result = (*func) (fcinfo);
877 
878  /* Check for null result, since caller is clearly not expecting one */
879  if (fcinfo->isnull)
880  elog(ERROR, "function %p returned NULL", (void *) func);
881 
882  return result;
883 }

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 886 of file fmgr.c.

888 {
889  LOCAL_FCINFO(fcinfo, 5);
890  Datum result;
891 
892  InitFunctionCallInfoData(*fcinfo, NULL, 5, collation, NULL, NULL);
893 
894  fcinfo->args[0].value = arg1;
895  fcinfo->args[0].isnull = false;
896  fcinfo->args[1].value = arg2;
897  fcinfo->args[1].isnull = false;
898  fcinfo->args[2].value = arg3;
899  fcinfo->args[2].isnull = false;
900  fcinfo->args[3].value = arg4;
901  fcinfo->args[3].isnull = false;
902  fcinfo->args[4].value = arg5;
903  fcinfo->args[4].isnull = false;
904 
905  result = (*func) (fcinfo);
906 
907  /* Check for null result, since caller is clearly not expecting one */
908  if (fcinfo->isnull)
909  elog(ERROR, "function %p returned NULL", (void *) func);
910 
911  return result;
912 }

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 915 of file fmgr.c.

918 {
919  LOCAL_FCINFO(fcinfo, 6);
920  Datum result;
921 
922  InitFunctionCallInfoData(*fcinfo, NULL, 6, collation, NULL, NULL);
923 
924  fcinfo->args[0].value = arg1;
925  fcinfo->args[0].isnull = false;
926  fcinfo->args[1].value = arg2;
927  fcinfo->args[1].isnull = false;
928  fcinfo->args[2].value = arg3;
929  fcinfo->args[2].isnull = false;
930  fcinfo->args[3].value = arg4;
931  fcinfo->args[3].isnull = false;
932  fcinfo->args[4].value = arg5;
933  fcinfo->args[4].isnull = false;
934  fcinfo->args[5].value = arg6;
935  fcinfo->args[5].isnull = false;
936 
937  result = (*func) (fcinfo);
938 
939  /* Check for null result, since caller is clearly not expecting one */
940  if (fcinfo->isnull)
941  elog(ERROR, "function %p returned NULL", (void *) func);
942 
943  return result;
944 }

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 947 of file fmgr.c.

950 {
951  LOCAL_FCINFO(fcinfo, 7);
952  Datum result;
953 
954  InitFunctionCallInfoData(*fcinfo, NULL, 7, collation, NULL, NULL);
955 
956  fcinfo->args[0].value = arg1;
957  fcinfo->args[0].isnull = false;
958  fcinfo->args[1].value = arg2;
959  fcinfo->args[1].isnull = false;
960  fcinfo->args[2].value = arg3;
961  fcinfo->args[2].isnull = false;
962  fcinfo->args[3].value = arg4;
963  fcinfo->args[3].isnull = false;
964  fcinfo->args[4].value = arg5;
965  fcinfo->args[4].isnull = false;
966  fcinfo->args[5].value = arg6;
967  fcinfo->args[5].isnull = false;
968  fcinfo->args[6].value = arg7;
969  fcinfo->args[6].isnull = false;
970 
971  result = (*func) (fcinfo);
972 
973  /* Check for null result, since caller is clearly not expecting one */
974  if (fcinfo->isnull)
975  elog(ERROR, "function %p returned NULL", (void *) func);
976 
977  return result;
978 }

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 981 of file fmgr.c.

984 {
985  LOCAL_FCINFO(fcinfo, 8);
986  Datum result;
987 
988  InitFunctionCallInfoData(*fcinfo, NULL, 8, collation, NULL, NULL);
989 
990  fcinfo->args[0].value = arg1;
991  fcinfo->args[0].isnull = false;
992  fcinfo->args[1].value = arg2;
993  fcinfo->args[1].isnull = false;
994  fcinfo->args[2].value = arg3;
995  fcinfo->args[2].isnull = false;
996  fcinfo->args[3].value = arg4;
997  fcinfo->args[3].isnull = false;
998  fcinfo->args[4].value = arg5;
999  fcinfo->args[4].isnull = false;
1000  fcinfo->args[5].value = arg6;
1001  fcinfo->args[5].isnull = false;
1002  fcinfo->args[6].value = arg7;
1003  fcinfo->args[6].isnull = false;
1004  fcinfo->args[7].value = arg8;
1005  fcinfo->args[7].isnull = false;
1006 
1007  result = (*func) (fcinfo);
1008 
1009  /* Check for null result, since caller is clearly not expecting one */
1010  if (fcinfo->isnull)
1011  elog(ERROR, "function %p returned NULL", (void *) func);
1012 
1013  return result;
1014 }

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 1017 of file fmgr.c.

1021 {
1022  LOCAL_FCINFO(fcinfo, 9);
1023  Datum result;
1024 
1025  InitFunctionCallInfoData(*fcinfo, NULL, 9, collation, NULL, NULL);
1026 
1027  fcinfo->args[0].value = arg1;
1028  fcinfo->args[0].isnull = false;
1029  fcinfo->args[1].value = arg2;
1030  fcinfo->args[1].isnull = false;
1031  fcinfo->args[2].value = arg3;
1032  fcinfo->args[2].isnull = false;
1033  fcinfo->args[3].value = arg4;
1034  fcinfo->args[3].isnull = false;
1035  fcinfo->args[4].value = arg5;
1036  fcinfo->args[4].isnull = false;
1037  fcinfo->args[5].value = arg6;
1038  fcinfo->args[5].isnull = false;
1039  fcinfo->args[6].value = arg7;
1040  fcinfo->args[6].isnull = false;
1041  fcinfo->args[7].value = arg8;
1042  fcinfo->args[7].isnull = false;
1043  fcinfo->args[8].value = arg9;
1044  fcinfo->args[8].isnull = false;
1045 
1046  result = (*func) (fcinfo);
1047 
1048  /* Check for null result, since caller is clearly not expecting one */
1049  if (fcinfo->isnull)
1050  elog(ERROR, "function %p returned NULL", (void *) func);
1051 
1052  return result;
1053 }

References elog, ERROR, InitFunctionCallInfoData, and LOCAL_FCINFO.

◆ DirectInputFunctionCallSafe()

bool DirectInputFunctionCallSafe ( PGFunction  func,
char *  str,
Oid  typioparam,
int32  typmod,
fmNodePtr  escontext,
Datum result 
)

Definition at line 1640 of file fmgr.c.

1644 {
1645  LOCAL_FCINFO(fcinfo, 3);
1646 
1647  if (str == NULL)
1648  {
1649  *result = (Datum) 0; /* just return null result */
1650  return true;
1651  }
1652 
1653  InitFunctionCallInfoData(*fcinfo, NULL, 3, InvalidOid, escontext, NULL);
1654 
1655  fcinfo->args[0].value = CStringGetDatum(str);
1656  fcinfo->args[0].isnull = false;
1657  fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
1658  fcinfo->args[1].isnull = false;
1659  fcinfo->args[2].value = Int32GetDatum(typmod);
1660  fcinfo->args[2].isnull = false;
1661 
1662  *result = (*func) (fcinfo);
1663 
1664  /* Result value is garbage, and could be null, if an error was reported */
1665  if (SOFT_ERROR_OCCURRED(escontext))
1666  return false;
1667 
1668  /* Otherwise, shouldn't get null result */
1669  if (fcinfo->isnull)
1670  elog(ERROR, "input function %p returned NULL", (void *) func);
1671 
1672  return true;
1673 }
const char * str
#define SOFT_ERROR_OCCURRED(escontext)
Definition: miscnodes.h:53
static Datum CStringGetDatum(const char *X)
Definition: postgres.h:350
static Datum Int32GetDatum(int32 X)
Definition: postgres.h:212
#define InvalidOid
Definition: postgres_ext.h:36

References CStringGetDatum(), elog, ERROR, InitFunctionCallInfoData, Int32GetDatum(), InvalidOid, LOCAL_FCINFO, ObjectIdGetDatum(), SOFT_ERROR_OCCURRED, and str.

Referenced by executeItemOptUnwrapTarget(), jsonb_in_scalar(), parseNumericOid(), to_regclass(), to_regcollation(), to_regnamespace(), to_regoper(), to_regoperator(), to_regproc(), to_regprocedure(), to_regrole(), and to_regtype().

◆ EstimateLibraryStateSpace()

Size EstimateLibraryStateSpace ( void  )

Definition at line 631 of file dfmgr.c.

632 {
633  DynamicFileList *file_scanner;
634  Size size = 1;
635 
636  for (file_scanner = file_list;
637  file_scanner != NULL;
638  file_scanner = file_scanner->next)
639  size = add_size(size, strlen(file_scanner->filename) + 1);
640 
641  return size;
642 }
size_t Size
Definition: c.h:584
static DynamicFileList * file_list
Definition: dfmgr.c:57
Size add_size(Size s1, Size s2)
Definition: shmem.c:488
static pg_noinline void Size size
Definition: slab.c:607
Definition: dfmgr.c:46
struct df_files * next
Definition: dfmgr.c:47
char filename[FLEXIBLE_ARRAY_MEMBER]
Definition: dfmgr.c:54

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

Referenced by InitializeParallelDSM().

◆ fetch_finfo_record()

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

Definition at line 455 of file fmgr.c.

456 {
457  char *infofuncname;
458  PGFInfoFunction infofunc;
459  const Pg_finfo_record *inforec;
460 
461  infofuncname = psprintf("pg_finfo_%s", funcname);
462 
463  /* Try to look up the info function */
464  infofunc = (PGFInfoFunction) lookup_external_function(filehandle,
465  infofuncname);
466  if (infofunc == NULL)
467  {
468  ereport(ERROR,
469  (errcode(ERRCODE_UNDEFINED_FUNCTION),
470  errmsg("could not find function information for function \"%s\"",
471  funcname),
472  errhint("SQL-callable functions need an accompanying PG_FUNCTION_INFO_V1(funcname).")));
473  return NULL; /* silence compiler */
474  }
475 
476  /* Found, so call it */
477  inforec = (*infofunc) ();
478 
479  /* Validate result as best we can */
480  if (inforec == NULL)
481  elog(ERROR, "null result from info function \"%s\"", infofuncname);
482  switch (inforec->api_version)
483  {
484  case 1:
485  /* OK, no additional fields to validate */
486  break;
487  default:
488  ereport(ERROR,
489  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
490  errmsg("unrecognized API version %d reported by info function \"%s\"",
491  inforec->api_version, infofuncname)));
492  break;
493  }
494 
495  pfree(infofuncname);
496  return inforec;
497 }
void * lookup_external_function(void *filehandle, const char *funcname)
Definition: dfmgr.c:156
int errhint(const char *fmt,...)
Definition: elog.c:1317
const Pg_finfo_record *(* PGFInfoFunction)(void)
Definition: fmgr.h:401
void pfree(void *pointer)
Definition: mcxt.c:1521
char * psprintf(const char *fmt,...)
Definition: psprintf.c:43
int api_version
Definition: fmgr.h:396

References Pg_finfo_record::api_version, elog, ereport, errcode(), errhint(), errmsg(), ERROR, funcname, 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 593 of file dfmgr.c.

594 {
595  static HTAB *rendezvousHash = NULL;
596 
597  rendezvousHashEntry *hentry;
598  bool found;
599 
600  /* Create a hashtable if we haven't already done so in this process */
601  if (rendezvousHash == NULL)
602  {
603  HASHCTL ctl;
604 
605  ctl.keysize = NAMEDATALEN;
606  ctl.entrysize = sizeof(rendezvousHashEntry);
607  rendezvousHash = hash_create("Rendezvous variable hash",
608  16,
609  &ctl,
611  }
612 
613  /* Find or create the hashtable entry for this varName */
614  hentry = (rendezvousHashEntry *) hash_search(rendezvousHash,
615  varName,
616  HASH_ENTER,
617  &found);
618 
619  /* Initialize to NULL if first time */
620  if (!found)
621  hentry->varValue = NULL;
622 
623  return &hentry->varValue;
624 }
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
Definition: dynahash.c:955
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
Definition: dynahash.c:352
#define HASH_STRINGS
Definition: hsearch.h:96
@ HASH_ENTER
Definition: hsearch.h:114
#define HASH_ELEM
Definition: hsearch.h:95
#define NAMEDATALEN
tree ctl
Definition: radixtree.h:1853
Definition: dynahash.c:220
void * varValue
Definition: dfmgr.c:38

References ctl, hash_create(), HASH_ELEM, HASH_ENTER, hash_search(), HASH_STRINGS, NAMEDATALEN, and rendezvousHashEntry::varValue.

Referenced by _PG_init().

◆ fmgr_info()

void fmgr_info ( Oid  functionId,
FmgrInfo finfo 
)

Definition at line 127 of file fmgr.c.

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

References CurrentMemoryContext, and fmgr_info_cxt_security().

Referenced by _bt_compare_array_scankey_args(), _bt_find_extreme_element(), _sv_to_datum_finfo(), attribute_statistics_update(), BeginCopyFrom(), brin_minmax_multi_summary_out(), brin_page_items(), build_pertrans_for_aggref(), call_pltcl_start_proc(), CompareOpclassOptions(), compute_distinct_stats(), create_foreign_modify(), DoCopyTo(), eqjoinsel_inner(), eqjoinsel_semi(), EventTriggerInvoke(), ExecBuildGroupingEqual(), ExecBuildHash32Expr(), ExecBuildParamSetEqual(), ExecCallTriggerFunc(), ExecEvalHashedScalarArrayOp(), ExecInitAgg(), ExecInitExprRec(), ExecInitFunc(), ExecInitHashJoin(), ExecInitJsonExpr(), 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(), serialize_prepare_info(), text_format(), TupleDescGetAttInMetadata(), and var_eq_const().

◆ fmgr_info_copy()

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

Definition at line 580 of file fmgr.c.

582 {
583  memcpy(dstinfo, srcinfo, sizeof(FmgrInfo));
584  dstinfo->fn_mcxt = destcxt;
585  dstinfo->fn_extra = NULL;
586 }
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 595 of file fmgr.c.

596 {
597  const FmgrBuiltin *fbp = fmgr_lookupByName(proname);
598 
599  if (fbp == NULL)
600  return InvalidOid;
601  return fbp->foid;
602 }
static const FmgrBuiltin * fmgr_lookupByName(const char *name)
Definition: fmgr.c:101
NameData proname
Definition: pg_proc.h:35
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 281 of file fmgr.c.

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

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

Referenced by llvm_function_reference().

◆ FunctionCall0Coll()

Datum FunctionCall0Coll ( FmgrInfo flinfo,
Oid  collation 
)

Definition at line 1112 of file fmgr.c.

1113 {
1114  LOCAL_FCINFO(fcinfo, 0);
1115  Datum result;
1116 
1117  InitFunctionCallInfoData(*fcinfo, flinfo, 0, collation, NULL, NULL);
1118 
1119  result = FunctionCallInvoke(fcinfo);
1120 
1121  /* Check for null result, since caller is clearly not expecting one */
1122  if (fcinfo->isnull)
1123  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1124 
1125  return result;
1126 }
#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 1129 of file fmgr.c.

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

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(), 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 1149 of file fmgr.c.

1150 {
1151  LOCAL_FCINFO(fcinfo, 2);
1152  Datum result;
1153 
1154  InitFunctionCallInfoData(*fcinfo, flinfo, 2, collation, NULL, NULL);
1155 
1156  fcinfo->args[0].value = arg1;
1157  fcinfo->args[0].isnull = false;
1158  fcinfo->args[1].value = arg2;
1159  fcinfo->args[1].isnull = false;
1160 
1161  result = FunctionCallInvoke(fcinfo);
1162 
1163  /* Check for null result, since caller is clearly not expecting one */
1164  if (fcinfo->isnull)
1165  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1166 
1167  return result;
1168 }

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

Referenced by _bt_check_compare(), _bt_check_rowcompare(), _bt_compare(), _bt_compare_array_elements(), _bt_compare_array_skey(), _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(), CompareOpclassOptions(), compute_distinct_stats(), compute_partition_hash_value(), compute_range_stats(), create_range_bounds(), doPickSplit(), element_compare(), ExecEvalPreOrderedDistinctSingle(), execTuplesUnequal(), genericPickSplit(), get_distance(), get_partition_for_tuple(), get_position(), get_stats_slot_range(), ginCompareEntries(), gistMakeUnionItVec(), gistMakeUnionKey(), gistUserPicksplit(), has_matching_range(), hash_multirange_extended(), hash_range_extended(), HeapKeyTest(), 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_CompareWithCast(), 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 1171 of file fmgr.c.

1173 {
1174  LOCAL_FCINFO(fcinfo, 3);
1175  Datum result;
1176 
1177  InitFunctionCallInfoData(*fcinfo, flinfo, 3, collation, NULL, NULL);
1178 
1179  fcinfo->args[0].value = arg1;
1180  fcinfo->args[0].isnull = false;
1181  fcinfo->args[1].value = arg2;
1182  fcinfo->args[1].isnull = false;
1183  fcinfo->args[2].value = arg3;
1184  fcinfo->args[2].isnull = false;
1185 
1186  result = FunctionCallInvoke(fcinfo);
1187 
1188  /* Check for null result, since caller is clearly not expecting one */
1189  if (fcinfo->isnull)
1190  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1191 
1192  return result;
1193 }

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 1196 of file fmgr.c.

1198 {
1199  LOCAL_FCINFO(fcinfo, 4);
1200  Datum result;
1201 
1202  InitFunctionCallInfoData(*fcinfo, flinfo, 4, collation, NULL, NULL);
1203 
1204  fcinfo->args[0].value = arg1;
1205  fcinfo->args[0].isnull = false;
1206  fcinfo->args[1].value = arg2;
1207  fcinfo->args[1].isnull = false;
1208  fcinfo->args[2].value = arg3;
1209  fcinfo->args[2].isnull = false;
1210  fcinfo->args[3].value = arg4;
1211  fcinfo->args[3].isnull = false;
1212 
1213  result = FunctionCallInvoke(fcinfo);
1214 
1215  /* Check for null result, since caller is clearly not expecting one */
1216  if (fcinfo->isnull)
1217  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1218 
1219  return result;
1220 }

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 1223 of file fmgr.c.

1225 {
1226  LOCAL_FCINFO(fcinfo, 5);
1227  Datum result;
1228 
1229  InitFunctionCallInfoData(*fcinfo, flinfo, 5, collation, NULL, NULL);
1230 
1231  fcinfo->args[0].value = arg1;
1232  fcinfo->args[0].isnull = false;
1233  fcinfo->args[1].value = arg2;
1234  fcinfo->args[1].isnull = false;
1235  fcinfo->args[2].value = arg3;
1236  fcinfo->args[2].isnull = false;
1237  fcinfo->args[3].value = arg4;
1238  fcinfo->args[3].isnull = false;
1239  fcinfo->args[4].value = arg5;
1240  fcinfo->args[4].isnull = false;
1241 
1242  result = FunctionCallInvoke(fcinfo);
1243 
1244  /* Check for null result, since caller is clearly not expecting one */
1245  if (fcinfo->isnull)
1246  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1247 
1248  return result;
1249 }

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 1252 of file fmgr.c.

1255 {
1256  LOCAL_FCINFO(fcinfo, 6);
1257  Datum result;
1258 
1259  InitFunctionCallInfoData(*fcinfo, flinfo, 6, collation, NULL, NULL);
1260 
1261  fcinfo->args[0].value = arg1;
1262  fcinfo->args[0].isnull = false;
1263  fcinfo->args[1].value = arg2;
1264  fcinfo->args[1].isnull = false;
1265  fcinfo->args[2].value = arg3;
1266  fcinfo->args[2].isnull = false;
1267  fcinfo->args[3].value = arg4;
1268  fcinfo->args[3].isnull = false;
1269  fcinfo->args[4].value = arg5;
1270  fcinfo->args[4].isnull = false;
1271  fcinfo->args[5].value = arg6;
1272  fcinfo->args[5].isnull = false;
1273 
1274  result = FunctionCallInvoke(fcinfo);
1275 
1276  /* Check for null result, since caller is clearly not expecting one */
1277  if (fcinfo->isnull)
1278  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1279 
1280  return result;
1281 }

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 1284 of file fmgr.c.

1287 {
1288  LOCAL_FCINFO(fcinfo, 7);
1289  Datum result;
1290 
1291  InitFunctionCallInfoData(*fcinfo, flinfo, 7, collation, NULL, NULL);
1292 
1293  fcinfo->args[0].value = arg1;
1294  fcinfo->args[0].isnull = false;
1295  fcinfo->args[1].value = arg2;
1296  fcinfo->args[1].isnull = false;
1297  fcinfo->args[2].value = arg3;
1298  fcinfo->args[2].isnull = false;
1299  fcinfo->args[3].value = arg4;
1300  fcinfo->args[3].isnull = false;
1301  fcinfo->args[4].value = arg5;
1302  fcinfo->args[4].isnull = false;
1303  fcinfo->args[5].value = arg6;
1304  fcinfo->args[5].isnull = false;
1305  fcinfo->args[6].value = arg7;
1306  fcinfo->args[6].isnull = false;
1307 
1308  result = FunctionCallInvoke(fcinfo);
1309 
1310  /* Check for null result, since caller is clearly not expecting one */
1311  if (fcinfo->isnull)
1312  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1313 
1314  return result;
1315 }

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 1318 of file fmgr.c.

1321 {
1322  LOCAL_FCINFO(fcinfo, 8);
1323  Datum result;
1324 
1325  InitFunctionCallInfoData(*fcinfo, flinfo, 8, collation, NULL, NULL);
1326 
1327  fcinfo->args[0].value = arg1;
1328  fcinfo->args[0].isnull = false;
1329  fcinfo->args[1].value = arg2;
1330  fcinfo->args[1].isnull = false;
1331  fcinfo->args[2].value = arg3;
1332  fcinfo->args[2].isnull = false;
1333  fcinfo->args[3].value = arg4;
1334  fcinfo->args[3].isnull = false;
1335  fcinfo->args[4].value = arg5;
1336  fcinfo->args[4].isnull = false;
1337  fcinfo->args[5].value = arg6;
1338  fcinfo->args[5].isnull = false;
1339  fcinfo->args[6].value = arg7;
1340  fcinfo->args[6].isnull = false;
1341  fcinfo->args[7].value = arg8;
1342  fcinfo->args[7].isnull = false;
1343 
1344  result = FunctionCallInvoke(fcinfo);
1345 
1346  /* Check for null result, since caller is clearly not expecting one */
1347  if (fcinfo->isnull)
1348  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1349 
1350  return result;
1351 }

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 1354 of file fmgr.c.

1358 {
1359  LOCAL_FCINFO(fcinfo, 9);
1360  Datum result;
1361 
1362  InitFunctionCallInfoData(*fcinfo, flinfo, 9, collation, NULL, NULL);
1363 
1364  fcinfo->args[0].value = arg1;
1365  fcinfo->args[0].isnull = false;
1366  fcinfo->args[1].value = arg2;
1367  fcinfo->args[1].isnull = false;
1368  fcinfo->args[2].value = arg3;
1369  fcinfo->args[2].isnull = false;
1370  fcinfo->args[3].value = arg4;
1371  fcinfo->args[3].isnull = false;
1372  fcinfo->args[4].value = arg5;
1373  fcinfo->args[4].isnull = false;
1374  fcinfo->args[5].value = arg6;
1375  fcinfo->args[5].isnull = false;
1376  fcinfo->args[6].value = arg7;
1377  fcinfo->args[6].isnull = false;
1378  fcinfo->args[7].value = arg8;
1379  fcinfo->args[7].isnull = false;
1380  fcinfo->args[8].value = arg9;
1381  fcinfo->args[8].isnull = false;
1382 
1383  result = FunctionCallInvoke(fcinfo);
1384 
1385  /* Check for null result, since caller is clearly not expecting one */
1386  if (fcinfo->isnull)
1387  elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
1388 
1389  return result;
1390 }

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 1975 of file fmgr.c.

1976 {
1977  /*
1978  * can't return anything useful if we have no FmgrInfo or if its fn_expr
1979  * node has not been initialized
1980  */
1981  if (!flinfo || !flinfo->fn_expr)
1982  return false;
1983 
1984  return get_call_expr_arg_stable(flinfo->fn_expr, argnum);
1985 }
bool get_call_expr_arg_stable(Node *expr, int argnum)
Definition: fmgr.c:1994
fmNodePtr fn_expr
Definition: fmgr.h:66

References FmgrInfo::fn_expr, and get_call_expr_arg_stable().

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

◆ get_fn_expr_argtype()

◆ get_fn_expr_rettype()

Oid get_fn_expr_rettype ( FmgrInfo flinfo)

Definition at line 1888 of file fmgr.c.

1889 {
1890  Node *expr;
1891 
1892  /*
1893  * can't return anything useful if we have no FmgrInfo or if its fn_expr
1894  * node has not been initialized
1895  */
1896  if (!flinfo || !flinfo->fn_expr)
1897  return InvalidOid;
1898 
1899  expr = flinfo->fn_expr;
1900 
1901  return exprType(expr);
1902 }
Oid exprType(const Node *expr)
Definition: nodeFuncs.c:42
Definition: nodes.h:129

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 2044 of file fmgr.c.

2045 {
2046  Node *expr;
2047 
2048  /*
2049  * can't return anything useful if we have no FmgrInfo or if its fn_expr
2050  * node has not been initialized
2051  */
2052  if (!flinfo || !flinfo->fn_expr)
2053  return false;
2054 
2055  expr = flinfo->fn_expr;
2056 
2057  if (IsA(expr, FuncExpr))
2058  return ((FuncExpr *) expr)->funcvariadic;
2059  else
2060  return false;
2061 }

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 2097 of file fmgr.c.

2098 {
2099  if (flinfo && flinfo->fn_expr && IsA(flinfo->fn_expr, Const))
2100  {
2101  Const *expr = (Const *) flinfo->fn_expr;
2102 
2103  if (expr->consttype == BYTEAOID)
2104  return expr->constisnull ? NULL : DatumGetByteaP(expr->constvalue);
2105  }
2106 
2107  ereport(ERROR,
2108  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
2109  errmsg("operator class options info is absent in function call context")));
2110 
2111  return NULL;
2112 }
#define DatumGetByteaP(X)
Definition: fmgr.h:331
Oid consttype
Definition: primnodes.h:312

References Const::consttype, 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 2081 of file fmgr.c.

2082 {
2083  if (flinfo && flinfo->fn_expr && IsA(flinfo->fn_expr, Const))
2084  {
2085  Const *expr = (Const *) flinfo->fn_expr;
2086 
2087  if (expr->consttype == BYTEAOID)
2088  return !expr->constisnull;
2089  }
2090  return false;
2091 }

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

◆ InputFunctionCall()

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

Definition at line 1530 of file fmgr.c.

1531 {
1532  LOCAL_FCINFO(fcinfo, 3);
1533  Datum result;
1534 
1535  if (str == NULL && flinfo->fn_strict)
1536  return (Datum) 0; /* just return null result */
1537 
1538  InitFunctionCallInfoData(*fcinfo, flinfo, 3, InvalidOid, NULL, NULL);
1539 
1540  fcinfo->args[0].value = CStringGetDatum(str);
1541  fcinfo->args[0].isnull = false;
1542  fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
1543  fcinfo->args[1].isnull = false;
1544  fcinfo->args[2].value = Int32GetDatum(typmod);
1545  fcinfo->args[2].isnull = false;
1546 
1547  result = FunctionCallInvoke(fcinfo);
1548 
1549  /* Should get null result if and only if str is NULL */
1550  if (str == NULL)
1551  {
1552  if (!fcinfo->isnull)
1553  elog(ERROR, "input function %u returned non-NULL",
1554  flinfo->fn_oid);
1555  }
1556  else
1557  {
1558  if (fcinfo->isnull)
1559  elog(ERROR, "input function %u returned NULL",
1560  flinfo->fn_oid);
1561  }
1562 
1563  return result;
1564 }
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 str.

Referenced by BuildTupleFromCStrings(), hstore_populate_record(), make_tuple_from_result_row(), OidInputFunctionCall(), plperl_sv_to_datum(), plsample_func_handler(), pltcl_func_handler(), pltcl_returnnext(), pltcl_SPI_execute_plan(), PLyObject_ToScalar(), PLyUnicode_ToComposite(), and XmlTableGetValue().

◆ InputFunctionCallSafe()

bool InputFunctionCallSafe ( FmgrInfo flinfo,
char *  str,
Oid  typioparam,
int32  typmod,
fmNodePtr  escontext,
Datum result 
)

Definition at line 1585 of file fmgr.c.

1589 {
1590  LOCAL_FCINFO(fcinfo, 3);
1591 
1592  if (str == NULL && flinfo->fn_strict)
1593  {
1594  *result = (Datum) 0; /* just return null result */
1595  return true;
1596  }
1597 
1598  InitFunctionCallInfoData(*fcinfo, flinfo, 3, InvalidOid, escontext, NULL);
1599 
1600  fcinfo->args[0].value = CStringGetDatum(str);
1601  fcinfo->args[0].isnull = false;
1602  fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
1603  fcinfo->args[1].isnull = false;
1604  fcinfo->args[2].value = Int32GetDatum(typmod);
1605  fcinfo->args[2].isnull = false;
1606 
1607  *result = FunctionCallInvoke(fcinfo);
1608 
1609  /* Result value is garbage, and could be null, if an error was reported */
1610  if (SOFT_ERROR_OCCURRED(escontext))
1611  return false;
1612 
1613  /* Otherwise, should get null result if and only if str is NULL */
1614  if (str == NULL)
1615  {
1616  if (!fcinfo->isnull)
1617  elog(ERROR, "input function %u returned non-NULL",
1618  flinfo->fn_oid);
1619  }
1620  else
1621  {
1622  if (fcinfo->isnull)
1623  elog(ERROR, "input function %u returned NULL",
1624  flinfo->fn_oid);
1625  }
1626 
1627  return true;
1628 }

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

Referenced by domain_in(), multirange_in(), NextCopyFrom(), pg_input_is_valid_common(), populate_scalar(), range_in(), ReadArrayStr(), and record_in().

◆ load_external_function()

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

Definition at line 95 of file dfmgr.c.

97 {
98  char *fullname;
99  void *lib_handle;
100  void *retval;
101 
102  /* Expand the possibly-abbreviated filename to an exact path name */
104 
105  /* Load the shared library, unless we already did */
106  lib_handle = internal_load_library(fullname);
107 
108  /* Return handle if caller wants it */
109  if (filehandle)
110  *filehandle = lib_handle;
111 
112  /* Look up the function within the library. */
113  retval = dlsym(lib_handle, funcname);
114 
115  if (retval == NULL && signalNotFound)
116  ereport(ERROR,
117  (errcode(ERRCODE_UNDEFINED_FUNCTION),
118  errmsg("could not find function \"%s\" in file \"%s\"",
119  funcname, fullname)));
120 
121  pfree(fullname);
122  return retval;
123 }
static char * expand_dynamic_library_name(const char *name)
Definition: dfmgr.c:408
static void * internal_load_library(const char *libname)
Definition: dfmgr.c:174
static char * filename
Definition: pg_dumpall.c:119
void * dlsym(void *handle, const char *symbol)
Definition: win32dlopen.c:61

References dlsym(), ereport, errcode(), errmsg(), ERROR, expand_dynamic_library_name(), filename, funcname, 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 134 of file dfmgr.c.

135 {
136  char *fullname;
137 
138  /* Apply security restriction if requested */
139  if (restricted)
141 
142  /* Expand the possibly-abbreviated filename to an exact path name */
144 
145  /* Load the shared library */
146  (void) internal_load_library(fullname);
147 
148  pfree(fullname);
149 }
static void check_restricted_library_name(const char *name)
Definition: dfmgr.c:463

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

Referenced by AlterSubscription(), AlterSubscription_refresh(), CreateSubscription(), DropSubscription(), load_libraries(), pg_sync_replication_slots(), ReplicationSlotDropAtPubNode(), ReplSlotSyncWorkerMain(), SetupApplyOrSyncWorker(), standard_ProcessUtility(), and WalReceiverMain().

◆ lookup_external_function()

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

Definition at line 156 of file dfmgr.c.

157 {
158  return dlsym(filehandle, funcname);
159 }

References dlsym(), and funcname.

Referenced by fetch_finfo_record().

◆ OidFunctionCall0Coll()

Datum OidFunctionCall0Coll ( Oid  functionId,
Oid  collation 
)

Definition at line 1401 of file fmgr.c.

1402 {
1403  FmgrInfo flinfo;
1404 
1405  fmgr_info(functionId, &flinfo);
1406 
1407  return FunctionCall0Coll(&flinfo, collation);
1408 }
void fmgr_info(Oid functionId, FmgrInfo *finfo)
Definition: fmgr.c:127
Datum FunctionCall0Coll(FmgrInfo *flinfo, Oid collation)
Definition: fmgr.c:1112

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

◆ OidFunctionCall1Coll()

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

Definition at line 1411 of file fmgr.c.

1412 {
1413  FmgrInfo flinfo;
1414 
1415  fmgr_info(functionId, &flinfo);
1416 
1417  return FunctionCall1Coll(&flinfo, collation, arg1);
1418 }
Datum FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1)
Definition: fmgr.c:1129

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

Referenced by _bt_allequalimage(), _hash_datum2hashkey_type(), and GistTranslateStratnum().

◆ OidFunctionCall2Coll()

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

Definition at line 1421 of file fmgr.c.

1422 {
1423  FmgrInfo flinfo;
1424 
1425  fmgr_info(functionId, &flinfo);
1426 
1427  return FunctionCall2Coll(&flinfo, collation, arg1, arg2);
1428 }
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
Definition: fmgr.c:1149

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 1431 of file fmgr.c.

1433 {
1434  FmgrInfo flinfo;
1435 
1436  fmgr_info(functionId, &flinfo);
1437 
1438  return FunctionCall3Coll(&flinfo, collation, arg1, arg2, arg3);
1439 }
Datum FunctionCall3Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3)
Definition: fmgr.c:1171

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 1442 of file fmgr.c.

1444 {
1445  FmgrInfo flinfo;
1446 
1447  fmgr_info(functionId, &flinfo);
1448 
1449  return FunctionCall4Coll(&flinfo, collation, arg1, arg2, arg3, arg4);
1450 }
Datum FunctionCall4Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4)
Definition: fmgr.c:1196

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 1453 of file fmgr.c.

1455 {
1456  FmgrInfo flinfo;
1457 
1458  fmgr_info(functionId, &flinfo);
1459 
1460  return FunctionCall5Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5);
1461 }
Datum FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
Definition: fmgr.c:1223

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 1464 of file fmgr.c.

1467 {
1468  FmgrInfo flinfo;
1469 
1470  fmgr_info(functionId, &flinfo);
1471 
1472  return FunctionCall6Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1473  arg6);
1474 }
Datum FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6)
Definition: fmgr.c:1252

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 1477 of file fmgr.c.

1480 {
1481  FmgrInfo flinfo;
1482 
1483  fmgr_info(functionId, &flinfo);
1484 
1485  return FunctionCall7Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1486  arg6, arg7);
1487 }
Datum FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
Definition: fmgr.c:1284

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 1490 of file fmgr.c.

1493 {
1494  FmgrInfo flinfo;
1495 
1496  fmgr_info(functionId, &flinfo);
1497 
1498  return FunctionCall8Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1499  arg6, arg7, arg8);
1500 }
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:1318

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 1503 of file fmgr.c.

1507 {
1508  FmgrInfo flinfo;
1509 
1510  fmgr_info(functionId, &flinfo);
1511 
1512  return FunctionCall9Coll(&flinfo, collation, arg1, arg2, arg3, arg4, arg5,
1513  arg6, arg7, arg8, arg9);
1514 }
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:1354

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

◆ OidInputFunctionCall()

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

Definition at line 1754 of file fmgr.c.

1755 {
1756  FmgrInfo flinfo;
1757 
1758  fmgr_info(functionId, &flinfo);
1759  return InputFunctionCall(&flinfo, str, typioparam, typmod);
1760 }
Datum InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod)
Definition: fmgr.c:1530

References fmgr_security_definer_cache::flinfo, fmgr_info(), InputFunctionCall(), and 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 1772 of file fmgr.c.

1774 {
1775  FmgrInfo flinfo;
1776 
1777  fmgr_info(functionId, &flinfo);
1778  return ReceiveFunctionCall(&flinfo, buf, typioparam, typmod);
1779 }
Datum ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf, Oid typioparam, int32 typmod)
Definition: fmgr.c:1697
static char * buf
Definition: pg_test_fsync.c:72

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 1782 of file fmgr.c.

1783 {
1784  FmgrInfo flinfo;
1785 
1786  fmgr_info(functionId, &flinfo);
1787  return SendFunctionCall(&flinfo, val);
1788 }
bytea * SendFunctionCall(FmgrInfo *flinfo, Datum val)
Definition: fmgr.c:1744

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 1832 of file fmgr.c.

1833 {
1834  if (VARATT_IS_EXTENDED(datum))
1835  return detoast_attr(datum);
1836  else
1837  return datum;
1838 }
struct varlena * detoast_attr(struct varlena *attr)
Definition: detoast.c:116
#define VARATT_IS_EXTENDED(PTR)
Definition: varatt.h:303

References detoast_attr(), and VARATT_IS_EXTENDED.

◆ pg_detoast_datum_copy()

struct varlena* pg_detoast_datum_copy ( struct varlena datum)

Definition at line 1841 of file fmgr.c.

1842 {
1843  if (VARATT_IS_EXTENDED(datum))
1844  return detoast_attr(datum);
1845  else
1846  {
1847  /* Make a modifiable copy of the varlena object */
1848  Size len = VARSIZE(datum);
1849  struct varlena *result = (struct varlena *) palloc(len);
1850 
1851  memcpy(result, datum, len);
1852  return result;
1853  }
1854 }
void * palloc(Size size)
Definition: mcxt.c:1317
const void size_t len
#define VARSIZE(PTR)
Definition: varatt.h:279

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

Referenced by tuple_data_split_internal().

◆ pg_detoast_datum_packed()

struct varlena* pg_detoast_datum_packed ( struct varlena datum)

Definition at line 1864 of file fmgr.c.

1865 {
1866  if (VARATT_IS_COMPRESSED(datum) || VARATT_IS_EXTERNAL(datum))
1867  return detoast_attr(datum);
1868  else
1869  return datum;
1870 }
#define VARATT_IS_COMPRESSED(PTR)
Definition: varatt.h:288
#define VARATT_IS_EXTERNAL(PTR)
Definition: varatt.h:289

References detoast_attr(), VARATT_IS_COMPRESSED, and VARATT_IS_EXTERNAL.

Referenced by escape_json_text(), makeJsonLexContext(), text_to_cstring(), text_to_cstring_buffer(), and transform_jsonb_string_values().

◆ pg_detoast_datum_slice()

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

Definition at line 1857 of file fmgr.c.

1858 {
1859  /* Only get the specified portion from the toast rel */
1860  return detoast_attr_slice(datum, first, count);
1861 }
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 1697 of file fmgr.c.

1699 {
1700  LOCAL_FCINFO(fcinfo, 3);
1701  Datum result;
1702 
1703  if (buf == NULL && flinfo->fn_strict)
1704  return (Datum) 0; /* just return null result */
1705 
1706  InitFunctionCallInfoData(*fcinfo, flinfo, 3, InvalidOid, NULL, NULL);
1707 
1708  fcinfo->args[0].value = PointerGetDatum(buf);
1709  fcinfo->args[0].isnull = false;
1710  fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
1711  fcinfo->args[1].isnull = false;
1712  fcinfo->args[2].value = Int32GetDatum(typmod);
1713  fcinfo->args[2].isnull = false;
1714 
1715  result = FunctionCallInvoke(fcinfo);
1716 
1717  /* Should get null result if and only if buf is NULL */
1718  if (buf == NULL)
1719  {
1720  if (!fcinfo->isnull)
1721  elog(ERROR, "receive function %u returned non-NULL",
1722  flinfo->fn_oid);
1723  }
1724  else
1725  {
1726  if (fcinfo->isnull)
1727  elog(ERROR, "receive function %u returned NULL",
1728  flinfo->fn_oid);
1729  }
1730 
1731  return result;
1732 }
static Datum PointerGetDatum(const void *X)
Definition: postgres.h:322

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 array_agg_deserialize(), CopyReadBinaryAttribute(), domain_recv(), multirange_recv(), OidReceiveFunctionCall(), range_recv(), ReadArrayBinary(), and record_recv().

◆ RestoreLibraryState()

void RestoreLibraryState ( char *  start_address)

Definition at line 670 of file dfmgr.c.

671 {
672  while (*start_address != '\0')
673  {
674  internal_load_library(start_address);
675  start_address += strlen(start_address) + 1;
676  }
677 }

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 648 of file dfmgr.c.

649 {
650  DynamicFileList *file_scanner;
651 
652  for (file_scanner = file_list;
653  file_scanner != NULL;
654  file_scanner = file_scanner->next)
655  {
656  Size len;
657 
658  len = strlcpy(start_address, file_scanner->filename, maxsize) + 1;
659  Assert(len < maxsize);
660  maxsize -= len;
661  start_address += len;
662  }
663  start_address[0] = '\0';
664 }
#define Assert(condition)
Definition: c.h:837
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 2070 of file fmgr.c.

2071 {
2072  flinfo->fn_expr = (Node *) makeConst(BYTEAOID, -1, InvalidOid, -1,
2074  options == NULL, false);
2075 }
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
Definition: makefuncs.c:301

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 67 of file dfmgr.c.

Referenced by find_in_dynamic_libpath().

◆ fmgr_hook

PGDLLIMPORT fmgr_hook_type fmgr_hook
extern

Definition at line 40 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 39 of file fmgr.c.

Referenced by sepgsql_init_client_label().