| 221 |
vnguyen |
1 |
CREATE PROCEDURE "RELEASE_MANAGER"."NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
|
|
|
2 |
NNparent_id IN NUMBER,
|
|
|
3 |
sPatchIdList IN VARCHAR2,
|
|
|
4 |
NNuser_id IN NUMBER ) IS
|
|
|
5 |
/* ---------------------------------------------------------------------------
|
|
|
6 |
Version: 3.5
|
|
|
7 |
--------------------------------------------------------------------------- */
|
|
|
8 |
|
|
|
9 |
patchPv_id NUMBER;
|
|
|
10 |
parPkg_id NUMBER;
|
|
|
11 |
LastInstallOrder NUMBER;
|
|
|
12 |
isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
|
|
|
13 |
SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
|
|
|
14 |
SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
|
|
|
15 |
SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
|
|
|
16 |
oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
|
|
|
17 |
|
|
|
18 |
CURSOR parent_cur IS
|
|
|
19 |
SELECT pv.*, pkg.pkg_name
|
|
|
20 |
FROM package_versions pv,
|
|
|
21 |
packages pkg
|
|
|
22 |
WHERE pv.pv_id = NNparent_id
|
|
|
23 |
AND pv.pkg_id = pkg.pkg_id;
|
|
|
24 |
parent_rec parent_cur%ROWTYPE;
|
|
|
25 |
|
|
|
26 |
CURSOR patch_cur IS
|
|
|
27 |
SELECT pv.*, pg.pkg_name
|
|
|
28 |
FROM package_versions pv,
|
|
|
29 |
packages pg
|
|
|
30 |
WHERE pv.pkg_id = parPkg_id
|
|
|
31 |
AND pv.pkg_version = SSpatch_version
|
|
|
32 |
AND pv.pkg_id = pg.pkg_id;
|
|
|
33 |
patch_rec patch_cur%ROWTYPE;
|
|
|
34 |
|
|
|
35 |
CURSOR releases_cur IS
|
|
|
36 |
SELECT rc.pv_id
|
|
|
37 |
FROM release_content rc
|
|
|
38 |
WHERE rc.pv_id = patch_rec.pv_id;
|
|
|
39 |
releases_rec releases_cur%ROWTYPE;
|
|
|
40 |
|
|
|
41 |
|
|
|
42 |
BEGIN
|
|
|
43 |
|
|
|
44 |
-- Get Last Install Order
|
|
|
45 |
SELECT Count(*) INTO LastInstallOrder
|
|
|
46 |
FROM PACKAGE_PATCHES pp
|
|
|
47 |
WHERE pp.PV_ID = NNparent_id;
|
|
|
48 |
|
|
|
49 |
|
|
|
50 |
-- Get parent details
|
|
|
51 |
OPEN parent_cur;
|
|
|
52 |
FETCH parent_cur INTO parent_rec;
|
|
|
53 |
parPkg_id := parent_rec.pkg_id;
|
|
|
54 |
|
|
|
55 |
|
|
|
56 |
-- Find if patch exists in database
|
|
|
57 |
OPEN patch_cur;
|
|
|
58 |
FETCH patch_cur INTO patch_rec;
|
|
|
59 |
|
|
|
60 |
|
|
|
61 |
-- Parent must be official
|
|
|
62 |
IF parent_rec.dlocked = 'Y' THEN
|
|
|
63 |
|
|
|
64 |
IF patch_cur%NOTFOUND
|
|
|
65 |
THEN
|
|
|
66 |
isPatchDlocked := 'N';
|
|
|
67 |
|
|
|
68 |
-- Create new patch version --
|
|
|
69 |
SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
|
|
|
70 |
|
|
|
71 |
|
|
|
72 |
Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
|
|
|
73 |
|
|
|
74 |
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 )
|
|
|
75 |
VALUES (
|
|
|
76 |
patchPv_id,
|
|
|
77 |
parPkg_id,
|
|
|
78 |
SSpatch_version,
|
|
|
79 |
isPatchDlocked,
|
|
|
80 |
ORA_SYSDATE,
|
|
|
81 |
NNuser_id,
|
|
|
82 |
ORA_SYSDATETIME,
|
|
|
83 |
NNuser_id,
|
|
|
84 |
SSV_MM,
|
|
|
85 |
SSV_NMM,
|
|
|
86 |
SSV_EXT,
|
|
|
87 |
parent_rec.src_path,
|
|
|
88 |
'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
|
|
|
89 |
NNuser_id,
|
|
|
90 |
'Y',
|
|
|
91 |
patchPv_id,
|
|
|
92 |
parent_rec.bs_id,
|
|
|
93 |
parent_rec.is_autobuildable,
|
|
|
94 |
parent_rec.ripple_field
|
|
|
95 |
|
|
|
96 |
);
|
|
|
97 |
|
|
|
98 |
INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
|
|
|
99 |
( SELECT NNparent_id AS pv_id,
|
|
|
100 |
pv.pv_id AS patch_id,
|
|
|
101 |
LastInstallOrder + 1 AS INSTALL_ORDER
|
|
|
102 |
FROM package_versions pv
|
|
|
103 |
WHERE pv.pv_id = patchPv_id
|
|
|
104 |
AND pv.is_patch = 'Y' );
|
|
|
105 |
|
|
|
106 |
/* LOG ACTION */
|
|
|
107 |
Log_Action ( patchPv_id, 'new_version', NNuser_id,
|
|
|
108 |
'Patch version created: '|| SSpatch_version );
|
|
|
109 |
|
|
|
110 |
Log_Action ( NNparent_id, 'patch_add', NNuser_id,
|
|
|
111 |
'New patch created and attached: '|| SSpatch_version );
|
|
|
112 |
|
|
|
113 |
|
|
|
114 |
ELSE
|
|
|
115 |
|
|
|
116 |
patchPv_id := patch_rec.pv_id;
|
|
|
117 |
isPatchDlocked := patch_rec.dlocked;
|
|
|
118 |
|
|
|
119 |
-- Find if pv_id exists in release content (i.e. it cannot be a patch)
|
|
|
120 |
OPEN releases_cur;
|
|
|
121 |
FETCH releases_cur INTO releases_rec;
|
|
|
122 |
|
|
|
123 |
IF releases_cur%NOTFOUND
|
|
|
124 |
THEN
|
|
|
125 |
-- This pv_id is trully a patch, hence add Y to column IS_PATCH
|
|
|
126 |
UPDATE package_versions SET
|
|
|
127 |
is_patch = 'Y'
|
|
|
128 |
WHERE pv_id = patchPv_id;
|
|
|
129 |
|
|
|
130 |
INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
|
|
|
131 |
( SELECT NNparent_id AS pv_id,
|
|
|
132 |
pv.pv_id AS patch_id,
|
|
|
133 |
LastInstallOrder + 1 AS INSTALL_ORDER
|
|
|
134 |
FROM package_versions pv
|
|
|
135 |
WHERE pv.pv_id = patchPv_id
|
|
|
136 |
AND pv.is_patch = 'Y' );
|
|
|
137 |
|
|
|
138 |
END IF;
|
|
|
139 |
|
|
|
140 |
CLOSE releases_cur;
|
|
|
141 |
|
|
|
142 |
/* LOG ACTION */
|
|
|
143 |
Log_Action ( NNparent_id, 'patch_add', NNuser_id,
|
|
|
144 |
'Patch version was found and attached: '|| SSpatch_version );
|
|
|
145 |
|
|
|
146 |
END IF;
|
|
|
147 |
|
|
|
148 |
|
|
|
149 |
|
|
|
150 |
|
|
|
151 |
END IF;
|
|
|
152 |
|
|
|
153 |
|
|
|
154 |
|
|
|
155 |
/* Create Patch Dependencies */
|
|
|
156 |
oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
|
|
|
157 |
|
|
|
158 |
|
|
|
159 |
-- Make sure patch is unofficial before altering its dependencies
|
|
|
160 |
IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
|
|
|
161 |
-- Delete Existing Dependencies
|
|
|
162 |
DELETE
|
|
|
163 |
FROM PACKAGE_DEPENDENCIES dep
|
|
|
164 |
WHERE dep.PV_ID = patchPv_id;
|
|
|
165 |
|
|
|
166 |
|
|
|
167 |
-- Insert new dependencies
|
|
|
168 |
INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
|
|
|
169 |
SELECT patchPv_id AS PV_ID,
|
|
|
170 |
pv.PV_ID AS DPV_ID,
|
|
|
171 |
parPkg_id AS PKG_ID,
|
|
|
172 |
pv.PKG_ID AS DPKG_ID,
|
|
|
173 |
'L' AS BUILD_TYPE
|
|
|
174 |
FROM PACKAGE_VERSIONS pv
|
|
|
175 |
WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
|
|
|
176 |
|
|
|
177 |
|
|
|
178 |
END IF;
|
|
|
179 |
|
|
|
180 |
|
|
|
181 |
CLOSE parent_cur;
|
|
|
182 |
CLOSE patch_cur;
|
|
|
183 |
END New_Patch;
|
|
|
184 |
/
|