aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-12-04 13:48:12 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2022-12-04 13:48:12 -0500
commit834d97c32b712c170594378d27385638c5b87c60 (patch)
tree364c0535027c7c68e7f8558cabc43bacb5d3fa00 /src
parentbf8fd64ff5e65f8964d1b52c50019f0198ec5f5e (diff)
downloadpostgresql-834d97c32b712c170594378d27385638c5b87c60.tar.gz
postgresql-834d97c32b712c170594378d27385638c5b87c60.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/util/pathnode.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index 0762eb232e4..bc9958a1d27 100644
--- a/src/backend/optimizer/util/pathnode.c
+++ b/src/backend/optimizer/util/pathnode.c
@@ -3952,9 +3952,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,