diff options
Diffstat (limited to 'src/backend/utils/fmgr/fmgr.c')
| -rw-r--r-- | src/backend/utils/fmgr/fmgr.c | 172 |
1 files changed, 58 insertions, 114 deletions
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index 0288fbab4b..ffa19d5a2d 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -192,7 +192,6 @@ fmgr_info_cxt_security(Oid functionId, FmgrInfo *finfo, MemoryContext mcxt, * elogs. */ finfo->fn_oid = InvalidOid; - finfo->fn_collation = InvalidOid; /* caller may set this later */ finfo->fn_extra = NULL; finfo->fn_mcxt = mcxt; finfo->fn_expr = NULL; /* caller may set this later */ @@ -901,7 +900,6 @@ fmgr_security_definer(PG_FUNCTION_ARGS) fmgr_info_cxt_security(fcinfo->flinfo->fn_oid, &fcache->flinfo, fcinfo->flinfo->fn_mcxt, true); - fcache->flinfo.fn_collation = fcinfo->flinfo->fn_collation; fcache->flinfo.fn_expr = fcinfo->flinfo->fn_expr; tuple = SearchSysCache1(PROCOID, @@ -1012,12 +1010,12 @@ fmgr_security_definer(PG_FUNCTION_ARGS) * look at FmgrInfo, since there won't be any. */ Datum -DirectFunctionCall1(PGFunction func, Datum arg1) +DirectFunctionCall1Coll(PGFunction func, Oid collation, Datum arg1) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 1, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 1, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.argnull[0] = false; @@ -1032,12 +1030,12 @@ DirectFunctionCall1(PGFunction func, Datum arg1) } Datum -DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2) +DirectFunctionCall2Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 2, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 2, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1054,13 +1052,13 @@ DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2) } Datum -DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall3Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 3, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 3, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1079,13 +1077,13 @@ DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2, } Datum -DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall4Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 4, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 4, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1106,13 +1104,13 @@ DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2, } Datum -DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall5Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 5, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 5, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1135,14 +1133,14 @@ DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2, } Datum -DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall6Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 6, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 6, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1167,14 +1165,14 @@ DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2, } Datum -DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall7Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 7, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 7, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1201,14 +1199,14 @@ DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2, } Datum -DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall8Coll(PGFunction func, Oid collation, 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); + InitFunctionCallInfoData(fcinfo, NULL, 8, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1237,7 +1235,7 @@ DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2, } Datum -DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2, +DirectFunctionCall9Coll(PGFunction func, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9) @@ -1245,7 +1243,7 @@ DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2, FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, NULL, 9, NULL, NULL); + InitFunctionCallInfoData(fcinfo, NULL, 9, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1277,71 +1275,17 @@ DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2, /* - * These are the same as DirectFunctionCallN except that a nonzero - * collation can be specified. No other fields of FmgrInfo are made valid. - */ -Datum -DirectFunctionCall1WithCollation(PGFunction func, Oid collation, Datum arg1) -{ - FunctionCallInfoData fcinfo; - FmgrInfo flinfo; - Datum result; - - MemSet(&flinfo, 0, sizeof(flinfo)); - flinfo.fn_collation = collation; - InitFunctionCallInfoData(fcinfo, &flinfo, 1, NULL, NULL); - - fcinfo.arg[0] = arg1; - fcinfo.argnull[0] = 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; -} - -Datum -DirectFunctionCall2WithCollation(PGFunction func, Oid collation, - Datum arg1, Datum arg2) -{ - FunctionCallInfoData fcinfo; - FmgrInfo flinfo; - Datum result; - - MemSet(&flinfo, 0, sizeof(flinfo)); - flinfo.fn_collation = collation; - InitFunctionCallInfoData(fcinfo, &flinfo, 2, NULL, NULL); - - fcinfo.arg[0] = arg1; - fcinfo.arg[1] = arg2; - fcinfo.argnull[0] = false; - fcinfo.argnull[1] = 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. */ Datum -FunctionCall1(FmgrInfo *flinfo, Datum arg1) +FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 1, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 1, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.argnull[0] = false; @@ -1356,7 +1300,7 @@ FunctionCall1(FmgrInfo *flinfo, Datum arg1) } Datum -FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2) +FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2) { /* * XXX if you change this routine, see also the inlined version in @@ -1365,7 +1309,7 @@ FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2) FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 2, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 2, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1382,13 +1326,13 @@ FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2) } Datum -FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall3Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 3, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 3, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1407,13 +1351,13 @@ FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2, } Datum -FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall4Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 4, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 4, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1434,13 +1378,13 @@ FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2, } Datum -FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 5, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 5, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1463,14 +1407,14 @@ FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2, } Datum -FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 6, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 6, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1495,14 +1439,14 @@ FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2, } Datum -FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7) { FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 7, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 7, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1529,14 +1473,14 @@ FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2, } Datum -FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall8Coll(FmgrInfo *flinfo, Oid collation, 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); + InitFunctionCallInfoData(fcinfo, flinfo, 8, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1565,7 +1509,7 @@ FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2, } Datum -FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2, +FunctionCall9Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9) @@ -1573,7 +1517,7 @@ FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2, FunctionCallInfoData fcinfo; Datum result; - InitFunctionCallInfoData(fcinfo, flinfo, 9, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 9, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1612,7 +1556,7 @@ FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2, * do the fmgr_info() once and then use FunctionCallN(). */ Datum -OidFunctionCall0(Oid functionId) +OidFunctionCall0Coll(Oid functionId, Oid collation) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1620,7 +1564,7 @@ OidFunctionCall0(Oid functionId) fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 0, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 0, collation, NULL, NULL); result = FunctionCallInvoke(&fcinfo); @@ -1632,7 +1576,7 @@ OidFunctionCall0(Oid functionId) } Datum -OidFunctionCall1(Oid functionId, Datum arg1) +OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1640,7 +1584,7 @@ OidFunctionCall1(Oid functionId, Datum arg1) fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 1, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 1, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.argnull[0] = false; @@ -1655,7 +1599,7 @@ OidFunctionCall1(Oid functionId, Datum arg1) } Datum -OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2) +OidFunctionCall2Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2) { FmgrInfo flinfo; FunctionCallInfoData fcinfo; @@ -1663,7 +1607,7 @@ OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2) fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 2, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 2, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1680,7 +1624,7 @@ OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2) } Datum -OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall3Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3) { FmgrInfo flinfo; @@ -1689,7 +1633,7 @@ OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 3, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 3, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1708,7 +1652,7 @@ OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2, } Datum -OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall4Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4) { FmgrInfo flinfo; @@ -1717,7 +1661,7 @@ OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 4, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 4, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1738,7 +1682,7 @@ OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2, } Datum -OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall5Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5) { FmgrInfo flinfo; @@ -1747,7 +1691,7 @@ OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 5, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 5, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1770,7 +1714,7 @@ OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2, } Datum -OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall6Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6) { @@ -1780,7 +1724,7 @@ OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 6, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 6, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1805,7 +1749,7 @@ OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2, } Datum -OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall7Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7) { @@ -1815,7 +1759,7 @@ OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 7, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 7, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1842,7 +1786,7 @@ OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2, } Datum -OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall8Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8) { @@ -1852,7 +1796,7 @@ OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 8, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 8, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1881,7 +1825,7 @@ OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2, } Datum -OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2, +OidFunctionCall9Coll(Oid functionId, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7, Datum arg8, Datum arg9) @@ -1892,7 +1836,7 @@ OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2, fmgr_info(functionId, &flinfo); - InitFunctionCallInfoData(fcinfo, &flinfo, 9, NULL, NULL); + InitFunctionCallInfoData(fcinfo, &flinfo, 9, collation, NULL, NULL); fcinfo.arg[0] = arg1; fcinfo.arg[1] = arg2; @@ -1953,7 +1897,7 @@ InputFunctionCall(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod) pushed = SPI_push_conditional(); - InitFunctionCallInfoData(fcinfo, flinfo, 3, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 3, InvalidOid, NULL, NULL); fcinfo.arg[0] = CStringGetDatum(str); fcinfo.arg[1] = ObjectIdGetDatum(typioparam); @@ -2028,7 +1972,7 @@ ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf, pushed = SPI_push_conditional(); - InitFunctionCallInfoData(fcinfo, flinfo, 3, NULL, NULL); + InitFunctionCallInfoData(fcinfo, flinfo, 3, InvalidOid, NULL, NULL); fcinfo.arg[0] = PointerGetDatum(buf); fcinfo.arg[1] = ObjectIdGetDatum(typioparam); |
