aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2020-12-29 23:35:38 +0300
committerAlexander Korotkov <akorotkov@postgresql.org>2020-12-29 23:35:38 +0300
commitd1d61a8b23b604faf797695eeacaa5da4fe64762 (patch)
tree1ebbd7ca6b59d9332c2e267683e9dd6c48e26624 /src/backend
parent4d7684cc754f312aee468abb83ca4f7da94b30a3 (diff)
downloadpostgresql-d1d61a8b23b604faf797695eeacaa5da4fe64762.tar.gz
postgresql-d1d61a8b23b604faf797695eeacaa5da4fe64762.zip
Improve the signature of internal multirange functions
There is a set of *_internal() functions exposed in include/utils/multirangetypes.h. This commit improves the signatures of these functions in two ways. * Add const qualifies where applicable. * Replace multirange typecache argument with range typecache argument. Multirange typecache was used solely to find the range typecache. At the same time, range typecache is easier for the caller to find.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/utils/adt/multirangetypes.c206
1 files changed, 111 insertions, 95 deletions
diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c
index 4b86be583ef..a77299147e7 100644
--- a/src/backend/utils/adt/multirangetypes.c
+++ b/src/backend/utils/adt/multirangetypes.c
@@ -847,7 +847,7 @@ range_bounds_contains(TypeCacheEntry *typcache,
* that would count as a mismatch.
*/
static bool
-multirange_bsearch_match(TypeCacheEntry *typcache, MultirangeType *mr,
+multirange_bsearch_match(TypeCacheEntry *typcache, const MultirangeType *mr,
void *key, multirange_bsearch_comparison cmp_func)
{
uint32 l,
@@ -1552,7 +1552,7 @@ multirange_contains_elem(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(multirange_contains_elem_internal(typcache, mr, val));
+ PG_RETURN_BOOL(multirange_contains_elem_internal(typcache->rngtype, mr, val));
}
/* contained by? */
@@ -1565,7 +1565,7 @@ elem_contained_by_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(multirange_contains_elem_internal(typcache, mr, val));
+ PG_RETURN_BOOL(multirange_contains_elem_internal(typcache->rngtype, mr, val));
}
/*
@@ -1606,13 +1606,13 @@ multirange_elem_bsearch_comparison(TypeCacheEntry *typcache,
* Test whether multirange mr contains a specific element value.
*/
bool
-multirange_contains_elem_internal(TypeCacheEntry *typcache,
- MultirangeType *mr, Datum val)
+multirange_contains_elem_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr, Datum val)
{
if (MultirangeIsEmpty(mr))
return false;
- return multirange_bsearch_match(typcache->rngtype, mr, &val,
+ return multirange_bsearch_match(rangetyp, mr, &val,
multirange_elem_bsearch_comparison);
}
@@ -1628,7 +1628,7 @@ multirange_contains_range(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(multirange_contains_range_internal(typcache, mr, r));
+ PG_RETURN_BOOL(multirange_contains_range_internal(typcache->rngtype, mr, r));
}
Datum
@@ -1640,7 +1640,7 @@ range_contains_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_contains_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_contains_multirange_internal(typcache->rngtype, r, mr));
}
/* contained by? */
@@ -1653,7 +1653,7 @@ range_contained_by_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(multirange_contains_range_internal(typcache, mr, r));
+ PG_RETURN_BOOL(multirange_contains_range_internal(typcache->rngtype, mr, r));
}
Datum
@@ -1665,7 +1665,7 @@ multirange_contained_by_range(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_contains_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_contains_multirange_internal(typcache->rngtype, r, mr));
}
/*
@@ -1700,14 +1700,13 @@ multirange_range_contains_bsearch_comparison(TypeCacheEntry *typcache,
* Test whether multirange mr contains a specific range r.
*/
bool
-multirange_contains_range_internal(TypeCacheEntry *typcache, MultirangeType *mr, RangeType *r)
+multirange_contains_range_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr,
+ const RangeType *r)
{
- TypeCacheEntry *rangetyp;
RangeBound bounds[2];
bool empty;
- rangetyp = typcache->rngtype;
-
/*
* Every multirange contains an infinite number of empty ranges, even an
* empty one.
@@ -1729,10 +1728,10 @@ multirange_contains_range_internal(TypeCacheEntry *typcache, MultirangeType *mr,
* Test whether range r contains a multirange mr.
*/
bool
-range_contains_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
- MultirangeType *mr)
+range_contains_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
- TypeCacheEntry *rangetyp;
RangeBound lower1,
upper1,
lower2,
@@ -1740,8 +1739,6 @@ range_contains_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
tmp;
bool empty;
- rangetyp = typcache->rngtype;
-
/*
* Every range contains an infinite number of empty multiranges, even an
* empty one.
@@ -1766,9 +1763,10 @@ range_contains_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
/* equality (internal version) */
bool
-multirange_eq_internal(TypeCacheEntry *typcache, MultirangeType *mr1, MultirangeType *mr2)
+multirange_eq_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr1,
+ const MultirangeType *mr2)
{
- TypeCacheEntry *rangetyp = typcache->rngtype;
int32 range_count_1;
int32 range_count_2;
int32 i;
@@ -1810,14 +1808,16 @@ multirange_eq(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_eq_internal(typcache, mr1, mr2));
+ PG_RETURN_BOOL(multirange_eq_internal(typcache->rngtype, mr1, mr2));
}
/* inequality (internal version) */
bool
-multirange_ne_internal(TypeCacheEntry *typcache, MultirangeType *mr1, MultirangeType *mr2)
+multirange_ne_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr1,
+ const MultirangeType *mr2)
{
- return (!multirange_eq_internal(typcache, mr1, mr2));
+ return (!multirange_eq_internal(rangetyp, mr1, mr2));
}
/* inequality */
@@ -1830,7 +1830,7 @@ multirange_ne(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_ne_internal(typcache, mr1, mr2));
+ PG_RETURN_BOOL(multirange_ne_internal(typcache->rngtype, mr1, mr2));
}
/* overlaps? */
@@ -1843,7 +1843,7 @@ range_overlaps_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_overlaps_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_overlaps_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -1855,7 +1855,7 @@ multirange_overlaps_range(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_overlaps_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_overlaps_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -1867,7 +1867,7 @@ multirange_overlaps_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_overlaps_multirange_internal(typcache, mr1, mr2));
+ PG_RETURN_BOOL(multirange_overlaps_multirange_internal(typcache->rngtype, mr1, mr2));
}
/*
@@ -1892,14 +1892,13 @@ multirange_range_overlaps_bsearch_comparison(TypeCacheEntry *typcache,
}
bool
-range_overlaps_multirange_internal(TypeCacheEntry *typcache, RangeType *r, MultirangeType *mr)
+range_overlaps_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
- TypeCacheEntry *rangetyp;
RangeBound bounds[2];
bool empty;
- rangetyp = typcache->rngtype;
-
/*
* Empties never overlap, even with empties. (This seems strange since
* they *do* contain each other, but we want to follow how ranges work.)
@@ -1915,10 +1914,10 @@ range_overlaps_multirange_internal(TypeCacheEntry *typcache, RangeType *r, Multi
}
bool
-multirange_overlaps_multirange_internal(TypeCacheEntry *typcache, MultirangeType *mr1,
- MultirangeType *mr2)
+multirange_overlaps_multirange_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr1,
+ const MultirangeType *mr2)
{
- TypeCacheEntry *rangetyp;
int32 range_count1;
int32 range_count2;
int32 i1;
@@ -1935,8 +1934,6 @@ multirange_overlaps_multirange_internal(TypeCacheEntry *typcache, MultirangeType
if (MultirangeIsEmpty(mr1) || MultirangeIsEmpty(mr2))
return false;
- rangetyp = typcache->rngtype;
-
range_count1 = mr1->rangeCount;
range_count2 = mr2->rangeCount;
@@ -1974,12 +1971,11 @@ multirange_overlaps_multirange_internal(TypeCacheEntry *typcache, MultirangeType
}
/* does not extend to right of? */
-Datum
-range_overleft_multirange(PG_FUNCTION_ARGS)
+bool
+range_overleft_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
- RangeType *r = PG_GETARG_RANGE_P(0);
- MultirangeType *mr = PG_GETARG_MULTIRANGE_P(1);
- TypeCacheEntry *typcache;
RangeBound lower1,
upper1,
lower2,
@@ -1989,14 +1985,25 @@ range_overleft_multirange(PG_FUNCTION_ARGS)
if (RangeIsEmpty(r) || MultirangeIsEmpty(mr))
PG_RETURN_BOOL(false);
- typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- range_deserialize(typcache->rngtype, r, &lower1, &upper1, &empty);
+ range_deserialize(rangetyp, r, &lower1, &upper1, &empty);
Assert(!empty);
- multirange_get_bounds(typcache->rngtype, mr, mr->rangeCount - 1,
+ multirange_get_bounds(rangetyp, mr, mr->rangeCount - 1,
&lower2, &upper2);
- PG_RETURN_BOOL(range_cmp_bounds(typcache->rngtype, &upper1, &upper2) <= 0);
+ PG_RETURN_BOOL(range_cmp_bounds(rangetyp, &upper1, &upper2) <= 0);
+}
+
+Datum
+range_overleft_multirange(PG_FUNCTION_ARGS)
+{
+ RangeType *r = PG_GETARG_RANGE_P(0);
+ MultirangeType *mr = PG_GETARG_MULTIRANGE_P(1);
+ TypeCacheEntry *typcache;
+
+ typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
+
+ PG_RETURN_BOOL(range_overleft_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2049,12 +2056,11 @@ multirange_overleft_multirange(PG_FUNCTION_ARGS)
}
/* does not extend to left of? */
-Datum
-range_overright_multirange(PG_FUNCTION_ARGS)
+bool
+range_overright_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
- RangeType *r = PG_GETARG_RANGE_P(0);
- MultirangeType *mr = PG_GETARG_MULTIRANGE_P(1);
- TypeCacheEntry *typcache;
RangeBound lower1,
upper1,
lower2,
@@ -2064,13 +2070,23 @@ range_overright_multirange(PG_FUNCTION_ARGS)
if (RangeIsEmpty(r) || MultirangeIsEmpty(mr))
PG_RETURN_BOOL(false);
- typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
-
- range_deserialize(typcache->rngtype, r, &lower1, &upper1, &empty);
+ range_deserialize(rangetyp, r, &lower1, &upper1, &empty);
Assert(!empty);
- multirange_get_bounds(typcache->rngtype, mr, 0, &lower2, &upper2);
+ multirange_get_bounds(rangetyp, mr, 0, &lower2, &upper2);
- PG_RETURN_BOOL(range_cmp_bounds(typcache->rngtype, &lower1, &lower2) >= 0);
+ return (range_cmp_bounds(rangetyp, &lower1, &lower2) >= 0);
+}
+
+Datum
+range_overright_multirange(PG_FUNCTION_ARGS)
+{
+ RangeType *r = PG_GETARG_RANGE_P(0);
+ MultirangeType *mr = PG_GETARG_MULTIRANGE_P(1);
+ TypeCacheEntry *typcache;
+
+ typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
+
+ PG_RETURN_BOOL(range_overright_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2129,7 +2145,7 @@ multirange_contains_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_contains_multirange_internal(typcache, mr1, mr2));
+ PG_RETURN_BOOL(multirange_contains_multirange_internal(typcache->rngtype, mr1, mr2));
}
/* contained by? */
@@ -2142,17 +2158,17 @@ multirange_contained_by_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_contains_multirange_internal(typcache, mr2, mr1));
+ PG_RETURN_BOOL(multirange_contains_multirange_internal(typcache->rngtype, mr2, mr1));
}
/*
* Test whether multirange mr1 contains every range from another multirange mr2.
*/
bool
-multirange_contains_multirange_internal(TypeCacheEntry *typcache,
- MultirangeType *mr1, MultirangeType *mr2)
+multirange_contains_multirange_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr1,
+ const MultirangeType *mr2)
{
- TypeCacheEntry *rangetyp;
int32 range_count1 = mr1->rangeCount;
int32 range_count2 = mr2->rangeCount;
int i1,
@@ -2162,8 +2178,6 @@ multirange_contains_multirange_internal(TypeCacheEntry *typcache,
lower2,
upper2;
- rangetyp = typcache->rngtype;
-
/*
* We follow the same logic for empties as ranges: - an empty multirange
* contains an empty range/multirange. - an empty multirange can't contain
@@ -2221,7 +2235,7 @@ range_before_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_before_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_before_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2233,7 +2247,7 @@ multirange_before_range(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_after_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_after_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2245,7 +2259,7 @@ multirange_before_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_before_multirange_internal(typcache, mr1, mr2));
+ PG_RETURN_BOOL(multirange_before_multirange_internal(typcache->rngtype, mr1, mr2));
}
/* strictly right of? */
@@ -2258,7 +2272,7 @@ range_after_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_after_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_after_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2270,7 +2284,7 @@ multirange_after_range(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_before_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_before_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2282,13 +2296,14 @@ multirange_after_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr1));
- PG_RETURN_BOOL(multirange_before_multirange_internal(typcache, mr2, mr1));
+ PG_RETURN_BOOL(multirange_before_multirange_internal(typcache->rngtype, mr2, mr1));
}
/* strictly left of? (internal version) */
bool
-range_before_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
- MultirangeType *mr)
+range_before_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
RangeBound lower1,
upper1,
@@ -2299,19 +2314,18 @@ range_before_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
if (RangeIsEmpty(r) || MultirangeIsEmpty(mr))
return false;
- range_deserialize(typcache->rngtype, r, &lower1, &upper1, &empty);
+ range_deserialize(rangetyp, r, &lower1, &upper1, &empty);
Assert(!empty);
- multirange_get_bounds(typcache->rngtype, mr, 0,
- &lower2, &upper2);
+ multirange_get_bounds(rangetyp, mr, 0, &lower2, &upper2);
- return (range_cmp_bounds(typcache->rngtype, &upper1, &lower2) < 0);
+ return (range_cmp_bounds(rangetyp, &upper1, &lower2) < 0);
}
bool
-multirange_before_multirange_internal(TypeCacheEntry *typcache,
- MultirangeType *mr1,
- MultirangeType *mr2)
+multirange_before_multirange_internal(TypeCacheEntry *rangetyp,
+ const MultirangeType *mr1,
+ const MultirangeType *mr2)
{
RangeBound lower1,
upper1,
@@ -2321,18 +2335,19 @@ multirange_before_multirange_internal(TypeCacheEntry *typcache,
if (MultirangeIsEmpty(mr1) || MultirangeIsEmpty(mr2))
return false;
- multirange_get_bounds(typcache->rngtype, mr1, mr1->rangeCount - 1,
+ multirange_get_bounds(rangetyp, mr1, mr1->rangeCount - 1,
&lower1, &upper1);
- multirange_get_bounds(typcache->rngtype, mr2, 0,
+ multirange_get_bounds(rangetyp, mr2, 0,
&lower2, &upper2);
- return (range_cmp_bounds(typcache->rngtype, &upper1, &lower2) < 0);
+ return (range_cmp_bounds(rangetyp, &upper1, &lower2) < 0);
}
/* strictly right of? (internal version) */
bool
-range_after_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
- MultirangeType *mr)
+range_after_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
RangeBound lower1,
upper1,
@@ -2344,19 +2359,20 @@ range_after_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
if (RangeIsEmpty(r) || MultirangeIsEmpty(mr))
return false;
- range_deserialize(typcache->rngtype, r, &lower1, &upper1, &empty);
+ range_deserialize(rangetyp, r, &lower1, &upper1, &empty);
Assert(!empty);
range_count = mr->rangeCount;
- multirange_get_bounds(typcache->rngtype, mr, range_count - 1,
+ multirange_get_bounds(rangetyp, mr, range_count - 1,
&lower2, &upper2);
- return (range_cmp_bounds(typcache->rngtype, &lower1, &upper2) > 0);
+ return (range_cmp_bounds(rangetyp, &lower1, &upper2) > 0);
}
bool
-range_adjacent_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
- MultirangeType *mr)
+range_adjacent_multirange_internal(TypeCacheEntry *rangetyp,
+ const RangeType *r,
+ const MultirangeType *mr)
{
RangeBound lower1,
upper1,
@@ -2368,21 +2384,21 @@ range_adjacent_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
if (RangeIsEmpty(r) || MultirangeIsEmpty(mr))
return false;
- range_deserialize(typcache->rngtype, r, &lower1, &upper1, &empty);
+ range_deserialize(rangetyp, r, &lower1, &upper1, &empty);
Assert(!empty);
range_count = mr->rangeCount;
- multirange_get_bounds(typcache->rngtype, mr, 0,
+ multirange_get_bounds(rangetyp, mr, 0,
&lower2, &upper2);
- if (bounds_adjacent(typcache->rngtype, upper1, lower2))
+ if (bounds_adjacent(rangetyp, upper1, lower2))
return true;
if (range_count > 1)
- multirange_get_bounds(typcache->rngtype, mr, range_count - 1,
+ multirange_get_bounds(rangetyp, mr, range_count - 1,
&lower2, &upper2);
- if (bounds_adjacent(typcache->rngtype, upper2, lower1))
+ if (bounds_adjacent(rangetyp, upper2, lower1))
return true;
return false;
@@ -2398,7 +2414,7 @@ range_adjacent_multirange(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_adjacent_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_adjacent_multirange_internal(typcache->rngtype, r, mr));
}
Datum
@@ -2413,7 +2429,7 @@ multirange_adjacent_range(PG_FUNCTION_ARGS)
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
- PG_RETURN_BOOL(range_adjacent_multirange_internal(typcache, r, mr));
+ PG_RETURN_BOOL(range_adjacent_multirange_internal(typcache->rngtype, r, mr));
}
Datum