Forum OpenACS Development: Response to Weird error invoking a plpgsql function (content_revision__delete)
Posted by
Dan Wickstrom
on 07/05/01 06:39 PM
Ok Luke, try this:
create function content_item__delete (integer)
returns integer as '
declare
delete__item_id alias for $1;
v_wf_cases_val record;
v_symlink_val record;
v_revision_val record;
v_rel_val record;
v_rec record;
begin
raise NOTICE ''Deleting associated workflows...'';
-- 1) delete all workflow cases associated with this item
for v_wf_cases_val in select
case_id
from
wf_cases
where
object_id = delete__item_id
LOOP
PERFORM workflow_case__delete(v_wf_cases_val.case_id);
end loop;
raise NOTICE ''Deleting symlinks...'';
-- 2) delete all symlinks to this item
for v_symlink_val in select
symlink_id
from
cr_symlinks
where
target_id = delete__item_id
LOOP
PERFORM content_symlink__delete(v_symlink_val.symlink_id);
end loop;
raise NOTICE ''Unscheduling item...'';
delete from cr_release_periods
where item_id = delete__item_id;
raise NOTICE ''Deleting associated revisions...'';
-- 3) delete all revisions of this item
delete from cr_item_publish_audit
where item_id = delete__item_id;
for v_rec in select revision_id
from cr_revisions
where item_id = delete__item_id
LOOP
PERFORM acs_object__delete(v_rec.revision_id);
end LOOP;
raise NOTICE ''Deleting associated item templates...'';
-- 4) unregister all templates to this item
delete from cr_item_template_map
where item_id = delete__item_id;
raise NOTICE ''Deleting item relationships...'';
-- Delete all relations on this item
for v_rel_val in select
rel_id
from
cr_item_rels
where
item_id = delete__item_id
or
related_object_id = delete__item_id
LOOP
PERFORM acs_rel__delete(v_rel_val.rel_id);
end loop;
raise NOTICE ''Deleting child relationships...'';
for v_rel_val in select
rel_id
from
cr_child_rels
where
child_id = delete__item_id
LOOP
PERFORM acs_rel__delete(v_rel_val.rel_id);
end loop;
raise NOTICE ''Deleting parent relationships...'';
for v_rel_val in select
rel_id, child_id
from
cr_child_rels
where
parent_id = delete__item_id
LOOP
PERFORM acs_rel__delete(v_rel_val.rel_id);
PERFORM content_item__delete(v_rel_val.child_id);
end loop;
raise NOTICE ''Deleting associated permissions...'';
-- 5) delete associated permissions
delete from acs_permissions
where object_id = delete__item_id;
raise NOTICE ''Deleting keyword associations...'';
-- 6) delete keyword associations
delete from cr_item_keyword_map
where item_id = delete__item_id;
raise NOTICE ''Deleting associated comments...'';
-- 7) delete associated comments
PERFORM journal_entry__delete_for_object(delete__item_id);
-- context_id debugging loop
--for v_error_val in c_error_cur loop
-- raise NOTICE ''ID='' || v_error_val.object_id || '' TYPE=''
-- || v_error_val.object_type);
--end loop;
raise NOTICE ''Deleting content item...'';
PERFORM acs_object__delete(delete__item_id);
return 0;
end;' language 'plpgsql';