Обсуждение: pgsql: Fix collation handling in plpgsql functions.

Поиск
Список
Период
Сортировка

pgsql: Fix collation handling in plpgsql functions.

От
Tom Lane
Дата:
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(-)