-- -- timespan__new/1 -- create or replace function timespan__new( integer ) returns int4 as $$ -- timespans.timespan_id%TYPE declare new__interval_id alias for $1; begin return timespan__new( new__interval_id, true ); end;$$ language plpgsql; -- -- timespan__new/2 -- create or replace function timespan__new( new__interval_id integer, new__copy_p boolean ) returns int4 as $$ -- timespans.timespan_id%TYPE DECLARE v_timespan_id timespans.timespan_id%TYPE; v_interval_id time_intervals.interval_id%TYPE; BEGIN -- get a new id; select nextval('timespan_sequence') into v_timespan_id from dual; if new__copy_p then -- JS: Note use of overloaded function (zero offset) v_interval_id := time_interval__copy(new__interval_id); else v_interval_id := new__interval_id; end if; insert into timespans (timespan_id, interval_id) values (v_timespan_id, v_interval_id); return v_timespan_id; END; $$ language plpgsql; -- -- timespan__new/2 -- create or replace function timespan__new( timestamp with time zone, timestamp with time zone ) returns int4 as $$ -- timespans.timespan_id%TYPE declare new__start_date alias for $1; -- default null, new__end_date alias for $2; -- default null begin -- JS: If we simply call timespan__new with default copy_p = true, -- JS: there will be two new time intervals that will be created -- JS: everytime this function is called. The first one will never be used!!! -- JS: To fix, we use the timespan__new with copy_p parameter and -- JS: setting copy_p to false. return timespan__new(time_interval__new(new__start_date, new__end_date),false); end;$$ language plpgsql;