-- -- workflow__drop_workflow/1 -- create or replace function workflow__drop_workflow( character varying ) returns int4 as $$ declare drop_workflow__workflow_key alias for $1; v_table_name varchar; v_num_rows integer; attribute_rec record; begin select table_name into v_table_name from acs_object_types where object_type = drop_workflow__workflow_key; select case when count(*) = 0 then 0 else 1 end into v_num_rows from pg_class where relname = lower(v_table_name); if v_num_rows > 0 then raise EXCEPTION '-20000: The table "%" must be dropped before calling workflow__drop_workflow.', v_table_name; end if; select case when count(*) = 0 then 0 else 1 end into v_num_rows from wf_cases where workflow_key = drop_workflow__workflow_key; if v_num_rows > 0 then raise EXCEPTION '-20000: You must delete all cases of workflow "%" before dropping the workflow definition.', drop_workflow__workflow_key; end if; /* Delete all the auxillary stuff */ delete from wf_context_task_panels where workflow_key = drop_workflow__workflow_key; delete from wf_context_assignments where workflow_key = drop_workflow__workflow_key; delete from wf_context_role_info where workflow_key = drop_workflow__workflow_key; delete from wf_context_transition_info where workflow_key = drop_workflow__workflow_key; delete from wf_context_workflow_info where workflow_key = drop_workflow__workflow_key; delete from wf_arcs where workflow_key = drop_workflow__workflow_key; delete from wf_places where workflow_key = drop_workflow__workflow_key; delete from wf_transition_role_assign_map where workflow_key = drop_workflow__workflow_key; delete from wf_transitions where workflow_key = drop_workflow__workflow_key; delete from wf_roles where workflow_key = drop_workflow__workflow_key; /* Drop all attributes */ for attribute_rec in select attribute_id, attribute_name from acs_attributes where object_type = drop_workflow__workflow_key LOOP /* there is no on delete cascade, so we have to manually * delete all the values */ delete from acs_attribute_values where attribute_id = attribute_rec.attribute_id; PERFORM workflow__drop_attribute ( drop_workflow__workflow_key, attribute_rec.attribute_name ); end loop; /* Delete the workflow */ delete from wf_workflows where workflow_key = drop_workflow__workflow_key; PERFORM acs_object_type__drop_type ( drop_workflow__workflow_key, 'f' ); return 0; end;$$ language plpgsql;