--
-- workflow__move_role_down/2
--
create or replace function workflow__move_role_down(
  character varying,
  character varying
) returns int4 as $$

declare
  move_role_down__workflow_key		alias for $1;
  move_role_down__role_key		alias for $2;
  v_this_sort_order			integer;
  v_next_sort_order			integer;
begin
        select sort_order
          into v_this_sort_order
          from wf_roles
         where workflow_key = move_role_down__workflow_key
           and role_key = move_role_down__role_key;

        select min(sort_order)
	  into v_next_sort_order
	  from wf_roles
	 where workflow_key = move_role_down__workflow_key
	  and sort_order > v_this_sort_order;

	if not found then
            /* already at bottom of sort order */
	  return;
	end if;

        /* switch the sort orders around */
        update wf_roles
	   set sort_order = (case when role_key=move_role_down__role_key then v_next_sort_order else v_this_sort_order end)
         where workflow_key = move_role_down__workflow_key
           and sort_order in (v_this_sort_order, v_next_sort_order);

  return 0;
end;$$ language plpgsql;