From 30d3a692607215b5dd98e15eddfe7128cbcfc245 Mon Sep 17 00:00:00 2001 From: Richard Guo Date: Tue, 20 Sep 2022 15:41:07 +0800 Subject: [PATCH v1] Display NestLoopParam across subplan --- src/backend/utils/adt/ruleutils.c | 34 ++----------------------- src/test/regress/expected/join.out | 8 +++--- src/test/regress/expected/subselect.out | 2 +- 3 files changed, 7 insertions(+), 37 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 2b7b1b0c0f..ee950fc6f6 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -7900,12 +7900,10 @@ find_param_referent(Param *param, deparse_context *context, { deparse_namespace *dpns; Plan *child_plan; - bool in_same_plan_level; ListCell *lc; dpns = (deparse_namespace *) linitial(context->namespaces); child_plan = dpns->plan; - in_same_plan_level = true; foreach(lc, dpns->ancestors) { @@ -7913,13 +7911,10 @@ find_param_referent(Param *param, deparse_context *context, ListCell *lc2; /* - * NestLoops transmit params to their inner child only; also, once - * we've crawled up out of a subplan, this couldn't possibly be - * the right match. + * NestLoops transmit params to their inner child only. */ if (IsA(ancestor, NestLoop) && - child_plan == innerPlan(ancestor) && - in_same_plan_level) + child_plan == innerPlan(ancestor)) { NestLoop *nl = (NestLoop *) ancestor; @@ -7977,35 +7972,10 @@ find_param_referent(Param *param, deparse_context *context, } } - /* We have emerged from a subplan. */ - in_same_plan_level = false; - /* SubPlan isn't a kind of Plan, so skip the rest */ continue; } - /* - * Check to see if we're emerging from an initplan of the current - * ancestor plan. Initplans never have any parParams, so no need - * to search that list, but we need to know if we should reset - * in_same_plan_level. - */ - foreach(lc2, ((Plan *) ancestor)->initPlan) - { - SubPlan *subplan = lfirst_node(SubPlan, lc2); - - if (child_plan != (Plan *) list_nth(dpns->subplans, - subplan->plan_id - 1)) - continue; - - /* No parameters to be had here. */ - Assert(subplan->parParam == NIL); - - /* We have emerged from an initplan. */ - in_same_plan_level = false; - break; - } - /* No luck, crawl up to next ancestor */ child_plan = (Plan *) ancestor; } diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index 2ed2e542a4..48cb0b9f35 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -5985,8 +5985,8 @@ lateral (select * from int8_tbl t1, where q2 = (select greatest(t1.q1,t2.q2)) and (select v.id=0)) offset 0) ss2) ss where t1.q1 = ss.q2) ss0; - QUERY PLAN ------------------------------------------------------------------ + QUERY PLAN +---------------------------------------------------------------------- Nested Loop Output: "*VALUES*".column1, t1.q1, t1.q2, ss2.q1, ss2.q2 -> Seq Scan on public.int8_tbl t1 @@ -6007,10 +6007,10 @@ lateral (select * from int8_tbl t1, One-Time Filter: $4 InitPlan 1 (returns $2) -> Result - Output: GREATEST($0, t2.q2) + Output: GREATEST(t1.q1, t2.q2) InitPlan 2 (returns $4) -> Result - Output: ($3 = 0) + Output: ("*VALUES*".column1 = 0) -> Seq Scan on public.int8_tbl t3 Output: t3.q1, t3.q2 Filter: (t3.q2 = $2) diff --git a/src/test/regress/expected/subselect.out b/src/test/regress/expected/subselect.out index 63d26d44fc..22af8fafa1 100644 --- a/src/test/regress/expected/subselect.out +++ b/src/test/regress/expected/subselect.out @@ -1155,7 +1155,7 @@ where o.ten = 0; SubPlan 1 -> Seq Scan on public.int4_tbl Output: int4_tbl.f1 - Filter: (int4_tbl.f1 <= $0) + Filter: (int4_tbl.f1 <= o.hundred) (14 rows) select sum(ss.tst::int) from -- 2.31.0