diff --git a/src/common/backend/utils/fmgr/fmgr.cpp b/src/common/backend/utils/fmgr/fmgr.cpp index 906e9da31..0f740cfe5 100755 --- a/src/common/backend/utils/fmgr/fmgr.cpp +++ b/src/common/backend/utils/fmgr/fmgr.cpp @@ -1292,7 +1292,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; @@ -1303,7 +1303,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 */ @@ -1315,7 +1316,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; @@ -1328,6 +1329,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); @@ -1340,7 +1342,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; @@ -1355,6 +1358,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); @@ -1368,7 +1372,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; @@ -1385,6 +1390,7 @@ Datum DirectFunctionCall5Coll( fcinfo.argnull[2] = false; fcinfo.argnull[3] = false; fcinfo.argnull[4] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1398,7 +1404,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; @@ -1417,6 +1424,7 @@ Datum DirectFunctionCall6Coll( fcinfo.argnull[3] = false; fcinfo.argnull[4] = false; fcinfo.argnull[5] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1430,7 +1438,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; @@ -1451,6 +1460,7 @@ Datum DirectFunctionCall7Coll( fcinfo.argnull[4] = false; fcinfo.argnull[5] = false; fcinfo.argnull[6] = false; + fcinfo.can_ignore = can_ignore; result = (*func)(&fcinfo); @@ -1464,7 +1474,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; @@ -1487,6 +1497,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); @@ -1500,7 +1511,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; @@ -1525,6 +1536,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 29dc045e3..389e32daf 100644 --- a/src/include/fmgr.h +++ b/src/include/fmgr.h @@ -456,19 +456,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