diff --git a/src/common/backend/utils/fmgr/fmgr.cpp b/src/common/backend/utils/fmgr/fmgr.cpp index 7b9e6bde4..860141bb8 100755 --- a/src/common/backend/utils/fmgr/fmgr.cpp +++ b/src/common/backend/utils/fmgr/fmgr.cpp @@ -1295,7 +1295,7 @@ Datum DirectFunctionCall1Coll(PGFunction func, Oid collation, Datum arg1, bool c return result; } -Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2) +Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1306,7 +1306,8 @@ Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum fcinfo.arg[1] = arg2; fcinfo.argnull[0] = false; fcinfo.argnull[1] = false; - + fcinfo.can_ignore = can_ignore; + result = (*func)(&fcinfo); /* Check for null result, since caller is clearly not expecting one */ @@ -1318,7 +1319,7 @@ Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum return result; } -Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3) +Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1331,6 +1332,7 @@ Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum fcinfo.argnull[0] = false; fcinfo.argnull[1] = false; fcinfo.argnull[2] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1343,7 +1345,8 @@ Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum return result; } -Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4) +Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1358,6 +1361,7 @@ Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum fcinfo.argnull[1] = false; fcinfo.argnull[2] = false; fcinfo.argnull[3] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1371,7 +1375,8 @@ Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum } Datum DirectFunctionCall5Coll( - PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5) + PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, + bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1388,6 +1393,7 @@ Datum DirectFunctionCall5Coll( fcinfo.argnull[2] = false; fcinfo.argnull[3] = false; fcinfo.argnull[4] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1401,7 +1407,8 @@ Datum DirectFunctionCall5Coll( } Datum DirectFunctionCall6Coll( - PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6) + PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, + bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1420,6 +1427,7 @@ Datum DirectFunctionCall6Coll( fcinfo.argnull[3] = false; fcinfo.argnull[4] = false; fcinfo.argnull[5] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1433,7 +1441,8 @@ Datum DirectFunctionCall6Coll( } Datum DirectFunctionCall7Coll( - PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7) + PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, + bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1454,6 +1463,7 @@ Datum DirectFunctionCall7Coll( fcinfo.argnull[4] = false; fcinfo.argnull[5] = false; fcinfo.argnull[6] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1467,7 +1477,7 @@ Datum DirectFunctionCall7Coll( } Datum DirectFunctionCall8Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, - Datum arg5, Datum arg6, Datum arg7, Datum arg8) + Datum arg5, Datum arg6, Datum arg7, Datum arg8, bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1490,6 +1500,7 @@ Datum DirectFunctionCall8Coll(PGFunction func, Oid collation, Datum arg1, Datum fcinfo.argnull[5] = false; fcinfo.argnull[6] = false; fcinfo.argnull[7] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1503,7 +1514,7 @@ Datum DirectFunctionCall8Coll(PGFunction func, Oid collation, Datum arg1, Datum } 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 arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9, bool can_ignore) { FunctionCallInfoData fcinfo; Datum result; @@ -1528,6 +1539,7 @@ Datum DirectFunctionCall9Coll(PGFunction func, Oid collation, Datum arg1, Datum fcinfo.argnull[6] = false; fcinfo.argnull[7] = false; fcinfo.argnull[8] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); diff --git a/src/include/fmgr.h b/src/include/fmgr.h index 57ea0b40f..c513cbeb7 100644 --- a/src/include/fmgr.h +++ b/src/include/fmgr.h @@ -457,19 +457,24 @@ typedef const Pg_magic_struct* (*PGModuleMagicFunction)(void); * are allowed to be NULL. */ extern Datum DirectFunctionCall1Coll(PGFunction func, Oid collation, Datum arg1, bool can_ignore = false); -extern Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2); -extern Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3); -extern Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4); +extern Datum DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, bool can_ignore = false); +extern Datum DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, + bool can_ignore = false); +extern Datum DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + bool can_ignore = false); extern Datum DirectFunctionCall5Coll( - PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5); + PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, + bool can_ignore = false); extern Datum DirectFunctionCall6Coll( - PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6); + PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, + bool can_ignore = false); extern Datum DirectFunctionCall7Coll( - PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7); + PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, + bool can_ignore = false); extern Datum DirectFunctionCall8Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, - Datum arg5, Datum arg6, Datum arg7, Datum arg8); + Datum arg5, Datum arg6, Datum arg7, Datum arg8, bool can_ignore = false); extern 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 arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9, bool can_ignore = false); /* These are for invocation of a previously-looked-up function with a * directly-computed parameter list. Note that neither arguments nor result