Обсуждение: citex regression fails with de.UTF8 locale
I setup more locale testing on gothic moth and citext regression test fails. See http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=gothic_moth&dt=2009-04-22%2020:06:01 Problem is here: --------------------------------------------------- SELECT citext_cmp('B'::citext, 'a'::citext) AS one; one ----- ! 1 (1 row) -- Do some tests using a table and index. --- 216,222 ---- SELECT citext_cmp('B'::citext, 'a'::citext) AS one; one ----- ! 28 (1 row) -- Do some tests using a table and index. --------------------------------------------------- It seems to me that citex_cmp can return any integer value. It depends what wcscoll() returns. I think it should be changed to: SELECT citext_cmp('B'::citext, 'a'::citext) > 0 AS one; Zdenek
Zdenek Kotala wrote:
> It seems to me that citex_cmp can return any integer value. It depends
> what wcscoll() returns. I think it should be changed to:
>
> SELECT citext_cmp('B'::citext, 'a'::citext) > 0 AS one;
The comment in varstr_cmp() claims that it returns -1, 0 or 1. That's
not accurate then.
Comment and test case fixed. I considered changing varstr_cmp to really
return -1, 0 or 1, but I didn't because the behavior has been unchanged
for ages and all the callers are happy with it. That's a heavily called
function so any extra cycles there could make a difference.
-- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
Heikki Linnakangas píše v čt 23. 04. 2009 v 10:22 +0300: > Zdenek Kotala wrote: > Comment and test case fixed. Thanks > I considered changing varstr_cmp to really > return -1, 0 or 1, but I didn't because the behavior has been unchanged > for ages and all the callers are happy with it. That's a heavily called > function so any extra cycles there could make a difference. I think keep it as it is good decision. strcmp() also does not guarantee -1, 0, 1. Zdenek
On Apr 23, 2009, at 12:22 AM, Heikki Linnakangas wrote:
> Zdenek Kotala wrote:
>> It seems to me that citex_cmp can return any integer value. It
>> depends
>> what wcscoll() returns. I think it should be changed to:
>> SELECT citext_cmp('B'::citext, 'a'::citext) > 0 AS one;
>
> The comment in varstr_cmp() claims that it returns -1, 0 or 1.
> That's not accurate then.
>
> Comment and test case fixed. I considered changing varstr_cmp to
> really return -1, 0 or 1, but I didn't because the behavior has been
> unchanged for ages and all the callers are happy with it. That's a
> heavily called function so any extra cycles there could make a
> difference.
Thanks, I also changed it in my version for 8.3.
https://svn.kineticode.com/citext/trunk/
Best,
David