-- -- timespan__copy/2 -- create or replace function timespan__copy( copy__timespan_id integer, copy__offset_interval interval ) returns int4 as $$ DECLARE rec_timespan record; v_interval_id timespans.interval_id%TYPE; v_timespan_id timespans.timespan_id%TYPE; BEGIN v_timespan_id := null; -- Loop over each interval in timespan, creating a new copy for rec_timespan in select * from timespans where timespan_id = copy__timespan_id loop v_interval_id := time_interval__copy( rec_timespan.interval_id, copy__offset_interval ); if v_timespan_id is null then -- JS: NOTE DEFAULT BEHAVIOR OF timespan__new v_timespan_id := timespan__new(v_interval_id); else -- no copy, use whatever is generated by time_interval__copy PERFORM timespan__join_interval( v_timespan_id, v_interval_id, false); end if; end loop; return v_timespan_id; END; $$ language plpgsql; -- -- timespan__copy/1 -- create or replace function timespan__copy( integer ) returns int4 as $$ -- timespans.timespan_id%TYPE declare copy__timespan_id alias for $1; begin return timespan__copy( copy__timespan_id, interval '0 days' ); end;$$ language plpgsql; -- -- timespan__copy/2 -- create or replace function timespan__copy( integer, integer ) returns int4 as $$ -- timespans.timespan_id%TYPE declare copy__timespan_id alias for $1; copy__offset alias for $2; begin return timespan__copy( copy__timespan_id, to_interval(copy__offset,'days') ); end;$$ language plpgsql;