pgsql: Fix incorrect declaration of citext's regexp_matches() functions

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix incorrect declaration of citext's regexp_matches() functions
Дата
Msg-id E1YpisP-0006cx-Ab@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix incorrect declaration of citext's regexp_matches() functions.

These functions should return SETOF TEXT[], like the core functions they
are wrappers for; but they were incorrectly declared as returning just
TEXT[].  This mistake had two results: first, if there was no match you got
a scalar null result, whereas what you should get is an empty set (zero
rows).  Second, the 'g' flag was effectively ignored, since you would get
only one result array even if there were multiple matches, as reported by
Jeff Certain.

While ignoring 'g' is a clear bug, the behavior for no matches might well
have been thought to be the intended behavior by people who hadn't compared
it carefully to the core regexp_matches() functions.  So we should tread
carefully about introducing this change in the back branches.  Still, it
clearly is a bug and so providing some fix is desirable.

After discussion, the conclusion was to introduce the change in a 1.1
version of the citext extension (as we would need to do anyway); 1.0 still
contains the incorrect behavior.  1.1 is the default and only available
version in HEAD, but it is optional in the back branches, where 1.0 remains
the default version.  People wishing to adopt the fix in back branches will
need to explicitly do ALTER EXTENSION citext UPDATE TO '1.1'.  (I also
provided a downgrade script in the back branches, so people could go back
to 1.0 if necessary.)

This should be called out as an incompatible change in the 9.5 release
notes, although we'll also document it in the next set of back-branch
release notes.  The notes should mention that any views or rules that use
citext's regexp_matches() functions will need to be dropped before
upgrading to 1.1, and then recreated again afterwards.

Back-patch to 9.1.  The bug goes all the way back to citext's introduction
in 8.4, but pre-9.1 there is no extension mechanism with which to manage
the change.  Given the lack of previous complaints it seems unnecessary to
change this behavior in 9.0, anyway.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/b22527f29dba6395a9e950fc655d34914c960f89

Modified Files
--------------
contrib/citext/Makefile              |    2 +-
contrib/citext/citext--1.0--1.1.sql  |   21 ++
contrib/citext/citext--1.0.sql       |  489 ----------------------------------
contrib/citext/citext--1.1.sql       |  489 ++++++++++++++++++++++++++++++++++
contrib/citext/citext.control        |    2 +-
contrib/citext/expected/citext.out   |   17 +-
contrib/citext/expected/citext_1.out |   17 +-
contrib/citext/sql/citext.sql        |    4 +-
8 files changed, 539 insertions(+), 502 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix incorrect declaration of citext's regexp_matches() functions
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix incorrect declaration of citext's regexp_matches() functions