Rev 1373 | Rev 2362 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
---------------------------------------------------------- File created - Thursday-September-06-2012------------------------------------------------------------------------------------------------------------------ DDL for Function ORA_SYSDATE--------------------------------------------------------CREATE OR REPLACE FUNCTION "ORA_SYSDATE"RETURN DATEIS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */BEGINRETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY' ),'DD-MON-YYYY' );END ORA_SYSDATE;/---------------------------------------------------------- DDL for Function GET_AUTOMATED_LABEL--------------------------------------------------------CREATE OR REPLACE FUNCTION "GET_AUTOMATED_LABEL" ( nPvId IN NUMBER ) RETURN VARCHAR2 IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */sPkgName VARCHAR2(4000);sVext VARCHAR2(4000);BEGIN-- Get package detailsSELECT pkg.PKG_NAME, pv.V_EXT INTO sPkgName, sVextFROM PACKAGE_VERSIONS pv,PACKAGES pkgWHERE pv.PKG_ID = pkg.PKG_IDAND pv.PV_ID = nPvId;-- Generate Label for automated buildRETURN UPPER( sPkgName ||'.'|| nPvId || sVext ||'.WIP' );END GET_AUTOMATED_LABEL;/---------------------------------------------------------- DDL for Function CAN_EDIT_PKG_IN_PROJECT--------------------------------------------------------CREATE OR REPLACE FUNCTION "CAN_EDIT_PKG_IN_PROJECT" ( nPvId IN NUMBER, nRtagId IN NUMBER ) RETURN NUMBER IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */VExt PACKAGE_VERSIONS.V_EXT%TYPE;ProjId NUMBER;RowCount NUMBER;cReleaseMode CHAR(1);BEGIN--RETURN 1;/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL) OR (nRtagId < 1)THENRETURN 0;END IF;/*-------------------------------------------------------*//*-- First Check. See if package is used through release reference --*/SELECT COUNT(rc.PV_ID) INTO RowCountFROM (SELECT rl.REF_RTAG_IDFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagId) rl,RELEASE_CONTENT rcWHERE rc.RTAG_ID = rl.REF_RTAG_IDAND rc.PV_ID = nPvId;-- Decide if package can be editedIF RowCount > 0 THEN-- Package is referenced from other release, hence cannot be editedRETURN 0;ELSE-- Check is only done for releases in restrictive modeSELECT rt.OFFICIAL INTO cReleaseModeFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;IF cReleaseMode = 'N'OR cReleaseMode = 'R' THEN-- Do not do any firther checking,-- Package is editable hereRETURN 1;END IF;END IF;/*-- Further checking --*/-- Get proj_idSELECT rt.PROJ_ID INTO ProjIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;BEGIN-- Get v_extSELECT pv.V_EXT INTO VextFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = nPvId;EXCEPTIONWHEN NO_DATA_FOUND THENVext := NULL;END;--Temp Hack for Step ProjectIF ProjId != 281 THEN-- Find if package can be edited in this projectSELECT COUNT(pe.EXT_NAME) INTO RowCountFROM PROJECT_EXTENTIONS peWHERE pe.PROJ_ID != ProjIdAND pe.EXT_NAME = VExt;END IF;-- Decide if package can be editedIF RowCount > 0 THEN-- Package extension is found in other projects, hece NOT EDITABLERETURN 0;ELSERETURN 1;END IF;END CAN_EDIT_PKG_IN_PROJECT;/---------------------------------------------------------- DDL for Function GET_PV_FIRST_MODIFIED--------------------------------------------------------CREATE OR REPLACE FUNCTION "GET_PV_FIRST_MODIFIED" (v_pv_id NUMBER) RETURN DATE ISret DATE;BEGINSELECT q.modified_stampINTO retFROM (SELECT level AS lvl, pvc.pv_id, pvc.modified_stamp, pvc.change_typeFROM package_versions pvcSTART WITH pvc.pv_id = v_pv_idCONNECT BY NOCYCLE pvc.pv_id = PRIOR pvc.last_pv_id) QWHERE q.change_type IS NOT NULLAND rownum = 1ORDER BY q.lvl;RETURN ret;END;/---------------------------------------------------------- DDL for Function GET_BUILD_NUMBER--------------------------------------------------------CREATE OR REPLACE FUNCTION "GET_BUILD_NUMBER" (s_version IN VARCHAR2) RETURN VARCHAR2IS/* ---------------------------------------------------------------------------Version: 1.0.0--------------------------------------------------------------------------- */BEGINIF is_number(s_version) AND LENGTH(s_version) > 3THENRETURN MOD(TO_NUMBER(s_version), 1000);ELSERETURN 0;END IF;END get_build_number;/---------------------------------------------------------- DDL for Function ORA_SYSDATETIME--------------------------------------------------------CREATE OR REPLACE FUNCTION "ORA_SYSDATETIME"RETURN DATEIS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */BEGINRETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' );END ORA_SYSDATETIME;/---------------------------------------------------------- DDL for Function IS_VERSION_EXTENSION--------------------------------------------------------CREATE OR REPLACE FUNCTION "IS_VERSION_EXTENSION" (SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE) RETURN BOOLEANIS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */BEGINIF LENGTH ( TRIM (TRANSLATE (SSV_EXT, '.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',' ') ) ) > 0THENRETURN FALSE;ELSERETURN TRUE;END IF;END IS_VERSION_EXTENSION;/---------------------------------------------------------- DDL for Function IS_NUMBER--------------------------------------------------------CREATE OR REPLACE FUNCTION "IS_NUMBER" (p_val IN VARCHAR2) RETURN BOOLEANIStemp_num NUMBER;/* ---------------------------------------------------------------------------Version: 1.0.0--------------------------------------------------------------------------- */BEGINtemp_num := TO_NUMBER(p_val);RETURN true;EXCEPTION WHEN VALUE_ERROR THENRETURN false;END IS_NUMBER;/---------------------------------------------------------- DDL for Function GET_PATCH_VERSION--------------------------------------------------------CREATE OR REPLACE FUNCTION "GET_PATCH_VERSION" (s_version IN VARCHAR2) RETURN VARCHAR2IS/* ---------------------------------------------------------------------------Version: 1.0.0--------------------------------------------------------------------------- */BEGINIF is_number(s_version) AND LENGTH(s_version) > 3THENRETURN FLOOR(TO_NUMBER(s_version) / 1000);ELSERETURN s_version;END IF;END get_patch_version;/---------------------------------------------------------- DDL for Function IN_LIST_NUMBER2--------------------------------------------------------CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER2" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */sync_rtags RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();pos NUMBER;in_list VARCHAR2(32767) := sInList || ',';BEGINIF NOT sInList IS NULLTHENLOOPEXIT WHEN in_list IS NULL;pos := INSTR ( in_list, ',' );sync_rtags.extend;sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );in_list := SUBSTR ( in_list, pos+1 );END LOOP;END IF;RETURN sync_rtags;END IN_LIST_NUMBER2;/---------------------------------------------------------- DDL for Function DT_ADDUSEROBJECT--------------------------------------------------------CREATE OR REPLACE FUNCTION "DT_ADDUSEROBJECT" RETURN NUMBER IS NEWOBJECTID NUMBER; BEGIN /* GET THE NEXT VALUE FROM THE SEQUENCE FOR THE OBJECT ID */ SELECT MICROSOFTSEQDTPROPERTIES.NEXTVAL INTO NEWOBJECTID FROM DUAL; /* ADD THE PARENT NODE FOR THE NEW OBJECT */ INSERT INTO MICROSOFTDTPROPERTIES ( ID, OBJECTID, PROPERTY ) VALUES ( NEWOBJECTID, NEWOBJECTID, 'DtgSchemaOBJECT' ); RETURN( NEWOBJECTID ); END DT_ADDUSEROBJECT;/---------------------------------------------------------- DDL for Function IN_LIST_NUMBER--------------------------------------------------------CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */sync_rtags RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();pos NUMBER;in_list VARCHAR2(4000) := sInList || ',';BEGINIF NOT sInList IS NULLTHENLOOPEXIT WHEN in_list IS NULL;pos := INSTR ( in_list, ',' );sync_rtags.extend;sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );in_list := SUBSTR ( in_list, pos+1 );END LOOP;END IF;RETURN sync_rtags;END IN_LIST_NUMBER;/---------------------------------------------------------- DDL for Function RELEASE_MODE--------------------------------------------------------CREATE OR REPLACE FUNCTION "RELEASE_MODE" ( nRtagId IN NUMBER ) RETURN CHAR IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */returnValue CHAR(1);BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Get release modeSELECT rt.OFFICIAL INTO returnValueFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;RETURN returnValue;END RELEASE_MODE;/---------------------------------------------------------- DDL for Function PERL_DBD_TESTFUNC--------------------------------------------------------CREATE OR REPLACE FUNCTION "PERL_DBD_TESTFUNC" (a in integer, b in integer) return integer is c integer; begin if b is null then c := 0; else c := b; end if; return a * c + 1; end;/---------------------------------------------------------- DDL for Function GET_V_EXT--------------------------------------------------------CREATE OR REPLACE FUNCTION "GET_V_EXT" (SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE) RETURN VARCHAR2 IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;lastDot NUMBER;BEGINlastDot := INSTR (SSpkg_version, '.', -1);IF ( lastDot > 0 ) AND ( lastDot != LENGTH(SSpkg_version) )THEN-- YES dot separator found --SSV_EXT := SUBSTR (SSpkg_version, lastDot, LENGTH(SSpkg_version)-lastDot+1);IF IS_VERSION_EXTENSION ( SSV_EXT )THENRETURN SSV_EXT;ELSERETURN NULL;END IF;ELSE-- NO dot separator found --RETURN NULL;END IF;END GET_V_EXT;/---------------------------------------------------------- DDL for Function IN_LIST_VARCHAR2--------------------------------------------------------CREATE OR REPLACE FUNCTION "IN_LIST_VARCHAR2" ( sInList IN VARCHAR2, cSeparator IN VARCHAR2 ) RETURN RELMGR_VARCHAR2_TAB_t IS/* ---------------------------------------------------------------------------Version: 3.1--------------------------------------------------------------------------- */cItemCollection RELMGR_VARCHAR2_TAB_t := RELMGR_VARCHAR2_TAB_t();pos NUMBER;in_list VARCHAR2(4000) := sInList || cSeparator;val VARCHAR2(4000);BEGINIF NOT sInList IS NULLTHENLOOPEXIT WHEN in_list IS NULL;pos := INSTR ( in_list, cSeparator );val := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );IF (NOT val IS NULL) THENcItemCollection.extend;cItemCollection(cItemCollection.count) := val;END IF;in_list := SUBSTR ( in_list, pos+1 );END LOOP;END IF;RETURN cItemCollection;END IN_LIST_VARCHAR2;/---------------------------------------------------------- DDL for Package PK_PROJECT--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_PROJECT" ISTYPE typecur IS REF CURSOR;/*------------------------------------------------------------------------*/PROCEDURE update_base_url (nprojid IN projects.proj_id%TYPE,sbaseurl IN VARCHAR2);/*------------------------------------------------------------------------*/PROCEDURE update_project_config (nprojid IN projects.proj_id%TYPE,sbaseurl IN VARCHAR2,sjirakey IN VARCHAR2);/*------------------------------------------------------------------------*/END pk_project;/---------------------------------------------------------- DDL for Package PK_PACKAGE--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_PACKAGE"IS/*------------------------------|| Last Modified: Jeremy Tweddle|| Modified Date: 24/08/2007||------------------------------*/TYPE typecur IS REF CURSOR;/*================================================================================================*/PROCEDURE new_version (nlastpvid IN NUMBER,snewpkgversion IN VARCHAR2 DEFAULT NULL,cbuildtype IN CHAR,nsettopvid IN NUMBER DEFAULT NULL,nrtagid IN NUMBER,nuserid IN NUMBER,enumissues_state_imported IN NUMBER,returnpvid OUT NUMBER);PROCEDURE change_state (pvid IN NUMBER,newstate IN package_versions.dlocked%TYPE,userid IN NUMBER);PROCEDURE new_patch (snewpatchversion IN package_versions.pkg_version%TYPE,nparentpvid IN NUMBER,spatchidlist IN VARCHAR2,nuserid IN NUMBER,returnpatchid OUT NUMBER);PROCEDURE obsolete_patch (patchid IN NUMBER,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER);PROCEDURE obsolete_patches (spatchidlist IN VARCHAR2,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER);PROCEDURE destroy_package (pvid IN NUMBER,overridewarnings IN CHAR DEFAULT 'N',problemstring OUT VARCHAR2);PROCEDURE add_process (nprocid IN processes.proc_id%TYPE,shealthtag IN processes.proc_name%TYPE,sprocdesc IN processes.proc_description%TYPE,scmdinterface IN processes.run_as%TYPE,spkgowner IN processes.pkg_owner%TYPE,sisinterface IN processes.is_interface%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER);PROCEDURE add_package_process (nprocidlist IN VARCHAR2,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER);PROCEDURE remove_process (nprocid IN package_processes.proc_id%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER);PROCEDURE move_package (npvid IN package_versions.pv_id%TYPE,nrtagid IN release_tags.rtag_id%TYPE,nnewrtagid IN release_tags.rtag_id%TYPE,nuserid IN NUMBER);PROCEDURE modify_product_state (npvid IN package_versions.pv_id%TYPE,nrtagid IN release_tags.rtag_id%TYPE,nstateid IN product_states.state_id%TYPE,nuserid IN NUMBER);PROCEDURE add_code_review_url (npvid IN NUMBER,nprojid IN NUMBER,surl IN VARCHAR2,sreason IN VARCHAR2,ddateofreview IN DATE);PROCEDURE update_code_review_url (ncrid IN NUMBER,nprojid IN NUMBER,surl IN VARCHAR2,sreason IN VARCHAR2);PROCEDURE remove_code_review_url (ncrid IN NUMBER);/*================================================================================================*/END pk_package;/---------------------------------------------------------- DDL for Package RM_ISSUES--------------------------------------------------------CREATE OR REPLACE PACKAGE "RM_ISSUES" ASTYPE T_Cur IS REF CURSOR;FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER;FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER;PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 );END Rm_Issues;/---------------------------------------------------------- DDL for Package PK_APP_UTILS--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_APP_UTILS" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 26/Apr/2005|| Spec Version: 1.0------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur);/*================================================================================================*/END PK_APP_UTILS;/---------------------------------------------------------- DDL for Package PK_RMAPI_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_RMAPI_TEST"ISTYPE typecur IS REF CURSOR;/*================================================================================================*/FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)RETURN typecur;FUNCTION wip_iteration_package (projname VARCHAR2,iterationname VARCHAR2,pkgname VARCHAR2)RETURN typecur;/* This version is to be deprecated when auto_make_vcsrelease is used */FUNCTION auto_make_release (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,newpkgversion IN VARCHAR2,label IN VARCHAR2,dependenciesimportlist IN VARCHAR2,isrippled IN NUMBER,username IN VARCHAR2)RETURN NUMBER;FUNCTION auto_make_vcsrelease (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,newpkgversion IN VARCHAR2,vcstag IN VARCHAR2,dependenciesimportlist IN VARCHAR2,isrippled IN NUMBER,username IN VARCHAR2)RETURN NUMBER;PROCEDURE import_dependencies (pvid IN NUMBER,dependenciesimportlist IN VARCHAR2,userid IN NUMBER);FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2;FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2;PROCEDURE update_dash_board (rtagid IN NUMBER);FUNCTION exclude_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2)RETURN NUMBER;FUNCTION exclude_indirect_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2,rootpvid IN NUMBER,rootcause IN VARCHAR2,rootfile IN VARCHAR2)RETURN NUMBER;/*================================================================================================*/PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);FUNCTION insert_package_metrics (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,metricstring IN VARCHAR2)RETURN NUMBER;PROCEDURE update_release_metrics (rtagid IN NUMBER);FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;END pk_rmapi_test;/---------------------------------------------------------- DDL for Package PK_RMAPI--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_RMAPI"ISTYPE typecur IS REF CURSOR;FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)RETURN typecur;FUNCTION wip_iteration_package (projname VARCHAR2,iterationname VARCHAR2,pkgname VARCHAR2)RETURN typecur;FUNCTION auto_make_vcsrelease (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,newpkgversion IN VARCHAR2,vcstag IN VARCHAR2,dependenciesimportlist IN VARCHAR2,isrippled IN NUMBER,username IN VARCHAR2)RETURN NUMBER;PROCEDURE import_dependencies (pvid IN NUMBER,dependenciesimportlist IN VARCHAR2,userid IN NUMBER);FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2;FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2;PROCEDURE update_dash_board (rtagid IN NUMBER);FUNCTION exclude_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2)RETURN NUMBER;FUNCTION exclude_indirect_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2,rootpvid IN NUMBER,rootcause IN VARCHAR2,rootfile IN VARCHAR2)RETURN NUMBER;PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);FUNCTION insert_package_metrics (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,metricstring IN VARCHAR2)RETURN NUMBER;PROCEDURE update_release_metrics (rtagid IN NUMBER);FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER);END pk_rmapi;/---------------------------------------------------------- DDL for Package PK_BUILDAPI--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_BUILDAPI"IS/*================================================================================================*/PROCEDURE add_product_component (npvid IN NUMBER,sosname IN VARCHAR2,sorigfilepath IN VARCHAR2,sfilename IN VARCHAR2,sdestfilepath IN VARCHAR2,nbytesize IN NUMBER,scrccksum IN VARCHAR2);PROCEDURE remove_all_product_components (npvid IN NUMBER,sosname IN VARCHAR2);/*================================================================================================*/FUNCTION get_osid (sosname IN VARCHAR2)RETURN NUMBER;/*================================================================================================*/PROCEDURE update_build_service (sdatabaseserver IN VARCHAR2,swebserver IN VARCHAR2,smailserver IN VARCHAR2,smailsender IN VARCHAR2,sdiskspace IN VARCHAR2,ssbommanagement IN VARCHAR2);/*================================================================================================*/PROCEDURE update_build_service_info (sdatabaseserver IN VARCHAR2,sarchiveserver IN VARCHAR2,smailserver IN VARCHAR2,smailsender IN VARCHAR2,sdiskspace IN VARCHAR2,ssbommanagement IN VARCHAR2);/*================================================================================================*/PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2);/*================================================================================================*/PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER);/*================================================================================================*/PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2);/*================================================================================================*/PROCEDURE add_daemon (sdaemonhostname IN VARCHAR2,nrtagid IN NUMBER,ngbeid IN NUMBER,sgbebuildfilter IN VARCHAR2);/*================================================================================================*/PROCEDURE delete_daemon (srconidlist IN VARCHAR2);/*================================================================================================*/PROCEDURE update_daemon (sdaemonhostname IN VARCHAR2,nrconid IN NUMBER,ngbeid IN NUMBER,sgbebuildfilter IN VARCHAR2);/*================================================================================================*/PROCEDURE insert_schedule_info (dschedulepause IN DATE,dscheduleresume IN DATE,crepeat IN VARCHAR2,cindefinitepause IN VARCHAR2);/*================================================================================================*/PROCEDURE delete_schedule (nscheduleid IN NUMBER);/*================================================================================================*/PROCEDURE set_infinite_pause;/*================================================================================================*/PROCEDURE set_resume;/*================================================================================================*/PROCEDURE delete_out_of_date_schedule;/*================================================================================================*/PROCEDURE set_daemon_resume (nrconid IN NUMBER);/*================================================================================================*/PROCEDURE set_daemon_pause (nrconid IN NUMBER);/*================================================================================================*/PROCEDURE set_daemon_disable (nrconid NUMBER);/*================================================================================================*/PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER);/*================================================================================================*/PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER );/*================================================================================================*/PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER );/*================================================================================================*/FUNCTION get_daemon_inst(nRtag_id IN NUMBER,nInst_id IN OUT NUMBER,nOp_code IN OUT NUMBER,nPv_id OUT NUMBER,nUser_id OUT NUMBER,nInProgress OUT NUMBER) RETURN NUMBER;/*================================================================================================*/PROCEDURE cleanup_stranded_daemon_insts;/*================================================================================================*/PROCEDURE insert_daemon_inst(nOp_code IN NUMBER,nRtag_id IN NUMBER,nPv_id IN NUMBER,nSchedDate IN DATE,nRepeatSecs IN NUMBER,nAddedDate IN DATE,nUser_id IN NUMBER);/*================================================================================================*/PROCEDURE del_daemon_inst( nInstId IN NUMBER );/*================================================================================================*/PROCEDURE del_daemon_inst_by_rtag_pvid(nOp_code IN NUMBER,nRtag_id IN NUMBER,nPv_id IN NUMBER);/*================================================================================================*/PROCEDURE update_daemon_inst(nInstId IN NUMBER,nOp_code IN NUMBER,nRtag_id IN NUMBER,nPv_id IN NUMBER,nSchedDate IN DATE,nRepeatSecs IN NUMBER,nAddedDate IN DATE,nUser_id IN NUMBER);/*================================================================================================*/FUNCTION daemon_ops_for_rtag_pvid(nRtag_id IN NUMBER,nPv_id IN NUMBER) RETURN VARCHAR2;/*================================================================================================*/FUNCTION daemon_ops_for_rtag(nRtag_id IN NUMBER) RETURN VARCHAR2;/*================================================================================================*/PROCEDURE add_daemon_config (nrtagid IN NUMBER,nbmcon_id IN NUMBER,sdaemon_mode IN VARCHAR2,sgbebuildfilter IN VARCHAR2);/*================================================================================================*/PROCEDURE update_daemon_config (nrconid IN NUMBER,nbmcon_id IN NUMBER,sdaemon_mode IN VARCHAR2,sgbebuildfilter IN VARCHAR2);/*================================================================================================*/PROCEDURE add_build_machine (sdisplay_name IN VARCHAR2,smachine_hostname IN VARCHAR2,ngbeid IN NUMBER,sdescription IN VARCHAR2);/*================================================================================================*/PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2);/*================================================================================================*/PROCEDURE update_build_machine (nbmcon_id IN NUMBER,sdisplay_name IN VARCHAR2,smachine_hostname IN VARCHAR2,ngbeid IN NUMBER,sdescription IN VARCHAR2);END pk_buildapi;/---------------------------------------------------------- DDL for Package PK_BUILDAPI_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_BUILDAPI_TEST" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 30/Mar/2005|| Spec Version: 1.0------------------------------*//*================================================================================================*/PROCEDURE Add_Product_Component ( nPvId IN NUMBER,sOsName IN VARCHAR2,sOrigFilePath IN VARCHAR2,sFileName IN VARCHAR2,sDestFilePath IN VARCHAR2,nByteSize IN NUMBER,sCRCcksum IN VARCHAR2 );PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 );/*================================================================================================*/FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER;/*================================================================================================*/PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,sWebServer IN VARCHAR2,sMailServer IN VARCHAR2,sMailSender IN VARCHAR2);/*================================================================================================*/PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue IN VARCHAR2 );/*================================================================================================*/PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER );/*================================================================================================*/PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 );/*================================================================================================*/PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER );/*================================================================================================*/END PK_BUILDAPI_TEST;/---------------------------------------------------------- DDL for Package PK_PACKAGE_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_PACKAGE_TEST"IS/*------------------------------|| Last Modified: Rupesh Solanki|| Modified Date: 18/05/2006||------------------------------*/TYPE typecur IS REF CURSOR;/*================================================================================================*/PROCEDURE new_version (nlastpvid IN NUMBER,snewpkgversion IN VARCHAR2 DEFAULT NULL,cbuildtype IN CHAR,nsettopvid IN NUMBER DEFAULT NULL,nrtagid IN NUMBER,nuserid IN NUMBER,enumissues_state_imported IN NUMBER,returnpvid OUT NUMBER);PROCEDURE change_state (pvid IN NUMBER,newstate IN package_versions.dlocked%TYPE,userid IN NUMBER);PROCEDURE new_patch (snewpatchversion IN package_versions.pkg_version%TYPE,nparentpvid IN NUMBER,spatchidlist IN VARCHAR2,nuserid IN NUMBER,returnpatchid OUT NUMBER);PROCEDURE obsolete_patch (patchid IN NUMBER,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER);PROCEDURE obsolete_patches (spatchidlist IN VARCHAR2,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER);PROCEDURE destroy_package (pvid IN NUMBER,overridewarnings IN CHAR DEFAULT 'N',problemstring OUT VARCHAR2);PROCEDURE add_process (nprocid IN processes.proc_id%TYPE,shealthtag IN processes.proc_name%TYPE,sprocdesc IN processes.proc_description%TYPE,scmdinterface IN processes.run_as%TYPE,spkgowner IN processes.pkg_owner%TYPE,sisinterface IN processes.is_interface%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER);PROCEDURE add_package_process (nprocidlist IN VARCHAR2,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER);PROCEDURE remove_process (nprocid IN package_processes.proc_id%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER);PROCEDURE move_package (npvid IN package_versions.pv_id%TYPE,nrtagid IN release_tags.rtag_id%TYPE,nnewrtagid IN release_tags.rtag_id%TYPE,nuserid IN NUMBER);PROCEDURE modify_product_state (npvid IN package_versions.pv_id%TYPE,nstateid IN product_states.state_id%TYPE,nuserid IN NUMBER);/*================================================================================================*/END pk_package_Test;/---------------------------------------------------------- DDL for Package PK_PLANNED--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_PLANNED" IS/*------------------------------|| Last Modified: G.Huddy|| Modified Date: 28/May/2008|| Spec Version: 1.1------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR);/*================================================================================================*/END PK_PLANNED;/---------------------------------------------------------- DDL for Package PK_ENVIRONMENT_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT_TEST" IS/*------------------------------|| Last Modified: Rupesh Solanki|| Modified Date: 29/Jan/2007|| Spec Version: 1.1------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt INPACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE,CloneFromPvId IN NUMBER );PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );/*================================================================================================*/END PK_ENVIRONMENT_test;/---------------------------------------------------------- DDL for Package PK_ENVIRONMENT--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT" IS/*------------------------------|| Last Modified: G.Huddy|| Modified Date: 28/May/2008|| Spec Version: 1.2------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER, sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE APPROVE_MERGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt INPACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE,CloneFromPvId IN NUMBER );PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );/*================================================================================================*/END PK_ENVIRONMENT;/---------------------------------------------------------- DDL for Package PK_RELEASE--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_RELEASE" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 12/Sep/2005|| Body Version: 3.0------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, sOwnerEmail IN VARCHAR2, nUserId IN NUMBER, cState IN VARCHAR );PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER );PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );--PROCEDURE ADD_DEPRECATE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, nPkgId IN NUMBER );PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );/*================================================================================================*/END PK_RELEASE;/---------------------------------------------------------- DDL for Package PK_WORK_IN_PROGRESS--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_WORK_IN_PROGRESS" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 2/May/2005|| Spec Version: 1.0------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER );FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );/*================================================================================================*/END PK_WORK_IN_PROGRESS;/---------------------------------------------------------- DDL for Package PK_LICENCING--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_LICENCING" IS/*------------------------------|| Last Modified: G.Huddy|| Modified Date: 19/Aug/2008|| Spec Version: 1.0------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER );FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER;PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER );/*================================================================================================*/END PK_LICENCING;/---------------------------------------------------------- DDL for Package PK_ARCHIVE--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_ARCHIVE"IS/*------------------------------|| Author: Rupesh Solanki|| Date: 26 October 2006|| Version: 1.0------------------------------*//*================================================================================================*/PROCEDURE populate_packages_table;PROCEDURE populate_archive_data_table (nrtagid IN release_tags.rtag_id%TYPE);PROCEDURE migrate_pv_to_archive_SCHEMA (nrtagid IN release_tags.rtag_id%TYPE);PROCEDURE migrate_rtag_to_archive_schema (nrtagid IN release_tags.rtag_id%TYPE);PROCEDURE clean_up_archive_data_table (nrtagid IN release_tags.rtag_id%TYPE);PROCEDURE write_action_log (nuserid IN NUMBER,nrtagid IN release_tags.rtag_id%TYPE);/*================================================================================================*/END pk_archive;/---------------------------------------------------------- DDL for Package PK_RELEASE_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE "PK_RELEASE_TEST" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 12/Sep/2005|| Body Version: 3.0------------------------------*/TYPE typeCur IS REF CURSOR;/*================================================================================================*/PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, nUserId IN NUMBER );PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER );PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );/*================================================================================================*/END PK_RELEASE_TEST;/---------------------------------------------------------- DDL for Package Body PK_PLANNED--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_PLANNED" IS/*------------------------------|| Last Modified: G.Huddy|| Modified Date: 05/Aug/2008|| Body Version: 1.2------------------------------*//*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISoldPvId NUMBER;ReleaseLocation VARCHAR2(4000);IsPatch CHAR(1) := NULL;sLocation VARCHAR2(4000) := NULL;nRtagIdLocation NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/BEGIN-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releasesSELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME, rt.RTAG_ID INTO sLocation, nRtagIdLocationFROM PLANNED pl,RELEASE_TAGS rt,PROJECTS projWHERE pl.PV_ID = newPvIdAND pl.RTAG_ID = rt.RTAG_IDAND rt.OFFICIAL != 'Y'AND rt.PROJ_ID = proj.PROJ_ID;EXCEPTIONWHEN NO_DATA_FOUND THENsLocation := NULL;END;IF (sLocation IS NULL) OR (nRtagIdLocation = RtagId) THEN-- Add to "Pending" areaINSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )VALUES( RtagId, newPvId, ViewId, 'R' );/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );ELSERAISE_APPLICATION_ERROR (-20000, 'This version is already in Pending Area at '|| sLocation ||'.' );END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Get release location for logging pusposesSELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;-- Delete from Work In ProgressDELETEFROM PLANNED plWHERE pl.RTAG_ID = RtagIdAND pl.PV_ID = PvId;Log_Action ( PvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER ISReturnValue NUMBER;BEGINSELECT pl.VIEW_ID INTO ReturnValueFROM PLANNED plWHERE pl.RTAG_ID = RtagIdAND pl.PV_ID = PvId;RETURN ReturnValue;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) ISIsBaseView CHAR(1);BEGIN-- Check if the view is BASE VIEWSELECT vi.BASE_VIEW INTO IsBaseViewFROM VIEWS viWHERE vi.VIEW_ID = ViewId;IF (IsBaseView = 'Y') THEN-- Get Base view contentOPEN RecordSet FORSELECT 0 AS PKG_STATE,NULL AS DEPRECATED_STATE,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPE,rel.operationFROM PLANNED rel,packages pkg,package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.VIEW_ID = ViewIdAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);ELSE-- Get non base view contentOPEN RecordSet FORSELECT 0 AS PKG_STATE,NULL AS DEPRECATED_STATE,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPE,rel.operationFROM PLANNED rel,packages pkg,package_versions pv,VIEW_DEF vdWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.RTAG_ID = RtagIdAND vd.VIEW_ID = ViewIdAND vd.PKG_ID = pv.PKG_IDORDER BY UPPER(pkg.PKG_NAME);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) ISBEGINUPDATE PLANNED pl SETpl.VIEW_ID = NewViewIdWHERE pl.PV_ID = PvIdAND pl.RTAG_ID = RtagId;END;/*-------------------------------------------------------------------------------------------------------*/-- DEVI-45275 This new function supports the ability to insert into the planned table, and existing-- version of a package as part of a release-to-release merge operation carried out within release manager.-- DEVI-49594 This function has subsequently been changed to allow a merge operation to cancel its-- opposite operation, if the opposite already exists in the planned table. This supports user activity-- via the Release Manager merge manager displayPROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR ) ISReleaseLocation VARCHAR2(4000);entryExists NUMBER;existingOperation CHAR;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Determine if the specified PV_ID already exists in the planned table....SELECT COUNT (pl.pv_id) INTO entryExistsFROM PLANNED plWHERE pl.pv_id = newPvIdAND pl.rtag_id = RtagIdAND pl.view_id = ViewId;-- If the specified PV_ID already exists in the planned table....IF entryExists = 1 THEN-- Get the operation for the existing entrySELECT pl.operation INTO existingOperationFROM PLANNED plWHERE pl.pv_id = newPvIdAND pl.rtag_id = RtagIdAND pl.view_id = ViewId;-- Is the specified merge operation the opposite of the existing entry?-- If it is not, then there is nothing to do, otherwise...-- NOTE: A = Add, S = SubtractIF (mergeOperation = 'S' AND existingOperation = 'A')OR (mergeOperation = 'A' AND existingOperation = 'S') THEN-- It is the opposite, so effectively it cancels the existing entry-- Remove the entry from the planned tableDELETEFROM PLANNED plWHERE pl.pv_id = newPvIdAND pl.rtag_id = RtagIdAND pl.view_id = ViewId;-- Log actionSELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( newPvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );END IF;ELSE-- Add to Planned tabledINSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )VALUES( RtagId, newPvId, ViewId, mergeOperation );-- Log ActionSELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );END IF;END;/*-------------------------------------------------------------------------------------------------------*/END PK_PLANNED;/---------------------------------------------------------- DDL for Package Body PK_RMAPI--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_RMAPI"IS/*-------------------------------------------------------------------------------------------------------*/FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)RETURN typecurISnpvid NUMBER := 0;RECORDS typecur;BEGINBEGIN-- Get PV_ID --SELECT pv.pv_idINTO npvidFROM PACKAGES pkg, package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = pkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000, 'Package Not Found!');--WHEN OTHERS THEN-- Consider logging the error and then re-raiseRAISE;END;-- Finally get package dependencies --OPEN RECORDS FORSELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_versionFROM package_dependencies dep, PACKAGES dpkg, package_versions dpvWHERE dep.pv_id = npvidAND dpv.pkg_id = dpkg.pkg_idAND dpv.pv_id = dep.dpv_id;RETURN RECORDS;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION wip_iteration_package (projname VARCHAR2,iterationname VARCHAR2,pkgname VARCHAR2)RETURN typecurISnrtagid NUMBER := 0;RECORDS typecur;BEGINBEGIN-- Get latest rtag_id --SELECT rt.rtag_idINTO nrtagidFROM projects proj, release_tags rtWHERE rt.proj_id = proj.proj_idAND UPPER (proj.proj_name) = UPPER (projname)AND UPPER (rt.rtag_name) = UPPER (iterationname);IF (nrtagid IS NULL)THENraise_application_error (-20000,'Work In Progress is Not Found!');END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000,'Work In Progress is Not Found!');RAISE;END;-- Finally get package dependencies --OPEN RECORDS FORSELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,pv.src_pathFROM PACKAGES pkg, package_versions pv, work_in_progress wipWHERE pv.pkg_id = pkg.pkg_idAND wip.pv_id = pv.pv_idAND wip.rtag_id = nrtagidAND pkg.pkg_name = pkgname;RETURN RECORDS;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION auto_make_vcsrelease (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,newpkgversion IN VARCHAR2,vcstag IN VARCHAR2,dependenciesimportlist IN VARCHAR2,isrippled IN NUMBER,username IN VARCHAR2)RETURN NUMBERISpkgid NUMBER;pvid NUMBER := 0;userid NUMBER;dlocked VARCHAR2 (20) := NULL;clonefrompvid NUMBER;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;return_package_not_found NUMBER := -1;return_package_already_exists NUMBER := -2;return_not_approved NUMBER := -3;x_vcstypeid NUMBER;x_tag VARCHAR2(32);x_label VARCHAR2(60);x_srcpath VARCHAR2(2000);p_srcpath VARCHAR2(2000);-- Regular expression constituentsToken VARCHAR2(16) := '([^:]+)'; -- a token is anything except a ':' characterSeperator VARCHAR2(4) := '::'; -- tokens will be seperated by '::'BOL VARCHAR2(4) := '^';Anything VARCHAR2(4) := '.*';ReplaceToken1 VARCHAR2(4) := '\1';ReplaceToken2 VARCHAR2(4) := '\2';ReplaceToken3 VARCHAR2(4) := '\3';iprev_modifier_id NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENraise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pkgname IS NULL)THENraise_application_error (-20000, 'PkgName must be supplied.');END IF;IF (newpkgversion IS NULL)THENraise_application_error (-20000, 'PkgVersion must be supplied.');END IF;IF (vcstag IS NULL)THENraise_application_error (-20000, 'PkgVcsTag must be supplied.');END IF;IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)THENraise_application_error(-20000,'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).');END IF;IF (username IS NULL)THENraise_application_error (-20000, 'UserName must be supplied.');END IF;-- Parse the PkgVcsTag-- Sets up-- x_tag, x_label, x_srcpathBEGIN-- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);-- Decode the short tagCASE x_tagWHEN 'CC' THEN-- extract the 2nd and 3rd tokens, those being the source path and label respectivelyx_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);x_label := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);-- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so-- check for that error as well as the obvious zero-length string conditions.IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THENraise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');END IF;WHEN 'SVN' THEN-- extract the 2nd token, that being the subversion tagx_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);x_label := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);-- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so-- check for that error as well as the obvious zero-length string conditions.IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THENraise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');END IF;WHEN 'UC' THEN-- nothing to extract, just assign defaultsx_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);x_label := 'N/A';ELSEraise_application_error (-20000, 'Unrecognised VCS Tag!');END CASE;END;-- Get the VCS_TYPE_ID for the version control system.BEGINSELECT vt.vcs_type_idINTO x_vcstypeidFROM VCS_TYPE vtWHERE vt.tag = x_tag;EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );END;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000,'UserName '|| username|| ' is not valid or disabled.');END;/*-------------------------------------------------------*/-- Create package if necessaryIF isrippled = 1THEN/* Ripple Build */BEGIN-- Make sure that package does not existSELECT pv.pv_idINTO pvidFROM package_versions pv, PACKAGES pkgWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = newpkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENpvid := 0;END;IF (pvid = 0)THEN-- Split current version in partssplit_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);BEGIN-- Find package to be replaced with the ripple packageIF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')THENSELECT pv.pv_id, pv.src_pathINTO clonefrompvid, p_srcpathFROM PACKAGES pkg, package_versions pv,release_content rcWHERE rc.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');ELSESELECT pv.pv_id, pv.src_pathINTO clonefrompvid, p_srcpathFROM PACKAGES pkg, package_versions pv,release_content rcWHERE rc.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Cannot get CloneFromPvId. VExt='|| vext|| ', RtagId='|| rtagid|| ', PkgName='|| pkgname|| ', SSV_EXT='|| ssv_ext);END;IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')THEN-- Create packageseed_package_names_versions (pkgname,newpkgversion,userid,pvid,clonefrompvid);ELSE-- Create packageseed_package_names_versions2 (pkgname,newpkgversion,userid,pvid,clonefrompvid);END IF;-- Update Package reason for releaseUPDATE package_versions pvSET pv.comments = 'Rippled Build.',pv.build_type = 'Y'WHERE pv.pv_id = pvid;ELSE-- Package already exists, it was built previously, and has just been re-built again probably due to the-- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts-- are now needed once more. As such, we need to ensure that a new release note generation occurs so-- reset the package_versions[pvid].release_notes_info field to enable that to happen.UPDATE package_versions pvSET pv.release_notes_info = null,pv.modified_stamp = ora_sysdatetimeWHERE pv.pv_id = pvid;--DEVI-066151log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');RETURN return_package_already_exists;END IF;ELSE/* Auto build from Pending area */-- Find package in pending areaBEGINSELECT pv.pv_id, pv.dlocked, pv.src_pathINTO pvid, dlocked, p_srcpathFROM planned pl, package_versions pv, PACKAGES pkgWHERE pl.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND pl.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND pv.dlocked = 'A'AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')AND rownum = 1ORDER BY pv.modified_stamp;EXCEPTIONWHEN NO_DATA_FOUNDTHENpvid := 0;END;IF (pvid = 0)THEN-- Package does not exist in pending area, hence report itRETURN return_package_not_found;ELSIF (dlocked != 'A')THEN-- Package is not approved for autobuildRETURN return_not_approved;END IF;END IF;-- Ensure Source Path does not change-- Do not expect the SVN development branch to change-- From the previous packageIF ( x_tag = 'SVN' AND p_srcpath != x_srcpath )THENraise_application_error (-20000, 'Source Path does not match (' || p_srcpath || ','|| x_srcpath || ')' );END IF;BEGIN-- Import Dependenciesimport_dependencies (pvid, dependenciesimportlist, userid);END;BEGIN-- Split current version in partssplit_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);-- Update Package DetailsUPDATE package_versions pvSET pv.pkg_version = newpkgversion,pv.v_ext = ssv_ext,pv.v_mm = ssv_mm,pv.v_nmm = ssv_nmm,pv.src_path = x_srcpath,pv.pkg_label = x_label,pv.vcs_type_id = x_vcstypeidWHERE pv.pv_id = pvid;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHEN-- Package already exists, hence cannot be used for ripple buildRETURN return_package_already_exists;END;-- Update the is_autobuildableUPDATE package_versionsSET is_autobuildable = 'Y'WHERE pv_id = pvid;-- DEVI-063601-- For planned builds the modifier_id shouldn't be set to buildadm.-- To ensure this the modifier_id is obtained so it can be restored after-- the function pk_environment.auto_make_release is called.-- This function calls, change_state, which sets the modifier_id to the-- specified userid, which for auto builds is buildadm.SELECT pv.modifier_id INTO iprev_modifier_idFROM package_versions pv WHERE pv.pv_id = pvid;-- Now release packagepk_environment.auto_make_release (pvid,rtagid,userid,vext,ssv_ext,clonefrompvid);-- DEVI-063601-- if it is a planned build then restore the modifier_id to the previous modifierUPDATE package_versions pv SET pv.modifier_id = iprev_modifier_idWHERE pv.pv_id = pvid;--Now clean the PLANNED_VERSIONS tableSELECT pkg_idINTO pkgidFROM PACKAGESWHERE pkg_name = pkgname;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = newpkgversion;RETURN pvid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE import_dependencies (pvid IN NUMBER,dependenciesimportlist IN VARCHAR2,userid IN NUMBER)IS/*|| DependenciesImportList Format:|| "pkgA","1.0.0";"pkgB","2.0.0";|| OR 'pkgA','1.0.0';'pkgB','2.0.0';*/TYPE tdictionary IS TABLE OF VARCHAR2 (4000)INDEX BY VARCHAR2 (4000);seperator VARCHAR2 (2) := '||';pkgname VARCHAR2 (4000);pkgversion VARCHAR2 (4000);buildtype VARCHAR2 (50);pkgid NUMBER;vext VARCHAR2 (4000);dpvid NUMBER;slist VARCHAR2 (4000);cbuildtypes tdictionary;dependencyrow NUMBER;sdependency VARCHAR2 (4000);first_pos VARCHAR2 (4000);second_pos VARCHAR2 (4000);third_pos VARCHAR2 (4000);forth_pos VARCHAR2 (4000);citemcollection relmgr_varchar2_tab_t := relmgr_varchar2_tab_t ();CURSOR curbuildtypeISSELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,dep.build_typeFROM package_dependencies dep, package_versions dpvWHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;recbuildtype curbuildtype%ROWTYPE;BEGINslist := dependenciesimportlist;-- Preformat StringIF NOT slist IS NULLTHENslist := REPLACE (slist, ' '); -- Remove spacesslist := REPLACE (slist, UTL_TCP.crlf);-- Remove new line and carriage-return charactersslist := REPLACE (slist, '''', '"'); -- Replace ' with "END IF;-- Get Current DependenciesOPEN curbuildtype;FETCH curbuildtypeINTO recbuildtype;WHILE curbuildtype%FOUNDLOOPcbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;FETCH curbuildtypeINTO recbuildtype;END LOOP;CLOSE curbuildtype;-- Separate dependencies with ; separatorcitemcollection := in_list_varchar2 (slist, ';');BEGIN-- Remove old dependenciesDELETE FROM package_dependencies depWHERE dep.pv_id = pvid;-- Loop through dependenciesFOR dependencyrow IN 1 .. citemcollection.COUNTLOOP-- Extract pkg_name and pkg_versionsdependency := citemcollection (dependencyrow);first_pos := INSTR (sdependency, '"', 1, 1);second_pos := INSTR (sdependency, '"', 1, 2);third_pos := INSTR (sdependency, '"', 1, 3);forth_pos := INSTR (sdependency, '"', 1, 4);pkgname :=SUBSTR (sdependency,(first_pos + 1),(second_pos - first_pos - 1));pkgversion :=SUBSTR (sdependency,(third_pos + 1),(forth_pos - third_pos - 1));-- Dependency must exits to be linked againstBEGINSELECT pv.pv_id, pv.pkg_id, pv.v_extINTO dpvid, pkgid, vextFROM package_versions pv, PACKAGES pkgWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = pkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Dependency ['|| pkgname|| ' '|| pkgversion|| '] does not exist yet and cannot be used!');END;-- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)BEGINbuildtype := cbuildtypes (pkgid || seperator || vext);IF buildtype IS NULLTHEN-- Set build type to LinkPackageArchive by defaultbuildtype := 'L';END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENbuildtype := 'L';END;-- Insert Dependenciesupdate_package_dependency (pvid,pkgname,pkgversion,buildtype,userid,0);END LOOP;END;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2ISpkgversion VARCHAR2 (4000);BEGINBEGINSELECT pv.pkg_versionINTO pkgversionFROM PACKAGES pkg, release_content rc, package_versions pvWHERE pv.pv_id = rc.pv_idAND pkg.pkg_id = pv.pkg_idAND pkg.pkg_name = pkgnameAND rc.rtag_id = rtagid;RETURN pkgversion;END;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2ISpkgversion VARCHAR2 (4000);BEGINBEGINSELECT pv.pkg_versionINTO pkgversionFROM PACKAGES pkg, work_in_progress wip, package_versions pvWHERE pv.pv_id = wip.pv_idAND pkg.pkg_id = pv.pkg_idAND pkg.pkg_name = pkgnameAND wip.rtag_id = rtagid;IF pkgversion IS NULLTHENSELECT pv.pkg_versionINTO pkgversionFROM PACKAGES pkg, planned pl, package_versions pvWHERE pv.pv_id = pl.pv_idAND pkg.pkg_id = pv.pkg_idAND pkg.pkg_name = pkgnameAND pl.rtag_id = rtagid;END IF;RETURN pkgversion;END;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_dash_board (rtagid IN NUMBER)ISprojid NUMBER;projiddb NUMBER;total NUMBER;auto_total NUMBER;rtagiddb NUMBER;BEGINSELECT COUNT (*)INTO totalFROM release_content rc, package_versions pvWHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;SELECT COUNT (*)INTO auto_totalFROM release_content rc, package_versions pvWHERE pv.pv_id = rc.pv_idAND pv.is_autobuildable = 'Y'AND rc.rtag_id = rtagid;BEGINSELECT rtag_idINTO rtagiddbFROM dash_boardWHERE rtag_id = rtagid;SELECT proj_idINTO projiddbFROM dash_boardWHERE rtag_id = rtagid;EXCEPTIONWHEN NO_DATA_FOUNDTHENrtagiddb := '';END;IF rtagiddb IS NULLTHENSELECT proj_idINTO projidFROM release_tagsWHERE rtag_id = rtagid;INSERT INTO dash_board(proj_id, rtag_id, last_build_time, automated_packages,total_packages)VALUES (projid, rtagid, ora_sysdatetime, auto_total,total);ELSEUPDATE dash_boardSET last_build_time = ora_sysdatetime,automated_packages = auto_total,total_packages = totalWHERE proj_id = projiddb AND rtag_id = rtagiddb;END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION exclude_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2)RETURN NUMBERISuserid NUMBER;outerrcode NUMBER;pkgid NUMBER;CURSOR dnr_duplicate_curISSELECT *FROM do_not_rippleWHERE pv_id = pvid AND rtag_id = rtagid;dnr_duplicate_rec dnr_duplicate_cur%ROWTYPE;BEGINouterrcode := -1; -- Set default return error code to ERROR state/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pvid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'PvId must be supplied.');END IF;IF (username IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'UserName must be supplied.');END IF;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENRETURN outerrcode;-- raise_application_error (-20000,-- 'UserName '-- || username-- || ' is not valid or disabled.'-- );END;OPEN dnr_duplicate_cur;FETCH dnr_duplicate_curINTO dnr_duplicate_rec;IF dnr_duplicate_cur%FOUNDTHENouterrcode := 0;END IF;IF dnr_duplicate_cur%NOTFOUNDTHEN/* No duplicate recordset */unripple_package (pvid, rtagid, userid);outerrcode := 0; -- Set return to SUCCESSEND IF;CLOSE dnr_duplicate_cur;SELECT pkg_idINTO pkgidFROM package_versionsWHERE pv_id = pvid;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = spkgversion;RETURN outerrcode;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION exclude_indirect_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2,rootpvid IN NUMBER,rootcause IN VARCHAR2,rootfile IN VARCHAR2)RETURN NUMBERISuserid NUMBER;outerrcode NUMBER;pkgid NUMBER;CURSOR dnr_duplicate_curISSELECT *FROM do_not_rippleWHERE pv_id = pvid AND rtag_id = rtagid;dnr_duplicate_rec dnr_duplicate_cur%ROWTYPE;BEGINouterrcode := -1; -- Set default return error code to ERROR state/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pvid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'PvId must be supplied.');END IF;IF (username IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'UserName must be supplied.');END IF;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENRETURN outerrcode;-- raise_application_error (-20000,-- 'UserName '-- || username-- || ' is not valid or disabled.'-- );END;/* No duplicate recordset */unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);outerrcode := 0; -- Set return to SUCCESSSELECT pkg_idINTO pkgidFROM package_versionsWHERE pv_id = pvid;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = spkgversion;RETURN outerrcode;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)ISBEGININSERT INTO abt_action_log(rcon_id, action_datetime, action)VALUES (rconid, ora_sysdatetime, action);END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION insert_package_metrics (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,metricstring IN VARCHAR2)RETURN NUMBERIScitemcollection relmgr_varchar2_tab_t := relmgr_varchar2_tab_t ();lv_pvid NUMBER := 0;rownumber NUMBER;rowcontent VARCHAR2(4000);metricname VARCHAR2(1000);metricvalue VARCHAR2(4000);return_insert_error NUMBER := -1;return_insert_success NUMBER := 0;/* Metrics */lv_branches NUMBER;lv_branchlist VARCHAR2(4000);lv_codefiles NUMBER;lv_ignoredfiles NUMBER;lv_directories NUMBER;lv_directorydepth NUMBER;lv_totalfiles NUMBER;lv_makefiles NUMBER;lv_blanklines NUMBER;lv_codelines NUMBER;lv_commentlines NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENRETURN return_insert_error;END IF;IF (pkgname IS NULL)THENRETURN return_insert_error;END IF;IF (metricstring IS NULL)THENRETURN return_insert_error;END IF;BEGINSELECT pv.pv_idINTO lv_pvidFROM package_versions pv, packages pkg, release_content rcWHERE pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pv.pv_id = rc.pv_idAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');EXCEPTIONWHEN NO_DATA_FOUNDTHENlv_pvid := 0;END;citemcollection := in_list_varchar2 (metricstring, ';');FOR rownumber IN 1 .. citemcollection.COUNTLOOProwcontent := citemcollection(rownumber);metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');IF metricname = 'ccbranch.count' THEN lv_branches := metricvalue;ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;END IF;END LOOP;IF (lv_pvid > 0)THEN-- Delete any existing entries for this package version to makes sure our data is untaintedDELETE FROM package_metrics pmWHERE pm.pv_id = lv_pvid;-- Insert the new data into the metrics tableINSERT INTO package_metrics(pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp)VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime);-- Now update the Release_Metrics Tableupdate_release_metrics(rtagid);RETURN return_insert_success;ELSERETURN return_insert_error;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_release_metrics (rtagid IN NUMBER)ISlv_totalpackages NUMBER;lv_autobuilt NUMBER;lv_linesofcode NUMBER;lv_unittested NUMBER;lv_autotested NUMBER;lv_numOfbranches NUMBER;lv_lastbuildtime DATE;BEGINIF (rtagid > 0)THEN-- Get the total number of packages in this release and the number of-- those that are autobuiltSELECT COUNT (DISTINCT rc.pv_id),COUNT (DISTINCT autobuilt_qry.pv_id)INTO lv_totalpackages, lv_autobuiltFROM release_content rc,package_versions pv,(SELECT rc.pv_idFROM release_content rc,package_versions pvWHERE pv.is_autobuildable = 'Y'AND pv.pv_id = rc.pv_idAND rc.rtag_id = rtagid) autobuilt_qryWHERE pv.pv_id = rc.pv_idAND rc.rtag_id = rtagidAND autobuilt_qry.pv_id (+) = rc.pv_id;-- Get the build time of the last package built in this release and the-- total number of lines of codeSELECT MAX(pm.created_stamp),SUM(pm.code_lines)INTO lv_lastbuildtime, lv_linesofcodeFROM package_metrics pm, release_content rcWHERE pm.pv_id = rc.pv_idAND rc.rtag_id = rtagid;-- Get the number of packages with unit tests in this release and the-- number of those that are autotestedSELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittestedFROM unit_tests ut,release_content rcWHERE ut.pv_id = rc.pv_idAND rc.rtag_id = rtagidAND ut.test_types_fk != 1;SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotestedFROM unit_tests ut,release_content rcWHERE ut.pv_id = rc.pv_idAND rc.rtag_id = rtagidAND ut.test_types_fk = 7;-- Count the number of unique branches in the packages in this release.-- SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches-- FROM (-- SELECT pv_id,-- regexp_substr(str, '[^,]+', 1, level) branch,-- level lv,-- lag(level, 1, 0) over (partition by pv_id order by level) lg-- FROM (-- SELECT pm.pv_id,-- ','||pm.branch_list str-- FROM package_metrics pm,-- release_content rc-- WHERE pm.pv_id = rc.pv_id-- AND rc.rtag_id = rtagid-- )-- CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL-- )-- WHERE lv != lg;UPDATE release_metrics rmSET rm.total_packages = lv_totalpackages,rm.autobuilt = lv_autobuilt,rm.lines_of_code = lv_linesofcode,rm.unit_tested = lv_unittested,rm.autotested = lv_autotested,-- rm.branches = lv_numOfbranches,rm.last_build_time = lv_lastbuildtimeWHERE rtag_id = rtagid;IF (SQL%ROWCOUNT = 0)THENINSERT INTO release_metrics(rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,autotested, last_build_time)VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,lv_autotested, lv_lastbuildtime);END IF;-- IF (SQL%ROWCOUNT = 0)-- THEN-- INSERT INTO release_metrics-- (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,-- autotested, branches, last_build_time-- )-- VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,-- lv_autotested, lv_numOfbranches, lv_lastbuildtime-- );-- END IF;-- ELSE-- raise_application_error (-20000, 'RtagId must be supplied.');END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2ISvcstypeid NUMBER;vcstag VARCHAR2(32);label VARCHAR2(60);srcpath VARCHAR2(2000);vcstypeid_cc NUMBER;vcstypeid_uc NUMBER;BEGIN-- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about-- what the primary key value is for the ClearCase VCS entry.BEGINSELECT vt.vcs_type_idINTO vcstypeid_ccFROM VCS_TYPE vtWHERE vt.tag = 'CC';EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');END;-- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about-- what the primary key value is for the Uncontrolled VCS entry.BEGINSELECT vt.vcs_type_idINTO vcstypeid_ucFROM VCS_TYPE vtWHERE vt.tag = 'UC';EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');END;-- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version-- As additional VCS types are introduced, we may have to extend what this SELECT statement returnsBEGINSELECT pv.pkg_label, pv.src_path,(CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_ucWHEN pv.vcs_type_id IS NULL THEN vcstypeid_ccELSE pv.vcs_type_id END) AS vcs_type_idINTO label, srcpath, vcstypeidFROM PACKAGE_VERSIONS pvWHERE pv.pv_id = pvid;EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Package Version Not Found!');END;-- Get the VCS TAG for the VCS_TYPE_ID.BEGINSELECT vt.tagINTO vcstagFROM VCS_TYPE vtWHERE vt.vcs_type_id = vcstypeid;EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Could not get VCS Tag for the package version!');END;-- Return value depending upon which VCS Tag is being used.-- As additional VCS types are introduced, we have to add additional WHEN clausesCASE vcstagWHEN 'CC' THENRETURN vcstag || '::' || srcpath || '::' || label;WHEN 'SVN' THENRETURN vcstag || '::' || srcpath || '::' || label;ELSERETURN vcstag || '::';END CASE;END;/*-------------------------------------------------------------------------------------------------------*//*-------------------------------------------------------------------------------------------------------Name: update_vcs_detailsDescription: Updates the Version Control System (vcs) details specified in the vcstagparameter for the specified package version.The specified package vcstag is parsed and split into 3 fields:vcs type, src path, labelThese fields are then stored for the specified pv_id in the package_versions, table.An action is recorded in the action log and provides information for tracking andfor restoring the previous vcs settings if a recovery is required.Paramters:ipv_id: Package version identifiervcstag: Full version control tag.Examples:"SVN::AUPERASVN01/DPG_SWBase/tools/trunk::daf_tools_25.1.7027.cr@1234""CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"user_id: Identifier of the user that is performing this function.*/PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)ISivcs_type_id NUMBER;svcs_type VARCHAR2(128);ssrc_path VARCHAR2(512);spkg_label VARCHAR2(512);spattern VARCHAR2(64);saction_desc VARCHAR2(2048);old_vcs_type VARCHAR2(128);old_src_path VARCHAR2(512);old_pkg_label VARCHAR2(512);old_pkg_vcstag VARCHAR2(1024);i NUMBER;vcount NUMBER;BEGIN-- Split vcs tag into fields: vcs type, src path, label-- Fields are separated by '::'-- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"-- The below regular expression pattern has groups to achieve this.spattern:= '^([^:]*)::([^:]*)(::(.*))?$';--As Oracle 10g does not allow REGEXP_SUBSTR to return a group,--REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type FROM DUAL;SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path FROM DUAL;SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;-- Validate vcs typeBEGINSELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');--RAISE;END;-- If ClearcaseIF (ivcs_type_id = 2) THEN-- Validate source pathIF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THENraise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');END IF;-- Validate label-- For clearcase the label must be specified. For subversion it is not required.IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THENraise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');END IF;-- if SubversionELSIF (ivcs_type_id = 23) THEN-- general validity-- Not as picky as the RM Data entryIF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))+$','i') THENraise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');END IF;-- Validate Tag-- May be a Peg or a LabelIF NOT REGEXP_LIKE(spkg_label,'^@?[0-9]+$','i') THENIF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+($|@[0-9]+)','i') THENraise_application_error (-20000, 'Invalid SVN tag:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');END IF;END IF;-- Check for suitable endingIF NOT REGEXP_LIKE(ssrc_path,'(\/tags$)|(\/branches\/)|(\/trunk$)','i') THENraise_application_error (-20000, 'Must end in /trunk or /tags/ or /branches/.... Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');END IF;-- Check for combined use of tags, branches, trunk or repeats of each-- Count occurrences of /tags or /branches/ or /trunkvcount:=0;i:=1;WHILE i > 0 LOOPi:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk(\/|$))',i,1,1,'i');IF i > 0 THEN-- if found then increment countvcount:=vcount+1;i:=i-1; -- move index back to "/"END IF;END LOOP;IF vcount = 0 THENraise_application_error (-20000, 'Must contain exactly one of the keywords /trunk, /tags, /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');END IF;IF vcount > 1 THENraise_application_error (-20000, 'Combined use of /trunk, /tags, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');END IF;END IF;BEGIN-- Get current vcs tag for specified package versionSELECT pv.src_path, pv.pkg_label, vc.tag as vcs_typeINTO old_src_path, old_pkg_label, old_vcs_typeFROM package_versions pv, vcs_type vcWHERE pv.pv_id = ipv_idAND pv.vcs_type_id = vc.vcs_type_id (+);EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Package version not found: ' || ipv_id);END;old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;IF (old_pkg_label IS NOT NULL) THENold_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;END IF;-- Create action description-- This description will contain the old and new tags.-- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.-- An example of the action description is below:-- OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.crsaction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;-- Store new vcs detailsUPDATE package_versions SETsrc_path = ssrc_path,pkg_label = spkg_label,vcs_type_id = ivcs_type_idWHEREpv_id = ipv_id;-- Store action in action log so that we can back track and also restore vcs settings if required.log_action (ipv_id,'VcsConversion',user_id,saction_desc);END update_vcs_details;END pk_rmapi;/---------------------------------------------------------- DDL for Package Body PK_BUILDAPI--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI"IS/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_product_component (npvid IN NUMBER,sosname IN VARCHAR2,sorigfilepath IN VARCHAR2,sfilename IN VARCHAR2,sdestfilepath IN VARCHAR2,nbytesize IN NUMBER,scrccksum IN VARCHAR2)ISnosid NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- OS Name Requirements --IF (sosname IS NULL)THENraise_application_error (-20000, 'OsName cannot be NULL.');END IF;-- File Requirements --IF (NOT sfilename IS NULL)THENIF (nbytesize IS NULL)THENraise_application_error (-20000, 'Byte Size cannot be NULL.');ELSIF (scrccksum IS NULL)THENraise_application_error (-20000, 'CRC CKSUM cannot be NULL.');END IF;END IF;-- Folder Requirements ---- No requirements for now./*-------------------------------------------------------*/-- Get OsIdnosid := get_osid (sosname);-- Insert component entryINSERT INTO product_components(pv_id, os_id, file_path, file_name, destination_path,byte_size, crc_cksum)VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,nbytesize, scrccksum);EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Cannot have duplicate product components.');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE remove_all_product_components (npvid IN NUMBER,sosname IN VARCHAR2)ISnosid NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Get OsIdnosid := get_osid (sosname);-- Delete component entryDELETE FROM product_components pcWHERE pc.pv_id = npvid AND pc.os_id = nosid;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_osid (sosname IN VARCHAR2)RETURN NUMBERIScode NUMBER;BEGIN-- Get Platform Code --SELECT pf.codeINTO codeFROM platforms pfWHERE UPPER (pf.NAME) = UPPER (sosname);RETURN code;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Platform '|| sosname|| ' is not valid. It needs to be added to PLATFORMS table in Release Manager.');RAISE;END;/*-------------------------------------------------------------------------------------------------------Obsolete - Superseded by update_build_service_info*/PROCEDURE update_build_service (sdatabaseserver IN VARCHAR2,swebserver IN VARCHAR2,smailserver IN VARCHAR2,smailsender IN VARCHAR2,sdiskspace IN VARCHAR2,ssbommanagement IN VARCHAR2)ISBEGINUPDATE build_service_configSET config = sdatabaseserverWHERE service = 'DATABASE SERVER';UPDATE build_service_configSET config = swebserverWHERE service = 'WEB SERVER';UPDATE build_service_configSET config = smailserverWHERE service = 'MAIL SERVER';UPDATE build_service_configSET config = smailsenderWHERE service = 'BUILD FAILURE MAIL SENDER';UPDATE build_service_configSET config = sdiskspaceWHERE service = 'DPKG_ARCHIVE DISK SPACE USED';UPDATE build_service_configSET config = ssbommanagementWHERE service = 'SBOM MANAGEMENT';END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_build_service_info (sdatabaseserver IN VARCHAR2,sarchiveserver IN VARCHAR2,smailserver IN VARCHAR2,smailsender IN VARCHAR2,sdiskspace IN VARCHAR2,ssbommanagement IN VARCHAR2)ISBEGINUPDATE build_service_configSET config = sdatabaseserverWHERE service = 'DATABASE SERVER';UPDATE build_service_configSET config = sarchiveserverWHERE service = 'ARCHIVE SERVER';UPDATE build_service_configSET config = smailserverWHERE service = 'MAIL SERVER';UPDATE build_service_configSET config = smailsenderWHERE service = 'BUILD FAILURE MAIL SENDER';UPDATE build_service_configSET config = sdiskspaceWHERE service = 'DPKG_ARCHIVE DISK SPACE USED';UPDATE build_service_configSET config = ssbommanagementWHERE service = 'SBOM MANAGEMENT';END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)ISgbe_id NUMBER;BEGIN-- Get GBE_IDSELECT seq_gbe_id.NEXTVALINTO gbe_idFROM DUAL;INSERT INTO gbe_machtype(gbe_id, gbe_value)VALUES (gbe_id, sgbevalue);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)ISBEGINDELETE FROM gbe_machtypeWHERE gbe_id = ngbe_id;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)ISBEGINUPDATE gbe_machtypeSET gbe_value = sgbevalueWHERE gbe_id = ngbe_id;END;/*-------------------------------------------------------------------------------------------------------*/--This function is obsolete. It was replaced by add_daemon_config. Done for DEVI-046806PROCEDURE add_daemon (sdaemonhostname IN VARCHAR2,nrtagid IN NUMBER,ngbeid IN NUMBER,sgbebuildfilter IN VARCHAR2)ISnrecordnumber NUMBER;nrconid NUMBER;BEGIN-- Get RCON_IDSELECT seq_rcon_id.NEXTVALINTO nrconidFROM DUAL;SELECT COUNT (*)INTO nrecordnumberFROM release_configWHERE rtag_id = nrtagid;IF nrecordnumber = 0THENINSERT INTO release_config(rcon_id, rtag_id, daemon_hostname, daemon_mode,gbe_id, gbe_buildfilter)VALUES (nrconid, nrtagid, sdaemonhostname, 'M',ngbeid, sgbebuildfilter);ELSEINSERT INTO release_config(rcon_id, rtag_id, daemon_hostname, daemon_mode,gbe_id, gbe_buildfilter)VALUES (nrconid, nrtagid, sdaemonhostname, 'S',ngbeid, sgbebuildfilter);END IF;-- A newly configured daemon should initially be paused (DEVI-047277)INSERT INTO run_level(rcon_id, pause)VALUES (nrconid, 1);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE delete_daemon (srconidlist IN VARCHAR2)ISBEGIN-- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.DELETE FROM daemon_action_logWHERE rcon_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (srconidlist) AS relmgr_number_tab_t)FROM DUAL));DELETE FROM run_levelWHERE rcon_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (srconidlist) AS relmgr_number_tab_t)FROM DUAL));DELETE FROM abt_action_logWHERE rcon_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (srconidlist) AS relmgr_number_tab_t)FROM DUAL));-- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.DELETE FROM release_configWHERE rcon_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (srconidlist) AS relmgr_number_tab_t)FROM DUAL));END;/*-------------------------------------------------------------------------------------------------------*/--This function is obsolete. It was replaced by update_daemon_config for DEVI-046806PROCEDURE update_daemon (sdaemonhostname IN VARCHAR2,nrconid IN NUMBER,ngbeid IN NUMBER,sgbebuildfilter IN VARCHAR2)ISBEGINUPDATE release_configSET daemon_hostname = sdaemonhostname,gbe_id = ngbeid,gbe_buildfilter = sgbebuildfilterWHERE rcon_id = nrconid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE insert_schedule_info (dschedulepause IN DATE,dscheduleresume IN DATE,crepeat IN VARCHAR2,cindefinitepause IN VARCHAR2)ISnscheduledid NUMBER;BEGIN-- Get Next Available Scheduled IdSELECT seq_scheduled_id.NEXTVALINTO nscheduledidFROM DUAL;INSERT INTO run_level_scheduleVALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,cindefinitepause);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE delete_schedule (nscheduleid IN NUMBER)ISBEGINDELETE FROM run_level_scheduleWHERE scheduled_id = nscheduleid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE set_infinite_pauseISnscheduledid NUMBER;BEGIN-- Get Next Available Scheduled IdSELECT seq_scheduled_id.NEXTVALINTO nscheduledidFROM DUAL;INSERT INTO run_level_scheduleVALUES (nscheduledid, NULL, NULL, NULL, 'P');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE set_resumeISBEGINDELETE FROM run_level_scheduleWHERE indefinite_pause = 'P';END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE delete_out_of_date_scheduleISBEGINDELETE FROM run_level_scheduleWHERE scheduled_resume < ora_sysdatetime AND repeat = 0;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE set_daemon_resume (nrconid IN NUMBER)ISBEGINUPDATE run_levelSET PAUSE = NULLWHERE rcon_id = nrconid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE set_daemon_pause (nrconid IN NUMBER)ISBEGINUPDATE run_levelSET PAUSE = 1WHERE rcon_id = nrconid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE set_daemon_disable (nrconid NUMBER)ISBEGINUPDATE run_levelSET PAUSE = 2WHERE rcon_id = nrconid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)ISBEGINUPDATE run_levelSET pause = nstateWHERE rcon_id IN(SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);END;/*-------------------------------------------------------------------------------------------------------*/-- inserts a new daemon instruction-- This is for use by the Release Manager Website code.--PROCEDURE insert_daemon_inst( nOp_code IN NUMBER, nRtag_id IN NUMBER, nPv_id IN NUMBER, nSchedDate IN DATE, nRepeatSecs IN NUMBER, nAddedDate IN DATE, nUser_id IN NUMBER) ISnInstId NUMBER;BEGIN-- Get Next Available Scheduled IdSELECT seq_daemon_instruction_id.NEXTVALINTO nInstIdFROM DUAL;INSERT INTO Daemon_InstructionsVALUES (nInstId, nOp_code, nRtag_id,nPv_id, nSchedDate, nRepeatSecs,nAddedDate, nUser_id, '0');EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION');WHEN OTHERSTHENraise;END insert_daemon_inst;/*-------------------------------------------------------------------------------------------------------*/-- Deletes a daemon instruction matching the specified instruction ID--PROCEDURE del_daemon_inst( nInstId IN NUMBER) ISBEGINDELETE FROM Daemon_InstructionsWHERE DAEMON_INSTRUCTIONS_ID = nInstId;END del_daemon_inst;/*-------------------------------------------------------------------------------------------------------*/-- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id--PROCEDURE del_daemon_inst_by_rtag_pvid(nOp_code IN NUMBER,nRtag_id IN NUMBER,nPv_id IN NUMBER) ISBEGINDELETE FROM Daemon_InstructionsWHERE OP_CODE = nOp_codeAND RTAG_ID = nRtag_idAND PV_ID = nPv_id;END del_daemon_inst_by_rtag_pvid;/*-------------------------------------------------------------------------------------------------------*/-- Updates a daemon instruction-- This is for use by the Release Manager Website code.--PROCEDURE update_daemon_inst( nInstId IN NUMBER, nOp_code IN NUMBER, nRtag_id IN NUMBER, nPv_id IN NUMBER, nSchedDate IN DATE, nRepeatSecs IN NUMBER, nAddedDate IN DATE, nUser_id IN NUMBER) ISCURSOR daemon_inst_cur ISSELECT *FROM daemon_instructions diWHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;daemon_inst_rec daemon_inst_cur%ROWTYPE;exc_inst_removed EXCEPTION;BEGINOPEN daemon_inst_cur;FETCH daemon_inst_curINTO daemon_inst_rec;IF daemon_inst_cur%FOUND THENUPDATE Daemon_InstructionsSET op_code = nOp_code,rtag_id = nRtag_id,pv_id = nPv_id,scheduled_datetime = nSchedDate,repeat_secs = nRepeatSecs,added_datetime = nAddedDate,user_id = nUser_id,in_progress = '0'WHERE daemon_instructions_id = nInstId;ELSEraise exc_inst_removed;END IF;CLOSE daemon_inst_cur;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION');WHEN exc_inst_removedTHENraise_application_error (-20000,'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.');WHEN OTHERSTHENraise;END update_daemon_inst;/*-------------------------------------------------------------------------------------------------------*/-- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination-- This is for use by the Release Manager Website code.--FUNCTION daemon_ops_for_rtag_pvid(nRtag_id IN NUMBER,nPv_id IN NUMBER) RETURN VARCHAR2ISCURSOR daemon_inst_cur ISSELECT di.OP_CODEFROM daemon_instructions diWHERE di.RTAG_ID = nRtag_idAND di.PV_ID = nPv_id;daemon_inst_rec daemon_inst_cur%ROWTYPE;sRetList VARCHAR2(4000) := '';BEGINOPEN daemon_inst_cur;FETCH daemon_inst_curINTO daemon_inst_rec;WHILE daemon_inst_cur%FOUNDLOOPsRetList := sRetList || daemon_inst_rec.op_code || ',';FETCH daemon_inst_curINTO daemon_inst_rec;END LOOP;CLOSE daemon_inst_cur;RETURN sRetList;END daemon_ops_for_rtag_pvid;/*-------------------------------------------------------------------------------------------------------*/-- Returns a comma-separated list of operation codes found for a given rtag-- This is for use by the Release Manager Website code.--FUNCTION daemon_ops_for_rtag(nRtag_id IN NUMBER) RETURN VARCHAR2ISCURSOR daemon_inst_cur ISSELECT di.OP_CODEFROM daemon_instructions diWHERE di.RTAG_ID = nRtag_id;daemon_inst_rec daemon_inst_cur%ROWTYPE;sRetList VARCHAR2(4000) := '';BEGINOPEN daemon_inst_cur;FETCH daemon_inst_curINTO daemon_inst_rec;WHILE daemon_inst_cur%FOUNDLOOPsRetList := sRetList || daemon_inst_rec.op_code || ',';FETCH daemon_inst_curINTO daemon_inst_rec;END LOOP;CLOSE daemon_inst_cur;RETURN sRetList;END daemon_ops_for_rtag;/*-------------------------------------------------------------------------------------------------------*/-- Gets a record from the daemon instruction table that can be carried out now and returns the fields-- in the record a daemon will need-- The Buildtool should use this to find a job to do for a particular release. It should then call-- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call-- mark_daemon_inst_completed(inst_id) to signal its completion.-- Can be called repeatedly to get a full list of all instructions for a release, by passing back in-- the instruction ID obtained from the previous call (the 1st call should use 0)-- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,-- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)-- Returns 1 if a record was found, else 0.--FUNCTION get_daemon_inst(nRtag_id IN NUMBER,nInst_id IN OUT NUMBER,nOp_code IN OUT NUMBER,nPv_id OUT NUMBER,nUser_id OUT NUMBER,nInProgress OUT NUMBER) RETURN NUMBERISCURSOR daemon_inst_cur ISSELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progressFROM daemon_instructions diWHERE di.rtag_id = nRtag_idAND di.daemon_instructions_id > nInst_idAND di.scheduled_datetime <= ora_sysdatetimeAND ((nOp_code = -1) OR (nOp_code = di.op_code))AND rownum <= 1ORDER BY di.daemon_instructions_id;daemon_inst_rec daemon_inst_cur%ROWTYPE;BEGINOPEN daemon_inst_cur;FETCH daemon_inst_curINTO daemon_inst_rec;-- If we found a record, return it.IF daemon_inst_cur%FOUND THENnInst_id := daemon_inst_rec.daemon_instructions_id;nOp_code := daemon_inst_rec.op_code;nPv_id := daemon_inst_rec.pv_id;nUser_id := daemon_inst_rec.user_id;IF daemon_inst_rec.in_progress = '1' THENnInProgress := 1;ELSEnInProgress := 0;END IF;CLOSE daemon_inst_cur;RETURN 1;END IF;CLOSE daemon_inst_cur;RETURN 0;END get_daemon_inst;/*-------------------------------------------------------------------------------------------------------*/-- Marks a daemon instruction as being processed by a daemon-- The Buildtool should use this before it embarks on the work the instruction commands--PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )ISBEGINUPDATE Daemon_InstructionsSET in_progress = '1'WHERE daemon_instructions_id = nInstId;END mark_daemon_inst_in_progress;/*-------------------------------------------------------------------------------------------------------*/-- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored-- procedure in order to either delete the instruction or update it in the case where it is a repeating-- instruction.--PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )ISrepSecs NUMBER;schedDate DATE;CURSOR daemon_inst_cur ISSELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDateFROM daemon_instructions diWHERE di.daemon_instructions_id = nInstId;daemon_inst_rec daemon_inst_cur%ROWTYPE;BEGINOPEN daemon_inst_cur;FETCH daemon_inst_curINTO daemon_inst_rec;IF daemon_inst_cur%FOUND THEN-- if instruction repeats daily, add 1 day to the scheduled time and update the recordIF daemon_inst_rec.repSecs = 86400 THENUPDATE Daemon_InstructionsSET scheduled_datetime = daemon_inst_rec.schedDate + 1,in_progress = '0'WHERE daemon_instructions_id = nInstId;ELSE-- Delete the daemon instruction, we are done with itdel_daemon_inst(nInstId);END IF;END IF;CLOSE daemon_inst_cur;EXCEPTIONWHEN OTHERSTHENraise;END mark_daemon_inst_completed;/*-------------------------------------------------------------------------------------------------------*/-- This function deletes any old daemon instruction that appears stranded due to a problem that might-- have occured during buildtool operation such as might occur if the buildtool or the machine it was-- hosted on came down whilst it was processing a daemon instruction.PROCEDURE cleanup_stranded_daemon_instsISBEGIN-- delete records at least two days oldDELETE FROM daemon_instructions diWHERE (di.scheduled_datetime + 5) <= ora_sysdatetime;END cleanup_stranded_daemon_insts;/*-------------------------------------------------------------------------------------------------------*/--This function supersedes function, add_daemon. Done for DEVI-046806PROCEDURE add_daemon_config (nrtagid IN NUMBER,nbmcon_id IN NUMBER,sdaemon_mode IN VARCHAR2,sgbebuildfilter IN VARCHAR2)ISnrecordnumber NUMBER;nrconid NUMBER;sdaemonhostname VARCHAR2(50);ngbeid NUMBER;BEGIN-- Get RCON_IDSELECT seq_rcon_id.NEXTVALINTO nrconidFROM DUAL;SELECT COUNT (*)INTO nrecordnumberFROM release_configWHERE rtag_id = nrtagid;SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeidFROM build_machine_configWHERE bmcon_id = nbmcon_id;INSERT INTO release_config(rcon_id, rtag_id, daemon_hostname, daemon_mode,gbe_id, gbe_buildfilter)VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,ngbeid, sgbebuildfilter);-- A newly configured daemon should initially be paused (DEVI-047277)INSERT INTO run_level(rcon_id, pause)VALUES (nrconid, 2);END;/*-------------------------------------------------------------------------------------------------------*/--This function supersedes function, update_daemon. Done for DEVI-046806PROCEDURE update_daemon_config (nrconid IN NUMBER,nbmcon_id IN NUMBER,sdaemon_mode IN VARCHAR2,sgbebuildfilter IN VARCHAR2)ISsdaemonhostname VARCHAR2(50);ngbeid NUMBER;BEGINSELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeidFROM build_machine_configWHERE bmcon_id = nbmcon_id;UPDATE release_configSET daemon_hostname = sdaemonhostname,gbe_id = ngbeid,daemon_mode = sdaemon_mode,gbe_buildfilter = sgbebuildfilterWHERE rcon_id = nrconid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_build_machine (sdisplay_name IN VARCHAR2,smachine_hostname IN VARCHAR2,ngbeid IN NUMBER,sdescription IN VARCHAR2)ISnrecordnumber NUMBER;nbmcon_id NUMBER;BEGIN-- Get BMCON_IDSELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Cannot have duplicate machines.');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)ISBEGINDELETE FROM build_machine_configWHERE bmcon_id IN (SELECT * FROM THE(SELECT CAST(in_list_number (sbmcon_id_list) AS relmgr_number_tab_t)FROM DUAL));END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_build_machine (nbmcon_id IN NUMBER,sdisplay_name IN VARCHAR2,smachine_hostname IN VARCHAR2,ngbeid IN NUMBER,sdescription IN VARCHAR2)ISBEGINUPDATE build_machine_configSET display_name = sdisplay_name,machine_hostname = smachine_hostname,gbe_id = ngbeid,description = sdescriptionWHERE bmcon_id = nbmcon_id;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Cannot have duplicate machines.');END;END pk_buildapi;/---------------------------------------------------------- DDL for Package Body PK_PACKAGE--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE"IS/*-------------------------------------------------------------------------------------------------------*/PROCEDURE new_version (nlastpvid IN NUMBER,snewpkgversion IN VARCHAR2 DEFAULT NULL,cbuildtype IN CHAR,nsettopvid IN NUMBER DEFAULT NULL,nrtagid IN NUMBER,nuserid IN NUMBER,enumissues_state_imported IN NUMBER,returnpvid OUT NUMBER)ISorigpkg_id package_versions.pkg_id%TYPE;origdlocked package_versions.dlocked%TYPE;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;spackageversion VARCHAR2 (4000);nissuestypes NUMBER;nviewid NUMBER;reccount NUMBER;isreleased package_versions.dlocked%TYPE := 'N';slabel VARCHAR2 (4000) := NULL;CURSOR package_versions_curISSELECT pv.pv_id, pv.is_patch, pv.dlockedFROM package_versions pvWHERE pv.pkg_version = snewpkgversionAND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_idFROM package_versions origpvWHERE origpv.pv_id = nlastpvid);package_versions_rec package_versions_cur%ROWTYPE;CURSOR clone_package_versions_curISSELECT DISTINCT pkg_id, dlockedFROM package_versionsWHERE pv_id = nlastpvid;clone_package_versions_rec clone_package_versions_cur%ROWTYPE;BEGINspackageversion := snewpkgversion;IF nsettopvid IS NULLTHEN-- SetToPv_id is not supplied, hence proceed./* ---------------------------------------------------- *//* Find id package_version exists *//* ---------------------------------------------------- */OPEN package_versions_cur;FETCH package_versions_curINTO package_versions_rec;IF package_versions_cur%NOTFOUNDTHEN--- Create brand new package ---SELECT seq_pv_id.NEXTVALINTO returnpvidFROM DUAL;-- Split Version to get extention + othersplit_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);-- Get previous package to clone fromOPEN clone_package_versions_cur;FETCH clone_package_versions_curINTO clone_package_versions_rec;origpkg_id := clone_package_versions_rec.pkg_id;origdlocked := clone_package_versions_rec.dlocked;CLOSE clone_package_versions_cur;-- Automated built configIF (cbuildtype = 'A')THENspackageversion := '(' || returnpvid || ')' || ssv_ext;-- Make sure that version is still uniqueEND IF;-- Clone Package Version Details --INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,creator_id, modified_stamp, modifier_id, v_mm, v_nmm,v_ext, src_path, pv_description, pv_overview,last_pv_id, owner_id, is_deployable,is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,spackageversion AS pkg_version, 'N' AS dlocked,ora_sysdate AS created_stamp, nuserid AS creator_id,ora_sysdatetime AS modified_stamp,nuserid AS modifier_id, ssv_mm AS v_mm,ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,pv.pv_description, pv.pv_overview,nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_fieldFROM package_versions pvWHERE pv.pv_id = nlastpvid;-- Set Issues Type for cloning ---IF origdlocked = 'Y'THENnissuestypes := enumissues_state_imported;ELSEnissuestypes := NULL;END IF;-- Update Label for automated builtIF (cbuildtype = 'A')THENslabel := get_automated_label (returnpvid);UPDATE package_versions pvSET pv.pkg_label = slabelWHERE pv.pv_id = returnpvid;END IF;basic_clone (nlastpvid,returnpvid,nrtagid,nuserid,origpkg_id,nissuestypes);ELSE--- Package already exists, hence reuse ---returnpvid := package_versions_rec.pv_id;isreleased := package_versions_rec.dlocked;END IF;CLOSE package_versions_cur;ELSEreturnpvid := nsettopvid;END IF;END new_version;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE change_state (pvid IN NUMBER,newstate IN package_versions.dlocked%TYPE,userid IN NUMBER)ISBEGIN-- Set package in Released modeUPDATE package_versions pvSET pv.dlocked = newstate,pv.modified_stamp = ora_sysdatetime,pv.modifier_id = useridWHERE pv.pv_id = pvid;-- Log action --IF newstate = 'Y'THEN-- RELEASED --log_action (pvid,'makeofficial',userid,'Package state change to: Released');ELSIF newstate = 'N'THEN-- UNLOCKED --log_action (pvid,'makeunofficial',userid,'Package state change to: Ulocked');ELSIF newstate = 'P'THEN-- PENDING APPROVAL --log_action (pvid,'add_to_planned',userid,'Package state change to: Pending Approval');ELSIF newstate = 'R'THEN-- REJECTED --log_action (pvid,'reject_package',userid,'Package state change to: Rejected');ELSIF newstate = 'A'THEN-- APPROVED --log_action (pvid,'approve_package',userid,'Package state change to: Approved');END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE destroy_package (pvid IN NUMBER,overridewarnings IN CHAR DEFAULT 'N',problemstring OUT VARCHAR2)ISLOCKED CHAR;pkgid NUMBER;ROWCOUNT NUMBER;BEGIN/*|| This will destroy all package details from database.|| It will only be used to remove unwanted work in progress packages,|| or mestaken versions*//*--------------- Business Rules Here -------------------*/problemstring := NULL;IF overridewarnings = 'N'THEN-- Package must not be officialSELECT pv.dlockedINTO LOCKEDFROM package_versions pvWHERE pv.pv_id = pvid;IF LOCKED = 'Y'THENproblemstring :=problemstring|| '- Package is locked and released.'|| UTL_TCP.crlf;END IF;-- Cannot remove if used in BOMsSELECT COUNT (osc.prod_id)INTO ROWCOUNTFROM deployment_manager.os_contents oscWHERE osc.prod_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'|| UTL_TCP.crlf;END IF;-- Cannot remove if Referenced as build dependencySELECT COUNT (dep.pv_id)INTO ROWCOUNTFROM package_dependencies depWHERE dep.dpv_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is referenced by other package as build dependency.'|| UTL_TCP.crlf;END IF;-- Cannot remove if Referenced as runtime dependencySELECT COUNT (rd.pv_id)INTO ROWCOUNTFROM runtime_dependencies rdWHERE rd.rtd_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is referenced by other package as runtime dependency.'|| UTL_TCP.crlf;END IF;-- Cannot remove if Referenced as patchSELECT COUNT (pp.pv_id)INTO ROWCOUNTFROM package_patches ppWHERE pp.patch_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is used as patch by other package.'|| UTL_TCP.crlf;END IF;END IF;/*-------------------------------------------------------*/IF (problemstring IS NULL)THEN--- Remove From Work in ProgressDELETE FROM work_in_progress wipWHERE wip.pv_id = pvid;--- Remove From PendingDELETE FROM planned plWHERE pl.pv_id = pvid;--- Remove From Released areaDELETE FROM release_content rcWHERE rc.pv_id = pvid;---Remove From Package ProcessesDELETE FROM package_processes ppWHERE pp.pv_id = pvid;--- Remove DependenciesDELETE FROM package_dependencies depWHERE dep.pv_id = pvid;DELETE FROM package_dependencies depWHERE dep.dpv_id = pvid;--- Remove Runtime dependenciesDELETE FROM runtime_dependencies rtdWHERE rtd.pv_id = pvid;DELETE FROM runtime_dependencies rtdWHERE rtd.rtd_id = pvid;--- Remove componentsDELETE FROM product_components pcWHERE pc.pv_id = pvid;DELETE FROM release_components rcWHERE rc.pv_id = pvid;--- Remove From Notification HistoryDELETE FROM notification_history nhWHERE nh.pv_id = pvid;--- Remove From Ignore WarningsDELETE FROM ignore_warnings iwWHERE iw.pv_id = pvid;--- Remove From Additional NotesDELETE FROM additional_notes anWHERE an.pv_id = pvid;--- Remove From CQ IssuesDELETE FROM cq_issues cqWHERE cq.pv_id = pvid;--- Remove from Package PatchesDELETE FROM package_patches ppWHERE pp.pv_id = pvid;DELETE FROM package_patches ppWHERE pp.patch_id = pvid;--- Remove From Package DocumentsDELETE FROM package_documents pdWHERE pd.pv_id = pvid;--- Remove from Code ReviewDELETE FROM code_reviews crWHERE cr.pv_id = pvid;--- Remove from Code Review URLDELETE FROM code_review_url cruWHERE cru.pv_id = pvid;--- Remove from Unit TestsDELETE FROM unit_tests utWHERE ut.pv_id = pvid;--- Remove from Package BuildEnvDELETE FROM package_build_env pbeWHERE pbe.pv_id = pvid;--- Remove from Package Build InfoDELETE FROM package_build_info pbiWHERE pbi.pv_id = pvid;--- Remove from Build OrderDELETE FROM build_order boWHERE bo.pv_id = pvid;--- Remove from LicencingPK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );--- Remove from Note ManagerDELETE FROM note_manager nmWHERE nm.nid = pvid;--- Remove from Action logDELETE FROM action_log alWHERE al.pv_id = pvid;--- Remove from Do Not RippleDELETE FROM DO_NOT_RIPPLE dnrWHERE dnr.PV_ID = pvid;--- Remove from Advisory RippleDELETE FROM ADVISORY_RIPPLE arWHERE ar.PV_ID = pvid;--- Remove from Jira IssuesDELETE FROM JIRA_ISSUES jiraWHERE jira.PV_ID = pvid;--- Remove from Package MetricsDELETE FROM package_metrics pmWHERE pm.pv_id = pvid;-- Delete from Pegged VersionsDELETE FROM pegged_versions pegvWHERE pegv.pv_id = pvid;--- Finally Remove From Package Versions--- Get Package nameSELECT pv.pkg_idINTO pkgidFROM package_versions pvWHERE pv.pv_id = pvid;DELETE FROM package_versions pvWHERE pv.pv_id = pvid;--- Remove package name if not used any moreSELECT COUNT (pv.pv_id)INTO ROWCOUNTFROM package_versions pvWHERE pv.pkg_id = pkgid;IF ROWCOUNT < 1THENDELETE FROM PACKAGES pkgWHERE pkg.pkg_id = pkgid;END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE new_patch (snewpatchversion IN package_versions.pkg_version%TYPE,nparentpvid IN NUMBER,spatchidlist IN VARCHAR2,nuserid IN NUMBER,returnpatchid OUT NUMBER)ISpatchpv_id NUMBER;parpkg_id NUMBER;lastinstallorder NUMBER;ispatchdlocked package_versions.dlocked%TYPE;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;opatchdepcollector relmgr_number_tab_t := relmgr_number_tab_t ();CURSOR parent_curISSELECT pv.*, pkg.pkg_nameFROM package_versions pv, PACKAGES pkgWHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;parent_rec parent_cur%ROWTYPE;CURSOR patch_curISSELECT pv.*, pg.pkg_nameFROM package_versions pv, PACKAGES pgWHERE pv.pkg_id = parpkg_idAND pv.pkg_version = snewpatchversionAND pv.pkg_id = pg.pkg_id;patch_rec patch_cur%ROWTYPE;CURSOR releases_curISSELECT rc.pv_idFROM release_content rcWHERE rc.pv_id = patch_rec.pv_id;releases_rec releases_cur%ROWTYPE;BEGIN-- Get Last Install OrderSELECT COUNT (*)INTO lastinstallorderFROM package_patches ppWHERE pp.pv_id = nparentpvid;-- Get parent detailsOPEN parent_cur;FETCH parent_curINTO parent_rec;parpkg_id := parent_rec.pkg_id;-- Find if patch exists in databaseOPEN patch_cur;FETCH patch_curINTO patch_rec;-- Parent must be officialIF parent_rec.dlocked = 'Y'THENIF patch_cur%NOTFOUNDTHENispatchdlocked := 'N';-- Create new patch version --SELECT seq_pv_id.NEXTVALINTO patchpv_idFROM DUAL;split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);INSERT INTO package_versions(pv_id, pkg_id, pkg_version,dlocked, created_stamp, creator_id,modified_stamp, modifier_id, v_mm, v_nmm, v_ext,src_path,pv_description,owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,is_autobuildable, ripple_field)VALUES (patchpv_id, parpkg_id, snewpatchversion,ispatchdlocked, ora_sysdate, nuserid,ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,parent_rec.src_path,'This is a patch to '|| parent_rec.pkg_name|| ' '|| parent_rec.pkg_version,nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field);INSERT INTO package_patches(pv_id, patch_id, install_order)(SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,lastinstallorder + 1 AS install_orderFROM package_versions pvWHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');/* LOG ACTION */log_action (patchpv_id,'new_version',nuserid,'Patch version created: ' || snewpatchversion);log_action (nparentpvid,'patch_add',nuserid,'New patch created and attached: ' || snewpatchversion);ELSEpatchpv_id := patch_rec.pv_id;ispatchdlocked := patch_rec.dlocked;-- Find if pv_id exists in release content (i.e. it cannot be a patch)OPEN releases_cur;FETCH releases_curINTO releases_rec;IF releases_cur%NOTFOUNDTHEN-- This pv_id is trully a patch, hence add Y to column IS_PATCHUPDATE package_versionsSET is_patch = 'Y'WHERE pv_id = patchpv_id;INSERT INTO package_patches(pv_id, patch_id, install_order)(SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,lastinstallorder + 1 AS install_orderFROM package_versions pvWHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');END IF;CLOSE releases_cur;/* LOG ACTION */log_action (nparentpvid,'patch_add',nuserid,'Patch version was found and attached: '|| snewpatchversion);END IF;END IF;/* Create Patch Dependencies */opatchdepcollector := in_list_number (spatchidlist);-- Make sure patch is unofficial before altering its dependenciesIF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')THEN-- Delete Existing DependenciesDELETE FROM package_dependencies depWHERE dep.pv_id = patchpv_id;-- Insert new dependenciesINSERT INTO package_dependencies(pv_id, dpv_id, pkg_id, dpkg_id, build_type)SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,'L' AS build_typeFROM package_versions pvWHERE pv.pv_id IN (SELECT *FROM TABLE(CAST(opatchdepcollector AS relmgr_number_tab_t)));END IF;-- Return patch_idreturnpatchid := patchpv_id;CLOSE parent_cur;CLOSE patch_cur;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Patch version '|| snewpatchversion|| ' already exist.');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE obsolete_patch (patchid IN NUMBER,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER)ISBEGIN-- Update patchUPDATE package_versions pvSET pv.is_obsolete = isobsolete,pv.obsolete_comments = obsoletecommentsWHERE pv.pv_id = patchid;/*-- Update patch childrenUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.DPV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.PV_ID = PatchId);-- Update patch parentUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.PV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.DPV_ID = PatchId);*//* LOG ACTION */IF isobsolete IS NOT NULLTHENlog_action (patchid,'patch_obsolete',userid,'Obsolete patch. ' || obsoletecomments);ELSElog_action (patchid,'patch_obsolete',userid,'Undo patch obsolete.');END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE obsolete_patches (spatchidlist IN VARCHAR2,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER)ISBEGIN/*--------------- Business Rules Here -------------------*/IF spatchidlist IS NULLTHENraise_application_error (-20000,'Please select one or more Patches.');END IF;/*-------------------------------------------------------*/-- Update patchUPDATE package_versions pvSET pv.is_obsolete = isobsolete,pv.obsolete_comments = obsoletecommentsWHERE pv.pv_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (spatchidlist) AS relmgr_number_tab_t)FROM DUAL));/*-- Update patch childrenUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.DPV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.PV_ID = PatchId);-- Update patch parentUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.PV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.DPV_ID = PatchId);*//* LOG ACTIONIF IsObsolete IS NOT NULL THENLog_Action ( PatchId, 'patch_obsolete', UserId,'Obsolete patch. '|| ObsoleteComments );ELSELog_Action ( PatchId, 'patch_obsolete', UserId,'Undo patch obsolete.' );END IF; */END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_process (nprocid IN processes.proc_id%TYPE,shealthtag IN processes.proc_name%TYPE,sprocdesc IN processes.proc_description%TYPE,scmdinterface IN processes.run_as%TYPE,spkgowner IN processes.pkg_owner%TYPE,sisinterface IN processes.is_interface%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER)ISpkgname VARCHAR2 (100);BEGININSERT INTO processes(proc_id, proc_name, proc_description, run_as, pkg_owner,is_interface)VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,sisinterface);pk_package.add_package_process (nprocid, npvid, nuserid);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_package_process (nprocidlist IN VARCHAR2,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER)ISprocessname VARCHAR2 (4000);CURSOR proc_curISSELECT prc.proc_idFROM processes prcWHERE prc.proc_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (nprocidlist) AS relmgr_number_tab_t)FROM DUAL));proc_rec proc_cur%ROWTYPE;BEGINOPEN proc_cur;FETCH proc_curINTO proc_rec;WHILE proc_cur%FOUNDLOOPINSERT INTO package_processes (proc_id, pv_id)VALUES (proc_rec.proc_id, npvid);SELECT prc.proc_nameINTO processnameFROM processes prcWHERE prc.proc_id = proc_rec.proc_id;-- Log Action --log_action (npvid,'process_add',nuserid,'Added process with health tag ' || processname);FETCH proc_curINTO proc_rec;END LOOP;CLOSE proc_cur;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE remove_process (nprocid IN package_processes.proc_id%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER)ISprocessname VARCHAR2 (4000);BEGINSELECT prc.proc_nameINTO processnameFROM processes prcWHERE prc.proc_id = nprocid;DELETE FROM package_processesWHERE proc_id = nprocid AND pv_id = npvid;-- Log Action --log_action (npvid,'process_remove',nuserid,'Removed process with health tag ' || processname);END;/*-------------------------------------------------------------------------------------------------------*//*** Author: Rupesh Solanki** Purpose: To move package versions from one release to another** Release: 4th September 2006*/PROCEDURE move_package (npvid IN package_versions.pv_id%TYPE,nrtagid IN release_tags.rtag_id%TYPE,nnewrtagid IN release_tags.rtag_id%TYPE,nuserid IN NUMBER)ISoldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);BEGINSELECT rtag_name into oldrtag_nameFROM RELEASE_TAGSWHERE rtag_id = nrtagid;SELECT rtag_name into newrtag_nameFROM RELEASE_TAGSWHERE rtag_id = nnewrtagid;/* Table Work In Progress*/UPDATE WORK_IN_PROGRESSSET RTAG_ID = nnewrtagidWHERE RTAG_ID = nrtagidAND PV_ID = npvid;/* Table PLANNED*/UPDATE PLANNEDSET RTAG_ID = nnewrtagidWHERE RTAG_ID = nrtagidAND PV_ID = npvid;/* Table PEGGED_VERSIONS */DELETE FROM PEGGED_VERSIONS pegvWHERE pegv.RTAG_ID = nrtagidAND pegv.PV_ID = npvid;/* Table ADVISORY_RIPPLE*/DELETE FROM ADVISORY_RIPPLEWHERE RTAG_ID = nrtagidAND PV_ID = npvid;-- Log Action --log_action (npvid,'move_package_version',nuserid,'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name);END;/*-------------------------------------------------------------------------------------------------------*//*** Author: Rupesh Solanki** Purpose: To modify the product state from integration to test to deployment** Release: 25th January 2006*/PROCEDURE modify_product_state (npvid IN package_versions.pv_id%TYPE,nrtagid IN release_tags.rtag_id%TYPE,nstateid IN product_states.state_id%TYPE,nuserid IN NUMBER) ISsStateName VARCHAR2(4000);sRtagName VARCHAR2(4000);BEGINUPDATE RELEASE_CONTENTSET PRODUCT_STATE = nstateidWHERE PV_ID = npvidAND RTAG_ID = nrtagid;SELECT STATE INTO sStateNameFROM PRODUCT_STATESWHERE STATE_ID = nstateid;SELECT RTAG_NAME into sRtagNameFROM RELEASE_TAGSWHERE RTAG_ID = nrtagid;-- Log Action --log_action (npvid,'modify_product_state',nuserid,sStateName || ' in '|| sRtagName);END;/*-------------------------------------------------------------------------------------------------------*//*** Author: Jeremy Tweddle** Date: 24/Aug/2007*/PROCEDURE add_code_review_url (npvid IN NUMBER,nprojid IN NUMBER,surl IN VARCHAR2,sreason IN VARCHAR2,ddateofreview IN DATE) ISncrid NUMBER;BEGINSELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,last_modified )VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );END;/*-------------------------------------------------------------------------------------------------------*//*** Author: Jeremy Tweddle** Date: 22/Aug/2007*/PROCEDURE update_code_review_url (ncrid IN NUMBER,nprojid IN NUMBER,surl IN VARCHAR2,sreason IN VARCHAR2) ISBEGINUPDATE code_review_urlSET url = surl,proj_id = nprojid,reason = sreason,last_modified = ora_sysdateWHERE cr_id = ncrid;END;/*-------------------------------------------------------------------------------------------------------*//*** Author: Jeremy Tweddle** Date: 22/Aug/2007*/PROCEDURE remove_code_review_url (ncrid IN NUMBER) ISBEGINDELETE FROM code_review_urlWHERE cr_id = ncrid;END;/*-------------------------------------------------------------------------------------------------------*/END pk_package;/---------------------------------------------------------- DDL for Package Body PK_RMAPI_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_RMAPI_TEST"IS/*-------------------------------------------------------------------------------------------------------*/FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)RETURN typecurISnpvid NUMBER := 0;RECORDS typecur;BEGINBEGIN-- Get PV_ID --SELECT pv.pv_idINTO npvidFROM PACKAGES pkg, package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = pkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000, 'Package Not Found!');--WHEN OTHERS THEN-- Consider logging the error and then re-raiseRAISE;END;-- Finally get package dependencies --OPEN RECORDS FORSELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_versionFROM package_dependencies dep, PACKAGES dpkg, package_versions dpvWHERE dep.pv_id = npvidAND dpv.pkg_id = dpkg.pkg_idAND dpv.pv_id = dep.dpv_id;RETURN RECORDS;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION wip_iteration_package (projname VARCHAR2,iterationname VARCHAR2,pkgname VARCHAR2)RETURN typecurISnrtagid NUMBER := 0;RECORDS typecur;BEGINBEGIN-- Get latest rtag_id --SELECT rt.rtag_idINTO nrtagidFROM projects proj, release_tags rtWHERE rt.proj_id = proj.proj_idAND UPPER (proj.proj_name) = UPPER (projname)AND UPPER (rt.rtag_name) = UPPER (iterationname);IF (nrtagid IS NULL)THENraise_application_error (-20000,'Work In Progress is Not Found!');END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000,'Work In Progress is Not Found!');RAISE;END;-- Finally get package dependencies --OPEN RECORDS FORSELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,pv.src_pathFROM PACKAGES pkg, package_versions pv, work_in_progress wipWHERE pv.pkg_id = pkg.pkg_idAND wip.pv_id = pv.pv_idAND wip.rtag_id = nrtagidAND pkg.pkg_name = pkgname;RETURN RECORDS;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION auto_make_release (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,newpkgversion IN VARCHAR2,label IN VARCHAR2,dependenciesimportlist IN VARCHAR2,isrippled IN NUMBER,username IN VARCHAR2)RETURN NUMBERISpkgid NUMBER;pvid NUMBER := 0;userid NUMBER;dlocked VARCHAR2 (20) := NULL;clonefrompvid NUMBER;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;return_package_not_found NUMBER := -1;return_package_already_exists NUMBER := -2;return_not_approved NUMBER := -3;BEGIN/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENraise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pkgname IS NULL)THENraise_application_error (-20000, 'PkgName must be supplied.');END IF;IF (newpkgversion IS NULL)THENraise_application_error (-20000, 'PkgVersion must be supplied.');END IF;IF (label IS NULL)THENraise_application_error (-20000, 'Label must be supplied.');END IF;IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)THENraise_application_error(-20000,'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).');END IF;IF (username IS NULL)THENraise_application_error (-20000, 'UserName must be supplied.');END IF;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000,'UserName '|| username|| ' is not valid or disabled.');END;/*-------------------------------------------------------*/-- Create package if necessaryIF isrippled = 1THEN/* Ripple Build */BEGIN-- Make sure that package does not existSELECT pv.pv_idINTO pvidFROM package_versions pv, PACKAGES pkgWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = newpkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENpvid := 0;END;IF (pvid = 0)THEN-- Split current version in partssplit_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);BEGIN-- Find package to be replaced with thie ripple packageIF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')THENSELECT pv.pv_idINTO clonefrompvidFROM PACKAGES pkg, package_versions pv,release_content rcWHERE rc.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');ELSESELECT pv.pv_idINTO clonefrompvidFROM PACKAGES pkg, package_versions pv,release_content rcWHERE rc.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Cannot get CloneFromPvId. VExt='|| vext|| ', RtagId='|| rtagid|| ', PkgName='|| pkgname|| ', SSV_EXT='|| ssv_ext);END;IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')THEN-- Create packageseed_package_names_versions (pkgname,newpkgversion,userid,pvid,clonefrompvid);ELSE-- Create packageseed_package_names_versions2 (pkgname,newpkgversion,userid,pvid,clonefrompvid);END IF;-- Update Package reason for releaseUPDATE package_versions pvSET pv.comments = 'Rippled Build.',pv.build_type = 'Y'WHERE pv.pv_id = pvid;ELSE-- Package already exists, it was built previously, and has just been re-built again probably due to the-- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts-- are now needed once more. As such, we need to ensure that a new release note generation occurs so-- reset the package_versions[pvid].release_notes_info field to enable that to happen.UPDATE package_versions pvSET pv.release_notes_info = null,pv.modified_stamp = ora_sysdatetimeWHERE pv.pv_id = pvid;RETURN return_package_already_exists;END IF;ELSE/* Auto build from Pending area */-- Find package in pending areaBEGINSELECT pv.pv_id, pv.dlockedINTO pvid, dlockedFROM planned pl, package_versions pv, PACKAGES pkgWHERE pl.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND pl.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND pv.dlocked = 'A'AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')AND rownum = 1ORDER BY pv.modified_stamp;EXCEPTIONWHEN NO_DATA_FOUNDTHENpvid := 0;END;IF (pvid = 0)THEN-- Package does not exist in pending area, hence report itRETURN return_package_not_found;ELSIF (dlocked != 'A')THEN-- Package is not approved for autobuildRETURN return_not_approved;END IF;END IF;BEGIN-- Import Dependenciesimport_dependencies (pvid, dependenciesimportlist, userid);END;BEGIN-- Split current version in partssplit_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);-- Update Package DetailsUPDATE package_versions pvSET pv.pkg_version = newpkgversion,pv.v_ext = ssv_ext,pv.v_mm = ssv_mm,pv.v_nmm = ssv_nmm,pv.pkg_label = labelWHERE pv.pv_id = pvid;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHEN-- Package already exists, hence cannot be used for ripple buildRETURN return_package_already_exists;END;-- Update the is_autobuildableUPDATE package_versionsSET is_autobuildable = 'Y'WHERE pv_id = pvid;-- Now release packagepk_environment.auto_make_release (pvid,rtagid,userid,vext,ssv_ext,clonefrompvid);--Now clean the PLANNED_VERSIONS tableSELECT pkg_idINTO pkgidFROM PACKAGESWHERE pkg_name = pkgname;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = newpkgversion;RETURN pvid;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION auto_make_vcsrelease (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,newpkgversion IN VARCHAR2,vcstag IN VARCHAR2,dependenciesimportlist IN VARCHAR2,isrippled IN NUMBER,username IN VARCHAR2)RETURN NUMBERISpkgid NUMBER;pvid NUMBER := 0;userid NUMBER;dlocked VARCHAR2 (20) := NULL;clonefrompvid NUMBER;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;return_package_not_found NUMBER := -1;return_package_already_exists NUMBER := -2;return_not_approved NUMBER := -3;x_vcstypeid NUMBER;x_tag VARCHAR2(32);x_label VARCHAR2(60);x_srcpath VARCHAR2(2000);-- Regular expression constituentsToken VARCHAR2(16) := '([^:]+)'; -- a token is anything except a ':' characterSeperator VARCHAR2(4) := '::'; -- tokens will be seperated by '::'BOL VARCHAR2(4) := '^';Anything VARCHAR2(4) := '.*';ReplaceToken1 VARCHAR2(4) := '\1';ReplaceToken2 VARCHAR2(4) := '\2';ReplaceToken3 VARCHAR2(4) := '\3';BEGIN/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENraise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pkgname IS NULL)THENraise_application_error (-20000, 'PkgName must be supplied.');END IF;IF (newpkgversion IS NULL)THENraise_application_error (-20000, 'PkgVersion must be supplied.');END IF;IF (vcstag IS NULL)THENraise_application_error (-20000, 'PkgVcsTag must be supplied.');END IF;IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)THENraise_application_error(-20000,'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).');END IF;IF (username IS NULL)THENraise_application_error (-20000, 'UserName must be supplied.');END IF;-- Parse the PkgVcsTag-- Sets up-- x_tag, x_label, x_srcpathBEGIN-- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);-- Decode the short tagCASE x_tagWHEN 'CC' THEN-- extract the 2nd and 3rd tokens, those being the source path and label respectivelyx_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);x_label := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);-- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so-- check for that error as well as the obvious zero-length string conditions.IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THENraise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');END IF;WHEN 'SVN' THEN-- extract the 2nd token, that being the subversion tagx_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);x_label := 'N/A';-- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so-- check for that error as well as the obvious zero-length string conditions.IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THENraise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');END IF;WHEN 'UC' THEN-- nothing to extract, just assign defaultsx_srcpath := '';x_label := 'N/A';ELSEraise_application_error (-20000, 'Unrecognised VCS Tag!');END CASE;END;-- Get the VCS_TYPE_ID for the version control system.BEGINSELECT vt.vcs_type_idINTO x_vcstypeidFROM VCS_TYPE vtWHERE vt.tag = x_tag;EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );END;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error (-20000,'UserName '|| username|| ' is not valid or disabled.');END;/*-------------------------------------------------------*/-- Create package if necessaryIF isrippled = 1THEN/* Ripple Build */BEGIN-- Make sure that package does not existSELECT pv.pv_idINTO pvidFROM package_versions pv, PACKAGES pkgWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = newpkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENpvid := 0;END;IF (pvid = 0)THEN-- Split current version in partssplit_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);BEGIN-- Find package to be replaced with thie ripple packageIF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')THENSELECT pv.pv_idINTO clonefrompvidFROM PACKAGES pkg, package_versions pv,release_content rcWHERE rc.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');ELSESELECT pv.pv_idINTO clonefrompvidFROM PACKAGES pkg, package_versions pv,release_content rcWHERE rc.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Cannot get CloneFromPvId. VExt='|| vext|| ', RtagId='|| rtagid|| ', PkgName='|| pkgname|| ', SSV_EXT='|| ssv_ext);END;IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')THEN-- Create packageseed_package_names_versions (pkgname,newpkgversion,userid,pvid,clonefrompvid);ELSE-- Create packageseed_package_names_versions2 (pkgname,newpkgversion,userid,pvid,clonefrompvid);END IF;-- Update Package reason for releaseUPDATE package_versions pvSET pv.comments = 'Rippled Build.',pv.build_type = 'Y'WHERE pv.pv_id = pvid;ELSE-- Package already exists, it was built previously, and has just been re-built again probably due to the-- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts-- are now needed once more. As such, we need to ensure that a new release note generation occurs so-- reset the package_versions[pvid].release_notes_info field to enable that to happen.UPDATE package_versions pvSET pv.release_notes_info = null,pv.modified_stamp = ora_sysdatetimeWHERE pv.pv_id = pvid;RETURN return_package_already_exists;END IF;ELSE/* Auto build from Pending area */-- Find package in pending areaBEGINSELECT pv.pv_id, pv.dlockedINTO pvid, dlockedFROM planned pl, package_versions pv, PACKAGES pkgWHERE pl.pv_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND pl.rtag_id = rtagidAND pkg.pkg_name = pkgnameAND pv.dlocked = 'A'AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')AND rownum = 1ORDER BY pv.modified_stamp;EXCEPTIONWHEN NO_DATA_FOUNDTHENpvid := 0;END;IF (pvid = 0)THEN-- Package does not exist in pending area, hence report itRETURN return_package_not_found;ELSIF (dlocked != 'A')THEN-- Package is not approved for autobuildRETURN return_not_approved;END IF;END IF;BEGIN-- Import Dependenciesimport_dependencies (pvid, dependenciesimportlist, userid);END;BEGIN-- Split current version in partssplit_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);-- Update Package DetailsUPDATE package_versions pvSET pv.pkg_version = newpkgversion,pv.v_ext = ssv_ext,pv.v_mm = ssv_mm,pv.v_nmm = ssv_nmm,pv.src_path = x_srcpath,pv.pkg_label = x_label,pv.vcs_type_id = x_vcstypeidWHERE pv.pv_id = pvid;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHEN-- Package already exists, hence cannot be used for ripple buildRETURN return_package_already_exists;END;-- Update the is_autobuildableUPDATE package_versionsSET is_autobuildable = 'Y'WHERE pv_id = pvid;-- Now release packagepk_environment.auto_make_release (pvid,rtagid,userid,vext,ssv_ext,clonefrompvid);--Now clean the PLANNED_VERSIONS tableSELECT pkg_idINTO pkgidFROM PACKAGESWHERE pkg_name = pkgname;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = newpkgversion;RETURN pvid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE import_dependencies (pvid IN NUMBER,dependenciesimportlist IN VARCHAR2,userid IN NUMBER)IS/*|| DependenciesImportList Format:|| "pkgA","1.0.0";"pkgB","2.0.0";|| OR 'pkgA','1.0.0';'pkgB','2.0.0';*/TYPE tdictionary IS TABLE OF VARCHAR2 (4000)INDEX BY VARCHAR2 (4000);seperator VARCHAR2 (2) := '||';pkgname VARCHAR2 (4000);pkgversion VARCHAR2 (4000);buildtype VARCHAR2 (50);pkgid NUMBER;vext VARCHAR2 (4000);dpvid NUMBER;slist VARCHAR2 (4000);cbuildtypes tdictionary;dependencyrow NUMBER;sdependency VARCHAR2 (4000);first_pos VARCHAR2 (4000);second_pos VARCHAR2 (4000);third_pos VARCHAR2 (4000);forth_pos VARCHAR2 (4000);citemcollection relmgr_varchar2_tab_t := relmgr_varchar2_tab_t ();CURSOR curbuildtypeISSELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,dep.build_typeFROM package_dependencies dep, package_versions dpvWHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;recbuildtype curbuildtype%ROWTYPE;BEGINslist := dependenciesimportlist;-- Preformat StringIF NOT slist IS NULLTHENslist := REPLACE (slist, ' '); -- Remove spacesslist := REPLACE (slist, UTL_TCP.crlf);-- Remove new line and carriage-return charactersslist := REPLACE (slist, '''', '"'); -- Replace ' with "END IF;-- Get Current DependenciesOPEN curbuildtype;FETCH curbuildtypeINTO recbuildtype;WHILE curbuildtype%FOUNDLOOPcbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;FETCH curbuildtypeINTO recbuildtype;END LOOP;CLOSE curbuildtype;-- Separate dependencies with ; separatorcitemcollection := in_list_varchar2 (slist, ';');BEGIN-- Remove old dependenciesDELETE FROM package_dependencies depWHERE dep.pv_id = pvid;-- Loop through dependenciesFOR dependencyrow IN 1 .. citemcollection.COUNTLOOP-- Extract pkg_name and pkg_versionsdependency := citemcollection (dependencyrow);first_pos := INSTR (sdependency, '"', 1, 1);second_pos := INSTR (sdependency, '"', 1, 2);third_pos := INSTR (sdependency, '"', 1, 3);forth_pos := INSTR (sdependency, '"', 1, 4);pkgname :=SUBSTR (sdependency,(first_pos + 1),(second_pos - first_pos - 1));pkgversion :=SUBSTR (sdependency,(third_pos + 1),(forth_pos - third_pos - 1));-- Dependency must exits to be linked againstBEGINSELECT pv.pv_id, pv.pkg_id, pv.v_extINTO dpvid, pkgid, vextFROM package_versions pv, PACKAGES pkgWHERE pv.pkg_id = pkg.pkg_idAND pkg.pkg_name = pkgnameAND pv.pkg_version = pkgversion;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Dependency ['|| pkgname|| ' '|| pkgversion|| '] does not exist yet and cannot be used!');END;-- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)BEGINbuildtype := cbuildtypes (pkgid || seperator || vext);IF buildtype IS NULLTHEN-- Set build type to LinkPackageArchive by defaultbuildtype := 'L';END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENbuildtype := 'L';END;-- Insert Dependenciesupdate_package_dependency (pvid,pkgname,pkgversion,buildtype,userid,0);END LOOP;END;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2ISpkgversion VARCHAR2 (4000);BEGINBEGINSELECT pv.pkg_versionINTO pkgversionFROM PACKAGES pkg, release_content rc, package_versions pvWHERE pv.pv_id = rc.pv_idAND pkg.pkg_id = pv.pkg_idAND pkg.pkg_name = pkgnameAND rc.rtag_id = rtagid;RETURN pkgversion;END;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)RETURN VARCHAR2ISpkgversion VARCHAR2 (4000);BEGINBEGINSELECT pv.pkg_versionINTO pkgversionFROM PACKAGES pkg, work_in_progress wip, package_versions pvWHERE pv.pv_id = wip.pv_idAND pkg.pkg_id = pv.pkg_idAND pkg.pkg_name = pkgnameAND wip.rtag_id = rtagid;IF pkgversion IS NULLTHENSELECT pv.pkg_versionINTO pkgversionFROM PACKAGES pkg, planned pl, package_versions pvWHERE pv.pv_id = pl.pv_idAND pkg.pkg_id = pv.pkg_idAND pkg.pkg_name = pkgnameAND pl.rtag_id = rtagid;END IF;RETURN pkgversion;END;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_dash_board (rtagid IN NUMBER)ISprojid NUMBER;projiddb NUMBER;total NUMBER;auto_total NUMBER;rtagiddb NUMBER;BEGINSELECT COUNT (*)INTO totalFROM release_content rc, package_versions pvWHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;SELECT COUNT (*)INTO auto_totalFROM release_content rc, package_versions pvWHERE pv.pv_id = rc.pv_idAND pv.is_autobuildable = 'Y'AND rc.rtag_id = rtagid;BEGINSELECT rtag_idINTO rtagiddbFROM dash_boardWHERE rtag_id = rtagid;SELECT proj_idINTO projiddbFROM dash_boardWHERE rtag_id = rtagid;EXCEPTIONWHEN NO_DATA_FOUNDTHENrtagiddb := '';END;IF rtagiddb IS NULLTHENSELECT proj_idINTO projidFROM release_tagsWHERE rtag_id = rtagid;INSERT INTO dash_board(proj_id, rtag_id, last_build_time, automated_packages,total_packages)VALUES (projid, rtagid, ora_sysdatetime, auto_total,total);ELSEUPDATE dash_boardSET last_build_time = ora_sysdatetime,automated_packages = auto_total,total_packages = totalWHERE proj_id = projiddb AND rtag_id = rtagiddb;END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION exclude_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2)RETURN NUMBERISuserid NUMBER;outerrcode NUMBER;pkgid NUMBER;CURSOR dnr_duplicate_curISSELECT *FROM do_not_rippleWHERE pv_id = pvid AND rtag_id = rtagid;dnr_duplicate_rec dnr_duplicate_cur%ROWTYPE;BEGINouterrcode := -1; -- Set default return error code to ERROR state/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pvid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'PvId must be supplied.');END IF;IF (username IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'UserName must be supplied.');END IF;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENRETURN outerrcode;-- raise_application_error (-20000,-- 'UserName '-- || username-- || ' is not valid or disabled.'-- );END;OPEN dnr_duplicate_cur;FETCH dnr_duplicate_curINTO dnr_duplicate_rec;IF dnr_duplicate_cur%FOUNDTHENouterrcode := 0;END IF;IF dnr_duplicate_cur%NOTFOUNDTHEN/* No duplicate recordset */unripple_package (pvid, rtagid, userid);outerrcode := 0; -- Set return to SUCCESSEND IF;CLOSE dnr_duplicate_cur;SELECT pkg_idINTO pkgidFROM package_versionsWHERE pv_id = pvid;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = spkgversion;RETURN outerrcode;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION exclude_indirect_from_build (pvid IN NUMBER,spkgversion IN VARCHAR2,rtagid IN NUMBER,username IN VARCHAR2,rootpvid IN NUMBER,rootcause IN VARCHAR2,rootfile IN VARCHAR2)RETURN NUMBERISuserid NUMBER;outerrcode NUMBER;pkgid NUMBER;CURSOR dnr_duplicate_curISSELECT *FROM do_not_rippleWHERE pv_id = pvid AND rtag_id = rtagid;dnr_duplicate_rec dnr_duplicate_cur%ROWTYPE;BEGINouterrcode := -1; -- Set default return error code to ERROR state/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'RtagId must be supplied.');END IF;IF (pvid IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'PvId must be supplied.');END IF;IF (username IS NULL)THENRETURN outerrcode;-- raise_application_error (-20000, 'UserName must be supplied.');END IF;-- Get user_idBEGINSELECT usr.user_idINTO useridFROM users usrWHERE UPPER (usr.user_name) = UPPER (username)AND usr.is_disabled IS NULL;EXCEPTIONWHEN NO_DATA_FOUNDTHENRETURN outerrcode;-- raise_application_error (-20000,-- 'UserName '-- || username-- || ' is not valid or disabled.'-- );END;/* No duplicate recordset */unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);outerrcode := 0; -- Set return to SUCCESSSELECT pkg_idINTO pkgidFROM package_versionsWHERE pv_id = pvid;DELETE FROM planned_versionsWHERE pkg_id = pkgid AND pkg_version = spkgversion;RETURN outerrcode;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)ISBEGININSERT INTO abt_action_log(rcon_id, action_datetime, action)VALUES (rconid, ora_sysdatetime, action);END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION insert_package_metrics (rtagid IN NUMBER,pkgname IN VARCHAR2,vext IN VARCHAR2,metricstring IN VARCHAR2)RETURN NUMBERIScitemcollection relmgr_varchar2_tab_t := relmgr_varchar2_tab_t ();lv_pvid NUMBER := 0;rownumber NUMBER;rowcontent VARCHAR2(4000);metricname VARCHAR2(1000);metricvalue VARCHAR2(4000);return_insert_error NUMBER := -1;return_insert_success NUMBER := 0;/* Metrics */lv_branches NUMBER;lv_branchlist VARCHAR2(4000);lv_codefiles NUMBER;lv_ignoredfiles NUMBER;lv_directories NUMBER;lv_directorydepth NUMBER;lv_totalfiles NUMBER;lv_makefiles NUMBER;lv_blanklines NUMBER;lv_codelines NUMBER;lv_commentlines NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (rtagid IS NULL)THENRETURN return_insert_error;END IF;IF (pkgname IS NULL)THENRETURN return_insert_error;END IF;IF (metricstring IS NULL)THENRETURN return_insert_error;END IF;BEGINSELECT pv.pv_idINTO lv_pvidFROM package_versions pv, packages pkg, release_content rcWHERE pv.pkg_id = pkg.pkg_idAND rc.rtag_id = rtagidAND pv.pv_id = rc.pv_idAND pkg.pkg_name = pkgnameAND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');EXCEPTIONWHEN NO_DATA_FOUNDTHENlv_pvid := 0;END;citemcollection := in_list_varchar2 (metricstring, ';');FOR rownumber IN 1 .. citemcollection.COUNTLOOProwcontent := citemcollection(rownumber);metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');IF metricname = 'ccbranch.count' THEN lv_branches := metricvalue;ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;END IF;END LOOP;IF (lv_pvid > 0)THEN-- Delete any existing entries for this package version to makes sure our data is untaintedDELETE FROM package_metrics pmWHERE pm.pv_id = lv_pvid;-- Insert the new data into the metrics tableINSERT INTO package_metrics(pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp)VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime);-- Now update the Release_Metrics Tableupdate_release_metrics(rtagid);RETURN return_insert_success;ELSERETURN return_insert_error;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE update_release_metrics (rtagid IN NUMBER)ISlv_totalpackages NUMBER;lv_autobuilt NUMBER;lv_linesofcode NUMBER;lv_unittested NUMBER;lv_autotested NUMBER;lv_numOfbranches NUMBER;lv_lastbuildtime DATE;BEGINIF (rtagid > 0)THEN-- Get the total number of packages in this release and the number of-- those that are autobuiltSELECT COUNT (DISTINCT rc.pv_id),COUNT (DISTINCT autobuilt_qry.pv_id)INTO lv_totalpackages, lv_autobuiltFROM release_content rc,package_versions pv,(SELECT rc.pv_idFROM release_content rc,package_versions pvWHERE pv.is_autobuildable = 'Y'AND pv.pv_id = rc.pv_idAND rc.rtag_id = rtagid) autobuilt_qryWHERE pv.pv_id = rc.pv_idAND rc.rtag_id = rtagidAND autobuilt_qry.pv_id (+) = rc.pv_id;-- Get the build time of the last package built in this release and the-- total number of lines of codeSELECT MAX(pm.created_stamp),SUM(pm.code_lines)INTO lv_lastbuildtime, lv_linesofcodeFROM package_metrics pm, release_content rcWHERE pm.pv_id = rc.pv_idAND rc.rtag_id = rtagid;-- Get the number of packages with unit tests in this release and the-- number of those that are autotestedSELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittestedFROM unit_tests ut,release_content rcWHERE ut.pv_id = rc.pv_idAND rc.rtag_id = rtagidAND ut.test_types_fk != 1;SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotestedFROM unit_tests ut,release_content rcWHERE ut.pv_id = rc.pv_idAND rc.rtag_id = rtagidAND ut.test_types_fk = 7;-- Count the number of unique branches in the packages in this release.-- SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches-- FROM (-- SELECT pv_id,-- regexp_substr(str, '[^,]+', 1, level) branch,-- level lv,-- lag(level, 1, 0) over (partition by pv_id order by level) lg-- FROM (-- SELECT pm.pv_id,-- ','||pm.branch_list str-- FROM package_metrics pm,-- release_content rc-- WHERE pm.pv_id = rc.pv_id-- AND rc.rtag_id = rtagid-- )-- CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL-- )-- WHERE lv != lg;UPDATE release_metrics rmSET rm.total_packages = lv_totalpackages,rm.autobuilt = lv_autobuilt,rm.lines_of_code = lv_linesofcode,rm.unit_tested = lv_unittested,rm.autotested = lv_autotested,-- rm.branches = lv_numOfbranches,rm.last_build_time = lv_lastbuildtimeWHERE rtag_id = rtagid;IF (SQL%ROWCOUNT = 0)THENINSERT INTO release_metrics(rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,autotested, last_build_time)VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,lv_autotested, lv_lastbuildtime);END IF;-- IF (SQL%ROWCOUNT = 0)-- THEN-- INSERT INTO release_metrics-- (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,-- autotested, branches, last_build_time-- )-- VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,-- lv_autotested, lv_numOfbranches, lv_lastbuildtime-- );-- END IF;-- ELSE-- raise_application_error (-20000, 'RtagId must be supplied.');END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2ISvcstypeid NUMBER;vcstag VARCHAR2(32);label VARCHAR2(60);srcpath VARCHAR2(2000);vcstypeid_cc NUMBER;vcstypeid_uc NUMBER;BEGIN-- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about-- what the primary key value is for the ClearCase VCS entry.BEGINSELECT vt.vcs_type_idINTO vcstypeid_ccFROM VCS_TYPE vtWHERE vt.tag = 'CC';EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');END;-- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about-- what the primary key value is for the Uncontrolled VCS entry.BEGINSELECT vt.vcs_type_idINTO vcstypeid_ucFROM VCS_TYPE vtWHERE vt.tag = 'UC';EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');END;-- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version-- As additional VCS types are introduced, we may have to extend what this SELECT statement returnsBEGINSELECT pv.pkg_label, pv.src_path,(CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_ucWHEN pv.vcs_type_id IS NULL THEN vcstypeid_ccELSE pv.vcs_type_id END) AS vcs_type_idINTO label, srcpath, vcstypeidFROM PACKAGE_VERSIONS pvWHERE pv.pv_id = pvid;EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Package Version Not Found!');END;-- Get the VCS TAG for the VCS_TYPE_ID.BEGINSELECT vt.tagINTO vcstagFROM VCS_TYPE vtWHERE vt.vcs_type_id = vcstypeid;EXCEPTIONWHEN NO_DATA_FOUND THENraise_application_error (-20000, 'Could not get VCS Tag for the package version!');END;-- Return value depending upon which VCS Tag is being used.-- As additional VCS types are introduced, we have to add additional WHEN clausesCASE vcstagWHEN 'CC' THENRETURN vcstag || '::' || srcpath || '::' || label;WHEN 'SVN' THENRETURN vcstag || '::' || srcpath;ELSERETURN vcstag || '::';END CASE;END;/*-------------------------------------------------------------------------------------------------------*/END pk_rmapi_test;/---------------------------------------------------------- DDL for Package Body PK_LICENCING--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS/*------------------------------|| Last Modified: G.Huddy|| Modified Date: 19/Aug/2008|| Body Version: 1.0------------------------------*/PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) ISBEGINIF IS_LICENCED(PvId, licenceId) = 0 THEN-- Add entry to licencing tableINSERT INTO licencing (pv_id, licence)VALUES (PvId, licenceId);-- log action-- TODOEND IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) ISBEGINIF NOT IS_LICENCED(PvId, licenceId) = 0 THEN-- Delete entry from licencing tableDELETE FROM licencingWHERE pv_id = PvIdAND licence = licenceId;-- log action-- TODOEND IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) ISCURSOR licencing_curISSELECT *FROM licencingWHERE pv_id = fromPvId;licencing_rec licencing_cur%ROWTYPE;BEGIN-- For each licence association that the Last PV_ID had, create a similar-- arrangement for the new PV_ID-- NOTE that any additional licencing associations the new PV_ID has that the old one-- does not have, are retained. The assumption is that the user has made those and so we do not-- have any right to destroy them without asking them.OPEN licencing_cur;FETCH licencing_curINTO licencing_rec;WHILE licencing_cur%FOUNDLOOPADD_LICENCE ( toPvId, licencing_rec.licence, UserId );FETCH licencing_curINTO licencing_rec;END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER ISfound NUMBER;BEGINSELECT COUNT(*) INTO foundFROM licencingWHERE pv_id = PvIdAND licence = LicenceId;RETURN found;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) ISCURSOR licencing_curISSELECT *FROM licencingWHERE pv_id = PvId;licencing_rec licencing_cur%ROWTYPE;BEGIN-- For each licence association that the PV_ID had, remove itOPEN licencing_cur;FETCH licencing_curINTO licencing_rec;WHILE licencing_cur%FOUNDLOOPREMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );FETCH licencing_curINTO licencing_rec;END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/END PK_LICENCING;/---------------------------------------------------------- DDL for Package Body RM_ISSUES--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS-- Private Implementation -----------------------------------------------------FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBERASBEGIN-- start boundary caseIF ( XXstart < XX ) THENRETURN 1;ELSIF ( XXstart = XX ) THEN-- need to consider YYIF ( YYstart < YY ) THENRETURN 1;ELSIF ( YYstart = YY ) THEN-- need to consider ZZIF ( ZZstart <= ZZ ) THENRETURN 1;ELSERETURN 0;END IF;ELSERETURN 0;END IF;ELSERETURN 0;END IF;EXCEPTIONWHEN OTHERS THENRETURN -1;END;FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBERASBEGIN-- end boundary caseIF ( XX < XXend ) THENRETURN 1;ELSIF ( XX = XXend ) THEN-- need to consider YYIF ( YY < YYend ) THENRETURN 1;ELSIF ( YY = YYend ) THEN-- need to consider ZZIF ( ZZ <= ZZend ) THENRETURN 1;ELSERETURN 0;END IF;ELSERETURN 0;END IF;ELSERETURN 0;END IF;EXCEPTIONWHEN OTHERS THENRETURN -1;END;/*- version format: XX.YY.ZZ.abc*/FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBERASXXstart NUMBER := 0;XXend NUMBER := 0;XX NUMBER := 0;YYstart NUMBER := 0;YYend NUMBER := 0;YY NUMBER := 0;ZZstart NUMBER := 0;ZZend NUMBER := 0;ZZ NUMBER := 0;first_dot NUMBER := 0;second_dot NUMBER := 0;third_dot NUMBER := 0;ProjExtstart VARCHAR2(10);ProjExtend VARCHAR2(10);ProjExt VARCHAR2(10);BEGIN-- strip the version numberfirst_dot := INSTR(version_start, '.', 1, 1);second_dot := INSTR(version_start, '.', 1, 2);third_dot := INSTR(version_start, '.', 1, 3);XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );first_dot := INSTR(version_end, '.', 1, 1);second_dot := INSTR(version_end, '.', 1, 2);third_dot := INSTR(version_end, '.', 1, 3);XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );first_dot := INSTR(version, '.', 1, 1);second_dot := INSTR(version, '.', 1, 2);third_dot := INSTR(version, '.', 1, 3);XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );-- only include versions if all project extensions are the sameIF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THENIF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THENRETURN 1;ELSERETURN 0;END IF;ELSERETURN 0;END IF;EXCEPTIONWHEN OTHERS THENRETURN -1;END;FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBERASpkg_id NUMBER;BEGINSELECTp.PKG_IDINTOpkg_idFROMPACKAGES pWHEREp.PKG_NAME = pkgName;RETURN pkg_id;EXCEPTIONWHEN OTHERS THENdbms_output.put_line('GetPkgId exception: ' || SQLERRM );RETURN -1;END;-- Public Implementation ------------------------------------------------------/*-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep---- INPUT PARAMETERS:---- pkg_name - The name of the top level package to get issues for-- version_start - The start version for the comparison-- version_end - The end version for the comparison*/PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )ASpkgId NUMBER;BEGIN-- get pkg_id of the input package:pkgId := GetPkgId( pkg_name );OPEN vCursor FORSELECTpv.PKG_ID,pv.PKG_VERSION,pv.PV_ID,i_pkg.ISS_ID,( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,pd.DPKG_ID,( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,pd.DPV_ID,i_dpkg.ISS_ID AS ISSUE_IDFROMPACKAGE_VERSIONS pvLEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_IDLEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_IDLEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_IDWHEREpv.PKG_ID = pkgIdANDVersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1AND( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )ORDER BYpv.PKG_ID,pv.PV_ID,pd.DPKG_ID,pd.DPV_ID;EXCEPTIONWHEN OTHERS THENdbms_output.put_line('AllIssues exception: ' || SQLERRM );END;-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok/*-- Proc: LoadIssuesTable---- Populates Package_Issues table with details of issues from all dependent packages.-- This will be for all package versions of the input pkg_name between the-- version_start and version_end.---- INPUT PARAMETERS:---- pkg_name - The name of the top level package to get issues for-- version_start - The start version for the comparison-- version_end - The end version for the comparison*/PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )ASpkgId NUMBER;CURSOR pack_vers_cur ISSELECTpv.PV_ID,pv.PKG_VERSION,pv.PKG_ID,p.PKG_NAMEFROMPACKAGE_VERSIONS pvJOIN PACKAGES p ON pv.PKG_ID = p.PKG_IDWHEREpv.PKG_ID = pkgIdANDVersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;BEGINDELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/-- get the pkg_id we are finding issues forpkgId := GetPkgId( pkg_name );-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.FOR pack_ver_rec IN pack_vers_curLOOPInsertIssuesForDepends( pack_ver_rec.PV_ID, pack_ver_rec.PKG_ID, pack_ver_rec.PKG_NAME, pack_ver_rec.PV_ID, pack_ver_rec.PKG_VERSION );COMMIT;END LOOP;-- The output cursor - shows the individual versions of the top level package then were reported onOPEN vCursor FORSELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*//*removedSELECTPKG_VERSIONFROMRELEASE_MANAGER.RM_PACKAGE_ISSUES;*/EXCEPTIONWHEN OTHERS THENdbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );END;/*-- Proc: InsertIssuesForDepends---- Used by LoadIssuesTable to recursively find issues for all dependent packages---- INPUT PARAMETERS:---- pvID - The package version id of the package to get issues for-- top_pkgID - The package id of the top level package to get issues for - should be the same as pvID when called from LoadIssuesTable (different when called recursively)-- top_pkgName - The package name of the top level package-- top_pvID - The package version id of the top level package-- top_pkgVer - The package version description of the top level package*/PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )ASpkgId NUMBER;issCnt NUMBER := 0;pkgCheck NUMBER := 0;depCheck NUMBER := 0;dpkgName VARCHAR(50);dpkgVersion VARCHAR(50);CURSOR dep_packs_cur ISSELECTDPV_IDFROMPACKAGE_DEPENDENCIESWHEREPV_ID = pvID;BEGIN-- check to see if the package has been processed previouslySELECTCOUNT(*)INTOpkgCheckFROMRM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/WHEREDPV_ID = pvID;dbms_output.put_line('pkgCheck: ' || pkgCheck );-- Package not already processed (no cyclic dependency) - process itIF ( pkgCheck = 0 ) THEN-- check to see if this package version has any issues assigned to itSELECTCOUNT(*)INTOissCntFROMCQ_ISSUES iWHEREi.PV_ID = pvID;dbms_output.put_line('issCnt: ' || issCnt );-- Always enter a marker row into the table even if there are no issues for the package.-- This allows us to pick up any cyclic dependencies.IF ( issCnt > 0 ) THEN-- get issues and insert into RM_PACKAGE_ISSUES/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )SELECT DISTINCTtop_pkgID AS PKG_ID,top_pkgName AS PKG_NAME,top_pvID AS PV_ID,top_pkgVer AS PKG_VERSION,pv.PV_ID AS DPV_ID,p.PKG_NAME AS DPKG_NAME,pv.PKG_VERSION AS DPKG_VERSION,ci.ISS_DB,ci.ISS_IDFROMPACKAGE_VERSIONS pvJOIN PACKAGES p ON pv.PKG_ID = p.PKG_IDJOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_IDWHEREpv.PV_ID = pvID;ELSE-- get the dpkg details - there will always be a row returned hereSELECTp.PKG_NAMEINTOdpkgNameFROMPACKAGE_VERSIONS pvJOIN PACKAGES p ON pv.PKG_ID = p.PKG_IDWHEREpv.PV_ID = pvID;SELECTpv.PKG_VERSIONINTOdpkgVersionFROMPACKAGE_VERSIONS pvWHEREpv.PV_ID = pvID;-- enter a marker row/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )VALUES (top_pkgID,top_pkgName,top_pvID,top_pkgVer,pvID,dpkgName,dpkgVersion,NULL,NULL );END IF;-- If this package version has dependencies then recurseSELECTCOUNT(*)INTOdepCheckFROMPACKAGE_DEPENDENCIESWHEREPV_ID = pvID;IF ( depCheck > 0 ) THEN-- get dependencies and call this function recursively for each oneFOR dep_rec IN dep_packs_curLOOPInsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );END LOOP;END IF;END IF;/*EXCEPTIONWHEN OTHERS THENno exception handling required*/END;END Rm_Issues;/---------------------------------------------------------- DDL for Package Body PK_RELEASE_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_RELEASE_TEST" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 12/Sep/2005|| Body Version: 3.0------------------------------*//*-------------------------------------------------------------------------------------------------------*/PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) ISRtagId NUMBER;ParentRtagId NUMBER;RecCount NUMBER := 0;BEGIN/*--------------- Business Rules Here -------------------*/-- Check for missing parametersIF (sReleaseName IS NULL) OR (nUserId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );END IF;-- Check for duplicate Release NamesSELECT COUNT(rt.RTAG_ID) INTO RecCountFROM RELEASE_TAGS rtWHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )AND rt.PROJ_ID = nProjId;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');END IF;/*-------------------------------------------------------*/-- Get rtag_idSELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;-- Get Parent RtagIdParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );-- Create new releaseINSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,OFFICIAL, REBUILD_ENV, REBUILD_STAMP,PARENT_RTAG_ID, PROJ_ID )VALUES ( RtagId,sReleaseName,sReleaseComments,ORA_SYSDATE,nUserId,'N','N',0,ParentRtagId,nProjId );-- Update display OrderUPDATE_DISPLAY_ORDER ( nProjId );/* Log Project Action */Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );-- Import Release ContentsIF (NOT nSourceRtagId IS NULL) THENImport_Release_Contents ( nSourceRtagId, RtagId, nUserId );END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) ISBEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/UPDATE RELEASE_TAGS urt SETurt.DISPLAY_ORDER = (SELECT qry.REC_NUMFROM (SELECT rel.*, ROWNUM AS REC_NUMFROM (SELECT rt.RTAG_ID,rt.DISPLAY_ORDER,DECODE( rt.PARENT_RTAG_ID,rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_IDFROM RELEASE_TAGS rtWHERE rt.PROJ_ID = nProjId) relSTART WITH rel.PARENT_RTAG_ID = 0CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_IDORDER SIBLINGS BY rel.DISPLAY_ORDER) qryWHERE qry.RTAG_ID = urt.RTAG_ID)WHERE urt.PROJ_ID = nProjId;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER ) ISnIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();SeqNum NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/nIdCollector := IN_LIST_NUMBER ( sRtagIdList );-- Set start sequence numberSeqNum := 1;FOR i IN 1..nIdCollector.COUNTLOOP-- Update new display orderUPDATE RELEASE_TAGS rt SETrt.DISPLAY_ORDER = SeqNumWHERE rt.PROJ_ID = nProjIdAND rt.RTAG_ID = nIdCollector(i);SeqNum := SeqNum + 1;END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, nUserId IN NUMBER ) ISRecCount NUMBER := 0;ProjId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- Check for missing parametersIF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);END IF;-- Check for duplicate Release NamesSELECT rt.PROJ_ID INTO ProjIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;SELECT COUNT(rt.RTAG_ID) INTO RecCountFROM RELEASE_TAGS rtWHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )AND rt.RTAG_ID != nRtagIdAND rt.PROJ_ID = ProjId;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');END IF;/*-------------------------------------------------------*/-- Update release detailsUPDATE RELEASE_TAGS rt SETrt.RTAG_NAME = sReleaseName,rt.DESCRIPTION = sReleaseComments,rt.PARENT_RTAG_ID = nParentRtagId,rt.ASSOC_MASS_REF = nMASSRtagId,rt.CONFIG_SPEC_BRANCH = nConfigSpecBranchWHERE rt.RTAG_ID = nRtagId;-- Update display OrderUPDATE_DISPLAY_ORDER ( ProjId );/* Log Project Action */Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) ISRecCount NUMBER := 0;sReleaseId VARCHAR2(4000);ProjId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId );END IF;-- Check for any kidsSELECT COUNT( rt.RTAG_ID ) INTO RecCountFROM RELEASE_TAGS rtWHERE rt.PARENT_RTAG_ID = nRtagIdAND rt.RTAG_ID != rt.PARENT_RTAG_ID;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.' );END IF;/*-------------------------------------------------------*/-- Clear the release contentsClean_Release_Contents ( nRtagId, nUserId );/* Log Project Action */SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );-- Remove ReleaseDELETEFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER ) ISsSourceLocation VARCHAR2(4000);sTargetLocation VARCHAR2(4000);ProjId NUMBER;cReleaseMode CHAR(1);BEGIN/*--------------- Business Rules Here -------------------*/IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );END IF;IF (nSourceRtagId = nTargetRtagId) THENRAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );END IF;-- Check if Target release is in OPEN modeSELECT rt.OFFICIAL INTO cReleaseModeFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nTargetRtagId;IF (cReleaseMode != 'N') THENRAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );END IF;/*-------------------------------------------------------*/-- Clean target contentsClean_Release_Contents ( nTargetRtagId, nUserId );-- Import Released Area ContentsINSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )SELECT nTargetRtagId AS RTAG_ID,rc.PV_ID,rc.BASE_VIEW_ID,rc.INSERT_STAMP,rc.INSERTOR_ID,rc.PKG_STATEFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nSourceRtagId;-- Import Ignore Warning statesINSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )SELECT nTargetRtagId AS RTAG_ID,igw.PV_ID,igw.DPV_IDFROM IGNORE_WARNINGS igwWHERE igw.rtag_id = nSourceRtagId;/* Log Project Action */-- Get Source LocationSELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO sSourceLocationFROM RELEASE_TAGS rt,PROJECTS prWHERE rt.PROJ_ID = pr.PROJ_IDAND rt.RTAG_ID = nSourceRtagId;-- Get Target LocationSELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO sTargetLocationFROM RELEASE_TAGS rt,PROJECTS prWHERE rt.PROJ_ID = pr.PROJ_IDAND rt.RTAG_ID = nTargetRtagId;-- Get project idSELECT rt.PROJ_ID INTO ProjIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nTargetRtagId;Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||' TARGET: '|| sTargetLocation, nTargetRtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) ISRecCount NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId );END IF;-- Check if other release references this releaseSELECT COUNT( rl.RTAG_ID ) INTO RecCountFROM RELEASE_LINKS rlWHERE rl.REF_RTAG_ID = nRtagId;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.' );END IF;/*-------------------------------------------------------*/-- Delete Release linksDELETEFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagId;-- Delete ignore warningDELETEFROM IGNORE_WARNINGS iwWHERE iw.RTAG_ID = nRtagId;-- Delete Build Order cached calculationsDELETEFROM BUILD_ORDER boWHERE bo.RTAG_ID = nRtagId;-- Delete Notification HistoryDELETEFROM NOTIFICATION_HISTORY nhWHERE nh.RTAG_ID = nRtagId;-- Delete Released Area ContentsDELETEFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtagId;-- Delete Work In Progress Area ContentsDELETEFROM WORK_IN_PROGRESS wipWHERE wip.RTAG_ID = nRtagId;-- Delete Pending Area ContentsDELETEFROM PLANNED plWHERE pl.RTAG_ID = nRtagId;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER ISnSourceParentRtagId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL) OR (cIsBranch IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );END IF;/*-------------------------------------------------------*/IF ( nSourceRtagId IS NULL ) THEN-- Create new on main branchRETURN nRtagId;ELSE-- Create from source rtag_id-- Find parent of Source RtagIdSELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nSourceRtagId;IF (UPPER(cIsBranch) = 'Y') THENRETURN nSourceRtagId;ELSEIF (nSourceRtagId = nSourceParentRtagId) THENRETURN nRtagId;ELSERETURN nSourceParentRtagId;END IF;END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,-- sNextVersion OUT VARCHAR2,-- nNextLifeCycle OUT NUMBER,-- nParentRtagId OUT NUMBER,-- nProjId IN NUMBER ) IS---- SourceBranchCount NUMBER;-- ProjRootVersion VARCHAR2(4000);-- LastLifeCycle NUMBER;-- ROOT_VERSION_NOT_FOUND NUMBER := -1;-- SET_PARENT_AS_YOURSELF NUMBER := -1;---- SourceProjId NUMBER;-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;---- BEGIN-- /*--------------- Business Rules Here -------------------*/-- /*-------------------------------------------------------*/------ BEGIN-- -- Get Project root version-- SELECT rt.RTAG_VERSION INTO ProjRootVersion-- FROM RELEASE_TAGS rt-- WHERE rt.PROJ_ID = nProjId-- AND rt.RTAG_ID = rt.PARENT_RTAG_ID;---- EXCEPTION-- WHEN NO_DATA_FOUND THEN-- ProjRootVersion := ROOT_VERSION_NOT_FOUND;-- END;---------- BEGIN-- -- Get info for source rtagid-- SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE INTO SourceProjId, SourceVersion, SourceLifeCycle-- FROM RELEASE_TAGS rt-- WHERE rt.RTAG_ID = nSourceRtagId;---- EXCEPTION-- WHEN NO_DATA_FOUND THEN-- SourceProjId := NULL;-- SourceVersion := NULL;-- SourceLifeCycle := NULL;-- END;------ IF (nSourceRtagId IS NULL) OR ( SourceProjId != nProjId ) THEN---- /* Blank Release Required OR Release imported from other project */---- IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN-- /* No Releases found in the project, hence calculate next version available. */---- -- Set parent rtag-- nParentRtagId := SET_PARENT_AS_YOURSELF;------ BEGIN-- -- Get Next Available Global Root Version-- SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) ) INTO ProjRootVersion-- FROM RELEASE_TAGS rt-- WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;---- -- Set Next Rtag Version-- sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );---- -- Restart Lifecycle-- nNextLifeCycle := 0;------ EXCEPTION-- WHEN NO_DATA_FOUND THEN-- -- Release Manager has no releases, hence start from 1-- sNextVersion := '1';-- nNextLifeCycle := 0;---- END;-------- ELSE-- /* Releases found in this project. */---- SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE INTO nParentRtagId, LastLifeCycle-- FROM (-- SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE-- FROM RELEASE_TAGS rt-- WHERE rt.PROJ_ID = nProjId-- AND rt.RTAG_VERSION = ProjRootVersion-- ORDER BY rt.RTAG_LIFE_CYCLE DESC-- ) qry-- WHERE ROWNUM = 1;------ -- Set same Rtag Version-- sNextVersion := ProjRootVersion;---- -- Increase Lifecycle-- nNextLifeCycle := LastLifeCycle + 1;---- END IF;-------- ELSE-- /* Create Release From other release within this project */---- -- Set parent id-- nParentRtagId := nSourceRtagId;------ -- Get number of source branches-- SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount-- FROM RELEASE_TAGS rt-- WHERE rt.PROJ_ID = nProjId-- AND rt.PARENT_RTAG_ID = nSourceRtagId;------ IF SourceBranchCount = 0 THEN-- /* Release is Head (i.e. Tip on its branch ) */---- -- Set Next Rtag Version-- sNextVersion := SourceVersion;---- -- Increase Lifecycle-- nNextLifeCycle := SourceLifeCycle + 1;------ ELSIF SourceBranchCount = 1 THEN-- /* Release IS NOT Head, but can be branched */---- -- Set Next Rtag Version-- sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;---- -- Reset Lifecycle to 1-- nNextLifeCycle := 1;------ ELSE-- -- Limit of two branches is reached-- RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');---- END IF;-------------- END IF;------ END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) ISIsBaseView CHAR(1);BEGIN-- Check if the view is BASE VIEWSELECT vi.BASE_VIEW INTO IsBaseViewFROM VIEWS viWHERE vi.VIEW_ID = ViewId;IF (IsBaseView = 'Y') THEN-- Get Base view contentOPEN RecordSet FORSELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPEFROM release_content rel,packages pkg,package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.BASE_VIEW_ID = ViewIdAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);ELSE-- Get non base view contentOPEN RecordSet FORSELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPEFROM release_content rel,packages pkg,package_versions pv,VIEW_DEF vdWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND vd.VIEW_ID = ViewIdAND vd.PKG_ID = pv.PKG_IDAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);sPkgVersion VARCHAR2(4000);nPkgId NUMBER;sVExt VARCHAR2(4000);IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';-- Find package for replacementCURSOR curReplacePkg ISSELECT pv.PV_IDFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.PV_ID = pv.PV_IDAND rc.RTAG_ID = RtagIdAND pv.PKG_ID = nPkgIdAND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );recReplacePkg curReplacePkg%ROWTYPE;BEGIN-- Get is_patch, pkg_id and v_extSELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExtFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = newPvId;-- Never put patch in relesed areaIF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN-- Try to get a package to be replaced with this new one.-- Use unique constraint of PKG_ID and V_EXTOPEN curReplacePkg;FETCH curReplacePkg INTO recReplacePkg;IF curReplacePkg%FOUND THEN-- Replace packageREPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );ELSE-- Add new packageINSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;SELECT pv.PKG_VERSION INTO sPkgVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = newPvId;Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );END IF;CLOSE curReplacePkg;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);sPkgVersion VARCHAR2(4000);BEGIN-- Replace PackageUPDATE RELEASE_CONTENTSET pv_id = newPvId,insert_stamp = Ora_Sysdate,insertor_id = UserIdWHERE rtag_id = RtagIdAND pv_id = oldPvId;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;SELECT pv.PKG_VERSION INTO sPkgVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = newPvId;Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);BEGIN-- Delete old packageDELETEFROM RELEASE_CONTENT rcWHERE rc.PV_ID = PvIdAND rc.RTAG_ID = RtagId;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);CURSOR curMatchingPackage ISSELECT mpv.PV_IDFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS mpv,PACKAGE_VERSIONS pvWHERE rc.PV_ID = mpv.PV_IDAND rc.RTAG_ID = RtagIdAND pv.PV_ID = PvIdAND pv.PKG_ID = mpv.PKG_IDAND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );recMatchingPackage curMatchingPackage%ROWTYPE;BEGINOPEN curMatchingPackage;FETCH curMatchingPackage INTO recMatchingPackage;IF curMatchingPackage%FOUND THEN-- Delete old packageDELETEFROM RELEASE_CONTENT rcWHERE rc.PV_ID = recMatchingPackage.PV_IDAND rc.RTAG_ID = RtagId;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );END IF;CLOSE curMatchingPackage;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER ISReturnValue NUMBER;BEGINSELECT rc.BASE_VIEW_ID INTO ReturnValueFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = RtagIdAND rc.PV_ID = PvId;RETURN ReturnValue;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) ISBEGIN-- Reset Ignore warnings up-the-treeRESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );-- Refresh Package statesTOUCH_RELEASE ( RtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) ISCURSOR curReleases ISSELECT rc.RTAG_IDFROM RELEASE_CONTENT rcWHERE rc.PV_ID = PvId;recReleases curReleases%ROWTYPE;BEGINOPEN curReleases;FETCH curReleases INTO recReleases;WHILE curReleases%FOUNDLOOPRUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );FETCH curReleases INTO recReleases;END LOOP;CLOSE curReleases;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) ISBEGINUPDATE RELEASE_CONTENT rc SETrc.BASE_VIEW_ID = NewViewIdWHERE rc.PV_ID = PvIdAND rc.RTAG_ID = RtagId;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) ISRowCount NUMBER;CURSOR curPackageClash ISSELECT pkg.PKG_NAME,er.*FROM (/* Get existing referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_LINKS rl,RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rl.RTAG_ID = nRtagIdAND rl.REF_RTAG_ID = rc.RTAG_IDAND rc.PV_ID = pv.PV_ID) er,(/* Get current reference packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,PACKAGES PKGWHERE er.PKG_ID = cr.PKG_IDAND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')AND er.PKG_ID = pkg.PKG_ID;recPackageClash curPackageClash%ROWTYPE;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId = 0) OR ( nRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );END IF;IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );END IF;/*-------------------------------------------------------*/ProblemString := NULL;-- Check if release already has referencesSELECT COUNT(rl.RTAG_ID) INTO RowCountFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagId;IF RowCount > 0 THEN-- Found existing references-- Make sure there is no package clashesOPEN curPackageClash;FETCH curPackageClash INTO recPackageClash;IF curPackageClash%FOUND THENProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;WHILE curPackageClash%FOUNDLOOPEXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT || UTL_TCP.CRLF ) > 200; -- Do not allow variable overflowProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT || UTL_TCP.CRLF;FETCH curPackageClash INTO recPackageClash;END LOOP;END IF;CLOSE curPackageClash;ELSE-- No references found, hence reference a release-- Remove exising package from this release to be referencedREMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);-- Add new linked packages to releaseINSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)SELECT nRtagId,rc.PV_ID,rc.BASE_VIEW_ID,rc.INSERT_STAMP,rc.INSERTOR_ID,rc.PKG_STATEFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRefRtagId;-- Copy ignore warnings for referenced packagesINSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)SELECT nRtagId,iw.PV_ID,iw.DPV_ID,iw.IS_PATCH_IGNOREFROM IGNORE_WARNINGS iw,RELEASE_CONTENT rcWHERE iw.RTAG_ID = rc.RTAG_IDAND iw.PV_ID = rc.PV_IDAND rc.RTAG_ID = nRefRtagId;-- Reference releaseINSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)VALUES ( nRtagId, nRefRtagId );-- Refresh Package statesTOUCH_RELEASE ( nRtagId );END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) ISBEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId = 0) OR ( nRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );END IF;IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );END IF;/*-------------------------------------------------------*/-- Remove ignore warnings for those packages who use referenced packagesDELETE FROM IGNORE_WARNINGS iwWHERE iw.RTAG_ID = nRtagIdAND iw.DPV_ID IN (SELECT dep.DPV_IDFROM (/* Get referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,(/* Get all dependencies for current release */SELECT DISTINCTpv.PKG_ID,pv.V_EXT,dep.DPV_IDFROM RELEASE_CONTENT rc,PACKAGE_DEPENDENCIES dep,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRtagIdAND rc.PV_ID = dep.PV_IDAND dep.PV_ID = pv.PV_ID) depWHERE dep.PKG_ID = cr.PKG_IDAND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|'));-- Remove ignore warnings for those package which are going to be replaced with the referenceDELETE FROM IGNORE_WARNINGS iwWHERE iw.RTAG_ID = nRtagIdAND iw.PV_ID IN (SELECT pv.PV_IDFROM (/* Get referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE pv.PKG_ID = cr.PKG_IDAND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')AND rc.RTAG_ID = nRtagIdAND rc.PV_ID = pv.PV_ID);-- Remove matching packages from releaseDELETE FROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtagIdAND rc.PV_ID IN (SELECT pv.PV_IDFROM (/* Get referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE pv.PKG_ID = cr.PKG_IDAND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')AND rc.RTAG_ID = nRtagIdAND rc.PV_ID = pv.PV_ID);-- Remove Reference releaseDELETEFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagIdAND rl.REF_RTAG_ID = nRefRtagId;-- Refresh Package statesTOUCH_RELEASE ( nRtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IScReleaseMode CHAR(1);cPvMode CHAR(1);BEGIN-- Get Release ModeSELECT rt.OFFICIAL INTO cReleaseModeFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = RtagId;-- Get Package ModeSELECT pv.DLOCKED INTO cPvModeFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = PvId;-- Only check if package is lockedIF (cPvMode = 'Y') THENIF (cReleaseMode != 'N') AND (Permission != 'Y')THENRAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/END PK_RELEASE_TEST;/---------------------------------------------------------- DDL for Package Body PK_APP_UTILS--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 26/Apr/2005|| Body Version: 1.0------------------------------*//*-------------------------------------------------------------------------------------------------------*/PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur) ISBEGINIF (NOT RtagId IS NULL) THEN-- Case with RTAG_ID presentOPEN records FORSELECT rt.PROJ_ID,rt.RTAG_ID AS RTAG_IDFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = TO_NUMBER(RtagId);ELSIF (NOT ProjId IS NULL) THEN-- Case with PROJ_ID presentOPEN records FORSELECT TO_NUMBER(ProjId) AS PROJ_ID,-1 AS RTAG_IDFROM DUAL;ELSE-- Case with none presentOPEN records FORSELECT -1 AS PROJ_ID,-1 AS RTAG_IDFROM DUAL;END IF;--RETURN records;END;/*-------------------------------------------------------------------------------------------------------*/END PK_APP_UTILS;/---------------------------------------------------------- DDL for Package Body PK_RELEASE--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS/*-------------------------------------------------------------------------------------------------------*/PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) ISRtagId NUMBER;ParentRtagId NUMBER;RecCount NUMBER := 0;VtreeId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- Check for missing parametersIF (sReleaseName IS NULL) OR (nUserId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );END IF;-- Check for duplicate Release NamesSELECT COUNT(rt.RTAG_ID) INTO RecCountFROM RELEASE_TAGS rtWHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )AND rt.PROJ_ID = nProjId;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');END IF;/*-------------------------------------------------------*/-- Get rtag_idSELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;-- Get Parent RtagIdParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );-- If the parent RTAG is NOT in this project then we cannot use it.-- We must re-assign the parent to be the new release's RTAG_ID instead-- else it will not show up in the projects release tree (DEVI-55480)SELECT COUNT(rt.RTAG_ID) INTO RecCountFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = ParentRtagIdAND rt.PROJ_ID = nProjId;IF (RecCount = 0) THENParentRtagId := RtagId;END IF;-- Create new releaseINSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,OFFICIAL, REBUILD_ENV, REBUILD_STAMP,PARENT_RTAG_ID, PROJ_ID, VTREE_ID )VALUES ( RtagId,sReleaseName,sReleaseComments,ORA_SYSDATE,nUserId,'N','N',0,ParentRtagId,nProjId,VtreeId );-- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)IF (NOT nSourceRtagId IS NULL)THENUPDATE RELEASE_TAGS rtdSET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)WHERE rtd.RTAG_ID = RtagId;END IF;-- Update display OrderUPDATE_DISPLAY_ORDER ( nProjId );/* Log Project Action */Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );-- Import Release ContentsIF (NOT nSourceRtagId IS NULL) THENImport_Release_Contents ( nSourceRtagId, RtagId, nUserId );END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) ISBEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/UPDATE RELEASE_TAGS urt SETurt.DISPLAY_ORDER = (SELECT qry.REC_NUMFROM (SELECT rel.*, ROWNUM AS REC_NUMFROM (SELECT rt.RTAG_ID,rt.DISPLAY_ORDER,DECODE( rt.PARENT_RTAG_ID,rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_IDFROM RELEASE_TAGS rtWHERE rt.PROJ_ID = nProjId) relSTART WITH rel.PARENT_RTAG_ID = 0CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_IDORDER SIBLINGS BY rel.DISPLAY_ORDER) qryWHERE qry.RTAG_ID = urt.RTAG_ID)WHERE urt.PROJ_ID = nProjId;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER ) ISnIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();SeqNum NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/nIdCollector := IN_LIST_NUMBER ( sRtagIdList );-- Set start sequence numberSeqNum := 1;FOR i IN 1..nIdCollector.COUNTLOOP-- Update new display orderUPDATE RELEASE_TAGS rt SETrt.DISPLAY_ORDER = SeqNumWHERE rt.PROJ_ID = nProjIdAND rt.RTAG_ID = nIdCollector(i);SeqNum := SeqNum + 1;END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, sOwnerEmail IN VARCHAR2, nUserId IN NUMBER, cState IN VARCHAR ) ISRecCount NUMBER := 0;ProjId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- Check for missing parametersIF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);END IF;-- Check for duplicate Release NamesSELECT rt.PROJ_ID INTO ProjIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;SELECT COUNT(rt.RTAG_ID) INTO RecCountFROM RELEASE_TAGS rtWHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )AND rt.RTAG_ID != nRtagIdAND rt.PROJ_ID = ProjId;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');END IF;/*-------------------------------------------------------*/-- Update release detailsUPDATE RELEASE_TAGS rt SETrt.RTAG_NAME = sReleaseName,rt.DESCRIPTION = sReleaseComments,rt.PARENT_RTAG_ID = nParentRtagId,rt.ASSOC_MASS_REF = nMASSRtagId,rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,rt.OWNER_EMAIL = sOwnerEmail,rt.PRODUCT_STATE_USED = cStateWHERE rt.RTAG_ID = nRtagId;-- Update display OrderUPDATE_DISPLAY_ORDER ( ProjId );/* Log Project Action */Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) ISRecCount NUMBER := 0;sReleaseId VARCHAR2(4000);ProjId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId );END IF;-- Check for any kidsSELECT COUNT( rt.RTAG_ID ) INTO RecCountFROM RELEASE_TAGS rtWHERE rt.PARENT_RTAG_ID = nRtagIdAND rt.RTAG_ID != rt.PARENT_RTAG_ID;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.' );END IF;/*-------------------------------------------------------*/-- Clear the release contentsClean_Release_Contents ( nRtagId, nUserId );/* Log Project Action */SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );-- Remove ReleaseDELETEFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER ) ISsSourceLocation VARCHAR2(4000);sTargetLocation VARCHAR2(4000);ProjId NUMBER;cReleaseMode CHAR(1);RconId NUMBER;-- this cursor gets the source release daemon configurations, ensuring that the-- first record will be the master daemon, and subsequent records will be the slaves.CURSOR curSrcReleaseConfigs ISSELECT daemon_hostname, gbe_id, gbe_buildfilterFROM RELEASE_CONFIG rcWHERE rc.RTAG_ID = nSourceRtagIdORDER BY rc.daemon_mode;recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;-- this cursor looks for target release daemonsCURSOR curTgtReleaseConfigs ISSELECT rcon_idFROM RELEASE_CONFIG rcWHERE rc.RTAG_ID = nTargetRtagId;recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;-- this cursor looks for target release daemon run level entriesCURSOR curTgtReleaseConfigRunLevel ISSELECT current_run_levelFROM RUN_LEVEL rlWHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;BEGIN/*--------------- Business Rules Here -------------------*/IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );END IF;IF (nSourceRtagId = nTargetRtagId) THENRAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );END IF;-- Check if Target release is in OPEN modeSELECT rt.OFFICIAL INTO cReleaseModeFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nTargetRtagId;IF (cReleaseMode != 'N') THENRAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );END IF;-- check that the target release's daemons are all paused before we allow an import operationOPEN curTgtReleaseConfigs;FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;WHILE curTgtReleaseConfigs%FOUNDLOOPOPEN curTgtReleaseConfigRunLevel;FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;IF curTgtReleaseConfigRunLevel%FOUND THENIF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR(recTgtReleaseConfigRunLevel.current_run_level <> 2) THENRAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );END IF;ELSE-- we don't know what the daemon run level is so err on the side of cautionRAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );END IF;CLOSE curTgtReleaseConfigRunLevel;FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;END LOOP;CLOSE curTgtReleaseConfigs;/*-------------------------------------------------------*/-- Clean target contentsClean_Release_Contents ( nTargetRtagId, nUserId );-- Import Released Area ContentsINSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )SELECT nTargetRtagId AS RTAG_ID,rc.PV_ID,rc.BASE_VIEW_ID,rc.INSERT_STAMP,rc.INSERTOR_ID,rc.PKG_STATE,rc.PKG_ID,rc.DEPRECATED_STATEFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nSourceRtagId;-- Import any Pegged Version settings from the source releaseINSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )SELECT nTargetRtagId AS RTAG_ID,pegv.PV_IDFROM PEGGED_VERSIONS pegvWHERE pegv.RTAG_ID = nSourceRtagId;-- Import any Advisory Ripple settings from the source releaseINSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )SELECT nTargetRtagId AS RTAG_ID,avr.PV_IDFROM ADVISORY_RIPPLE avrWHERE avr.RTAG_ID = nSourceRtagId;--Import Release Configuration InformationOPEN curSrcReleaseConfigs;FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;WHILE curSrcReleaseConfigs%FOUNDLOOP-- add a daemon to the target releasePK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;END LOOP;CLOSE curSrcReleaseConfigs;-- Import Ignore Warning statesINSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )SELECT nTargetRtagId AS RTAG_ID,igw.PV_ID,igw.DPV_IDFROM IGNORE_WARNINGS igwWHERE igw.rtag_id = nSourceRtagId;/* Log Project Action */-- Get Source LocationSELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO sSourceLocationFROM RELEASE_TAGS rt,PROJECTS prWHERE rt.PROJ_ID = pr.PROJ_IDAND rt.RTAG_ID = nSourceRtagId;-- Get Target LocationSELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO sTargetLocationFROM RELEASE_TAGS rt,PROJECTS prWHERE rt.PROJ_ID = pr.PROJ_IDAND rt.RTAG_ID = nTargetRtagId;-- Get project idSELECT rt.PROJ_ID INTO ProjIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nTargetRtagId;Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||' TARGET: '|| sTargetLocation, nTargetRtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) ISRecCount NUMBER;rconIdList VARCHAR2(4000);BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId );END IF;-- Check if other release references this releaseSELECT COUNT( rl.RTAG_ID ) INTO RecCountFROM RELEASE_LINKS rlWHERE rl.REF_RTAG_ID = nRtagId;IF (RecCount > 0) THENRAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.' );END IF;/*-------------------------------------------------------*/-- Delete Release linksDELETEFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagId;-- Delete ignore warningDELETEFROM IGNORE_WARNINGS iwWHERE iw.RTAG_ID = nRtagId;-- Delete Build Order cached calculationsDELETEFROM BUILD_ORDER boWHERE bo.RTAG_ID = nRtagId;-- Delete Notification HistoryDELETEFROM NOTIFICATION_HISTORY nhWHERE nh.RTAG_ID = nRtagId;-- Delete Released Area ContentsDELETEFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtagId;-- Delete Work In Progress Area ContentsDELETEFROM WORK_IN_PROGRESS wipWHERE wip.RTAG_ID = nRtagId;-- Delete Pending Area ContentsDELETEFROM PLANNED plWHERE pl.RTAG_ID = nRtagId;-- Delete Deprecated PackagesDELETEFROM DEPRECATED_PACKAGES dpWHERE dp.RTAG_ID = nRtagId;-- Delete Project Action LogDELETEFROM PROJECT_ACTION_LOG palWHERE pal.RTAG_ID = nRtagId;-- Delete Do Not Ripple ContentsDELETEFROM DO_NOT_RIPPLE dnrWHERE dnr.RTAG_ID = nRtagId;-- Delete Dash Board ContentsDELETEFROM DASH_BOARD dbWHERE db.RTAG_ID = nRtagId;-- Delete Advisory Ripple ContentsDELETEFROM ADVISORY_RIPPLE adrWHERE adr.RTAG_ID = nRtagId;-- Delete Archive Action LogDELETEFROM ARCHIVE_ACTION_LOG aalWHERE aal.RTAG_ID = nRtagId;-- Delete Daemons For This ReleaseFOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )LOOPrconIdList := rconIdList || rcon.RCON_ID || ',';END LOOP;pk_buildapi.DELETE_DAEMON(rconIdList);-- Delete Release Metrics ContentsDELETEFROM RELEASE_METRICS rmWHERE rm.RTAG_ID = nRtagId;-- Delete Release Configuration ContentsDELETEFROM RELEASE_CONFIG rcWHERE rc.RTAG_ID = nRtagId;-- Delete Pegged Version ContentsDELETEFROM PEGGED_VERSIONS pegvWHERE pegv.RTAG_ID = nRtagId;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER ISnSourceParentRtagId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId IS NULL) OR (cIsBranch IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );END IF;/*-------------------------------------------------------*/IF ( nSourceRtagId IS NULL ) THEN-- Create new on main branchRETURN nRtagId;ELSE-- Create from source rtag_id-- Find parent of Source RtagIdSELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nSourceRtagId;IF (UPPER(cIsBranch) = 'Y') THENRETURN nSourceRtagId;ELSEIF (nSourceRtagId = nSourceParentRtagId) THENRETURN nRtagId;ELSERETURN nSourceParentRtagId;END IF;END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,-- sNextVersion OUT VARCHAR2,-- nNextLifeCycle OUT NUMBER,-- nParentRtagId OUT NUMBER,-- nProjId IN NUMBER ) IS---- SourceBranchCount NUMBER;-- ProjRootVersion VARCHAR2(4000);-- LastLifeCycle NUMBER;-- ROOT_VERSION_NOT_FOUND NUMBER := -1;-- SET_PARENT_AS_YOURSELF NUMBER := -1;---- SourceProjId NUMBER;-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;---- BEGIN-- /*--------------- Business Rules Here -------------------*/-- /*-------------------------------------------------------*/------ BEGIN-- -- Get Project root version-- SELECT rt.RTAG_VERSION INTO ProjRootVersion-- FROM RELEASE_TAGS rt-- WHERE rt.PROJ_ID = nProjId-- AND rt.RTAG_ID = rt.PARENT_RTAG_ID;---- EXCEPTION-- WHEN NO_DATA_FOUND THEN-- ProjRootVersion := ROOT_VERSION_NOT_FOUND;-- END;---------- BEGIN-- -- Get info for source rtagid-- SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE INTO SourceProjId, SourceVersion, SourceLifeCycle-- FROM RELEASE_TAGS rt-- WHERE rt.RTAG_ID = nSourceRtagId;---- EXCEPTION-- WHEN NO_DATA_FOUND THEN-- SourceProjId := NULL;-- SourceVersion := NULL;-- SourceLifeCycle := NULL;-- END;------ IF (nSourceRtagId IS NULL) OR ( SourceProjId != nProjId ) THEN---- /* Blank Release Required OR Release imported from other project */---- IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN-- /* No Releases found in the project, hence calculate next version available. */---- -- Set parent rtag-- nParentRtagId := SET_PARENT_AS_YOURSELF;------ BEGIN-- -- Get Next Available Global Root Version-- SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) ) INTO ProjRootVersion-- FROM RELEASE_TAGS rt-- WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;---- -- Set Next Rtag Version-- sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );---- -- Restart Lifecycle-- nNextLifeCycle := 0;------ EXCEPTION-- WHEN NO_DATA_FOUND THEN-- -- Release Manager has no releases, hence start from 1-- sNextVersion := '1';-- nNextLifeCycle := 0;---- END;-------- ELSE-- /* Releases found in this project. */---- SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE INTO nParentRtagId, LastLifeCycle-- FROM (-- SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE-- FROM RELEASE_TAGS rt-- WHERE rt.PROJ_ID = nProjId-- AND rt.RTAG_VERSION = ProjRootVersion-- ORDER BY rt.RTAG_LIFE_CYCLE DESC-- ) qry-- WHERE ROWNUM = 1;------ -- Set same Rtag Version-- sNextVersion := ProjRootVersion;---- -- Increase Lifecycle-- nNextLifeCycle := LastLifeCycle + 1;---- END IF;-------- ELSE-- /* Create Release From other release within this project */---- -- Set parent id-- nParentRtagId := nSourceRtagId;------ -- Get number of source branches-- SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount-- FROM RELEASE_TAGS rt-- WHERE rt.PROJ_ID = nProjId-- AND rt.PARENT_RTAG_ID = nSourceRtagId;------ IF SourceBranchCount = 0 THEN-- /* Release is Head (i.e. Tip on its branch ) */---- -- Set Next Rtag Version-- sNextVersion := SourceVersion;---- -- Increase Lifecycle-- nNextLifeCycle := SourceLifeCycle + 1;------ ELSIF SourceBranchCount = 1 THEN-- /* Release IS NOT Head, but can be branched */---- -- Set Next Rtag Version-- sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;---- -- Reset Lifecycle to 1-- nNextLifeCycle := 1;------ ELSE-- -- Limit of two branches is reached-- RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');---- END IF;-------------- END IF;------ END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) ISIsBaseView CHAR(1);BEGIN-- Check if the view is BASE VIEWSELECT vi.BASE_VIEW INTO IsBaseViewFROM VIEWS viWHERE vi.VIEW_ID = ViewId;IF (IsBaseView = 'Y') THEN-- Get Base view contentOPEN RecordSet FORSELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,rel.deprecated_state,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPEFROM release_content rel,packages pkg,package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.BASE_VIEW_ID = ViewIdAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);ELSE-- Get non base view contentOPEN RecordSet FORSELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,rel.deprecated_state,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPEFROM release_content rel,packages pkg,package_versions pv,VIEW_DEF vdWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND vd.VIEW_ID = ViewIdAND vd.PKG_ID = pv.PKG_IDAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);sPkgVersion VARCHAR2(4000);nPkgId NUMBER;sVExt VARCHAR2(4000);IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';-- Find package for replacementCURSOR curReplacePkg ISSELECT pv.PV_IDFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.PV_ID = pv.PV_IDAND rc.RTAG_ID = RtagIdAND pv.PKG_ID = nPkgIdAND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );recReplacePkg curReplacePkg%ROWTYPE;BEGIN-- Get is_patch, pkg_id and v_extSELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExtFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = newPvId;-- Never put patch in relesed areaIF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN-- Try to get a package to be replaced with this new one.-- Use unique constraint of PKG_ID and V_EXTOPEN curReplacePkg;FETCH curReplacePkg INTO recReplacePkg;IF curReplacePkg%FOUND THEN-- Replace packageREPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );ELSE-- Add new packageINSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;SELECT pv.PKG_VERSION INTO sPkgVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = newPvId;Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );END IF;CLOSE curReplacePkg;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);sPkgVersion VARCHAR2(4000);BEGIN-- Replace PackageUPDATE RELEASE_CONTENTSET pv_id = newPvId,insert_stamp = Ora_Sysdate,insertor_id = UserId,product_state = NULLWHERE rtag_id = RtagIdAND pv_id = oldPvId;-- update the pegging tableUPDATE PEGGED_VERSIONSSET pv_id = newPvIdWHERE rtag_id = RtagIdAND pv_id = oldPvId;-- update the advisory_ripple tableUPDATE ADVISORY_RIPPLESET pv_id = newPvIdWHERE rtag_id = RtagIdAND pv_id = oldPvId;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;SELECT pv.PKG_VERSION INTO sPkgVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = newPvId;Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);BEGIN-- Delete old packageDELETEFROM RELEASE_CONTENT rcWHERE rc.PV_ID = PvIdAND rc.RTAG_ID = RtagId;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);CURSOR curMatchingPackage ISSELECT mpv.PV_IDFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS mpv,PACKAGE_VERSIONS pvWHERE rc.PV_ID = mpv.PV_IDAND rc.RTAG_ID = RtagIdAND pv.PV_ID = PvIdAND pv.PKG_ID = mpv.PKG_IDAND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );recMatchingPackage curMatchingPackage%ROWTYPE;BEGINOPEN curMatchingPackage;FETCH curMatchingPackage INTO recMatchingPackage;IF curMatchingPackage%FOUND THEN-- Delete old packageDELETEFROM RELEASE_CONTENT rcWHERE rc.PV_ID = recMatchingPackage.PV_IDAND rc.RTAG_ID = RtagId;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );END IF;CLOSE curMatchingPackage;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER ISReturnValue NUMBER;BEGINSELECT rc.BASE_VIEW_ID INTO ReturnValueFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = RtagIdAND rc.PV_ID = PvId;RETURN ReturnValue;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) ISBEGIN-- Reset Ignore warnings up-the-treeRESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );-- Refresh Package statesTOUCH_RELEASE ( RtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) ISCURSOR curReleases ISSELECT rc.RTAG_IDFROM RELEASE_CONTENT rcWHERE rc.PV_ID = PvId;recReleases curReleases%ROWTYPE;BEGINOPEN curReleases;FETCH curReleases INTO recReleases;WHILE curReleases%FOUNDLOOPRUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );FETCH curReleases INTO recReleases;END LOOP;CLOSE curReleases;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) ISBEGINUPDATE RELEASE_CONTENT rc SETrc.BASE_VIEW_ID = NewViewIdWHERE rc.PV_ID = PvIdAND rc.RTAG_ID = RtagId;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) ISRowCount NUMBER;CURSOR curPackageClash ISSELECT pkg.PKG_NAME,er.*FROM (/* Get existing referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_LINKS rl,RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rl.RTAG_ID = nRtagIdAND rl.REF_RTAG_ID = rc.RTAG_IDAND rc.PV_ID = pv.PV_ID) er,(/* Get current reference packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,PACKAGES PKGWHERE er.PKG_ID = cr.PKG_IDAND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')AND er.PKG_ID = pkg.PKG_ID;recPackageClash curPackageClash%ROWTYPE;BEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId = 0) OR ( nRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );END IF;IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );END IF;/*-------------------------------------------------------*/ProblemString := NULL;-- Check if release already has referencesSELECT COUNT(rl.RTAG_ID) INTO RowCountFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagId;IF RowCount > 0 THEN-- Found existing references-- Make sure there is no package clashesOPEN curPackageClash;FETCH curPackageClash INTO recPackageClash;IF curPackageClash%FOUND THENProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;WHILE curPackageClash%FOUNDLOOPEXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT || UTL_TCP.CRLF ) > 200; -- Do not allow variable overflowProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT || UTL_TCP.CRLF;FETCH curPackageClash INTO recPackageClash;END LOOP;END IF;CLOSE curPackageClash;ELSE-- No references found, hence reference a release-- Remove exising package from this release to be referencedREMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);-- Add new linked packages to releaseINSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)SELECT nRtagId,rc.PV_ID,rc.BASE_VIEW_ID,rc.INSERT_STAMP,rc.INSERTOR_ID,rc.PKG_STATEFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRefRtagId;-- Copy ignore warnings for referenced packagesINSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)SELECT nRtagId,iw.PV_ID,iw.DPV_ID,iw.IS_PATCH_IGNOREFROM IGNORE_WARNINGS iw,RELEASE_CONTENT rcWHERE iw.RTAG_ID = rc.RTAG_IDAND iw.PV_ID = rc.PV_IDAND rc.RTAG_ID = nRefRtagId;-- Reference releaseINSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)VALUES ( nRtagId, nRefRtagId );-- Refresh Package statesTOUCH_RELEASE ( nRtagId );END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) ISBEGIN/*--------------- Business Rules Here -------------------*/IF (nRtagId = 0) OR ( nRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );END IF;IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THENRAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );END IF;/*-------------------------------------------------------*/-- Remove ignore warnings for those packages who use referenced packagesDELETE FROM IGNORE_WARNINGS iwWHERE iw.RTAG_ID = nRtagIdAND iw.DPV_ID IN (SELECT dep.DPV_IDFROM (/* Get referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,(/* Get all dependencies for current release */SELECT DISTINCTpv.PKG_ID,pv.V_EXT,dep.DPV_IDFROM RELEASE_CONTENT rc,PACKAGE_DEPENDENCIES dep,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRtagIdAND rc.PV_ID = dep.PV_IDAND dep.PV_ID = pv.PV_ID) depWHERE dep.PKG_ID = cr.PKG_IDAND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|'));-- Remove ignore warnings for those package which are going to be replaced with the referenceDELETE FROM IGNORE_WARNINGS iwWHERE iw.RTAG_ID = nRtagIdAND iw.PV_ID IN (SELECT pv.PV_IDFROM (/* Get referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE pv.PKG_ID = cr.PKG_IDAND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')AND rc.RTAG_ID = nRtagIdAND rc.PV_ID = pv.PV_ID);-- Remove matching packages from releaseDELETE FROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtagIdAND rc.PV_ID IN (SELECT pv.PV_IDFROM (/* Get referenced packages */SELECT pv.PKG_ID,pv.V_EXTFROM RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE rc.RTAG_ID = nRefRtagIdAND rc.PV_ID = pv.PV_ID) cr,RELEASE_CONTENT rc,PACKAGE_VERSIONS pvWHERE pv.PKG_ID = cr.PKG_IDAND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')AND rc.RTAG_ID = nRtagIdAND rc.PV_ID = pv.PV_ID);-- Remove Reference releaseDELETEFROM RELEASE_LINKS rlWHERE rl.RTAG_ID = nRtagIdAND rl.REF_RTAG_ID = nRefRtagId;-- Refresh Package statesTOUCH_RELEASE ( nRtagId );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IScReleaseMode CHAR(1);cPvMode CHAR(1);BEGIN-- Get Release ModeSELECT rt.OFFICIAL INTO cReleaseModeFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = RtagId;-- Get Package ModeSELECT pv.DLOCKED INTO cPvModeFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = PvId;-- Only check if package is lockedIF (cPvMode = 'Y') THENIF (cReleaseMode != 'N') AND (Permission != 'Y')THENRAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/END PK_RELEASE;/---------------------------------------------------------- DDL for Package Body PK_PROJECT--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS/*------------------------------------------------------------------------*/PROCEDURE update_base_url (nprojid IN projects.proj_id%TYPE,sbaseurl IN VARCHAR2) ISBEGINUPDATE projectsSET base_url = sbaseurlWHERE proj_id = nprojid;END update_base_url;/*------------------------------------------------------------------------*/PROCEDURE update_project_config (nprojid IN projects.proj_id%TYPE,sbaseurl IN VARCHAR2,sjirakey IN VARCHAR2) ISBEGINUPDATE projectsSET base_url = sbaseurl,jira_key = sjirakeyWHERE proj_id = nprojid;END update_project_config;/*------------------------------------------------------------------------*/END pk_project;/---------------------------------------------------------- DDL for Package Body PK_ENVIRONMENT--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT"IS/*-------------------------------------------------------------------------------------------------------*/FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)RETURN NUMBERISBEGIN/*|| N - unlocked|| Y - release and locked|| P - penging approval|| A - approved package ready for auto-build*/IF cdlock = 'N' OR cdlock = 'R'THEN-- WORK IN PROGRESS --RETURN 0;ELSIF cdlock = 'P' OR cdlock = 'A'THEN-- PENDING --RETURN 1;ELSIF cdlock = 'Y'THEN-- RELEASED --RETURN 2;ELSE-- NOT FOUND --raise_application_error(-20000,'Cannot decide where to place package. [cDlock='|| cdlock|| ']');END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)RETURN NUMBERISenvtab NUMBER := -1;CURSOR curareaISSELECT 2 AS envtabFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.pv_id = pvidUNIONSELECT 0 AS envtabFROM work_in_progress wipWHERE wip.rtag_id = rtagid AND wip.pv_id = pvidUNIONSELECT 1 AS envtabFROM planned plWHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;recarea curarea%ROWTYPE;BEGINOPEN curarea;FETCH curareaINTO recarea;IF curarea%FOUNDTHENenvtab := recarea.envtab;END IF;CLOSE curarea;RETURN envtab;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)RETURN NUMBERISispatch package_versions.dlocked%TYPE;viewid NUMBER := -1;CURSOR curviewISSELECT rc.base_view_id AS view_idFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.pv_id = pvidUNIONSELECT wip.view_id AS view_idFROM work_in_progress wipWHERE wip.rtag_id = rtagid AND wip.pv_id = pvidUNIONSELECT pl.view_id AS view_idFROM planned plWHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;recview curview%ROWTYPE;BEGIN-- Get dlock stateSELECT pv.is_patchINTO ispatchFROM package_versions pvWHERE pv.pv_id = pvid;-- Decide which view id should package go under.IF (ispatch != 'Y') OR (ispatch IS NULL)THEN-- Get VIEW ID of PackageOPEN curview;FETCH curviewINTO recview;IF curview%FOUNDTHENviewid := recview.view_id;ELSEraise_application_error(-20000,'Cannot find view_id to proceed. [PvId='|| pvid|| ']. The current version may not exist in the release anymore.');END IF;CLOSE curview;ELSE-- Get VIEW ID of Patch (view id of parent package)SELECT rc.base_view_idINTO viewidFROM release_content rc, package_patches ppvWHERE rc.rtag_id = rtagidAND rc.pv_id = ppv.pv_idAND ppv.patch_id = pvid;END IF;RETURN viewid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_package (pvid IN NUMBER,viewid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER)ISdlocked package_versions.dlocked%TYPE;envtab NUMBER;BEGINIF can_edit_pkg_in_project (pvid, rtagid) = 1THEN-- Get dlock stateSELECT pv.dlockedINTO dlockedFROM package_versions pvWHERE pv.pv_id = pvid;-- Get which area should go underenvtab := select_environment_area (dlocked);-- Loglog_action (pvid, 'action', userid, 'Start of Package Add...');-- Remove PackageIF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.add_package (pvid, viewid, rtagid, userid);ELSIF envtab = 2THEN-- RELEASED ---- NOTE: this package will be replaced with matching packagepk_release.add_package (pvid, viewid, rtagid, userid);-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);END IF;-- Loglog_action (pvid, 'action', userid, 'End of Package Add...');END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_package_bulk (pvidlist IN VARCHAR2,viewid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER)ISnidcollector relmgr_number_tab_t := relmgr_number_tab_t();dlocked package_versions.dlocked%TYPE;pvid NUMBER;envtab NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (pvidlist IS NULL)THENraise_application_error (-20000,'Please select at least one package.');END IF;/*-------------------------------------------------------*/nidcollector := in_list_number (pvidlist);FOR i IN 1 .. nidcollector.COUNTLOOPpvid := nidcollector (i);add_package (pvid, viewid, rtagid, userid);END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE replace_package (newpvid IN NUMBER,oldpvid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER)ISdlocked package_versions.dlocked%TYPE;viewid NUMBER;envtab NUMBER;ROWCOUNT NUMBER;creleasemode CHAR (1);npkgid NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- Check if oldPvId exists. It could have been removedSELECT COUNT (pv.pv_id)INTO ROWCOUNTFROM package_versions pvWHERE pv.pv_id = oldpvid;/*-------------------------------------------------------*//* This procedure is usually used by "History" option in Release Manager */-- Get dlock stateSELECT pv.dlockedINTO dlockedFROM package_versions pvWHERE pv.pv_id = newpvid;-- Get VIEW_ID ---IF ROWCOUNT = 1THENviewid := get_view_location (oldpvid, rtagid);ELSE-- Set ViewID to defaultviewid := 7;END IF;-- Get which area should go underenvtab := select_environment_area (dlocked);-- Loglog_action (oldpvid, 'action', userid, 'Start of Package Replace...');-- Replace packageIF envtab = 0THEN-- WORK IN PROGRESS ---- Delete old packagepk_work_in_progress.remove_package (oldpvid, rtagid, userid);-- Add new packagepk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING ---- Delete old packagepk_planned.remove_package (oldpvid, rtagid, userid);-- Add new packagepk_planned.add_package (newpvid, viewid, rtagid, userid);ELSIF envtab = 2THEN-- RELEASED ---- Delete old packagepk_release.remove_package (oldpvid, rtagid, userid);-- Add new packagepk_release.add_package (newpvid, viewid, rtagid, userid);-- update the pegging tableUPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;-- update the advisory ripple tableUPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;-- Now do post Release Actionspk_release.run_post_actions (newpvid, rtagid);END IF;-- Loglog_action (oldpvid, 'action', userid, 'End of Package Replace...');END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION remove_package (pvid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER,forceremove IN CHAR)RETURN NUMBERISenvtab NUMBER;isused BOOLEAN;recordcount NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Find location of packageenvtab := get_package_area (pvid, rtagid);-- Remove PackageIF envtab = 0THEN-- WORK IN PROGRESS ---- Delete packagepk_work_in_progress.remove_package (pvid, rtagid, userid);RETURN 0;ELSIF envtab = 1THEN-- PENDING ---- Delete packagepk_planned.remove_package (pvid, rtagid, userid);RETURN 0;ELSIF envtab = 2THEN-- RELEASED ---- Check if is used by other packagesisused := TRUE;IF forceremove = 'N'THENSELECT COUNT (pv.pv_id)INTO recordcountFROM (SELECT dpv.pkg_id, dpv.v_extFROM release_content rc,package_dependencies dep,package_versions dpvWHERE rc.rtag_id = rtagidAND rc.pv_id = dep.pv_idAND dep.dpv_id = dpv.pv_id) rdep,package_versions pvWHERE pv.pkg_id = rdep.pkg_idAND NVL (pv.v_ext, '|LINK_A_NULL|') =NVL (rdep.v_ext, '|LINK_A_NULL|')AND pv.pv_id = pvid;IF recordcount > 0THENRETURN 1; -- Return 1 as package being usedELSEisused := FALSE;END IF;END IF;IF forceremove = 'Y' OR NOT isusedTHEN-- Delete old packagepk_release.remove_package (pvid, rtagid, userid);-- Delete old package's pegging infoDELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;-- Delete old package's advisory ripple infoDELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);RETURN 0;END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/-- DEVI-45275 added the return of the new "operation" column in the recordset.PROCEDURE get_environment_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (pl.pv_id)INTO ntruerecordcountFROM environment_view plWHERE pl.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_description,rel.operationFROM environment_view rel, views viWHERE rel.view_id = vi.view_idAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name,DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,rel.operationFROM environment_view rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_description,rel.operationFROM environment_view rel,view_settings vs,views viWHERE rel.view_id = vi.view_idAND vs.view_id = rel.view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name,DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,rel.operationFROM environment_view rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_description,rel.operationFROM view_settings vs,view_def vd,views vi,environment_view rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name,DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,rel.operationFROM users usr,view_settings vs,view_def vd,views vi,environment_view rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_released_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM release_content rel, views viWHERE rel.base_view_id = vi.view_idAND rtag_id = rtagidAND rel.base_view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND rel.base_view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM release_content rel,view_settings vs,views viWHERE rel.base_view_id = vi.view_idAND vs.view_id = rel.base_view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.base_view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.base_view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_descriptionFROM view_settings vs,view_def vd,views vi,release_content rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM users usr,view_settings vs,view_def vd,views vi,release_content rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_work_in_progress_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (wip.pv_id)INTO ntruerecordcountFROM work_in_progress wipWHERE wip.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM work_in_progress rel, views viWHERE rel.view_id = vi.view_idAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM work_in_progress rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM work_in_progress rel,view_settings vs,views viWHERE rel.view_id = vi.view_idAND vs.view_id = rel.view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM work_in_progress rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_descriptionFROM view_settings vs,view_def vd,views vi,work_in_progress rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM users usr,view_settings vs,view_def vd,views vi,work_in_progress rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/-- DEVI-45275 added the return of the new "operation" column in the recordset.PROCEDURE get_pending_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (pl.pv_id)INTO ntruerecordcountFROM planned plWHERE pl.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_description,rel.operationFROM planned rel, views viWHERE rel.view_id = vi.view_idAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_description,rel.operationFROM planned rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_description,rel.operationFROM planned rel, view_settings vs, views viWHERE rel.view_id = vi.view_idAND vs.view_id = rel.view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_description,rel.operationFROM planned rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_description,rel.operationFROM view_settings vs,view_def vd,views vi,planned rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_description,rel.operationFROM users usr,view_settings vs,view_def vd,views vi,planned rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_view_content (rtagid IN NUMBER,viewid IN NUMBER,recordset OUT typecur)ISisbaseview CHAR (1);BEGIN-- Check if the view is BASE VIEWSELECT vi.base_viewINTO isbaseviewFROM views viWHERE vi.view_id = viewid;IF (isbaseview = 'Y')THEN-- Get Base view contentOPEN recordset FORSELECT DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,pv.build_type,rel.operationFROM environment_view rel, PACKAGES pkg, package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = viewidAND rel.rtag_id = rtagidORDER BY UPPER (pkg.pkg_name);ELSE-- Get non base view contentOPEN recordset FORSELECT DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,pv.build_type,rel.operationFROM environment_view rel,PACKAGES pkg,package_versions pv,view_def vdWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.view_id = viewidAND vd.pkg_id = pv.pkg_idORDER BY UPPER (pkg.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)RETURN NUMBERISenvtab NUMBER;returnvalue NUMBER;return_not_found NUMBER := -1;BEGINenvtab := get_package_area (pvid, rtagid);IF envtab = 0THEN-- WORK IN PROGRESS --returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);ELSIF envtab = 1THEN-- PENDING --returnvalue := pk_planned.get_package_view (pvid, rtagid);ELSIF envtab = 2THEN-- RELEASED --returnvalue := pk_release.get_package_view (pvid, rtagid);ELSE-- This may be a Patch not located anywhere but unlockedreturnvalue := return_not_found;END IF;RETURN returnvalue;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;envtab NUMBER;ispatch CHAR (1) := NULL;buildtype CHAR (1) := NULL;BEGIN-- Check if package is patchSELECT pv.is_patch, pv.build_typeINTO ispatch, buildtypeFROM package_versions pvWHERE pv.pv_id = pvid;-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (pvid, rtagid);-- Make sure that package was in work-in-progress or pending before makeing it release-- Exclude patches, ripple buildsIF (envtab < 0)THEN-- Not found in work-in-progress or pendingIF (ispatch IS NULL) AND (buildtype = 'M')THENraise_application_error (-20000,'This package cannot be released here.');END IF;END IF;-- Loglog_action (pvid, 'action', userid, 'Start of Make Package Release...');IF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.remove_package (pvid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (pvid, rtagid, userid);END IF;-- Change package statepk_package.change_state (pvid, 'Y', userid);-- Make sure it is valid BASE VIEWIF viewid < 1THENviewid := 7; -- This is default base viewEND IF;IF (ispatch IS NULL)THEN-- Add package to new areapk_release.add_package (pvid, viewid, rtagid, userid);END IF;-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);-- The release has changed and there may now be invalid rtag_id/pv_id combinations in-- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.clean_do_not_ripple(rtagid);clean_advisory_ripple(rtagid);-- Loglog_action (pvid, 'action', userid, 'End of Make Package Release...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE auto_make_release (pvid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER,vext IN package_versions.v_ext%TYPE,ssv_ext IN package_versions.v_ext%TYPE,clonefrompvid IN NUMBER)ISviewid NUMBER;envtab NUMBER;ispatch CHAR (1) := NULL;buildtype CHAR (1) := NULL;BEGIN-- Check if package is patchSELECT pv.is_patch, pv.build_typeINTO ispatch, buildtypeFROM package_versions pvWHERE pv.pv_id = pvid;IF vext <> ssv_extTHEN-- Get ViewIdviewid := get_package_view (clonefrompvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (clonefrompvid, rtagid);ELSE-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (pvid, rtagid);END IF;-- Make sure that package was in work-in-progress or pending before makeing it release-- Exclude patches, ripple buildsIF (envtab < 0)THEN-- Not found in work-in-progress or pendingIF (ispatch IS NULL) AND (buildtype = 'M')THENraise_application_error (-20000,'This package cannot be released here.');END IF;END IF;-- Loglog_action (pvid, 'action', userid, 'Start of Make Package Release...');IF vext <> ssv_extTHENIF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.remove_package (clonefrompvid, rtagid,userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (clonefrompvid, rtagid, userid);ELSIF envtab = 2THEN-- RELEASED --pk_release.remove_package (clonefrompvid, rtagid, userid);END IF;ELSEIF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.remove_package (pvid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (pvid, rtagid, userid);END IF;END IF;-- Change package statepk_package.change_state (pvid, 'Y', userid);-- Make sure it is valid BASE VIEWIF viewid < 1THENviewid := 7; -- This is default base viewEND IF;IF (ispatch IS NULL)THEN-- Add package to new areapk_release.add_package (pvid, viewid, rtagid, userid);END IF;-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);-- Now update the Dash_Board Table (DEPRECATED)pk_rmapi.update_dash_board (rtagid);-- The release has changed and there may now be invalid rtag_id/pv_id combinations in-- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.clean_do_not_ripple(rtagid);clean_advisory_ripple(rtagid);-- Loglog_action (pvid, 'action', userid, 'End of Make Package Release...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;envtab NUMBER;BEGIN-- Get ViewId--ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );viewid := get_package_view (pvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (pvid, rtagid);-- Loglog_action (pvid,'action',userid,'Start of Make Package UnRelease...');IF envtab = 2THEN-- RELEASE AREA --pk_release.remove_package (pvid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (pvid, rtagid, userid);END IF;-- Change package statepk_package.change_state (pvid, 'N', userid);-- Make sure it is valid BASE VIEWIF viewid < 1THENviewid := 7; -- This is default base viewEND IF;-- Add package to new areapk_work_in_progress.add_package (pvid, viewid, rtagid, userid);-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);-- Loglog_action (pvid, 'action', userid, 'End of Make Package UnRelease...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;ispatch CHAR (1) := NULL;buildtype CHAR (1) := NULL;BEGIN-- Check if package is patchSELECT pv.is_patch, pv.build_typeINTO ispatch, buildtypeFROM package_versions pvWHERE pv.pv_id = pvid;-- Get ViewIdviewid := get_package_view (pvid, rtagid);--ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );-- Loglog_action (pvid, 'action', userid, 'Start of Make Package Pending...');IF (ispatch IS NULL)THEN-- Remove from current areapk_work_in_progress.remove_package (pvid, rtagid, userid);-- Change package statepk_package.change_state (pvid, 'P', userid);-- Add package to new areapk_planned.add_package (pvid, viewid, rtagid, userid);END IF;-- Loglog_action (pvid, 'action', userid, 'End of Make Package Pending...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISBEGIN-- Loglog_action (pvid,'action',userid,'Start of Package Pending Approval...');-- Change package statepk_package.change_state (pvid, 'A', userid);-- Loglog_action (pvid, 'action', userid,'End of Package Pending Approval...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;operation CHAR;BEGIN-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );-- DEVI-45275-- If the package version is an official version that is to be rejected from a merge operation-- then find out in order to prevent it being added back to work-in-progress table . This will-- be denoted by the operation field in the planned table being A or Soperation := ' ';SELECT(CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operationFROM planned plWHERE pl.PV_ID = pvidAND pl.RTAG_ID = rtagid;-- Loglog_action (pvid, 'action', userid, 'Start of Reject Package...');-- Remove from current areapk_planned.remove_package (pvid, rtagid, userid);-- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .IF operation <> 'A' AND operation <> 'S'THEN-- Change package statepk_package.change_state (pvid, 'R', userid);-- Add package to new areapk_work_in_progress.add_package (pvid, viewid, rtagid, userid);ELSElog_action (pvid, 'action', userid, 'Rejected Package Merge');END IF;-- Loglog_action (pvid, 'action', userid, 'End of Reject Package...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE change_package_view (pvid IN NUMBER,rtagid IN NUMBER,newviewid IN NUMBER)ISenvtab NUMBER;BEGINenvtab := pk_environment.get_package_area (pvid, rtagid);IF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);ELSIF envtab = 1THEN-- PENDING --pk_planned.change_package_view (pvid, rtagid, newviewid);ELSIF envtab = 2THEN-- RELEASED --pk_release.change_package_view (pvid, rtagid, newviewid);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE find_package (skeyword IN VARCHAR2,nrtagid IN NUMBER,nsearcharea IN NUMBER,recordset OUT typecur)ISBEGINIF nsearcharea = 0THEN/* Search Work In Progress */OPEN recordset FORSELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,work_in_progress rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);ELSIF nsearcharea = 1THEN/* Search Pending */OPEN recordset FORSELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,planned rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);ELSIF nsearcharea = 2THEN/* Search Released */OPEN recordset FORSELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,release_content rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.base_view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);ELSIF nsearcharea = 3THEN/* Search ALL */OPEN recordset FORSELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,environment_view rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE find_file (skeyword IN VARCHAR2,nrtagid IN NUMBER,nsearcharea IN NUMBER,npagesize IN NUMBER,recordset OUT typecur)ISBEGINIF nsearcharea = 0THEN/* Search Work In Progress */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM work_in_progress rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM work_in_progress rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);ELSIF nsearcharea = 1THEN/* Search Pending */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM planned rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM planned rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);ELSIF nsearcharea = 2THEN/* Search Released */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Patches */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,DECODE (art.file_path,NULL, pp.patch_id,NULL) AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,release_components art,package_patches ppWHERE pv.pv_id = pp.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = nrtagidAND art.pv_id = pp.patch_idAND rc.pv_id = pp.pv_idAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);ELSIF nsearcharea = 3THEN/* Search ALL */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM environment_view rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM environment_view rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Patches */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,DECODE (art.file_path,NULL, pp.patch_id,NULL) AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,release_components art,package_patches ppWHERE pv.pv_id = pp.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = nrtagidAND art.pv_id = pp.patch_idAND rc.pv_id = pp.pv_idAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_prodrelease_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of integration productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state, --rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND pv.pv_id NOT IN (SELECT DISTINCT prod_idFROM deployment_manager.os_contents)AND rel.product_state IS NULLORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_integration_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of integration productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 1;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state IN (1, 5)ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_test_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of test productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 2;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state = 2ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_deploy_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of deploy productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 3;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state IN (3, 5)AND pv.pv_id NOT IN (SELECT DISTINCT prod_idFROM deployment_manager.os_contents)ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_reject_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of reject productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 4;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state = 4ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/-- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table-- to the release_content table.PROCEDURE approve_merge (PvId IN NUMBER,RtagId IN NUMBER,UserId IN NUMBER)ISviewid NUMBER;envtab NUMBER;oper CHAR;BEGIN-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- Get the view tabenvtab := pk_environment.get_package_area (pvid, rtagid);-- Make sure that package was in pending before merging it to releasedIF (envtab <> 1)THEN-- Not found in pendingraise_application_error (-20000,'This package cannot be released here.');END IF;-- Loglog_action (pvid, 'action', userid, 'Start of Package Merge...');-- Get the planned operation type A=Add, S=SubtractSELECT ev.operation INTO operFROM environment_view evWHERE ev.rtag_id = RtagIdAND ev.pv_id = PvIdAND (ev.operation = 'A' OR ev.operation = 'S');-- Remove from Pendingpk_planned.remove_package (PvId, RtagId, UserId);-- Either add to the release, or remove from the release as the operation commandsIF oper = 'A'THENpk_release.add_package(PvId, viewId, RtagId, UserId);ELSIF oper = 'S'THENpk_release.remove_package(PvId, RtagId, UserId);-- Delete old package's pegging infoDELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;-- Delete old package's advisory ripple infoDELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;END IF;touch_release(RtagId);-- Loglog_action (pvid, 'action', userid, 'End of Package Merge...');END;/*-------------------------------------------------------------------------------------------------------*/END pk_environment;/---------------------------------------------------------- DDL for Package Body PK_WORK_IN_PROGRESS--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 2/May/2005|| Body Version: 1.0------------------------------*//*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISoldPvId NUMBER;ReleaseLocation VARCHAR2(4000);sLocation VARCHAR2(4000) := NULL;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/BEGIN-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releasesSELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME INTO sLocationFROM WORK_IN_PROGRESS wip,RELEASE_TAGS rt,PROJECTS projWHERE wip.PV_ID = newPvIdAND wip.RTAG_ID = rt.RTAG_IDAND rt.OFFICIAL != 'Y'AND rt.PROJ_ID = proj.PROJ_ID;EXCEPTIONWHEN NO_DATA_FOUND THENsLocation := NULL;END;IF (sLocation IS NULL) THEN-- Add to "Work in progress"INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )VALUES( RtagId, newPvId, ViewId );/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );ELSERAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) ISReleaseLocation VARCHAR2(4000);BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Get release location for logging pusposesSELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;-- Delete from Work In ProgressDELETEFROM WORK_IN_PROGRESS wipWHERE wip.RTAG_ID = RtagIdAND wip.PV_ID = PvId;Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) ISnIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();ReleaseLocation VARCHAR2(4000);PvId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (PvIdList IS NULL)THENRAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );END IF;/*-------------------------------------------------------*/nIdCollector := IN_LIST_NUMBER ( PvIdList );-- Get release location for logging pusposesSELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = RtagId;FOR i IN 1..nIdCollector.COUNTLOOPPvId := nIdCollector(i);-- Delete from Work In ProgressDELETEFROM WORK_IN_PROGRESS wipWHERE wip.RTAG_ID = RtagIdAND wip.PV_ID = PvId;Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER ISReturnValue NUMBER;BEGINSELECT wip.VIEW_ID INTO ReturnValueFROM WORK_IN_PROGRESS wipWHERE wip.RTAG_ID = RtagIdAND wip.PV_ID = PvId;RETURN ReturnValue;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) ISIsBaseView CHAR(1);BEGIN-- Check if the view is BASE VIEWSELECT vi.BASE_VIEW INTO IsBaseViewFROM VIEWS viWHERE vi.VIEW_ID = ViewId;IF (IsBaseView = 'Y') THEN-- Get Base view contentOPEN RecordSet FORSELECT 0 AS PKG_STATE,NULL AS DEPRECATED_STATE,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPEFROM WORK_IN_PROGRESS rel,packages pkg,package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.VIEW_ID = ViewIdAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);ELSE-- Get non base view contentOPEN RecordSet FORSELECT 0 AS PKG_STATE,NULL AS DEPRECATED_STATE,pv.pv_id,pkg.pkg_name,pv.pkg_version,pv.dlocked,pv.pv_description,pv.BUILD_TYPEFROM WORK_IN_PROGRESS rel,packages pkg,package_versions pv,VIEW_DEF vdWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND vd.VIEW_ID = ViewIdAND vd.PKG_ID = pv.PKG_IDAND rel.RTAG_ID = RtagIdORDER BY UPPER(pkg.PKG_NAME);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) ISBEGINUPDATE WORK_IN_PROGRESS wip SETwip.VIEW_ID = NewViewIdWHERE wip.PV_ID = PvIdAND wip.RTAG_ID = RtagId;END;/*-------------------------------------------------------------------------------------------------------*/END PK_WORK_IN_PROGRESS;/---------------------------------------------------------- DDL for Package Body PK_ARCHIVE--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE"IS/*------------------------------|| Author: Rupesh Solanki|| Date: 26 October 2006|| Version: 1.0------------------------------*//*---------------------------*/PROCEDURE populate_packages_table ISBEGININSERT INTO archive_manager.PACKAGES(select * from packages where pkg_id not in(select pkg_id from archive_manager.packages));INSERT INTO archive_manager.PROCESSES(select * from processes where proc_id not in(select proc_id from archive_manager.processes));END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE populate_archive_data_table (nrtagid IN release_tags.rtag_id%TYPE)IS/*Reason: To populate the archive_data table with information regarding thenumber of package versions that exist in other releases.*/numcount NUMBER;numusedby NUMBER;numruntime NUMBER;/* Get all the package versions in the release */CURSOR archive_curISSELECT pv_idFROM release_contentWHERE rtag_id = nrtagid;archive_rec archive_cur%ROWTYPE;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/OPEN archive_cur;FETCH archive_curINTO archive_rec;WHILE archive_cur%FOUNDLOOP/* How many packages depend on this package version? */SELECT COUNT (*)INTO numusedbyFROM package_dependenciesWHERE dpv_id = archive_rec.pv_id;/* How many project releases use this package version? */SELECT COUNT (*)INTO numcountFROM release_contentWHERE pv_id = archive_rec.pv_id;/* How many packages have this package version as runtimedependency? */SELECT COUNT (*)INTO numruntimeFROM runtime_dependenciesWHERE rtd_id = archive_rec.pv_id;/* Insert into the archive_data table if they are not runtime dependantand package dependant and they exist in that particular release only*/IF numusedby = 0 AND numcount = 1 AND numruntime = 0THENINSERT INTO archive_data(rtag_id, pv_id)VALUES (nrtagid, archive_rec.pv_id);END IF;FETCH archive_curINTO archive_rec;END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE migrate_pv_to_archive_schema (nrtagid IN release_tags.rtag_id%TYPE)ISBEGIN/* MIGRATION - PACKAGE_VERSIONS */INSERT INTO archive_manager.package_versionsSELECT *FROM package_versionsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PACKAGE_BUILD_ENV */INSERT INTO archive_manager.package_build_envSELECT *FROM package_build_envWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PACKAGE_BUILD_ENV */DELETE FROM package_build_envWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PACKAGE_BUILD_INFO */INSERT INTO archive_manager.package_build_infoSELECT *FROM package_build_infoWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PACKAGE_BUILD_info */DELETE FROM package_build_infoWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - UNIT_TESTS */INSERT INTO archive_manager.unit_testsSELECT *FROM unit_testsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM UNIT_TESTS*/DELETE FROM unit_testsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PACKAGE_PROCESSES */INSERT INTO archive_manager.package_processesSELECT *FROM package_processesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PACKAGE_PROCESSES*/DELETE FROM package_processesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PACKAGE_DEPENDENCIES */INSERT INTO archive_manager.package_dependenciesSELECT *FROM package_dependenciesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PACKAGE_DEPENDENCIES*/DELETE FROM package_dependenciesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - CODE_REVIEWS */INSERT INTO archive_manager.code_reviewsSELECT *FROM code_reviewsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM CODE_REVIEWS*/DELETE FROM code_reviewsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - RUNTIME_DEPENDENCIES*/INSERT INTO archive_manager.runtime_dependenciesSELECT *FROM runtime_dependenciesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM RUNTIME_DEPENDENCIES*/DELETE FROM runtime_dependenciesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PACKAGE_DOCUMENTS */INSERT INTO archive_manager.package_documentsSELECT *FROM package_documentsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PACKAGE_DOCUMENTS*/DELETE FROM package_documentsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PACKAGE_PATCHES */INSERT INTO archive_manager.package_patchesSELECT *FROM package_patchesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PACKAGE_PATCHES*/DELETE FROM package_patchesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - CQ_ISSUES */INSERT INTO archive_manager.cq_issuesSELECT *FROM cq_issuesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM CQ_ISSUES*/DELETE FROM cq_issuesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - ADDITIONAL_NOTES */INSERT INTO archive_manager.additional_notesSELECT *FROM additional_notesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM ADDITIONAL_NOTES*/DELETE FROM additional_notesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - RELEASE_COMPONENTS */INSERT INTO archive_manager.release_componentsSELECT *FROM release_componentsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM RELEASE_COMPONENTS*/DELETE FROM release_componentsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - IGNORE_WARNINGS */INSERT INTO archive_manager.ignore_warningsSELECT *FROM ignore_warningsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM IGNORE_WARNINGS*/DELETE FROM ignore_warningsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM WORK_IN_PROGRESS */DELETE FROM work_in_progressWHERE rtag_id = nrtagid;/* PURGE DATA FROM PLANNED */DELETE FROM plannedWHERE rtag_id = nrtagid;/* MIGRATION - JIRA_ISSUES */INSERT INTO archive_manager.jira_issuesSELECT *FROM jira_issuesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM JIRA_ISSUES*/DELETE FROM jira_issuesWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - PRODUCT_COMPONENTS */INSERT INTO archive_manager.product_componentsSELECT *FROM product_componentsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM PRODUCT_COMPONENTS*/DELETE FROM product_componentsWHERE pv_id IN (SELECT pv_idFROM archive_data);/* MIGRATION - ACTION_LOG */INSERT INTO archive_manager.action_logSELECT *FROM action_logWHERE pv_id IN (SELECT pv_idFROM archive_data);/* PURGE DATA FROM ACTION_LOG*/DELETE FROM action_logWHERE pv_id IN (SELECT pv_idFROM archive_data);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE migrate_rtag_to_archive_schema (nrtagid IN release_tags.rtag_id%TYPE)ISBEGIN/* MIGRATION - DO_NOT_RIPPLE */INSERT INTO archive_manager.do_not_rippleSELECT *FROM do_not_ripple dnpWHERE rtag_id = nrtagid;/* PURGE DATA FROM DO_NOT_RIPPLE */DELETE FROM do_not_rippleWHERE rtag_id = nrtagid;/* MIGRATION - ADVISORY_RIPPLES*/INSERT INTO archive_manager.advisory_ripplesSELECT *FROM advisory_ripple dnpWHERE rtag_id = nrtagid;/* PURGE DATA FROM ADVISORY_RIPPLES*/DELETE FROM advisory_rippleWHERE rtag_id = nrtagid;/* MIGRATION - RELEASE_CONTENT */INSERT INTO archive_manager.release_contentSELECT *FROM release_contentWHERE rtag_id = nrtagid;/* PURGE DATA FROM RELEASE_CONTENT*/DELETE FROM release_contentWHERE rtag_id = nrtagid;/* MIGRATION - NOTIFICATION_HISTORY */INSERT INTO archive_manager.notification_historySELECT *FROM notification_historyWHERE rtag_id = nrtagid;/* PURGE DATA FROM NOTIFICATION_HISTORY*/DELETE FROM notification_historyWHERE rtag_id = nrtagid;/* MIGRATION - BUILD_ORDER */INSERT INTO archive_manager.build_orderSELECT *FROM build_orderWHERE rtag_id = nrtagid;/* PURGE DATA FROM BUILD_ORDER*/DELETE FROM build_orderWHERE rtag_id = nrtagid;/* MIGRATION - PROJECT_ACTION_LOG */INSERT INTO archive_manager.project_action_logSELECT *FROM project_action_logWHERE rtag_id = nrtagid;/* PURGE DATA FROM PROJECT_ACTION_LOG */DELETE FROM project_action_logWHERE rtag_id = nrtagid;/* MIGRATION - DEPRECATED_PACKAGES */INSERT INTO archive_manager.deprecated_packagesSELECT *FROM deprecated_packagesWHERE rtag_id = nrtagid;/* PURGE DATA FROM DEPRECATED_PACKAGES */DELETE FROM deprecated_packagesWHERE rtag_id = nrtagid;/* MIGRATION - RELEASE_TAGS */INSERT INTO archive_manager.release_tagsSELECT *FROM release_tagsWHERE rtag_id = nrtagid;/* PURGE DATA FROM PACKAGE_VERSIONS*/DELETE FROM package_versionsWHERE pv_id IN (SELECT pv_idFROM archive_data);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE clean_up_archive_data_table (nrtagid IN release_tags.rtag_id%TYPE)ISBEGIN/* Cleaning Up The Archive_Data Table */DELETE FROM archive_dataWHERE rtag_id = nrtagid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE write_action_log (nuserid IN NUMBER,nrtagid IN release_tags.rtag_id%TYPE)ISBEGIN/* Write Into Archive_Action_Log Table */INSERT INTO archive_action_log(user_id, date_time_stamp, rtag_id,description)VALUES (nuserid, ora_sysdatetime, nrtagid,'Release has been archived to the ARCHIVE_MANAGER schema');END;/*-------------------------------------------------------------------------------------------------------*/END pk_archive;/---------------------------------------------------------- DDL for Package Body PK_PACKAGE_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE_TEST"IS/*------------------------------|| Last Modified: R. Solanki|| Modified Date: 09/03/2006|| Body Version: 1.7------------------------------*//*-------------------------------------------------------------------------------------------------------*/PROCEDURE new_version (nlastpvid IN NUMBER,snewpkgversion IN VARCHAR2 DEFAULT NULL,cbuildtype IN CHAR,nsettopvid IN NUMBER DEFAULT NULL,nrtagid IN NUMBER,nuserid IN NUMBER,enumissues_state_imported IN NUMBER,returnpvid OUT NUMBER)ISorigpkg_id package_versions.pkg_id%TYPE;origdlocked package_versions.dlocked%TYPE;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;spackageversion VARCHAR2 (4000);nissuestypes NUMBER;nviewid NUMBER;reccount NUMBER;isreleased package_versions.dlocked%TYPE := 'N';slabel VARCHAR2 (4000) := NULL;CURSOR package_versions_curISSELECT pv.pv_id, pv.is_patch, pv.dlockedFROM package_versions pvWHERE pv.pkg_version = snewpkgversionAND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_idFROM package_versions origpvWHERE origpv.pv_id = nlastpvid);package_versions_rec package_versions_cur%ROWTYPE;CURSOR clone_package_versions_curISSELECT DISTINCT pkg_id, dlockedFROM package_versionsWHERE pv_id = nlastpvid;clone_package_versions_rec clone_package_versions_cur%ROWTYPE;BEGINspackageversion := snewpkgversion;IF nsettopvid IS NULLTHEN-- SetToPv_id is not supplied, hence proceed./* ---------------------------------------------------- *//* Find id package_version exists *//* ---------------------------------------------------- */OPEN package_versions_cur;FETCH package_versions_curINTO package_versions_rec;IF package_versions_cur%NOTFOUNDTHEN--- Create brand new package ---SELECT seq_pv_id.NEXTVALINTO returnpvidFROM DUAL;-- Split Version to get extention + othersplit_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);-- Get previous package to clone fromOPEN clone_package_versions_cur;FETCH clone_package_versions_curINTO clone_package_versions_rec;origpkg_id := clone_package_versions_rec.pkg_id;origdlocked := clone_package_versions_rec.dlocked;CLOSE clone_package_versions_cur;-- Automated built configIF (cbuildtype = 'A')THENspackageversion := '(' || returnpvid || ')' || ssv_ext;-- Make sure that version is still uniqueEND IF;-- Clone Package Version Details --INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,creator_id, modified_stamp, modifier_id, v_mm, v_nmm,v_ext, src_path, pv_description, pv_overview,last_pv_id, owner_id, is_deployable,is_build_env_required, build_type, bs_id, is_autobuildable)SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,spackageversion AS pkg_version, 'N' AS dlocked,ora_sysdate AS created_stamp, nuserid AS creator_id,ora_sysdatetime AS modified_stamp,nuserid AS modifier_id, ssv_mm AS v_mm,ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,pv.pv_description, pv.pv_overview,nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildableFROM package_versions pvWHERE pv.pv_id = nlastpvid;-- Set Issues Type for cloning ---IF origdlocked = 'Y'THENnissuestypes := enumissues_state_imported;ELSEnissuestypes := NULL;END IF;-- Update Label for automated builtIF (cbuildtype = 'A')THENslabel := get_automated_label (returnpvid);UPDATE package_versions pvSET pv.pkg_label = slabelWHERE pv.pv_id = returnpvid;END IF;basic_clone (nlastpvid,returnpvid,nrtagid,nuserid,origpkg_id,nissuestypes);ELSE--- Package already exists, hence reuse ---returnpvid := package_versions_rec.pv_id;isreleased := package_versions_rec.dlocked;END IF;CLOSE package_versions_cur;ELSEreturnpvid := nsettopvid;END IF;END new_version;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE change_state (pvid IN NUMBER,newstate IN package_versions.dlocked%TYPE,userid IN NUMBER)ISBEGIN-- Set package in Released modeUPDATE package_versions pvSET pv.dlocked = newstate,pv.modified_stamp = ora_sysdatetime,pv.modifier_id = useridWHERE pv.pv_id = pvid;-- Log action --IF newstate = 'Y'THEN-- RELEASED --log_action (pvid,'makeofficial',userid,'Package state change to: Released');ELSIF newstate = 'N'THEN-- UNLOCKED --log_action (pvid,'makeunofficial',userid,'Package state change to: Ulocked');ELSIF newstate = 'P'THEN-- PENDING APPROVAL --log_action (pvid,'add_to_planned',userid,'Package state change to: Pending Approval');ELSIF newstate = 'R'THEN-- REJECTED --log_action (pvid,'reject_package',userid,'Package state change to: Rejected');ELSIF newstate = 'A'THEN-- APPROVED --log_action (pvid,'approve_package',userid,'Package state change to: Approved');END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE destroy_package (pvid IN NUMBER,overridewarnings IN CHAR DEFAULT 'N',problemstring OUT VARCHAR2)ISLOCKED CHAR;pkgid NUMBER;ROWCOUNT NUMBER;BEGIN/*|| This will destroy all package details from database.|| It will only be used to remove unwanted work in progress packages,|| or mestaken versions*//*--------------- Business Rules Here -------------------*/problemstring := NULL;IF overridewarnings = 'N'THEN-- Package must not be officialSELECT pv.dlockedINTO LOCKEDFROM package_versions pvWHERE pv.pv_id = pvid;IF LOCKED = 'Y'THENproblemstring :=problemstring|| '- Package is locked and released.'|| UTL_TCP.crlf;END IF;-- Cannot remove if used in BOMsSELECT COUNT (osc.prod_id)INTO ROWCOUNTFROM deployment_manager.os_contents oscWHERE osc.prod_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'|| UTL_TCP.crlf;END IF;-- Cannot remove if Referenced as build dependencySELECT COUNT (dep.pv_id)INTO ROWCOUNTFROM package_dependencies depWHERE dep.dpv_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is referenced by other package as build dependency.'|| UTL_TCP.crlf;END IF;-- Cannot remove if Referenced as runtime dependencySELECT COUNT (rd.pv_id)INTO ROWCOUNTFROM runtime_dependencies rdWHERE rd.rtd_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is referenced by other package as runtime dependency.'|| UTL_TCP.crlf;END IF;-- Cannot remove if Referenced as patchSELECT COUNT (pp.pv_id)INTO ROWCOUNTFROM package_patches ppWHERE pp.patch_id = pvid;IF ROWCOUNT > 0THENproblemstring :=problemstring|| '- Package is used as patch by other package.'|| UTL_TCP.crlf;END IF;END IF;/*-------------------------------------------------------*/IF (problemstring IS NULL)THEN--- Remove From Work in ProgressDELETE FROM work_in_progress wipWHERE wip.pv_id = pvid;--- Remove From PendingDELETE FROM planned plWHERE pl.pv_id = pvid;--- Remove From Released areaDELETE FROM release_content rcWHERE rc.pv_id = pvid;---Remove From Package ProcessesDELETE FROM package_processes ppWHERE pp.pv_id = pvid;--- Remove DependenciesDELETE FROM package_dependencies depWHERE dep.pv_id = pvid;DELETE FROM package_dependencies depWHERE dep.dpv_id = pvid;--- Remove Runtime dependenciesDELETE FROM runtime_dependencies rtdWHERE rtd.pv_id = pvid;DELETE FROM runtime_dependencies rtdWHERE rtd.rtd_id = pvid;--- Remove componentsDELETE FROM product_components pcWHERE pc.pv_id = pvid;DELETE FROM release_components rcWHERE rc.pv_id = pvid;--- Remove From Notification HistoryDELETE FROM notification_history nhWHERE nh.pv_id = pvid;--- Remove From Ignore WarningsDELETE FROM ignore_warnings iwWHERE iw.pv_id = pvid;--- Remove From Additional NotesDELETE FROM additional_notes anWHERE an.pv_id = pvid;--- Remove From CQ IssuesDELETE FROM cq_issues cqWHERE cq.pv_id = pvid;--- Remove from Package PatchesDELETE FROM package_patches ppWHERE pp.pv_id = pvid;DELETE FROM package_patches ppWHERE pp.patch_id = pvid;--- Remove From Package DocumentsDELETE FROM package_documents pdWHERE pd.pv_id = pvid;--- Remove from Code ReviewDELETE FROM code_reviews crWHERE cr.pv_id = pvid;--- Remove from Unit TestsDELETE FROM unit_tests utWHERE ut.pv_id = pvid;--- Remove from Package BuildEnvDELETE FROM package_build_env pbeWHERE pbe.pv_id = pvid;--- Remove from Package Build InfoDELETE FROM package_build_info pbiWHERE pbi.pv_id = pvid;--- Remove from Build OrderDELETE FROM build_order boWHERE bo.pv_id = pvid;--- Remove from Note ManagerDELETE FROM note_manager nmWHERE nm.nid = pvid;--- Remove from Action logDELETE FROM action_log alWHERE al.pv_id = pvid;--- Remove from Do Not RippleDELETE FROM DO_NOT_RIPPLE dnrWHERE dnr.PV_ID = pvid;--- Remove from Jira IssuesDELETE FROM JIRA_ISSUES jiraWHERE jira.PV_ID = pvid;--- Finally Remove From Package Versions--- Get Package nameSELECT pv.pkg_idINTO pkgidFROM package_versions pvWHERE pv.pv_id = pvid;DELETE FROM package_versions pvWHERE pv.pv_id = pvid;--- Remove package name if not used any moreSELECT COUNT (pv.pv_id)INTO ROWCOUNTFROM package_versions pvWHERE pv.pkg_id = pkgid;IF ROWCOUNT < 1THENDELETE FROM PACKAGES pkgWHERE pkg.pkg_id = pkgid;END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE new_patch (snewpatchversion IN package_versions.pkg_version%TYPE,nparentpvid IN NUMBER,spatchidlist IN VARCHAR2,nuserid IN NUMBER,returnpatchid OUT NUMBER)ISpatchpv_id NUMBER;parpkg_id NUMBER;lastinstallorder NUMBER;ispatchdlocked package_versions.dlocked%TYPE;ssv_mm package_versions.v_mm%TYPE;ssv_nmm package_versions.v_nmm%TYPE;ssv_ext package_versions.v_ext%TYPE;opatchdepcollector relmgr_number_tab_t := relmgr_number_tab_t();CURSOR parent_curISSELECT pv.*, pkg.pkg_nameFROM package_versions pv, PACKAGES pkgWHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;parent_rec parent_cur%ROWTYPE;CURSOR patch_curISSELECT pv.*, pg.pkg_nameFROM package_versions pv, PACKAGES pgWHERE pv.pkg_id = parpkg_idAND pv.pkg_version = snewpatchversionAND pv.pkg_id = pg.pkg_id;patch_rec patch_cur%ROWTYPE;CURSOR releases_curISSELECT rc.pv_idFROM release_content rcWHERE rc.pv_id = patch_rec.pv_id;releases_rec releases_cur%ROWTYPE;BEGIN-- Get Last Install OrderSELECT COUNT (*)INTO lastinstallorderFROM package_patches ppWHERE pp.pv_id = nparentpvid;-- Get parent detailsOPEN parent_cur;FETCH parent_curINTO parent_rec;parpkg_id := parent_rec.pkg_id;-- Find if patch exists in databaseOPEN patch_cur;FETCH patch_curINTO patch_rec;-- Parent must be officialIF parent_rec.dlocked = 'Y'THENIF patch_cur%NOTFOUNDTHENispatchdlocked := 'N';-- Create new patch version --SELECT seq_pv_id.NEXTVALINTO patchpv_idFROM DUAL;split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);INSERT INTO package_versions(pv_id, pkg_id, pkg_version,dlocked, created_stamp, creator_id,modified_stamp, modifier_id, v_mm, v_nmm, v_ext,src_path,pv_description,owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,is_autobuildable)VALUES (patchpv_id, parpkg_id, snewpatchversion,ispatchdlocked, ora_sysdate, nuserid,ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,parent_rec.src_path,'This is a patch to '|| parent_rec.pkg_name|| ' '|| parent_rec.pkg_version,nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N');INSERT INTO package_patches(pv_id, patch_id, install_order)(SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,lastinstallorder + 1 AS install_orderFROM package_versions pvWHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');/* LOG ACTION */log_action (patchpv_id,'new_version',nuserid,'Patch version created: ' || snewpatchversion);log_action (nparentpvid,'patch_add',nuserid,'New patch created and attached: ' || snewpatchversion);ELSEpatchpv_id := patch_rec.pv_id;ispatchdlocked := patch_rec.dlocked;-- Find if pv_id exists in release content (i.e. it cannot be a patch)OPEN releases_cur;FETCH releases_curINTO releases_rec;IF releases_cur%NOTFOUNDTHEN-- This pv_id is trully a patch, hence add Y to column IS_PATCHUPDATE package_versionsSET is_patch = 'Y'WHERE pv_id = patchpv_id;INSERT INTO package_patches(pv_id, patch_id, install_order)(SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,lastinstallorder + 1 AS install_orderFROM package_versions pvWHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');END IF;CLOSE releases_cur;/* LOG ACTION */log_action (nparentpvid,'patch_add',nuserid,'Patch version was found and attached: '|| snewpatchversion);END IF;END IF;/* Create Patch Dependencies */opatchdepcollector := in_list_number (spatchidlist);-- Make sure patch is unofficial before altering its dependenciesIF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')THEN-- Delete Existing DependenciesDELETE FROM package_dependencies depWHERE dep.pv_id = patchpv_id;-- Insert new dependenciesINSERT INTO package_dependencies(pv_id, dpv_id, pkg_id, dpkg_id, build_type)SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,'L' AS build_typeFROM package_versions pvWHERE pv.pv_id IN (SELECT *FROM TABLE(CAST(opatchdepcollector AS relmgr_number_tab_t)));END IF;-- Return patch_idreturnpatchid := patchpv_id;CLOSE parent_cur;CLOSE patch_cur;EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENraise_application_error (-20000,'Patch version '|| snewpatchversion|| ' already exist.');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE obsolete_patch (patchid IN NUMBER,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER)ISBEGIN-- Update patchUPDATE package_versions pvSET pv.is_obsolete = isobsolete,pv.obsolete_comments = obsoletecommentsWHERE pv.pv_id = patchid;/*-- Update patch childrenUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.DPV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.PV_ID = PatchId);-- Update patch parentUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.PV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.DPV_ID = PatchId);*//* LOG ACTION */IF isobsolete IS NOT NULLTHENlog_action (patchid,'patch_obsolete',userid,'Obsolete patch. ' || obsoletecomments);ELSElog_action (patchid,'patch_obsolete',userid,'Undo patch obsolete.');END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE obsolete_patches (spatchidlist IN VARCHAR2,isobsolete IN CHAR,obsoletecomments IN VARCHAR2,userid IN NUMBER)ISBEGIN/*--------------- Business Rules Here -------------------*/IF spatchidlist IS NULLTHENraise_application_error (-20000,'Please select one or more Patches.');END IF;/*-------------------------------------------------------*/-- Update patchUPDATE package_versions pvSET pv.is_obsolete = isobsolete,pv.obsolete_comments = obsoletecommentsWHERE pv.pv_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (spatchidlist) AS relmgr_number_tab_t)FROM DUAL));/*-- Update patch childrenUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.DPV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.PV_ID = PatchId);-- Update patch parentUPDATE PACKAGE_VERSIONS pv SETpv.IS_OBSOLETE = IsObsolete,pv.OBSOLETE_COMMENTS = ObsoleteCommentsWHERE pv.PV_ID IN (SELECT DISTINCT dep.PV_IDFROM PACKAGE_DEPENDENCIES depWHERE dep.DPV_ID = PatchId);*//* LOG ACTIONIF IsObsolete IS NOT NULL THENLog_Action ( PatchId, 'patch_obsolete', UserId,'Obsolete patch. '|| ObsoleteComments );ELSELog_Action ( PatchId, 'patch_obsolete', UserId,'Undo patch obsolete.' );END IF; */END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_process (nprocid IN processes.proc_id%TYPE,shealthtag IN processes.proc_name%TYPE,sprocdesc IN processes.proc_description%TYPE,scmdinterface IN processes.run_as%TYPE,spkgowner IN processes.pkg_owner%TYPE,sisinterface IN processes.is_interface%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER)ISpkgname VARCHAR2 (100);/*Rupesh Release on 17/05/2006*/BEGININSERT INTO processes(proc_id, proc_name, proc_description, run_as, pkg_owner,is_interface)VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,sisinterface);pk_package.add_package_process (nprocid, npvid, nuserid);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_package_process (nprocidlist IN VARCHAR2,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER)ISprocessname VARCHAR2 (4000);/*Rupesh Release on 17/05/2006*/CURSOR proc_curISSELECT prc.proc_idFROM processes prcWHERE prc.proc_id IN (SELECT *FROM THE(SELECT CAST(in_list_number (nprocidlist) AS relmgr_number_tab_t)FROM DUAL));proc_rec proc_cur%ROWTYPE;BEGINOPEN proc_cur;FETCH proc_curINTO proc_rec;WHILE proc_cur%FOUNDLOOPINSERT INTO package_processes(proc_id, pv_id)VALUES (proc_rec.proc_id, npvid);SELECT prc.proc_nameINTO processnameFROM processes prcWHERE prc.proc_id = proc_rec.proc_id;-- Log Action --log_action (npvid,'process_add',nuserid,'Added process with health tag ' || processname);FETCH proc_curINTO proc_rec;END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE remove_process (nprocid IN package_processes.proc_id%TYPE,npvid IN package_processes.pv_id%TYPE,nuserid IN NUMBER)ISprocessname VARCHAR2 (4000);/* Rupesh Release on 17/05/2006*/BEGINSELECT prc.proc_nameINTO processnameFROM processes prcWHERE prc.proc_id = nprocid;DELETE FROM package_processesWHERE proc_id = nprocid AND pv_id = npvid;-- Log Action --log_action (npvid,'process_remove',nuserid,'Removed process with health tag ' || processname);END;/*-------------------------------------------------------------------------------------------------------*//*Author: Rupesh SolankiPurpose: To move package versions from one release to anotherRelease: 4th September 2006*/PROCEDURE move_package (npvid IN package_versions.pv_id%TYPE,nrtagid IN release_tags.rtag_id%TYPE,nnewrtagid IN release_tags.rtag_id%TYPE,nuserid IN NUMBER)ISoldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);BEGINSELECT rtag_name into oldrtag_nameFROM RELEASE_TAGSWHERE rtag_id = nrtagid;SELECT rtag_name into newrtag_nameFROM RELEASE_TAGSWHERE rtag_id = nnewrtagid;/* Table Work In Progress*/UPDATE WORK_IN_PROGRESSSET RTAG_ID = nnewrtagidWHERE RTAG_ID = nrtagidAND PV_ID = npvid;/* Table PLANNED*/UPDATE PLANNEDSET RTAG_ID = nnewrtagidWHERE RTAG_ID = nrtagidAND PV_ID = npvid;-- Log Action --log_action (npvid,'move_package_version',nuserid,'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE modify_product_state (npvid IN package_versions.pv_id%TYPE,nstateid IN product_states.state_id%TYPE,nuserid IN NUMBER) ISsStateName VARCHAR(4000);/*Author: Rupesh SolankiPurpose: To modify the product state from integration to test to deploymentRelease: 25th January 2006*/BEGINUPDATE PACKAGE_VERSIONSSET PRODUCT_STATE = nstateidWHERE PV_ID = npvid;SELECT STATE INTO sStateNameFROM PRODUCT_STATESWHERE STATE_ID = nstateid;-- Log Action --log_action (npvid,'modify_product_state',nuserid,sStateName);END;/*-------------------------------------------------------------------------------------------------------*/END pk_package_Test;/---------------------------------------------------------- DDL for Package Body PK_ENVIRONMENT_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT_TEST"IS/*------------------------------|| Last Modified: Rupesh Solanki|| Modified Date: 29/Jan/2007|| Body Version: 1.1------------------------------*//*-------------------------------------------------------------------------------------------------------*/FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)RETURN NUMBERISBEGIN/*|| N - unlocked|| Y - release and locked|| P - penging approval|| A - approved package ready for auto-build*/IF cdlock = 'N' OR cdlock = 'R'THEN-- WORK IN PROGRESS --RETURN 0;ELSIF cdlock = 'P' OR cdlock = 'A'THEN-- PENDING --RETURN 1;ELSIF cdlock = 'Y'THEN-- RELEASED --RETURN 2;ELSE-- NOT FOUND --raise_application_error(-20000,'Cannot decide where to place package. [cDlock='|| cdlock|| ']');END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)RETURN NUMBERISenvtab NUMBER := -1;CURSOR curareaISSELECT 2 AS envtabFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.pv_id = pvidUNIONSELECT 0 AS envtabFROM work_in_progress wipWHERE wip.rtag_id = rtagid AND wip.pv_id = pvidUNIONSELECT 1 AS envtabFROM planned plWHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;recarea curarea%ROWTYPE;BEGINOPEN curarea;FETCH curareaINTO recarea;IF curarea%FOUNDTHENenvtab := recarea.envtab;END IF;CLOSE curarea;RETURN envtab;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)RETURN NUMBERISispatch package_versions.dlocked%TYPE;viewid NUMBER := -1;CURSOR curviewISSELECT rc.base_view_id AS view_idFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.pv_id = pvidUNIONSELECT wip.view_id AS view_idFROM work_in_progress wipWHERE wip.rtag_id = rtagid AND wip.pv_id = pvidUNIONSELECT pl.view_id AS view_idFROM planned plWHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;recview curview%ROWTYPE;BEGIN-- Get dlock stateSELECT pv.is_patchINTO ispatchFROM package_versions pvWHERE pv.pv_id = pvid;-- Decide which view id should package go under.IF (ispatch != 'Y') OR (ispatch IS NULL)THEN-- Get VIEW ID of PackageOPEN curview;FETCH curviewINTO recview;IF curview%FOUNDTHENviewid := recview.view_id;ELSEraise_application_error(-20000,'Cannot find view_id to proceed. [PvId='|| pvid|| ']. The current version may not exist in the release anymore.');END IF;CLOSE curview;ELSE-- Get VIEW ID of Patch (view id of parent package)SELECT rc.base_view_idINTO viewidFROM release_content rc, package_patches ppvWHERE rc.rtag_id = rtagidAND rc.pv_id = ppv.pv_idAND ppv.patch_id = pvid;END IF;RETURN viewid;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_package (pvid IN NUMBER,viewid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER)ISdlocked package_versions.dlocked%TYPE;envtab NUMBER;BEGINIF can_edit_pkg_in_project (pvid, rtagid) = 1THEN-- Get dlock stateSELECT pv.dlockedINTO dlockedFROM package_versions pvWHERE pv.pv_id = pvid;-- Get which area should go underenvtab := select_environment_area (dlocked);-- Loglog_action (pvid, 'action', userid, 'Start of Package Add...');-- Remove PackageIF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.add_package (pvid, viewid, rtagid, userid);ELSIF envtab = 2THEN-- RELEASED ---- NOTE: this package will be replaced with matching packagepk_release.add_package (pvid, viewid, rtagid, userid);-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);END IF;-- Loglog_action (pvid, 'action', userid, 'End of Package Add...');END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE add_package_bulk (pvidlist IN VARCHAR2,viewid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER)ISnidcollector relmgr_number_tab_t := relmgr_number_tab_t();dlocked package_versions.dlocked%TYPE;pvid NUMBER;envtab NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/IF (pvidlist IS NULL)THENraise_application_error (-20000,'Please select at least one package.');END IF;/*-------------------------------------------------------*/nidcollector := in_list_number (pvidlist);FOR i IN 1 .. nidcollector.COUNTLOOPpvid := nidcollector (i);add_package (pvid, viewid, rtagid, userid);END LOOP;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE replace_package (newpvid IN NUMBER,oldpvid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER)ISdlocked package_versions.dlocked%TYPE;viewid NUMBER;envtab NUMBER;ROWCOUNT NUMBER;creleasemode CHAR (1);npkgid NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- Check if oldPvId exists. It could have been removedSELECT COUNT (pv.pv_id)INTO ROWCOUNTFROM package_versions pvWHERE pv.pv_id = oldpvid;/*-------------------------------------------------------*//* This procedure is usually used by "History" option in Release Manager */-- Get dlock stateSELECT pv.dlockedINTO dlockedFROM package_versions pvWHERE pv.pv_id = newpvid;-- Get VIEW_ID ---IF ROWCOUNT = 1THENviewid := get_view_location (oldpvid, rtagid);ELSE-- Set ViewID to defaultviewid := 7;END IF;-- Get which area should go underenvtab := select_environment_area (dlocked);-- Loglog_action (oldpvid, 'action', userid, 'Start of Package Replace...');-- Replace packageIF envtab = 0THEN-- WORK IN PROGRESS ---- Delete old packagepk_work_in_progress.remove_package (oldpvid, rtagid, userid);-- Add new packagepk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING ---- Delete old packagepk_planned.remove_package (oldpvid, rtagid, userid);-- Add new packagepk_planned.add_package (newpvid, viewid, rtagid, userid);ELSIF envtab = 2THEN-- RELEASED ---- Delete old packagepk_release.remove_package (oldpvid, rtagid, userid);-- Add new packagepk_release.add_package (newpvid, viewid, rtagid, userid);-- Now do post Release Actionspk_release.run_post_actions (newpvid, rtagid);END IF;-- Loglog_action (oldpvid, 'action', userid, 'End of Package Replace...');END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION remove_package (pvid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER,forceremove IN CHAR)RETURN NUMBERISenvtab NUMBER;isused BOOLEAN;recordcount NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Find location of packageenvtab := get_package_area (pvid, rtagid);-- Remove PackageIF envtab = 0THEN-- WORK IN PROGRESS ---- Delete packagepk_work_in_progress.remove_package (pvid, rtagid, userid);RETURN 0;ELSIF envtab = 1THEN-- PENDING ---- Delete packagepk_planned.remove_package (pvid, rtagid, userid);RETURN 0;ELSIF envtab = 2THEN-- RELEASED ---- Check if is used by other packagesisused := TRUE;IF forceremove = 'N'THENSELECT COUNT (pv.pv_id)INTO recordcountFROM (SELECT dpv.pkg_id, dpv.v_extFROM release_content rc,package_dependencies dep,package_versions dpvWHERE rc.rtag_id = rtagidAND rc.pv_id = dep.pv_idAND dep.dpv_id = dpv.pv_id) rdep,package_versions pvWHERE pv.pkg_id = rdep.pkg_idAND NVL (pv.v_ext, '|LINK_A_NULL|') =NVL (rdep.v_ext, '|LINK_A_NULL|')AND pv.pv_id = pvid;IF recordcount > 0THENRETURN 1; -- Return 1 as package being usedELSEisused := FALSE;END IF;END IF;IF forceremove = 'Y' OR NOT isusedTHEN-- Delete old packagepk_release.remove_package (pvid, rtagid, userid);-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);RETURN 0;END IF;END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_environment_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (pl.pv_id)INTO ntruerecordcountFROM environment_view plWHERE pl.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM environment_view rel, views viWHERE rel.view_id = vi.view_idAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name,DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM environment_view rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM environment_view rel,view_settings vs,views viWHERE rel.view_id = vi.view_idAND vs.view_id = rel.view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name,DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM environment_view rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_descriptionFROM view_settings vs,view_def vd,views vi,environment_view rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name,DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM users usr,view_settings vs,view_def vd,views vi,environment_view rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_released_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM release_content rel, views viWHERE rel.base_view_id = vi.view_idAND rtag_id = rtagidAND rel.base_view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND rel.base_view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM release_content rel,view_settings vs,views viWHERE rel.base_view_id = vi.view_idAND vs.view_id = rel.base_view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.base_view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.base_view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_descriptionFROM view_settings vs,view_def vd,views vi,release_content rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM users usr,view_settings vs,view_def vd,views vi,release_content rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_work_in_progress_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (wip.pv_id)INTO ntruerecordcountFROM work_in_progress wipWHERE wip.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM work_in_progress rel, views viWHERE rel.view_id = vi.view_idAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM work_in_progress rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM work_in_progress rel,view_settings vs,views viWHERE rel.view_id = vi.view_idAND vs.view_id = rel.view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM work_in_progress rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_descriptionFROM view_settings vs,view_def vd,views vi,work_in_progress rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM users usr,view_settings vs,view_def vd,views vi,work_in_progress rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_pending_items (viewtype IN NUMBER,userid IN NUMBER,rtagid IN NUMBER,sviewidshowlist IN VARCHAR2,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count because views can give false countSELECT COUNT (pl.pv_id)INTO ntruerecordcountFROM planned plWHERE pl.rtag_id = rtagid;IF viewtype = 1THEN/*--- GUEST VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM planned rel, views viWHERE rel.view_id = vi.view_idAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM planned rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);ELSIF viewtype = 2THEN/*--- PERSONAL VIEW ---*/OPEN recordset FORSELECT *FROM (/* Base Views collapsed */SELECT DISTINCT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id,NULL AS pkg_name, NULL AS pkg_version,NULL AS dlocked, NULL AS pv_descriptionFROM planned rel, view_settings vs, views viWHERE rel.view_id = vi.view_idAND vs.view_id = rel.view_idAND vs.user_id = useridAND rtag_id = rtagidAND rel.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Base Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM planned rel,PACKAGES pkg,package_versions pv,views vi,view_settings vsWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = vi.view_idAND vs.view_id = vi.view_idAND vs.user_id = useridAND rel.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND rtag_id = rtagidUNION/* Private Views collapsed */SELECT vi.view_id, vi.view_name,TO_NUMBER (NULL) AS pkg_state,TO_NUMBER (NULL) AS deprecated_state,TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,NULL AS pkg_version, NULL AS dlocked,NULL AS pv_descriptionFROM view_settings vs,view_def vd,views vi,planned rel,package_versions pvWHERE vs.view_id = vi.view_idAND rel.pv_id = pv.pv_idAND vd.pkg_id = pv.pkg_idAND vd.view_id = vi.view_idAND vi.base_view = 'N'AND rel.rtag_id = rtagidAND vs.user_id = useridAND vi.view_id NOT IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))UNION/* Private Views expanded */SELECT vi.view_id, vi.view_name, 0 AS pkg_state,--rel.pkg_state,TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,pkg.pkg_name, pv.pkg_version, pv.dlocked,pv.pv_descriptionFROM users usr,view_settings vs,view_def vd,views vi,planned rel,PACKAGES pkg,package_versions pvWHERE vs.user_id = usr.user_idAND vs.view_id = vi.view_idAND vd.view_id = vi.view_idAND pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.pkg_id = pkg.pkg_idAND vi.base_view = 'N'AND vi.view_id IN (SELECT *FROM THE(SELECT CAST(in_list_number(sviewidshowlist) AS relmgr_number_tab_t)FROM DUAL))AND usr.user_id = userid) ordORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_view_content (rtagid IN NUMBER,viewid IN NUMBER,recordset OUT typecur)ISisbaseview CHAR (1);BEGIN-- Check if the view is BASE VIEWSELECT vi.base_viewINTO isbaseviewFROM views viWHERE vi.view_id = viewid;IF (isbaseview = 'Y')THEN-- Get Base view contentOPEN recordset FORSELECT DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,pv.build_typeFROM environment_view rel, PACKAGES pkg, package_versions pvWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.view_id = viewidAND rel.rtag_id = rtagidORDER BY UPPER (pkg.pkg_name);ELSE-- Get non base view contentOPEN recordset FORSELECT DECODE (rel.pkg_state,NULL, 0,rel.pkg_state) AS pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_description,pv.build_typeFROM environment_view rel,PACKAGES pkg,package_versions pv,view_def vdWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.rtag_id = rtagidAND vd.view_id = viewidAND vd.pkg_id = pv.pkg_idORDER BY UPPER (pkg.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)RETURN NUMBERISenvtab NUMBER;returnvalue NUMBER;return_not_found NUMBER := -1;BEGINenvtab := get_package_area (pvid, rtagid);IF envtab = 0THEN-- WORK IN PROGRESS --returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);ELSIF envtab = 1THEN-- PENDING --returnvalue := pk_planned.get_package_view (pvid, rtagid);ELSIF envtab = 2THEN-- RELEASED --returnvalue := pk_release.get_package_view (pvid, rtagid);ELSE-- This may be a Patch not located anywhere but unlockedreturnvalue := return_not_found;END IF;RETURN returnvalue;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;envtab NUMBER;ispatch CHAR (1) := NULL;buildtype CHAR (1) := NULL;lastversionid NUMBER;BEGIN-- Check if package is patchSELECT pv.is_patch, pv.build_type, pv.last_pv_idINTO ispatch, buildtype, lastversionidFROM package_versions pvWHERE pv.pv_id = pvid;-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (pvid, rtagid);-- Make sure that package was in work-in-progress or pending before makeing it release-- Exclude patches, ripple buildsIF (envtab < 0)THEN-- Not found in work-in-progress or pendingIF (ispatch IS NULL) AND (buildtype = 'M')THENraise_application_error (-20000,'This package cannot be released here.');END IF;END IF;-- Loglog_action (pvid, 'action', userid, 'Start of Make Package Release...');IF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.remove_package (pvid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (pvid, rtagid, userid);END IF;-- Change package statepk_package.change_state (pvid, 'Y', userid);-- Make sure it is valid BASE VIEWIF viewid < 1THENviewid := 7; -- This is default base viewEND IF;IF (ispatch IS NULL)THEN-- Add package to new areapk_release.add_package (pvid, viewid, rtagid, userid);END IF;-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);-- Now delete old version from DO_NOT_RIPPLE Table if it ExistsDELETE FROM do_not_rippleWHERE rtag_id = rtagid AND pv_id = lastversionid;-- Now delete old version from ADVISORY_RIPPLES Table if it ExistsDELETE FROM advisory_rippleWHERE rtag_id = rtagid AND pv_id = lastversionid;-- Loglog_action (pvid, 'action', userid, 'End of Make Package Release...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE auto_make_release (pvid IN NUMBER,rtagid IN NUMBER,userid IN NUMBER,vext IN package_versions.v_ext%TYPE,ssv_ext IN package_versions.v_ext%TYPE,clonefrompvid IN NUMBER)ISviewid NUMBER;envtab NUMBER;ispatch CHAR (1) := NULL;buildtype CHAR (1) := NULL;lastversionid NUMBER;BEGIN-- Check if package is patchSELECT pv.is_patch, pv.build_type, pv.last_pv_idINTO ispatch, buildtype, lastversionidFROM package_versions pvWHERE pv.pv_id = pvid;IF vext <> ssv_extTHEN-- Get ViewIdviewid := get_package_view (clonefrompvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (clonefrompvid, rtagid);ELSE-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (pvid, rtagid);END IF;-- Make sure that package was in work-in-progress or pending before makeing it release-- Exclude patches, ripple buildsIF (envtab < 0)THEN-- Not found in work-in-progress or pendingIF (ispatch IS NULL) AND (buildtype = 'M')THENraise_application_error (-20000,'This package cannot be released here.');END IF;END IF;-- Loglog_action (pvid, 'action', userid, 'Start of Make Package Release...');IF vext <> ssv_extTHENIF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.remove_package (clonefrompvid, rtagid,userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (clonefrompvid, rtagid, userid);ELSIF envtab = 2THEN-- RELEASED --pk_release.remove_package (clonefrompvid, rtagid, userid);END IF;ELSEIF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.remove_package (pvid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (pvid, rtagid, userid);END IF;END IF;-- Change package statepk_package.change_state (pvid, 'Y', userid);-- Make sure it is valid BASE VIEWIF viewid < 1THENviewid := 7; -- This is default base viewEND IF;IF (ispatch IS NULL)THEN-- Add package to new areapk_release.add_package (pvid, viewid, rtagid, userid);END IF;-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);-- Now update the Dash_Board Tablepk_rmapi.update_dash_board (rtagid);-- Now delete old version from DO_NOT_RIPPLE Table if it ExistsDELETE FROM do_not_rippleWHERE rtag_id = rtagid AND pv_id = lastversionid;-- Now delete old version from ADVISORY_RIPPLES Table if it ExistsDELETE FROM advisory_rippleWHERE rtag_id = rtagid AND pv_id = lastversionid;-- Loglog_action (pvid, 'action', userid, 'End of Make Package Release...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;envtab NUMBER;BEGIN-- Get ViewId--ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );viewid := get_package_view (pvid, rtagid);-- Remove from current areaenvtab := pk_environment.get_package_area (pvid, rtagid);-- Loglog_action (pvid,'action',userid,'Start of Make Package UnRelease...');IF envtab = 2THEN-- RELEASE AREA --pk_release.remove_package (pvid, rtagid, userid);ELSIF envtab = 1THEN-- PENDING --pk_planned.remove_package (pvid, rtagid, userid);END IF;-- Change package statepk_package.change_state (pvid, 'N', userid);-- Make sure it is valid BASE VIEWIF viewid < 1THENviewid := 7; -- This is default base viewEND IF;-- Add package to new areapk_work_in_progress.add_package (pvid, viewid, rtagid, userid);-- Now do post Release Actionspk_release.run_post_actions (pvid, rtagid);-- Loglog_action (pvid, 'action', userid, 'End of Make Package UnRelease...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;ispatch CHAR (1) := NULL;buildtype CHAR (1) := NULL;BEGIN-- Check if package is patchSELECT pv.is_patch, pv.build_typeINTO ispatch, buildtypeFROM package_versions pvWHERE pv.pv_id = pvid;-- Get ViewIdviewid := get_package_view (pvid, rtagid);--ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );-- Loglog_action (pvid, 'action', userid, 'Start of Make Package Pending...');IF (ispatch IS NULL)THEN-- Remove from current areapk_work_in_progress.remove_package (pvid, rtagid, userid);-- Change package statepk_package.change_state (pvid, 'P', userid);-- Add package to new areapk_planned.add_package (pvid, viewid, rtagid, userid);END IF;-- Loglog_action (pvid, 'action', userid, 'End of Make Package Pending...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISBEGIN-- Loglog_action (pvid,'action',userid,'Start of Package Pending Approval...');-- Change package statepk_package.change_state (pvid, 'A', userid);-- Loglog_action (pvid, 'action', userid,'End of Package Pending Approval...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)ISviewid NUMBER;BEGIN-- Get ViewIdviewid := get_package_view (pvid, rtagid);-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );-- Loglog_action (pvid, 'action', userid, 'Start of Reject Package...');-- Remove from current areapk_planned.remove_package (pvid, rtagid, userid);-- Change package statepk_package.change_state (pvid, 'R', userid);-- Add package to new areapk_work_in_progress.add_package (pvid, viewid, rtagid, userid);-- Loglog_action (pvid, 'action', userid, 'Start of Reject Package...');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE change_package_view (pvid IN NUMBER,rtagid IN NUMBER,newviewid IN NUMBER)ISenvtab NUMBER;BEGINenvtab := pk_environment.get_package_area (pvid, rtagid);IF envtab = 0THEN-- WORK IN PROGRESS --pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);ELSIF envtab = 1THEN-- PENDING --pk_planned.change_package_view (pvid, rtagid, newviewid);ELSIF envtab = 2THEN-- RELEASED --pk_release.change_package_view (pvid, rtagid, newviewid);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE find_package (skeyword IN VARCHAR2,nrtagid IN NUMBER,nsearcharea IN NUMBER,recordset OUT typecur)ISBEGINIF nsearcharea = 0THEN/* Search Work In Progress */OPEN recordset FORSELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,work_in_progress rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);ELSIF nsearcharea = 1THEN/* Search Pending */OPEN recordset FORSELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,planned rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);ELSIF nsearcharea = 2THEN/* Search Released */OPEN recordset FORSELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,release_content rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.base_view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);ELSIF nsearcharea = 3THEN/* Search ALL */OPEN recordset FORSELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,pv.pv_id, pv.pkg_version, pv.comments,pv.modified_stamp, usr.full_name, usr.user_emailFROM views vi,environment_view rc,PACKAGES pkg,package_versions pv,users usrWHERE rc.view_id = vi.view_idAND rc.pv_id = pv.pv_idAND pkg.pkg_id = pv.pkg_idAND pv.modifier_id = usr.user_idAND rc.rtag_id = nrtagidAND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)ORDER BY UPPER (pkg.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE find_file (skeyword IN VARCHAR2,nrtagid IN NUMBER,nsearcharea IN NUMBER,npagesize IN NUMBER,recordset OUT typecur)ISBEGINIF nsearcharea = 0THEN/* Search Work In Progress */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM work_in_progress rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM work_in_progress rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);ELSIF nsearcharea = 1THEN/* Search Pending */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM planned rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksumFROM planned rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);ELSIF nsearcharea = 2THEN/* Search Released */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Patches */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,DECODE (art.file_path,NULL, pp.patch_id,NULL) AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,release_components art,package_patches ppWHERE pv.pv_id = pp.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = nrtagidAND art.pv_id = pp.patch_idAND rc.pv_id = pp.pv_idAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);ELSIF nsearcharea = 3THEN/* Search ALL */OPEN recordset FORSELECT qry.*FROM (/* File search on Packages */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM environment_view rc,PACKAGES pkg,package_versions pv,release_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Products */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,NULL AS patch_idFROM environment_view rc,PACKAGES pkg,package_versions pv,product_components artWHERE rc.pv_id = art.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.pv_id = pv.pv_idAND rc.rtag_id = nrtagidAND UPPER (art.file_name) LIKE UPPER (skeyword)UNION ALL/* File search on Patches */SELECT art.file_name, art.file_path, pkg.pkg_name,pv.pv_id, pv.pkg_version, art.crc_cksum,DECODE (art.file_path,NULL, pp.patch_id,NULL) AS patch_idFROM release_content rc,PACKAGES pkg,package_versions pv,release_components art,package_patches ppWHERE pv.pv_id = pp.pv_idAND pv.pkg_id = pkg.pkg_idAND rc.rtag_id = nrtagidAND art.pv_id = pp.patch_idAND rc.pv_id = pp.pv_idAND UPPER (art.file_name) LIKE UPPER (skeyword)) qryWHERE ROWNUM <= npagesizeORDER BY UPPER (qry.pkg_name);END IF;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_prodrelease_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of integration productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state, --rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND pv.pv_id NOT IN (SELECT DISTINCT prod_idFROM deployment_manager.os_contents)AND rel.product_state IS NULLORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_integration_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of integration productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 1;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state IN (1, 5)ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_test_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of test productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 2;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state = 2ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_deploy_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of deploy productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 3;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state IN (3, 5)AND pv.pv_id NOT IN (SELECT DISTINCT prod_idFROM deployment_manager.os_contents)ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE get_reject_items (rtagid IN NUMBER,ntruerecordcount OUT NUMBER,recordset OUT typecur)ISBEGIN-- Get true record count n the number of reject productsSELECT COUNT (rc.pv_id)INTO ntruerecordcountFROM release_content rcWHERE rc.rtag_id = rtagid AND rc.product_state = 4;OPEN recordset FORSELECT vi.view_id, vi.view_name, rel.pkg_state,rel.deprecated_state, pv.pv_id, pkg.pkg_name,pv.pkg_version, pv.dlocked, pv.pv_descriptionFROM release_content rel,PACKAGES pkg,package_versions pv,views viWHERE pv.pkg_id = pkg.pkg_idAND rel.pv_id = pv.pv_idAND rel.base_view_id = vi.view_idAND pv.is_deployable = 'Y'AND rtag_id = rtagidAND rel.product_state = 4ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);END;/*-------------------------------------------------------------------------------------------------------*/END pk_environment_test;/---------------------------------------------------------- DDL for Package Body PK_BUILDAPI_TEST--------------------------------------------------------CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI_TEST" IS/*------------------------------|| Last Modified: S.Vukovic|| Modified Date: 30/Mar/2005|| Body Version: 1.0------------------------------*//*-------------------------------------------------------------------------------------------------------*/PROCEDURE Add_Product_Component ( nPvId IN NUMBER,sOsName IN VARCHAR2,sOrigFilePath IN VARCHAR2,sFileName IN VARCHAR2,sDestFilePath IN VARCHAR2,nByteSize IN NUMBER,sCRCcksum IN VARCHAR2 ) ISnOsId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*/-- OS Name Requirements --IF (sOsName IS NULL) THENRAISE_APPLICATION_ERROR (-20000, 'OsName cannot be NULL.');END IF;-- File Requirements --IF (NOT sFileName IS NULL) THENIF (nByteSize IS NULL) THENRAISE_APPLICATION_ERROR (-20000, 'Byte Size cannot be NULL.');ELSIF (sCRCcksum IS NULL) THENRAISE_APPLICATION_ERROR (-20000, 'CRC CKSUM cannot be NULL.');END IF;END IF;-- Folder Requirements ---- No requirements for now./*-------------------------------------------------------*/-- Get OsIdnOsId := Get_OsId ( sOsName );-- Insert component entryINSERT INTO PRODUCT_COMPONENTS ( PV_ID, OS_ID, FILE_PATH, FILE_NAME, DESTINATION_PATH, BYTE_SIZE, CRC_CKSUM )VALUES (nPvId,nOsId,sOrigFilePath,sFileName,sDestFilePath,nByteSize,sCRCcksum);EXCEPTIONWHEN DUP_VAL_ON_INDEXTHENRAISE_APPLICATION_ERROR (-20000, 'Cannot have duplicate product components.');END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 ) ISnOsId NUMBER;BEGIN/*--------------- Business Rules Here -------------------*//*-------------------------------------------------------*/-- Get OsIdnOsId := Get_OsId ( sOsName );-- Delete component entryDELETEFROM PRODUCT_COMPONENTS pcWHERE pc.PV_ID = nPvIdAND pc.OS_ID = nOsId;END;/*-------------------------------------------------------------------------------------------------------*/FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER ISCode NUMBER;BEGIN-- Get Platform Code --SELECT pf.CODE INTO CodeFROM PLATFORMS pfWHERE UPPER( pf.NAME ) = UPPER( sOsName );RETURN Code;EXCEPTIONWHEN NO_DATA_FOUND THENRAISE_APPLICATION_ERROR (-20000, 'Platform '|| sOsName ||' is not valid. It needs to be added to PLATFORMS table in Release Manager.' );RAISE;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,sWebServer IN VARCHAR2,sMailServer IN VARCHAR2,sMailSender IN VARCHAR2) ISBEGINUPDATE BUILD_SERVICE_CONFIGSET CONFIG = sDatabaseServerWHERE SERVICE = 'DATABASE SERVER';UPDATE BUILD_SERVICE_CONFIGSET CONFIG = sWebServerWHERE SERVICE = 'WEB SERVER';UPDATE BUILD_SERVICE_CONFIGSET CONFIG = sMailServerWHERE SERVICE = 'MAIL SERVER';UPDATE BUILD_SERVICE_CONFIGSET CONFIG = sMailSenderWHERE SERVICE = 'BUILD FAILURE MAIL SENDER';END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue in VARCHAR2 ) ISGBE_ID NUMBER;BEGIN-- Get GBE_IDSELECT SEQ_GBE_ID.NEXTVAL INTO GBE_ID FROM DUAL;INSERT INTO GBE_MACHTYPE (GBE_ID, GBE_VALUE)VALUES( GBE_ID, sGBEValue);END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER ) ISBEGINDELETE FROM GBE_MACHTYPE WHERE GBE_ID = nGBE_ID;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 ) ISBEGINUPDATE GBE_MACHTYPESET GBE_VALUE = sGBEValueWHERE GBE_ID = nGBE_ID;END;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER ) ISnRecordNumber NUMBER;nRconId NUMBER;BEGIN-- Get RCON_IDSELECT SEQ_RCON_ID.NEXTVAL INTO nRconId FROM DUAL;SELECT count(*) INTO nRecordNumberFROM RELEASE_CONFIGWHERE RTAG_ID = nRtagId;IF nRecordNumber = 0 THENINSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)VALUES (nRconId, nRtagId, sDaemonHostname, 'M', nGbeId);ELSEINSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)VALUES (nRconId, nRtagId, sDaemonHostname, 'S', nGbeId);END IF;END;/*-------------------------------------------------------------------------------------------------------*/END PK_BUILDAPI_TEST;/---------------------------------------------------------- DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO--------------------------------------------------------CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (nprojid IN NUMBER,nviewid IN NUMBER,suserlist IN VARCHAR2)ISgroupid NUMBER;/******************************************************************************NAME: ADD_AUTOBUILD_FAILUREPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 11/04/2006 Rupesh Solanki Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: ADD_AUTOBUILD_FAILURESysdate: 11/04/2006Date and Time: 11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/BEGINBEGINSELECT group_email_idINTO groupidFROM autobuild_failureWHERE proj_id = nprojid AND view_id = nviewid;EXCEPTIONWHEN NO_DATA_FOUNDTHEN-- Create Next Sequence Id ---SELECT seq_group_email_id.NEXTVALINTO groupidFROM DUAL;INSERT INTO autobuild_failure(group_email_id, proj_id, view_id)VALUES (groupid, nprojid, nviewid);END;add_view_members (groupid, suserlist);END add_autobuild_failure_info;/---------------------------------------------------------- DDL for Procedure DEPRECATE_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,nUserId IN NUMBER) ISext VARCHAR2(50);BEGIN--Extract the package version extensionSELECT V_EXT into extFROM PACKAGE_VERSIONSWHERE PV_ID = nPvId;-- Deprecate PackageINSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)VALUES (nRtagId, nPkgId, sComments, ext);IF ext IS NOT NULL THENUPDATE RELEASE_CONTENTSET PKG_ID = nPkgId, DEPRECATED_STATE = 6WHERE RTAG_ID = nRtagIdAND PV_ID IN (SELECT PV.PV_IDFROM PACKAGE_VERSIONS PV, PACKAGES PKGWHERE PKG.PKG_ID = PV.PKG_IDAND PV.V_EXT = extAND PKG.PKG_ID = nPkgId);ELSEUPDATE RELEASE_CONTENTSET PKG_ID = nPkgId, DEPRECATED_STATE = 6WHERE RTAG_ID = nRtagIdAND PV_ID IN (SELECT PV.PV_IDFROM PACKAGE_VERSIONS PV, PACKAGES PKGWHERE PKG.PKG_ID = PV.PKG_IDAND PV.V_EXT IS NULLAND PKG.PKG_ID = nPkgId);END IF;UPDATE RELEASE_CONTENTSET PKG_ID = nPkgId, DEPRECATED_STATE = 7WHERE RTAG_ID = nRtagIdAND PV_ID IN ( SELECT DISTINCTqry.PV_IDFROM (SELECT dep.*,LEVEL AS LEVEL_NUMFROM PACKAGE_DEPENDENCIES depSTART WITH dep.DPV_ID IN ( nPvId )CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID) qry,PACKAGES pkg,PACKAGE_VERSIONS pv,RELEASE_CONTENT rcWHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_IDAND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_IDAND rc.DEPRECATED_STATE IS NULL);/* LOG ACTION *//*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/END Deprecate_Package;/---------------------------------------------------------- DDL for Procedure LOG_PROJECT_ACTION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,enumActionTypeName IN VARCHAR2,nUserId IN NUMBER,sAdditionalComments IN VARCHAR2 DEFAULT NULL,nRtagId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */ActionTypeId NUMBER;BEGIN-- Get Action Type FKSELECT act.ACTTYPE_ID INTO ActionTypeIdFROM ACTION_TYPE actWHERE act.NAME = enumActionTypeName;INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);END Log_Project_Action;/---------------------------------------------------------- DDL for Procedure RIPPLE_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (sPvIdList IN VARCHAR2,nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,nUserId IN NUMBER) IS/* ---------------------------------------------------------------------------Version: 4.1--------------------------------------------------------------------------- */BEGINIF (sPvIdList IS NULL) THENRAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );END IF;-- Ripple PackageDELETE FROM DO_NOT_RIPPLEWHERE RTAG_ID = nRtagIdAND PV_ID IN (SELECT *FROM THE (SELECT CAST( IN_LIST_NUMBER( sPvIdList )AS RELMGR_NUMBER_TAB_t )FROM DUAL));/* LOG ACTION */Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );END Ripple_Package;/---------------------------------------------------------- DDL for Procedure DT_SETPROPERTYBYID--------------------------------------------------------CREATE OR REPLACE PROCEDURE "DT_SETPROPERTYBYID" ( PARAM_ID IN NUMBER, PARAM_PROPERTY IN VARCHAR2, PARAM_VALUE IN VARCHAR2, PARAM_LVALUE IN LONG RAW ) AS BEGIN DECLARE X NUMBER(40); BEGIN SELECT COUNT(*) INTO X FROM MICROSOFTDTPROPERTIES WHERE OBJECTID=PARAM_ID AND PROPERTY=PARAM_PROPERTY; IF X = 0 THEN INSERT INTO MICROSOFTDTPROPERTIES (ID, PROPERTY, OBJECTID, VALUE, LVALUE, VERSION) VALUES (MICROSOFTSEQDTPROPERTIES.NEXTVAL, PARAM_PROPERTY, PARAM_ID, PARAM_VALUE, PARAM_LVALUE, 0); ELSE UPDATE MICROSOFTDTPROPERTIES SET VALUE=PARAM_VALUE, LVALUE=PARAM_LVALUE, VERSION=VERSION+1 WHERE OBJECTID=PARAM_ID AND PROPERTY=PARAM_PROPERTY; END IF; END; END DT_SETPROPERTYBYID;/---------------------------------------------------------- DDL for Procedure BASIC_CLONE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,nTOpv_id IN NUMBER,nRtag_id IN NUMBER,nUser_id IN NUMBER,nTOpkg_id IN NUMBER DEFAULT NULL,enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) ISFromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;major NUMBER;minor NUMBER;patch NUMBER;buildn NUMBER;from_vcs_type_id NUMBER;BEGIN------------------------------ Version Control System ------------------------------------------SELECT vcs_type_idINTO from_vcs_type_idFROM package_versions WHERE pv_id = nFROMpv_id;UPDATE package_versionsSET vcs_type_id = from_vcs_type_idWHERE pv_id = nTOpv_id;------------------------------------- Limits ---------------------------------------------------select major_limit, minor_limit, patch_limit, build_number_limitinto major, minor, patch, buildnfrom package_versions where pv_id=nFROMpv_id;UPDATE package_versions SETmajor_limit = major,minor_limit = minor,patch_limit = patch,build_number_limit = buildnWHERE PV_ID = nTOpv_id;------------------------------------- Clone Dependencies ---------------------------------------------------IF NOT nRtag_id IS NULLTHEN-- Auto Update Dependencies --INSERT INTO PACKAGE_DEPENDENCIESSELECT nTOpv_id AS pv_id,DECODE(nUser_id,frc.modifier_id,frc.pv_id,DECODE(frc.dlocked,'Y',frc.pv_id,dep.dpv_id)) AS dpv_id,nTOpkg_id AS pkg_id,dep.dpkg_id,dep.build_type,dep.display_orderFROM PACKAGE_DEPENDENCIES dep,PACKAGE_VERSIONS pv,(/* Full Release Contents used for reference*/SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlockedFROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpvWHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id) frcWHERE dep.pv_id = nFROMpv_idAND dep.dpv_id = pv.pv_idAND pv.pkg_id = frc.pkg_id(+)AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);ELSE-- Clone Dependencies --INSERT INTO PACKAGE_DEPENDENCIESSELECT nTOpv_id AS pv_id,dep.dpv_id,nTOpkg_id AS pkg_id,dep.dpkg_id,dep.build_type,dep.display_orderFROM PACKAGE_DEPENDENCIES depWHERE dep.pv_id = nFROMpv_id;END IF;----------------------------------------- Clone Issues -------------------------------------------------------IF enumISSUES_STATE_IMPORTED IS NULLTHEN/* All Issues */INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notesFROM CQ_ISSUESWHERE pv_id = nFROMpv_id;ELSE/* Outstanding Issues Only */INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notesFROM CQ_ISSUESWHERE pv_id = nFROMpv_idAND iss_state = enumISSUES_STATE_IMPORTED;END IF;------------------------------------ Clone Runtime Dependencies -----------------------------------------------INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_userFROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;--------------------------------------- Clone Additional Notes ------------------------------------------------INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )SELECT an.NOTE_ID,nTOpv_id AS PV_ID,an.NOTE_TITLE,an.NOTE_BODY,an.MOD_DATE,an.MOD_USERFROM ADDITIONAL_NOTES anWHERE an.PV_ID = nFROMpv_id;-------------------------------------------- Clone Unit Tests --------------------------------------------------- Clone only Automatic unit tests --INSERT INTO UNIT_TESTS (TEST_ID,PV_ID,TEST_TYPES_FK,TEST_SUMMARY,COMPLETION_DATE,COMPLETED_BY,RESULTS_URL,RESULTS_ATTACHMENT_NAME,NUMOF_TEST)SELECT ut.TEST_ID,nTOpv_id AS PV_ID,ut.TEST_TYPES_FK,ut.TEST_SUMMARY,Ora_Sysdate AS COMPLETION_DATE,nUser_id AS COMPLETED_BY,ut.RESULTS_URL,ut.RESULTS_ATTACHMENT_NAME,ut.NUMOF_TESTFROM UNIT_TESTS utWHERE ut.PV_ID = nFROMpv_idAND ut.TEST_TYPES_FK IN ( 5, 7 );-- Clone only Interactive Unit Tests --INSERT INTO UNIT_TESTS (TEST_ID,PV_ID,TEST_TYPES_FK,TEST_SUMMARY)SELECT ut.TEST_ID,nTOpv_id AS PV_ID,ut.TEST_TYPES_FK,ut.TEST_SUMMARYFROM UNIT_TESTS utWHERE ut.PV_ID = nFROMpv_idAND ut.TEST_TYPES_FK IN (6);-------------------------------------------- Clone Package Documents ------------------------------------------INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )SELECT nTOpv_id AS PV_ID,pd.test_id,pd.doc_num,pd.doc_id,pd.IS_LATESTFROM PACKAGE_DOCUMENTS pdWHERE pd.PV_ID = nFROMpv_id;-------------------------------------------- Clone Build Environments -----------------------------------------INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )SELECT nTOpv_id AS PV_ID,pkgbe.BE_ID,pkgbe.BUILD_TYPEFROM PACKAGE_BUILD_ENV pkgbeWHERE pkgbe.PV_ID = nFROMpv_id;---------------------------------------------Clone Package Build Info------------------------------------------INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)SELECT nTOpv_id AS PV_ID,pkgbinfo.BM_ID,pkgbinfo.BSA_IDFROM PACKAGE_BUILD_INFO pkgbinfoWHERE pkgbinfo.PV_ID = nFROMpv_id;---------------------------------------------Clone Package Version Processes-----------------------------------INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )SELECT nTOpv_id AS PV_ID,pp.PROC_IDFROM PACKAGE_PROCESSES ppWHERE pp.PV_ID = nFROMpv_id;---------------------------------------------Clone Licencing Associations-----------------------------------PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);---------------------------------------------------------------------------------------------------------------/* LOG ACTION */SELECT pv.PKG_VERSION INTO FromVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = nFROMpv_id;Log_Action ( nTOpv_id, 'clone_from', nUser_id,'Details cloned from: '|| FromVersion );---------------------------------------------------------------------------------------------------------------END Basic_Clone;/---------------------------------------------------------- DDL for Procedure UPDATE_UNIT_TEST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,nPv_id IN NUMBER,nUserId IN NUMBER,sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,sCompletion_date IN VARCHAR2,sDpkg_path IN VARCHAR2,enumTEST_TYPE_AUTOMATIC IN NUMBER,sResults IN VARCHAR2,outFileName OUT VARCHAR2) IS/* ---------------------------------------------------------------------------Version: 3.1.0--------------------------------------------------------------------------- */FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;BEGINIF nTestTypeId = enumTEST_TYPE_AUTOMATIC THENResultsURL := sResults;ELSEIF (sResults <> '') OR ( NOT sResults IS NULL ) THENoutFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;ResultsAttachment := sDpkg_path || '/' || outFileName;END IF;END IF;--- Update Unit Test ---UPDATE UNIT_TESTS SETTEST_SUMMARY = sTest_summary,NUMOF_TEST = sNumof_test,COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),COMPLETED_BY = nUserId,RESULTS_URL = ResultsURL,RESULTS_ATTACHMENT_NAME = ResultsAttachmentWHERE TEST_ID = nTest_idAND PV_ID = nPv_id;END Update_Unit_Test;/---------------------------------------------------------- DDL for Procedure SET_TO_AUTOBUILDABLE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (nrtagid IN NUMBER,spvidlist IN VARCHAR2)IS/******************************************************************************NAME: SET_TO_AUTOBUILDABLEPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 15/12/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: SET_TO_AUTOBUILDABLESysdate: 15/12/2006Date and Time: 15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/npvidcollector relmgr_number_tab_t := relmgr_number_tab_t ();PvId NUMBER;BEGINnpvidcollector := in_list_number2 (spvidlist);UPDATE package_versionsSET is_autobuildable = 'N'WHERE pv_id IN (SELECT pv_idFROM release_contentWHERE rtag_id = nrtagid);FOR i IN 1..npvidcollector.COUNTLOOPPvId := npvidcollector(i);UPDATE package_versionsset is_autobuildable = 'Y'where pv_id = PvId;END LOOP;END set_to_autobuildable;/---------------------------------------------------------- DDL for Procedure LEVEL_N_CONFLICTS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (nnrtag_id IN NUMBER,nnsession_num IN NUMBER,nnrowcnt OUT NUMBER,nniteration IN NUMBER)IS/* ---------------------------------------------------------------------------Version: 3.0.1--------------------------------------------------------------------------- */previteration NUMBER := nniteration - 1;BEGIN/* --------- LEVEL 1 CONFILCTS -----------|| Following states are used:|| 0 -> NOT FOUND|| 1 -> MAJOR|| 2 -> MINOR MINOR*/INSERT INTO temp_env_statesSELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,pv.pv_id, pv.pkg_id, pv.v_ext,DECODE (tes.tes_state, 2, 2, 1) AS MESSAGEFROM package_dependencies dep,package_versions dpv,package_versions pv,release_content rel,temp_env_states tesWHERE rel.pv_id = dep.pv_idAND rel.rtag_id = nnrtag_idAND dep.pv_id = pv.pv_idAND dep.dpv_id = dpv.pv_idAND dpv.pkg_id = tes.pkg_idAND NVL (dpv.v_ext, '|LINK_A_NULL|') =NVL (tes.v_ext, '|LINK_A_NULL|')AND tes.session_num = nnsession_numAND tes.level_num = previterationAND (dep.pv_id, dep.dpv_id) IN/* Remove packages listed in IGNORE_WARNINGS table and|| packages already stored in Temp Table.*/(SELECT pd.pv_id, pd.dpv_idFROM package_dependencies pd, release_content rcWHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id--AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )MINUSSELECT igw.pv_id, igw.dpv_idFROM ignore_warnings igwWHERE igw.rtag_id = nnrtag_id);nnrowcnt := SQL%ROWCOUNT;END level_n_conflicts;/---------------------------------------------------------- DDL for Procedure REMOVE_COMPONENTS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */BEGIN--- Delete From RELEASE_COMPONENTSDELETE FROM RELEASE_COMPONENTSWHERE PV_ID = nPvId;END Remove_Components;/---------------------------------------------------------- DDL for Procedure ADD_COMPONENT--------------------------------------------------------CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */BEGIN--- Insert into RELEASE_COMPONENTSINSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc );END Add_Component;/---------------------------------------------------------- DDL for Procedure ADD_PACKAGE_INTEREST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,nPkgIdList IN VARCHAR2,nUserId IN NUMBER) IS/******************************************************************************NAME: ADD_PACKAGE_INTERESTPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 12/05/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: ADD_PACKAGE_INTERESTSysdate: 12/05/2006Date and Time: 12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/npkgidcollector relmgr_number_tab_t := relmgr_number_tab_t ();nPkgId NUMBER;BEGINnpkgidcollector := in_list_number2 (nPkgIdList);FOR i IN 1..npkgidcollector.COUNTLOOPnPkgId := npkgidcollector(i);--- Insert into PACKAGE_INTEREST TABLEINSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)VALUES(nProjId, nPkgId, nUserId);END LOOP;END ADD_PACKAGE_INTEREST;/---------------------------------------------------------- DDL for Procedure UNLOCK_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Author: Rupesh SolankiVersion: 4.0--------------------------------------------------------------------------- */STATE CHAR;BEGINSELECT DLOCKED INTO STATEFROM PACKAGE_VERSIONSWHERE PV_ID = nPvId;IF STATE = 'A' THEN --It was made official for autobuilds-- Unlock PackageUPDATE PACKAGE_VERSIONS pv SETpv.DLOCKED = 'P'WHERE pv.PV_ID = nPvId;ELSE-- Unlock PackageUPDATE PACKAGE_VERSIONS pv SETpv.DLOCKED = 'N'WHERE pv.PV_ID = nPvId;END IF;/* LOG ACTION */Log_Action ( nPvId, 'unlock_package', nUserId );END Unlock_Package;/---------------------------------------------------------- DDL for Procedure REMOVE_PROJECT_VIEW_OWNER--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,nViewId IN NUMBER,sUserIdList IN VARCHAR2,nUserId IN NUMBER ) ISGroupId NUMBER;/******************************************************************************NAME: UPDATE_VIEWPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 10/04/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: UPDATE_VIEWSysdate: 10/04/2006Date and Time: 10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/BEGINSELECT GROUP_EMAIL_ID into GroupIdFROM AUTOBUILD_FAILUREWHERE PROJ_ID = nProjIdAND VIEW_ID = nViewId;DELETE FROM MEMBERS_GROUPWHERE GROUP_EMAIL_ID = GroupIdAND USER_ID IN (SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ));END REMOVE_PROJECT_VIEW_OWNER;/---------------------------------------------------------- DDL for Procedure DEPLOY_TO_RELEASE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS/************************************************************************************************************************************************************/CURSOR curInfo ISSELECT DISTINCTqry.DPV_IDFROM (SELECT dep.*,LEVEL AS LEVEL_NUMFROM PACKAGE_DEPENDENCIES depSTART WITH dep.PV_ID IN (69124,63479,60048,49566,49562,54351,63560,54360,46053,59753,97060,97061,100883,78236,75241,92371,92372,105682,135506,127204,135615,136498,137571,61534,76540,96787,133102,96770,96771,116692,133768,61537,88935,110216,96797,69469,98123,111626,96802,100289,97233,97623,135801,69700,77808,43026,77809,43027,100825,126854,105589,96405,102105,133770,134408,91177,91179,96822,96824,48031,78965,78936,78935,79114,76620,125164,61804,96826,61977,67592,72594,134415,135804,65097,64850,64851,64879,64881,64882,64884,67612,67613,67614,67615,68501,68502,68503,68516,68518,68519,68521,71974,68659,69764,68662,68661,68757,69765,69766,69767,71975,71976,71977,71978,71979,71980,75149,71982,71983,75153,75158,71986,75160,75161,75162,72418,72419,71987,71988,71990,75164,72420,72421,72423,72424,72425,75165,75181,75182,83285,75184,75201,75220,75240,75260,75280,75242,76320,75320,76340,76321,82031,76341,76342,76344,76345,76806,76350,76810,76811,76360,76361,76362,76380,76637,76638,76639,76647,76649,76812,76650,78261,76815,77603,76818,76846,76847,76848,76849,77604,77606,77016,77607,77608,77609,78518,77671,77610,78519,78520,78205,78206,77795,78262,78263,78666,78521,78669,78767,78768,78770,78771,82032,79471,78772,82033,80856,80210,80898,82449,80211,80212,80214,80215,80216,80611,80217,82034,82035,80749,80750,82036,94266,82037,82038,82039,82040,82041,82042,82043,82044,82045,82046,82450,82296,82297,82451,82047,82298,82299,82300,82452,82453,82454,82455,82456,82457,82769,82458,82459,82770,82460,82461,82771,83286,85069,83543,83544,83287,85070,84959,85071,85072,84960,85073,85074,84975,85194,85075,85195,85196,85197,85198,85199,94267,85231,85237,94268,94269,94270,94271,94273,94274,94275,94276,94277,94278,94279,94280,94281,94282,94283,94284,94285,94286,94287,94288,94289,94290,94291,94292,94293,94294,94295,94296,94297,94298,94299,94300,94301,94302,94303,94304,94305,94306,94307,94308,94309,94310,94311,94312,94313,94314,94315,94316,94634,94317,94635,97035,94319,94320,94636,94637,94322,96536,96552,96554,96555,96556,96568,96569,96570,96571,96572,96573,96574,96575,96576,96577,96578,96579,96580,96581,96582,96583,96584,96585,96586,96818,97435,96819,96820,97599,97436,97437,97438,97439,97440,97434,97723,97640,97641,97642,97724,97725,97729,97743,97825,98097,98098,98099,98100,97999,98049,98101,98102,98103,99506,98268,98207,99507,99508,99509,99159,99510,99511,99512,102883,99513,99514,100243,99515,99880,99562,99563,99676,99677,99678,99881,99882,99883,99884,100244,100245,100623,100247,100624,100625,100626,100885,100719,100886,100887,100888,100889,100890,100990,100991,101301,101603,110065,101605,102180,102627,102181,102182,102183,102184,102185,102186,102187,102188,102189,102190,102191,104378,102192,104379,102193,102379,102380,102381,102884,102410,102411,102628,102465,102629,102630,102885,102886,102887,104380,104381,104382,104383,104384,104385,104387,110063,104389,106409,104561,104594,104660,105088,105089,105090,105091,105093,105097,105673,105768,106410,109314,106173,110064,137890,106433,106960,109080,111665,122015,110954,116763,110066,116764,110123,111867,110713,116765,111666,116869,111667,111668,116766,116767,115142,115143,121477,113924,114594,116768,115144,116769,115170,115172,115171,115644,120042,120043,116092,116870,116871,118382,116872,116876,120044,118026,119364,121485,120045,120416,121478,120417,122016,124577,129495,123602,123600,124578,124579,124580,124581,124784,125238,127096,127097,129496,129497,128036,128415,129498,129499,129914,130063,130064,130680,130681,131333,131488,133886,132219,132477,132478,133887,136537,136552,136538,136539,136540,136553,136554,136555,137869,85076,80857,62418,64889,64890,64891,64893,68666,68667,68668,68670,68671,68672,68673,72019,72020,72023,72024,72227,77745,77746,77747,77748,77749,77750,77751,77798,78773,80751,82464,82465,83288,92874,92875,92876,92877,92878,94122,94123,96290,96882,96883,97554,97514,97726,98008,98009,98051,99193,100248,99608,100249,100250,100670,100671,100672,101059,101061,101607,102194,102195,102412,102413,102633,104390,104391,106421,104560,104595,105767,106174,106426,109081,122017,137851,110712,116873,115145,115146,114597,115645,116095,120046,123551,122018,124584,124585,129500,129501,129502,128417,129503,129915,130066,131487,133897,133882,133883,136559,85078,100673,63475,78264,78265,78266,78267,78775,80753,94118,94119,94120,94121,96888,100251,100252,102631,102590,102632,65229,43366,69139,132551,59764,127129,101196,96830,61535,105433,96833,96835,96839,83795,77723,126868,99146,70188,117523,117524,117525,99237,100854,100855,137314,137315,96868,138232,138233,69709,96907,130854,119208,69520,124772,96878,60049,47875,70354,59371,54558,59849,33893,43087,43134,33894,60054,24345,49563,49558,97474,84982,31770,30950,49926,60050,52670,59846,59891,30966,59744,61988,59745,59881,59746,59741,47449,59747,64101,63480,63562,105382,105383,60052,48955,49561,49556,47401,65896,65906,65909,65985,108670,68697,68698,59754,59752,59751,62526,59805,59799,66981,46050,59756,46044,59806,46051,59807,82290,66980,59808,46046,61536,88834,70260,111081,105409,66093,66095,66094,47440,65778,59750,56748,99152,78409)CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID) qry,PACKAGES pkg,PACKAGE_VERSIONS pvWHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_IDand (pv.is_patch is null or pv.is_patch = 'N');recInfo curInfo%ROWTYPE;BEGINOPEN curInfo;FETCH curInfo INTO recInfo;WHILE curInfo%FOUNDLOOPinsert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);FETCH curInfo INTO recInfo;END LOOP;CLOSE curInfo;END DEPLOY_TO_RELEASE;/---------------------------------------------------------- DDL for Procedure TOUCH_RELEASE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS/* ---------------------------------------------------------------------------The purpose of this procedure is to flag in the database that the specifiedrelease has changed to an extent that the procedure Rebuild_Environmentshould be called at the next opportunity in order that the package stateicons are all re-evaluated.The package state icons are controlled using the pkg_state column in therelease_content table, and Rebuild_Environment updates that column.It will be through user action in the website that Rebuild_Environment willbe called, for example:a) when setting/clearing ignore warnings checkboxesb) when someone opens a page upon a rtag/pvid and rebuild_en flag is setc) when someone opens the build order report formd) when someone modifies dependencies of a package+ other scenarios (?)--------------------------------------------------------------------------- */BEGIN-- Touch Release for RebuildUPDATE RELEASE_TAGS rt SETrt.REBUILD_ENV = 'Y',rt.REBUILD_STAMP = 0WHERE rt.RTAG_ID = nRtagId;END Touch_Release;/---------------------------------------------------------- DDL for Procedure UNRIPPLE_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (sPvIdList IN VARCHAR2,nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,nUserId IN NUMBER) IS/* ---------------------------------------------------------------------------Version: 4.1--------------------------------------------------------------------------- */oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();BEGINIF (sPvIdList IS NULL) THENRAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );END IF;oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );-- UnRipple PackageINSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )SELECT nRtagId, pv.PV_IDFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID IN (SELECT *FROM TABLE (CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )));/* LOG ACTION */Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );END UnRipple_Package;/---------------------------------------------------------- DDL for Procedure DT_DROPUSEROBJECTBYID--------------------------------------------------------CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;/---------------------------------------------------------- DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (nPvId IN NUMBER,nRtagId IN NUMBER,nUserId IN NUMBER,nrootCausePvId IN NUMBER,srootCause IN VARCHAR2,srootFile IN VARCHAR2) ISReleaseLocation VARCHAR2(4000);BEGIN-- UnRipple Packagedelete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagIdAND rt.PROJ_ID = proj.PROJ_ID;/* LOG ACTION */Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );END UnRipple_Package_Indirect;/---------------------------------------------------------- DDL for Procedure TO_INSERT_VTREE_ID--------------------------------------------------------CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS/******************************************************************************NAME: TO_INSERT_VTREE_IDPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 2/02/2007 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: TO_INSERT_VTREE_IDSysdate: 2/02/2007Date and Time: 2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/VTreeId NUMBER;CURSOR curInfo ISSELECT RTAG_IDFROM RELEASE_TAGSWHERE VTREE_ID IS NULL;recInfo curInfo%ROWTYPE;BEGINOPEN curInfo;FETCH curInfo INTO recInfo;WHILE curInfo%FOUNDLOOPSELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;UPDATE RELEASE_TAGSSET VTREE_ID = VTreeIdWHERE RTAG_ID = recInfo.RTAG_ID;FETCH curInfo INTO recInfo;END LOOP;CLOSE curInfo;END TO_INSERT_VTREE_ID;/---------------------------------------------------------- DDL for Procedure CHANGE_RELEASE_MODE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */cMode CHAR(1) := NULL;nProjId NUMBER;BEGIN/*Author: Rupesh SolankiModified: 24th October 2006Reason: Added the archive mode state into Release Manager|| 1 - Open Mode|| 2 - Restrictive Mode|| 3 - Closed Mode|| 4 - CCB Mode|| 5 - Archive Mode*/-- Get project IdSELECT rt.PROJ_ID INTO nProjIdFROM RELEASE_TAGS rtWHERE rt.RTAG_ID = nRtagId;IF nModeCode = 1 THEN-- Open ModecMode := 'N';/* LOG ACTION */Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );ELSIF nModeCode = 2 THEN-- Restrictive ModecMode := 'R';/* LOG ACTION */Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );ELSIF nModeCode = 3 THEN-- Closed ModecMode := 'Y';/* LOG ACTION */Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId );ELSIF nModeCode = 4 THEN-- CCB ModecMode := 'C';/* LOG ACTION */Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId );ELSIF nModeCode = 5 THEN-- Archive ModecMode := 'A';/* LOG ACTION */Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId );END IF;-- Now update tableIF NOT cMode IS NULL THENUPDATE RELEASE_TAGS rt SETrt.OFFICIAL = cModeWHERE rt.RTAG_ID = nRtagId;END IF;END CHANGE_RELEASE_MODE;/---------------------------------------------------------- DDL for Procedure UPDATE_UNIT_TEST_TEST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,nPv_id IN NUMBER,nUserId IN NUMBER,sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,sCompletion_date IN VARCHAR2,sDpkg_path IN VARCHAR2,enumTEST_TYPE_AUTOMATIC IN NUMBER,sResults IN VARCHAR2,outFileName OUT VARCHAR2) IS/* ---------------------------------------------------------------------------Version: 3.1.0--------------------------------------------------------------------------- */FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;BEGINIF nTestTypeId = enumTEST_TYPE_AUTOMATIC THENResultsURL := sResults;ELSEIF (sResults <> '') OR ( NOT sResults IS NULL ) THENoutFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;ResultsAttachment := sDpkg_path || '/' || outFileName;END IF;END IF;/* IF (sResults <> '') OR ( NOT sResults IS NULL ) THENoutFileName := FILENAME_PREFIX || newID ||'_'|| sResults;sResults_url:= 'doc' || '/' ||;END IF;*/--- Update Unit Test ---UPDATE UNIT_TESTS SETTEST_SUMMARY = sTest_summary,NUMOF_TEST = sNumof_test,COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),COMPLETED_BY = nUserId,RESULTS_URL = ResultsURL,RESULTS_ATTACHMENT_NAME = ResultsAttachmentWHERE TEST_ID = nTest_idAND PV_ID = nPv_id;END Update_Unit_Test_Test;/---------------------------------------------------------- DDL for Procedure NEW_VERSION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,NNsetto_pv_id IN NUMBER DEFAULT NULL,NNrtag_id IN NUMBER,NNuser_id IN NUMBER,enumISSUES_STATE_IMPORTED IN NUMBER,retPv_id OUT NUMBER ) ISTO BE REMOVED !!!/* ---------------------------------------------------------------------------Version: 3.3--------------------------------------------------------------------------- */ReleaseLocation VARCHAR2(4000);origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;origDlocked PACKAGE_VERSIONS.dlocked%TYPE;SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;nIssuesTypes NUMBER;CURSOR package_versions_cur ISSELECT pv.pv_id, pv.is_patchFROM PACKAGE_VERSIONS pvWHERE pv.pkg_version = SSpkg_versionAND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );package_versions_rec package_versions_cur%ROWTYPE;CURSOR clone_package_versions_cur ISSELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;clone_package_versions_rec clone_package_versions_cur%ROWTYPE;BEGINIF NNsetto_pv_id IS NULLTHEN-- SetToPv_id is not supplied, hence proceed./* ---------------------------------------------------- *//* Find id package_version exists *//* ---------------------------------------------------- */OPEN package_versions_cur;FETCH package_versions_cur INTO package_versions_rec;IF package_versions_cur%NOTFOUNDTHENSELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );OPEN clone_package_versions_cur;FETCH clone_package_versions_cur INTO clone_package_versions_rec;origPkg_id := clone_package_versions_rec.pkg_id;origDlocked := clone_package_versions_rec.dlocked;CLOSE clone_package_versions_cur;-- Clone Package Version Details --INSERT INTO PACKAGE_VERSIONS ( pv_id, pkg_id, pkg_version, dlocked, created_stamp, creator_id, modified_stamp, modifier_id, V_MM, V_NMM, V_EXT,src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )SELECT retPv_id AS pv_id,origPkg_id AS pkg_id,SSpkg_version AS pkg_version,'N' AS dlocked,Ora_Sysdate AS created_stamp,NNuser_id AS creator_id,Ora_Sysdatetime AS modified_stamp,NNuser_id AS modifier_id,SSV_MM AS V_MM,SSV_NMM AS V_NMM,SSV_EXT AS V_EXT,pv.src_path,pv.pv_description,pv.PV_OVERVIEW,NNorig_pv_id AS LAST_PV_ID,pv.owner_id,pv.IS_DEPLOYABLE,pv.IS_BUILD_ENV_REQUIREDFROM PACKAGE_VERSIONS pvWHERE pv.pv_id = NNorig_pv_id;-- Set Issues Type for cloning ---IF origDlocked = 'Y'THENnIssuesTypes := enumISSUES_STATE_IMPORTED;ELSEnIssuesTypes := NULL;END IF;Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );ELSEretPv_id := package_versions_rec.pv_id;END IF;CLOSE package_versions_cur;ELSEretPv_id := NNsetto_pv_id;END IF;/* ---------------------------------------------------- *//* Insert into Release Contents (EXCLUDE PATCHES) *//* ---------------------------------------------------- */IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THENUPDATE RELEASE_CONTENTSET pv_id = retPv_id,insert_stamp = Ora_Sysdate,insertor_id = NNuser_idWHERE rtag_id = NNrtag_idAND pv_id = NNorig_pv_id;/* LOG ACTION */SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,VTREES vt,RELEASE_TAGS rtWHERE rt.VTREE_ID = vt.VTREE_IDAND vt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = NNrtag_id;Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );END IF;END New_Version;/---------------------------------------------------------- DDL for Procedure ADD_RUNTIME_DEPENDENCY--------------------------------------------------------CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,SSrtd_name IN PACKAGES.pkg_name%TYPE,SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,NNuser_id IN NUMBER) IS/* ---------------------------------------------------------------------------Version: 3.1--------------------------------------------------------------------------- */retRTD_ID NUMBER;CURSOR rtd_cur ISSELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;rtd_rec rtd_cur%ROWTYPE;BEGIN--- Seed database with package_name and version if required ---Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );OPEN rtd_cur;FETCH rtd_cur INTO rtd_rec;IF rtd_cur%NOTFOUNDTHEN/* Make sure it does not exists already as runtime dependency */--- Add new Runtime Dependency ---INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )VALUES ( NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );/* LOG ACTION */Log_Action ( NNpv_id, 'runtime_add', NNuser_id,'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );END IF;END Add_Runtime_Dependency;/---------------------------------------------------------- DDL for Procedure LEVEL_ONE_CONFLICTS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (nnrtag_id IN NUMBER,nnsession_num IN NUMBER)ISBEGIN/* --------- LEVEL 1 CONFILCTS -----------|| Following states are used:|| 0 -> NOT FOUND|| 1 -> MAJOR|| 2 -> MINOR MINOR*/INSERT INTO temp_env_statesSELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,err.pv_id, errpkg.pkg_id, errpkg.v_ext,DECODE (frc.v_nmm,NULL, 0,errpv.v_nmm, DECODE (frc.v_mm,errpv.v_mm, NULL,2),1) AS MESSAGEFROM (/* Full Release Contents used for reference*/SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,rpv.pkg_version, rpv.v_nmm, rpv.v_mm,(SELECT COUNT(*)FROM ADVISORY_RIPPLE avrWHERE avr.rtag_id = rel.rtag_idAND avr.pv_id = rel.pv_id) AS IsAvrFROM release_content rel,package_versions rpvWHERE rel.pv_id = rpv.pv_idAND rtag_id = nnrtag_id) frc,(/* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will notnecessarily be satisfied in the release) */SELECT dep.pv_id, dep.dpv_id AS err_dpvFROM package_dependencies dep,package_versions dep_dpvWHERE dep.dpv_id = dep_dpv.pv_idAND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)MINUS/* MINUS Dependencies to be ignored */SELECT igw.pv_id, igw.dpv_id AS err_dpvFROM ignore_warnings igw,package_versions igw_dpvWHERE igw.dpv_id = igw_dpv.pv_idAND igw.rtag_id = nnrtag_id) err,package_versions errpkg,package_versions errpvWHERE err.err_dpv = errpv.pv_idAND errpv.pkg_id = frc.pkg_id(+)AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)AND err.pv_id = errpkg.pv_idAND frc.IsAvr = 0;END level_one_conflicts;/---------------------------------------------------------- DDL for Procedure OLE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "OLE"IS retval VARCHAR2(40);BEGIN retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 )DBMS_OUTPUT.PUT_LINE(retval);/---------------------------------------------------------- DDL for Procedure SYNC_PROJECTS_NEW_VERSION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id IN NUMBER,sSyncRtagsInList IN VARCHAR2,nUser_id IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */CURSOR sync_rtags_cur ISSELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_idFROM release_content rc,package_versions pv,package_versions opvWHERE rc.pv_id = pv.pv_idAND opv.pkg_id = pv.pkg_idAND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')AND opv.pv_id = nPv_idAND rtag_id IN ( SELECT *FROM THE (SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )FROM dual));sync_rtags_rec sync_rtags_cur%ROWTYPE;BEGINOPEN sync_rtags_cur;FETCH sync_rtags_cur INTO sync_rtags_rec;WHILE sync_rtags_cur%FOUNDLOOPDELETE FROM RELEASE_CONTENTWHERE rtag_id = sync_rtags_rec.rtag_idAND pv_id = sync_rtags_rec.pv_id;INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )VALUES ( sync_rtags_rec.rtag_id,nPv_id,sync_rtags_rec.BASE_VIEW_ID,Ora_Sysdate,nUser_id,0);-- UPDATE RELEASE_CONTENT-- SET pv_id = nPv_id,-- insert_stamp = Ora_Sysdate,-- insertor_id = nUser_id-- WHERE rtag_id = sync_rtags_rec.rtag_id-- AND pv_id = sync_rtags_rec.pv_id;FETCH sync_rtags_cur INTO sync_rtags_rec;END LOOP;CLOSE sync_rtags_cur;END Sync_Projects_New_Version;/---------------------------------------------------------- DDL for Procedure LOCK_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */BEGIN-- Lock PackageUPDATE PACKAGE_VERSIONS pv SETpv.DLOCKED = 'Y'WHERE pv.PV_ID = nPvId;/* LOG ACTION */Log_Action ( nPvId, 'lock_package', nUserId );END Lock_Package;/---------------------------------------------------------- DDL for Procedure UPDATE_PACKAGE_STATES--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,NNsession_num IN NUMBER ) IS/* ============= STATE RULES =================== *//*MNR MRR MN MR | pkg_state------------------------------------0 0 0 0 | OK0 0 0 1 | MAJOR0 0 1 0 | MINOR0 0 1 1 | MAJOR------------------------------------0 1 0 0 | MAJOR_READY0 1 0 1 | MAJOR0 1 1 0 | MAJOR0 1 1 1 | MAJOR------------------------------------1 0 0 0 | MINOR_READY1 0 0 1 | MAJOR1 0 1 0 | MINOR1 0 1 1 | MAJOR------------------------------------1 1 0 0 | MAJOR_READY1 1 0 1 | MAJOR1 1 1 0 | MAJOR1 1 1 1 | MAJOR------------------------------------*/BEGIN/*----------------------------------------------|| MINOR READY*/----------------------------------------------UPDATE release_contentSET pkg_state = 4WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT DISTINCT pv_idFROM temp_env_statesWHERE session_num = NNsession_numAND level_num = 1AND tes_state = 2);/*----------------------------------------------|| MAJOR READY*/----------------------------------------------UPDATE release_contentSET pkg_state = 3WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT DISTINCT pv_idFROM temp_env_statesWHERE session_num = NNsession_numAND level_num = 1AND tes_state IN (0,1));/*----------------------------------------------|| MINOR*/----------------------------------------------UPDATE release_contentSET pkg_state = 2WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT DISTINCT pv_idFROM temp_env_statesWHERE session_num = NNsession_numAND level_num >= 2AND tes_state = 2MINUSSELECT pv_idFROM release_contentWHERE rtag_id = NNrtag_idAND pkg_state = 3);/*----------------------------------------------|| MAJOR*/----------------------------------------------UPDATE release_contentSET pkg_state = 1WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT DISTINCT pv_idFROM temp_env_statesWHERE session_num = NNsession_numAND level_num >= 2AND tes_state IN (0,1)/* MAJOR EXCEPTION - When package has Major Ready and Minor */UNIONSELECT DISTINCT tes.pv_idFROM temp_env_states tes,release_content rcWHERE tes.session_num = NNsession_numAND tes.level_num >= 2AND tes.tes_state = 2AND rtag_id = NNrtag_idAND rc.pv_id = tes.pv_idAND rc.pkg_state = 3);/*----------------------------------------------|| OK*/----------------------------------------------UPDATE release_contentSET pkg_state = 0WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT rc.pv_idFROM release_content rcWHERE rc.rtag_id = NNrtag_idAND NOT rc.pv_id IN(SELECT DISTINCT pv_idFROM temp_env_states WHERE session_num = NNsession_num));Update_Deprecation_State (NNrtag_id);/*----------------------------------------------|| PEGGED VERSIONS DEPENDENT*/----------------------------------------------UPDATE release_contentSET pkg_state = 10WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT DISTINCT pv_idFROM pegged_versions pegvWHERE pegv.rtag_id = NNrtag_id);/*----------------------------------------------|| ADVISORY RIPPLE*/----------------------------------------------UPDATE release_contentSET pkg_state = 8WHERE rtag_id = NNrtag_idAND pv_id IN(SELECT DISTINCT pv_idFROM advisory_ripple arWHERE ar.rtag_id = NNrtag_id)AND pv_id IN(SELECT DISTINCT pv_idFROM release_content rcWHERE rc.rtag_id = NNrtag_id);END Update_Package_States;/---------------------------------------------------------- DDL for Procedure REMOVE_DOCUMENT--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;BEGIN-- Get Doc NumSELECT pd.DOC_NUM INTO DocNumberFROM PACKAGE_DOCUMENTS pdWHERE pd.PV_ID = nPvIdAND pd.DOC_ID = nDocId;-- Delete DocumentDELETEFROM PACKAGE_DOCUMENTS pdWHERE pd.PV_ID = nPvIdAND pd.DOC_ID = nDocId;/* LOG ACTION */Log_Action ( nPvId, 'document_remove', nUserId,'Document number: '|| DocNumber );END Remove_Document;/---------------------------------------------------------- DDL for Procedure SPLIT_VERSION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE ) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;version_components VERSION_COMPONENTS_TYPE;lastDot NUMBER := 0;currDot NUMBER := 0;BEGINcurrDot := INSTR ( SSpkg_version, '.', -1 ); -- Find 1st dot from the rightIF ( currDot > 0 )THEN-- YES dot separator found --SSV_EXT := GET_V_EXT( SSpkg_version );IF NOT SSV_EXT IS NULLTHENlastDot := currDot;currDot := INSTR ( SSpkg_version, '.', -1, 2 ); -- Find 2nd dot from the rightIF ( currDot > 0 )THEN-- XXXX.M.ESSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;ELSE-- XXXX.ESSV_MM := NULL;SSV_NMM := SSpkg_version;END IF;ELSE-- XXXX.MSSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );END IF;ELSE-- NO dot separator found ---- XXXXXXSSV_MM := NULL;SSV_NMM := SSpkg_version;SSV_EXT := NULL;END IF;END Split_Version;/---------------------------------------------------------- DDL for Procedure ADD_PACKAGE_INTEREST_TEST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,nPkgIdList IN VARCHAR2,nUserId IN NUMBER) IS/******************************************************************************NAME: ADD_PACKAGE_INTERESTPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 12/05/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: ADD_PACKAGE_INTERESTSysdate: 12/05/2006Date and Time: 12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/npkgidcollector relmgr_number_tab_t := relmgr_number_tab_t ();nPkgId NUMBER;BEGINnpkgidcollector := in_list_number2 (nPkgIdList);FOR i IN 1..npkgidcollector.COUNTLOOPnPkgId := npkgidcollector(i);--- Insert into PACKAGE_INTEREST TABLEINSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)VALUES(nProjId, nPkgId, nUserId);END LOOP;END ADD_PACKAGE_INTEREST_TEST;/---------------------------------------------------------- DDL for Procedure CLONED_PROCESSES--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES"ISproc_id NUMBER;/******************************************************************************NAME: DELETE_DO_NOT_RIPPLEPURPOSE: TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGEIS RELEASEDREVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 21/04/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: DELETE_DO_NOT_RIPPLESysdate: 21/04/2006Date and Time: 21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR ripple_curISselect distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;ripple_rec ripple_cur%ROWTYPE;BEGINOPEN ripple_cur;FETCH ripple_curINTO ripple_rec;WHILE ripple_cur%FOUNDLOOPselect deployment_manager.seq_proc_id.nextval into proc_id from dual;insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE)values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);FETCH ripple_curINTO ripple_rec;END LOOP;END CLONED_PROCESSES;/---------------------------------------------------------- DDL for Procedure ADD_VIEW_MEMBERS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS/******************************************************************************NAME: ADD_VIEW_MEMBERSPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 11/04/2006 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: ADD_VIEW_MEMBERSSysdate: 11/04/2006Date and Time: 11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR user_cur ISSELECT u.USER_IDFROM USERS uWHERE u.USER_ID IN (SELECT *FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ));user_rec user_cur%ROWTYPE;BEGINOPEN user_cur;FETCH user_cur INTO user_rec;WHILE user_cur%FOUNDLOOPINSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)VALUES ( nGroupId, user_rec.USER_ID);FETCH user_cur INTO user_rec;END LOOP;END ADD_VIEW_MEMBERS;/---------------------------------------------------------- DDL for Procedure RESET_IGNORE_WARNINGS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS/* ---------------------------------------------------------------------------Version: 5.0--------------------------------------------------------------------------- */oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();BEGINoPvIdCollector := IN_LIST_NUMBER ( sPvIdList );-- Remove Ignore WarningsDELETEFROM ignore_warningsWHERE (rtag_id, pv_id, dpv_id) IN(SELECT igw.rtag_id, igw.pv_id, igw.dpv_idFROM ignore_warnings igw,package_versions dpv,package_versions pvWHERE igw.dpv_id = dpv.pv_idAND igw.rtag_id = nRTagIdAND dpv.pkg_id = pv.pkg_idAND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) ));END Reset_Ignore_Warnings;/---------------------------------------------------------- DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO--------------------------------------------------------CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS/******************************************************************************NAME: INSERT_INTO_PACKAGE_BUILD_INFOPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 6/12/2006 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: INSERT_INTO_PACKAGE_BUILD_INFOSysdate: 6/12/2006Date and Time: 6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR curInfo ISSELECT PV_IDFROM PACKAGE_BUILD_ENVWHERE BE_ID IN (11, 12);recInfo curInfo%ROWTYPE;BEGINOPEN curInfo;FETCH curInfo INTO recInfo;WHILE curInfo%FOUNDLOOPINSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )VALUES( recInfo.PV_ID, 2, 5);UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;FETCH curInfo INTO recInfo;END LOOP;CLOSE curInfo;END INSERT_INTO_PACKAGE_BUILD_INFO;/---------------------------------------------------------- DDL for Procedure UPDATE_ADDITIONAL_NOTE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,pnPv_id IN NUMBER,psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,pnUser_id IN NUMBER,outErrCode OUT NUMBER) IS/* ---------------------------------------------------------------------------Version: 3.0.1--------------------------------------------------------------------------- */newID NUMBER;/* Disallow duplicate Note Titles */CURSOR an_duplicate_cur ISSELECT COUNT(*) AS cnt_noteFROM ADDITIONAL_NOTESWHERE pv_id = pnPv_idAND note_id != pnNote_idAND note_title = psNote_title;an_duplicate_rec an_duplicate_cur%ROWTYPE;BEGINoutErrCode := -1; -- Set default return error code to ERROR stateOPEN an_duplicate_cur;FETCH an_duplicate_cur INTO an_duplicate_rec;IF an_duplicate_rec.cnt_note < 1THEN--- Update Additional Note ---UPDATE ADDITIONAL_NOTES SETnote_title = psNote_title,note_body = psNote_body,mod_date = Ora_Sysdate,mod_user = pnUser_idWHERE note_id = pnNote_idAND pv_id = pnPv_id;outErrCode := 0; -- Set return to SUCCESSEND IF;CLOSE an_duplicate_cur;END Update_Additional_Note;/---------------------------------------------------------- DDL for Procedure NEW_UNIT_TEST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,sDpkg_path IN VARCHAR2,sResults IN VARCHAR2,sCompletion_date IN VARCHAR2,nCompleted_by IN NUMBER,enumTEST_TYPE_AUTOMATIC IN NUMBER,enumTEST_TYPE_NOT_DONE IN NUMBER,outFileName OUT VARCHAR2) IS/* ---------------------------------------------------------------------------Version: 3.2.0--------------------------------------------------------------------------- */FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';newID NUMBER;ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;BEGIN-- Get new ID --SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THENResultsURL := sResults;ELSEIF (sResults <> '') OR ( NOT sResults IS NULL ) THENoutFileName := FILENAME_PREFIX || newID ||'_'|| sResults;ResultsAttachment := sDpkg_path || '/' || outFileName;END IF;END IF;-- Remove NOT_DONE entry if existsDELETE FROM UNIT_TESTSWHERE pv_id = nPv_idAND test_types_fk = enumTEST_TYPE_NOT_DONE;--- Add Additional Note ---INSERT INTO UNIT_TESTS ( TEST_ID,PV_ID,TEST_TYPES_FK,TEST_SUMMARY,COMPLETION_DATE,COMPLETED_BY,RESULTS_URL,RESULTS_ATTACHMENT_NAME,NUMOF_TEST )VALUES (newID,nPv_id,nTestTypeId,sTest_summary,TO_DATE( sCompletion_date,'DD/MM/YYYY' ),nCompleted_by,ResultsURL,ResultsAttachment,sNumOfTest );END New_Unit_Test;/---------------------------------------------------------- DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)ISAuto CHAR;/******************************************************************************NAME: SWITCH_REPRODUCIBLE_PACKAGEPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 14/12/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: SWITCH_REPRODUCIBLE_PACKAGESysdate: 14/12/2006Date and Time: 14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/BEGINSELECT IS_AUTOBUILDABLE into AutoFROM PACKAGE_VERSIONSWHERE PV_ID = nPvId;IF Auto = 'N' ThenUPDATE PACKAGE_VERSIONSSET IS_AUTOBUILDABLE = 'Y'WHERE PV_ID = nPvId;/* LOG ACTION */Log_Action ( nPvId, 'reproducible_package', nUserId );ElseUPDATE PACKAGE_VERSIONSSET IS_AUTOBUILDABLE = 'N'WHERE PV_ID = nPvId;/* LOG ACTION */Log_Action ( nPvId, 'unreproducible_package', nUserId );End If;END SWITCH_REPRODUCIBLE_PACKAGE;/---------------------------------------------------------- DDL for Procedure LOG_DAEMON_ACTION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,enumActionTypeName IN VARCHAR2,nUserId IN NUMBER,sAdditionalComments IN VARCHAR2 DEFAULT NULL ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */ActionTypeId NUMBER;BEGIN-- Get Action Type FKSELECT act.ACTTYPE_ID INTO ActionTypeIdFROM ACTION_TYPE actWHERE act.NAME = enumActionTypeName;INSERT INTO DAEMON_ACTION_LOGVALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );END Log_Daemon_Action;/---------------------------------------------------------- DDL for Procedure UPDATE_MISC_VIEW--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS/******************************************************************************NAME: UPDATE_MISC_VIEWPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 16/03/2007 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: UPDATE_MISC_VIEWSysdate: 16/03/2007Date and Time: 16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR view_cur /*Create a record set to store the ripple data*/ISSELECT pkg.pkg_id, rc.base_view_idFROM package_versions pv, packages pkg, release_content rcwhere rc.rtag_id = 2362and rc.pv_id = pv.pv_idand pv.pkg_id = pkg.pkg_id;view_rec view_cur%ROWTYPE;BEGINOPEN view_cur;FETCH view_curINTO view_rec;WHILE view_cur%FOUNDLOOPupdate release_contentset base_view_id = view_rec.base_view_idwhere rtag_id = 8027and pv_id IN(select pv.pv_id from release_content rc, package_versions pvwhere rc.rtag_id = 8027and pv.pv_id = rc.pv_idand pv.pkg_id = view_rec.pkg_id);FETCH view_curINTO view_rec;END LOOP;END UPDATE_MISC_VIEW;/---------------------------------------------------------- DDL for Procedure CHECK_NEW_PATCHES--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (nrtagid IN release_content.rtag_id%TYPE)IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */BEGIN/*--------------- Business Rules Here -------------------*//*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THENRAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );END IF/*-------------------------------------------------------*/UPDATE release_content rcSET rc.pkg_state = 5 -- enumPKG_STATE_NEW_PATCHWHERE rc.pv_id IN (SELECT prod.pv_idFROM (SELECT pp.pv_id AS orig_parent_id,COUNT (*) AS num_of_patchesFROM release_content rc, package_patches ppWHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagidGROUP BY pp.pv_id) orig,(SELECT prodpp.pv_id, pp.pv_id AS parent_id,COUNT (*) AS num_of_patchesFROM release_content rc,package_patches pp,package_dependencies dep,package_versions pv,package_patches prodppWHERE rc.pv_id = pp.pv_idAND rc.rtag_id = nrtagidAND pp.patch_id = dep.dpv_idAND dep.pv_id = pv.pv_idAND pv.is_patch = 'Y'AND pv.dlocked = 'Y'AND prodpp.patch_id = dep.pv_idGROUP BY prodpp.pv_id, pp.pv_id) prod,release_content rcWHERE orig.orig_parent_id = prod.pv_idAND orig.num_of_patches != prod.num_of_patchesAND rc.rtag_id = nrtagidAND rc.pv_id = prod.pv_idAND rc.pkg_state = 0UNIONSELECT prodpp.pv_idFROM release_content rc,package_patches pp,package_dependencies dep,package_versions pv,package_patches prodppWHERE rc.pv_id = pp.pv_idAND rc.rtag_id = nrtagidAND pp.patch_id = dep.dpv_idAND dep.pv_id = pv.pv_idAND pv.is_patch = 'Y'AND pv.dlocked = 'Y'AND prodpp.patch_id = dep.pv_idGROUP BY prodpp.pv_id, pp.pv_idMINUSSELECT pp.pv_idFROM release_content rc, package_patches ppWHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagidGROUP BY pp.pv_id);END check_new_patches;/---------------------------------------------------------- DDL for Procedure CLEAN_ADVISORY_RIPPLE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)IS/******************************************************************************NAME: clean_advisory_ripplePURPOSE: To delete entries from the advisory_ripple table based uponan RTAG_ID onlyThis is a tidy-up operation performed against the advisory_rippletable, ensuring that the table does not have rtag_id/pv_idcombinations that cannot be found in the release's wip/pending/releasetabs.******************************************************************************/BEGIN-- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.-- An invalid rtag_id/pv_id combination is one that cannot be found in the-- work_in_progress, planned, or release_content table.-- NOTE: Planned operations that represent pending additive/subtractive merge-- operations are ignored because they have not been approved yet and so-- cannot be said to be "in the release".DELETE FROM advisory_rippleWHERE rtag_id = nrtagidAND pv_id not in((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)UNION(SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)UNION(SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R')));END clean_advisory_ripple;/---------------------------------------------------------- DDL for Procedure NEW_PATCH--------------------------------------------------------CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,NNparent_id IN NUMBER,sPatchIdList IN VARCHAR2,NNuser_id IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.5--------------------------------------------------------------------------- */patchPv_id NUMBER;parPkg_id NUMBER;LastInstallOrder NUMBER;isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();CURSOR parent_cur ISSELECT pv.*, pkg.pkg_nameFROM package_versions pv,packages pkgWHERE pv.pv_id = NNparent_idAND pv.pkg_id = pkg.pkg_id;parent_rec parent_cur%ROWTYPE;CURSOR patch_cur ISSELECT pv.*, pg.pkg_nameFROM package_versions pv,packages pgWHERE pv.pkg_id = parPkg_idAND pv.pkg_version = SSpatch_versionAND pv.pkg_id = pg.pkg_id;patch_rec patch_cur%ROWTYPE;CURSOR releases_cur ISSELECT rc.pv_idFROM release_content rcWHERE rc.pv_id = patch_rec.pv_id;releases_rec releases_cur%ROWTYPE;BEGIN-- Get Last Install OrderSELECT Count(*) INTO LastInstallOrderFROM PACKAGE_PATCHES ppWHERE pp.PV_ID = NNparent_id;-- Get parent detailsOPEN parent_cur;FETCH parent_cur INTO parent_rec;parPkg_id := parent_rec.pkg_id;-- Find if patch exists in databaseOPEN patch_cur;FETCH patch_cur INTO patch_rec;-- Parent must be officialIF parent_rec.dlocked = 'Y' THENIF patch_cur%NOTFOUNDTHENisPatchDlocked := 'N';-- Create new patch version --SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );INSERT INTO package_versions ( pv_id, pkg_id, pkg_version, dlocked, created_stamp, creator_id, modified_stamp, modifier_id, V_MM, V_NMM, V_EXT, src_path, pv_description, owner_id, is_patch, LAST_PV_ID, bs_id, is_autobuildable, ripple_field )VALUES (patchPv_id,parPkg_id,SSpatch_version,isPatchDlocked,ORA_SYSDATE,NNuser_id,ORA_SYSDATETIME,NNuser_id,SSV_MM,SSV_NMM,SSV_EXT,parent_rec.src_path,'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,NNuser_id,'Y',patchPv_id,parent_rec.bs_id,parent_rec.is_autobuildable,parent_rec.ripple_field);INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )( SELECT NNparent_id AS pv_id,pv.pv_id AS patch_id,LastInstallOrder + 1 AS INSTALL_ORDERFROM package_versions pvWHERE pv.pv_id = patchPv_idAND pv.is_patch = 'Y' );/* LOG ACTION */Log_Action ( patchPv_id, 'new_version', NNuser_id,'Patch version created: '|| SSpatch_version );Log_Action ( NNparent_id, 'patch_add', NNuser_id,'New patch created and attached: '|| SSpatch_version );ELSEpatchPv_id := patch_rec.pv_id;isPatchDlocked := patch_rec.dlocked;-- Find if pv_id exists in release content (i.e. it cannot be a patch)OPEN releases_cur;FETCH releases_cur INTO releases_rec;IF releases_cur%NOTFOUNDTHEN-- This pv_id is trully a patch, hence add Y to column IS_PATCHUPDATE package_versions SETis_patch = 'Y'WHERE pv_id = patchPv_id;INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )( SELECT NNparent_id AS pv_id,pv.pv_id AS patch_id,LastInstallOrder + 1 AS INSTALL_ORDERFROM package_versions pvWHERE pv.pv_id = patchPv_idAND pv.is_patch = 'Y' );END IF;CLOSE releases_cur;/* LOG ACTION */Log_Action ( NNparent_id, 'patch_add', NNuser_id,'Patch version was found and attached: '|| SSpatch_version );END IF;END IF;/* Create Patch Dependencies */oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );-- Make sure patch is unofficial before altering its dependenciesIF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN-- Delete Existing DependenciesDELETEFROM PACKAGE_DEPENDENCIES depWHERE dep.PV_ID = patchPv_id;-- Insert new dependenciesINSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )SELECT patchPv_id AS PV_ID,pv.PV_ID AS DPV_ID,parPkg_id AS PKG_ID,pv.PKG_ID AS DPKG_ID,'L' AS BUILD_TYPEFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );END IF;CLOSE parent_cur;CLOSE patch_cur;END New_Patch;/---------------------------------------------------------- DDL for Procedure UPDATE_PROCESSES--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES"ISproc_id NUMBER;/******************************************************************************NAME: DELETE_DO_NOT_RIPPLEPURPOSE: TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGEIS RELEASEDREVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 21/04/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: DELETE_DO_NOT_RIPPLESysdate: 21/04/2006Date and Time: 21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR ripple_curISselect proc_id, proc_name, run_as, pkg_owner, is_interface from processes;ripple_rec ripple_cur%ROWTYPE;BEGINOPEN ripple_cur;FETCH ripple_curINTO ripple_rec;WHILE ripple_cur%FOUNDLOOPupdate deployment_manager.processes_configset proc_id = ripple_rec.proc_idwhere pkg_health_tag = ripple_rec.proc_nameand cmd_interface IS NULLand pkg_owner IS NULLand is_interface IS NULL;FETCH ripple_curINTO ripple_rec;END LOOP;END UPDATE_PROCESSES;/---------------------------------------------------------- DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO--------------------------------------------------------CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO"IS/******************************************************************************NAME: DELETE_AUTOBUILD_FAILURE_INFOPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 2/06/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: DELETE_AUTOBUILD_FAILURE_INFOSysdate: 2/06/2006Date and Time: 2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/BEGINDELETE FROM autobuild_failureWHERE group_email_id NOT IN (SELECT group_email_idFROM members_group);END delete_autobuild_failure_info;/---------------------------------------------------------- DDL for Procedure TEST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "TEST"ISproc_id NUMBER;/******************************************************************************NAME: DELETE_DO_NOT_RIPPLEPURPOSE: TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGEIS RELEASEDREVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 21/04/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: DELETE_DO_NOT_RIPPLESysdate: 21/04/2006Date and Time: 21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR ripple_curISselect distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;ripple_rec ripple_cur%ROWTYPE;BEGINOPEN ripple_cur;FETCH ripple_curINTO ripple_rec;WHILE ripple_cur%FOUNDLOOPselect deployment_manager.seq_proc_id.nextval into proc_id from dual;insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE)values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);FETCH ripple_curINTO ripple_rec;END LOOP;END test;/---------------------------------------------------------- DDL for Procedure CLEAN_DO_NOT_RIPPLE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)IS/******************************************************************************NAME: clean_do_not_ripplePURPOSE: To delete entries from the do_not_ripple table based uponan RTAG_ID onlyThis is a tidy-up operation performed against the do_not_rippletable, ensuring that the table does not have rtag_id/pv_idcombinations that cannot be found in the release's wip/pending/releasetabs.******************************************************************************/BEGIN-- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.-- An invalid rtag_id/pv_id combination is one that cannot be found in the-- work_in_progress, planned, or release_content table.-- NOTE: Planned operations that represent pending additive/subtractive merge-- operations are ignored because they have not been approved yet and so-- cannot be said to be "in the release".DELETE FROM do_not_rippleWHERE rtag_id = nrtagidAND pv_id not in((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)UNION(SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)UNION(SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R')));END clean_do_not_ripple;/---------------------------------------------------------- DDL for Procedure REBUILD_ENVIRONMENT--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.3--------------------------------------------------------------------------- */rowCnt NUMBER := 0;iteration NUMBER := 2; -- Iterations countermaxIterations NUMBER := 50; -- Maximum number of iterations allowed.-- This will prevent infinite loops if cyrcular dependencies are foundsessionNum NUMBER;BEGINSELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;-- Redo Patch Ignore warningsIgnore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );Level_One_Conflicts ( NNrtag_id, sessionNum );LOOPLevel_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );iteration := iteration + 1;EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);END LOOP;Update_Package_States ( NNrtag_id, sessionNum );DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;-- Flag Packages with New Patches AvailableCheck_New_Patches ( NNrtag_id );Clean_Do_Not_Ripple( NNrtag_id );/* Circular Dependency Flag *//*IF iteration > maxIterationsTHENUPDATE release_tags SETcircular_dependency = 'Y'WHERE rtag_id = NNrtag_id;ELSEUPDATE release_tags SETcircular_dependency = NULLWHERE rtag_id = NNrtag_id;END IF;*/END Rebuild_Environment;/---------------------------------------------------------- DDL for Procedure TEST_MARCO--------------------------------------------------------CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS/******************************************************************************NAME: TEST_MARCOPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 2/03/2007 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: TEST_MARCOSysdate: 2/03/2007Date and Time: 2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/parPv_id NUMBER;parPkg_id NUMBER;SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;BEGINSELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;/* LOG ACTION */Log_Action ( parPv_id, 'new_version', 3764,'New package version: '|| parPv_id || '.' );Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );-- Clone Package Version Details --INSERT INTO PACKAGE_VERSIONS ( pv_id, pkg_id, pkg_version, dlocked, created_stamp, creator_id, modified_stamp, modifier_id, V_MM, V_NMM, V_EXT,src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )SELECT parPv_id AS pv_id,pv.pkg_id AS pkg_id,parPv_id || '.' AS pkg_version,'N' AS dlocked,Ora_Sysdate AS created_stamp,3764 AS creator_id,Ora_Sysdatetime AS modified_stamp,3764 AS modifier_id,SSV_MM AS V_MM,SSV_NMM AS V_NMM,SSV_EXT AS V_EXT,pv.src_path,pv.pv_description,pv.PV_OVERVIEW,112982 AS LAST_PV_ID,pv.owner_id,pv.BUILD_TYPE,pv.IS_BUILD_ENV_REQUIRED,pv.bs_id,pv.is_autobuildable,pv.IS_DEPLOYABLEFROM PACKAGE_VERSIONS pvWHERE pv.pv_id = 112982;Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );END TEST_MARCO;/---------------------------------------------------------- DDL for Procedure LOG_ACTION_BULK--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,enumActionTypeName IN ACTION_TYPE.NAME%TYPE,nUserId IN ACTION_LOG.USER_ID%TYPE,sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */ActionTypeId NUMBER;oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();BEGINoPvIdCollector := IN_LIST_NUMBER ( nPvIdList );-- Get Action Type FKSELECT act.ACTTYPE_ID INTO ActionTypeIdFROM ACTION_TYPE actWHERE act.NAME = enumActionTypeName;-- Log ActionINSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )SELECT nUserId,ORA_SYSDATETIME,pv.PV_ID,sAdditionalComments,ActionTypeIdFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );END Log_Action_Bulk;/---------------------------------------------------------- DDL for Procedure CLONED_PACKAGE_PROCESSES--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES"ISproc_id NUMBER;/******************************************************************************NAME: DELETE_DO_NOT_RIPPLEPURPOSE: TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGEIS RELEASEDREVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 21/04/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: DELETE_DO_NOT_RIPPLESysdate: 21/04/2006Date and Time: 21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR ripple_curISselect distinct proc_id, prod_id from deployment_manager.processes_config;ripple_rec ripple_cur%ROWTYPE;BEGINOPEN ripple_cur;FETCH ripple_curINTO ripple_rec;WHILE ripple_cur%FOUNDLOOPinsert into package_processes (PROC_ID, PV_ID)values( ripple_rec.proc_id, ripple_rec.prod_id);FETCH ripple_curINTO ripple_rec;END LOOP;END CLONED_PACKAGE_PROCESSES;/---------------------------------------------------------- DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,NNuser_id IN NUMBER,retPV_ID OUT NUMBER,nCloneFromPvId IN NUMBER DEFAULT NULL ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */parPkg_id NUMBER;parPv_id NUMBER;cloneFrom_pv_id NUMBER;SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;CURSOR packages_cur ISSELECT pkg_id FROM PACKAGESWHERE pkg_name = SSpkg_name;packages_rec packages_cur%ROWTYPE;CURSOR package_versions_cur ISSELECT pv_id FROM PACKAGE_VERSIONSWHERE pkg_id = parPkg_idAND pkg_version = SSpkg_version;package_versions_rec package_versions_cur%ROWTYPE;CURSOR clone_package_versions_cur ISSELECT MAX(pv_id) AS pv_idFROM PACKAGE_VERSIONSWHERE pkg_id = parPkg_idAND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');clone_package_versions_rec clone_package_versions_cur%ROWTYPE;BEGIN/* -------------------------------------------- *//* Find if pkg_name exists and seed if required *//* -------------------------------------------- */OPEN packages_cur;FETCH packages_cur INTO packages_rec;IF packages_cur%NOTFOUNDTHEN/* INSERT into packages table */SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );ELSEparPkg_id := packages_rec.pkg_id;END IF;CLOSE packages_cur;/* ---------------------------------------------------- *//* Find if package_version exists and seed if required *//* ---------------------------------------------------- */OPEN package_versions_cur;FETCH package_versions_cur INTO package_versions_rec;IF package_versions_cur%NOTFOUNDTHENSELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;/* LOG ACTION */Log_Action ( parPv_id, 'new_version', NNuser_id,'New package version: '|| SSpkg_version );Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );/* CLONE details from similar version OR from nCloneFromPvId */IF ( NOT nCloneFromPvId IS NULL) THENcloneFrom_pv_id := nCloneFromPvId;ELSEcloneFrom_pv_id := clone_package_versions_rec.pv_id;END IF;-- Clone Package Version Details --INSERT INTO PACKAGE_VERSIONS ( pv_id, pkg_id, pkg_version, dlocked, created_stamp, creator_id, modified_stamp, modifier_id, V_MM, V_NMM, V_EXT,src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable, ripple_field )SELECT parPv_id AS pv_id,parPkg_id AS pkg_id,SSpkg_version AS pkg_version,'N' AS dlocked,Ora_Sysdate AS created_stamp,NNuser_id AS creator_id,Ora_Sysdatetime AS modified_stamp,NNuser_id AS modifier_id,SSV_MM AS V_MM,SSV_NMM AS V_NMM,SSV_EXT AS V_EXT,pv.src_path,pv.pv_description,pv.PV_OVERVIEW,cloneFrom_pv_id AS LAST_PV_ID,pv.owner_id,pv.BUILD_TYPE,pv.IS_BUILD_ENV_REQUIRED,pv.bs_id,pv.is_autobuildable,pv.IS_DEPLOYABLE,pv.ripple_fieldFROM PACKAGE_VERSIONS pvWHERE pv.pv_id = cloneFrom_pv_id;Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );retPV_ID := parPv_id;ELSEretPV_ID := package_versions_rec.pv_id;END IF;CLOSE package_versions_cur;END Seed_Package_Names_Versions2;/---------------------------------------------------------- DDL for Procedure BUILD_TREE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,retSessionNum OUT NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */rowCnt NUMBER := 0; -- Iterations counteriteration NUMBER := 1; -- Maximum number of iterations allowed.maxIterations NUMBER := 50; -- This will prevent infinite loops if cyrcular dependencies are foundUP_THE_TREE CONSTANT NUMBER DEFAULT 1;DOWN_THE_TREE CONSTANT NUMBER DEFAULT -1;sessionNum NUMBER;levelNum NUMBER;BEGINSELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;/*|| Start UP THE TREE*//* Packages with no dependencies */INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )SELECT sessionNum AS SESSION_NUM,iteration AS LEVEL_NUM,UP_THE_TREE AS DIRECTION,rc.pv_id, pv.pkg_id, pv.v_extFROM release_content rc,package_versions pvWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idMINUSSELECT sessionNum AS SESSION_NUM,iteration AS LEVEL_NUM,UP_THE_TREE AS DIRECTION,dep.pv_id, pv.pkg_id, pv.v_extFROM package_dependencies dep,package_versions pvWHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )AND dep.pv_id = pv.pv_id;/* Browse UP the build tree */iteration := iteration + 1;LOOPINSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )SELECT DISTINCTsessionNum AS SESSION_NUM,iteration AS LEVEL_NUM,UP_THE_TREE AS DIRECTION,rdep.pv_id, rdep.pkg_id, rdep.v_extFROM (SELECT dep.pv_id, pv.pkg_id, pv.v_ext, dep.dpv_id, dpv.pkg_id AS dpkg_id, dpv.v_ext AS dv_extFROM package_dependencies dep,release_content rc,package_versions pv,package_versions dpvWHERE dep.pv_id = rc.pv_idAND rc.rtag_id = nRtag_idAND dep.pv_id = pv.pv_idAND dep.dpv_id = dpv.pv_id) rdep,temp_tree_browse ttbWHERE rdep.dpkg_id = ttb.pkg_idAND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')AND ttb.SESSION_NUM = sessionNumAND ttb.LEVEL_NUM = iteration - 1MINUS/* Packages with all depencencies NOT matched */SELECT DISTINCTsessionNum AS SESSION_NUM,iteration AS LEVEL_NUM,UP_THE_TREE AS DIRECTION,rdep.pv_id, rdep.pkg_id, rdep.v_extFROM (SELECT dep.pv_id, pv.pkg_id, pv.v_ext, dep.dpv_id, dpv.pkg_id AS dpkg_id, dpv.v_ext AS dv_extFROM package_dependencies dep,release_content rc,package_versions pv,package_versions dpvWHERE dep.pv_id = rc.pv_idAND rc.rtag_id = nRtag_idAND dep.pv_id = pv.pv_idAND dep.dpv_id = dpv.pv_id) rdep,(SELECT tb.*FROM temp_tree_browse tbWHERE tb.SESSION_NUM = sessionNum) ttbWHERE rdep.dpkg_id = ttb.pkg_id (+)AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')AND ttb.SESSION_NUM IS NULL;rowCnt := SQL%ROWCOUNT;IF rowCnt > 0 THENiteration := iteration + 1;END IF;EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);END LOOP;/*---------------------------------------------------------------------------------------------------------------------*//* Check for unresolved dependencies||*//* UNRESOLVED */SELECT COUNT(*) INTO rowCntFROM (SELECT pv.pv_id, pv.pkg_id, pv.v_extFROM release_content rc,package_versions pvWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idMINUSSELECT ttb.pv_id, ttb.pkg_id, ttb.v_extFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNum);IF rowCnt > 0THEN/* Circular dependencies detected.|| Try to resolve build order from the top now.|| Start DOWN THE TREE*/iteration := 0;/* Top Level packages */INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )SELECT sessionNum AS SESSION_NUM,iteration AS LEVEL_NUM,DOWN_THE_TREE AS DIRECTION,pv.pv_id, pv.pkg_id, pv.v_extFROM (/* Packages no one depends on ( Top level packages )*/(/* All parents*/SELECT pv.pkg_id, pv.v_extFROM package_dependencies dep,release_content rc,package_versions pvWHERE dep.pv_id = rc.pv_idAND rc.rtag_id = nRtag_idAND dep.pv_id = pv.pv_idMINUS/* All children */SELECT dpv.pkg_id, dpv.v_extFROM package_dependencies dep,release_content rc,package_versions dpvWHERE dep.pv_id = rc.pv_idAND rc.rtag_id = nRtag_idAND dep.dpv_id = dpv.pv_id)MINUS/* Packages with resolved dependencies from UP THE TREE */SELECT ttb.pkg_id, ttb.v_extFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNum) tpkg,package_versions pv,release_content rcWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idAND tpkg.pkg_id = pv.pkg_idAND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');/* Keep taking packages which no one depende on */iteration := iteration - 1;LOOPINSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )SELECT sessionNum AS SESSION_NUM,iteration AS LEVEL_NUM,DOWN_THE_TREE AS DIRECTION,pv.pv_id, pv.pkg_id, pv.v_extFROM (/* All Unresolved */(SELECT pv.pkg_id, pv.v_extFROM release_content rc,package_versions pvWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idMINUSSELECT ttb.pkg_id, ttb.v_extFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNum)MINUS(/* Children of Unresolved */SELECT dpv.pkg_id, dpv.V_EXTFROM (SELECT pv.pv_id, pv.pkg_id, pv.v_extFROM release_content rc,package_versions pvWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idMINUSSELECT ttb.pv_id, ttb.pkg_id, ttb.v_extFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNum) unr,package_dependencies dep,package_versions dpvWHERE unr.pv_id = dep.pv_idAND dep.dpv_id = dpv.pv_id)) tpkg,package_versions pv,release_content rcWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idAND tpkg.pkg_id = pv.pkg_idAND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');rowCnt := SQL%ROWCOUNT;IF rowCnt > 0 THENiteration := iteration - 1;END IF;EXIT WHEN (rowCnt < 1);END LOOP;END IF;/*---------------------------------------------------------------------------------------------------------------------*//*|| Save results from temp table*//* Clean up build_order table */DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;/* Save UP THE TREE */INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )SELECT nRtag_id AS rtag_id,ttb.level_num AS step_num,ttb.PV_IDFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNumAND ttb.direction = UP_THE_TREE;/*Get last step_num */SELECT MAX(ttb.level_num) + 1 INTO levelNumFROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;/* UNRESOLVED */SELECT COUNT(*) INTO rowCntFROM (SELECT pv.pv_id, pv.pkg_id, pv.v_extFROM release_content rc,package_versions pvWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idMINUSSELECT ttb.pv_id, ttb.pkg_id, ttb.v_extFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNum);IF rowCnt > 0THEN/* Save unresolved packages */INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )SELECT nRtag_id AS rtag_id,levelNum AS step_num,upv.PV_ID,'Y' AS UNRESOLVEDFROM (SELECT pv.pv_id, pv.pkg_id, pv.v_extFROM release_content rc,package_versions pvWHERE rc.rtag_id = nRtag_idAND rc.pv_id = pv.pv_idMINUSSELECT ttb.pv_id, ttb.pkg_id, ttb.v_extFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNum) upv;END IF;/* Save DOWN THE TREE */levelNum := 1000;INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )SELECT nRtag_id AS rtag_id,levelNum + ttb.level_num AS step_num,ttb.PV_IDFROM temp_tree_browse ttbWHERE ttb.session_num = sessionNumAND ttb.direction = DOWN_THE_TREE;/*---------------------------------------------------------------------------------------------------------------------*//* Clean up temp table */DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;retSessionNum := sessionNum;END Build_Tree;/---------------------------------------------------------- DDL for Procedure CLEAR_ADVISORY_RIPPLE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */BEGIN-- Clear Advisory Ripple PackageDELETE FROM ADVISORY_RIPPLEWHERE PV_ID = nPvIdAND RTAG_ID = nRtagId;/* LOG ACTION */Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );/*Rebuild_Environment(nRtagId);*/END Clear_Advisory_Ripple;/---------------------------------------------------------- DDL for Procedure REMOVE_RELEASE_CONTENT--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,sNotPvIdList IN VARCHAR2,nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();BEGINoPvIdCollector := IN_LIST_NUMBER ( sPvIdList );oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );-- Delete From Release ContentDELETEFROM RELEASE_CONTENTWHERE rtag_id = nRTagIdAND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );END Remove_Release_Content;/---------------------------------------------------------- DDL for Procedure UPDATE_PACKAGE_DEPENDENCY--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,SSdep_name IN PACKAGES.pkg_name%TYPE,SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,NNuser_id IN NUMBER,NNdelete_old_dependency IN NUMBER) IS/* ---------------------------------------------------------------------------Version: 3.3--------------------------------------------------------------------------- */retPV_ID NUMBER;SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;DepIsPatch PACKAGE_VERSIONS.is_patch%TYPE;PvIsPatch PACKAGE_VERSIONS.is_patch%TYPE;NNpkg_id NUMBER;NNdpkg_id NUMBER;BEGIN--- Seed database with package_name and version if required ---Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );-- get v_ext,pkg_id of current dependencySELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatchFROM PACKAGE_VERSIONSWHERE pv_id = retPV_ID;-- get pkg_id of parent packageSELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatchFROM PACKAGE_VERSIONSWHERE pv_id = NNpv_id;IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR( (PvIsPatch IS NOT NULL) )THENIF NNdelete_old_dependency = 1 THEN/* Used for CUSTOM dependency add/edit */--- Remove old dependency ---IF (PvIsPatch IS NULL) THEN-- Do it for PackagesDELETE FROM PACKAGE_DEPENDENCIESWHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN(SELECT dep.*FROM PACKAGE_DEPENDENCIES dep,PACKAGE_VERSIONS dpv,PACKAGE_VERSIONS pvWHERE dep.dpv_id = dpv.pv_idAND dep.pv_id = NNpv_idAND pv.pv_id = retPV_IDAND dpv.pkg_id = pv.pkg_idAND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|'));ELSE-- Do it for PatchesDELETE FROM PACKAGE_DEPENDENCIESWHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN(SELECT dep.*FROM PACKAGE_DEPENDENCIES depWHERE dep.dpv_id = retPV_IDAND dep.pv_id = NNpv_id);END IF;END IF;/* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */--- Add new dependency ---INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );END IF;END Update_Package_Dependency;/---------------------------------------------------------- DDL for Procedure LOG_ACTION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,enumActionTypeName IN ACTION_TYPE.NAME%TYPE,nUserId IN ACTION_LOG.USER_ID%TYPE,sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */ActionTypeId NUMBER;BEGIN-- Get Action Type FKSELECT act.ACTTYPE_ID INTO ActionTypeIdFROM ACTION_TYPE actWHERE act.NAME = enumActionTypeName;INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );END Log_Action;/---------------------------------------------------------- DDL for Procedure REMOVE_PATCH--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;CURSOR curPatch ISSELECT pp.PV_ID,pp.PATCH_ID,ROWNUM AS NEW_INSTALL_ORDERFROM PACKAGE_PATCHES ppWHERE pp.PV_ID = nPvIdORDER BY pp.INSTALL_ORDER;recPatch curPatch%ROWTYPE;BEGIN-- Delete PatchDELETEFROM PACKAGE_PATCHES ppWHERE pp.PV_ID = nPvIdAND pp.PATCH_ID = nPatchId;-- Redo Install OrderOPEN curPatch;FETCH curPatch INTO recPatch;WHILE curPatch%FOUNDLOOPUPDATE PACKAGE_PATCHES pp SETpp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDERWHERE pp.PV_ID = nPvIdAND pp.PATCH_ID = recPatch.PATCH_ID;FETCH curPatch INTO recPatch;END LOOP;CLOSE curPatch;/* LOG ACTION */SELECT pv.PKG_VERSION INTO PatchVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = nPatchId;Log_Action ( nPvId, 'patch_remove', nUserId,'Version: '|| PatchVersion );END Remove_Patch;/---------------------------------------------------------- DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,sBuildEnvIdList IN VARCHAR2,nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE) IS/* ---------------------------------------------------------------------------Last Modified: Rupesh SolankiVersion: 3.0.1--------------------------------------------------------------------------- */nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();BsId NUMBER;HackBsId NUMBER;BEGINnBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );-- Delete Current Build Env settingsDELETE FROM PACKAGE_BUILD_ENVWHERE pv_id = nPvId;-- Delet Current Package Build Info SettingsDELETE FROM PACKAGE_BUILD_INFOWHERE pv_id = nPvId;-- Reset flag to NUPDATE PACKAGE_VERSIONS SETIS_BUILD_ENV_REQUIRED = 'N'WHERE PV_ID = nPvId;-- Set new Build EnvIF NOT sBuildEnvIdList IS NULL THENFOR i IN 1..nBsCollector.COUNTLOOPBsId := nBsCollector(i);IF nBuildStandard = 2 THENIF BsId = 1 THENHackBsId := 11;ELSEHackBsId := 12;END IF;-- Insert into PACKAGE_BUILD_ENVINSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )SELECT nPvId AS PV_ID,be.BE_IDFROM BUILD_ENVIRONMENTS beWHERE be.BE_ID IN ( HackBsId );-- Insert into PACKAGE_BUILD_INFOINSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )SELECT nPvId AS PV_ID,be.BM_IDFROM BUILD_MACHINES beWHERE be.BM_ID IN ( BsId );-- Set flag to YUPDATE PACKAGE_VERSIONS SETIS_BUILD_ENV_REQUIRED = 'Y'WHERE PV_ID = nPvId;ELSE-- Insert into PACKAGE_BUILD_ENVINSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )SELECT nPvId AS PV_ID,be.BE_IDFROM BUILD_ENVIRONMENTS beWHERE be.BE_ID IN ( BsId );-- Insert into PACKAGE_BUILD_INFOINSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )SELECT nPvId AS PV_ID,be.BM_IDFROM BUILD_MACHINES beWHERE be.BM_ID IN ( BsId );-- Set flag to YUPDATE PACKAGE_VERSIONS SETIS_BUILD_ENV_REQUIRED = 'Y'WHERE PV_ID = nPvId;END IF;END LOOP;END IF;END Set_Package_Build_Env_Temp;/---------------------------------------------------------- DDL for Procedure UPDATE_RUNTIME_DEPENDENCY--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,NNuser_id IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0.1--------------------------------------------------------------------------- */retRTD_ID NUMBER;CURSOR rtd_cur ISSELECT pv.pkg_version, pkg.pkg_nameFROM runtime_dependencies rtd,package_versions pv,packages pkgWHERE rtd.rtd_id = pv.pv_idAND pv.pkg_id = pkg.pkg_idAND rtd.pv_id = NNpv_idAND rtd.rtd_id = NNrtd_id;rtd_rec rtd_cur%ROWTYPE;CURSOR old_rtd_cur ISSELECT pv.pv_idFROM package_versions pvWHERE pv.pkg_id IN ( SELECT rtdpv.pkg_idFROM package_versions rtdpvWHERE rtdpv.pv_id = NNrtd_id )AND pv.pkg_version = SSrtd_version;old_rtd_rec old_rtd_cur%ROWTYPE;BEGIN-- Get current runtime dependency detailsOPEN rtd_cur;FETCH rtd_cur INTO rtd_rec;IF rtd_rec.pkg_version != SSrtd_version THEN-- Version has changed, hence create new runtime dependency --/* NOTE: You must create new version as updating just a version will affectall packages using this runtime dependency and user does not expect that.It is safer to create new version */OPEN old_rtd_cur;FETCH old_rtd_cur INTO old_rtd_rec;IF old_rtd_cur%NOTFOUNDTHEN-- Version not found, hence Create New version --Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );-- Update runtime dependency table --UPDATE runtime_dependencies SETrtd_id = retRTD_ID,rtd_url = SSrtd_url,rtd_comments = SSrtd_commentsWHERE pv_id = NNpv_idAND rtd_id = NNrtd_id;ELSE-- Update runtime dependency table --UPDATE runtime_dependencies SETrtd_id = old_rtd_rec.pv_id,rtd_url = SSrtd_url,rtd_comments = SSrtd_commentsWHERE pv_id = NNpv_idAND rtd_id = NNrtd_id;END IF;CLOSE old_rtd_cur;ELSE-- Version has not changed, hence update everithing except version --UPDATE runtime_dependencies SETrtd_url = SSrtd_url,rtd_comments = SSrtd_commentsWHERE pv_id = NNpv_idAND rtd_id = NNrtd_id;END IF;CLOSE rtd_cur;END Update_Runtime_Dependency;/---------------------------------------------------------- DDL for Procedure SET_ADVISORY_RIPPLE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */BEGIN-- Set Advisory Ripple PackageINSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)VALUES (nRtagId, nPvId);/* LOG ACTION */Log_Action ( nPvId, 'set_advisory_ripple', nUserId );/*Rebuild_Environment(nRtagId);*/END Set_Advisory_Ripple;/---------------------------------------------------------- DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,NNuser_id IN NUMBER,retPV_ID OUT NUMBER,nCloneFromPvId IN NUMBER DEFAULT NULL ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */parPkg_id NUMBER;parPv_id NUMBER;cloneFrom_pv_id NUMBER;SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;CURSOR packages_cur ISSELECT pkg_id FROM PACKAGESWHERE pkg_name = SSpkg_name;packages_rec packages_cur%ROWTYPE;CURSOR package_versions_cur ISSELECT pv_id FROM PACKAGE_VERSIONSWHERE pkg_id = parPkg_idAND pkg_version = SSpkg_version;package_versions_rec package_versions_cur%ROWTYPE;CURSOR clone_package_versions_cur ISSELECT MAX(pv_id) AS pv_idFROM PACKAGE_VERSIONSWHERE pkg_id = parPkg_idAND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');clone_package_versions_rec clone_package_versions_cur%ROWTYPE;BEGIN/* -------------------------------------------- *//* Find if pkg_name exists and seed if required *//* -------------------------------------------- */OPEN packages_cur;FETCH packages_cur INTO packages_rec;IF packages_cur%NOTFOUNDTHEN/* INSERT into packages table */SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );ELSEparPkg_id := packages_rec.pkg_id;END IF;CLOSE packages_cur;/* ---------------------------------------------------- *//* Find if package_version exists and seed if required *//* ---------------------------------------------------- */OPEN package_versions_cur;FETCH package_versions_cur INTO package_versions_rec;IF package_versions_cur%NOTFOUNDTHENSELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;/* LOG ACTION */Log_Action ( parPv_id, 'new_version', NNuser_id,'New package version: '|| SSpkg_version );Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );/* Find similar pkg_name + ext to clone from */OPEN clone_package_versions_cur;FETCH clone_package_versions_cur INTO clone_package_versions_rec;IF NOT clone_package_versions_rec.pv_id IS NULLTHEN/* CLONE details from similar version OR from nCloneFromPvId */IF ( NOT nCloneFromPvId IS NULL) THENcloneFrom_pv_id := nCloneFromPvId;ELSEcloneFrom_pv_id := clone_package_versions_rec.pv_id;END IF;-- Clone Package Version Details --INSERT INTO PACKAGE_VERSIONS ( pv_id, pkg_id, pkg_version, dlocked, created_stamp, creator_id, modified_stamp, modifier_id, V_MM, V_NMM, V_EXT,src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable, ripple_field )SELECT parPv_id AS pv_id,parPkg_id AS pkg_id,SSpkg_version AS pkg_version,'N' AS dlocked,Ora_Sysdate AS created_stamp,NNuser_id AS creator_id,Ora_Sysdatetime AS modified_stamp,NNuser_id AS modifier_id,SSV_MM AS V_MM,SSV_NMM AS V_NMM,SSV_EXT AS V_EXT,pv.src_path,pv.pv_description,pv.PV_OVERVIEW,cloneFrom_pv_id AS LAST_PV_ID,pv.owner_id,pv.BUILD_TYPE,pv.IS_BUILD_ENV_REQUIRED,pv.BS_ID,pv.is_autobuildable,pv.IS_DEPLOYABLE,pv.ripple_fieldFROM PACKAGE_VERSIONS pvWHERE pv.pv_id = cloneFrom_pv_id;Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );ELSE/* BRAND NEW version + ext */INSERT INTO PACKAGE_VERSIONS ( pv_id, pkg_id, pkg_version, dlocked, created_stamp, creator_id, modified_stamp, modifier_id, V_MM, V_NMM, V_EXT, owner_id, LAST_PV_ID, BUILD_TYPE, ripple_field )VALUES (parPv_id,parPkg_id,SSpkg_version,'N',Ora_Sysdate,NNuser_id,Ora_Sysdatetime,NNuser_id,SSV_MM,SSV_NMM,SSV_EXT,NNuser_id,parPv_id,'M','b');END IF;CLOSE clone_package_versions_cur;retPV_ID := parPv_id;ELSEretPV_ID := package_versions_rec.pv_id;END IF;CLOSE package_versions_cur;END Seed_Package_Names_Versions;/---------------------------------------------------------- DDL for Procedure RENAME_PACKAGE_VERSION--------------------------------------------------------CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,cBuildType IN CHAR,NNuser_id IN NUMBER,errMessage OUT VARCHAR2 ) IS/* ---------------------------------------------------------------------------Version: 3.2--------------------------------------------------------------------------- */sPackageVersion VARCHAR2(4000);sLabel VARCHAR2(4000) := NULL;OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;CURSOR package_versions_cur ISSELECT pv_idFROM package_versionsWHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )AND pkg_version = SSpkg_version;package_versions_rec package_versions_cur%ROWTYPE;BEGIN/* ---------------------------------------------------- *//* Find if package_version exists *//* ---------------------------------------------------- */errMessage := NULL;-- Get previous versionSELECT pv.PKG_VERSION INTO OldPkgVersionFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID = NNpv_id;sPackageVersion := SSpkg_version;IF OldPkgVersion != sPackageVersion THENOPEN package_versions_cur;FETCH package_versions_cur INTO package_versions_rec;IF package_versions_cur%NOTFOUNDTHEN-- Split current version in partsSplit_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );-- Automated built configIF (cBuildType = 'A') THENsPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT; -- Make sure that version is still uniqueEND IF;-- Packge version not found, hence rename it.UPDATE package_versionsSET pkg_version = sPackageVersion,v_mm = SSV_MM,v_nmm = SSV_NMM,v_ext = SSV_EXT,modified_stamp = ORA_SYSDATETIME,modifier_id = NNuser_id,build_type = cBuildType,pkg_label = NULLWHERE pv_id = NNpv_id;IF (cBuildType = 'A') THENsLabel := GET_AUTOMATED_LABEL( NNpv_id );UPDATE PACKAGE_VERSIONS pv SETpv.PKG_LABEL = sLabelWHERE pv_id = NNpv_id;END IF;/* LOG ACTION */Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );ELSE-- Package version exists. Cannot proceed.errMessage := 'enum_MSG_VERSION_EXISTS';END IF;CLOSE package_versions_cur;END IF;END Rename_Package_Version;/---------------------------------------------------------- DDL for Procedure PAOLO_BUILD_TREE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) ISsessionNumber NUMBER := 0;iteration NUMBER := 1;rowCnt NUMBER := 0;maxIterations NUMBER := 50;BEGININSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )SELECT sessionNumber, iteration, rc.PV_IDFROM RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtag_id;iteration := iteration + 1;LOOPINSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )SELECT sessionNumber,iteration,dep.DPV_IDFROM TEMP_TREE_BROWSE ttb,PACKAGE_DEPENDENCIES depWHERE dep.PV_ID = ttb.PV_IDAND ttb.LEVEL_NUM = iteration - 1MINUSSELECT sessionNumber, iteration, ttb.PV_IDFROM TEMP_TREE_BROWSE ttb;rowCnt := SQL%ROWCOUNT;IF rowCnt > 0 THENiteration := iteration + 1;END IF;EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);END LOOP;END PAOLO_Build_Tree;/---------------------------------------------------------- DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,pnPv_id IN NUMBER,sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,sAcceptanceDate IN VARCHAR2,sAcceptedBy IN NUMBER,sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,cUpdateAcceptedStateOnly IN CHAR) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */BEGINIF cUpdateAcceptedStateOnly = 'Y'THEN--- Update Accepted State Only ---IF ( sAccepted IS NULL )THEN-- Clear alleptanceUPDATE UNIT_TESTS SETTEST_ACCEPTED = NULL,ACCEPTANCE_DATE = NULL,ACCEPTED_BY = NULL,REVIEW_COMMENTS = NULLWHERE TEST_ID = pnTest_idAND PV_ID = pnPv_id;ELSEUPDATE UNIT_TESTS SETTEST_ACCEPTED = sAccepted,ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),ACCEPTED_BY = sAcceptedByWHERE TEST_ID = pnTest_idAND PV_ID = pnPv_id;END IF;ELSE--- Update Unit Test Acceptance ---UPDATE UNIT_TESTS SETTEST_ACCEPTED = sAccepted,REVIEW_COMMENTS = sReviewComments,ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),ACCEPTED_BY = sAcceptedByWHERE TEST_ID = pnTest_idAND PV_ID = pnPv_id;END IF;END Update_Unit_Test_Acceptance;/---------------------------------------------------------- DDL for Procedure NEW_ADDITIONAL_NOTE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,pnUser_id IN NUMBER,outErrCode OUT NUMBER) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */newID NUMBER;CURSOR an_duplicate_cur ISSELECT note_idFROM ADDITIONAL_NOTESWHERE pv_id = pnPv_idAND note_title = psNote_title;an_duplicate_rec an_duplicate_cur%ROWTYPE;BEGINoutErrCode := -1; -- Set default return error code to ERROR stateOPEN an_duplicate_cur;FETCH an_duplicate_cur INTO an_duplicate_rec;IF an_duplicate_cur%NOTFOUNDTHEN/* No duplicate titles */-- Get new ID --SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;--- Add Additional Note ---INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user )VALUES ( newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );outErrCode := 0; -- Set return to SUCCESSEND IF;CLOSE an_duplicate_cur;END New_Additional_Note;/---------------------------------------------------------- DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES--------------------------------------------------------CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS/******************************************************************************NAME: INSERT_MULTIPLE_STICKY_NOTESPURPOSE:REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 6/12/2006 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: INSERT_MULTIPLE_STICKY_NOTESSysdate: 6/12/2006Date and Time: 6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/CURSOR curInfo ISSELECT PV_IDFROM PACKAGE_BUILD_ENVWHERE BE_ID IN (11, 12);recInfo curInfo%ROWTYPE;BEGINOPEN curInfo;FETCH curInfo INTO recInfo;WHILE curInfo%FOUNDLOOPINSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );FETCH curInfo INTO recInfo;END LOOP;CLOSE curInfo;END INSERT_MULTIPLE_STICKY_NOTES;/---------------------------------------------------------- DDL for Procedure TOUCH_RELEASE_BULK--------------------------------------------------------CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();BEGINoRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );-- Touch Release for RebuildUPDATE RELEASE_TAGS rt SETrt.REBUILD_ENV = 'Y',rt.REBUILD_STAMP = 0WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );END Touch_Release_Bulk;/---------------------------------------------------------- DDL for Procedure UPDATE_DEPRECATION_STATE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) ASrecno NUMBER;CURSOR deprecate_cur ISSELECT rc.pv_idFROM release_content rcWHERE rtag_id = nnrtag_idAND deprecated_state IN(7);deprecate_rec deprecate_cur % rowtype;BEGINOPEN deprecate_cur;FETCH deprecate_curINTO deprecate_rec;WHILE deprecate_cur % FOUNDLOOPSELECT COUNT(*)INTO recnoFROM package_dependencies pd,release_content rcWHERE pd.pv_id = deprecate_rec.pv_idAND rc.pv_id = pd.dpv_idAND rc.rtag_id = nnrtag_idAND rc.deprecated_state IN(6, 7);IF recno = 0 THENUPDATE release_contentSET pkg_id = NULL, deprecated_state = NULLWHERE pv_id = deprecate_rec.pv_idAND rtag_id = nnrtag_id;END IF;FETCH deprecate_curINTO deprecate_rec;END LOOP;END;/---------------------------------------------------------- DDL for Procedure IGNORE_DEPENDENCY_WARNINGS--------------------------------------------------------CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,sIgnoreIdList IN VARCHAR2,bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,nUserId IN NUMBER DEFAULT NULL ) IS/* ---------------------------------------------------------------------------Updates the ignore warnings table - this is really two functions in one.1) One function updates the table based on a list of dependent PV_IDs and a parent PV_IDand is called from the RM website's SetIgnoreWarnings() function after a user changesthe ignore warnings checkboxes and submits the form.This can (at time of writing this) only be done within releases that are not builddaemon enabled. The ignore warnings feature is a feature we would like to see the endof in an ideal world.The SetIgnoreWarnings() website function now calls Touch_Release so there is no need todo so in this stored procedure, thereby making this stored procedure much more precise inthat it only updates the ignore_warnings table (action log table too although that is justa log and doesn't affect any subsequent business rules behaviour) and it cares nothingabout website presentation layer states, etc.2) The other function updates the table for out of sync dependencies that have in factbeen satisfied by patches made to some other product in the release.This seems to be a seldom used feature in current projects.It is probably the most often taken path through this function given that it occurs whenthis function is called from Rebuild_Environment, and that is called in many circumstancesfrom the RM website whenever the seems to be a possibility that the state of a packagein a release might have changed and therefore affects the state of other packages inthat same release.Parameter Usage:when called from | when called fromRebuild_Environment | SetIgnoreWarnings()stored procedure. | in the Website--------------------------------------+----------------------------nRtagId RTAG_ID | RTAG_IDnPvId NULL | PV_IDsIgnoreIdList NULL | list of dependent PV_ID'sbDoPatchIgnore TRUE | FALSEnUserId NULL | current user ID--------------------------------------------------------------------------- */oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();ReleaseLocation VARCHAR2(4000);ActionTypeId NUMBER;BEGINIF (NOT bDoPatchIgnore) THEN/* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website*/oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );/* Log Action */-- Get Release LocationSELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocationFROM PROJECTS proj,RELEASE_TAGS rtWHERE rt.PROJ_ID = proj.PROJ_IDAND rt.RTAG_ID = nRtagId;-- Get Action Type Id for IGNORE_ONSELECT act.ACTTYPE_ID INTO ActionTypeIdFROM ACTION_TYPE actWHERE act.NAME = 'ignore_on';-- Get Ignored (Current MINUS Old)INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeIdFROM (SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_IDFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )MINUSSELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_IDFROM IGNORE_WARNINGS igwWHERE igw.RTAG_ID = nRtagIdAND igw.PV_ID = nPvId) qry,PACKAGE_VERSIONS pv,PACKAGES pkg,RELEASE_CONTENT rc,PACKAGE_VERSIONS rpvWHERE pv.PKG_ID = pkg.PKG_IDAND rc.RTAG_ID = nRtagIdAND rc.PV_ID = rpv.PV_IDAND rpv.PKG_ID = pv.PKG_IDAND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )AND qry.DPV_ID = pv.PV_ID;-- Get Action Type Id for IGNORE_OFFSELECT act.ACTTYPE_ID INTO ActionTypeIdFROM ACTION_TYPE actWHERE act.NAME = 'ignore_off';-- Get UnIgnored (Old MINUS Current)INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeIdFROM (SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_IDFROM IGNORE_WARNINGS igwWHERE igw.RTAG_ID = nRtagIdAND igw.PV_ID = nPvIdMINUSSELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_IDFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )) qry,PACKAGE_VERSIONS pv,PACKAGES pkg,RELEASE_CONTENT rc,PACKAGE_VERSIONS rpvWHERE pv.PKG_ID = pkg.PKG_IDAND rc.RTAG_ID = nRtagIdAND rc.PV_ID = rpv.PV_IDAND rpv.PKG_ID = pv.PKG_IDAND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )AND qry.DPV_ID = pv.PV_ID;-- Delete Current Ignore WarningsDELETEFROM IGNORE_WARNINGS igwWHERE igw.RTAG_ID = nRtagIdAND igw.PV_ID = nPvIdAND igw.IS_PATCH_IGNORE IS NULL;IF (oIgnoreIdCollector.COUNT > 0) THEN-- Insert Ignore WarningsINSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )SELECT nRtagId,nPvId,pv.PV_ID AS DPV_IDFROM PACKAGE_VERSIONS pvWHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );END IF;ELSE/* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */-- Delete Current Patch Ignore WarningsDELETEFROM IGNORE_WARNINGS igwWHERE igw.RTAG_ID = nRtagIdAND igw.IS_PATCH_IGNORE = 'Y';-- Delete Manual Ignores that need to be Patch IgnoresDELETEFROM IGNORE_WARNINGS igwWHERE ( RTAG_ID, PV_ID, DPV_ID ) IN(SELECT DISTINCTnRtagId,err.PV_ID,err.ERR_DPV AS DPV_IDFROM (/* Full Release Contents used for reference*/SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_extFROM release_content rel, package_versions rpvWHERE rel.pv_id = rpv.pv_idAND rtag_id = nRtagId) frc,(/* DPV_IDs not fount in release*/SELECT dep.pv_id, dep.dpv_id AS err_dpvFROM package_dependencies depWHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )) err,(SELECT DISTINCT pp.PV_ID, dep.DPV_IDFROM PACKAGE_PATCHES pp,PACKAGE_DEPENDENCIES dep,RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtagIdAND rc.PV_ID = pp.PV_IDAND dep.PV_ID = pp.PATCH_ID) pp,package_versions errpkg,package_versions errpvWHERE err.err_dpv = errpv.pv_idAND errpv.pkg_id = frc.pkg_id(+)AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)AND err.pv_id = errpkg.pv_idAND err.PV_ID = pp.PV_IDAND frc.PV_ID = pp.DPV_ID);/*----------------------------------------------------- Make sure that select statement above and below are same---------------------------------------------------*/-- Insert Patch IgnoresINSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )SELECT DISTINCTnRtagId,err.PV_ID,err.ERR_DPV AS DPV_ID,'Y'FROM (/* Full Release Contents used for reference*/SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_extFROM release_content rel, package_versions rpvWHERE rel.pv_id = rpv.pv_idAND rtag_id = nRtagId) frc,(/* DPV_IDs not fount in release*/SELECT dep.pv_id, dep.dpv_id AS err_dpvFROM package_dependencies depWHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )) err,(SELECT DISTINCT pp.PV_ID, dep.DPV_IDFROM PACKAGE_PATCHES pp,PACKAGE_DEPENDENCIES dep,RELEASE_CONTENT rcWHERE rc.RTAG_ID = nRtagIdAND rc.PV_ID = pp.PV_IDAND dep.PV_ID = pp.PATCH_ID) pp,package_versions errpkg,package_versions errpvWHERE err.err_dpv = errpv.pv_idAND errpv.pkg_id = frc.pkg_id(+)AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)AND err.pv_id = errpkg.pv_idAND err.PV_ID = pp.PV_IDAND frc.PV_ID = pp.DPV_ID;END IF;END Ignore_Dependency_Warnings;/---------------------------------------------------------- DDL for Procedure UNDEPRECATE_PACKAGE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,nUserId IN NUMBER) ISext VARCHAR2(50);PvIdList VARCHAR2(32767);nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();PvId NUMBER;sComments VARCHAR2(32767);BEGIN--Extract the package extensionSELECT V_EXT into extFROM PACKAGE_VERSIONSWHERE PV_ID = nPvId;--SELECT COMMENTS into sComments--FROM DEPRECATED_PACKAGES--WHERE RTAG_ID = nRtagId--AND V_EXT = ext--AND PKG_ID = nPkgId;--SELECT PV_ID into PvIdList FROM--RELEASE_CONTENT WHERE RTAG_ID = nRtagId--AND PKG_STATE = 6--AND PV_ID NOT IN nPvId;IF ext IS NOT NULL THEN-- Undeprecate PackageDELETE FROM DEPRECATED_PACKAGESWHERE RTAG_ID = nRtagIdAND PKG_ID = nPkgIdAND V_EXT = ext;UPDATE RELEASE_CONTENTSET PKG_ID = NULL, DEPRECATED_STATE = NULLWHERE RTAG_ID = nRtagIdAND PV_ID IN (SELECT PV.PV_IDFROM PACKAGE_VERSIONS PV, PACKAGES PKGWHERE PKG.PKG_ID = PV.PKG_IDAND PKG.PKG_ID = nPkgIdAND PV.V_EXT = extUNIONSELECT DISTINCTqry.PV_IDFROM (SELECT dep.*,LEVEL AS LEVEL_NUMFROM PACKAGE_DEPENDENCIES depSTART WITH dep.DPV_ID IN ( nPvId )--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID) qry,PACKAGES pkg,PACKAGE_VERSIONS pv,RELEASE_CONTENT rcWHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_IDAND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID);ELSE-- Undeprecate PackageDELETE FROM DEPRECATED_PACKAGESWHERE RTAG_ID = nRtagIdAND PKG_ID = nPkgIdAND V_EXT IS NULL;UPDATE RELEASE_CONTENTSET PKG_ID = NULL, DEPRECATED_STATE = NULLWHERE RTAG_ID = nRtagIdAND PV_ID IN (SELECT PV.PV_IDFROM PACKAGE_VERSIONS PV, PACKAGES PKGWHERE PKG.PKG_ID = PV.PKG_IDAND PKG.PKG_ID = nPkgIdAND PV.V_EXT IS NULLUNIONSELECT DISTINCTqry.PV_IDFROM (SELECT dep.*,LEVEL AS LEVEL_NUMFROM PACKAGE_DEPENDENCIES depSTART WITH dep.DPV_ID IN ( nPvId )--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID) qry,PACKAGES pkg,PACKAGE_VERSIONS pv,RELEASE_CONTENT rcWHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_IDAND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID);END IF;--IF PvIdList IS NOT NULL THEN-- nIdCollector := IN_LIST_NUMBER ( PvIdList );-- FOR i IN 1..nIdCollector.COUNT-- LOOP-- PvId := nIdCollector(i);-- Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );-- END LOOP;--END IF;Rebuild_environment(nRtagId);END Undeprecate_Package;/---------------------------------------------------------- DDL for Procedure REMOVE_PACKAGE_INTEREST--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,nPkgId IN PACKAGES.PKG_ID%TYPE,nUserId IN NUMBER) IS/******************************************************************************NAME: REMOVE_PACKAGE_INTERESTPURPOSE: To remove interest in a given package per projectREVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 12/05/2006 Rupesh Solanki 1. Created this procedure.NOTES:Automatically available Auto Replace Keywords:Object Name: REMOVE_PACKAGE_INTERESTSysdate: 12/05/2006Date and Time: 12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AMUsername: (set in TOAD Options, Procedure Editor)Table Name: (set in the "New PL/SQL Object" dialog)******************************************************************************/BEGIN--Delete from PACKAGE_INTERESTDELETE FROM PACKAGE_INTERESTWHERE PROJ_ID = nProjIdAND PKG_ID = nPkgIdAND USER_ID = nUserId;END REMOVE_PACKAGE_INTEREST;/---------------------------------------------------------- DDL for Procedure RELEASE_MANAGER_MAILOUT--------------------------------------------------------CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (sender IN VARCHAR2,recipient IN VARCHAR2,ccrecipient IN VARCHAR2,subject IN VARCHAR2,message IN VARCHAR2) IScrlf VARCHAR2(2):= UTL_TCP.CRLF;connection utl_smtp.connection;mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';header VARCHAR2(1000);BEGIN---- Start the connection.--connection := utl_smtp.open_connection(mailhost,25);header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||'From: '||sender||''||crlf||'Subject: '||subject||crlf||'To: '||recipient||crlf||'CC: '||ccrecipient;---- Handshake with the SMTP server--utl_smtp.helo(connection, mailhost);utl_smtp.mail(connection, sender);utl_smtp.rcpt(connection, recipient);utl_smtp.rcpt(connection, ccrecipient);utl_smtp.open_data(connection);---- Write the header--utl_smtp.write_data(connection, header);---- The crlf is required to distinguish that what comes next is not simply part of the header..--utl_smtp.write_data(connection, crlf ||message);utl_smtp.close_data(connection);utl_smtp.quit(connection);EXCEPTIONWHEN UTL_SMTP.INVALID_OPERATION THENdbms_output.put_line(' Invalid Operation in SMTP transaction.');WHEN UTL_SMTP.TRANSIENT_ERROR THENdbms_output.put_line(' Temporary problems with sending email - try again later.');WHEN UTL_SMTP.PERMANENT_ERROR THENdbms_output.put_line(' Errors in code for SMTP transaction.');END RELEASE_MANAGER_MAILOUT;/---------------------------------------------------------- DDL for Procedure SET_PACKAGE_BUILD_ENV--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,sBuildEnvIdList IN VARCHAR2 ) IS/* ---------------------------------------------------------------------------Last Modified: Rupesh SolankiVersion: 3.0.1--------------------------------------------------------------------------- */BEGIN-- Delete Current Build Env settingsDELETE FROM PACKAGE_BUILD_ENVWHERE pv_id = nPvId;-- Delet Current Package Build Info SettingsDELETE FROM PACKAGE_BUILD_INFOWHERE pv_id = nPvId;-- Reset flag to NUPDATE PACKAGE_VERSIONS SETIS_BUILD_ENV_REQUIRED = 'N'WHERE PV_ID = nPvId;-- Set new Build EnvIF NOT sBuildEnvIdList IS NULL THEN-- Insert into PACKAGE_BUILD_ENVINSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )SELECT nPvId AS PV_ID,be.BE_IDFROM BUILD_ENVIRONMENTS beWHERE be.BE_ID IN (SELECT *FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ));-- Insert into PACKAGE_BUILD_INFOINSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )SELECT nPvId AS PV_ID,be.BM_IDFROM BUILD_MACHINES beWHERE be.BM_ID IN (SELECT *FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ));-- Set flag to YUPDATE PACKAGE_VERSIONS SETIS_BUILD_ENV_REQUIRED = 'Y'WHERE PV_ID = nPvId;END IF;END Set_Package_Build_Env;/---------------------------------------------------------- DDL for Procedure SHIFT_INSTALL_ORDER--------------------------------------------------------CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */currInstallOrder NUMBER;FromInstallOrder NUMBER;BEGIN-- Get Current Install OrderSELECT pp.INSTALL_ORDER INTO currInstallOrderFROM PACKAGE_PATCHES ppWHERE pp.PV_ID = nPvIdAND pp.PATCH_ID = nPatchId;IF currInstallOrder > nToInstallOrderTHENFromInstallOrder := nToInstallOrder;-- Shift others UpUPDATE PACKAGE_PATCHES pp SETpp.INSTALL_ORDER = pp.INSTALL_ORDER + 1WHERE pp.PV_ID = nPvIdAND pp.PATCH_ID != nPatchIdAND pp.INSTALL_ORDER BETWEEN FromInstallOrder AND currInstallOrder - 1;ELSIF currInstallOrder < nToInstallOrderTHENFromInstallOrder := currInstallOrder + 1;-- Shift others DownUPDATE PACKAGE_PATCHES pp SETpp.INSTALL_ORDER = pp.INSTALL_ORDER - 1WHERE pp.PV_ID = nPvIdAND pp.PATCH_ID != nPatchIdAND pp.INSTALL_ORDER BETWEEN FromInstallOrder AND nToInstallOrder;END IF;-- Move Patch to new install orderUPDATE PACKAGE_PATCHES pp SETpp.INSTALL_ORDER = nToInstallOrderWHERE pp.PV_ID = nPvIdAND pp.PATCH_ID = nPatchId;END Shift_Install_Order;/---------------------------------------------------------- DDL for Procedure NEW_PACKAGE_NAME--------------------------------------------------------CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,retPKG_ID OUT NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0.0--------------------------------------------------------------------------- */CURSOR packages_cur ISSELECT pkg.pkg_idFROM packages pkgWHERE pkg.pkg_name = SSpkg_name;packages_rec packages_cur%ROWTYPE;BEGIN/* ---------------------------------------------------- *//* Find if package name exists *//* ---------------------------------------------------- */OPEN packages_cur;FETCH packages_cur INTO packages_rec;IF packages_cur%NOTFOUNDTHEN-- Create new pkg_name --SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;INSERT INTO packages ( pkg_id, pkg_name )VALUES ( retPKG_ID, SSpkg_name );ELSEretPKG_ID := packages_rec.pkg_id;END IF;CLOSE packages_cur;END New_Package_Name;/---------------------------------------------------------- DDL for Procedure REMOVE_RUNTIME--------------------------------------------------------CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,nUserId IN NUMBER ) IS/* ---------------------------------------------------------------------------Version: 3.0--------------------------------------------------------------------------- */RuntimeDependency VARCHAR2(4000);BEGIN-- Get Runtime dependencySELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION INTO RuntimeDependencyFROM RUNTIME_DEPENDENCIES rtd,PACKAGES pkg,PACKAGE_VERSIONS pvWHERE rtd.PV_ID = nPvIdAND pv.PKG_ID = pkg.PKG_IDAND rtd.RTD_ID = pv.PV_IDAND rtd.RTD_ID = nRuntimeId;-- Delete DocumentDELETEFROM RUNTIME_DEPENDENCIES rtdWHERE rtd.PV_ID = nPvIdAND rtd.RTD_ID = nRuntimeId;/* LOG ACTION */Log_Action ( nPvId, 'runtime_remove', nUserId,'Runtime package: '|| RuntimeDependency );END Remove_Runtime;/---------------------------------------------------------- DDL for Procedure CHANGE_PACKAGE_STATE--------------------------------------------------------CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS/* ---------------------------------------------------------------------------Version: 4.0--------------------------------------------------------------------------- */BEGIN-- Unlock PackageUPDATE RELEASE_CONTENT rc SETrc.PKG_STATE = 0WHERE rc.PV_ID = nPvIdAND rc.RTAG_ID = nRtagId;/* LOG ACTION *//* Log_Action ( nPvId, 'unlock_package', nUserId );*/END Change_Package_State;/