Re: BUG #13996: json_to_record() returns non-NULL, malformed value for omitted key under some circumstances
От | Tom Lane |
---|---|
Тема | Re: BUG #13996: json_to_record() returns non-NULL, malformed value for omitted key under some circumstances |
Дата | |
Msg-id | 26373.1456967099@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | BUG #13996: json_to_record() returns non-NULL, malformed value for omitted key under some circumstances (johann@visagie.za.net) |
Ответы |
Re: BUG #13996: json_to_record() returns non-NULL, malformed
value for omitted key under some circumstances
|
Список | pgsql-bugs |
johann@visagie.za.net writes: > SELECT t.* > FROM json_to_record('{"a":1, "b":{"c":16, "d":2}, "x":8}'::json) > AS t(a int, b json, c text, x int); > However, if (as in this example) another key in the JSON object - `b` in > this case - refers to a nested JSON object which *does* contain a key `c`, > the function returns a malformed JSON string as (text) value for column > `c`: > a | b | c | x > ---+----------------+---------+--- > 1 | {"c":16,"d":2} | {"c":16 | 8 > (1 row) AFAICT this is a simple thinko in the hash_object_field_end() callback, as per attached patch that fixes this and doesn't break any existing regression test cases. Andrew, do you concur that this is correct, or is there something I'm missing about the tracking of lex_level? regards, tom lane diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 88225aa..363afa7 100644 *** a/src/backend/utils/adt/jsonfuncs.c --- b/src/backend/utils/adt/jsonfuncs.c *************** hash_object_field_end(void *state, char *** 2438,2444 **** /* * Ignore nested fields. */ ! if (_state->lex->lex_level > 2) return; /* --- 2438,2444 ---- /* * Ignore nested fields. */ ! if (_state->lex->lex_level > 1) return; /*
В списке pgsql-bugs по дате отправления: