-- -- -- -- @author Dave Bauer (dave@thedesignexperience.org) -- @creation-date 2009-02-11 -- @cvs-id $Id: upgrade-5.5.0d4-5.5.0d5.sql,v 1.1 2009/02/12 02:27:02 daveb Exp $ -- create or replace function acs_group__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,varchar,varchar,integer) returns integer as ' declare new__group_id alias for $1; -- default null new__object_type alias for $2; -- default ''group'' new__creation_date alias for $3; -- default now() new__creation_user alias for $4; -- default null new__creation_ip alias for $5; -- default null new__email alias for $6; -- default null new__url alias for $7; -- default null new__group_name alias for $8; new__join_policy alias for $9; -- default null new__context_id alias for $10; -- default null v_group_id groups.group_id%TYPE; v_group_type_exists_p integer; v_join_policy groups.join_policy%TYPE; begin v_group_id := party__new(new__group_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__email, new__url, new__context_id); v_join_policy := new__join_policy; -- if join policy was not specified, select the default based on group type if v_join_policy is null or v_join_policy = '''' then select count(*) into v_group_type_exists_p from group_types where group_type = new__object_type; if v_group_type_exists_p = 1 then select default_join_policy into v_join_policy from group_types where group_type = new__object_type; else v_join_policy := ''open''; end if; end if; update acs_objects set title = new__group_name where object_id = v_group_id; insert into groups (group_id, group_name, join_policy) values (v_group_id, new__group_name, v_join_policy); -- setup the permissible relationship types for this group -- DRB: we have to call nextval() directly because the select may -- return more than one row. The sequence hack will only compute -- one nextval value causing the insert to fail ("may" in PG, which -- is actually broken. It should ALWAYS return exactly one value for -- the view. In PG it may or may not depending on the optimizer''s -- mood. PG group seems uninterested in acknowledging the fact that -- this is a bug) insert into group_rels (group_rel_id, group_id, rel_type) select nextval(''t_acs_object_id_seq''), v_group_id, rels.rel_type from ( select distinct g.rel_type from group_type_rels g, ( select parent.object_type as parent_type from acs_object_types child, acs_object_types parent where child.object_type <> parent.object_type and child.tree_sortkey between parent.tree_sortkey and tree_right(parent.tree_sortkey) and child.object_type = new__object_type order by parent.tree_sortkey desc) types where g.group_type = types.parent_type and not exists ( select 1 from group_rels where group_rels.group_id = v_group_id and group_rels.rel_type = g.rel_type) ) rels; return v_group_id; end;' language 'plpgsql';