mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
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...
This commit is contained in:
@ -349,8 +349,12 @@ HandleFunctionRequest(StringInfo msgBuf)
|
||||
|
||||
/*
|
||||
* Prepare function call info block and insert arguments.
|
||||
*
|
||||
* Note: for now we pass collation = InvalidOid, so collation-sensitive
|
||||
* functions can't be called this way. Perhaps we should pass
|
||||
* DEFAULT_COLLATION_OID, instead?
|
||||
*/
|
||||
InitFunctionCallInfoData(fcinfo, &fip->flinfo, 0, NULL, NULL);
|
||||
InitFunctionCallInfoData(fcinfo, &fip->flinfo, 0, InvalidOid, NULL, NULL);
|
||||
|
||||
if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
|
||||
rformat = parse_fcall_arguments(msgBuf, fip, &fcinfo);
|
||||
|
Reference in New Issue
Block a user