--
-- timespan__overlaps_p/2
--
create or replace function timespan__overlaps_p(
integer,
integer
) returns bool as $$
declare
overlaps_p__timespan_1_id alias for $1;
overlaps_p__timespan_2_id alias for $2;
v_result boolean;
rec_timespan record;
begin
-- Loop over 2nd timespan, checking each interval against 1st
for rec_timespan in
select *
from timespans
where timespan_id = overlaps_p__timespan_2_id
loop
v_result := timespan__overlaps_interval_p(
overlaps_p__timespan_1_id,
rec_timespan.interval_id
);
if v_result then
return true;
end if;
end loop;
return false;
end;$$ language plpgsql;
--
-- timespan__overlaps_p/3
--
create or replace function timespan__overlaps_p(
integer,
timestamp with time zone,
timestamp with time zone
) returns bool as $$
declare
overlaps_p__timespan_id alias for $1;
overlaps_p__start_date alias for $2; -- default null,
overlaps_p__end_date alias for $3; -- default null
v_result boolean;
rec_timespan record;
begin
-- Loop over each interval in timespan, checking against dates.
for rec_timespan in
select *
from timespans
where timespan_id = overlaps_p__timespan_id
loop
v_result := time_interval__overlaps_p(
rec_timespan.interval_id,
overlaps_p__start_date,
overlaps_p__end_date
);
if v_result then
return true;
end if;
end loop;
return false;
end;$$ language plpgsql;