Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a5b81b6

Browse files
committed
Fix bugs in comparison functions for multirange_bsearch_match()
Two functions multirange_range_overlaps_bsearch_comparison() and multirange_range_contains_bsearch_comparison() contain bugs of returning -1 instead of 1. This commit fixes these bugs and adds corresponding regression tests.
1 parent 1b3433e commit a5b81b6

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

src/backend/utils/adt/multirangetypes.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1660,7 +1660,7 @@ multirange_range_contains_bsearch_comparison(TypeCacheEntry *typcache,
16601660
if (range_cmp_bounds(typcache, keyUpper, lower) < 0)
16611661
return -1;
16621662
if (range_cmp_bounds(typcache, keyLower, upper) > 0)
1663-
return -1;
1663+
return 1;
16641664

16651665
/*
16661666
* At this point we found overlapping range. But we have to check if it
@@ -1825,7 +1825,7 @@ multirange_range_overlaps_bsearch_comparison(TypeCacheEntry *typcache,
18251825
if (range_cmp_bounds(typcache, keyUpper, lower) < 0)
18261826
return -1;
18271827
if (range_cmp_bounds(typcache, keyLower, upper) > 0)
1828-
return -1;
1828+
return 1;
18291829

18301830
*match = true;
18311831
return 0;

src/test/regress/expected/multirangetypes.out

+12
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,12 @@ SELECT nummultirange(numrange(1,2), numrange(3.5,8)) && nummultirange(numrange(3
834834
t
835835
(1 row)
836836

837+
select '{(10,20),(30,40),(50,60)}'::nummultirange && '(42,92)'::numrange;
838+
?column?
839+
----------
840+
t
841+
(1 row)
842+
837843
-- contains
838844
SELECT nummultirange() @> nummultirange();
839845
?column?
@@ -967,6 +973,12 @@ SELECT '{[1,5), [6,9)}'::nummultirange @> '{[6,7)}';
967973
t
968974
(1 row)
969975

976+
select '{(10,20),(30,40),(50,60)}'::nummultirange @> '(52,56)'::numrange;
977+
?column?
978+
----------
979+
t
980+
(1 row)
981+
970982
-- is contained by
971983
SELECT nummultirange() <@ nummultirange();
972984
?column?

src/test/regress/sql/multirangetypes.sql

+2
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ SELECT nummultirange(numrange(1,2), numrange(7,8)) && nummultirange(numrange(3,4
162162
SELECT nummultirange(numrange(3,4)) && nummultirange(numrange(1,2), numrange(3.5,8));
163163
SELECT nummultirange(numrange(1,2), numrange(3.5,8)) && numrange(3,4);
164164
SELECT nummultirange(numrange(1,2), numrange(3.5,8)) && nummultirange(numrange(3,4));
165+
select '{(10,20),(30,40),(50,60)}'::nummultirange && '(42,92)'::numrange;
165166

166167
-- contains
167168
SELECT nummultirange() @> nummultirange();
@@ -186,6 +187,7 @@ SELECT '{[-4,-2), [1,5)}'::nummultirange @> '{[1,5)}';
186187
SELECT '{[1,5), [8,9)}'::nummultirange @> '{[1,5)}';
187188
SELECT '{[1,5), [8,9)}'::nummultirange @> '{[6,7)}';
188189
SELECT '{[1,5), [6,9)}'::nummultirange @> '{[6,7)}';
190+
select '{(10,20),(30,40),(50,60)}'::nummultirange @> '(52,56)'::numrange;
189191

190192
-- is contained by
191193
SELECT nummultirange() <@ nummultirange();

0 commit comments

Comments
 (0)