-- -- workflow_case__release_token/2 -- create or replace function workflow_case__release_token( integer, integer ) returns int4 as $$ declare release_token__task_id alias for $1; release_token__journal_id alias for $2; token_rec record; begin /* Add a new token for each released one */ for token_rec in select token_id, case_id, place_key from wf_tokens where state = 'locked' and locked_task_id = release_token__task_id LOOP PERFORM workflow_case__add_token ( token_rec.case_id, token_rec.place_key, release_token__journal_id ); end loop; /* Mark the released ones canceled */ update wf_tokens set state = 'canceled', canceled_date = now(), canceled_journal_id = release_token__journal_id where state = 'locked' and locked_task_id = release_token__task_id; return 0; end;$$ language plpgsql;