Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
Thread:
Lists: pgsql-generalpgsql-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

pgsql-hackers by date

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

pgsql-general by date

Next:From: Antonio Gom├ęz SotoDate: 2010-03-02 14:49:19
Subject: Re: How to grant a user read-only access to a database?
Previous:From: Pavel StehuleDate: 2010-03-02 12:35:00
Subject: Re: need a query

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group