From ccfeb7e12d4140e9c5f91741ba00f15fa9fffef1 Mon Sep 17 00:00:00 2001 From: Richard Guo Date: Thu, 3 Aug 2023 10:18:53 +0800 Subject: [PATCH v2] Fix bogus Asserts in calc_non_nestloop_required_outer --- src/backend/optimizer/util/pathnode.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 0b1d17b9d3..3ddc867d06 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -2396,9 +2396,20 @@ calc_non_nestloop_required_outer(Path *outer_path, Path *inner_path) Relids inner_paramrels = PATH_REQ_OUTER(inner_path); Relids required_outer; - /* neither path can require rels from the other */ - Assert(!bms_overlap(outer_paramrels, inner_path->parent->relids)); - Assert(!bms_overlap(inner_paramrels, outer_path->parent->relids)); + /* + * Neither path can require rels from the other. + * + * Note that paths are parameterized by top-level parents, so run + * parameterization tests on the parent relids. + */ + Assert(!bms_overlap(outer_paramrels, + inner_path->parent->top_parent_relids ? + inner_path->parent->top_parent_relids : + inner_path->parent->relids)); + Assert(!bms_overlap(inner_paramrels, + outer_path->parent->top_parent_relids ? + outer_path->parent->top_parent_relids : + outer_path->parent->relids)); /* form the union ... */ required_outer = bms_union(outer_paramrels, inner_paramrels); /* we do not need an explicit test for empty; bms_union gets it right */ -- 2.31.0