-- procedure merge create or replace function membership_rel__merge (integer) returns integer as ' declare merge__rel_id alias for $1; begin update membership_rels set member_state = ''merged'' where rel_id = merge__rel_id; return 0; end;' language 'plpgsql'; alter table membership_rels drop constraint membership_rel_mem_ck; alter table membership_rels add constraint membership_rel_mem_ck check (member_state in ('approved','needs approval','banned','rejected','deleted','merged')); create function inline_0 () returns integer as ' declare attr_id acs_attributes.attribute_id%TYPE; begin attr_id := acs_attribute__create_attribute ( ''acs_object'', ''package_id'', ''integer'', ''Package ID'', ''Package IDs'', null, null, null, 0, 1, null, ''type_specific'', ''f'' ); attr_id := acs_attribute__create_attribute ( ''acs_object'', ''title'', ''string'', ''Title'', ''Titles'', null, null, null, 0, 1, null, ''type_specific'', ''f'' ); return 0; end;' language 'plpgsql'; select inline_0 (); drop function inline_0 (); alter table acs_objects add column title varchar(1000); alter table acs_objects alter column title set default null; alter table acs_objects add column package_id integer constraint acs_objects_package_id_fk references apm_packages(package_id) on delete set null; alter table acs_objects alter column package_id set default null; create index acs_objects_package_object_idx on acs_objects (package_id, object_id); create index acs_objects_title_idx on acs_objects(title); comment on column acs_objects.package_id is ' Which package instance this object belongs to. Please note that in mid-term this column will replace all package_ids of package specific tables. '; comment on column acs_objects.title is ' Title of the object if applicable. Please note that in mid-term this column will replace all titles or object_names of package specific tables. '; ---------- -- update data ---------- update acs_objects set title = (select group_name from groups where group_id = object_id) where object_id in (select group_id from groups); update acs_objects set title = (select email from parties where party_id = object_id) where object_type = 'party'; update acs_objects set title = (select first_names || ' ' || last_name from persons where person_id = object_id) where object_type in ('user','person'); update acs_objects set title = (select short_name from auth_authorities where authority_id = object_id) where object_type = 'authority'; update acs_objects set title = (select action from journal_entries where journal_id = object_id) where object_type = 'journal_entry'; update acs_objects set title = (select name from site_nodes where node_id = acs_objects.object_id), package_id = (select object_id from site_nodes where node_id = acs_objects.object_id) where object_type = 'site_node'; update acs_objects set title = (select instance_name from apm_packages where package_id = object_id), package_id = object_id where object_type in ('apm_package','apm_application','apm_service'); update acs_objects set title = (select package_key || ', Version ' || version_name from apm_package_versions where version_id = object_id) where object_type = 'apm_package_version'; update acs_objects set title = (select package_key || ': Parameter ' || parameter_name from apm_parameters where parameter_id = object_id) where object_type = 'apm_parameter'; update acs_objects set title = (select rel_type || ': ' || object_id_one || ' - ' || object_id_two from acs_rels where rel_id = object_id) where object_id in (select rel_id from acs_rels); update acs_objects set title = (select segment_name from rel_segments where segment_id = object_id) where object_type = 'rel_segment'; update acs_objects set title = (select constraint_name from rel_constraints where constraint_id = object_id) where object_type = 'rel_constraint'; update acs_objects set title = 'Unregistered Visitor' where object_id = 0; update acs_objects set title = 'Default Context' where object_id = -3; update acs_objects set title = 'Root Security Context' where object_id = -4; ------------------------ -- ACS_OBJECT PACKAGE -- ------------------------ drop function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean); drop function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer); create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean,varchar,integer) returns integer as ' declare new__object_id alias for $1; -- default null new__object_type alias for $2; -- default ''acs_object'' 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__context_id alias for $6; -- default null new__security_inherit_p alias for $7; -- default ''t'' new__title alias for $8; -- default null new__package_id alias for $9; -- default null v_object_id acs_objects.object_id%TYPE; v_creation_date timestamptz; v_title acs_objects.title%TYPE; v_object_type_pretty_name acs_object_types.pretty_name%TYPE; begin if new__object_id is null then select acs_object_id_seq.nextval into v_object_id from dual; else v_object_id := new__object_id; end if; if new__object_id is null then select pretty_name into v_object_type_pretty_name from acs_object_types where object_type = new__object_type; v_title := v_object_type_pretty_name || '' '' || v_object_id; else v_title := new__title; end if; if new__creation_date is null then v_creation_date:= now(); else v_creation_date := new__creation_date; end if; insert into acs_objects (object_id, object_type, title, package_id, context_id, creation_date, creation_user, creation_ip, security_inherit_p) values (v_object_id, new__object_type, v_title, new__package_id, new__context_id, v_creation_date, new__creation_user, new__creation_ip, new__security_inherit_p); PERFORM acs_object__initialize_attributes(v_object_id); return v_object_id; end;' language 'plpgsql'; create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer) returns integer as ' declare new__object_id alias for $1; -- default null new__object_type alias for $2; -- default ''acs_object'' 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__context_id alias for $6; -- default null v_object_id acs_objects.object_id%TYPE; v_creation_date timestamptz; begin return acs_object__new(new__object_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id, ''t'', null, null); end;' language 'plpgsql'; create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean) returns integer as ' declare new__object_id alias for $1; -- default null new__object_type alias for $2; -- default ''acs_object'' 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__context_id alias for $6; -- default null new__security_inherit_p alias for $7; -- default ''t'' begin return acs_object__new(new__object_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id, new__security_inherit_p, null, null); end;' language 'plpgsql'; create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean,varchar) returns integer as ' declare new__object_id alias for $1; -- default null new__object_type alias for $2; -- default ''acs_object'' 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__context_id alias for $6; -- default null new__security_inherit_p alias for $7; -- default ''t'' new__title alias for $8; -- default null begin return acs_object__new(new__object_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id, new__security_inherit_p, new__title, null); end;' language 'plpgsql'; create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,varchar,integer) returns integer as ' declare new__object_id alias for $1; -- default null new__object_type alias for $2; -- default ''acs_object'' 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__context_id alias for $6; -- default null new__title alias for $7; -- default null new__package_id alias for $8; -- default null begin return acs_object__new(new__object_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id, ''t'', new__title, new__package_id); end;' language 'plpgsql'; create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,varchar) returns integer as ' declare new__object_id alias for $1; -- default null new__object_type alias for $2; -- default ''acs_object'' 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__context_id alias for $6; -- default null new__title alias for $7; -- default null begin return acs_object__new(new__object_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id, ''t'', new__title, null); end;' language 'plpgsql'; drop function acs_object__name (integer); create function acs_object__name (integer) returns varchar as ' declare name__object_id alias for $1; object_name varchar; v_object_id integer; obj_type record; obj record; begin -- Find the name function for this object, which is stored in the -- name_method column of acs_object_types. Starting with this -- object''s actual type, traverse the type hierarchy upwards until -- a non-null name_method value is found. -- -- select name_method -- from acs_object_types -- start with object_type = (select object_type -- from acs_objects o -- where o.object_id = name__object_id) -- connect by object_type = prior supertype select title into object_name from acs_objects where object_id = name__object_id; if (object_name is not null) then return object_name; end if; for obj_type in select o2.name_method from acs_object_types o1, acs_object_types o2 where o1.object_type = (select object_type from acs_objects o where o.object_id = name__object_id) and o1.tree_sortkey between o2.tree_sortkey and tree_right(o2.tree_sortkey) order by o2.tree_sortkey desc loop if obj_type.name_method != '''' and obj_type.name_method is NOT null then -- Execute the first name_method we find (since we''re traversing -- up the type hierarchy from the object''s exact type) using -- Native Dynamic SQL, to ascertain the name of this object. -- --execute ''select '' || object_type.name_method || ''(:1) from dual'' for obj in execute ''select '' || obj_type.name_method || ''('' || name__object_id || '')::varchar as object_name'' loop object_name := obj.object_name; exit; end loop; exit; end if; end loop; return object_name; end;' language 'plpgsql' stable strict; -- function package_id create or replace function acs_object__package_id (integer) returns integer as ' declare p_object_id alias for $1; v_package_id acs_objects.package_id%TYPE; begin if p_object_id is null then return null; end if; select package_id into v_package_id from acs_objects where object_id = p_object_id; return v_package_id; end;' language 'plpgsql' stable strict; ------- -- Acs_Rels ------- drop function acs_rel__new (integer,varchar,integer,integer,integer,integer,varchar); create function acs_rel__new (integer,varchar,integer,integer,integer,integer,varchar) returns integer as ' declare new__rel_id alias for $1; -- default null new__rel_type alias for $2; -- default ''relationship'' new__object_id_one alias for $3; new__object_id_two alias for $4; context_id alias for $5; -- default null creation_user alias for $6; -- default null creation_ip alias for $7; -- default null v_rel_id acs_rels.rel_id%TYPE; begin -- XXX This should check that object_id_one and object_id_two are -- of the appropriate types. v_rel_id := acs_object__new ( new__rel_id, new__rel_type, now(), creation_user, creation_ip, context_id, ''t'', new__rel_type || '': '' || new__object_id_one || '' - '' || new__object_id_two, null ); insert into acs_rels (rel_id, rel_type, object_id_one, object_id_two) values (v_rel_id, new__rel_type, new__object_id_one, new__object_id_two); return v_rel_id; end;' language 'plpgsql'; --------- -- APM --------- drop function apm__register_parameter (integer,varchar,varchar,varchar,varchar,varchar,varchar,integer,integer); create or replace function apm__register_parameter (integer,varchar,varchar,varchar,varchar,varchar,varchar,integer,integer) returns integer as ' declare register_parameter__parameter_id alias for $1; -- default null register_parameter__package_key alias for $2; register_parameter__parameter_name alias for $3; register_parameter__description alias for $4; -- default null register_parameter__datatype alias for $5; -- default ''string'' register_parameter__default_value alias for $6; -- default null register_parameter__section_name alias for $7; -- default null register_parameter__min_n_values alias for $8; -- default 1 register_parameter__max_n_values alias for $9; -- default 1 v_parameter_id apm_parameters.parameter_id%TYPE; v_value_id apm_parameter_values.value_id%TYPE; v_pkg record; begin -- Create the new parameter. v_parameter_id := acs_object__new( register_parameter__parameter_id, ''apm_parameter'', now(), null, null, null, ''t'', register_parameter__package_key || '' - '' || register_parameter__parameter_name, null ); insert into apm_parameters (parameter_id, parameter_name, description, package_key, datatype, default_value, section_name, min_n_values, max_n_values) values (v_parameter_id, register_parameter__parameter_name, register_parameter__description, register_parameter__package_key, register_parameter__datatype, register_parameter__default_value, register_parameter__section_name, register_parameter__min_n_values, register_parameter__max_n_values); -- Propagate parameter to new instances. for v_pkg in select package_id from apm_packages where package_key = register_parameter__package_key loop v_value_id := apm_parameter_value__new( null, v_pkg.package_id, v_parameter_id, register_parameter__default_value ); end loop; return v_parameter_id; end;' language 'plpgsql'; create or replace function apm__register_package (varchar,varchar,varchar,varchar,varchar,boolean,boolean,varchar,integer) returns integer as ' declare package_key alias for $1; pretty_name alias for $2; pretty_plural alias for $3; package_uri alias for $4; package_type alias for $5; initial_install_p alias for $6; -- default ''f'' singleton_p alias for $7; -- default ''f'' spec_file_path alias for $8; -- default null spec_file_mtime alias for $9; -- default null begin PERFORM apm_package_type__create_type( package_key, pretty_name, pretty_plural, package_uri, package_type, initial_install_p, singleton_p, spec_file_path, spec_file_mtime ); return 0; end;' language 'plpgsql'; drop function apm__update_parameter (integer,varchar,varchar,varchar,varchar,varchar,integer,integer); create or replace function apm__update_parameter (integer,varchar,varchar,varchar,varchar,varchar,integer,integer) returns varchar as ' declare update_parameter__parameter_id alias for $1; update_parameter__parameter_name alias for $2; -- default null update_parameter__description alias for $3; -- default null update_parameter__datatype alias for $4; -- default ''string'' update_parameter__default_value alias for $5; -- default null update_parameter__section_name alias for $6; -- default null update_parameter__min_n_values alias for $7; -- default 1 update_parameter__max_n_values alias for $8; -- default 1 begin update apm_parameters set parameter_name = coalesce(update_parameter__parameter_name, parameter_name), default_value = coalesce(update_parameter__default_value, default_value), datatype = coalesce(update_parameter__datatype, datatype), description = coalesce(update_parameter__description, description), section_name = coalesce(update_parameter__section_name, section_name), min_n_values = coalesce(update_parameter__min_n_values, min_n_values), max_n_values = coalesce(update_parameter__max_n_values, max_n_values) where parameter_id = update_parameter__parameter_id; update acs_objects set title = (select package_key || '': Parameter '' || parameter_name from apm_parameters where parameter_id = update_parameter__parameter_id) where object_id = update_parameter__parameter_id; return parameter_id; end;' language 'plpgsql'; drop function apm_package__new (integer,varchar,varchar,varchar,timestamptz,integer,varchar,integer); create or replace function apm_package__new (integer,varchar,varchar,varchar,timestamptz,integer,varchar,integer) returns integer as ' declare new__package_id alias for $1; -- default null new__instance_name alias for $2; -- default null new__package_key alias for $3; new__object_type alias for $4; -- default ''apm_package'' new__creation_date alias for $5; -- default now() new__creation_user alias for $6; -- default null new__creation_ip alias for $7; -- default null new__context_id alias for $8; -- default null v_singleton_p integer; v_package_type apm_package_types.package_type%TYPE; v_num_instances integer; v_package_id apm_packages.package_id%TYPE; v_instance_name apm_packages.instance_name%TYPE; begin v_singleton_p := apm_package__singleton_p( new__package_key ); v_num_instances := apm_package__num_instances( new__package_key ); if v_singleton_p = 1 and v_num_instances >= 1 then select package_id into v_package_id from apm_packages where package_key = new__package_key; return v_package_id; else v_package_id := acs_object__new( new__package_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id ); if new__instance_name is null or new__instance_name = '''' then v_instance_name := new__package_key || '' '' || v_package_id; else v_instance_name := new__instance_name; end if; select package_type into v_package_type from apm_package_types where package_key = new__package_key; insert into apm_packages (package_id, package_key, instance_name) values (v_package_id, new__package_key, v_instance_name); update acs_objects set title = v_instance_name, package_id = v_package_id where object_id = v_package_id; if v_package_type = ''apm_application'' then insert into apm_applications (application_id) values (v_package_id); else insert into apm_services (service_id) values (v_package_id); end if; PERFORM apm_package__initialize_parameters( v_package_id, new__package_key ); return v_package_id; end if; end;' language 'plpgsql'; drop function apm_package_version__new (integer,varchar,varchar,varchar,varchar,varchar,varchar,timestamptz,varchar,varchar,varchar,boolean,boolean); create or replace function apm_package_version__new (integer,varchar,varchar,varchar,varchar,varchar,varchar,timestamptz,varchar,varchar,varchar,boolean,boolean) returns integer as ' declare apm_pkg_ver__version_id alias for $1; -- default null apm_pkg_ver__package_key alias for $2; apm_pkg_ver__version_name alias for $3; -- default null apm_pkg_ver__version_uri alias for $4; apm_pkg_ver__summary alias for $5; apm_pkg_ver__description_format alias for $6; apm_pkg_ver__description alias for $7; apm_pkg_ver__release_date alias for $8; apm_pkg_ver__vendor alias for $9; apm_pkg_ver__vendor_uri alias for $10; apm_pkg_ver__auto_mount alias for $11; apm_pkg_ver__installed_p alias for $12; -- default ''f'' apm_pkg_ver__data_model_loaded_p alias for $13; -- default ''f'' v_version_id apm_package_versions.version_id%TYPE; begin if apm_pkg_ver__version_id is null then select nextval(''t_acs_object_id_seq'') into v_version_id from dual; else v_version_id := apm_pkg_ver__version_id; end if; v_version_id := acs_object__new( v_version_id, ''apm_package_version'', now(), null, null, null, ''t'', apm_pkg_ver__package_key || '', Version '' || apm_pkg_ver__version_name, null ); insert into apm_package_versions (version_id, package_key, version_name, version_uri, summary, description_format, description, release_date, vendor, vendor_uri, auto_mount, installed_p, data_model_loaded_p) values (v_version_id, apm_pkg_ver__package_key, apm_pkg_ver__version_name, apm_pkg_ver__version_uri, apm_pkg_ver__summary, apm_pkg_ver__description_format, apm_pkg_ver__description, apm_pkg_ver__release_date, apm_pkg_ver__vendor, apm_pkg_ver__vendor_uri, apm_pkg_ver__auto_mount, apm_pkg_ver__installed_p, apm_pkg_ver__data_model_loaded_p); return v_version_id; end;' language 'plpgsql'; drop function apm_package_version__copy (integer,integer,varchar,varchar,boolean); create or replace function apm_package_version__copy (integer,integer,varchar,varchar,boolean) returns integer as ' declare copy__version_id alias for $1; copy__new_version_id alias for $2; -- default null copy__new_version_name alias for $3; copy__new_version_uri alias for $4; copy__copy_owners_p alias for $5; v_version_id integer; begin v_version_id := acs_object__new( copy__new_version_id, ''apm_package_version'', now(), null, null, null ); insert into apm_package_versions(version_id, package_key, version_name, version_uri, summary, description_format, description, release_date, vendor, vendor_uri, auto_mount) select v_version_id, package_key, copy__new_version_name, copy__new_version_uri, summary, description_format, description, release_date, vendor, vendor_uri, auto_mount from apm_package_versions where version_id = copy__version_id; update acs_objects set title = (select v.package_key || '', Version '' || v.version_name from apm_package_versions v where v.version_id = copy__version_id) where object_id = copy__version_id; insert into apm_package_dependencies(dependency_id, version_id, dependency_type, service_uri, service_version) select nextval(''t_acs_object_id_seq''), v_version_id, dependency_type, service_uri, service_version from apm_package_dependencies where version_id = copy__version_id; insert into apm_package_callbacks (version_id, type, proc) select v_version_id, type, proc from apm_package_callbacks where version_id = copy__version_id; if copy__copy_owners_p then insert into apm_package_owners(version_id, owner_uri, owner_name, sort_key) select v_version_id, owner_uri, owner_name, sort_key from apm_package_owners where version_id = copy__version_id; end if; return v_version_id; end;' language 'plpgsql'; ----------- -- Authentication ----------- drop function authority__new (integer,varchar,varchar,varchar,boolean,integer,integer,integer,varchar,varchar,integer,varchar,varchar,integer,varchar,integer); create or replace function authority__new ( integer, -- authority_id varchar, -- object_type varchar, -- short_name varchar, -- pretty_name boolean, -- enabled_p integer, -- sort_order integer, -- auth_impl_id integer, -- pwd_impl_id varchar, -- forgotten_pwd_url varchar, -- change_pwd_url integer, -- register_impl_id varchar, -- register_url varchar, -- help_contact_text integer, -- creation_user varchar, -- creation_ip integer -- context_id ) returns integer as ' declare p_authority_id alias for $1; -- default null, p_object_type alias for $2; -- default ''authority'' p_short_name alias for $3; p_pretty_name alias for $4; p_enabled_p alias for $5; -- default ''t'' p_sort_order alias for $6; p_auth_impl_id alias for $7; -- default null p_pwd_impl_id alias for $8; -- default null p_forgotten_pwd_url alias for $9; -- default null p_change_pwd_url alias for $10; -- default null p_register_impl_id alias for $11; -- default null p_register_url alias for $12; -- default null p_help_contact_text alias for $13; -- default null, p_creation_user alias for $14; -- default null p_creation_ip alias for $15; -- default null p_context_id alias for $16; -- default null v_authority_id integer; v_object_type varchar; v_sort_order integer; begin if p_object_type is null then v_object_type := ''authority''; else v_object_type := p_object_type; end if; if p_sort_order is null then select into v_sort_order max(sort_order) + 1 from auth_authorities; else v_sort_order := p_sort_order; end if; -- Instantiate the ACS Object super type with auditing info v_authority_id := acs_object__new( p_authority_id, v_object_type, now(), p_creation_user, p_creation_ip, p_context_id, ''t'', p_short_name, null ); insert into auth_authorities (authority_id, short_name, pretty_name, enabled_p, sort_order, auth_impl_id, pwd_impl_id, forgotten_pwd_url, change_pwd_url, register_impl_id, help_contact_text) values (v_authority_id, p_short_name, p_pretty_name, p_enabled_p, v_sort_order, p_auth_impl_id, p_pwd_impl_id, p_forgotten_pwd_url, p_change_pwd_url, p_register_impl_id, p_help_contact_text); return v_authority_id; end; ' language 'plpgsql'; ------------------- -- PARTY PACKAGE -- ------------------- drop function party__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,integer); create or replace function party__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,integer) returns integer as ' declare new__party_id alias for $1; -- default null new__object_type alias for $2; -- default ''party'' 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; new__url alias for $7; -- default null new__context_id alias for $8; -- default null v_party_id parties.party_id%TYPE; begin v_party_id := acs_object__new(new__party_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__context_id, ''t'', new__email, null); insert into parties (party_id, email, url) values (v_party_id, lower(new__email), new__url); return v_party_id; end;' language 'plpgsql'; -------------------- -- PERSON PACKAGE -- -------------------- drop function person__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,varchar,varchar,integer); create or replace function person__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,varchar,varchar,integer) returns integer as ' declare new__person_id alias for $1; -- default null new__object_type alias for $2; -- default ''person'' 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; new__url alias for $7; -- default null new__first_names alias for $8; new__last_name alias for $9; new__context_id alias for $10; -- default null v_person_id persons.person_id%TYPE; begin v_person_id := party__new(new__person_id, new__object_type, new__creation_date, new__creation_user, new__creation_ip, new__email, new__url, new__context_id); update acs_objects set title = new__first_names || '' '' || new__last_name where object_id = v_person_id; insert into persons (person_id, first_names, last_name) values (v_person_id, new__first_names, new__last_name); return v_person_id; end;' language 'plpgsql'; --------- -- Acs Groups --------- drop function acs_group__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,varchar,varchar,integer); 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, g.rel_type from group_type_rels g where g.group_type = new__object_type; return v_group_id; end;' language 'plpgsql'; -------- -- Journal -------- drop function journal_entry__new (integer,integer,varchar,varchar,timestamptz,integer,varchar,varchar); create function journal_entry__new (integer,integer,varchar,varchar,timestamptz,integer,varchar,varchar) returns integer as ' declare new__journal_id alias for $1; -- default null new__object_id alias for $2; new__action alias for $3; new__action_pretty alias for $4; -- default null new__creation_date alias for $5; -- default now() new__creation_user alias for $6; -- default null new__creation_ip alias for $7; -- default null new__msg alias for $8; -- default null v_journal_id journal_entries.journal_id%TYPE; begin v_journal_id := acs_object__new ( new__journal_id, ''journal_entry'', new__creation_date, new__creation_user, new__creation_ip, new__object_id, ''t'', new__action, null ); insert into journal_entries ( journal_id, object_id, action, action_pretty, msg ) values ( v_journal_id, new__object_id, new__action, new__action_pretty, new__msg ); return v_journal_id; end;' language 'plpgsql'; -------- -- Rel Segments -------- drop function rel_segment__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,varchar,integer,varchar,integer); create or replace function rel_segment__new (integer,varchar,timestamptz,integer,varchar,varchar,varchar,varchar,integer,varchar,integer) returns integer as ' declare new__segment_id alias for $1; -- default null object_type alias for $2; -- default ''rel_segment'' creation_date alias for $3; -- default now() creation_user alias for $4; -- default null creation_ip alias for $5; -- default null email alias for $6; -- default null url alias for $7; -- default null new__segment_name alias for $8; new__group_id alias for $9; new__rel_type alias for $10; context_id alias for $11; -- default null v_segment_id rel_segments.segment_id%TYPE; begin v_segment_id := party__new(new__segment_id, object_type, creation_date, creation_user, creation_ip, email, url, context_id); update acs_objects set title = new__segment_name where object_id = v_segment_id; insert into rel_segments (segment_id, segment_name, group_id, rel_type) values (v_segment_id, new__segment_name, new__group_id, new__rel_type); return v_segment_id; end;' language 'plpgsql'; -------- -- Rel Constraints -------- drop function rel_constraint__new (integer,varchar,varchar,integer,char,integer,integer,integer,varchar); create or replace function rel_constraint__new (integer,varchar,varchar,integer,char,integer,integer,integer,varchar) returns integer as ' declare new__constraint_id alias for $1; -- default null new__constraint_type alias for $2; -- default ''rel_constraint'' new__constraint_name alias for $3; new__rel_segment alias for $4; new__rel_side alias for $5; -- default ''two'' new__required_rel_segment alias for $6; new__context_id alias for $7; -- default null new__creation_user alias for $8; -- default null new__creation_ip alias for $9; -- default null v_constraint_id rel_constraints.constraint_id%TYPE; begin v_constraint_id := acs_object__new ( new__constraint_id, new__constraint_type, now(), new__creation_user, new__creation_ip, new__context_id, ''t'', new__constraint_name, null ); insert into rel_constraints (constraint_id, constraint_name, rel_segment, rel_side, required_rel_segment) values (v_constraint_id, new__constraint_name, new__rel_segment, new__rel_side, new__required_rel_segment); return v_constraint_id; end;' language 'plpgsql'; -------- -- Site Nodes -------- drop function site_node__new (integer,integer,varchar,integer,boolean,boolean,integer,varchar); create or replace function site_node__new (integer,integer,varchar,integer,boolean,boolean,integer,varchar) returns integer as ' declare new__node_id alias for $1; -- default null new__parent_id alias for $2; -- default null new__name alias for $3; new__object_id alias for $4; -- default null new__directory_p alias for $5; new__pattern_p alias for $6; -- default ''f'' new__creation_user alias for $7; -- default null new__creation_ip alias for $8; -- default null v_node_id site_nodes.node_id%TYPE; v_directory_p site_nodes.directory_p%TYPE; begin if new__parent_id is not null then select directory_p into v_directory_p from site_nodes where node_id = new__parent_id; if v_directory_p = ''f'' then raise EXCEPTION ''-20000: Node % is not a directory'', new__parent_id; end if; end if; v_node_id := acs_object__new ( new__node_id, ''site_node'', now(), new__creation_user, new__creation_ip, null, ''t'', new__name, new__object_id ); insert into site_nodes (node_id, parent_id, name, object_id, directory_p, pattern_p) values (v_node_id, new__parent_id, new__name, new__object_id, new__directory_p, new__pattern_p); return v_node_id; end;' language 'plpgsql';