| From: | Nikhil Sontakke <nikkhils(at)gmail(dot)com> |
|---|---|
| To: | Matt Blewitt <mble(at)planetscale(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 09:45:18 |
| Message-ID: | CANgU5ZcnnModnAxCKbws0bHPL8pq2g4sRzXtHZ1BY3yh_RB0GQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
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.
>>>>
>>>
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Miłosz Bieniek | 2026-08-27 10:21:53 | Re: Remove unused arguments from split_selfjoin_quals() |
| Previous Message | shveta malik | 2026-08-27 09:42:03 | Re: Proposal: Conflict log history table for Logical Replication |