Re: [BUGS] BUG #14849: jsonb_build_object doesn't like VARIADIC calls very much

From: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Andrew Dunstan <andrew(dot)dunstan(at)2ndquadrant(dot)com>, Dmitry Dolgov <9erthalion6(at)gmail(dot)com>, Marko Tiikkaja <marko(at)joh(dot)to>, PostgreSQL mailing lists <pgsql-bugs(at)postgresql(dot)org>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [BUGS] BUG #14849: jsonb_build_object doesn't like VARIADIC calls very much
Date: 2017-10-22 22:03:13
Message-ID: CAB7nPqRqcqnyBQDKi_v+bMGwq8UjPKVNzUAesK0b5Q_LJRewiw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

On Mon, Oct 23, 2017 at 6:11 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> This comment is neither correct nor intelligible:
>
> /* important for value, key cannot being NULL */
>
> I'd say just drop it.

Yep.

> The checks for "could not determine data type" errors seem
> rather duplicative, too.

Yep.

> <compulsive-neatnik-ism>
> The extern declaration seems to have been dropped in a rather
> random place in the .h file.
> </compulsive-neatnik-ism>

funcapi.h/c are nicely documented. I think that more is needed.

> 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.
*
--
Michael

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message gomer94 2017-10-23 07:44:58 BUG #14866: The generated constraint in the typed table causes the server to crash
Previous Message Tom Lane 2017-10-22 21:11:09 Re: BUG #14849: jsonb_build_object doesn't like VARIADIC calls very much

Browse pgsql-hackers by date

  From Date Subject
Next Message John Lumby 2017-10-23 00:30:30 legitimacy of using PG_TRY , PG_CATCH , PG_END_TRY in C function
Previous Message Eric Ridge 2017-10-22 21:44:12 Re: How to determine that a TransactionId is really aborted?