Thread: 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