-- -- forums_mess_insert_tr/0 -- create or replace function forums_mess_insert_tr( ) returns trigger as $$ declare v_max_child_sortkey forums_forums.max_child_sortkey%TYPE; v_parent_sortkey forums_messages.tree_sortkey%TYPE; begin if new.parent_id is null then select '', max_child_sortkey into v_parent_sortkey, v_max_child_sortkey from forums_forums where forum_id = new.forum_id for update; v_max_child_sortkey := tree_increment_key(v_max_child_sortkey); update forums_forums set max_child_sortkey = v_max_child_sortkey where forum_id = new.forum_id; else select coalesce(tree_sortkey, ''), max_child_sortkey into v_parent_sortkey, v_max_child_sortkey from forums_messages where message_id = new.parent_id for update; v_max_child_sortkey := tree_increment_key(v_max_child_sortkey); update forums_messages set max_child_sortkey = v_max_child_sortkey where message_id = new.parent_id; end if; new.tree_sortkey := v_parent_sortkey || v_max_child_sortkey; return new; end;$$ language plpgsql;