Postgres ranges have convenient operators for doing set math on ranges. We can extend the Ecto DSL to provide convenience macros for working with these operators
e.g.
CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
(1108, '[2010-01-01 14:30, 2010-01-01 15:30)');
-- Containment
SELECT int4range(10, 20) @> 3;
-- Overlaps
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);
-- Extract the upper bound
SELECT upper(int8range(15, 25));
-- Compute the intersection
SELECT int4range(10, 20) * int4range(15, 25);
-- Is the range empty?
SELECT isempty(numrange(1, 5));
For the complete list, see the Postgres docs.
Postgres ranges have convenient operators for doing set math on ranges. We can extend the Ecto DSL to provide convenience macros for working with these operators
e.g.
For the complete list, see the Postgres docs.