From d64713df7e5996ab3ab337b5e0901cf2c53773f9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 12 Apr 2011 19:19:24 -0400 Subject: Pass collations to functions in FunctionCallInfoData, not FmgrInfo. Since collation is effectively an argument, not a property of the function, FmgrInfo is really the wrong place for it; and this becomes critical in cases where a cached FmgrInfo is used for varying purposes that might need different collation settings. Fix by passing it in FunctionCallInfoData instead. In particular this allows a clean fix for bug #5970 (record_cmp not working). This requires touching a bit more code than the original method, but nobody ever thought that collations would not be an invasive patch... --- src/backend/utils/adt/oid.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/backend/utils/adt/oid.c') diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c index b2152a2491c..495b6261e62 100644 --- a/src/backend/utils/adt/oid.c +++ b/src/backend/utils/adt/oid.c @@ -263,7 +263,8 @@ oidvectorrecv(PG_FUNCTION_ARGS) * fcinfo->flinfo->fn_extra. So we need to pass it our own flinfo * parameter. */ - InitFunctionCallInfoData(locfcinfo, fcinfo->flinfo, 3, NULL, NULL); + InitFunctionCallInfoData(locfcinfo, fcinfo->flinfo, 3, + InvalidOid, NULL, NULL); locfcinfo.arg[0] = PointerGetDatum(buf); locfcinfo.arg[1] = ObjectIdGetDatum(OIDOID); -- cgit v1.2.3