| From: | Matt Blewitt <mble(at)planetscale(dot)com> |
|---|---|
| To: | Nikhil Sontakke <nikkhils(at)gmail(dot)com> |
| Cc: | Zsolt Parragi <zsolt(dot)parragi(at)percona(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Subject: | Re: [PATCH] Fix JSON_SERIALIZE() coercion placeholder type for jsonb input |
| Date: | 2026-08-27 13:20:11 |
| Message-ID: | CACy-Nv2M8_0UnTS0oFb+8yW1pgi_m-h4CpQjXODs0xbdrTkjew@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Nikhil,
Thanks for the follow-up review. Attached is v3 with the stricter argument
assertion, explicit Node * cast, and implicit typmod-coercion test. I also
rebased it onto current master and ran the full core regression suite with
assertions enabled; all 243 tests passed.
Cheers,
Matt
On Thu, Aug 27, 2026 at 10:45 AM Nikhil Sontakke <nikkhils(at)gmail(dot)com> wrote:
> Hi Matt,
>
> Thanks for updating the patch. The simplified tests now cover the default
> text and bytea coercion paths,
> and the patch passes the full regression suite. Maybe the code can be
> tightened further like the example below:
>
> @@ -3743,8 +3742,8 @@ makeJsonConstructorExpr(ParseState *pstate,
> JsonConstructorType type,
>
> if (type == JSCTOR_JSON_SERIALIZE)
> {
> - Assert(args != NIL);
> - cte->typeId = exprType(linitial(args));
> + Assert(list_length(args) == 1);
> + cte->typeId = exprType((Node *) linitial(args));
> }
> else
>
> Also, I think, we can expand the tests to consider the implicit typmod
> conversion case as well:
>
> +-- Test implicit typmod coercion with jsonb input
> +SELECT JSON_SERIALIZE('{ "a" : 1 } '::jsonb RETURNING varchar(2));
>
>
> If no backpatch is intended (which I think is the case here),
> then any concerns about previously stored expression trees does not apply
> for this patch.
>
> Regards,
> Nikhil
>
> On Wed, Aug 26, 2026 at 5:44 PM Matt Blewitt <mble(at)planetscale(dot)com> wrote:
>
>> Hi Nikhil,
>>
>> Thanks - I've attached v2 with the revised test cases; there are no
>> functional changes from v1.
>>
>> Cheers,
>>
>> Matt
>>
>> On Wed, Aug 26, 2026 at 9:07 AM Nikhil Sontakke <nikkhils(at)gmail(dot)com>
>> wrote:
>>
>>> Hi Matt,
>>>
>>> I reviewed the patch and tested it against current master.
>>>
>>> I built the patch with assertions enabled and ran the full core
>>> regression suite. All 245 tests passed. I also tested:
>>>
>>> - typed jsonb parameters in prepared statements
>>> - default text, varchar, bytea, and string-domain results
>>> - NULL jsonb input
>>> - use inside a view and subsequent deparsing
>>>
>>> These all behaved as expected. I did not find any security,
>>> WAL/recovery, logical-replication, or performance concerns introduced by
>>> the patch.
>>>
>>> I have one comment:
>>>
>>> Regression tests
>>> To me, some of the additional coverage seems redundant:
>>>
>>> - The RETURNING int and RETURNING jsonb cases are rejected before
>>> reaching the changed code.
>>> - The RETURNING jsonb error is already tested immediately above with
>>> a non-jsonb input.
>>> - The new EXPLAIN cases verify deparsing but do not reveal which
>>> coercion function was selected.
>>>
>>> So, I think the test addition could be reduced to one default text case
>>> and one RETURNING bytea case.
>>>
>>> Otherwise, the implementation looks correct. It's simpler than
>>> converting every jsonb input to json every time.
>>>
>>> Regards,
>>>
>>> Nikhil
>>>
>>> On Tue, Mar 17, 2026 at 12:18 AM Matt Blewitt <mble(at)planetscale(dot)com>
>>> wrote:
>>>
>>>> Hi Zsolt,
>>>>
>>>> Thanks for testing that out and confirming it looks good against
>>>> master. Submitted to commitfest for further review and integration
>>>> consideration.
>>>>
>>>> Matt
>>>>
>>>> On Fri, Mar 13, 2026 at 11:20 PM Zsolt Parragi <
>>>> zsolt(dot)parragi(at)percona(dot)com> wrote:
>>>>
>>>>> Hello!
>>>>>
>>>>> This is a simple fix and it does what it says, it looks good to me.
>>>>>
>>>>> I did test it with a few more queries and compared it against master,
>>>>> all looks good.
>>>>>
>>>>
| Attachment | Content-Type | Size |
|---|---|---|
| v3-0001-Fix-JSON_SERIALIZE-coercion-placeholder-type-for-.patch | application/octet-stream | 4.6 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | torikoshia | 2026-08-27 13:22:03 | Re: RFC: Logging plan of the running query |
| Previous Message | William Bernbaum | 2026-08-27 13:04:37 | RE: Plan a filtering inner join as a semijoin |