--
-- workflow_case__lock_token/4
--
create or replace function workflow_case__lock_token(
  integer,
  character varying,
  integer,
  integer
) returns int4 as $$

declare
  lock_token__case_id                alias for $1;  
  lock_token__place_key              alias for $2;  
  lock_token__journal_id             alias for $3;  
  lock_token__task_id                alias for $4;  
begin
        -- FIXME: rownum 
--        update wf_tokens
--        set    state = 'locked',
--               locked_task_id = lock_token__task_id,
--               locked_date = now(),
--               locked_journal_id = lock_token__journal_id
--        where  case_id = lock_token__case_id
--        and    place_key = lock_token__place_key
--        and    state = 'free'
--        and    rownum = 1;

        update wf_tokens
        set    state = 'locked',
               locked_task_id = lock_token__task_id,
               locked_date = now(),
               locked_journal_id = lock_token__journal_id
        where  token_id = (select token_id 
                             from wf_tokens 
                            where case_id = lock_token__case_id
                              and place_key = lock_token__place_key
                              and state = 'free'
                            limit 1);

        return 0; 
end;$$ language plpgsql;