diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index 8862004cbad..a6342e0a047 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -1422,6 +1422,22 @@ build_joinrel_tlist(PlannerInfo *root, RelOptInfo *joinrel, joinrel->reltarget->width = clamp_width_est(tuple_width); } +#ifdef USE_ASSERT_CHECKING +static bool +no_duplicate_clause_serials(List *clauses) +{ + Bitmapset *serials = NULL; + + foreach_node(RestrictInfo, rinfo, clauses) + { + if (bms_is_member(rinfo->rinfo_serial, serials)) + return false; + serials = bms_add_member(serials, rinfo->rinfo_serial); + } + return true; +} +#endif + /* * build_joinrel_restrictlist * build_joinrel_joinlist @@ -1499,6 +1515,8 @@ build_joinrel_restrictlist(PlannerInfo *root, inner_rel, sjinfo)); + Assert(no_duplicate_clause_serials(result)); + return result; } @@ -1797,6 +1815,8 @@ get_baserel_parampathinfo(PlannerInfo *root, RelOptInfo *baserel, #endif pclauses = list_concat(pclauses, eqclauses); + Assert(no_duplicate_clause_serials(pclauses)); + /* Compute set of serial numbers of the enforced clauses */ pserials = NULL; foreach(lc, pclauses) @@ -2012,6 +2032,8 @@ get_joinrel_parampathinfo(PlannerInfo *root, RelOptInfo *joinrel, */ *restrict_clauses = list_concat(pclauses, *restrict_clauses); + Assert(no_duplicate_clause_serials(*restrict_clauses)); + /* If we already have a PPI for this parameterization, just return it */ if ((ppi = find_param_path_info(joinrel, required_outer))) return ppi;