Thread: citex regression fails with de.UTF8 locale

citex regression fails with de.UTF8 locale

From
Zdenek Kotala
Date:
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






Re: citex regression fails with de.UTF8 locale

From
Heikki Linnakangas
Date:
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


Re: citex regression fails with de.UTF8 locale

From
Zdenek Kotala
Date:
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



Re: citex regression fails with de.UTF8 locale

From
"David E. Wheeler"
Date:
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