Re: [BUGS] BUG #14849: jsonb_build_object doesn't like VARIADIC callsvery much
От | Michael Paquier |
---|---|
Тема | Re: [BUGS] BUG #14849: jsonb_build_object doesn't like VARIADIC callsvery much |
Дата | |
Msg-id | CAB7nPqR+XEVU=VZvAJrEVk9Hfn1gOdWHAuTzCSEOwBru2cCGoQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [BUGS] BUG #14849: jsonb_build_object doesn't like VARIADIC callsvery much (Michael Paquier <michael.paquier@gmail.com>) |
Ответы |
Re: [BUGS] BUG #14849: jsonb_build_object doesn't like VARIADIC callsvery much
|
Список | pgsql-bugs |
On Mon, Oct 23, 2017 at 7:03 AM, Michael Paquier <michael.paquier@gmail.com> wrote: >> Looks good otherwise. > > My set of diffs for funcapi.h are actually that: > * funcapi.h > * Definitions for functions which return composite type and/or sets > + * or work on VARIADIC inputs. > [...] > +/*---------- > + * Support to ease writing of functions dealing with VARIADIC inputs > + *---------- > + * > + * This function extracts a set of argument values, types and NULL markers > + * for a given input function. This returns a set of data: > + * - **values includes the set of Datum values extracted. > + * - **types the data type OID for each element. > + * - **nulls tracks if an element is NULL. > + * > + * convert_unknown set to true enforces conversion of unknown input type > + * unknown to text. > + * variadic_start tracks the argument number of the function call where the > + * VARIADIC set of arguments begins. > + * > + * The return result is the number of elements stored. In the event of a > + * NULL input, then the caller of this function ought to generate a NULL > + * object as final result, and in this case a result value of -1 is used > + * to be able to make the difference between an empty array or object. > + */ > +extern int extract_variadic_args(FunctionCallInfo fcinfo, int variadic_start, > + bool convert_unknown, Datum **values, > Oid **types, > + bool **nulls); > > Got this bit as well: > * funcapi.c > * Utility and convenience functions for fmgr functions that return > - * sets and/or composite types. > + * sets and/or composite types, or deal with VARIADIC inputs. > * Okay, attached is what I think a fully implemented patch should look like. On top of what Andrew has done, I added and reworked the following: - removed duplicate error handling. - documented the function in funcapi.h and funcapi.c. - Added a new section in funcapi.h to outline that this is for support of VARIADIC inputs. I have added a commit message as well. Hope this helps. format, concat and potentially count_nulls could take advantage of this new function, though refactoring is left for later. I am fine to do the legwork on a different thread. Changing count_nulls would also switch it to a o(n^2), which is not cool either, so I think that it could be left out. Still let's discuss that on another thread. -- Michael -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
Вложения
В списке pgsql-bugs по дате отправления: