From: David Rowley Date: Fri, 3 Oct 2025 23:19:31 +0000 (+1300) Subject: Use bms_add_members() instead of bms_union() when possible X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=5092aae431e3e1a20324ea3a42a181c63f703d0d;p=postgresql.git Use bms_add_members() instead of bms_union() when possible bms_union() causes a new set to be allocated. What this caller needs is members added to an existing set. bms_add_members() is the tool for that job. This is just a matter of fixing an inefficiency due to surplus memory allocations. No bugs being fixed. The only other place I found that might be valid to apply this change is in markNullableIfNeeded(), but I opted not to do that due to the risk to reward ratio not looking favorable. The risk being that there *could* be another pointer pointing to the Bitmapset. Author: David Rowley Reviewed-by: Greg Burd Reviewed-by: Tom Lane Discussion: https://postgr.es/m/CAApHDvoCcoS-p5tZNJLTxFOKTYNjqVh7Dwf+5ikDUBwnvWftRw@mail.gmail.com --- diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 6bd0f4a5dc3..6c0e2383af9 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -802,7 +802,7 @@ generate_union_paths(SetOperationStmt *op, PlannerInfo *root, linitial(rel->partial_pathlist)); } - relids = bms_union(relids, rel->relids); + relids = bms_add_members(relids, rel->relids); } /* Build result relation. */