-- -- bookmark__toggle_open_close_all/3 -- create or replace function bookmark__toggle_open_close_all( p_browsing_user_id bigint, p_closed_p boolean, p_root_id integer ) returns int4 as $$ DECLARE BEGIN -- Change the value of closed_p for all folders belonging to the -- user (except the root folder) UPDATE bm_in_closed_p SET closed_p = p_closed_p WHERE bookmark_id IN ( SELECT bm.bookmark_id FROM bm_bookmarks bm, bm_bookmarks bm2 WHERE tree_level(bm.tree_sortkey) > 1 and bm2.bookmark_id = p_root_id and bm.tree_sortkey between bm2.tree_sortkey and tree_right(bm2.tree_sortkey) ); -- Update the value of in_closed_p for all bookmarks belonging to -- this user. We close/open all bookmarks except the top level ones. UPDATE bm_in_closed_p SET in_closed_p = p_closed_p WHERE bookmark_id IN ( SELECT bookmark_id FROM bm_bookmarks WHERE tree_level(tree_sortkey) > 2 ) AND in_closed_p_id = p_browsing_user_id; RETURN 0; END; $$ language plpgsql;