-- -- Upgrade script from 5.0d to 5.0d2 -- -- @author Simon Carstensen (simon@collaboraid.biz) -- -- @cvs-id $Id: upgrade-5.0d-5.0d2.sql,v 1.3 2003/08/25 21:40:16 donb Exp $ -- -- Adds column timezone to table user_preferences alter table user_preferences add column timezone varchar(100); -- Don Baccus new update trigger that's much much faster than the old -- one. drop trigger acs_objects_context_id_up_tr on acs_objects; drop function acs_objects_context_id_up_tr (); create function acs_objects_context_id_up_tr () returns opaque as ' declare pair record; outer record; inner record; security_context_root integer; begin if new.object_id = old.object_id and new.context_id = old.context_id and new.security_inherit_p = old.security_inherit_p then return new; end if; -- Remove my old ancestors from my descendants. for outer in select object_id from acs_object_context_index where ancestor_id = old.object_id and object_id <> old.object_id loop for inner in select ancestor_id from acs_object_context_index where object_id = old.object_id and ancestor_id <> old.object_id loop delete from acs_object_context_index where object_id = outer.object_id and ancestor_id = inner.ancestor_id; end loop; end loop; -- Kill all my old ancestors. delete from acs_object_context_index where object_id = old.object_id; insert into acs_object_context_index (object_id, ancestor_id, n_generations) values (new.object_id, new.object_id, 0); if new.context_id is not null and new.security_inherit_p = ''t'' then -- Now insert my new ancestors for my descendants. for pair in select * from acs_object_context_index where ancestor_id = new.object_id LOOP insert into acs_object_context_index (object_id, ancestor_id, n_generations) select pair.object_id, ancestor_id, n_generations + pair.n_generations + 1 as n_generations from acs_object_context_index where object_id = new.context_id; end loop; else security_context_root = acs__magic_object_id(''security_context_root''); if new.object_id != security_context_root then -- We need to make sure that new.OBJECT_ID and all of its -- children have security_context_root as an ancestor. for pair in select * from acs_object_context_index where ancestor_id = new.object_id LOOP insert into acs_object_context_index (object_id, ancestor_id, n_generations) values (pair.object_id, security_context_root, pair.n_generations + 1); end loop; end if; end if; return new; end;' language 'plpgsql'; create trigger acs_objects_context_id_up_tr after update on acs_objects for each row execute procedure acs_objects_context_id_up_tr ();