From 2b4b0ed6006cda5d39837e9679525b12eab3f421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=85=E7=A8=8B?= <517719039@qq.com> Date: Fri, 8 Mar 2024 16:47:52 +0800 Subject: [PATCH] =?UTF-8?q?OidFunctionCallnColl=E5=A2=9E=E5=8A=A0can=5Fign?= =?UTF-8?q?ore=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/utils/fmgr/fmgr.cpp | 37 +++++++++++++++++--------- src/include/fmgr.h | 28 ++++++++++--------- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/common/backend/utils/fmgr/fmgr.cpp b/src/common/backend/utils/fmgr/fmgr.cpp index 860141bb8..59c49474e 100755 --- a/src/common/backend/utils/fmgr/fmgr.cpp +++ b/src/common/backend/utils/fmgr/fmgr.cpp @@ -1832,7 +1832,7 @@ Datum FunctionCall9Coll(FmgrInfo* flinfo, Oid collation, Datum arg1, Datum arg2, * by FunctionCallN(). If the same function is to be invoked repeatedly, * do the fmgr_info() once and then use FunctionCallN(). */ -Datum OidFunctionCall0Coll(Oid functionId, Oid collation) +Datum OidFunctionCall0Coll(Oid functionId, Oid collation, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1842,6 +1842,8 @@ Datum OidFunctionCall0Coll(Oid functionId, Oid collation) InitFunctionCallInfoData(fcinfo, &flinfo, 0, collation, NULL, NULL); + fcinfo.can_ignore = can_ignore; + result = FunctionCallInvoke(&fcinfo); /* Check for null result, since caller is clearly not expecting one */ @@ -1853,7 +1855,7 @@ Datum OidFunctionCall0Coll(Oid functionId, Oid collation) return result; } -Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1) +Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1865,6 +1867,7 @@ Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1) fcinfo.arg[0] = arg1; fcinfo.argnull[0] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -1877,7 +1880,7 @@ Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1) return result; } -Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2) +Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1891,6 +1894,7 @@ Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 fcinfo.arg[1] = arg2; fcinfo.argnull[0] = false; fcinfo.argnull[1] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -1903,7 +1907,7 @@ Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 return result; } -Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3) +Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1919,6 +1923,7 @@ Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 fcinfo.argnull[0] = false; fcinfo.argnull[1] = false; fcinfo.argnull[2] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -1931,7 +1936,8 @@ Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 return result; } -Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4) +Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1949,6 +1955,7 @@ Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 fcinfo.argnull[1] = false; fcinfo.argnull[2] = false; fcinfo.argnull[3] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -1961,7 +1968,8 @@ Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 return result; } -Datum OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5) +Datum OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, + bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1981,6 +1989,7 @@ Datum OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 fcinfo.argnull[2] = false; fcinfo.argnull[3] = false; fcinfo.argnull[4] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -1993,8 +2002,8 @@ Datum OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 return result; } -Datum OidFunctionCall6Coll( - Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6) +Datum OidFunctionCall6Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, + Datum arg6, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -2016,6 +2025,7 @@ Datum OidFunctionCall6Coll( fcinfo.argnull[3] = false; fcinfo.argnull[4] = false; fcinfo.argnull[5] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -2028,8 +2038,8 @@ Datum OidFunctionCall6Coll( return result; } -Datum OidFunctionCall7Coll( - Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7) +Datum OidFunctionCall7Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, + Datum arg6, Datum arg7, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -2053,6 +2063,7 @@ Datum OidFunctionCall7Coll( fcinfo.argnull[4] = false; fcinfo.argnull[5] = false; fcinfo.argnull[6] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -2066,7 +2077,7 @@ Datum OidFunctionCall7Coll( } Datum OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, - Datum arg6, Datum arg7, Datum arg8) + Datum arg6, Datum arg7, Datum arg8, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -2092,6 +2103,7 @@ Datum OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 fcinfo.argnull[5] = false; fcinfo.argnull[6] = false; fcinfo.argnull[7] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); @@ -2105,7 +2117,7 @@ Datum OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 } Datum OidFunctionCall9Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, - Datum arg6, Datum arg7, Datum arg8, Datum arg9) + Datum arg6, Datum arg7, Datum arg8, Datum arg9, bool can_ignore) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -2133,6 +2145,7 @@ Datum OidFunctionCall9Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2 fcinfo.argnull[6] = false; fcinfo.argnull[7] = false; fcinfo.argnull[8] = false; + fcinfo.can_ignore = can_ignore; result = FunctionCallInvoke(&fcinfo); diff --git a/src/include/fmgr.h b/src/include/fmgr.h index c513cbeb7..cb0d2e30a 100644 --- a/src/include/fmgr.h +++ b/src/include/fmgr.h @@ -501,21 +501,23 @@ extern Datum FunctionCall9Coll(FmgrInfo* flinfo, Oid collation, Datum arg1, Datu * by FunctionCallN(). If the same function is to be invoked repeatedly, * do the FunctionLookup() once and then use FunctionCallN(). */ -extern Datum OidFunctionCall0Coll(Oid functionId, Oid collation); -extern Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1); -extern Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2); -extern Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3); -extern Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4); -extern Datum OidFunctionCall5Coll( - Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5); -extern Datum OidFunctionCall6Coll( - Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6); -extern Datum OidFunctionCall7Coll( - Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7); +extern Datum OidFunctionCall0Coll(Oid functionId, Oid collation, bool can_ignore = false); +extern Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1, bool can_ignore = false); +extern Datum OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, bool can_ignore = false); +extern Datum OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, + bool can_ignore = false); +extern Datum OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + bool can_ignore = false); +extern Datum OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + Datum arg5, bool can_ignore = false); +extern Datum OidFunctionCall6Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + Datum arg5, Datum arg6, bool can_ignore = false); +extern Datum OidFunctionCall7Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, + Datum arg5, Datum arg6, Datum arg7, bool can_ignore = false); extern Datum OidFunctionCall8Coll(Oid functionId, 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 OidFunctionCall9Coll(Oid functionId, 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 macros allow the collation argument to be omitted (with a default of * InvalidOid, ie, no collation). They exist mostly for backwards