postgres.git / summary / log / commit / refs

commit    ce093aa18062f64d5eb16175e361cc34a222c1db
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sun Dec 04 18:48:12 2022 +0000

    Fix broken MemoizePath support in reparameterize_path().
    
    It neglected to recurse to the subpath, meaning you'd get back
    a path identical to the input.  This could produce wrong query
    results if the omission meant that the subpath fails to enforce
    some join clause it should be enforcing.  We don't have a test
    case for this at the moment, but the code is obviously broken
    and the fix is equally obvious.  Back-patch to v14 where
    Memoize was introduced.
    
    Richard Guo
    
    Discussion: https://postgr.es/m/CAMbWs4_R=ORpz=Lkn2q3ebPC5EuWyfZF+tmfCPVLBVK5W39mHA@mail.gmail.com


src/backend/optimizer/util/pathnode.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index ad3070352f0..a3880c7624c 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -3937,9 +3937,15 @@ reparameterize_path(PlannerInfo *root, Path *path, case T_Memoize: { MemoizePath *mpath = (MemoizePath *) path; + Path *spath = mpath->subpath; + spath = reparameterize_path(root, spath, + required_outer, + loop_count); + if (spath == NULL) + return NULL; return (Path *) create_memoize_path(root, rel, - mpath->subpath, + spath, mpath->param_exprs, mpath->hash_operators, mpath->singlerow, [parent: ec3daeec316f]