Re: [GENERAL] trouble with to_char('L')

From: Hiroshi Inoue <inoue(at)tpf(dot)co(dot)jp>
To: Bruce Momjian <bruce(at)momjian(dot)us>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>, Mikko <mhannesy(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [GENERAL] trouble with to_char('L')
Date: 2010-03-02 14:40:46
Message-ID: 4B8D236E.8090601@tpf.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

Bruce Momjian wrote:
> Hiroshi Inoue wrote:
>> Bruce Momjian wrote:
>>> Bruce Momjian wrote:
>>>> Hiroshi Inoue wrote:
>>>>> Bruce Momjian wrote:
>>>>>> Hiroshi Inoue wrote:
>>>>>>> Bruce Momjian wrote:
>>>>>>>> Where are we on this issue?
>>>>>>> Oops I forgot it completely.
>>>>>>> I have a little improved version and would post it tonight.
>>>>>> Ah, very good. Thanks.
>>>>> Attached is an improved version.
>>>> I spent many hours on this patch and am attaching an updated version.
>>>> I have restructured the code and added many comments, but this is the
>>>> main one:
>>>>
>>>> * Ideally, the server encoding and locale settings would
>>>> * always match. Unfortunately, WIN32 does not support UTF-8
>>>> * values for setlocale(), even though PostgreSQL runs fine with
>>>> * a UTF-8 encoding on Windows:
>>>> *
>>>> * http://msdn.microsoft.com/en-us/library/x99tb11d.aspx
>>>> *
>>>> * Therefore, we must set LC_CTYPE to match LC_NUMERIC and
>>>> * LC_MONETARY, call localeconv(), and use mbstowcs() to
>>>> * convert the locale-aware string, e.g. Euro symbol, which
>>>> * is not in UTF-8 to the server encoding.
>>>>
>>>> I need someone with WIN32 experience to review and test this patch.
>>> I don't understand why cache_locale_time() works on Windows. It sets
>>> the LC_CTYPE but does not do any encoding coversion.
>> Doesn't strftime_win32 do the conversion?
>
> Oh, I now see strftime is redefined as a macro in that C files. Thanks.
>
>>> Do month and
>>> day-of-week names not work either, or do they work and the encoding
>>> conversion for numeric/money, e.g. Euro, it not necessary?
>> db_strdup does the conversion.
>
> Should we pull the encoding conversion into a separate function and have
> strftime_win32() and db_strdup() both call it?

We may be able to pull the conversion WideChars => UTF8 =>
a PG encoding into an function.

BTW both PGLC_localeconv() and cache_locale_time() save the current
LC_CTYPE first and restore them just before returning the functions.
I'm suspicious if it's OK when errors occur in middle of the functions.

regards,
Hiroshi Inoue

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Antonio Goméz Soto 2010-03-02 14:49:19 Re: How to grant a user read-only access to a database?
Previous Message Pavel Stehule 2010-03-02 12:35:00 Re: need a query

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2010-03-02 14:42:38 Re: USE_LIBXSLT in MSVC builds
Previous Message Theo Schlossnagle 2010-03-02 14:37:12 Re: double and numeric conversion