Re: Patch to make Turks happy.

Nicolai Tufar <ntufar@apb.com.tr>

From: Nicolai Tufar <ntufar@apb.com.tr>
To: Bruce Momjian <pgman@candle.pha.pa.us>
Cc: pgsql-hackers@postgresql.org, pgsql-patches@postgresql.org
Date: 2002-12-05T21:01:22Z
Lists: pgsql-hackers
Bruce Momjian wrote:
> I am not going to apply this patch because I think it will mess up the
> handling of other locales.

As far as I figured from the source code this function only deals with 
cleaning up
locale names and nothing else. Since all the locale names are in plain 
ASCII I think
it will be safe to use ASCII-only lower-case conversion.

By the way, I noticed only after sending the patch that compiler 
complains about
ambiguous `else' so it can be rewritten as:

  	 
	if (*p >= 'A' && *p <= 'Z'){
  	 
		*np++ = *p + 'a' - 'A';
  	 
	}else{
  	 
		*np++ = *p;
			}



Regards,
Nicolai


> 
> 
> ---------------------------------------------------------------------------
> 
> Nicolai Tufar wrote:
> 
>>Hi,
>>
>>Yet another problem with Turkish encoding. clean_encoding_name()
>>in src/backend/utils/mb/encnames.c uses tolower() to convert locale
>>names to lower-case. This causes errors if locale name contains
>>capital "I" and current olcale is Turkish. Some examples:
>>
>>aaa=# \l
>>      List of databases
>>   Name    | Owner | Encoding
>>-----------+-------+----------
>> aaa       | pgsql | LATIN5
>> bbb       | pgsql | LATIN5
>> template0 | pgsql | LATIN5
>> template1 | pgsql | LATIN5
>>(4 rows)
>>aaa=# CREATE DATABASE ccc ENCODING='LATIN5';
>>ERROR:  LATIN5 is not a valid encoding name
>>aaa=# \encoding
>>SQL_ASCII
>>aaa=# \encoding SQL_ASCII
>>SQL_ASCII: invalid encoding name or conversion procedure not found
>>aaa=# \encoding LATIN5
>>LATIN5: invalid encoding name or conversion procedure not found
>>
>>
>>Patch, is a simple change to use ASCII-only lower-case conversion 
>>instead of locale-dependent tolower()
>>
>>Best regards,
>>Nic.
>>
>>
>>
>>
>>
>>
>>*** ./src/backend/utils/mb/encnames.c.orig	Mon Dec  2 15:58:49 2002
>>--- ./src/backend/utils/mb/encnames.c	Mon Dec  2 18:13:23 2002
>>***************
>>*** 407,413 ****
>>  	for (p = key, np = newkey; *p != '\0'; p++)
>>  	{
>>  		if (isalnum((unsigned char) *p))
>>! 			*np++ = tolower((unsigned char) *p);
>>  	}
>>  	*np = '\0';
>>  	return newkey;
>>--- 407,416 ----
>>  	for (p = key, np = newkey; *p != '\0'; p++)
>>  	{
>>  		if (isalnum((unsigned char) *p))
>>! 			if (*p >= 'A' && *p <= 'Z')
>>! 				*np++ = *p + 'a' - 'A';
>>! 			else
>>! 				*np++ = *p;
>>  	}
>>  	*np = '\0';
>>  	return newkey;
>>
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 4: Don't 'kill -9' the postmaster
>>
> 
>