On Wed, 21 Oct 2026 14:43:04 +0800, Keyerror Smart <[email protected]> 
wrote:
> Hi Greg Burd,
> Thanks for the review and the +1, and glad to hear you ran into the
> same issue.
> Regards,
> Zhenglong Li

Happy to help out Zhenglong, now we just need to get the attention
of a committer who has interest in a fix like this.  They are quite
busy at the moment, so let's be patient.

-greg

> Greg Burd <[email protected]> 于2026年10月21日周三 02:56写道:
> 
> >
> > On Monday, August 24th, 2026 at 6:13 AM, Keyerror Smart <
> > [email protected]> wrote:
> >
> > > Hi, while testing JSON PASSING, I ran into a minor strictness handling
> > bug.
> > >
> > > JsonExpr is implicitly treated as a strict node in
> > contain_nonstrict_functions_walker(), but it
> > > isn't actually strict with respect to its PASSING arguments. For
> > instance:
> > > ```sqlSELECT v FROM (VALUES (1)) a
> > > LEFT JOIN (SELECT json_value('1', '$' PASSING y AS p) v
> > >            FROM (VALUES (1),(2)) b(y)) ss ON false;
> > > -- Return 1, not correct
> > >
> > > -- pull-up plan
> > > EXPLAIN (COSTS OFF)
> > > SELECT v FROM (VALUES (1)) a
> > > LEFT JOIN (SELECT json_value('1', '$' PASSING y AS p) v
> > >            FROM (VALUES (1),(2)) b(y)) ss ON false;
> > >              QUERY PLAN
> > > ------------------------------------
> > >  Nested Loop Left Join
> > >    Disabled: true
> > >    Join Filter: false
> > >    ->  Result
> > >    ->  Result
> > >          Replaces: Scan on *VALUES*
> > >          One-Time Filter: false
> > >  Optimizer: Postgres-based planner
> > > (8 rows)
> > >
> > > -- Using OFFSET 0 to prevent pulling up
> > > SELECT v FROM (VALUES (1)) a
> > > LEFT JOIN (SELECT json_value('1', '$' PASSING y AS p) v
> > >            FROM (VALUES (1),(2)) b(y) OFFSET 0) ss ON false;
> > > -- Return NULL, correct
> > > ```
> > >
> > > Fix by treating JsonExpr as non-strict, as we already do for CASE,
> > > COALESCE and similar constructs.  This is conservative -- a JsonExpr
> > > with no PASSING arguments and constant ON EMPTY / ON ERROR behaviors
> > > is in fact strict -- but distinguishing those cases hardly seems worth
> > > the trouble.
> > >
> > > Patch attached.
> > >
> > > Regards,
> > > Zhenglong Li
> >
> > Hello Zhenglong Li,
> >
> > I just happened upon this same issue yesterday in my testing.  I was about
> > to start a thread when I found yours so I reviewed your patch.
> >
> > The diagnosis is right, JsonExpr is not strict with respect to its PASSING
> > arguments, so treating it as non-strict in
> > contain_nonstrict_functions_walker()
> > is the correct call, and matching CASE/COALESCE seems to me to be the
> > natural
> > place for it.
> >
> > So +1 from me on the approach and the patch. The conservative choice seems
> > right, that case is rare and the cost of getting it wrong is a wrong
> > answer.
> >
> > best.
> >
> > -greg
> >



Reply via email to