Fix setrefs.c code for Result Cache nodes
Result Cache, added in 9eacee2e6 neglected to properly adjust the plan references in setrefs.c. This could lead to the following error during EXPLAIN: ERROR: cannot decompile join alias var in plan tree Fix that. Bug: 17030 Reported-by: Hans Buschmann Discussion: https://postgr.es/m/17030-5844aecae42fe223@postgresql.org
This commit is contained in:
parent
c242baa4a8
commit
cba5c70b95
@ -756,6 +756,12 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset)
|
|||||||
{
|
{
|
||||||
ResultCache *rcplan = (ResultCache *) plan;
|
ResultCache *rcplan = (ResultCache *) plan;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Result Cache does not evaluate its targetlist. It just
|
||||||
|
* uses the same targetlist from its outer subnode.
|
||||||
|
*/
|
||||||
|
set_dummy_tlist_references(plan, rtoffset);
|
||||||
|
|
||||||
rcplan->param_exprs = fix_scan_list(root, rcplan->param_exprs,
|
rcplan->param_exprs = fix_scan_list(root, rcplan->param_exprs,
|
||||||
rtoffset,
|
rtoffset,
|
||||||
NUM_EXEC_TLIST(plan));
|
NUM_EXEC_TLIST(plan));
|
||||||
|
@ -4216,8 +4216,8 @@ where t1.f1 = ss.f1;
|
|||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
Nested Loop
|
Nested Loop
|
||||||
Output: t1.f1, i8.q1, i8.q2, q1, f1
|
Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1
|
||||||
Join Filter: (t1.f1 = f1)
|
Join Filter: (t1.f1 = t2.f1)
|
||||||
-> Nested Loop Left Join
|
-> Nested Loop Left Join
|
||||||
Output: t1.f1, i8.q1, i8.q2
|
Output: t1.f1, i8.q1, i8.q2
|
||||||
-> Seq Scan on public.text_tbl t1
|
-> Seq Scan on public.text_tbl t1
|
||||||
@ -4228,7 +4228,7 @@ where t1.f1 = ss.f1;
|
|||||||
Output: i8.q1, i8.q2
|
Output: i8.q1, i8.q2
|
||||||
Filter: (i8.q2 = 123)
|
Filter: (i8.q2 = 123)
|
||||||
-> Result Cache
|
-> Result Cache
|
||||||
Output: q1, f1
|
Output: (i8.q1), t2.f1
|
||||||
Cache Key: i8.q1
|
Cache Key: i8.q1
|
||||||
-> Limit
|
-> Limit
|
||||||
Output: (i8.q1), t2.f1
|
Output: (i8.q1), t2.f1
|
||||||
@ -4255,13 +4255,13 @@ select * from
|
|||||||
lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,
|
lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,
|
||||||
lateral (select ss1.* from text_tbl t3 limit 1) as ss2
|
lateral (select ss1.* from text_tbl t3 limit 1) as ss2
|
||||||
where t1.f1 = ss2.f1;
|
where t1.f1 = ss2.f1;
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
--------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Nested Loop
|
Nested Loop
|
||||||
Output: t1.f1, i8.q1, i8.q2, q1, f1, q1, f1
|
Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1, ((i8.q1)), (t2.f1)
|
||||||
Join Filter: (t1.f1 = f1)
|
Join Filter: (t1.f1 = (t2.f1))
|
||||||
-> Nested Loop
|
-> Nested Loop
|
||||||
Output: t1.f1, i8.q1, i8.q2, q1, f1
|
Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1
|
||||||
-> Nested Loop Left Join
|
-> Nested Loop Left Join
|
||||||
Output: t1.f1, i8.q1, i8.q2
|
Output: t1.f1, i8.q1, i8.q2
|
||||||
-> Seq Scan on public.text_tbl t1
|
-> Seq Scan on public.text_tbl t1
|
||||||
@ -4272,19 +4272,19 @@ where t1.f1 = ss2.f1;
|
|||||||
Output: i8.q1, i8.q2
|
Output: i8.q1, i8.q2
|
||||||
Filter: (i8.q2 = 123)
|
Filter: (i8.q2 = 123)
|
||||||
-> Result Cache
|
-> Result Cache
|
||||||
Output: q1, f1
|
Output: (i8.q1), t2.f1
|
||||||
Cache Key: i8.q1
|
Cache Key: i8.q1
|
||||||
-> Limit
|
-> Limit
|
||||||
Output: (i8.q1), t2.f1
|
Output: (i8.q1), t2.f1
|
||||||
-> Seq Scan on public.text_tbl t2
|
-> Seq Scan on public.text_tbl t2
|
||||||
Output: i8.q1, t2.f1
|
Output: i8.q1, t2.f1
|
||||||
-> Result Cache
|
-> Result Cache
|
||||||
Output: q1, f1
|
Output: ((i8.q1)), (t2.f1)
|
||||||
Cache Key: q1, f1
|
Cache Key: (i8.q1), t2.f1
|
||||||
-> Limit
|
-> Limit
|
||||||
Output: (q1), (f1)
|
Output: ((i8.q1)), (t2.f1)
|
||||||
-> Seq Scan on public.text_tbl t3
|
-> Seq Scan on public.text_tbl t3
|
||||||
Output: q1, f1
|
Output: (i8.q1), t2.f1
|
||||||
(28 rows)
|
(28 rows)
|
||||||
|
|
||||||
select * from
|
select * from
|
||||||
|
Loading…
x
Reference in New Issue
Block a user