Blame | Last modification | View Log | RSS feed
CREATE PACKAGE BODY "RELEASE_MANAGER"."PK_RMAPI_TEST"IS/*------------------------------|| Last Modified: Rupesh Solanki|| Modified Date: 11 September 2006|| Body Version: 2.0------------------------------*//*-------------------------------------------------------------------------------------------------------*/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 NUMBERISpvid 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 vext = ssv_extTHENSELECT 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 pv.v_ext = ssv_ext;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 pv.v_ext = vext;END IF;EXCEPTIONWHEN NO_DATA_FOUNDTHENraise_application_error(-20000,'Cannot get CloneFromPvId. VExt='|| vext|| ', RtagId='|| rtagid|| ', PkgName='|| pkgname|| ', SSV_EXT='|| ssv_ext);END;IF vext = ssv_extTHEN-- 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, hence cannot be used for ripple buildRETURN 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|');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);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_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;/*-------------------------------------------------------------------------------------------------------*/PROCEDURE CQ_TEST ISINPUT NUMBER(8,2);RESULT VARCHAR2(50);BEGININPUT := 33558440;RESULT := dbo.sp_RM_getIssueDetails@DEVI(INPUT);INSERT INTO CQ_TEST (ID) VALUES (RESULT);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_id and pv.is_autobuildable = 'Y'and rc.rtag_id = RtagId;BEGINSELECT RTAG_ID INTO rtagIdDBFROM DASH_BOARDWHERE RTAG_ID = RtagId;SELECT PROJ_ID INTO projIdDBFROM DASH_BOARDWHERE RTAG_ID = RtagId;EXCEPTIONWHEN NO_DATA_FOUNDTHEN rtagIdDB := '';END;IF rtagIdDB IS NULL THENSELECT PROJ_ID INTO 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 = projIdDBAND RTAG_ID = rtagIdDB;END IF;END;/*-------------------------------------------------------------------------------------------------------*/END pk_rmapi_test;/ALTER PACKAGE "RELEASE_MANAGER"."PK_RMAPI_TEST"COMPILE BODYPLSQL_OPTIMIZE_LEVEL= 2PLSQL_CODE_TYPE= INTERPRETEDPLSQL_DEBUG= FALSEREUSE SETTINGS TIMESTAMP '2007-02-06 11:21:54'/