32 #define RANGE_EMPTY_LITERAL "empty" 35 #define RangeTypeGetOid(r) ((r)->rangetypid) 38 #define RANGE_EMPTY 0x01 39 #define RANGE_LB_INC 0x02 40 #define RANGE_UB_INC 0x04 41 #define RANGE_LB_INF 0x08 42 #define RANGE_UB_INF 0x10 43 #define RANGE_LB_NULL 0x20 44 #define RANGE_UB_NULL 0x40 45 #define RANGE_CONTAIN_EMPTY 0x80 48 #define RANGE_HAS_LBOUND(flags) (!((flags) & (RANGE_EMPTY | \ 52 #define RANGE_HAS_UBOUND(flags) (!((flags) & (RANGE_EMPTY | \ 56 #define RangeIsEmpty(r) ((range_get_flags(r) & RANGE_EMPTY) != 0) 57 #define RangeIsOrContainsEmpty(r) \ 58 ((range_get_flags(r) & (RANGE_EMPTY | RANGE_CONTAIN_EMPTY)) != 0) 73 #define DatumGetRangeTypeP(X) ((RangeType *) PG_DETOAST_DATUM(X)) 74 #define DatumGetRangeTypePCopy(X) ((RangeType *) PG_DETOAST_DATUM_COPY(X)) 75 #define RangeTypePGetDatum(X) PointerGetDatum(X) 76 #define PG_GETARG_RANGE_P(n) DatumGetRangeTypeP(PG_GETARG_DATUM(n)) 77 #define PG_GETARG_RANGE_P_COPY(n) DatumGetRangeTypePCopy(PG_GETARG_DATUM(n)) 78 #define PG_RETURN_RANGE_P(x) return RangeTypePGetDatum(x) 82 #define RANGESTRAT_BEFORE RTLeftStrategyNumber 83 #define RANGESTRAT_OVERLEFT RTOverLeftStrategyNumber 84 #define RANGESTRAT_OVERLAPS RTOverlapStrategyNumber 85 #define RANGESTRAT_OVERRIGHT RTOverRightStrategyNumber 86 #define RANGESTRAT_AFTER RTRightStrategyNumber 87 #define RANGESTRAT_ADJACENT RTSameStrategyNumber 88 #define RANGESTRAT_CONTAINS RTContainsStrategyNumber 89 #define RANGESTRAT_CONTAINED_BY RTContainedByStrategyNumber 90 #define RANGESTRAT_CONTAINS_ELEM RTContainsElemStrategyNumber 91 #define RANGESTRAT_EQ RTEqualStrategyNumber RangeType * range_minus_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
bool range_after_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
Datum lower(PG_FUNCTION_ARGS)
RangeType * make_range(TypeCacheEntry *typcache, RangeBound *lower, RangeBound *upper, bool empty)
RangeType * range_serialize(TypeCacheEntry *typcache, RangeBound *lower, RangeBound *upper, bool empty)
bool range_contains_elem_internal(TypeCacheEntry *typcache, const RangeType *r, Datum val)
bool range_eq_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
void range_set_contain_empty(RangeType *range)
RangeType * make_empty_range(TypeCacheEntry *typcache)
Datum upper(PG_FUNCTION_ARGS)
void range_deserialize(TypeCacheEntry *typcache, const RangeType *range, RangeBound *lower, RangeBound *upper, bool *empty)
bool bounds_adjacent(TypeCacheEntry *typcache, RangeBound bound1, RangeBound bound2)
bool range_split_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2, RangeType **output1, RangeType **output2)
TypeCacheEntry * range_get_typcache(FunctionCallInfo fcinfo, Oid rngtypid)
bool range_ne_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
int range_cmp_bound_values(TypeCacheEntry *typcache, const RangeBound *b1, const RangeBound *b2)
bool range_contains_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
static struct cvec * range(struct vars *v, chr a, chr b, int cases)
bool range_overleft_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
bool range_overright_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
bool range_before_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
RangeType * range_union_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2, bool strict)
int range_compare(const void *key1, const void *key2, void *arg)
bool range_adjacent_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
int range_cmp_bounds(TypeCacheEntry *typcache, const RangeBound *b1, const RangeBound *b2)
char range_get_flags(const RangeType *range)
bool range_overlaps_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
RangeType * range_intersect_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)
bool range_contained_by_internal(TypeCacheEntry *typcache, const RangeType *r1, const RangeType *r2)