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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 12 additions & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy