From: | "Nicolai Tufar" <ntufar(at)pisem(dot)net> |
---|---|
To: | "'Tom Lane'" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | <pgsql-hackers(at)postgresql(dot)org>, <devrim(at)tdmsoft(dot)com> |
Subject: | Re: 7.4.1 release status - Turkish Locale |
Date: | 2004-02-01 07:56:29 |
Message-ID: | 001801c3e899$294b8000$7a00a8c0@ntufar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> I still don't much like having a locale-specific wart in the parser
> (and the code you give could not work anyway --- for starters, the
> first argument of setlocale is not a pointer).
Aw, I see, my code broken. I got confused by locale_......_asign()
family
if functions. Sure, first argument need to be int. But as you said the
code
is a wart.
> A possible compromise is to apply ASCII downcasing (same as in
> keywords.c) for 7-bit-ASCII characters, and apply tolower() only
> for character codes above 127. In other words
>
> unsigned char ch = (unsigned char) ident[i];
>
> if (ch >= 'A' && ch <= 'Z')
> ch += 'a' - 'A';
> else if (ch > 127 && isupper(ch))
> ch = tolower(ch);
> ident[i] = (char) ch;
>
> In reasonably sane locales this will have the same effects as
currently,
> while in unsane locales it will ensure that basic-ASCII identifiers
are
> treated the way we want.
If we go this way why not make a special case only and only for 'I'
Character and not all 7-bit ASCII:
unsigned char ch = (unsigned char) ident[i];
if(ch == (unsigned char)'I')
ch = 'i';
else
ch = tolower(ch)
ident[i] = (char) ch;
Will it break any locales?
>
> regards, tom lane
Regards
Nicolai
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2004-02-01 08:17:26 | Re: 7.4.1 release status - Turkish Locale |
Previous Message | Tom Lane | 2004-02-01 06:31:27 | Re: Make length(char(n)) return 'true' length |