Add bms_next_member(), and use it where appropriate.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 28 Nov 2014 18:37:25 +0000 (13:37 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 28 Nov 2014 18:37:25 +0000 (13:37 -0500)
commitf4e031c662a6b600b786c4849968a099c58fcce7
tree6a082f889ff2ea5b64bb43c467760686e5f013b0
parent96d66bcfc60d9bcb7db767f23d33abf4d8bc7021
Add bms_next_member(), and use it where appropriate.

This patch adds a way of iterating through the members of a bitmapset
nondestructively, unlike the old way with bms_first_member().  While
bms_next_member() is very slightly slower than bms_first_member()
(at least for typical-size bitmapsets), eliminating the need to palloc
and pfree a temporary copy of the target bitmapset is a significant win.
So this method should be preferred in all cases where a temporary copy
would be necessary.

Tom Lane, with suggestions from Dean Rasheed and David Rowley
13 files changed:
contrib/postgres_fdw/postgres_fdw.c
contrib/sepgsql/dml.c
src/backend/executor/execMain.c
src/backend/nodes/bitmapset.c
src/backend/nodes/outfuncs.c
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/indxpath.c
src/backend/optimizer/util/joininfo.c
src/backend/optimizer/util/var.c
src/backend/rewrite/rewriteHandler.c
src/backend/rewrite/rewriteManip.c
src/include/nodes/bitmapset.h
src/pl/plpgsql/src/pl_exec.c