fmgr.c

来自「PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统」· C语言 代码 · 共 1,918 行 · 第 1/4 页

C
1,918
字号
	result = (*func) (&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %p returned NULL", (void *) func);	return result;}DatumDirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2,					Datum arg3, Datum arg4, Datum arg5,					Datum arg6){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, NULL, 6, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	result = (*func) (&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %p returned NULL", (void *) func);	return result;}DatumDirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2,					Datum arg3, Datum arg4, Datum arg5,					Datum arg6, Datum arg7){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, NULL, 7, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.arg[6] = arg7;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	fcinfo.argnull[6] = false;	result = (*func) (&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %p returned NULL", (void *) func);	return result;}DatumDirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2,					Datum arg3, Datum arg4, Datum arg5,					Datum arg6, Datum arg7, Datum arg8){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, NULL, 8, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.arg[6] = arg7;	fcinfo.arg[7] = arg8;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	fcinfo.argnull[6] = false;	fcinfo.argnull[7] = false;	result = (*func) (&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %p returned NULL", (void *) func);	return result;}DatumDirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2,					Datum arg3, Datum arg4, Datum arg5,					Datum arg6, Datum arg7, Datum arg8,					Datum arg9){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, NULL, 9, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.arg[6] = arg7;	fcinfo.arg[7] = arg8;	fcinfo.arg[8] = arg9;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	fcinfo.argnull[6] = false;	fcinfo.argnull[7] = false;	fcinfo.argnull[8] = false;	result = (*func) (&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %p returned NULL", (void *) func);	return result;}/* * These are for invocation of a previously-looked-up function with a * directly-computed parameter list.  Note that neither arguments nor result * are allowed to be NULL. */DatumFunctionCall1(FmgrInfo *flinfo, Datum arg1){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 1, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.argnull[0] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2){	/*	 * XXX if you change this routine, see also the inlined version in	 * utils/sort/tuplesort.c!	 */	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 2, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 3, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3, Datum arg4){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 4, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3, Datum arg4, Datum arg5){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 5, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3, Datum arg4, Datum arg5,			  Datum arg6){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 6, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3, Datum arg4, Datum arg5,			  Datum arg6, Datum arg7){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 7, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.arg[6] = arg7;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	fcinfo.argnull[6] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3, Datum arg4, Datum arg5,			  Datum arg6, Datum arg7, Datum arg8){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 8, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.arg[6] = arg7;	fcinfo.arg[7] = arg8;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	fcinfo.argnull[6] = false;	fcinfo.argnull[7] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}DatumFunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2,			  Datum arg3, Datum arg4, Datum arg5,			  Datum arg6, Datum arg7, Datum arg8,			  Datum arg9){	FunctionCallInfoData fcinfo;	Datum		result;	InitFunctionCallInfoData(fcinfo, flinfo, 9, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.arg[2] = arg3;	fcinfo.arg[3] = arg4;	fcinfo.arg[4] = arg5;	fcinfo.arg[5] = arg6;	fcinfo.arg[6] = arg7;	fcinfo.arg[7] = arg8;	fcinfo.arg[8] = arg9;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	fcinfo.argnull[2] = false;	fcinfo.argnull[3] = false;	fcinfo.argnull[4] = false;	fcinfo.argnull[5] = false;	fcinfo.argnull[6] = false;	fcinfo.argnull[7] = false;	fcinfo.argnull[8] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid);	return result;}/* * These are for invocation of a function identified by OID with a * directly-computed parameter list.  Note that neither arguments nor result * are allowed to be NULL.	These are essentially fmgr_info() followed * by FunctionCallN().	If the same function is to be invoked repeatedly, * do the fmgr_info() once and then use FunctionCallN(). */DatumOidFunctionCall1(Oid functionId, Datum arg1){	FmgrInfo	flinfo;	FunctionCallInfoData fcinfo;	Datum		result;	fmgr_info(functionId, &flinfo);	InitFunctionCallInfoData(fcinfo, &flinfo, 1, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.argnull[0] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", flinfo.fn_oid);	return result;}DatumOidFunctionCall2(Oid functionId, Datum arg1, Datum arg2){	FmgrInfo	flinfo;	FunctionCallInfoData fcinfo;	Datum		result;	fmgr_info(functionId, &flinfo);	InitFunctionCallInfoData(fcinfo, &flinfo, 2, NULL, NULL);	fcinfo.arg[0] = arg1;	fcinfo.arg[1] = arg2;	fcinfo.argnull[0] = false;	fcinfo.argnull[1] = false;	result = FunctionCallInvoke(&fcinfo);	/* Check for null result, since caller is clearly not expecting one */	if (fcinfo.isnull)		elog(ERROR, "function %u returned NULL", flinfo.fn_oid);	return result;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?