-- Callbacks create table apm_package_callbacks ( version_id integer constraint apm_package_callbacks_vid_fk references apm_package_versions(version_id) on delete cascade, type varchar(40), proc varchar(300), constraint apm_package_callbacks_vt_un unique (version_id, type) ); comment on table apm_package_callbacks is ' This table holds names of Tcl procedures to invoke at the time (before or after) the package is installed, instantiated, or mounted. '; comment on column apm_package_callbacks.proc is ' Name of the Tcl proc. '; comment on column apm_package_callbacks.type is ' Indicates when the callback proc should be invoked, for example after-install. Valid values are given by the Tcl proc apm_supported_callback_types. '; -- Add column for auto-mount alter table apm_package_versions add auto_mount varchar(50); comment on column apm_package_versions.auto_mount is ' A dir under the main site site node where an instance of the package will be mounted automatically upon installation. Useful for site-wide services that need mounting such as general-comments and notifications. '; -- Recreate views for auto-mount drop view apm_package_version_info; create view apm_package_version_info as select v.package_key, t.package_uri, t.pretty_name, t.singleton_p, t.initial_install_p, v.version_id, v.version_name, v.version_uri, v.summary, v.description_format, v.description, v.release_date, v.vendor, v.vendor_uri, v.auto_mount, v.enabled_p, v.installed_p, v.tagged_p, v.imported_p, v.data_model_loaded_p, v.activation_date, v.deactivation_date, coalesce(v.content_length,0) as tarball_length, distribution_uri, distribution_date from apm_package_types t, apm_package_versions v where v.package_key = t.package_key; drop view apm_enabled_package_versions; create view apm_enabled_package_versions as select * from apm_package_version_info where enabled_p = 't'; -- Recreate functions for auto-mount 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 ); 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'; create or replace function apm_package_version__edit (integer,integer,varchar,varchar,varchar,varchar,varchar,timestamptz,varchar,varchar,varchar,boolean,boolean) returns integer as ' declare edit__new_version_id alias for $1; -- default null edit__version_id alias for $2; edit__version_name alias for $3; -- default null edit__version_uri alias for $4; edit__summary alias for $5; edit__description_format alias for $6; edit__description alias for $7; edit__release_date alias for $8; edit__vendor alias for $9; edit__vendor_uri alias for $10; edit__auto_mount alias for $11; edit__installed_p alias for $12; -- default ''f'' edit__data_model_loaded_p alias for $13; -- default ''f'' v_version_id apm_package_versions.version_id%TYPE; version_unchanged_p integer; begin -- Determine if version has changed. select case when count(*) = 0 then 0 else 1 end into version_unchanged_p from apm_package_versions where version_id = edit__version_id and version_name = edit__version_name; if version_unchanged_p <> 1 then v_version_id := apm_package_version__copy( edit__version_id, edit__new_version_id, edit__version_name, edit__version_uri, ''f'' ); else v_version_id := edit__version_id; end if; update apm_package_versions set version_uri = edit__version_uri, summary = edit__summary, description_format = edit__description_format, description = edit__description, release_date = date_trunc(''days'',now()), vendor = edit__vendor, vendor_uri = edit__vendor_uri, auto_mount = edit__auto_mount, installed_p = edit__installed_p, data_model_loaded_p = edit__data_model_loaded_p where version_id = v_version_id; return v_version_id; end;' language 'plpgsql'; 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; 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_files(file_id, version_id, path, file_type, db_type) select nextval(''t_acs_object_id_seq''), v_version_id, path, file_type, db_type from apm_package_files 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';