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. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/a4425e3200f2c2578bdf94bb6234169115746c9f Modified Files -------------- src/pl/plpgsql/src/gram.y | 21 ++++-- src/pl/plpgsql/src/pl_comp.c | 98 ++++++++++++++++------ src/pl/plpgsql/src/pl_exec.c | 79 ++++++++++++----- src/pl/plpgsql/src/plpgsql.h | 18 +++- src/test/regress/expected/collate.linux.utf8.out | 82 ++++++++++--------- src/test/regress/sql/collate.linux.utf8.sql | 11 ++- 6 files changed, 207 insertions(+), 102 deletions(-) -- Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-committers