Postgresql
PG_FUNCTION_ARGS(使用 V1 約定)傳遞了哪些參數?
PostgreSQL 用“V1”介面記錄他們所有的 C 函式,但他們實際上並沒有顯示他們得到了什麼,
PG_FUNCTION_INFO_V1(add_one); Datum add_one(PG_FUNCTION_ARGS) { int32 arg = PG_GETARG_INT32(0); PG_RETURN_INT32(arg + 1); }
在上面
PG_FUNCTION_ARGS
聲明要接受的函式是什麼?許多 V1 函式似乎fcinfo
神奇地出現在定義中,我猜它是在這裡引入的,但它是什麼,這個宏還有什麼其他的引入嗎?
fmgr.h
對此的實際定義是#define PG_FUNCTION_ARGS FunctionCallInfo fcinfo
這是一個指向
FunctionCallInfoBaseData
typedef struct FunctionCallInfoBaseData *FunctionCallInfo;
typedef struct FunctionCallInfoBaseData { FmgrInfo *flinfo; /* ptr to lookup info used for this call */ fmNodePtr context; /* pass info about context of call */ fmNodePtr resultinfo; /* pass or return extra info about result */ Oid fncollation; /* collation for function to use */ #define FIELDNO_FUNCTIONCALLINFODATA_ISNULL 4 bool isnull; /* function must set true if result is NULL */ short nargs; /* # arguments actually passed */ #define FIELDNO_FUNCTIONCALLINFODATA_ARGS 6 NullableDatum args[FLEXIBLE_ARRAY_MEMBER]; } FunctionCallInfoBaseData;