--
-- 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;