Hi Haibo, Thank you for picking this up again. I agree with the changes you made in v5, in particular scoping the patch to the three strict operators and reworking the tests to check plan structure rather than exact row counts.
Attached is v6 as a 3-patch series building on your v5. Patch 1 is your range join selectivity patch with one small change: the range_cmp_bounds result in the merge walk is stored in a local cmp variable to avoid calling it twice per iteration, as jian he suggested. Patch 2 adds the same estimation for multirange types, covering all type combinations (multirange x multirange, multirange x range, range x multirange). Since both range and multirange types use the same bound histogram format and the same RangeBound representation, the core algorithm is identical. Patch 3 removes the duplication between rangetypes_selfuncs.c and multirangetypes_selfuncs.c that Tom raised as a concern. It makes the 10 shared helper functions non-static, exports them via selfuncs.h, and deletes the copies from the multirange file. This covers all the pre-existing duplication between the two files, not just the functions added in this patch set. Regards, Maxime
v6-0001-Improve-range-join-selectivity-estimation-for.patch
Description: v6-0001-Improve-range-join-selectivity-estimation-for.patch
v6-0002-Improve-multirange-join-selectivity-estimation-fo.patch
Description: v6-0002-Improve-multirange-join-selectivity-estimation-fo.patch
v6-0003-Remove-duplicate-selectivity-functions-between-ra.patch
Description: v6-0003-Remove-duplicate-selectivity-functions-between-ra.patch
