From: | Zdenek Kotala <Zdenek(dot)Kotala(at)Sun(dot)COM> |
---|---|
To: | "David E(dot) Wheeler" <david(at)kineticode(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org, Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
Subject: | Re: PATCH: CITEXT 2.0 |
Date: | 2008-07-07 19:46:55 |
Message-ID: | 487272AF.5070002@sun.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
David E. Wheeler napsal(a):
> On Jul 7, 2008, at 12:21, David E. Wheeler wrote:
>
>> My question is: why? Shouldn't they all use the same function for
>> comparison? I'm happy to dupe this implementation for citext, but I
>> don't understand it. Should not all comparisons be executed consistently?
>
> Let me try to answer my own question by citing this comment:
>
> /*
> * Since we only care about equality or not-equality, we can avoid
> all the
> * expense of strcoll() here, and just do bitwise comparison.
> */
>
> So, the upshot is that the = and <> operators are not locale-aware, yes?
> They just do byte comparisons. Is that really the way it should be? I
> mean, could there not be strings that are equivalent but have different
> bytes?
Correct. The problem is complex. It works fine only for normalized string. But
postgres now assume that all utf8 strings are normalized.
If you need to implement < <= >= > operators you need to use strcol which take
care of locale collation.
See unicode collation algorithm http://www.unicode.org/reports/tr10/
Zdenek
--
Zdenek Kotala Sun Microsystems
Prague, Czech Republic http://sun.com/postgresql
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Stehule | 2008-07-07 19:48:50 | Re: PATCH: CITEXT 2.0 |
Previous Message | David E. Wheeler | 2008-07-07 19:38:07 | Re: PATCH: CITEXT 2.0 |