PostgreSQL FunctionCallInfoData结构体
2017-10-26 23:31
337 查看
FunctionCallInfoData是实际传给C Language function函数的数据,它默认是隐藏的,实际上每一个C Language function函数默认都有一个FunctionCallInfoData.它的定义如下:
一个简单的示例函数,包含两个参数
我们经常使用的函数定义,等同上面的函数
宏定义如下
创建函数
typedef struct FunctionCallInfoData { FmgrInfo *flinfo; /*函数描述指针*/ fmNodePtr context; /*函数调用的上下文信息*/ fmNodePtr resultinfo; /*返回结果的额外信息*/ Oid fncollation; /*函数的Oid*/ bool isnull; /*返回结果是否为NULL,如果返回值为NULL,必须设置为true*/ short nargs; /*函数参数的数量*/ Datum arg[FUNC_MAX_ARGS]; /*函数的所有参数*/ bool argnull[FUNC_MAX_ARGS]; /*某一项参数是否为NULL*/ } FunctionCallInfoData;
一个简单的示例函数,包含两个参数
Datum sum_int(FunctionCallInfoData *fcinfo){ int a1,a2; if (fcinfo->argnull[0] || fcinfo->argnull[1]){ fcinfo->isnull = true; return (Datum) 0; } a1 = DatumGetInt32(fcinfo->arg[0]); a2 = DatumGetInt32(fcinfo->arg[1]); fcinfo->isnull = false; return Int32GetDatum(a1 + a2); }
我们经常使用的函数定义,等同上面的函数
Datum sum_int(PG_FUNCTION_ARGS){ int a1 = PG_GETARG_INT32(0); int a2 = PG_GETARG_INT32(1); PG_RETURN_INT32(a1 + a2); }
宏定义如下
#define PG_FUNCTION_ARGS FuncationCallInfo fcinfo #define PG_NARGS() (fcinfo->nargs) #define PG_ARGISNULL(n) (fcinfo->argnull ) #define PG_GETARG_DATUM(n) (fcinfo->arg ) #define PG_GETARG_INT32(n) DatumGetInt32(PG_GETARG_DATUM(n)) #define PG_RETURN_INT32(x) return Int32GetDatum(x) #define PG_RETURN_NULL() do { fcinfo->isnull = true; return (Datum) 0; } while (0)
创建函数
CREATE FUNCTION sum_int(int, int) RETURNS int AS 'pg_kmcb','add' LANGUAGE C;
相关文章推荐
- G++编译错误 no matching function for call to '_tag_data_value::StringAddLen(std::string, int, int)
- Fatal error: Call to a member function getData() on a non-object in /data/php/framework/exts/zii/wid
- php连接postgreSQL,总是报错“Call to undefined function pg_connect()”
- Call to undefined function Think\mb_strlen()
- call function 'POPUP_TO_CONFIRM_STEP' --> ALV display
- C++常见错误之:no matching function for call to transfor
- effective c++ 条款9 do not call virtual function in constructor or deconstructor
- STARTUPINFO si = { sizeof(si) } 结构体的一种初始化方式
- Call to undefined function set_magic_quotes_runtime() in /opt/app/apache/install/index.php:12 Stack
- CloseGestureInfoHandle function
- DB2 SQL function overloading with DECIMAL datatype
- Apache2+PHP5+MySQL时,报Call to undefined function mysql_connect() 错误解决方法
- call to local/imported function list_max/1 is illegal in guard
- error: #29: expected an expression,error: #140: too many arguments in function call
- when should NOT we call the base class's corresponding function?
- selenium call javascript function
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
- iOS objc_msgSend()报错Too many arguments to function call
- PHP连接MySQL报错:Fatal error: Call to undefined function mysql_connect()之解决方法
- Too many arguments to function call, expected 0, have 3