-- -- bookmark__new/10 -- create or replace function bookmark__new( integer, integer, integer, character varying, boolean, integer, timestamp with time zone, integer, character varying, integer ) returns int4 as $$ DECLARE p_bookmark_id ALIAS FOR $1; -- in bm_bookmarks.bookmark_id%TYPE, p_owner_id ALIAS FOR $2; -- in bm_bookmarks.owner_id%TYPE, p_url_id ALIAS FOR $3; -- in bm_urls.url_id%TYPE default null, p_local_title ALIAS FOR $4; -- in bm_bookmarks.local_title%TYPE default null, p_folder_p ALIAS FOR $5; -- in bm_bookmarks.folder_p%TYPE default f, p_parent_id ALIAS FOR $6; -- in bm_bookmarks.parent_id%TYPE, p_last_access_date ALIAS FOR $7; -- in bm_bookmarks.last_access_date%TYPE default null, p_creation_user ALIAS FOR $8; -- in acs_objects.creation_user%TYPE default null, p_creation_ip ALIAS FOR $9; -- in acs_objects.creation_ip%TYPE default null, p_context_id ALIAS FOR $10; -- in acs_objects.context_id%TYPE default null v_bookmark_id integer; v_last_access_date bm_bookmarks.last_access_date%TYPE; v_in_closed_p bm_in_closed_p.in_closed_p%TYPE; c_viewing_in_closed_p_ids RECORD; BEGIN v_bookmark_id := acs_object__new( p_bookmark_id, 'bookmark', now(), p_creation_user, p_creation_ip, p_parent_id ); if p_last_access_date is null then select now() into v_last_access_date; else v_last_access_date := p_last_access_date; end if; insert into bm_bookmarks (bookmark_id, owner_id, url_id, local_title, folder_p, parent_id, last_access_date) values (v_bookmark_id, p_owner_id, p_url_id, p_local_title, p_folder_p, p_parent_id, v_last_access_date); FOR c_viewing_in_closed_p_ids IN select distinct in_closed_p_id from bm_in_closed_p where bookmark_id = (select parent_id from bm_bookmarks where bookmark_id = v_bookmark_id) LOOP -- For each user or session record the in_closed_p status of -- the bookmark select bookmark__get_in_closed_p (p_parent_id, c_viewing_in_closed_p_ids.in_closed_p_id) into v_in_closed_p; insert into bm_in_closed_p (bookmark_id, in_closed_p_id, in_closed_p, creation_date) values (v_bookmark_id, c_viewing_in_closed_p_ids.in_closed_p_id, v_in_closed_p, now()); END LOOP; RETURN v_bookmark_id; END; $$ language plpgsql;