pgsql: Add support for collation attributes on older ICU versions

Started by Peter Eisentrautover 7 years ago4 messagescomitters
Jump to latest
#1Peter Eisentraut
peter_e@gmx.net

Add support for collation attributes on older ICU versions

Starting in ICU 54, collation customization attributes can be
specified in the locale string, for example
"@colStrength=primary;colCaseLevel=yes". Add support for this for
older ICU versions as well, by adding some minimal parsing of the
attributes in the locale string and calling ucol_setAttribute() on
them. This is essentially what never ICU versions do internally in
ucol_open(). This was we can offer this functionality in a consistent
way in all ICU versions supported by PostgreSQL.

Also add some tests for ICU collation customization.

Reported-by: Daniel Verite <daniel@manitou-mail.org>
Discussion: /messages/by-id/0270ebd4-f67c-8774-1a5a-91adfb9bb41f@2ndquadrant.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/b8f9a2a69a279d118e366a0d3d45caa84a7620b1

Modified Files
--------------
src/backend/utils/adt/pg_locale.c | 104 +++++++++++++++++++++++++
src/test/regress/expected/collate.icu.utf8.out | 39 ++++++++++
src/test/regress/sql/collate.icu.utf8.sql | 21 +++++
3 files changed, 164 insertions(+)

#2Andres Freund
andres@anarazel.de
In reply to: Peter Eisentraut (#1)
Re: pgsql: Add support for collation attributes on older ICU versions

Hi,

On 2019-03-17 07:47:45 +0000, Peter Eisentraut wrote:

Add support for collation attributes on older ICU versions

Starting in ICU 54, collation customization attributes can be
specified in the locale string, for example
"@colStrength=primary;colCaseLevel=yes". Add support for this for
older ICU versions as well, by adding some minimal parsing of the
attributes in the locale string and calling ucol_setAttribute() on
them. This is essentially what never ICU versions do internally in
ucol_open(). This was we can offer this functionality in a consistent
way in all ICU versions supported by PostgreSQL.

Also add some tests for ICU collation customization.

Reported-by: Daniel Verite <daniel@manitou-mail.org>
Discussion: /messages/by-id/0270ebd4-f67c-8774-1a5a-91adfb9bb41f@2ndquadrant.com

I now get this warning:

/home/andres/src/postgresql/src/backend/utils/adt/pg_locale.c:1680:14: warning: comparison of constant -1 with expression of type 'UColAttribute' is always true [-Wtautological-constant-out-of-range-compare]
if (uattr != -1 && uvalue != -1)
~~~~~ ^ ~~

Greetings,

Andres Freund

#3Peter Eisentraut
peter_e@gmx.net
In reply to: Andres Freund (#2)
Re: pgsql: Add support for collation attributes on older ICU versions

On 2019-03-18 20:03, Andres Freund wrote:

I now get this warning:

/home/andres/src/postgresql/src/backend/utils/adt/pg_locale.c:1680:14: warning: comparison of constant -1 with expression of type 'UColAttribute' is always true [-Wtautological-constant-out-of-range-compare]
if (uattr != -1 && uvalue != -1)
~~~~~ ^ ~~

I found a bug in that code and restructured it a bit. It should also
avoid this warning now.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#4Andres Freund
andres@anarazel.de
In reply to: Peter Eisentraut (#3)
Re: pgsql: Add support for collation attributes on older ICU versions

On 2019-03-19 09:49:14 +0100, Peter Eisentraut wrote:

On 2019-03-18 20:03, Andres Freund wrote:

I now get this warning:

/home/andres/src/postgresql/src/backend/utils/adt/pg_locale.c:1680:14: warning: comparison of constant -1 with expression of type 'UColAttribute' is always true [-Wtautological-constant-out-of-range-compare]
if (uattr != -1 && uvalue != -1)
~~~~~ ^ ~~

I found a bug in that code and restructured it a bit. It should also
avoid this warning now.

Thanks.