-- -- workflow_case__consume_token/4 -- create or replace function workflow_case__consume_token( integer, character varying, integer, integer ) returns int4 as $$ declare consume_token__case_id alias for $1; consume_token__place_key alias for $2; consume_token__journal_id alias for $3; consume_token__task_id alias for $4; -- default null begin if consume_token__task_id is null then update wf_tokens set state = 'consumed', consumed_date = now(), consumed_journal_id = consume_token__journal_id where token_id = (select token_id from wf_tokens where case_id = consume_token__case_id and place_key = consume_token__place_key and state = 'free' limit 1); else update wf_tokens set state = 'consumed', consumed_date = now(), consumed_journal_id = consume_token__journal_id where case_id = consume_token__case_id and place_key = consume_token__place_key and state = 'locked' and locked_task_id = consume_token__task_id; end if; return 0; end;$$ language plpgsql;