-- @author Vinod Kurup (vinod@kurup.com) -- @creation-date 2002-10-27 -- fix in function sortable_version_name create or replace function apm_package_version__sortable_version_name (varchar) returns varchar as ' declare version_name alias for $1; a_fields integer; a_start integer; a_end integer; a_order varchar(1000) default ''''; a_char char(1); a_seen_letter boolean default ''f''; begin a_fields := 0; a_start := 1; loop a_end := a_start; -- keep incrementing a_end until we run into a non-number while substr(version_name, a_end, 1) >= ''0'' and substr(version_name, a_end, 1) <= ''9'' loop a_end := a_end + 1; end loop; if a_end = a_start then return -1; -- raise_application_error(-20000, ''Expected number at position '' || a_start); end if; if a_end - a_start > 4 then return -1; -- raise_application_error(-20000, ''Numbers within versions can only be up to 4 digits long''); end if; -- zero-pad and append the number a_order := a_order || substr(''0000'', 1, 4 - (a_end - a_start)) || substr(version_name, a_start, a_end - a_start) || ''.''; a_fields := a_fields + 1; if a_end > length(version_name) then -- end of string - we''re outta here if a_seen_letter = ''f'' then -- append the "final" suffix if there haven''t been any letters -- so far (i.e., not development/alpha/beta) a_order := a_order || repeat(''0000.'',7 - a_fields) || '' 3F.''; end if; return a_order; end if; -- what''s the next character? if a period, just skip it a_char := substr(version_name, a_end, 1); if a_char = ''.'' then else -- if the next character was a letter, append the appropriate characters if a_char = ''d'' then a_order := a_order || repeat(''0000.'',7 - a_fields) || '' 0D.''; else if a_char = ''a'' then a_order := a_order || repeat(''0000.'',7 - a_fields) || '' 1A.''; else if a_char = ''b'' then a_order := a_order || repeat(''0000.'',7 - a_fields) || '' 2B.''; end if; end if; end if; -- can''t have something like 3.3a1b2 - just one letter allowed! if a_seen_letter = ''t'' then return -1; -- raise_application_error(-20000, ''Not allowed to have two letters in version name '''''' -- || version_name || ''''''''); end if; a_seen_letter := ''t''; -- end of string - we''re done! if a_end = length(version_name) then return a_order; end if; end if; a_start := a_end + 1; end loop; end;' language 'plpgsql'; -- typo fix create or replace function membership_rel__unapprove (integer) returns integer as ' declare unapprove__rel_id alias for $1; begin update membership_rels set member_state = ''needs approval'' where rel_id = unapprove__rel_id; return 0; end;' language 'plpgsql'; -- fix old PG sequence/view hack in apm-create.sql create or replace function apm_package_version__new (integer,varchar,varchar,varchar,varchar,varchar,varchar,timestamp,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__installed_p alias for $11; -- default ''f'' apm_pkg_ver__data_model_loaded_p alias for $12; -- default ''f'' v_version_id apm_package_versions.version_id%TYPE; begin if apm_pkg_ver__version_id = '''' or 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, 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__installed_p, apm_pkg_ver__data_model_loaded_p); 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) select v_version_id, package_key, copy__new_version_name, copy__new_version_uri, summary, description_format, description, release_date, vendor, vendor_uri 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; 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'; create or replace function apm_package_version__add_file (integer,integer,varchar,varchar, varchar) returns integer as ' declare add_file__file_id alias for $1; -- default null add_file__version_id alias for $2; add_file__path alias for $3; add_file__file_type alias for $4; add_file__db_type alias for $5; -- default null v_file_id apm_package_files.file_id%TYPE; v_file_exists_p integer; begin select file_id into v_file_id from apm_package_files where version_id = add_file__version_id and path = add_file__path; if NOT FOUND then if add_file__file_id is null then select nextval(''t_acs_object_id_seq'') into v_file_id from dual; else v_file_id := add_file__file_id; end if; insert into apm_package_files (file_id, version_id, path, file_type, db_type) values (v_file_id, add_file__version_id, add_file__path, add_file__file_type, add_file__db_type); end if; return v_file_id; end;' language 'plpgsql'; create or replace function apm_package_version__add_interface (integer,integer,varchar,varchar) returns integer as ' declare add_interface__interface_id alias for $1; -- default null add_interface__version_id alias for $2; add_interface__interface_uri alias for $3; add_interface__interface_version alias for $4; v_dep_id apm_package_dependencies.dependency_id%TYPE; begin if add_interface__interface_id is null then select nextval(''t_acs_object_id_seq'') into v_dep_id from dual; else v_dep_id := add_interface__interface_id; end if; insert into apm_package_dependencies (dependency_id, version_id, dependency_type, service_uri, service_version) values (v_dep_id, add_interface__version_id, ''provides'', add_interface__interface_uri, add_interface__interface_version); return v_dep_id; end;' language 'plpgsql'; create or replace function apm_package_version__add_dependency (integer,integer,varchar,varchar) returns integer as ' declare add_dependency__dependency_id alias for $1; -- default null add_dependency__version_id alias for $2; add_dependency__dependency_uri alias for $3; add_dependency__dependency_version alias for $4; v_dep_id apm_package_dependencies.dependency_id%TYPE; begin if add_dependency__dependency_id is null then select nextval(''t_acs_object_id_seq'') into v_dep_id from dual; else v_dep_id := add_dependency__dependency_id; end if; insert into apm_package_dependencies (dependency_id, version_id, dependency_type, service_uri, service_version) values (v_dep_id, add_dependency__version_id, ''requires'', add_dependency__dependency_uri, add_dependency__dependency_version); return v_dep_id; end;' language 'plpgsql';