Pass collations to functions in FunctionCallInfoData, not FmgrInfo.

Tom Lane <tgl@sss.pgh.pa.us>

Commit: d64713df7e5996ab3ab337b5e0901cf2c53773f9
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2011-04-12T23:19:24Z
Releases: 9.1.0
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...

Files

PathChange+/−
contrib/btree_gin/btree_gin.c modified +1 −1
contrib/btree_gist/btree_text.c modified +24 −6
src/backend/access/common/reloptions.c modified +1 −1
src/backend/access/common/scankey.c modified +3 −3
src/backend/access/gin/ginget.c modified +18 −15
src/backend/access/gin/ginutil.c modified +25 −27
src/backend/access/gist/gistget.c modified +13 −11
src/backend/access/gist/gistscan.c modified +2 −8
src/backend/access/hash/hashutil.c modified +2 −1
src/backend/access/index/indexam.c modified +0 −1
src/backend/access/nbtree/nbtinsert.c modified +4 −3
src/backend/access/nbtree/nbtsearch.c modified +6 −5
src/backend/access/nbtree/nbtsort.c modified +5 −3
src/backend/access/nbtree/nbtutils.c modified +24 −16
src/backend/commands/analyze.c modified +6 −5
src/backend/commands/trigger.c modified +2 −1
src/backend/commands/tsearchcmds.c modified +6 −1
src/backend/executor/execGrouping.c modified +4 −0
src/backend/executor/execQual.c modified +15 −10
src/backend/executor/execUtils.c modified +4 −3
src/backend/executor/functions.c modified +4 −4
src/backend/executor/nodeAgg.c modified +9 −4
src/backend/executor/nodeIndexscan.c modified +1 −1
src/backend/executor/nodeMergeAppend.c modified +3 −2
src/backend/executor/nodeMergejoin.c modified +6 −3
src/backend/executor/nodeSubplan.c modified +0 −4
src/backend/executor/nodeWindowAgg.c modified +7 −3
src/backend/optimizer/path/indxpath.c modified +1 −2
src/backend/tcop/fastpath.c modified +5 −1
src/backend/tsearch/wparser.c modified +1 −1
src/backend/utils/adt/arrayfuncs.c modified +14 −12
src/backend/utils/adt/int.c modified +2 −1
src/backend/utils/adt/like.c modified +4 −2
src/backend/utils/adt/oid.c modified +2 −1
src/backend/utils/adt/ri_triggers.c modified +4 −1
src/backend/utils/adt/rowtypes.c modified +20 −2
src/backend/utils/adt/selfuncs.c modified +59 −55
src/backend/utils/cache/catcache.c modified +1 −1
src/backend/utils/fmgr/fmgr.c modified +58 −114
src/backend/utils/fmgr/README modified +12 −9
src/backend/utils/sort/tuplesort.c modified +24 −14
src/include/access/gin_private.h modified +2 −0
src/include/access/skey.h modified +9 −8
src/include/access/valid.h modified +3 −2
src/include/fmgr.h modified +126 −45
src/include/nodes/execnodes.h modified +1 −0
src/include/utils/selfuncs.h modified +2 −1
src/include/utils/tuplesort.h modified +5 −2
src/pl/plpgsql/src/pl_comp.c modified +2 −2