Re: [BUGS] BUG #8676: Bug Money JSON
От | Andrew Dunstan |
---|---|
Тема | Re: [BUGS] BUG #8676: Bug Money JSON |
Дата | |
Msg-id | 52BDFDEA.3000304@dunslane.net обсуждение исходный текст |
Ответ на | Re: [BUGS] BUG #8676: Bug Money JSON (Andrew Dunstan <andrew@dunslane.net>) |
Список | pgsql-hackers |
On 12/26/2013 01:17 PM, Andrew Dunstan wrote: > > On 12/17/2013 11:16 AM, Andrew Dunstan wrote: >> >> On 12/17/2013 10:31 AM, Tom Lane wrote: >>> Andrew Dunstan <andrew@dunslane.net> writes: >>>>> On Wed, Dec 11, 2013 at 02:30:04PM +0000, >>>>> email@andersonloyola.com.br wrote: >>>>>> postgres=# SELECT to_json(a) FROM (VALUES(1000::money)) a(salario); >>>>>> to_json >>>>>> ----------------------- >>>>>> {"salario":$1,000.00} >>>>>> (1 row) >>>> Yeah. I'll have a look. In fact this looks like it's possibly a couple >>>> of bugs. The JSON produced by the first query is not valid. It looks >>>> like we might need to force money to text unconditionally. >>> Isn't this simply failure to quote the string properly? What drives >>> to_json's choice of whether to quote or not, anyway? >>> >>> >> >> >> If it's numeric, it only quotes if it sees a non-numeric character, >> defined thus: >> >> /* letters appearing in numeric output that aren't valid in a JSON >> number */ >> #define NON_NUMERIC_LETTER "NnAaIiFfTtYy" >> >> >> I forgot about money when I did that - some of this dates back to 9.2. >> >> I'm about to test the attached patch which should force money to be >> quoted always. >> >> > > > This turned out to be not such a good idea. Quite apart from anything > else it doesn't handle domains over money at all well. > > The attached patch abandons the test described above, and instead > passes the string from the output function to the json number lexer to > see if it's a valid json number. A small adjustment to the API of > that function was required to make it suitable for this use. This > seems like a much more robust approach. > > Applied. cheers andrew
В списке pgsql-hackers по дате отправления: