Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
/