On Sun, Jun 18, 2023 at 10:57 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> James Coleman <jtc331@gmail.com> writes:
> > Over in "Parallelize correlated subqueries that execute within each
> > worker" [1} Richard Guo found a bug in the current version of my patch
> > in that thread. While debugging that issue I've been wondering why
> > Path's param_info field seems to be NULL unless there is a LATERAL
> > reference even though there may be non-lateral outer params
> > referenced.
>
> Per pathnodes.h:
>
> * "param_info", if not NULL, links to a ParamPathInfo that identifies outer
> * relation(s) that provide parameter values to each scan of this path.
> * That means this path can only be joined to those rels by means of nestloop
> * joins with this path on the inside. ...
>
> We're only interested in this for params that are coming from other
> relations of the same query level, so that they affect join order and
> join algorithm choices. Params coming down from outer query levels
> are much like EXTERN params to the planner: they are pseudoconstants
> for any one execution of the current query level.
>
> This isn't just LATERAL stuff; it's also intentionally-generated
> nestloop-with-inner-indexscan-cases. But it's not outer-level Params.
> Even though those are also PARAM_EXEC Params, they are fundamentally
> different animals for the planner's purposes.
Thanks for the explanation.
I wonder if it'd be worth clarifying the comment slightly to hint in
that direction (like the attached)?
Thanks,
James Coleman