On Jul 5, 2008, at 02:58, Gregory Stark wrote:
txt = cilower( PG_GETARG_TEXT_PP(0) );
str = VARDATA_ANY(txt);
result = hash_any((unsigned char *) str, VARSIZE_ANY_EXHDR(txt));
I thought your data type implemented a locale dependent collation,
not just
a case insensitive collation. That is, does this hash agree with your
citext_eq on strings like "foo bar" <=> "foobar" and "fooß" <=>
"fooss" ?
CITEXT is basically intended to replace all those queries that do
`WHERE LOWER(col) = LOWER(?)` by doing it internally. That's it. It's
locale-aware to the same extent that `LOWER()` is (and that citext 1.0
is not, since it only compares ASCII characters case-insensitively).
And I expect that it does, in fact, agree with your examples, in that
all the current tests for = and <> pass:
try=# select 'foo bar' = 'foobar';
?column?
----------
f
try=# SELECT 'fooß' = 'fooss';
?column?
----------
f
You may have to use strxfrm
In the patch against CVS HEAD, it uses str_tolower() in formatting.c.
Best,
David
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers