]> granicus.if.org Git - postgresql/commit
Fix collation handling in plpgsql functions.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 25 Mar 2011 19:06:36 +0000 (15:06 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 25 Mar 2011 19:06:36 +0000 (15:06 -0400)
commita4425e3200f2c2578bdf94bb6234169115746c9f
tree3fdd5fba0eda0b2f458162ee4abba0700fd19651
parentf6f0916dbdf9f2dc6bcdc550d8b3843739cdc304
Fix collation handling in plpgsql functions.

Make plpgsql treat the input collation as a polymorphism variable, so
that we cache separate plans for each input collation that's used in a
particular session, as per recent discussion.  Propagate the input
collation to all collatable input parameters.

I chose to also propagate the input collation to all declared variables of
collatable types, which is a bit more debatable but seems to be necessary
for non-astonishing behavior.  (Copying a parameter into a separate local
variable shouldn't result in a change of behavior, for example.)  There is
enough infrastructure here to support declaring a collation for each local
variable to override that default, but I thought we should wait to see what
the field demand is before adding such a feature.

In passing, remove exec_get_rec_fieldtype(), which wasn't used anywhere.

Documentation patch to follow.
src/pl/plpgsql/src/gram.y
src/pl/plpgsql/src/pl_comp.c
src/pl/plpgsql/src/pl_exec.c
src/pl/plpgsql/src/plpgsql.h
src/test/regress/expected/collate.linux.utf8.out
src/test/regress/sql/collate.linux.utf8.sql