v2-0001-Fix-bogus-Asserts-in-calc_non_nestloop_required_outer.patch

application/octet-stream

Filename: v2-0001-Fix-bogus-Asserts-in-calc_non_nestloop_required_outer.patch
Type: application/octet-stream
Part: 0
Message: Re: Fix bogus Asserts in calc_non_nestloop_required_outer

Patch

Format: format-patch
Series: patch v2-0001
Subject: Fix bogus Asserts in calc_non_nestloop_required_outer
File+
src/backend/optimizer/util/pathnode.c 14 3
From ccfeb7e12d4140e9c5f91741ba00f15fa9fffef1 Mon Sep 17 00:00:00 2001
From: Richard Guo <guofenglinux@gmail.com>
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