Improve the signature of internal multirange functions
authorAlexander Korotkov <akorotkov@postgresql.org>
Tue, 29 Dec 2020 20:35:38 +0000 (23:35 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Tue, 29 Dec 2020 20:35:38 +0000 (23:35 +0300)
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.

src/backend/utils/adt/multirangetypes.c
src/include/utils/multirangetypes.h

index 4b86be583ef714fb7a979c1889e19e4c815e31fe..a77299147e7fb3502fd3e1bc79a52136d48ca361 100644 (file)
@@ -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
index f2290aac274802dcafcc82c8da3ccf917323a1e7..ff2e58744a908eb80307d0cb166c12c12249fc70 100644 (file)
@@ -14,8 +14,8 @@
 #ifndef MULTIRANGETYPES_H
 #define MULTIRANGETYPES_H
 
+#include "utils/rangetypes.h"
 #include "utils/typcache.h"
-#include "utils/expandeddatum.h"
 
 
 /*
@@ -56,33 +56,48 @@ typedef struct
  */
 
 /* internal versions of the above */
-extern bool multirange_eq_internal(TypeCacheEntry *typcache, MultirangeType *mr1,
-                                  MultirangeType *mr2);
-extern bool multirange_ne_internal(TypeCacheEntry *typcache, MultirangeType *mr1,
-                                  MultirangeType *mr2);
-extern bool multirange_contains_elem_internal(TypeCacheEntry *typcache, MultirangeType *mr,
+extern bool multirange_eq_internal(TypeCacheEntry *rangetyp,
+                                  const MultirangeType *mr1,
+                                  const MultirangeType *mr2);
+extern bool multirange_ne_internal(TypeCacheEntry *rangetyp,
+                                  const MultirangeType *mr1,
+                                  const MultirangeType *mr2);
+extern bool multirange_contains_elem_internal(TypeCacheEntry *rangetyp,
+                                             const MultirangeType *mr,
                                              Datum elem);
-extern bool multirange_contains_range_internal(TypeCacheEntry *typcache, MultirangeType *mr,
-                                              RangeType *r);
-extern bool range_contains_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
-                                              MultirangeType *mr);
-extern bool multirange_contains_multirange_internal(TypeCacheEntry *typcache,
-                                                   MultirangeType *mr1,
-                                                   MultirangeType *mr2);
-extern bool range_overlaps_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
-                                              MultirangeType *mr);
-extern bool multirange_overlaps_multirange_internal(TypeCacheEntry *typcache,
-                                                   MultirangeType *mr1,
-                                                   MultirangeType *mr2);
-extern bool range_before_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
-                                            MultirangeType *mr);
-extern bool range_after_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
-                                           MultirangeType *mr);
-extern bool range_adjacent_multirange_internal(TypeCacheEntry *typcache, RangeType *r,
-                                              MultirangeType *mr);
-extern bool multirange_before_multirange_internal(TypeCacheEntry *typcache,
-                                                 MultirangeType *mr1,
-                                                 MultirangeType *mr2);
+extern bool multirange_contains_range_internal(TypeCacheEntry *rangetyp,
+                                              const MultirangeType *mr,
+                                              const RangeType *r);
+extern bool range_contains_multirange_internal(TypeCacheEntry *rangetyp,
+                                              const RangeType *r,
+                                              const MultirangeType *mr);
+extern bool multirange_contains_multirange_internal(TypeCacheEntry *rangetyp,
+                                                   const MultirangeType *mr1,
+                                                   const MultirangeType *mr2);
+extern bool range_overlaps_multirange_internal(TypeCacheEntry *rangetyp,
+                                              const RangeType *r,
+                                              const MultirangeType *mr);
+extern bool multirange_overlaps_multirange_internal(TypeCacheEntry *rangetyp,
+                                                   const MultirangeType *mr1,
+                                                   const MultirangeType *mr2);
+extern bool range_overleft_multirange_internal(TypeCacheEntry *rangetyp,
+                                              const RangeType *r,
+                                              const MultirangeType *mr);
+extern bool range_overright_multirange_internal(TypeCacheEntry *rangetyp,
+                                               const RangeType *r,
+                                               const MultirangeType *mr);
+extern bool range_before_multirange_internal(TypeCacheEntry *rangetyp,
+                                            const RangeType *r,
+                                            const MultirangeType *mr);
+extern bool range_after_multirange_internal(TypeCacheEntry *rangetyp,
+                                           const RangeType *r,
+                                           const MultirangeType *mr);
+extern bool range_adjacent_multirange_internal(TypeCacheEntry *rangetyp,
+                                              const RangeType *r,
+                                              const MultirangeType *mr);
+extern bool multirange_before_multirange_internal(TypeCacheEntry *rangetyp,
+                                                 const MultirangeType *mr1,
+                                                 const MultirangeType *mr2);
 extern MultirangeType *multirange_minus_internal(Oid mltrngtypoid,
                                                 TypeCacheEntry *rangetyp,
                                                 int32 range_count1,