Re: [HACKERS] PATCH: recursive json_populate_record()

Поиск
Список
Период
Сортировка
От Nikita Glukhov
Тема Re: [HACKERS] PATCH: recursive json_populate_record()
Дата
Msg-id 295ad4a5-2923-1834-5140-35d0b9a5818c@postgrespro.ru
обсуждение исходный текст
Ответ на Re: [HACKERS] PATCH: recursive json_populate_record()  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: [HACKERS] PATCH: recursive json_populate_record()  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 25.01.2017 23:58, Tom Lane wrote:
> I think you need to take a second look at the code you're producing
> and realize that it's not so clean either.  This extract from
> populate_record_field, for example, is pretty horrid:

But what if we introduce some helper macros like this:

#define JsValueIsNull(jsv) \    ((jsv)->is_json ? !(jsv)->val.json.str \        : !(jsv)->val.jsonb ||
(jsv)->val.jsonb->type== jbvNull)
 

#define JsValueIsString(jsv) \    ((jsv)->is_json ? (jsv)->val.json.type == JSON_TOKEN_STRING \        :
(jsv)->val.jsonb&& (jsv)->val.jsonb->type == jbvString)
 

     /* prepare column metadata cache for the given type */     if (col->typid != typid || col->typmod != typmod)
 prepare_column_cache(col, typid, typmod, mcxt, jsv->is_json);
 
     *isnull = JsValueIsNull(jsv);
     typcat = col->typcat;
     /* try to convert json string to a non-scalar type through input function */     if (JsValueIsString(jsv) &&
 (typcat == TYPECAT_ARRAY || typcat == TYPECAT_COMPOSITE))         typcat = TYPECAT_SCALAR;
 
     /* we must perform domain checks for NULLs */     if (*isnull && typcat != TYPECAT_DOMAIN)         return (Datum)
0;

-- 
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tobias Oberstein
Дата:
Сообщение: Re: [HACKERS] lseek/read/write overhead becomes visible at scale ..
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: [HACKERS] patch: function xmltable