-- -- forums_message__delete_thread/1 -- create or replace function forums_message__delete_thread( integer ) returns int4 as $$ declare p_message_id alias for $1; v_forum_id forums_messages.forum_id%TYPE; v_sortkey forums_messages.tree_sortkey%TYPE; v_message RECORD; begin select forum_id, tree_sortkey into v_forum_id, v_sortkey from forums_messages where message_id = p_message_id; -- if it is already deleted if v_forum_id is null then return 0; end if; -- delete all children -- order by tree_sortkey desc to guarantee -- that we never delete a parent before its child -- sortkeys are beautiful for v_message in select * from forums_messages where forum_id = v_forum_id and tree_sortkey between tree_left(v_sortkey) and tree_right(v_sortkey) order by tree_sortkey desc loop -- Avoid the count bookkeeping down in forums_message__delete perform forums_message__delete(v_message.message_id); end loop; -- delete the message itself perform forums_message__delete(p_message_id); return 0; end;$$ language plpgsql;