Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1374 dpurdie 1
--------------------------------------------------------
3959 dpurdie 2
--  File created - Monday-July-08-2013
3
--  Removed TEST packages as these cause great confusion   
1374 dpurdie 4
--------------------------------------------------------
1373 dpurdie 5
 
1374 dpurdie 6
--------------------------------------------------------
7
--  DDL for Function CAN_EDIT_PKG_IN_PROJECT
8
--------------------------------------------------------
1373 dpurdie 9
 
10
  CREATE OR REPLACE FUNCTION "CAN_EDIT_PKG_IN_PROJECT" ( nPvId IN NUMBER, nRtagId IN NUMBER ) RETURN NUMBER IS
11
 
12
/* ---------------------------------------------------------------------------
13
    Version: 3.0.0
14
   --------------------------------------------------------------------------- */
15
 
16
    VExt PACKAGE_VERSIONS.V_EXT%TYPE;
17
	ProjId NUMBER;
18
	RowCount NUMBER;
19
	cReleaseMode CHAR(1);
20
 
21
BEGIN
22
 
23
	--RETURN 1;
24
 
25
 
26
	/*--------------- Business Rules Here -------------------*/
27
	IF (nRtagId IS NULL)  OR  (nRtagId < 1)THEN
28
		RETURN 0;
29
	END IF;
30
	/*-------------------------------------------------------*/
31
 
32
 
33
 
34
 
35
 
36
 
37
	/*-- First Check. See if package is used through release reference --*/
38
	SELECT COUNT(rc.PV_ID) INTO RowCount
39
	  FROM (
40
	  		SELECT rl.REF_RTAG_ID
41
			  FROM RELEASE_LINKS rl
42
			 WHERE rl.RTAG_ID = nRtagId
43
	  		) rl,
44
			RELEASE_CONTENT rc
45
	  WHERE rc.RTAG_ID = rl.REF_RTAG_ID
46
	    AND rc.PV_ID = nPvId;			
47
 
48
 
49
	-- Decide if package can be edited  
50
	IF RowCount > 0 THEN
51
		-- Package is referenced from other release, hence cannot be edited
52
		RETURN 0;	
53
 
54
	ELSE
55
 
56
		-- Check is only done for releases in restrictive mode
57
		SELECT rt.OFFICIAL INTO cReleaseMode
58
		  FROM RELEASE_TAGS rt
59
		 WHERE rt.RTAG_ID = nRtagId;
60
 
61
		IF cReleaseMode = 'N'OR cReleaseMode = 'R' THEN
62
			-- Do not do any firther checking,
63
			-- Package is editable here
64
			RETURN 1;
65
		END IF;	
66
 
67
	END IF;
68
 
69
 
70
 
71
 
72
	/*-- Further checking --*/
73
	-- Get proj_id
74
	SELECT rt.PROJ_ID  INTO  ProjId
75
	  FROM RELEASE_TAGS rt
76
	 WHERE rt.RTAG_ID = nRtagId;
77
 
78
 
79
 
80
	BEGIN
81
 
82
		-- Get v_ext
83
		SELECT pv.V_EXT  INTO  Vext
84
		  FROM PACKAGE_VERSIONS pv
85
		 WHERE pv.PV_ID = nPvId;  
86
 
87
		EXCEPTION
88
	    	WHEN NO_DATA_FOUND THEN
89
	       		Vext := NULL;
90
 
91
	END;	 
92
 
93
 
94
	--Temp Hack for Step Project
95
	IF ProjId != 281 THEN
96
		-- Find if package can be edited in this project
97
			SELECT COUNT(pe.EXT_NAME) INTO RowCount
98
	 		FROM PROJECT_EXTENTIONS pe
99
			WHERE pe.PROJ_ID != ProjId  
100
	  		AND pe.EXT_NAME = VExt;
101
	END IF;		
102
 
103
 
104
	-- Decide if package can be edited  
105
	IF RowCount > 0 THEN
106
		-- Package extension is found in other projects, hece NOT EDITABLE
107
		RETURN 0;
108
	ELSE
109
		RETURN 1;	
110
	END IF;
111
 
112
 
113
END CAN_EDIT_PKG_IN_PROJECT;
1374 dpurdie 114
/
115
--------------------------------------------------------
3959 dpurdie 116
--  DDL for Function DT_ADDUSEROBJECT
1374 dpurdie 117
--------------------------------------------------------
1373 dpurdie 118
 
3959 dpurdie 119
  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;
120
/
121
--------------------------------------------------------
122
--  DDL for Function GET_AUTOMATED_LABEL
123
--------------------------------------------------------
124
 
125
  CREATE OR REPLACE FUNCTION "GET_AUTOMATED_LABEL" ( nPvId IN NUMBER ) RETURN VARCHAR2 IS
126
 
127
/* ---------------------------------------------------------------------------
128
    Version: 3.0.0
129
   --------------------------------------------------------------------------- */
130
 
131
	sPkgName VARCHAR2(4000);
132
	sVext VARCHAR2(4000);
133
 
1373 dpurdie 134
BEGIN
135
 
3959 dpurdie 136
	-- Get package details
137
	SELECT pkg.PKG_NAME, pv.V_EXT INTO sPkgName, sVext
138
	  FROM PACKAGE_VERSIONS pv,
139
	  	   PACKAGES pkg
140
	 WHERE pv.PKG_ID = pkg.PKG_ID
141
	   AND pv.PV_ID = nPvId;
142
 
143
 
144
	-- Generate Label for automated build
145
	RETURN UPPER( sPkgName ||'.'|| nPvId || sVext ||'.WIP' );
146
 
147
END GET_AUTOMATED_LABEL;
1374 dpurdie 148
/
149
--------------------------------------------------------
150
--  DDL for Function GET_BUILD_NUMBER
151
--------------------------------------------------------
1373 dpurdie 152
 
153
  CREATE OR REPLACE FUNCTION "GET_BUILD_NUMBER" (s_version IN VARCHAR2) RETURN VARCHAR2
154
IS
155
/* ---------------------------------------------------------------------------
156
    Version: 1.0.0
157
   --------------------------------------------------------------------------- */
158
BEGIN
159
    IF is_number(s_version) AND LENGTH(s_version) > 3
160
    THEN
161
        RETURN MOD(TO_NUMBER(s_version), 1000);
162
    ELSE
163
        RETURN 0;
164
    END IF;
165
END get_build_number;
1374 dpurdie 166
/
167
--------------------------------------------------------
3959 dpurdie 168
--  DDL for Function GET_PATCH_VERSION
1374 dpurdie 169
--------------------------------------------------------
1373 dpurdie 170
 
3959 dpurdie 171
  CREATE OR REPLACE FUNCTION "GET_PATCH_VERSION" (s_version IN VARCHAR2) RETURN VARCHAR2
1373 dpurdie 172
IS
173
/* ---------------------------------------------------------------------------
3959 dpurdie 174
    Version: 1.0.0
1373 dpurdie 175
   --------------------------------------------------------------------------- */
176
BEGIN
3959 dpurdie 177
    IF is_number(s_version) AND LENGTH(s_version) > 3
1373 dpurdie 178
    THEN
3959 dpurdie 179
        RETURN FLOOR(TO_NUMBER(s_version) / 1000);
1373 dpurdie 180
    ELSE
3959 dpurdie 181
        RETURN s_version;
1373 dpurdie 182
    END IF;
3959 dpurdie 183
END get_patch_version;
1374 dpurdie 184
/
185
--------------------------------------------------------
3959 dpurdie 186
--  DDL for Function GET_PV_FIRST_MODIFIED
1374 dpurdie 187
--------------------------------------------------------
1373 dpurdie 188
 
3959 dpurdie 189
  CREATE OR REPLACE FUNCTION "GET_PV_FIRST_MODIFIED" (v_pv_id NUMBER) RETURN DATE IS
190
  ret DATE;
1373 dpurdie 191
BEGIN
3959 dpurdie 192
  SELECT q.modified_stamp
193
    INTO ret
194
    FROM (
195
            SELECT level AS lvl, pvc.pv_id, pvc.modified_stamp, pvc.change_type
196
              FROM package_versions pvc
197
              START WITH pvc.pv_id = v_pv_id
198
            CONNECT BY NOCYCLE pvc.pv_id = PRIOR pvc.last_pv_id
199
          ) Q
200
  WHERE q.change_type IS NOT NULL
201
    AND rownum = 1
202
  ORDER BY q.lvl;
203
 
204
  RETURN ret;
205
END;
1374 dpurdie 206
/
207
--------------------------------------------------------
3959 dpurdie 208
--  DDL for Function GET_V_EXT
1374 dpurdie 209
--------------------------------------------------------
1373 dpurdie 210
 
3959 dpurdie 211
  CREATE OR REPLACE FUNCTION "GET_V_EXT" (SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE) RETURN VARCHAR2 IS
212
 
1373 dpurdie 213
/* ---------------------------------------------------------------------------
3959 dpurdie 214
    Version: 3.0.0
1373 dpurdie 215
   --------------------------------------------------------------------------- */
3959 dpurdie 216
 
217
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
218
    lastDot NUMBER;
219
 
1373 dpurdie 220
BEGIN
3959 dpurdie 221
    lastDot := INSTR (SSpkg_version, '.', -1);
222
 
223
    IF ( lastDot > 0 ) AND ( lastDot != LENGTH(SSpkg_version) )
1373 dpurdie 224
    THEN
3959 dpurdie 225
        -- YES dot separator found --
226
        SSV_EXT := SUBSTR (SSpkg_version, lastDot, LENGTH(SSpkg_version)-lastDot+1);
227
 
228
        IF IS_VERSION_EXTENSION ( SSV_EXT )
229
        THEN
230
            RETURN SSV_EXT;
231
        ELSE
232
            RETURN NULL;
233
        END IF;
234
 
1373 dpurdie 235
    ELSE
3959 dpurdie 236
        -- NO dot separator found --
237
        RETURN NULL;
1373 dpurdie 238
    END IF;
3959 dpurdie 239
 
240
END GET_V_EXT;
1374 dpurdie 241
/
242
--------------------------------------------------------
3959 dpurdie 243
--  DDL for Function IN_LIST_NUMBER
1374 dpurdie 244
--------------------------------------------------------
1373 dpurdie 245
 
3959 dpurdie 246
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS
1373 dpurdie 247
 
248
/* ---------------------------------------------------------------------------
249
    Version: 3.0.0
250
   --------------------------------------------------------------------------- */
251
 
252
    sync_rtags		   RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
253
	pos				   NUMBER;
3959 dpurdie 254
	in_list			   VARCHAR2(4000) := sInList || ',';
1373 dpurdie 255
 
256
BEGIN
257
 
258
	IF NOT sInList IS NULL
259
	THEN
260
		LOOP
261
	        EXIT WHEN in_list IS NULL;
262
	        pos := INSTR ( in_list, ',' );
263
	        sync_rtags.extend;
264
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
265
	        in_list := SUBSTR ( in_list, pos+1 );
266
		END LOOP;
267
	END IF;
268
 
269
	RETURN sync_rtags;
3959 dpurdie 270
END IN_LIST_NUMBER;
1374 dpurdie 271
/
272
--------------------------------------------------------
3959 dpurdie 273
--  DDL for Function IN_LIST_NUMBER2
1374 dpurdie 274
--------------------------------------------------------
1373 dpurdie 275
 
3959 dpurdie 276
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER2" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS
1373 dpurdie 277
 
278
/* ---------------------------------------------------------------------------
279
    Version: 3.0.0
280
   --------------------------------------------------------------------------- */
281
 
282
    sync_rtags		   RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
283
	pos				   NUMBER;
3959 dpurdie 284
	in_list			   VARCHAR2(32767) := sInList || ',';
1373 dpurdie 285
 
286
BEGIN
287
 
288
	IF NOT sInList IS NULL
289
	THEN
290
		LOOP
291
	        EXIT WHEN in_list IS NULL;
292
	        pos := INSTR ( in_list, ',' );
293
	        sync_rtags.extend;
294
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
295
	        in_list := SUBSTR ( in_list, pos+1 );
296
		END LOOP;
297
	END IF;
298
 
299
	RETURN sync_rtags;
3959 dpurdie 300
END IN_LIST_NUMBER2;
1374 dpurdie 301
/
302
--------------------------------------------------------
303
--  DDL for Function IN_LIST_VARCHAR2
304
--------------------------------------------------------
1373 dpurdie 305
 
306
  CREATE OR REPLACE FUNCTION "IN_LIST_VARCHAR2" ( sInList IN VARCHAR2, cSeparator IN VARCHAR2 ) RETURN RELMGR_VARCHAR2_TAB_t IS
307
 
308
/* ---------------------------------------------------------------------------
309
    Version: 3.1
310
   --------------------------------------------------------------------------- */
311
 
312
    cItemCollection	   RELMGR_VARCHAR2_TAB_t := RELMGR_VARCHAR2_TAB_t();
313
	pos				   NUMBER;
314
	in_list			   VARCHAR2(4000) := sInList || cSeparator;
315
	val				   VARCHAR2(4000);
316
 
317
BEGIN
318
 
319
	IF NOT sInList IS NULL
320
	THEN
321
		LOOP
322
	        EXIT WHEN in_list IS NULL;
323
	        pos := INSTR ( in_list, cSeparator );
324
			val := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
325
 
326
			IF (NOT val IS NULL) THEN
327
		        cItemCollection.extend;
328
		        cItemCollection(cItemCollection.count) := val;
329
			END IF;
330
 
331
	        in_list := SUBSTR ( in_list, pos+1 );
332
		END LOOP;
333
	END IF;
334
 
335
	RETURN cItemCollection;
336
END IN_LIST_VARCHAR2;
1374 dpurdie 337
/
338
--------------------------------------------------------
3959 dpurdie 339
--  DDL for Function IS_NUMBER
1374 dpurdie 340
--------------------------------------------------------
1373 dpurdie 341
 
3959 dpurdie 342
  CREATE OR REPLACE FUNCTION "IS_NUMBER" (p_val IN VARCHAR2) RETURN BOOLEAN
343
IS
344
   temp_num NUMBER;
345
/* ---------------------------------------------------------------------------
346
    Version: 1.0.0
347
   --------------------------------------------------------------------------- */
348
BEGIN
349
   temp_num := TO_NUMBER(p_val);
350
   RETURN true;
351
EXCEPTION WHEN VALUE_ERROR THEN
352
   RETURN false;
353
END IS_NUMBER;
354
/
355
--------------------------------------------------------
356
--  DDL for Function IS_VERSION_EXTENSION
357
--------------------------------------------------------
1373 dpurdie 358
 
3959 dpurdie 359
  CREATE OR REPLACE FUNCTION "IS_VERSION_EXTENSION" (SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE) RETURN BOOLEAN
360
IS
361
/* ---------------------------------------------------------------------------
362
    Version: 3.0.0
363
   --------------------------------------------------------------------------- */
1373 dpurdie 364
 
3959 dpurdie 365
BEGIN
366
    IF LENGTH ( TRIM (TRANSLATE (SSV_EXT, '.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',' ') ) ) > 0
367
    THEN
368
        RETURN FALSE;
369
    ELSE
370
        RETURN TRUE;
371
    END IF;
1373 dpurdie 372
 
3959 dpurdie 373
END IS_VERSION_EXTENSION;
1374 dpurdie 374
/
375
--------------------------------------------------------
3959 dpurdie 376
--  DDL for Function ORA_SYSDATE
1374 dpurdie 377
--------------------------------------------------------
1373 dpurdie 378
 
3959 dpurdie 379
  CREATE OR REPLACE FUNCTION "ORA_SYSDATE" 
380
RETURN DATE
1373 dpurdie 381
IS
3959 dpurdie 382
/* ---------------------------------------------------------------------------
383
    Version: 3.0.0
384
   --------------------------------------------------------------------------- */
385
BEGIN
1373 dpurdie 386
 
3959 dpurdie 387
    RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY' ),'DD-MON-YYYY' );
388
END ORA_SYSDATE;
389
/
390
--------------------------------------------------------
391
--  DDL for Function ORA_SYSDATETIME
392
--------------------------------------------------------
1373 dpurdie 393
 
3959 dpurdie 394
  CREATE OR REPLACE FUNCTION "ORA_SYSDATETIME" 
395
RETURN DATE
396
IS
397
/* ---------------------------------------------------------------------------
398
    Version: 3.0.0
399
   --------------------------------------------------------------------------- */
400
BEGIN
1373 dpurdie 401
 
3959 dpurdie 402
    RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' );
403
END ORA_SYSDATETIME;
404
/
405
--------------------------------------------------------
406
--  DDL for Function PERL_DBD_TESTFUNC
407
--------------------------------------------------------
1373 dpurdie 408
 
3959 dpurdie 409
  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;
1374 dpurdie 410
/
411
--------------------------------------------------------
3959 dpurdie 412
--  DDL for Function RELEASE_MODE
1374 dpurdie 413
--------------------------------------------------------
1373 dpurdie 414
 
3959 dpurdie 415
  CREATE OR REPLACE FUNCTION "RELEASE_MODE" ( nRtagId IN NUMBER ) RETURN CHAR IS
1373 dpurdie 416
 
3959 dpurdie 417
/* ---------------------------------------------------------------------------
418
    Version: 3.0.0
419
   --------------------------------------------------------------------------- */
1373 dpurdie 420
 
3959 dpurdie 421
   returnValue CHAR(1);
1373 dpurdie 422
 
3959 dpurdie 423
BEGIN
1373 dpurdie 424
 
3959 dpurdie 425
    /*--------------- Business Rules Here -------------------*/
426
	/*-------------------------------------------------------*/
427
 
428
	-- Get release mode
429
	SELECT rt.OFFICIAL INTO returnValue
430
	  FROM RELEASE_TAGS rt
431
	 WHERE rt.RTAG_ID = nRtagId;
432
 
433
	RETURN returnValue;
434
 
435
END RELEASE_MODE;
1374 dpurdie 436
/
437
--------------------------------------------------------
438
--  DDL for Package PK_APP_UTILS
439
--------------------------------------------------------
1373 dpurdie 440
 
441
  CREATE OR REPLACE PACKAGE "PK_APP_UTILS" IS
442
/*
443
------------------------------
444
||  Last Modified:  S.Vukovic
445
||  Modified Date:  26/Apr/2005
446
||  Spec Version:   1.0
447
------------------------------
448
*/
449
 
450
	TYPE typeCur IS REF CURSOR;
451
 
452
    /*================================================================================================*/
453
 
454
	PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur);
455
 
456
	/*================================================================================================*/
457
 
458
END PK_APP_UTILS;
1374 dpurdie 459
/
460
--------------------------------------------------------
3959 dpurdie 461
--  DDL for Package PK_ARCHIVE
1374 dpurdie 462
--------------------------------------------------------
1373 dpurdie 463
 
3959 dpurdie 464
  CREATE OR REPLACE PACKAGE "PK_ARCHIVE" 
1373 dpurdie 465
IS
3959 dpurdie 466
/*
467
------------------------------
468
||  Author:  Rupesh Solanki
469
||  Date:    26 October 2006
470
||  Version:   1.0
471
------------------------------
472
*/
1373 dpurdie 473
 
3959 dpurdie 474
   /*================================================================================================*/
475
   PROCEDURE populate_packages_table;
476
 
477
   PROCEDURE populate_archive_data_table (
478
      nrtagid   IN   release_tags.rtag_id%TYPE
479
   );
1373 dpurdie 480
 
3959 dpurdie 481
   PROCEDURE migrate_pv_to_archive_SCHEMA (nrtagid IN release_tags.rtag_id%TYPE);
1373 dpurdie 482
 
3959 dpurdie 483
   PROCEDURE migrate_rtag_to_archive_schema (
484
      nrtagid   IN   release_tags.rtag_id%TYPE
485
   );
1373 dpurdie 486
 
3959 dpurdie 487
   PROCEDURE clean_up_archive_data_table (
488
      nrtagid   IN   release_tags.rtag_id%TYPE
489
   );
1373 dpurdie 490
 
3959 dpurdie 491
   PROCEDURE write_action_log (
492
      nuserid   IN   NUMBER,
493
      nrtagid   IN   release_tags.rtag_id%TYPE
1373 dpurdie 494
   );
495
/*================================================================================================*/
3959 dpurdie 496
END pk_archive;
1374 dpurdie 497
/
498
--------------------------------------------------------
499
--  DDL for Package PK_BUILDAPI
500
--------------------------------------------------------
1373 dpurdie 501
 
502
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI" 
503
IS
504
   /*================================================================================================*/
505
   PROCEDURE add_product_component (
506
      npvid           IN   NUMBER,
507
      sosname         IN   VARCHAR2,
508
      sorigfilepath   IN   VARCHAR2,
509
      sfilename       IN   VARCHAR2,
510
      sdestfilepath   IN   VARCHAR2,
511
      nbytesize       IN   NUMBER,
512
      scrccksum       IN   VARCHAR2
513
   );
514
 
515
   PROCEDURE remove_all_product_components (
516
      npvid     IN   NUMBER,
517
      sosname   IN   VARCHAR2
518
   );
519
 
520
   /*================================================================================================*/
521
   FUNCTION get_osid (sosname IN VARCHAR2)
522
      RETURN NUMBER;
523
 
524
   /*================================================================================================*/
525
   PROCEDURE update_build_service (
526
      sdatabaseserver   IN   VARCHAR2,
527
      swebserver        IN   VARCHAR2,
528
      smailserver       IN   VARCHAR2,
529
      smailsender       IN   VARCHAR2,
530
      sdiskspace        IN   VARCHAR2,
531
      ssbommanagement   IN   VARCHAR2
532
   );
533
 
534
   /*================================================================================================*/
535
   PROCEDURE update_build_service_info (
536
      sdatabaseserver   IN   VARCHAR2,
537
      sarchiveserver    IN   VARCHAR2,
538
      smailserver       IN   VARCHAR2,
539
      smailsender       IN   VARCHAR2,
540
      sdiskspace        IN   VARCHAR2,
541
      ssbommanagement   IN   VARCHAR2
542
   );
543
 
544
   /*================================================================================================*/
545
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2);
546
 
547
   /*================================================================================================*/
548
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER);
549
 
550
   /*================================================================================================*/
551
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2);
552
 
553
   /*================================================================================================*/
554
   PROCEDURE add_daemon (
555
      sdaemonhostname   IN   VARCHAR2,
556
      nrtagid           IN   NUMBER,
557
      ngbeid            IN   NUMBER,
558
      sgbebuildfilter   IN   VARCHAR2
559
   );
560
 
561
   /*================================================================================================*/
562
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2);
563
 
564
   /*================================================================================================*/
565
   PROCEDURE update_daemon (
566
      sdaemonhostname   IN   VARCHAR2,
567
      nrconid           IN   NUMBER,
568
      ngbeid            IN   NUMBER,
569
      sgbebuildfilter   IN   VARCHAR2
570
   );
571
 
572
   /*================================================================================================*/
573
   PROCEDURE insert_schedule_info (
574
      dschedulepause     IN   DATE,
575
      dscheduleresume    IN   DATE,
576
      crepeat            IN   VARCHAR2,
577
      cindefinitepause   IN   VARCHAR2
578
   );
579
 
580
   /*================================================================================================*/
581
   PROCEDURE delete_schedule (nscheduleid IN NUMBER);
582
 
583
   /*================================================================================================*/
584
   PROCEDURE set_infinite_pause;
585
 
586
   /*================================================================================================*/
587
   PROCEDURE set_resume;
588
 
589
   /*================================================================================================*/
590
   PROCEDURE delete_out_of_date_schedule;
591
 
592
   /*================================================================================================*/
593
   PROCEDURE set_daemon_resume (nrconid IN NUMBER);
594
 
595
   /*================================================================================================*/
596
   PROCEDURE set_daemon_pause (nrconid IN NUMBER);
597
 
598
   /*================================================================================================*/
599
   PROCEDURE set_daemon_disable (nrconid NUMBER);
600
 
601
   /*================================================================================================*/
602
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER);
603
 
604
   /*================================================================================================*/
605
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER );
606
   /*================================================================================================*/
607
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER );
608
   /*================================================================================================*/
609
   FUNCTION get_daemon_inst(
610
      nRtag_id IN NUMBER,
611
      nInst_id IN OUT NUMBER,
612
      nOp_code IN OUT NUMBER,
613
      nPv_id OUT NUMBER,
614
      nUser_id OUT NUMBER,
615
      nInProgress OUT NUMBER
616
   ) RETURN NUMBER;
617
   /*================================================================================================*/
618
   PROCEDURE cleanup_stranded_daemon_insts;
619
   /*================================================================================================*/
620
   PROCEDURE insert_daemon_inst(
621
      nOp_code IN NUMBER,
622
      nRtag_id IN NUMBER,
623
      nPv_id IN NUMBER,
624
      nSchedDate IN DATE,
625
      nRepeatSecs IN NUMBER,
626
      nAddedDate IN DATE,
627
      nUser_id IN NUMBER
628
   );
629
   /*================================================================================================*/
630
   PROCEDURE del_daemon_inst( nInstId IN NUMBER );
631
   /*================================================================================================*/
632
   PROCEDURE del_daemon_inst_by_rtag_pvid(
633
      nOp_code IN NUMBER,
634
      nRtag_id IN NUMBER,
635
      nPv_id IN NUMBER
636
   );
637
   /*================================================================================================*/
638
   PROCEDURE update_daemon_inst(
639
      nInstId IN NUMBER,
640
      nOp_code IN NUMBER,
641
      nRtag_id IN NUMBER,
642
      nPv_id IN NUMBER,
643
      nSchedDate IN DATE,
644
      nRepeatSecs IN NUMBER,
645
      nAddedDate IN DATE,
646
      nUser_id IN NUMBER
647
   );
648
   /*================================================================================================*/
649
   FUNCTION daemon_ops_for_rtag_pvid(
650
      nRtag_id IN NUMBER,
651
      nPv_id IN NUMBER
652
   ) RETURN VARCHAR2;
653
   /*================================================================================================*/
654
   FUNCTION daemon_ops_for_rtag(
655
      nRtag_id IN NUMBER
656
   ) RETURN VARCHAR2;
657
   /*================================================================================================*/
658
   PROCEDURE add_daemon_config (
659
      nrtagid           IN   NUMBER,
660
      nbmcon_id         IN   NUMBER,
661
      sdaemon_mode      IN   VARCHAR2,
662
      sgbebuildfilter   IN   VARCHAR2
663
   );
664
   /*================================================================================================*/
665
   PROCEDURE update_daemon_config (
666
      nrconid           IN   NUMBER,
667
      nbmcon_id         IN   NUMBER,
668
      sdaemon_mode      IN   VARCHAR2,
669
      sgbebuildfilter   IN   VARCHAR2
670
   );
671
 
672
   /*================================================================================================*/
673
   PROCEDURE add_build_machine (
674
      sdisplay_name          IN   VARCHAR2,
675
      smachine_hostname      IN   VARCHAR2,
676
      ngbeid                 IN   NUMBER,
677
      sdescription           IN   VARCHAR2
678
   );
679
   /*================================================================================================*/
680
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2);
681
   /*================================================================================================*/
682
   PROCEDURE update_build_machine (
683
      nbmcon_id              IN   NUMBER,
684
      sdisplay_name          IN   VARCHAR2,
685
      smachine_hostname      IN   VARCHAR2,
686
      ngbeid                 IN   NUMBER,
687
      sdescription           IN   VARCHAR2
688
   );
689
END pk_buildapi;
1374 dpurdie 690
/
691
--------------------------------------------------------
3959 dpurdie 692
--  DDL for Package PK_ENVIRONMENT
1374 dpurdie 693
--------------------------------------------------------
1373 dpurdie 694
 
3959 dpurdie 695
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT" IS
1373 dpurdie 696
/*
697
------------------------------
3959 dpurdie 698
||  Last Modified:  G.Huddy
699
||  Modified Date:  28/May/2008
700
||  Spec Version:   1.2
1373 dpurdie 701
------------------------------
702
*/
703
 
3959 dpurdie 704
	TYPE typeCur IS REF CURSOR;
705
 
1373 dpurdie 706
	/*================================================================================================*/
707
 
3959 dpurdie 708
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
709
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
710
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
711
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
712
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
713
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
714
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
715
 
716
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
717
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
718
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
719
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
720
 
721
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
722
 
723
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
724
 
725
 
726
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
727
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
728
 
729
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
730
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
731
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
732
	PROCEDURE APPROVE_MERGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
733
 
734
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
735
 
736
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
737
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
738
 
739
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN
740
							 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE,
741
							 CloneFromPvId IN NUMBER );
742
 
743
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
744
 
745
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
746
 
747
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
748
 
749
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
750
 
751
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1373 dpurdie 752
	/*================================================================================================*/
3959 dpurdie 753
 
754
END PK_ENVIRONMENT;
1374 dpurdie 755
/
756
--------------------------------------------------------
3959 dpurdie 757
--  DDL for Package PK_LICENCING
1374 dpurdie 758
--------------------------------------------------------
1373 dpurdie 759
 
3959 dpurdie 760
  CREATE OR REPLACE PACKAGE "PK_LICENCING" IS
761
/*
762
------------------------------
763
||  Last Modified:  G.Huddy
764
||  Modified Date:  19/Aug/2008
765
||  Spec Version:   1.0
766
------------------------------
767
*/
768
 
769
   TYPE typeCur IS REF CURSOR;
770
 
771
    /*================================================================================================*/
772
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
773
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
774
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER );
775
   FUNCTION  IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER;
776
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER );
777
   /*================================================================================================*/
778
 
779
END PK_LICENCING;
780
/
781
--------------------------------------------------------
782
--  DDL for Package PK_PACKAGE
783
--------------------------------------------------------
784
 
785
  CREATE OR REPLACE PACKAGE "PK_PACKAGE" 
1373 dpurdie 786
IS
787
/*
788
------------------------------
3959 dpurdie 789
||  Last Modified:  Jeremy Tweddle
790
||  Modified Date:  24/08/2007
1373 dpurdie 791
||
792
------------------------------
793
*/
794
   TYPE typecur IS REF CURSOR;
795
 
796
/*================================================================================================*/
797
   PROCEDURE new_version (
798
      nlastpvid                   IN       NUMBER,
799
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
800
      cbuildtype                  IN       CHAR,
801
      nsettopvid                  IN       NUMBER DEFAULT NULL,
802
      nrtagid                     IN       NUMBER,
803
      nuserid                     IN       NUMBER,
804
      enumissues_state_imported   IN       NUMBER,
805
      returnpvid                  OUT      NUMBER
806
   );
807
 
808
   PROCEDURE change_state (
809
      pvid       IN   NUMBER,
810
      newstate   IN   package_versions.dlocked%TYPE,
811
      userid     IN   NUMBER
812
   );
813
 
814
   PROCEDURE new_patch (
815
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
816
      nparentpvid        IN       NUMBER,
817
      spatchidlist       IN       VARCHAR2,
818
      nuserid            IN       NUMBER,
819
      returnpatchid      OUT      NUMBER
820
   );
821
 
822
   PROCEDURE obsolete_patch (
823
      patchid            IN   NUMBER,
824
      isobsolete         IN   CHAR,
825
      obsoletecomments   IN   VARCHAR2,
826
      userid             IN   NUMBER
827
   );
828
 
829
   PROCEDURE obsolete_patches (
830
      spatchidlist       IN   VARCHAR2,
831
      isobsolete         IN   CHAR,
832
      obsoletecomments   IN   VARCHAR2,
833
      userid             IN   NUMBER
834
   );
835
 
836
   PROCEDURE destroy_package (
837
      pvid               IN       NUMBER,
838
      overridewarnings   IN       CHAR DEFAULT 'N',
839
      problemstring      OUT      VARCHAR2
840
   );
841
 
842
   PROCEDURE add_process (
843
      nprocid         IN   processes.proc_id%TYPE,
844
      shealthtag      IN   processes.proc_name%TYPE,
845
      sprocdesc       IN   processes.proc_description%TYPE,
846
      scmdinterface   IN   processes.run_as%TYPE,
847
      spkgowner       IN   processes.pkg_owner%TYPE,
848
      sisinterface    IN   processes.is_interface%TYPE,
849
      npvid           IN   package_processes.pv_id%TYPE,
850
      nuserid         IN   NUMBER
851
   );
852
 
853
   PROCEDURE add_package_process (
854
      nprocidlist   IN   VARCHAR2,
855
      npvid         IN   package_processes.pv_id%TYPE,
856
      nuserid       IN   NUMBER
857
   );
858
 
859
 
860
 
861
   PROCEDURE remove_process (
862
      nprocid   IN   package_processes.proc_id%TYPE,
863
      npvid     IN   package_processes.pv_id%TYPE,
864
      nuserid   IN   NUMBER
865
   );
866
 
867
   PROCEDURE move_package (
868
   	  npvid  			  IN package_versions.pv_id%TYPE,
869
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
870
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
871
	  nuserid			  IN NUMBER		 
872
   ); 
873
 
3959 dpurdie 874
   PROCEDURE modify_product_state (
1373 dpurdie 875
   	  npvid IN package_versions.pv_id%TYPE,
3959 dpurdie 876
	  nrtagid IN release_tags.rtag_id%TYPE,
1373 dpurdie 877
	  nstateid IN product_states.state_id%TYPE,
878
	  nuserid IN NUMBER
879
   );
3959 dpurdie 880
 
881
   PROCEDURE add_code_review_url (
882
        npvid           IN    NUMBER,
883
        nprojid         IN    NUMBER,
884
        surl            IN    VARCHAR2,
885
        sreason         IN    VARCHAR2,
886
        ddateofreview   IN    DATE
887
   );
888
 
889
   PROCEDURE update_code_review_url (
890
        ncrid           IN    NUMBER,
891
        nprojid         IN    NUMBER,
892
        surl            IN    VARCHAR2,
893
        sreason         IN    VARCHAR2
894
   );
895
 
896
   PROCEDURE remove_code_review_url (
897
        ncrid           IN    NUMBER
898
   );
1373 dpurdie 899
/*================================================================================================*/
3959 dpurdie 900
END pk_package;
1374 dpurdie 901
/
902
--------------------------------------------------------
903
--  DDL for Package PK_PLANNED
904
--------------------------------------------------------
1373 dpurdie 905
 
906
  CREATE OR REPLACE PACKAGE "PK_PLANNED" IS
907
/*
908
------------------------------
909
||  Last Modified:  G.Huddy
910
||  Modified Date:  28/May/2008
911
||  Spec Version:   1.1
912
------------------------------
913
*/
914
 
915
	TYPE typeCur IS REF CURSOR;
916
 
917
    /*================================================================================================*/
918
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
919
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
920
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
921
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
922
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
923
	PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR);
924
	/*================================================================================================*/
925
 
926
END PK_PLANNED;
1374 dpurdie 927
/
928
--------------------------------------------------------
3959 dpurdie 929
--  DDL for Package PK_PROJECT
1374 dpurdie 930
--------------------------------------------------------
1373 dpurdie 931
 
3959 dpurdie 932
  CREATE OR REPLACE PACKAGE "PK_PROJECT" IS
1373 dpurdie 933
 
3959 dpurdie 934
    TYPE typecur IS REF CURSOR;
1373 dpurdie 935
 
3959 dpurdie 936
    /*------------------------------------------------------------------------*/
937
    PROCEDURE update_base_url (
938
        nprojid   IN  projects.proj_id%TYPE,
939
        sbaseurl  IN  VARCHAR2
940
    );
941
    /*------------------------------------------------------------------------*/
942
    PROCEDURE update_project_config (
943
    nprojid   IN  projects.proj_id%TYPE,
944
    sbaseurl  IN  VARCHAR2,
945
    sjirakey  IN  VARCHAR2
946
    );
947
    /*------------------------------------------------------------------------*/
1373 dpurdie 948
 
3959 dpurdie 949
    END pk_project;
1374 dpurdie 950
/
951
--------------------------------------------------------
952
--  DDL for Package PK_RELEASE
953
--------------------------------------------------------
1373 dpurdie 954
 
955
  CREATE OR REPLACE PACKAGE "PK_RELEASE" IS
956
/*
957
------------------------------
958
||  Last Modified:  S.Vukovic
959
||  Modified Date:  12/Sep/2005
960
||  Body Version:   3.0
961
------------------------------
962
*/
963
 
964
	TYPE typeCur IS REF CURSOR;
965
 
966
    /*================================================================================================*/
967
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
968
	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 );
969
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
970
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
971
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
972
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
973
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
974
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
975
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
976
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
977
	--PROCEDURE ADD_DEPRECATE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, nPkgId IN NUMBER );
978
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
979
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
980
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
981
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
982
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
983
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
984
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
985
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
986
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
987
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
988
 
989
	/*================================================================================================*/
990
 
991
END PK_RELEASE;
1374 dpurdie 992
/
993
--------------------------------------------------------
3959 dpurdie 994
--  DDL for Package PK_RMAPI
1374 dpurdie 995
--------------------------------------------------------
1373 dpurdie 996
 
3959 dpurdie 997
  CREATE OR REPLACE PACKAGE "PK_RMAPI" 
998
IS
999
   TYPE typecur IS REF CURSOR;
1373 dpurdie 1000
 
3959 dpurdie 1001
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
1002
      RETURN typecur;
1373 dpurdie 1003
 
3959 dpurdie 1004
   FUNCTION wip_iteration_package (
1005
      projname        VARCHAR2,
1006
      iterationname   VARCHAR2,
1007
      pkgname         VARCHAR2
1008
   )
1009
      RETURN typecur;
1373 dpurdie 1010
 
3959 dpurdie 1011
   FUNCTION auto_make_vcsrelease (
1012
      rtagid                   IN   NUMBER,
1013
      pkgname                  IN   VARCHAR2,
1014
      vext                     IN   VARCHAR2,
1015
      newpkgversion            IN   VARCHAR2,
1016
      vcstag                   IN   VARCHAR2,
1017
      dependenciesimportlist   IN   VARCHAR2,
1018
      isrippled                IN   NUMBER,
1019
      username                 IN   VARCHAR2
1020
   )
1021
      RETURN NUMBER;
1373 dpurdie 1022
 
1023
 
3959 dpurdie 1024
   PROCEDURE import_dependencies (
1025
      pvid                     IN   NUMBER,
1026
      dependenciesimportlist   IN   VARCHAR2,
1027
      userid                   IN   NUMBER
1028
   );
1373 dpurdie 1029
 
3959 dpurdie 1030
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
1031
      RETURN VARCHAR2;
1373 dpurdie 1032
 
3959 dpurdie 1033
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
1034
      RETURN VARCHAR2;
1373 dpurdie 1035
 
3959 dpurdie 1036
   PROCEDURE update_dash_board (rtagid IN NUMBER);
1373 dpurdie 1037
 
3959 dpurdie 1038
   FUNCTION exclude_from_build (
1039
      pvid          IN   NUMBER,
1040
      spkgversion   IN   VARCHAR2,
1041
      rtagid        IN   NUMBER,
1042
      username      IN   VARCHAR2
1043
   )
1044
      RETURN NUMBER;
1373 dpurdie 1045
 
3959 dpurdie 1046
   FUNCTION exclude_indirect_from_build (
1047
      pvid          IN   NUMBER,
1048
      spkgversion   IN   VARCHAR2,
1049
      rtagid        IN   NUMBER,
1050
      username      IN   VARCHAR2,
1051
      rootpvid      IN   NUMBER,
1052
      rootcause     IN   VARCHAR2,
1053
      rootfile      IN   VARCHAR2
1054
   )
1055
      RETURN NUMBER;
1373 dpurdie 1056
 
3959 dpurdie 1057
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);
1373 dpurdie 1058
 
3959 dpurdie 1059
   FUNCTION insert_package_metrics (
1060
      rtagid IN NUMBER,
1061
      pkgname IN VARCHAR2,
1062
      vext IN VARCHAR2,
1063
      metricstring IN VARCHAR2
1064
   )
1065
      RETURN NUMBER;
1373 dpurdie 1066
 
3959 dpurdie 1067
   PROCEDURE update_release_metrics (rtagid IN NUMBER);
1373 dpurdie 1068
 
3959 dpurdie 1069
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;
1070
 
1071
   PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER);
1072
 
1073
   FUNCTION isSVN( pkgid IN NUMBER ) RETURN NUMBER;
1074
 
1075
   FUNCTION isSVNbyName( pkgname IN VARCHAR2 ) RETURN NUMBER;
1076
 
1077
END pk_rmapi;
1374 dpurdie 1078
/
1079
--------------------------------------------------------
3959 dpurdie 1080
--  DDL for Package PK_WORK_IN_PROGRESS
1374 dpurdie 1081
--------------------------------------------------------
1373 dpurdie 1082
 
3959 dpurdie 1083
  CREATE OR REPLACE PACKAGE "PK_WORK_IN_PROGRESS" IS
1373 dpurdie 1084
/*
1085
------------------------------
1086
||  Last Modified:  S.Vukovic
3959 dpurdie 1087
||  Modified Date:  2/May/2005
1088
||  Spec Version:   1.0
1373 dpurdie 1089
------------------------------
1090
*/
1091
 
1092
	TYPE typeCur IS REF CURSOR;
1093
 
1094
    /*================================================================================================*/
1095
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1096
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
3959 dpurdie 1097
	PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER );
1098
 
1373 dpurdie 1099
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
3959 dpurdie 1100
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1373 dpurdie 1101
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1102
	/*================================================================================================*/
3959 dpurdie 1103
 
1104
END PK_WORK_IN_PROGRESS;
1374 dpurdie 1105
/
1106
--------------------------------------------------------
3959 dpurdie 1107
--  DDL for Package RM_ISSUES
1374 dpurdie 1108
--------------------------------------------------------
1373 dpurdie 1109
 
3959 dpurdie 1110
  CREATE OR REPLACE PACKAGE "RM_ISSUES" AS
1373 dpurdie 1111
 
3959 dpurdie 1112
	TYPE T_Cur IS REF CURSOR;
1373 dpurdie 1113
 
3959 dpurdie 1114
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;
1115
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER;
1116
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;
1117
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER;
1373 dpurdie 1118
 
3959 dpurdie 1119
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );
1120
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );
1121
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 );
1373 dpurdie 1122
 
3959 dpurdie 1123
END Rm_Issues;
1124
/
1125
--------------------------------------------------------
1126
--  DDL for Package Body PK_APP_UTILS
1127
--------------------------------------------------------
1373 dpurdie 1128
 
3959 dpurdie 1129
  CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS
1373 dpurdie 1130
 
3959 dpurdie 1131
/*
1132
------------------------------
1133
||  Last Modified:  S.Vukovic
1134
||  Modified Date:  26/Apr/2005
1135
||  Body Version:   1.0
1136
------------------------------
1137
*/
1373 dpurdie 1138
 
1139
 
1140
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1141
PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur)   IS
1373 dpurdie 1142
 
1143
 
1144
BEGIN
1145
 
1146
 
3959 dpurdie 1147
	IF (NOT RtagId IS NULL) THEN
1148
		-- Case with RTAG_ID present
1149
		OPEN records FOR
1150
		SELECT rt.PROJ_ID,
1151
			   rt.RTAG_ID AS RTAG_ID
1152
		  FROM RELEASE_TAGS rt
1153
		 WHERE rt.RTAG_ID = TO_NUMBER(RtagId);
1373 dpurdie 1154
 
3959 dpurdie 1155
	ELSIF (NOT ProjId IS NULL) THEN
1156
		-- Case with PROJ_ID present
1157
		OPEN records FOR
1158
		SELECT TO_NUMBER(ProjId) AS PROJ_ID,
1159
			   -1 AS RTAG_ID
1160
		  FROM DUAL;
1373 dpurdie 1161
 
3959 dpurdie 1162
	ELSE
1163
		-- Case with none present
1164
		OPEN records FOR
1165
		SELECT -1 AS PROJ_ID,
1166
			   -1 AS RTAG_ID
1167
		  FROM DUAL;
1373 dpurdie 1168
 
3959 dpurdie 1169
	END IF;
1373 dpurdie 1170
 
1171
 
1172
 
1173
 
3959 dpurdie 1174
   	--RETURN records;
1373 dpurdie 1175
 
1176
END;
1177
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1178
END PK_APP_UTILS;
1374 dpurdie 1179
/
1180
--------------------------------------------------------
3959 dpurdie 1181
--  DDL for Package Body PK_ARCHIVE
1374 dpurdie 1182
--------------------------------------------------------
1373 dpurdie 1183
 
3959 dpurdie 1184
  CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE" 
1373 dpurdie 1185
IS
3959 dpurdie 1186
/*
1187
------------------------------
1188
||  Author:  Rupesh Solanki
1189
||  Date:    26 October 2006
1190
||  Version:   1.0
1191
------------------------------
1192
*/
1193
/*---------------------------*/
1194
PROCEDURE populate_packages_table IS
1373 dpurdie 1195
 
3959 dpurdie 1196
BEGIN
1197
		  INSERT INTO archive_manager.PACKAGES
1198
		  (
1199
		  select * from packages where pkg_id not in 
1200
		  		  (select pkg_id from archive_manager.packages)
1201
		  );
1373 dpurdie 1202
 
3959 dpurdie 1203
          INSERT INTO archive_manager.PROCESSES
1204
          (
1205
          select * from processes where proc_id not in 
1206
            (select proc_id from archive_manager.processes)
1207
          );
1208
 
1373 dpurdie 1209
 
1210
 
3959 dpurdie 1211
END;
1373 dpurdie 1212
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1213
   PROCEDURE populate_archive_data_table (
1214
      nrtagid   IN   release_tags.rtag_id%TYPE
1373 dpurdie 1215
   )
1216
   IS
3959 dpurdie 1217
/*
1218
Reason: To populate the archive_data table with information regarding the
1219
         number of package versions that exist in other releases.
1220
*/
1221
      numcount      NUMBER;
1222
      numusedby     NUMBER;
1223
      numruntime    NUMBER;
1224
 
1225
      /* Get all the package versions in the release */
1226
      CURSOR archive_cur
1227
      IS
1228
         SELECT pv_id
1229
           FROM release_content
1230
          WHERE rtag_id = nrtagid;
1231
 
1232
      archive_rec   archive_cur%ROWTYPE;
1373 dpurdie 1233
   BEGIN
3959 dpurdie 1234
/*--------------- Business Rules Here -------------------*/
1235
/*-------------------------------------------------------*/
1236
      OPEN archive_cur;
1373 dpurdie 1237
 
3959 dpurdie 1238
      FETCH archive_cur
1239
       INTO archive_rec;
1240
 
1241
      WHILE archive_cur%FOUND
1242
      LOOP
1243
        /* How many packages depend on this package version? */
1244
         SELECT COUNT (*)
1245
           INTO numusedby
1246
           FROM package_dependencies
1247
          WHERE dpv_id = archive_rec.pv_id;
1248
 
1249
        /* How many project releases use this package version?  */
1250
         SELECT COUNT (*)
1251
           INTO numcount
1252
           FROM release_content
1253
          WHERE pv_id = archive_rec.pv_id;
1254
 
1255
        /* How many packages have this package version as runtime
1256
        dependency? */
1257
         SELECT COUNT (*)
1258
           INTO numruntime
1259
           FROM runtime_dependencies
1260
          WHERE rtd_id = archive_rec.pv_id;
1261
 
1262
        /* Insert into the archive_data table if they are not runtime dependant
1263
        and package dependant and they exist in that particular release only*/
1264
         IF numusedby = 0 AND numcount = 1 AND numruntime = 0
1373 dpurdie 1265
         THEN
3959 dpurdie 1266
            INSERT INTO archive_data
1267
                        (rtag_id, pv_id
1268
                        )
1269
                 VALUES (nrtagid, archive_rec.pv_id
1270
                        );
1373 dpurdie 1271
         END IF;
1272
 
3959 dpurdie 1273
         FETCH archive_cur
1274
          INTO archive_rec;
1275
      END LOOP;
1373 dpurdie 1276
   END;
1277
 
1278
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1279
   PROCEDURE migrate_pv_to_archive_schema (
1280
      nrtagid   IN   release_tags.rtag_id%TYPE
1373 dpurdie 1281
   )
1282
   IS
1283
   BEGIN
1284
 
3959 dpurdie 1285
      /* MIGRATION - PACKAGE_VERSIONS */
1286
      INSERT INTO archive_manager.package_versions
1287
         SELECT *
1288
           FROM package_versions
1289
          WHERE pv_id IN (SELECT pv_id
1290
                            FROM archive_data);
1373 dpurdie 1291
 
3959 dpurdie 1292
      /* MIGRATION - PACKAGE_BUILD_ENV */
1293
      INSERT INTO archive_manager.package_build_env
1294
         SELECT *
1295
           FROM package_build_env
1296
          WHERE pv_id IN (SELECT pv_id
1297
                            FROM archive_data);
1373 dpurdie 1298
 
3959 dpurdie 1299
      /* PURGE DATA FROM PACKAGE_BUILD_ENV */
1300
      DELETE FROM package_build_env
1301
            WHERE pv_id IN (SELECT pv_id
1302
                              FROM archive_data);
1373 dpurdie 1303
 
3959 dpurdie 1304
      /* MIGRATION - PACKAGE_BUILD_INFO */
1305
      INSERT INTO archive_manager.package_build_info
1306
         SELECT *
1307
           FROM package_build_info
1308
          WHERE pv_id IN (SELECT pv_id
1309
                            FROM archive_data);
1373 dpurdie 1310
 
3959 dpurdie 1311
      /* PURGE DATA FROM PACKAGE_BUILD_info */
1312
      DELETE FROM package_build_info
1313
            WHERE pv_id IN (SELECT pv_id
1314
                              FROM archive_data);							  
1373 dpurdie 1315
 
3959 dpurdie 1316
      /* MIGRATION - UNIT_TESTS  */
1317
      INSERT INTO archive_manager.unit_tests
1318
         SELECT *
1319
           FROM unit_tests
1320
          WHERE pv_id IN (SELECT pv_id
1321
                            FROM archive_data);
1373 dpurdie 1322
 
3959 dpurdie 1323
      /* PURGE DATA FROM UNIT_TESTS*/
1324
      DELETE FROM unit_tests
1325
            WHERE pv_id IN (SELECT pv_id
1326
                              FROM archive_data);
1373 dpurdie 1327
 
3959 dpurdie 1328
      /* MIGRATION - PACKAGE_PROCESSES */
1329
      INSERT INTO archive_manager.package_processes
1330
         SELECT *
1331
           FROM package_processes
1332
          WHERE pv_id IN (SELECT pv_id
1333
                            FROM archive_data);
1373 dpurdie 1334
 
3959 dpurdie 1335
      /* PURGE DATA FROM PACKAGE_PROCESSES*/
1336
      DELETE FROM package_processes
1337
            WHERE pv_id IN (SELECT pv_id
1338
                              FROM archive_data);
1373 dpurdie 1339
 
3959 dpurdie 1340
      /* MIGRATION - PACKAGE_DEPENDENCIES */
1341
      INSERT INTO archive_manager.package_dependencies
1342
         SELECT *
1343
           FROM package_dependencies
1344
          WHERE pv_id IN (SELECT pv_id
1345
                            FROM archive_data);
2735 dpurdie 1346
 
3959 dpurdie 1347
      /* PURGE DATA FROM PACKAGE_DEPENDENCIES*/
1348
      DELETE FROM package_dependencies
1349
            WHERE pv_id IN (SELECT pv_id
1350
                              FROM archive_data);
1373 dpurdie 1351
 
3959 dpurdie 1352
      /* MIGRATION - CODE_REVIEWS */
1353
      INSERT INTO archive_manager.code_reviews
1354
         SELECT *
1355
           FROM code_reviews
1356
          WHERE pv_id IN (SELECT pv_id
1357
                            FROM archive_data);
1373 dpurdie 1358
 
3959 dpurdie 1359
      /* PURGE DATA FROM CODE_REVIEWS*/
1360
      DELETE FROM code_reviews
1361
            WHERE pv_id IN (SELECT pv_id
1362
                              FROM archive_data);
1373 dpurdie 1363
 
3959 dpurdie 1364
      /* MIGRATION - RUNTIME_DEPENDENCIES*/
1365
      INSERT INTO archive_manager.runtime_dependencies
1366
         SELECT *
1367
           FROM runtime_dependencies
1368
          WHERE pv_id IN (SELECT pv_id
1369
                            FROM archive_data);
1373 dpurdie 1370
 
3959 dpurdie 1371
      /* PURGE DATA FROM RUNTIME_DEPENDENCIES*/
1372
      DELETE FROM runtime_dependencies
1373
            WHERE pv_id IN (SELECT pv_id
1374
                              FROM archive_data);
1373 dpurdie 1375
 
3959 dpurdie 1376
      /* MIGRATION - PACKAGE_DOCUMENTS */
1377
      INSERT INTO archive_manager.package_documents
1378
         SELECT *
1379
           FROM package_documents
1380
          WHERE pv_id IN (SELECT pv_id
1381
                            FROM archive_data);
1373 dpurdie 1382
 
3959 dpurdie 1383
      /* PURGE DATA FROM PACKAGE_DOCUMENTS*/
1384
      DELETE FROM package_documents
1385
            WHERE pv_id IN (SELECT pv_id
1386
                              FROM archive_data);
1373 dpurdie 1387
 
3959 dpurdie 1388
      /* MIGRATION - PACKAGE_PATCHES */
1389
      INSERT INTO archive_manager.package_patches
1390
         SELECT *
1391
           FROM package_patches
1392
          WHERE pv_id IN (SELECT pv_id
1393
                            FROM archive_data);
1373 dpurdie 1394
 
3959 dpurdie 1395
      /* PURGE DATA FROM PACKAGE_PATCHES*/
1396
      DELETE FROM package_patches
1397
            WHERE pv_id IN (SELECT pv_id
1398
                              FROM archive_data);
1373 dpurdie 1399
 
3959 dpurdie 1400
      /* MIGRATION - CQ_ISSUES */
1401
      INSERT INTO archive_manager.cq_issues
1402
         SELECT *
1403
           FROM cq_issues
1404
          WHERE pv_id IN (SELECT pv_id
1405
                            FROM archive_data);
1373 dpurdie 1406
 
3959 dpurdie 1407
      /* PURGE DATA FROM CQ_ISSUES*/
1408
      DELETE FROM cq_issues
1409
            WHERE pv_id IN (SELECT pv_id
1410
                              FROM archive_data);
1373 dpurdie 1411
 
3959 dpurdie 1412
      /* MIGRATION - ADDITIONAL_NOTES */
1413
      INSERT INTO archive_manager.additional_notes
1414
         SELECT *
1415
           FROM additional_notes
1416
          WHERE pv_id IN (SELECT pv_id
1417
                            FROM archive_data);
1373 dpurdie 1418
 
3959 dpurdie 1419
      /* PURGE DATA FROM ADDITIONAL_NOTES*/
1420
      DELETE FROM additional_notes
1421
            WHERE pv_id IN (SELECT pv_id
1422
                              FROM archive_data);
1373 dpurdie 1423
 
3959 dpurdie 1424
      /* MIGRATION - RELEASE_COMPONENTS */
1425
      INSERT INTO archive_manager.release_components
1426
         SELECT *
1427
           FROM release_components
1428
          WHERE pv_id IN (SELECT pv_id
1429
                            FROM archive_data);
1373 dpurdie 1430
 
3959 dpurdie 1431
      /* PURGE DATA FROM RELEASE_COMPONENTS*/
1432
      DELETE FROM release_components
1433
            WHERE pv_id IN (SELECT pv_id
1434
                              FROM archive_data);
1373 dpurdie 1435
 
3959 dpurdie 1436
      /* MIGRATION - IGNORE_WARNINGS */
1437
      INSERT INTO archive_manager.ignore_warnings
1438
         SELECT *
1439
           FROM ignore_warnings
1440
          WHERE pv_id IN (SELECT pv_id
1441
                            FROM archive_data);
1374 dpurdie 1442
 
3959 dpurdie 1443
      /* PURGE DATA FROM IGNORE_WARNINGS*/
1444
      DELETE FROM ignore_warnings
1445
            WHERE pv_id IN (SELECT pv_id
1446
                              FROM archive_data);
1373 dpurdie 1447
 
3959 dpurdie 1448
      /* PURGE DATA FROM WORK_IN_PROGRESS */
1449
      DELETE FROM work_in_progress
1450
            WHERE rtag_id = nrtagid;
1374 dpurdie 1451
 
3959 dpurdie 1452
      /* PURGE DATA FROM PLANNED */
1453
      DELETE FROM planned
1454
            WHERE rtag_id = nrtagid;
1373 dpurdie 1455
 
3959 dpurdie 1456
      /* MIGRATION - JIRA_ISSUES */
1457
      INSERT INTO archive_manager.jira_issues
1458
         SELECT *
1459
           FROM jira_issues
1460
          WHERE pv_id IN (SELECT pv_id
1461
                            FROM archive_data);
1373 dpurdie 1462
 
3959 dpurdie 1463
      /* PURGE DATA FROM JIRA_ISSUES*/
1464
      DELETE FROM jira_issues
1465
            WHERE pv_id IN (SELECT pv_id
1466
                              FROM archive_data);
1373 dpurdie 1467
 
3959 dpurdie 1468
      /* MIGRATION - PRODUCT_COMPONENTS */
1469
      INSERT INTO archive_manager.product_components
1470
         SELECT *
1471
           FROM product_components
1472
          WHERE pv_id IN (SELECT pv_id
1473
                            FROM archive_data);
1373 dpurdie 1474
 
3959 dpurdie 1475
      /* PURGE DATA FROM PRODUCT_COMPONENTS*/
1476
      DELETE FROM product_components
1477
            WHERE pv_id IN (SELECT pv_id
1478
                              FROM archive_data);
1373 dpurdie 1479
 
3959 dpurdie 1480
      /* MIGRATION - ACTION_LOG */
1481
      INSERT INTO archive_manager.action_log
1482
         SELECT *
1483
           FROM action_log
1484
          WHERE pv_id IN (SELECT pv_id
1485
                            FROM archive_data);
1373 dpurdie 1486
 
3959 dpurdie 1487
      /* PURGE DATA FROM ACTION_LOG*/
1488
      DELETE FROM action_log
1489
            WHERE pv_id IN (SELECT pv_id
1490
                              FROM archive_data);
1373 dpurdie 1491
 
1492
 
1493
   END;
1494
 
1495
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1496
   PROCEDURE migrate_rtag_to_archive_schema (
1497
      nrtagid   IN   release_tags.rtag_id%TYPE
1373 dpurdie 1498
   )
1499
   IS
1500
   BEGIN
3959 dpurdie 1501
      /* MIGRATION - DO_NOT_RIPPLE */
1502
      INSERT INTO archive_manager.do_not_ripple
1503
         SELECT *
1504
           FROM do_not_ripple dnp
1505
          WHERE rtag_id = nrtagid;
1373 dpurdie 1506
 
3959 dpurdie 1507
      /* PURGE DATA FROM DO_NOT_RIPPLE */
1508
      DELETE FROM do_not_ripple
1509
            WHERE rtag_id = nrtagid;
1510
 
1511
      /* MIGRATION - ADVISORY_RIPPLES*/
1512
      INSERT INTO archive_manager.advisory_ripples
1513
         SELECT *
1514
           FROM advisory_ripple dnp
1515
          WHERE rtag_id = nrtagid;
1373 dpurdie 1516
 
3959 dpurdie 1517
      /* PURGE DATA FROM ADVISORY_RIPPLES*/
1518
      DELETE FROM advisory_ripple
1519
            WHERE rtag_id = nrtagid;			
1373 dpurdie 1520
 
3959 dpurdie 1521
      /* MIGRATION - RELEASE_CONTENT */
1522
      INSERT INTO archive_manager.release_content
1523
         SELECT *
1524
           FROM release_content
1525
          WHERE rtag_id = nrtagid;
1373 dpurdie 1526
 
3959 dpurdie 1527
      /* PURGE DATA FROM RELEASE_CONTENT*/
1528
      DELETE FROM release_content
1529
            WHERE rtag_id = nrtagid;
1373 dpurdie 1530
 
3959 dpurdie 1531
      /* MIGRATION - NOTIFICATION_HISTORY */
1532
      INSERT INTO archive_manager.notification_history
1533
         SELECT *
1534
           FROM notification_history
1535
          WHERE rtag_id = nrtagid;
1373 dpurdie 1536
 
3959 dpurdie 1537
      /* PURGE DATA FROM NOTIFICATION_HISTORY*/
1538
      DELETE FROM notification_history
1539
            WHERE rtag_id = nrtagid;
1373 dpurdie 1540
 
3959 dpurdie 1541
      /* MIGRATION - BUILD_ORDER   */
1542
      INSERT INTO archive_manager.build_order
1543
         SELECT *
1544
           FROM build_order
1545
          WHERE rtag_id = nrtagid;
1373 dpurdie 1546
 
3959 dpurdie 1547
      /* PURGE DATA FROM BUILD_ORDER*/
1548
      DELETE FROM build_order
1549
            WHERE rtag_id = nrtagid;
1373 dpurdie 1550
 
3959 dpurdie 1551
      /* MIGRATION - PROJECT_ACTION_LOG */
1552
      INSERT INTO archive_manager.project_action_log
1553
         SELECT *
1554
           FROM project_action_log
1555
          WHERE rtag_id = nrtagid;
1373 dpurdie 1556
 
3959 dpurdie 1557
      /* PURGE DATA FROM PROJECT_ACTION_LOG */
1558
      DELETE FROM project_action_log
1559
            WHERE rtag_id = nrtagid;
1373 dpurdie 1560
 
3959 dpurdie 1561
      /* MIGRATION - DEPRECATED_PACKAGES */
1562
      INSERT INTO archive_manager.deprecated_packages
1563
         SELECT *
1564
           FROM deprecated_packages
1565
          WHERE rtag_id = nrtagid;
1373 dpurdie 1566
 
3959 dpurdie 1567
      /* PURGE DATA FROM DEPRECATED_PACKAGES */
1568
      DELETE FROM deprecated_packages
1569
            WHERE rtag_id = nrtagid;
1570
 
1571
      /* MIGRATION - RELEASE_TAGS */
1572
      INSERT INTO archive_manager.release_tags
1573
         SELECT *
1373 dpurdie 1574
           FROM release_tags
3959 dpurdie 1575
          WHERE rtag_id = nrtagid;
1576
 
1577
 
1578
      /* PURGE DATA FROM PACKAGE_VERSIONS*/
1579
      DELETE FROM package_versions
1580
            WHERE pv_id IN (SELECT pv_id
1581
                              FROM archive_data);
1582
 
1583
 
1373 dpurdie 1584
   END;
1585
 
1586
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1587
   PROCEDURE clean_up_archive_data_table (
1588
      nrtagid   IN   release_tags.rtag_id%TYPE
1373 dpurdie 1589
   )
1590
   IS
1591
   BEGIN
3959 dpurdie 1592
      /* Cleaning Up The Archive_Data Table */
1593
      DELETE FROM archive_data
1594
            WHERE rtag_id = nrtagid;
1373 dpurdie 1595
   END;
1596
 
1597
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1598
   PROCEDURE write_action_log (
1599
      nuserid   IN   NUMBER,
1600
      nrtagid   IN   release_tags.rtag_id%TYPE
1373 dpurdie 1601
   )
1602
   IS
1603
   BEGIN
3959 dpurdie 1604
      /* Write Into Archive_Action_Log Table */
1605
      INSERT INTO archive_action_log
1606
                  (user_id, date_time_stamp, rtag_id,
1607
                   description
1373 dpurdie 1608
                  )
3959 dpurdie 1609
           VALUES (nuserid, ora_sysdatetime, nrtagid,
1610
                   'Release has been archived to the ARCHIVE_MANAGER schema'
1373 dpurdie 1611
                  );
1612
   END;
1613
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 1614
END pk_archive; 
1374 dpurdie 1615
/
1616
--------------------------------------------------------
1617
--  DDL for Package Body PK_BUILDAPI
1618
--------------------------------------------------------
1373 dpurdie 1619
 
1620
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI" 
1621
IS
1622
   /*-------------------------------------------------------------------------------------------------------*/
1623
   PROCEDURE add_product_component (
1624
      npvid           IN   NUMBER,
1625
      sosname         IN   VARCHAR2,
1626
      sorigfilepath   IN   VARCHAR2,
1627
      sfilename       IN   VARCHAR2,
1628
      sdestfilepath   IN   VARCHAR2,
1629
      nbytesize       IN   NUMBER,
1630
      scrccksum       IN   VARCHAR2
1631
   )
1632
   IS
1633
      nosid   NUMBER;
1634
   BEGIN
1635
      /*--------------- Business Rules Here -------------------*/
1636
      -- OS Name Requirements --
1637
      IF (sosname IS NULL)
1638
      THEN
1639
         raise_application_error (-20000, 'OsName cannot be NULL.');
1640
      END IF;
1641
 
1642
      -- File Requirements --
1643
      IF (NOT sfilename IS NULL)
1644
      THEN
1645
         IF (nbytesize IS NULL)
1646
         THEN
1647
            raise_application_error (-20000, 'Byte Size cannot be NULL.');
1648
         ELSIF (scrccksum IS NULL)
1649
         THEN
1650
            raise_application_error (-20000, 'CRC CKSUM cannot be NULL.');
1651
         END IF;
1652
      END IF;
1653
 
1654
      -- Folder Requirements --
1655
      -- No requirements for now.
1656
 
1657
      /*-------------------------------------------------------*/
1658
 
1659
      -- Get OsId
1660
      nosid := get_osid (sosname);
1661
 
1662
      -- Insert component entry
1663
      INSERT INTO product_components
1664
                  (pv_id, os_id, file_path, file_name, destination_path,
1665
                  byte_size, crc_cksum
1666
                  )
1667
         VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,
1668
                  nbytesize, scrccksum
1669
                  );
1670
   EXCEPTION
1671
      WHEN DUP_VAL_ON_INDEX
1672
      THEN
1673
         raise_application_error (-20000,
1674
                                 'Cannot have duplicate product components.'
1675
                                 );
1676
   END;
1677
 
1678
/*-------------------------------------------------------------------------------------------------------*/
1679
   PROCEDURE remove_all_product_components (
1680
      npvid     IN   NUMBER,
1681
      sosname   IN   VARCHAR2
1682
   )
1683
   IS
1684
      nosid   NUMBER;
1685
   BEGIN
1686
/*--------------- Business Rules Here -------------------*/
1687
/*-------------------------------------------------------*/
1688
 
1689
      -- Get OsId
1690
      nosid := get_osid (sosname);
1691
 
1692
      -- Delete component entry
1693
      DELETE FROM product_components pc
1694
            WHERE pc.pv_id = npvid AND pc.os_id = nosid;
1695
   END;
1696
 
1697
/*-------------------------------------------------------------------------------------------------------*/
1698
   FUNCTION get_osid (sosname IN VARCHAR2)
1699
      RETURN NUMBER
1700
   IS
1701
      code   NUMBER;
1702
   BEGIN
1703
      -- Get Platform Code --
1704
      SELECT pf.code
1705
      INTO code
1706
      FROM platforms pf
1707
      WHERE UPPER (pf.NAME) = UPPER (sosname);
1708
 
1709
      RETURN code;
1710
   EXCEPTION
1711
      WHEN NO_DATA_FOUND
1712
      THEN
1713
         raise_application_error
1714
            (-20000,
1715
               'Platform '
1716
            || sosname
1717
            || ' is not valid. It needs to be added to PLATFORMS table in Release Manager.'
1718
            );
1719
         RAISE;
1720
   END;
1721
 
1722
/*-------------------------------------------------------------------------------------------------------
1723
Obsolete - Superseded by update_build_service_info
1724
*/
1725
 
1726
   PROCEDURE update_build_service (
1727
      sdatabaseserver   IN   VARCHAR2,
1728
      swebserver        IN   VARCHAR2,
1729
      smailserver       IN   VARCHAR2,
1730
      smailsender       IN   VARCHAR2,
1731
      sdiskspace        IN   VARCHAR2,
1732
      ssbommanagement   IN   VARCHAR2
1733
   )
1734
   IS
1735
   BEGIN
1736
      UPDATE build_service_config
1737
         SET config = sdatabaseserver
1738
      WHERE service = 'DATABASE SERVER';
1739
 
1740
      UPDATE build_service_config
1741
         SET config = swebserver
1742
      WHERE service = 'WEB SERVER';
1743
 
1744
      UPDATE build_service_config
1745
         SET config = smailserver
1746
      WHERE service = 'MAIL SERVER';
1747
 
1748
      UPDATE build_service_config
1749
         SET config = smailsender
1750
      WHERE service = 'BUILD FAILURE MAIL SENDER';
1751
 
1752
      UPDATE build_service_config
1753
         SET config = sdiskspace
1754
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
1755
 
1756
      UPDATE build_service_config
1757
         SET config = ssbommanagement
1758
      WHERE service = 'SBOM MANAGEMENT';
1759
   END;
1760
 
1761
/*-------------------------------------------------------------------------------------------------------*/
1762
   PROCEDURE update_build_service_info (
1763
      sdatabaseserver   IN   VARCHAR2,
1764
      sarchiveserver    IN   VARCHAR2,
1765
      smailserver       IN   VARCHAR2,
1766
      smailsender       IN   VARCHAR2,
1767
      sdiskspace        IN   VARCHAR2,
1768
      ssbommanagement   IN   VARCHAR2
1769
   )
1770
   IS
1771
   BEGIN
1772
      UPDATE build_service_config
1773
         SET config = sdatabaseserver
1774
      WHERE service = 'DATABASE SERVER';
1775
 
1776
      UPDATE build_service_config
1777
         SET config = sarchiveserver
1778
      WHERE service = 'ARCHIVE SERVER';
1779
 
1780
      UPDATE build_service_config
1781
         SET config = smailserver
1782
      WHERE service = 'MAIL SERVER';
1783
 
1784
      UPDATE build_service_config
1785
         SET config = smailsender
1786
      WHERE service = 'BUILD FAILURE MAIL SENDER';
1787
 
1788
      UPDATE build_service_config
1789
         SET config = sdiskspace
1790
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
1791
 
1792
      UPDATE build_service_config
1793
         SET config = ssbommanagement
1794
      WHERE service = 'SBOM MANAGEMENT';
1795
   END;
1796
 
1797
 
1798
/*-------------------------------------------------------------------------------------------------------*/
1799
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)
1800
   IS
1801
      gbe_id   NUMBER;
1802
   BEGIN
1803
      -- Get GBE_ID
1804
      SELECT seq_gbe_id.NEXTVAL
1805
      INTO gbe_id
1806
      FROM DUAL;
1807
 
1808
      INSERT INTO gbe_machtype
1809
                  (gbe_id, gbe_value
1810
                  )
1811
         VALUES (gbe_id, sgbevalue
1812
                  );
1813
   END;
1814
 
1815
/*-------------------------------------------------------------------------------------------------------*/
1816
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)
1817
   IS
1818
   BEGIN
1819
      DELETE FROM gbe_machtype
1820
            WHERE gbe_id = ngbe_id;
1821
   END;
1822
 
1823
/*-------------------------------------------------------------------------------------------------------*/
1824
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)
1825
   IS
1826
   BEGIN
1827
      UPDATE gbe_machtype
1828
         SET gbe_value = sgbevalue
1829
      WHERE gbe_id = ngbe_id;
1830
   END;
1831
 
1832
/*-------------------------------------------------------------------------------------------------------*/
1833
  --This function is obsolete.  It was replaced by add_daemon_config. Done for DEVI-046806
1834
   PROCEDURE add_daemon (
1835
      sdaemonhostname   IN   VARCHAR2,
1836
      nrtagid           IN   NUMBER,
1837
      ngbeid            IN   NUMBER,
1838
      sgbebuildfilter   IN   VARCHAR2
1839
   )
1840
   IS
1841
      nrecordnumber   NUMBER;
1842
      nrconid         NUMBER;
1843
   BEGIN
1844
      -- Get RCON_ID
1845
      SELECT seq_rcon_id.NEXTVAL
1846
      INTO nrconid
1847
      FROM DUAL;
1848
 
1849
      SELECT COUNT (*)
1850
      INTO nrecordnumber
1851
      FROM release_config
1852
      WHERE rtag_id = nrtagid;
1853
 
1854
      IF nrecordnumber = 0
1855
      THEN
1856
         INSERT INTO release_config
1857
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
1858
                     gbe_id, gbe_buildfilter
1859
                     )
1860
            VALUES (nrconid, nrtagid, sdaemonhostname, 'M',
1861
                     ngbeid, sgbebuildfilter
1862
                     );
1863
      ELSE
1864
         INSERT INTO release_config
1865
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
1866
                     gbe_id, gbe_buildfilter
1867
                     )
1868
            VALUES (nrconid, nrtagid, sdaemonhostname, 'S',
1869
                     ngbeid, sgbebuildfilter
1870
                     );
1871
      END IF;
1872
 
1873
      -- A newly configured daemon should initially be paused (DEVI-047277)
1874
      INSERT INTO run_level
1875
                  (rcon_id, pause)
1876
           VALUES (nrconid, 1);
1877
   END;
1878
 
1879
/*-------------------------------------------------------------------------------------------------------*/
1880
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2)
1881
   IS
1882
   BEGIN
1883
      -- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.
1884
      DELETE FROM daemon_action_log
1885
            WHERE rcon_id IN (
1886
                     SELECT *
1887
                     FROM THE
1888
                              (SELECT CAST
1889
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
1890
                                          )
1891
                                 FROM DUAL
1892
                              ));
1893
 
1894
      DELETE FROM run_level
1895
            WHERE rcon_id IN (
1896
                     SELECT *
1897
                     FROM THE
1898
                              (SELECT CAST
1899
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
1900
                                          )
1901
                                 FROM DUAL
1902
                              ));
1903
 
1904
      DELETE FROM abt_action_log
1905
            WHERE rcon_id IN (
1906
                     SELECT *
1907
                     FROM THE
1908
                              (SELECT CAST
1909
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
1910
                                          )
1911
                                 FROM DUAL
1912
                              ));
1913
 
1914
      -- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.
1915
      DELETE FROM release_config
1916
            WHERE rcon_id IN (
1917
                     SELECT *
1918
                     FROM THE
1919
                              (SELECT CAST
1920
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
1921
                                          )
1922
                                 FROM DUAL
1923
                              ));
1924
   END;
1925
 
1926
/*-------------------------------------------------------------------------------------------------------*/
1927
  --This function is obsolete.  It was replaced by update_daemon_config for DEVI-046806
1928
   PROCEDURE update_daemon (
1929
      sdaemonhostname   IN   VARCHAR2,
1930
      nrconid           IN   NUMBER,
1931
      ngbeid            IN   NUMBER,
1932
      sgbebuildfilter   IN   VARCHAR2
1933
   )
1934
   IS
1935
   BEGIN
1936
      UPDATE release_config
1937
         SET daemon_hostname = sdaemonhostname,
1938
            gbe_id = ngbeid,
1939
            gbe_buildfilter = sgbebuildfilter
1940
      WHERE rcon_id = nrconid;
1941
   END;
1942
 
1943
/*-------------------------------------------------------------------------------------------------------*/
1944
   PROCEDURE insert_schedule_info (
1945
      dschedulepause     IN   DATE,
1946
      dscheduleresume    IN   DATE,
1947
      crepeat            IN   VARCHAR2,
1948
      cindefinitepause   IN   VARCHAR2
1949
   )
1950
   IS
1951
      nscheduledid   NUMBER;
1952
   BEGIN
1953
      -- Get Next Available Scheduled Id
1954
      SELECT seq_scheduled_id.NEXTVAL
1955
      INTO nscheduledid
1956
      FROM DUAL;
1957
 
1958
      INSERT INTO run_level_schedule
1959
         VALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,
1960
                  cindefinitepause);
1961
   END;
1962
 
1963
/*-------------------------------------------------------------------------------------------------------*/
1964
   PROCEDURE delete_schedule (nscheduleid IN NUMBER)
1965
   IS
1966
   BEGIN
1967
      DELETE FROM run_level_schedule
1968
            WHERE scheduled_id = nscheduleid;
1969
   END;
1970
 
1971
/*-------------------------------------------------------------------------------------------------------*/
1972
   PROCEDURE set_infinite_pause
1973
   IS
1974
      nscheduledid   NUMBER;
1975
   BEGIN
1976
      -- Get Next Available Scheduled Id
1977
      SELECT seq_scheduled_id.NEXTVAL
1978
      INTO nscheduledid
1979
      FROM DUAL;
1980
 
1981
      INSERT INTO run_level_schedule
1982
         VALUES (nscheduledid, NULL, NULL, NULL, 'P');
1983
   END;
1984
 
1985
/*-------------------------------------------------------------------------------------------------------*/
1986
   PROCEDURE set_resume
1987
   IS
1988
   BEGIN
1989
      DELETE FROM run_level_schedule
1990
            WHERE indefinite_pause = 'P';
1991
   END;
1992
 
1993
/*-------------------------------------------------------------------------------------------------------*/
1994
   PROCEDURE delete_out_of_date_schedule
1995
   IS
1996
   BEGIN
1997
      DELETE FROM run_level_schedule
1998
            WHERE scheduled_resume < ora_sysdatetime AND repeat = 0;
1999
   END;
2000
 
2001
/*-------------------------------------------------------------------------------------------------------*/
2002
   PROCEDURE set_daemon_resume (nrconid IN NUMBER)
2003
   IS
2004
   BEGIN
2005
      UPDATE run_level
2006
         SET PAUSE = NULL
2007
      WHERE rcon_id = nrconid;
2008
   END;
2009
 
2010
/*-------------------------------------------------------------------------------------------------------*/
2011
   PROCEDURE set_daemon_pause (nrconid IN NUMBER)
2012
   IS
2013
   BEGIN
2014
      UPDATE run_level
2015
         SET PAUSE = 1
2016
      WHERE rcon_id = nrconid;
2017
   END;
2018
/*-------------------------------------------------------------------------------------------------------*/
2019
   PROCEDURE set_daemon_disable (nrconid NUMBER)
2020
   IS
2021
   BEGIN
2022
      UPDATE run_level
2023
         SET PAUSE = 2
2024
      WHERE rcon_id = nrconid;
2025
   END;
2026
 
2027
/*-------------------------------------------------------------------------------------------------------*/
2028
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)
2029
   IS
2030
   BEGIN
2031
     UPDATE run_level
2032
     SET pause = nstate
2033
     WHERE rcon_id IN
2034
     (SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);
2035
   END;
2036
 
2037
/*-------------------------------------------------------------------------------------------------------*/
2038
   -- inserts a new daemon instruction
2039
   -- This is for use by the Release Manager Website code.
2040
   --
2041
   PROCEDURE insert_daemon_inst
2042
   ( nOp_code IN NUMBER
2043
   , nRtag_id IN NUMBER
2044
   , nPv_id IN NUMBER
2045
   , nSchedDate IN DATE
2046
   , nRepeatSecs IN NUMBER
2047
   , nAddedDate IN DATE
2048
   , nUser_id IN NUMBER
2049
   ) IS
2050
      nInstId   NUMBER;
2051
   BEGIN
2052
      -- Get Next Available Scheduled Id
2053
      SELECT seq_daemon_instruction_id.NEXTVAL
2054
      INTO nInstId
2055
      FROM DUAL;
2056
 
2057
      INSERT INTO Daemon_Instructions
2058
         VALUES (nInstId, nOp_code, nRtag_id,
2059
                  nPv_id, nSchedDate, nRepeatSecs,
2060
                  nAddedDate, nUser_id, '0');
2061
   EXCEPTION
2062
      WHEN DUP_VAL_ON_INDEX
2063
      THEN
2064
         raise_application_error (-20000,
2065
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
2066
                                 );
2067
      WHEN OTHERS
2068
      THEN
2069
         raise;
2070
   END insert_daemon_inst;
2071
 
2072
/*-------------------------------------------------------------------------------------------------------*/
2073
   -- Deletes a daemon instruction matching the specified instruction ID
2074
   --
2075
   PROCEDURE del_daemon_inst
2076
   ( nInstId IN NUMBER
2077
   ) IS
2078
 
2079
   BEGIN
2080
      DELETE FROM Daemon_Instructions
2081
      WHERE DAEMON_INSTRUCTIONS_ID = nInstId;
2082
 
2083
   END del_daemon_inst;
2084
 
2085
/*-------------------------------------------------------------------------------------------------------*/
2086
   -- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id
2087
   --
2088
   PROCEDURE del_daemon_inst_by_rtag_pvid(
2089
      nOp_code IN NUMBER,
2090
      nRtag_id IN NUMBER,
2091
      nPv_id IN NUMBER
2092
   ) IS
2093
   BEGIN
2094
      DELETE FROM Daemon_Instructions
2095
      WHERE OP_CODE = nOp_code
2096
      AND RTAG_ID = nRtag_id
2097
      AND PV_ID   = nPv_id;
2098
 
2099
   END del_daemon_inst_by_rtag_pvid;
2100
 
2101
/*-------------------------------------------------------------------------------------------------------*/
2102
   -- Updates a daemon instruction
2103
   -- This is for use by the Release Manager Website code.
2104
   --
2105
   PROCEDURE update_daemon_inst
2106
   ( nInstId IN NUMBER
2107
   , nOp_code IN NUMBER
2108
   , nRtag_id IN NUMBER
2109
   , nPv_id IN NUMBER
2110
   , nSchedDate IN DATE
2111
   , nRepeatSecs IN NUMBER
2112
   , nAddedDate IN DATE
2113
   , nUser_id IN NUMBER
2114
   ) IS
2115
      CURSOR daemon_inst_cur IS
2116
         SELECT *
2117
         FROM daemon_instructions di
2118
         WHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;
2119
 
2120
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
2121
 
2122
      exc_inst_removed EXCEPTION;
2123
   BEGIN
2124
      OPEN daemon_inst_cur;
2125
 
2126
      FETCH daemon_inst_cur
2127
      INTO daemon_inst_rec;
2128
 
2129
      IF daemon_inst_cur%FOUND THEN
2130
 
2131
         UPDATE Daemon_Instructions
2132
         SET op_code = nOp_code,
2133
            rtag_id = nRtag_id,
2134
            pv_id   = nPv_id,
2135
            scheduled_datetime = nSchedDate,
2136
            repeat_secs = nRepeatSecs,
2137
            added_datetime = nAddedDate,
2138
            user_id = nUser_id,
2139
            in_progress = '0'
2140
         WHERE daemon_instructions_id = nInstId;
2141
      ELSE
2142
         raise exc_inst_removed;
2143
      END IF;
2144
 
2145
      CLOSE daemon_inst_cur;
2146
   EXCEPTION
2147
      WHEN DUP_VAL_ON_INDEX
2148
      THEN
2149
         raise_application_error (-20000,
2150
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
2151
                                 );
2152
      WHEN exc_inst_removed
2153
      THEN
2154
         raise_application_error (-20000,
2155
                                 'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.'
2156
                                 );
2157
      WHEN OTHERS
2158
      THEN
2159
         raise;
2160
   END update_daemon_inst;
2161
 
2162
/*-------------------------------------------------------------------------------------------------------*/
2163
   -- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination
2164
   -- This is for use by the Release Manager Website code.
2165
   --
2166
   FUNCTION daemon_ops_for_rtag_pvid(
2167
      nRtag_id IN NUMBER,
2168
      nPv_id IN NUMBER
2169
   ) RETURN VARCHAR2
2170
   IS
2171
      CURSOR daemon_inst_cur IS
2172
         SELECT di.OP_CODE
2173
         FROM daemon_instructions di
2174
         WHERE di.RTAG_ID = nRtag_id
2175
            AND di.PV_ID = nPv_id;
2176
 
2177
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
2178
 
2179
      sRetList VARCHAR2(4000) := '';
2180
 
2181
   BEGIN
2182
      OPEN daemon_inst_cur;
2183
 
2184
      FETCH daemon_inst_cur
2185
      INTO daemon_inst_rec;
2186
 
2187
      WHILE daemon_inst_cur%FOUND
2188
      LOOP
2189
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
2190
 
2191
         FETCH daemon_inst_cur
2192
         INTO daemon_inst_rec;
2193
      END LOOP;
2194
 
2195
      CLOSE daemon_inst_cur;
2196
 
2197
      RETURN sRetList;
2198
   END daemon_ops_for_rtag_pvid;
2199
/*-------------------------------------------------------------------------------------------------------*/
2200
   -- Returns a comma-separated list of operation codes found for a given rtag
2201
   -- This is for use by the Release Manager Website code.
2202
   --
2203
   FUNCTION daemon_ops_for_rtag(
2204
      nRtag_id IN NUMBER
2205
   ) RETURN VARCHAR2
2206
   IS
2207
      CURSOR daemon_inst_cur IS
2208
         SELECT di.OP_CODE
2209
         FROM daemon_instructions di
2210
         WHERE di.RTAG_ID = nRtag_id;
2211
 
2212
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
2213
 
2214
      sRetList VARCHAR2(4000) := '';
2215
 
2216
   BEGIN
2217
      OPEN daemon_inst_cur;
2218
 
2219
      FETCH daemon_inst_cur
2220
      INTO daemon_inst_rec;
2221
 
2222
      WHILE daemon_inst_cur%FOUND
2223
      LOOP
2224
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
2225
 
2226
         FETCH daemon_inst_cur
2227
         INTO daemon_inst_rec;
2228
      END LOOP;
2229
 
2230
      CLOSE daemon_inst_cur;
2231
 
2232
      RETURN sRetList;
2233
   END daemon_ops_for_rtag;
2234
/*-------------------------------------------------------------------------------------------------------*/
2235
   -- Gets a record from the daemon instruction table that can be carried out now and returns the fields
2236
   -- in the record a daemon will need
2237
   -- The Buildtool should use this to find a job to do for a particular release. It should then call
2238
   -- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call
2239
   -- mark_daemon_inst_completed(inst_id) to signal its completion.
2240
   -- Can be called repeatedly to get a full list of all instructions for a release, by passing back in
2241
   -- the instruction ID obtained from the previous call (the 1st call should use 0)
2242
   -- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,
2243
   -- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)
2244
   -- Returns 1 if a record was found, else 0.
2245
   --
2246
   FUNCTION get_daemon_inst(
2247
      nRtag_id IN NUMBER,
2248
      nInst_id IN OUT NUMBER,
2249
      nOp_code IN OUT NUMBER,
2250
      nPv_id OUT NUMBER,
2251
      nUser_id OUT NUMBER,
2252
      nInProgress OUT NUMBER
2253
   ) RETURN NUMBER
2254
   IS
2255
      CURSOR daemon_inst_cur IS
2256
         SELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progress
2257
           FROM daemon_instructions di
2258
          WHERE di.rtag_id = nRtag_id
2259
            AND di.daemon_instructions_id > nInst_id
2260
            AND di.scheduled_datetime <= ora_sysdatetime
2261
            AND ((nOp_code = -1) OR (nOp_code = di.op_code))
2262
            AND rownum <= 1
2263
       ORDER BY di.daemon_instructions_id;
2264
 
2265
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
2266
   BEGIN
2267
      OPEN daemon_inst_cur;
2268
 
2269
      FETCH daemon_inst_cur
2270
      INTO daemon_inst_rec;
2271
 
2272
      -- If we found a record, return it.
2273
      IF daemon_inst_cur%FOUND THEN
2274
         nInst_id := daemon_inst_rec.daemon_instructions_id;
2275
         nOp_code := daemon_inst_rec.op_code;
2276
         nPv_id   := daemon_inst_rec.pv_id;
2277
         nUser_id := daemon_inst_rec.user_id;
2278
         IF daemon_inst_rec.in_progress = '1' THEN
2279
            nInProgress := 1;
2280
         ELSE
2281
            nInProgress := 0;
2282
         END IF;
2283
         CLOSE daemon_inst_cur;
2284
         RETURN 1;
2285
      END IF;
2286
 
2287
      CLOSE daemon_inst_cur;
2288
      RETURN 0;
2289
 
2290
   END get_daemon_inst;
2291
/*-------------------------------------------------------------------------------------------------------*/
2292
   -- Marks a daemon instruction as being processed by a daemon
2293
   -- The Buildtool should use this before it embarks on the work the instruction commands
2294
   --
2295
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )
2296
   IS
2297
   BEGIN
2298
      UPDATE Daemon_Instructions
2299
      SET in_progress = '1'
2300
      WHERE daemon_instructions_id = nInstId;
2301
 
2302
   END mark_daemon_inst_in_progress;
2303
 
2304
/*-------------------------------------------------------------------------------------------------------*/
2305
   -- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored
2306
   -- procedure in order to either delete the instruction or update it in the case where it is a repeating
2307
   -- instruction.
2308
   --
2309
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )
2310
   IS
2311
      repSecs NUMBER;
2312
      schedDate  DATE;
2313
 
2314
      CURSOR daemon_inst_cur IS
2315
         SELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDate
2316
         FROM daemon_instructions di
2317
         WHERE di.daemon_instructions_id = nInstId;
2318
 
2319
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
2320
   BEGIN
2321
      OPEN daemon_inst_cur;
2322
 
2323
      FETCH daemon_inst_cur
2324
      INTO daemon_inst_rec;
2325
 
2326
      IF daemon_inst_cur%FOUND THEN
2327
 
2328
         -- if instruction repeats daily, add 1 day to the scheduled time and update the record
2329
         IF daemon_inst_rec.repSecs = 86400 THEN
2330
            UPDATE Daemon_Instructions
2331
               SET scheduled_datetime = daemon_inst_rec.schedDate + 1,
2332
                  in_progress = '0'
2333
            WHERE daemon_instructions_id = nInstId;
2334
         ELSE
2335
            -- Delete the daemon instruction, we are done with it
2336
            del_daemon_inst(nInstId);
2337
         END IF;
2338
      END IF;
2339
 
2340
      CLOSE daemon_inst_cur;
2341
 
2342
   EXCEPTION
2343
      WHEN OTHERS
2344
      THEN
2345
         raise;
2346
 
2347
   END mark_daemon_inst_completed;
2348
/*-------------------------------------------------------------------------------------------------------*/
2349
   -- This function deletes any old daemon instruction that appears stranded due to a problem that might
2350
   -- have occured during buildtool operation such as might occur if the buildtool or the machine it was
2351
   -- hosted on came down whilst it was processing a daemon instruction.
2352
   PROCEDURE cleanup_stranded_daemon_insts
2353
   IS
2354
   BEGIN
2355
      -- delete records at least two days old
2356
      DELETE FROM daemon_instructions di
2357
      WHERE  (di.scheduled_datetime + 5) <= ora_sysdatetime;
2358
 
2359
   END cleanup_stranded_daemon_insts;
2360
/*-------------------------------------------------------------------------------------------------------*/
2361
  --This function supersedes function, add_daemon. Done for DEVI-046806
2362
   PROCEDURE add_daemon_config (
2363
      nrtagid           IN   NUMBER,
2364
      nbmcon_id         IN   NUMBER,
2365
      sdaemon_mode      IN   VARCHAR2,
2366
      sgbebuildfilter   IN   VARCHAR2
2367
   )
2368
   IS
2369
      nrecordnumber   NUMBER;
2370
      nrconid         NUMBER;
2371
      sdaemonhostname VARCHAR2(50);
2372
      ngbeid         NUMBER;
2373
   BEGIN
2374
      -- Get RCON_ID
2375
      SELECT seq_rcon_id.NEXTVAL
2376
      INTO nrconid
2377
      FROM DUAL;
2378
 
2379
      SELECT COUNT (*)
2380
      INTO nrecordnumber
2381
      FROM release_config
2382
      WHERE rtag_id = nrtagid;
2383
 
2384
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
2385
      FROM build_machine_config
2386
      WHERE bmcon_id = nbmcon_id;
2387
 
2388
      INSERT INTO release_config
2389
             (rcon_id, rtag_id, daemon_hostname, daemon_mode,
2390
                gbe_id, gbe_buildfilter)
2391
      VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,
2392
                ngbeid, sgbebuildfilter);
2393
 
2394
      -- A newly configured daemon should initially be paused (DEVI-047277)
2395
      INSERT INTO run_level
2396
                  (rcon_id, pause)
2397
           VALUES (nrconid, 2);
2398
 
2399
   END;
2400
 
2401
/*-------------------------------------------------------------------------------------------------------*/
2402
  --This function supersedes function, update_daemon. Done for DEVI-046806
2403
   PROCEDURE update_daemon_config (
2404
      nrconid           IN   NUMBER,
2405
      nbmcon_id         IN   NUMBER,
2406
      sdaemon_mode      IN   VARCHAR2,
2407
      sgbebuildfilter   IN   VARCHAR2
2408
   )
2409
   IS
2410
      sdaemonhostname VARCHAR2(50);
2411
      ngbeid         NUMBER;
2412
   BEGIN
2413
 
2414
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
2415
      FROM build_machine_config
2416
      WHERE bmcon_id = nbmcon_id;
2417
 
2418
      UPDATE release_config
2419
         SET daemon_hostname = sdaemonhostname,
2420
            gbe_id = ngbeid,
2421
            daemon_mode = sdaemon_mode,
2422
            gbe_buildfilter = sgbebuildfilter
2423
      WHERE rcon_id = nrconid;
2424
   END;
2425
 
2426
 
2427
/*-------------------------------------------------------------------------------------------------------*/
2428
   PROCEDURE add_build_machine (
2429
      sdisplay_name          IN   VARCHAR2,
2430
      smachine_hostname      IN   VARCHAR2,
2431
      ngbeid                 IN   NUMBER,
2432
      sdescription           IN   VARCHAR2
2433
   )
2434
   IS
2435
      nrecordnumber   NUMBER;
2436
      nbmcon_id       NUMBER;
2437
   BEGIN
2438
      -- Get BMCON_ID
2439
      SELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;
2440
 
2441
      INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)
2442
            VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);
2443
 
2444
   EXCEPTION
2445
      WHEN DUP_VAL_ON_INDEX
2446
      THEN
2447
         raise_application_error (-20000,
2448
                                 'Cannot have duplicate machines.'
2449
                                 );
2450
 
2451
   END;
2452
 
2453
/*-------------------------------------------------------------------------------------------------------*/
2454
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)
2455
   IS
2456
   BEGIN
2457
      DELETE FROM build_machine_config
2458
            WHERE bmcon_id IN (
2459
                     SELECT * FROM THE
2460
                              (SELECT CAST
2461
                                          (in_list_number (sbmcon_id_list) AS relmgr_number_tab_t
2462
                                          )
2463
                                 FROM DUAL
2464
                              ));
2465
   END;
2466
 
2467
 
2468
/*-------------------------------------------------------------------------------------------------------*/
2469
   PROCEDURE update_build_machine (
2470
      nbmcon_id              IN   NUMBER,
2471
      sdisplay_name          IN   VARCHAR2,
2472
      smachine_hostname      IN   VARCHAR2,
2473
      ngbeid                 IN   NUMBER,
2474
      sdescription           IN   VARCHAR2
2475
   )
2476
   IS
2477
   BEGIN
2478
      UPDATE build_machine_config
2479
         SET display_name = sdisplay_name,
2480
             machine_hostname = smachine_hostname,
2481
             gbe_id = ngbeid,
2482
             description = sdescription
2483
      WHERE bmcon_id = nbmcon_id;
2484
   EXCEPTION
2485
      WHEN DUP_VAL_ON_INDEX
2486
      THEN
2487
         raise_application_error (-20000,
2488
                                 'Cannot have duplicate machines.'
2489
                                 );
2490
   END;
2491
END pk_buildapi;
1374 dpurdie 2492
/
2493
--------------------------------------------------------
2494
--  DDL for Package Body PK_ENVIRONMENT
2495
--------------------------------------------------------
1373 dpurdie 2496
 
2497
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT" 
2498
IS
2499
 
2500
   /*-------------------------------------------------------------------------------------------------------*/
2501
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
2502
     RETURN NUMBER
2503
   IS
2504
   BEGIN
2505
      /*
2506
     || N - unlocked
2507
     || Y - release and locked
2508
     || P - penging approval
2509
     || A - approved package ready for auto-build
2510
     */
2511
     IF cdlock = 'N' OR cdlock = 'R'
2512
     THEN
2513
       -- WORK IN PROGRESS --
2514
       RETURN 0;
2515
     ELSIF cdlock = 'P' OR cdlock = 'A'
2516
     THEN
2517
       -- PENDING --
2518
       RETURN 1;
2519
     ELSIF cdlock = 'Y'
2520
     THEN
2521
       -- RELEASED --
2522
       RETURN 2;
2523
     ELSE
2524
       -- NOT FOUND --
2525
       raise_application_error
2526
                   (-20000,
2527
                      'Cannot decide where to place package. [cDlock='
2528
                    || cdlock
2529
                    || ']'
2530
                   );
2531
     END IF;
2532
   END;
2533
 
2534
/*-------------------------------------------------------------------------------------------------------*/
2535
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
2536
     RETURN NUMBER
2537
   IS
2538
     envtab   NUMBER         := -1;
2539
 
2540
     CURSOR curarea
2541
     IS
2542
       SELECT 2 AS envtab
2543
         FROM release_content rc
2544
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
2545
       UNION
2546
       SELECT 0 AS envtab
2547
         FROM work_in_progress wip
2548
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
2549
       UNION
2550
       SELECT 1 AS envtab
2551
         FROM planned pl
2552
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
2553
 
2554
     recarea   curarea%ROWTYPE;
2555
   BEGIN
2556
     OPEN curarea;
2557
 
2558
     FETCH curarea
2559
      INTO recarea;
2560
 
2561
     IF curarea%FOUND
2562
     THEN
2563
       envtab := recarea.envtab;
2564
     END IF;
2565
 
2566
     CLOSE curarea;
2567
 
2568
     RETURN envtab;
2569
   END;
2570
 
2571
/*-------------------------------------------------------------------------------------------------------*/
2572
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
2573
     RETURN NUMBER
2574
   IS
2575
     ispatch   package_versions.dlocked%TYPE;
2576
     viewid   NUMBER                    := -1;
2577
 
2578
     CURSOR curview
2579
     IS
2580
       SELECT rc.base_view_id AS view_id
2581
         FROM release_content rc
2582
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
2583
       UNION
2584
       SELECT wip.view_id AS view_id
2585
         FROM work_in_progress wip
2586
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
2587
       UNION
2588
       SELECT pl.view_id AS view_id
2589
         FROM planned pl
2590
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
2591
 
2592
     recview   curview%ROWTYPE;
2593
   BEGIN
2594
     -- Get dlock state
2595
     SELECT pv.is_patch
2596
      INTO ispatch
2597
      FROM package_versions pv
2598
      WHERE pv.pv_id = pvid;
2599
 
2600
     -- Decide which view id should package go under.
2601
     IF (ispatch != 'Y') OR (ispatch IS NULL)
2602
     THEN
2603
       -- Get VIEW ID of Package
2604
       OPEN curview;
2605
 
2606
       FETCH curview
2607
        INTO recview;
2608
 
2609
       IF curview%FOUND
2610
       THEN
2611
         viewid := recview.view_id;
2612
       ELSE
2613
         raise_application_error
2614
            (-20000,
2615
               'Cannot find view_id to proceed. [PvId='
2616
            || pvid
2617
            || ']. The current version may not exist in the release anymore.'
2618
            );
2619
       END IF;
2620
 
2621
       CLOSE curview;
2622
     ELSE
2623
       -- Get VIEW ID of Patch (view id of parent package)
2624
       SELECT rc.base_view_id
2625
         INTO viewid
2626
         FROM release_content rc, package_patches ppv
2627
        WHERE rc.rtag_id = rtagid
2628
         AND rc.pv_id = ppv.pv_id
2629
         AND ppv.patch_id = pvid;
2630
     END IF;
2631
 
2632
     RETURN viewid;
2633
   END;
2634
 
2635
/*-------------------------------------------------------------------------------------------------------*/
2636
   PROCEDURE add_package (
2637
     pvid    IN   NUMBER,
2638
     viewid   IN   NUMBER,
2639
     rtagid   IN   NUMBER,
2640
     userid   IN   NUMBER
2641
   )
2642
   IS
2643
     dlocked   package_versions.dlocked%TYPE;
2644
     envtab   NUMBER;
2645
   BEGIN
2646
     IF can_edit_pkg_in_project (pvid, rtagid) = 1
2647
     THEN
2648
       -- Get dlock state
2649
       SELECT pv.dlocked
2650
         INTO dlocked
2651
         FROM package_versions pv
2652
        WHERE pv.pv_id = pvid;
2653
 
2654
       -- Get which area should go under
2655
       envtab := select_environment_area (dlocked);
2656
       -- Log
2657
       log_action (pvid, 'action', userid, 'Start of Package Add...');
2658
 
2659
       -- Remove Package
2660
       IF envtab = 0
2661
       THEN
2662
         -- WORK IN PROGRESS --
2663
         pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
2664
       ELSIF envtab = 1
2665
       THEN
2666
         -- PENDING --
2667
         pk_planned.add_package (pvid, viewid, rtagid, userid);
2668
       ELSIF envtab = 2
2669
       THEN
2670
         -- RELEASED --
2671
         -- NOTE: this package will be replaced with matching package
2672
         pk_release.add_package (pvid, viewid, rtagid, userid);
2673
         -- Now do post Release Actions
2674
         pk_release.run_post_actions (pvid, rtagid);
2675
       END IF;
2676
 
2677
       -- Log
2678
       log_action (pvid, 'action', userid, 'End of Package Add...');
2679
     END IF;
2680
   END;
2681
 
2682
/*-------------------------------------------------------------------------------------------------------*/
2683
   PROCEDURE add_package_bulk (
2684
     pvidlist   IN   VARCHAR2,
2685
     viewid    IN   NUMBER,
2686
     rtagid    IN   NUMBER,
2687
     userid    IN   NUMBER
2688
   )
2689
   IS
2690
     nidcollector   relmgr_number_tab_t         := relmgr_number_tab_t
2691
                                                        ();
2692
     dlocked      package_versions.dlocked%TYPE;
2693
     pvid         NUMBER;
2694
     envtab       NUMBER;
2695
   BEGIN
2696
     /*--------------- Business Rules Here -------------------*/
2697
     IF (pvidlist IS NULL)
2698
     THEN
2699
       raise_application_error (-20000,
2700
                          'Please select at least one package.'
2701
                         );
2702
     END IF;
2703
 
2704
/*-------------------------------------------------------*/
2705
     nidcollector := in_list_number (pvidlist);
2706
 
2707
     FOR i IN 1 .. nidcollector.COUNT
2708
     LOOP
2709
       pvid := nidcollector (i);
2710
       add_package (pvid, viewid, rtagid, userid);
2711
     END LOOP;
2712
   END;
2713
 
2714
/*-------------------------------------------------------------------------------------------------------*/
2715
   PROCEDURE replace_package (
2716
     newpvid  IN   NUMBER,
2717
     oldpvid  IN   NUMBER,
2718
     rtagid   IN   NUMBER,
2719
     userid   IN   NUMBER
2720
   )
2721
   IS
2722
     dlocked      package_versions.dlocked%TYPE;
2723
     viewid       NUMBER;
2724
     envtab       NUMBER;
2725
     ROWCOUNT     NUMBER;
2726
     creleasemode CHAR (1);
2727
     npkgid       NUMBER;
2728
   BEGIN
2729
     /*--------------- Business Rules Here -------------------*/
2730
     -- Check if oldPvId exists. It could have been removed
2731
     SELECT COUNT (pv.pv_id)
2732
       INTO ROWCOUNT
2733
       FROM package_versions pv
2734
      WHERE pv.pv_id = oldpvid;
2735
 
2736
/*-------------------------------------------------------*/
2737
 
2738
     /* This procedure is usually used by "History" option in Release Manager */
2739
 
2740
     -- Get dlock state
2741
     SELECT pv.dlocked
2742
       INTO dlocked
2743
       FROM package_versions pv
2744
      WHERE pv.pv_id = newpvid;
2745
 
2746
     -- Get VIEW_ID ---
2747
     IF ROWCOUNT = 1
2748
     THEN
2749
       viewid := get_view_location (oldpvid, rtagid);
2750
     ELSE
2751
       -- Set ViewID to default
2752
       viewid := 7;
2753
     END IF;
2754
 
2755
     -- Get which area should go under
2756
     envtab := select_environment_area (dlocked);
2757
     -- Log
2758
     log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
2759
 
2760
     -- Replace package
2761
     IF envtab = 0
2762
     THEN
2763
       -- WORK IN PROGRESS --
2764
 
2765
       -- Delete old package
2766
       pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
2767
 
2768
       -- Add new package
2769
       pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
2770
     ELSIF envtab = 1
2771
     THEN
2772
       -- PENDING --
2773
 
2774
       -- Delete old package
2775
       pk_planned.remove_package (oldpvid, rtagid, userid);
2776
 
2777
       -- Add new package
2778
       pk_planned.add_package (newpvid, viewid, rtagid, userid);
2779
     ELSIF envtab = 2
2780
     THEN
2781
       -- RELEASED --
2782
 
2783
       -- Delete old package
2784
       pk_release.remove_package (oldpvid, rtagid, userid);
2785
       -- Add new package
2786
       pk_release.add_package (newpvid, viewid, rtagid, userid);
2787
 
2788
       -- update the pegging table
2789
       UPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
2790
 
2791
       -- update the advisory ripple table
2792
       UPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
2793
 
2794
       -- Now do post Release Actions
2795
       pk_release.run_post_actions (newpvid, rtagid);
2796
     END IF;
2797
 
2798
     -- Log
2799
     log_action (oldpvid, 'action', userid, 'End of Package Replace...');
2800
   END;
2801
 
2802
/*-------------------------------------------------------------------------------------------------------*/
2803
   FUNCTION remove_package (
2804
     pvid        IN   NUMBER,
2805
     rtagid      IN   NUMBER,
2806
     userid      IN   NUMBER,
2807
     forceremove IN   CHAR
2808
   )
2809
     RETURN NUMBER
2810
   IS
2811
     envtab      NUMBER;
2812
     isused      BOOLEAN;
2813
     recordcount   NUMBER;
2814
   BEGIN
2815
/*--------------- Business Rules Here -------------------*/
2816
/*-------------------------------------------------------*/
2817
 
2818
     -- Find location of package
2819
     envtab := get_package_area (pvid, rtagid);
2820
 
2821
     -- Remove Package
2822
     IF envtab = 0
2823
     THEN
2824
       -- WORK IN PROGRESS --
2825
       -- Delete package
2826
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
2827
 
2828
       RETURN 0;
2829
     ELSIF envtab = 1
2830
     THEN
2831
       -- PENDING --
2832
       -- Delete package
2833
       pk_planned.remove_package (pvid, rtagid, userid);
2834
 
2835
       RETURN 0;
2836
     ELSIF envtab = 2
2837
     THEN
2838
       -- RELEASED --
2839
 
2840
       -- Check if is used by other packages
2841
       isused := TRUE;
2842
 
2843
       IF forceremove = 'N'
2844
       THEN
2845
         SELECT COUNT (pv.pv_id)
2846
           INTO recordcount
2847
           FROM (SELECT dpv.pkg_id, dpv.v_ext
2848
                 FROM release_content rc,
2849
                     package_dependencies dep,
2850
                     package_versions dpv
2851
                WHERE rc.rtag_id = rtagid
2852
                  AND rc.pv_id = dep.pv_id
2853
                  AND dep.dpv_id = dpv.pv_id) rdep,
2854
               package_versions pv
2855
          WHERE pv.pkg_id = rdep.pkg_id
2856
            AND NVL (pv.v_ext, '|LINK_A_NULL|') =
2857
                                  NVL (rdep.v_ext, '|LINK_A_NULL|')
2858
            AND pv.pv_id = pvid;
2859
 
2860
         IF recordcount > 0
2861
         THEN
2862
            RETURN 1;               -- Return 1 as package being used
2863
         ELSE
2864
            isused := FALSE;
2865
         END IF;
2866
       END IF;
2867
 
2868
       IF forceremove = 'Y' OR NOT isused
2869
       THEN
2870
         -- Delete old package
2871
         pk_release.remove_package (pvid, rtagid, userid);
2872
 
2873
         -- Delete old package's pegging info
2874
         DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;
2875
 
2876
         -- Delete old package's advisory ripple info
2877
         DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;
2878
 
2879
         -- Now do post Release Actions
2880
         pk_release.run_post_actions (pvid, rtagid);
2881
         RETURN 0;
2882
       END IF;
2883
     END IF;
2884
   END;
2885
 
2886
/*-------------------------------------------------------------------------------------------------------*/
2887
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
2888
 
2889
   PROCEDURE get_environment_items (
2890
     viewtype         IN      NUMBER,
2891
     userid           IN      NUMBER,
2892
     rtagid           IN      NUMBER,
2893
     sviewidshowlist  IN      VARCHAR2,
2894
     ntruerecordcount OUT     NUMBER,
2895
     recordset        OUT     typecur
2896
   )
2897
   IS
2898
   BEGIN
2899
     -- Get true record count because views can give false count
2900
     SELECT COUNT (pl.pv_id)
2901
      INTO ntruerecordcount
2902
      FROM environment_view pl
2903
      WHERE pl.rtag_id = rtagid;
2904
 
2905
     IF viewtype = 1
2906
     THEN
2907
       /*--- GUEST VIEW ---*/
2908
       OPEN recordset FOR
2909
         SELECT   *
2910
            FROM (
2911
                 /* Base Views collapsed */
2912
                 SELECT DISTINCT vi.view_id, vi.view_name,
2913
                             TO_NUMBER (NULL) AS pkg_state,
2914
                             TO_NUMBER (NULL) AS deprecated_state,
2915
                             TO_NUMBER (NULL) AS pv_id,
2916
                             NULL AS pkg_name, NULL AS pkg_version,
2917
                             NULL AS dlocked, NULL AS pv_description,
2918
                             rel.operation
2919
                         FROM environment_view rel, views vi
2920
                        WHERE rel.view_id = vi.view_id
2921
                          AND rtag_id = rtagid
2922
                          AND rel.view_id NOT IN (
2923
                               SELECT *
2924
                                 FROM THE
2925
                                       (SELECT CAST
2926
                                               (in_list_number
2927
                                                  (sviewidshowlist
2928
                                                  ) AS relmgr_number_tab_t
2929
                                               )
2930
                                         FROM DUAL
2931
                                       ))
2932
                 UNION
2933
                 /* Base Views expanded */
2934
                 SELECT vi.view_id, vi.view_name,
2935
                      DECODE (rel.pkg_state,
2936
                            NULL, 0,
2937
                            rel.pkg_state
2938
                           ) AS pkg_state,
2939
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
2940
                      pv.pkg_version, pv.dlocked, pv.pv_description,
2941
                      rel.operation
2942
                  FROM environment_view rel,
2943
                      PACKAGES pkg,
2944
                      package_versions pv,
2945
                      views vi
2946
                  WHERE pv.pkg_id = pkg.pkg_id
2947
                   AND rel.pv_id = pv.pv_id
2948
                   AND rel.view_id = vi.view_id
2949
                   AND rel.view_id IN (
2950
                        SELECT *
2951
                          FROM THE
2952
                                (SELECT CAST
2953
                                        (in_list_number
2954
                                               (sviewidshowlist) AS relmgr_number_tab_t
2955
                                        )
2956
                                  FROM DUAL
2957
                                ))
2958
                   AND rtag_id = rtagid) ord
2959
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
2960
     ELSIF viewtype = 2
2961
     THEN
2962
       /*--- PERSONAL VIEW ---*/
2963
       OPEN recordset FOR
2964
         SELECT   *
2965
            FROM (
2966
                 /* Base Views collapsed */
2967
                 SELECT DISTINCT vi.view_id, vi.view_name,
2968
                             TO_NUMBER (NULL) AS pkg_state,
2969
                             TO_NUMBER (NULL) AS deprecated_state,
2970
                             TO_NUMBER (NULL) AS pv_id,
2971
                             NULL AS pkg_name, NULL AS pkg_version,
2972
                             NULL AS dlocked, NULL AS pv_description,
2973
                             rel.operation
2974
                         FROM environment_view rel,
2975
                             view_settings vs,
2976
                             views vi
2977
                        WHERE rel.view_id = vi.view_id
2978
                          AND vs.view_id = rel.view_id
2979
                          AND vs.user_id = userid
2980
                          AND rtag_id = rtagid
2981
                          AND rel.view_id NOT IN (
2982
                               SELECT *
2983
                                 FROM THE
2984
                                       (SELECT CAST
2985
                                               (in_list_number
2986
                                                  (sviewidshowlist
2987
                                                  ) AS relmgr_number_tab_t
2988
                                               )
2989
                                         FROM DUAL
2990
                                       ))
2991
                 UNION
2992
                 /* Base Views expanded */
2993
                 SELECT vi.view_id, vi.view_name,
2994
                      DECODE (rel.pkg_state,
2995
                            NULL, 0,
2996
                            rel.pkg_state
2997
                           ) AS pkg_state,
2998
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
2999
                      pv.pkg_version, pv.dlocked, pv.pv_description,
3000
                      rel.operation
3001
                  FROM environment_view rel,
3002
                      PACKAGES pkg,
3003
                      package_versions pv,
3004
                      views vi,
3005
                      view_settings vs
3006
                  WHERE pv.pkg_id = pkg.pkg_id
3007
                   AND rel.pv_id = pv.pv_id
3008
                   AND rel.view_id = vi.view_id
3009
                   AND vs.view_id = vi.view_id
3010
                   AND vs.user_id = userid
3011
                   AND rel.view_id IN (
3012
                        SELECT *
3013
                          FROM THE
3014
                                (SELECT CAST
3015
                                        (in_list_number
3016
                                               (sviewidshowlist) AS relmgr_number_tab_t
3017
                                        )
3018
                                  FROM DUAL
3019
                                ))
3020
                   AND rtag_id = rtagid
3021
                 UNION
3022
                 /* Private Views collapsed */
3023
                 SELECT vi.view_id, vi.view_name,
3024
                      TO_NUMBER (NULL) AS pkg_state,
3025
                      TO_NUMBER (NULL) AS deprecated_state,
3026
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
3027
                      NULL AS pkg_version, NULL AS dlocked,
3028
                      NULL AS pv_description,
3029
                      rel.operation
3030
                  FROM view_settings vs,
3031
                      view_def vd,
3032
                      views vi,
3033
                      environment_view rel,
3034
                      package_versions pv
3035
                  WHERE vs.view_id = vi.view_id
3036
                   AND rel.pv_id = pv.pv_id
3037
                   AND vd.pkg_id = pv.pkg_id
3038
                   AND vd.view_id = vi.view_id
3039
                   AND vi.base_view = 'N'
3040
                   AND rel.rtag_id = rtagid
3041
                   AND vs.user_id = userid
3042
                   AND vi.view_id NOT IN (
3043
                        SELECT *
3044
                          FROM THE
3045
                                (SELECT CAST
3046
                                        (in_list_number
3047
                                               (sviewidshowlist) AS relmgr_number_tab_t
3048
                                        )
3049
                                  FROM DUAL
3050
                                ))
3051
                 UNION
3052
                 /* Private Views expanded */
3053
                 SELECT vi.view_id, vi.view_name,
3054
                      DECODE (rel.pkg_state,
3055
                            NULL, 0,
3056
                            rel.pkg_state
3057
                           ) AS pkg_state,
3058
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
3059
                      pv.pkg_version, pv.dlocked, pv.pv_description,
3060
                      rel.operation
3061
                  FROM users usr,
3062
                      view_settings vs,
3063
                      view_def vd,
3064
                      views vi,
3065
                      environment_view rel,
3066
                      PACKAGES pkg,
3067
                      package_versions pv
3068
                  WHERE vs.user_id = usr.user_id
3069
                   AND vs.view_id = vi.view_id
3070
                   AND vd.view_id = vi.view_id
3071
                   AND pv.pkg_id = pkg.pkg_id
3072
                   AND rel.pv_id = pv.pv_id
3073
                   AND rel.rtag_id = rtagid
3074
                   AND vd.pkg_id = pkg.pkg_id
3075
                   AND vi.base_view = 'N'
3076
                   AND vi.view_id IN (
3077
                        SELECT *
3078
                          FROM THE
3079
                                (SELECT CAST
3080
                                        (in_list_number
3081
                                               (sviewidshowlist) AS relmgr_number_tab_t
3082
                                        )
3083
                                  FROM DUAL
3084
                                ))
3085
                   AND usr.user_id = userid) ord
3086
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3087
     END IF;
3088
   END;
3089
 
3090
/*-------------------------------------------------------------------------------------------------------*/
3091
   PROCEDURE get_released_items (
3092
     viewtype         IN      NUMBER,
3093
     userid           IN      NUMBER,
3094
     rtagid           IN      NUMBER,
3095
     sviewidshowlist  IN      VARCHAR2,
3096
     ntruerecordcount OUT     NUMBER,
3097
     recordset        OUT     typecur
3098
   )
3099
   IS
3100
   BEGIN
3101
     -- Get true record count because views can give false count
3102
     SELECT COUNT (rc.pv_id)
3103
      INTO ntruerecordcount
3104
      FROM release_content rc
3105
      WHERE rc.rtag_id = rtagid;
3106
 
3107
     IF viewtype = 1
3108
     THEN
3109
       /*--- GUEST VIEW ---*/
3110
       OPEN recordset FOR
3111
         SELECT   *
3112
            FROM (
3113
                 /* Base Views collapsed */
3114
                 SELECT DISTINCT vi.view_id, vi.view_name,
3115
                             TO_NUMBER (NULL) AS pkg_state,
3116
                             TO_NUMBER (NULL) AS deprecated_state,
3117
                             TO_NUMBER (NULL) AS pv_id,
3118
                             NULL AS pkg_name, NULL AS pkg_version,
3119
                             NULL AS dlocked, NULL AS pv_description
3120
                         FROM release_content rel, views vi
3121
                        WHERE rel.base_view_id = vi.view_id
3122
                          AND rtag_id = rtagid
3123
                          AND rel.base_view_id NOT IN (
3124
                               SELECT *
3125
                                 FROM THE
3126
                                       (SELECT CAST
3127
                                               (in_list_number
3128
                                                  (sviewidshowlist
3129
                                                  ) AS relmgr_number_tab_t
3130
                                               )
3131
                                         FROM DUAL
3132
                                       ))
3133
                 UNION
3134
                 /* Base Views expanded */
3135
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
3136
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
3137
                      pv.pkg_version, pv.dlocked, pv.pv_description
3138
                  FROM release_content rel,
3139
                      PACKAGES pkg,
3140
                      package_versions pv,
3141
                      views vi
3142
                  WHERE pv.pkg_id = pkg.pkg_id
3143
                   AND rel.pv_id = pv.pv_id
3144
                   AND rel.base_view_id = vi.view_id
3145
                   AND rel.base_view_id IN (
3146
                        SELECT *
3147
                          FROM THE
3148
                                (SELECT CAST
3149
                                        (in_list_number
3150
                                               (sviewidshowlist) AS relmgr_number_tab_t
3151
                                        )
3152
                                  FROM DUAL
3153
                                ))
3154
                   AND rtag_id = rtagid) ord
3155
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3156
     ELSIF viewtype = 2
3157
     THEN
3158
       /*--- PERSONAL VIEW ---*/
3159
       OPEN recordset FOR
3160
         SELECT   *
3161
            FROM (
3162
                 /* Base Views collapsed */
3163
                 SELECT DISTINCT vi.view_id, vi.view_name,
3164
                             TO_NUMBER (NULL) AS pkg_state,
3165
                             TO_NUMBER (NULL) AS deprecated_state,
3166
                             TO_NUMBER (NULL) AS pv_id,
3167
                             NULL AS pkg_name, NULL AS pkg_version,
3168
                             NULL AS dlocked, NULL AS pv_description
3169
                         FROM release_content rel,
3170
                             view_settings vs,
3171
                             views vi
3172
                        WHERE rel.base_view_id = vi.view_id
3173
                          AND vs.view_id = rel.base_view_id
3174
                          AND vs.user_id = userid
3175
                          AND rtag_id = rtagid
3176
                          AND rel.base_view_id NOT IN (
3177
                               SELECT *
3178
                                 FROM THE
3179
                                       (SELECT CAST
3180
                                               (in_list_number
3181
                                                  (sviewidshowlist
3182
                                                  ) AS relmgr_number_tab_t
3183
                                               )
3184
                                         FROM DUAL
3185
                                       ))
3186
                 UNION
3187
                 /* Base Views expanded */
3188
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
3189
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
3190
                      pv.pkg_version, pv.dlocked, pv.pv_description
3191
                  FROM release_content rel,
3192
                      PACKAGES pkg,
3193
                      package_versions pv,
3194
                      views vi,
3195
                      view_settings vs
3196
                  WHERE pv.pkg_id = pkg.pkg_id
3197
                   AND rel.pv_id = pv.pv_id
3198
                   AND rel.base_view_id = vi.view_id
3199
                   AND vs.view_id = vi.view_id
3200
                   AND vs.user_id = userid
3201
                   AND rel.base_view_id IN (
3202
                        SELECT *
3203
                          FROM THE
3204
                                (SELECT CAST
3205
                                        (in_list_number
3206
                                               (sviewidshowlist) AS relmgr_number_tab_t
3207
                                        )
3208
                                  FROM DUAL
3209
                                ))
3210
                   AND rtag_id = rtagid
3211
                 UNION
3212
                 /* Private Views collapsed */
3213
                 SELECT vi.view_id, vi.view_name,
3214
                      TO_NUMBER (NULL) AS pkg_state,
3215
                      TO_NUMBER (NULL) AS deprecated_state,
3216
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
3217
                      NULL AS pkg_version, NULL AS dlocked,
3218
                      NULL AS pv_description
3219
                  FROM view_settings vs,
3220
                      view_def vd,
3221
                      views vi,
3222
                      release_content rel,
3223
                      package_versions pv
3224
                  WHERE vs.view_id = vi.view_id
3225
                   AND rel.pv_id = pv.pv_id
3226
                   AND vd.pkg_id = pv.pkg_id
3227
                   AND vd.view_id = vi.view_id
3228
                   AND vi.base_view = 'N'
3229
                   AND rel.rtag_id = rtagid
3230
                   AND vs.user_id = userid
3231
                   AND vi.view_id NOT IN (
3232
                        SELECT *
3233
                          FROM THE
3234
                                (SELECT CAST
3235
                                        (in_list_number
3236
                                               (sviewidshowlist) AS relmgr_number_tab_t
3237
                                        )
3238
                                  FROM DUAL
3239
                                ))
3240
                 UNION
3241
                 /* Private Views expanded */
3242
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
3243
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
3244
                      pv.pkg_version, pv.dlocked, pv.pv_description
3245
                  FROM users usr,
3246
                      view_settings vs,
3247
                      view_def vd,
3248
                      views vi,
3249
                      release_content rel,
3250
                      PACKAGES pkg,
3251
                      package_versions pv
3252
                  WHERE vs.user_id = usr.user_id
3253
                   AND vs.view_id = vi.view_id
3254
                   AND vd.view_id = vi.view_id
3255
                   AND pv.pkg_id = pkg.pkg_id
3256
                   AND rel.pv_id = pv.pv_id
3257
                   AND rel.rtag_id = rtagid
3258
                   AND vd.pkg_id = pkg.pkg_id
3259
                   AND vi.base_view = 'N'
3260
                   AND vi.view_id IN (
3261
                        SELECT *
3262
                          FROM THE
3263
                                (SELECT CAST
3264
                                        (in_list_number
3265
                                               (sviewidshowlist) AS relmgr_number_tab_t
3266
                                        )
3267
                                  FROM DUAL
3268
                                ))
3269
                   AND usr.user_id = userid) ord
3270
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3271
     END IF;
3272
   END;
3273
 
3274
/*-------------------------------------------------------------------------------------------------------*/
3275
   PROCEDURE get_work_in_progress_items (
3276
     viewtype         IN      NUMBER,
3277
     userid           IN      NUMBER,
3278
     rtagid           IN      NUMBER,
3279
     sviewidshowlist  IN      VARCHAR2,
3280
     ntruerecordcount OUT     NUMBER,
3281
     recordset        OUT     typecur
3282
   )
3283
   IS
3284
   BEGIN
3285
     -- Get true record count because views can give false count
3286
     SELECT COUNT (wip.pv_id)
3287
      INTO ntruerecordcount
3288
      FROM work_in_progress wip
3289
      WHERE wip.rtag_id = rtagid;
3290
 
3291
     IF viewtype = 1
3292
     THEN
3293
       /*--- GUEST VIEW ---*/
3294
       OPEN recordset FOR
3295
         SELECT   *
3296
            FROM (
3297
                 /* Base Views collapsed */
3298
                 SELECT DISTINCT vi.view_id, vi.view_name,
3299
                             TO_NUMBER (NULL) AS pkg_state,
3300
                             TO_NUMBER (NULL) AS deprecated_state,
3301
                             TO_NUMBER (NULL) AS pv_id,
3302
                             NULL AS pkg_name, NULL AS pkg_version,
3303
                             NULL AS dlocked, NULL AS pv_description
3304
                         FROM work_in_progress rel, views vi
3305
                        WHERE rel.view_id = vi.view_id
3306
                          AND rtag_id = rtagid
3307
                          AND rel.view_id NOT IN (
3308
                               SELECT *
3309
                                 FROM THE
3310
                                       (SELECT CAST
3311
                                               (in_list_number
3312
                                                  (sviewidshowlist
3313
                                                  ) AS relmgr_number_tab_t
3314
                                               )
3315
                                         FROM DUAL
3316
                                       ))
3317
                 UNION
3318
                 /* Base Views expanded */
3319
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
3320
 
3321
                      --rel.pkg_state,
3322
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
3323
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
3324
                      pv.pv_description
3325
                  FROM work_in_progress rel,
3326
                      PACKAGES pkg,
3327
                      package_versions pv,
3328
                      views vi
3329
                  WHERE pv.pkg_id = pkg.pkg_id
3330
                   AND rel.pv_id = pv.pv_id
3331
                   AND rel.view_id = vi.view_id
3332
                   AND rel.view_id IN (
3333
                        SELECT *
3334
                          FROM THE
3335
                                (SELECT CAST
3336
                                        (in_list_number
3337
                                               (sviewidshowlist) AS relmgr_number_tab_t
3338
                                        )
3339
                                  FROM DUAL
3340
                                ))
3341
                   AND rtag_id = rtagid) ord
3342
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3343
     ELSIF viewtype = 2
3344
     THEN
3345
       /*--- PERSONAL VIEW ---*/
3346
       OPEN recordset FOR
3347
         SELECT   *
3348
            FROM (
3349
                 /* Base Views collapsed */
3350
                 SELECT DISTINCT vi.view_id, vi.view_name,
3351
                             TO_NUMBER (NULL) AS pkg_state,
3352
                             TO_NUMBER (NULL) AS deprecated_state,
3353
                             TO_NUMBER (NULL) AS pv_id,
3354
                             NULL AS pkg_name, NULL AS pkg_version,
3355
                             NULL AS dlocked, NULL AS pv_description
3356
                         FROM work_in_progress rel,
3357
                             view_settings vs,
3358
                             views vi
3359
                        WHERE rel.view_id = vi.view_id
3360
                          AND vs.view_id = rel.view_id
3361
                          AND vs.user_id = userid
3362
                          AND rtag_id = rtagid
3363
                          AND rel.view_id NOT IN (
3364
                               SELECT *
3365
                                 FROM THE
3366
                                       (SELECT CAST
3367
                                               (in_list_number
3368
                                                  (sviewidshowlist
3369
                                                  ) AS relmgr_number_tab_t
3370
                                               )
3371
                                         FROM DUAL
3372
                                       ))
3373
                 UNION
3374
                 /* Base Views expanded */
3375
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
3376
 
3377
                      --rel.pkg_state,
3378
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
3379
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
3380
                      pv.pv_description
3381
                  FROM work_in_progress rel,
3382
                      PACKAGES pkg,
3383
                      package_versions pv,
3384
                      views vi,
3385
                      view_settings vs
3386
                  WHERE pv.pkg_id = pkg.pkg_id
3387
                   AND rel.pv_id = pv.pv_id
3388
                   AND rel.view_id = vi.view_id
3389
                   AND vs.view_id = vi.view_id
3390
                   AND vs.user_id = userid
3391
                   AND rel.view_id IN (
3392
                        SELECT *
3393
                          FROM THE
3394
                                (SELECT CAST
3395
                                        (in_list_number
3396
                                               (sviewidshowlist) AS relmgr_number_tab_t
3397
                                        )
3398
                                  FROM DUAL
3399
                                ))
3400
                   AND rtag_id = rtagid
3401
                 UNION
3402
                 /* Private Views collapsed */
3403
                 SELECT vi.view_id, vi.view_name,
3404
                      TO_NUMBER (NULL) AS pkg_state,
3405
                      TO_NUMBER (NULL) AS deprecated_state,
3406
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
3407
                      NULL AS pkg_version, NULL AS dlocked,
3408
                      NULL AS pv_description
3409
                  FROM view_settings vs,
3410
                      view_def vd,
3411
                      views vi,
3412
                      work_in_progress rel,
3413
                      package_versions pv
3414
                  WHERE vs.view_id = vi.view_id
3415
                   AND rel.pv_id = pv.pv_id
3416
                   AND vd.pkg_id = pv.pkg_id
3417
                   AND vd.view_id = vi.view_id
3418
                   AND vi.base_view = 'N'
3419
                   AND rel.rtag_id = rtagid
3420
                   AND vs.user_id = userid
3421
                   AND vi.view_id NOT IN (
3422
                        SELECT *
3423
                          FROM THE
3424
                                (SELECT CAST
3425
                                        (in_list_number
3426
                                               (sviewidshowlist) AS relmgr_number_tab_t
3427
                                        )
3428
                                  FROM DUAL
3429
                                ))
3430
                 UNION
3431
                 /* Private Views expanded */
3432
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
3433
 
3434
                      --rel.pkg_state,
3435
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
3436
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
3437
                      pv.pv_description
3438
                  FROM users usr,
3439
                      view_settings vs,
3440
                      view_def vd,
3441
                      views vi,
3442
                      work_in_progress rel,
3443
                      PACKAGES pkg,
3444
                      package_versions pv
3445
                  WHERE vs.user_id = usr.user_id
3446
                   AND vs.view_id = vi.view_id
3447
                   AND vd.view_id = vi.view_id
3448
                   AND pv.pkg_id = pkg.pkg_id
3449
                   AND rel.pv_id = pv.pv_id
3450
                   AND rel.rtag_id = rtagid
3451
                   AND vd.pkg_id = pkg.pkg_id
3452
                   AND vi.base_view = 'N'
3453
                   AND vi.view_id IN (
3454
                        SELECT *
3455
                          FROM THE
3456
                                (SELECT CAST
3457
                                        (in_list_number
3458
                                               (sviewidshowlist) AS relmgr_number_tab_t
3459
                                        )
3460
                                  FROM DUAL
3461
                                ))
3462
                   AND usr.user_id = userid) ord
3463
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3464
     END IF;
3465
   END;
3466
 
3467
/*-------------------------------------------------------------------------------------------------------*/
3468
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
3469
 
3470
   PROCEDURE get_pending_items (
3471
     viewtype         IN      NUMBER,
3472
     userid           IN      NUMBER,
3473
     rtagid           IN      NUMBER,
3474
     sviewidshowlist  IN      VARCHAR2,
3475
     ntruerecordcount OUT     NUMBER,
3476
     recordset        OUT     typecur
3477
   )
3478
   IS
3479
   BEGIN
3480
     -- Get true record count because views can give false count
3481
     SELECT COUNT (pl.pv_id)
3482
      INTO ntruerecordcount
3483
      FROM planned pl
3484
      WHERE pl.rtag_id = rtagid;
3485
 
3486
     IF viewtype = 1
3487
     THEN
3488
       /*--- GUEST VIEW ---*/
3489
       OPEN recordset FOR
3490
         SELECT   *
3491
            FROM (
3492
                 /* Base Views collapsed */
3493
                 SELECT DISTINCT vi.view_id, vi.view_name,
3494
                             TO_NUMBER (NULL) AS pkg_state,
3495
                             TO_NUMBER (NULL) AS deprecated_state,
3496
                             TO_NUMBER (NULL) AS pv_id,
3497
                             NULL AS pkg_name, NULL AS pkg_version,
3498
                             NULL AS dlocked, NULL AS pv_description,
3499
                             rel.operation
3500
                         FROM planned rel, views vi
3501
                        WHERE rel.view_id = vi.view_id
3502
                          AND rtag_id = rtagid
3503
                          AND rel.view_id NOT IN (
3504
                               SELECT *
3505
                                 FROM THE
3506
                                       (SELECT CAST
3507
                                               (in_list_number
3508
                                                  (sviewidshowlist
3509
                                                  ) AS relmgr_number_tab_t
3510
                                               )
3511
                                         FROM DUAL
3512
                                       ))
3513
                 UNION
3514
                 /* Base Views expanded */
3515
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
3516
 
3517
                      --rel.pkg_state,
3518
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
3519
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
3520
                      pv.pv_description,
3521
                      rel.operation
3522
                  FROM planned rel,
3523
                      PACKAGES pkg,
3524
                      package_versions pv,
3525
                      views vi
3526
                  WHERE pv.pkg_id = pkg.pkg_id
3527
                   AND rel.pv_id = pv.pv_id
3528
                   AND rel.view_id = vi.view_id
3529
                   AND rel.view_id IN (
3530
                        SELECT *
3531
                          FROM THE
3532
                                (SELECT CAST
3533
                                        (in_list_number
3534
                                               (sviewidshowlist) AS relmgr_number_tab_t
3535
                                        )
3536
                                  FROM DUAL
3537
                                ))
3538
                   AND rtag_id = rtagid) ord
3539
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3540
     ELSIF viewtype = 2
3541
     THEN
3542
       /*--- PERSONAL VIEW ---*/
3543
       OPEN recordset FOR
3544
         SELECT   *
3545
            FROM (
3546
                 /* Base Views collapsed */
3547
                 SELECT DISTINCT vi.view_id, vi.view_name,
3548
                             TO_NUMBER (NULL) AS pkg_state,
3549
                             TO_NUMBER (NULL) AS deprecated_state,
3550
                             TO_NUMBER (NULL) AS pv_id,
3551
                             NULL AS pkg_name, NULL AS pkg_version,
3552
                             NULL AS dlocked, NULL AS pv_description,
3553
                             rel.operation
3554
                         FROM planned rel, view_settings vs, views vi
3555
                        WHERE rel.view_id = vi.view_id
3556
                          AND vs.view_id = rel.view_id
3557
                          AND vs.user_id = userid
3558
                          AND rtag_id = rtagid
3559
                          AND rel.view_id NOT IN (
3560
                               SELECT *
3561
                                 FROM THE
3562
                                       (SELECT CAST
3563
                                               (in_list_number
3564
                                                  (sviewidshowlist
3565
                                                  ) AS relmgr_number_tab_t
3566
                                               )
3567
                                         FROM DUAL
3568
                                       ))
3569
                 UNION
3570
                 /* Base Views expanded */
3571
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
3572
 
3573
                      --rel.pkg_state,
3574
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
3575
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
3576
                      pv.pv_description,
3577
                      rel.operation
3578
                  FROM planned rel,
3579
                      PACKAGES pkg,
3580
                      package_versions pv,
3581
                      views vi,
3582
                      view_settings vs
3583
                  WHERE pv.pkg_id = pkg.pkg_id
3584
                   AND rel.pv_id = pv.pv_id
3585
                   AND rel.view_id = vi.view_id
3586
                   AND vs.view_id = vi.view_id
3587
                   AND vs.user_id = userid
3588
                   AND rel.view_id IN (
3589
                        SELECT *
3590
                          FROM THE
3591
                                (SELECT CAST
3592
                                        (in_list_number
3593
                                               (sviewidshowlist) AS relmgr_number_tab_t
3594
                                        )
3595
                                  FROM DUAL
3596
                                ))
3597
                   AND rtag_id = rtagid
3598
                 UNION
3599
                 /* Private Views collapsed */
3600
                 SELECT vi.view_id, vi.view_name,
3601
                      TO_NUMBER (NULL) AS pkg_state,
3602
                      TO_NUMBER (NULL) AS deprecated_state,
3603
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
3604
                      NULL AS pkg_version, NULL AS dlocked,
3605
                      NULL AS pv_description,
3606
                      rel.operation
3607
                  FROM view_settings vs,
3608
                      view_def vd,
3609
                      views vi,
3610
                      planned rel,
3611
                      package_versions pv
3612
                  WHERE vs.view_id = vi.view_id
3613
                   AND rel.pv_id = pv.pv_id
3614
                   AND vd.pkg_id = pv.pkg_id
3615
                   AND vd.view_id = vi.view_id
3616
                   AND vi.base_view = 'N'
3617
                   AND rel.rtag_id = rtagid
3618
                   AND vs.user_id = userid
3619
                   AND vi.view_id NOT IN (
3620
                        SELECT *
3621
                          FROM THE
3622
                                (SELECT CAST
3623
                                        (in_list_number
3624
                                               (sviewidshowlist) AS relmgr_number_tab_t
3625
                                        )
3626
                                  FROM DUAL
3627
                                ))
3628
                 UNION
3629
                 /* Private Views expanded */
3630
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
3631
 
3632
                      --rel.pkg_state,
3633
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
3634
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
3635
                      pv.pv_description,
3636
                      rel.operation
3637
                  FROM users usr,
3638
                      view_settings vs,
3639
                      view_def vd,
3640
                      views vi,
3641
                      planned rel,
3642
                      PACKAGES pkg,
3643
                      package_versions pv
3644
                  WHERE vs.user_id = usr.user_id
3645
                   AND vs.view_id = vi.view_id
3646
                   AND vd.view_id = vi.view_id
3647
                   AND pv.pkg_id = pkg.pkg_id
3648
                   AND rel.pv_id = pv.pv_id
3649
                   AND rel.rtag_id = rtagid
3650
                   AND vd.pkg_id = pkg.pkg_id
3651
                   AND vi.base_view = 'N'
3652
                   AND vi.view_id IN (
3653
                        SELECT *
3654
                          FROM THE
3655
                                (SELECT CAST
3656
                                        (in_list_number
3657
                                               (sviewidshowlist) AS relmgr_number_tab_t
3658
                                        )
3659
                                  FROM DUAL
3660
                                ))
3661
                   AND usr.user_id = userid) ord
3662
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
3663
     END IF;
3664
   END;
3665
 
3666
/*-------------------------------------------------------------------------------------------------------*/
3667
   PROCEDURE get_view_content (
3668
     rtagid     IN      NUMBER,
3669
     viewid     IN      NUMBER,
3670
     recordset OUT     typecur
3671
   )
3672
   IS
3673
     isbaseview   CHAR (1);
3674
   BEGIN
3675
     -- Check if the view is BASE VIEW
3676
     SELECT vi.base_view
3677
      INTO isbaseview
3678
      FROM views vi
3679
      WHERE vi.view_id = viewid;
3680
 
3681
     IF (isbaseview = 'Y')
3682
     THEN
3683
       -- Get Base view content
3684
       OPEN recordset FOR
3685
         SELECT   DECODE (rel.pkg_state,
3686
                      NULL, 0,
3687
                      rel.pkg_state
3688
                     ) AS pkg_state,
3689
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
3690
                pv.pkg_version, pv.dlocked, pv.pv_description,
3691
                pv.build_type,
3692
                rel.operation
3693
            FROM environment_view rel, PACKAGES pkg, package_versions pv
3694
            WHERE pv.pkg_id = pkg.pkg_id
3695
             AND rel.pv_id = pv.pv_id
3696
             AND rel.view_id = viewid
3697
             AND rel.rtag_id = rtagid
3698
         ORDER BY UPPER (pkg.pkg_name);
3699
     ELSE
3700
       -- Get non base view content
3701
       OPEN recordset FOR
3702
         SELECT   DECODE (rel.pkg_state,
3703
                      NULL, 0,
3704
                      rel.pkg_state
3705
                     ) AS pkg_state,
3706
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
3707
                pv.pkg_version, pv.dlocked, pv.pv_description,
3708
                pv.build_type,
3709
                rel.operation
3710
            FROM environment_view rel,
3711
                PACKAGES pkg,
3712
                package_versions pv,
3713
                view_def vd
3714
            WHERE pv.pkg_id = pkg.pkg_id
3715
             AND rel.pv_id = pv.pv_id
3716
             AND rel.rtag_id = rtagid
3717
             AND vd.view_id = viewid
3718
             AND vd.pkg_id = pv.pkg_id
3719
         ORDER BY UPPER (pkg.pkg_name);
3720
     END IF;
3721
   END;
3722
 
3723
/*-------------------------------------------------------------------------------------------------------*/
3724
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
3725
     RETURN NUMBER
3726
   IS
3727
     envtab           NUMBER;
3728
     returnvalue      NUMBER;
3729
     return_not_found NUMBER := -1;
3730
   BEGIN
3731
     envtab := get_package_area (pvid, rtagid);
3732
 
3733
     IF envtab = 0
3734
     THEN
3735
       -- WORK IN PROGRESS --
3736
       returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
3737
     ELSIF envtab = 1
3738
     THEN
3739
       -- PENDING --
3740
       returnvalue := pk_planned.get_package_view (pvid, rtagid);
3741
     ELSIF envtab = 2
3742
     THEN
3743
       -- RELEASED --
3744
       returnvalue := pk_release.get_package_view (pvid, rtagid);
3745
     ELSE
3746
       -- This may be a Patch not located anywhere but unlocked
3747
       returnvalue := return_not_found;
3748
     END IF;
3749
 
3750
     RETURN returnvalue;
3751
   END;
3752
 
3753
/*-------------------------------------------------------------------------------------------------------*/
3754
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
3755
   IS
3756
     viewid        NUMBER;
3757
     envtab        NUMBER;
3758
     ispatch       CHAR (1) := NULL;
3759
     buildtype     CHAR (1) := NULL;
3760
   BEGIN
3761
     -- Check if package is patch
3762
     SELECT pv.is_patch, pv.build_type
3763
      INTO ispatch, buildtype
3764
      FROM package_versions pv
3765
      WHERE pv.pv_id = pvid;
3766
 
3767
     -- Get ViewId
3768
     viewid := get_package_view (pvid, rtagid);
3769
     -- Remove from current area
3770
     envtab := pk_environment.get_package_area (pvid, rtagid);
3771
 
3772
     -- Make sure that package was in work-in-progress or pending before makeing it release
3773
     -- Exclude patches, ripple builds
3774
     IF (envtab < 0)
3775
     THEN
3776
       -- Not found in work-in-progress or pending
3777
       IF (ispatch IS NULL) AND (buildtype = 'M')
3778
       THEN
3779
         raise_application_error (-20000,
3780
                            'This package cannot be released here.'
3781
                           );
3782
       END IF;
3783
     END IF;
3784
 
3785
     -- Log
3786
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
3787
 
3788
     IF envtab = 0
3789
     THEN
3790
       -- WORK IN PROGRESS --
3791
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
3792
     ELSIF envtab = 1
3793
     THEN
3794
       -- PENDING --
3795
       pk_planned.remove_package (pvid, rtagid, userid);
3796
     END IF;
3797
 
3798
     -- Change package state
3799
     pk_package.change_state (pvid, 'Y', userid);
3800
 
3801
     -- Make sure it is valid BASE VIEW
3802
     IF viewid < 1
3803
     THEN
3804
       viewid := 7;                     -- This is default base view
3805
     END IF;
3806
 
3807
     IF (ispatch IS NULL)
3808
     THEN
3809
       -- Add package to new area
3810
       pk_release.add_package (pvid, viewid, rtagid, userid);
3811
     END IF;
3812
 
3813
     -- Now do post Release Actions
3814
     pk_release.run_post_actions (pvid, rtagid);
3815
 
3816
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
3817
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
3818
     clean_do_not_ripple(rtagid);
3819
     clean_advisory_ripple(rtagid);
3820
 
3821
     -- Log
3822
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
3823
   END;
3824
 
3825
/*-------------------------------------------------------------------------------------------------------*/
3826
   PROCEDURE auto_make_release (
3827
     pvid          IN   NUMBER,
3828
     rtagid        IN   NUMBER,
3829
     userid        IN   NUMBER,
3830
     vext          IN   package_versions.v_ext%TYPE,
3831
     ssv_ext       IN   package_versions.v_ext%TYPE,
3832
     clonefrompvid IN   NUMBER
3833
   )
3834
   IS
3835
     viewid        NUMBER;
3836
     envtab        NUMBER;
3837
     ispatch       CHAR (1) := NULL;
3838
     buildtype      CHAR (1) := NULL;
3839
   BEGIN
3840
     -- Check if package is patch
3841
     SELECT pv.is_patch, pv.build_type
3842
      INTO ispatch, buildtype
3843
      FROM package_versions pv
3844
      WHERE pv.pv_id = pvid;
3845
 
3846
     IF vext <> ssv_ext
3847
     THEN
3848
       -- Get ViewId
3849
       viewid := get_package_view (clonefrompvid, rtagid);
3850
       -- Remove from current area
3851
       envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
3852
     ELSE
3853
       -- Get ViewId
3854
       viewid := get_package_view (pvid, rtagid);
3855
       -- Remove from current area
3856
       envtab := pk_environment.get_package_area (pvid, rtagid);
3857
     END IF;
3858
 
3859
     -- Make sure that package was in work-in-progress or pending before makeing it release
3860
     -- Exclude patches, ripple builds
3861
     IF (envtab < 0)
3862
     THEN
3863
       -- Not found in work-in-progress or pending
3864
       IF (ispatch IS NULL) AND (buildtype = 'M')
3865
       THEN
3866
         raise_application_error (-20000,
3867
                            'This package cannot be released here.'
3868
                           );
3869
       END IF;
3870
     END IF;
3871
 
3872
     -- Log
3873
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
3874
 
3875
     IF vext <> ssv_ext
3876
     THEN
3877
       IF envtab = 0
3878
       THEN
3879
         -- WORK IN PROGRESS --
3880
         pk_work_in_progress.remove_package (clonefrompvid, rtagid,
3881
                                    userid);
3882
       ELSIF envtab = 1
3883
       THEN
3884
         -- PENDING --
3885
         pk_planned.remove_package (clonefrompvid, rtagid, userid);
3886
       ELSIF envtab = 2
3887
       THEN
3888
         -- RELEASED --
3889
         pk_release.remove_package (clonefrompvid, rtagid, userid);
3890
       END IF;
3891
     ELSE
3892
       IF envtab = 0
3893
       THEN
3894
         -- WORK IN PROGRESS --
3895
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
3896
       ELSIF envtab = 1
3897
       THEN
3898
         -- PENDING --
3899
         pk_planned.remove_package (pvid, rtagid, userid);
3900
       END IF;
3901
     END IF;
3902
 
3903
     -- Change package state
3904
     pk_package.change_state (pvid, 'Y', userid);
3905
 
3906
     -- Make sure it is valid BASE VIEW
3907
     IF viewid < 1
3908
     THEN
3909
       viewid := 7;                     -- This is default base view
3910
     END IF;
3911
 
3912
     IF (ispatch IS NULL)
3913
     THEN
3914
       -- Add package to new area
3915
       pk_release.add_package (pvid, viewid, rtagid, userid);
3916
     END IF;
3917
 
3918
     -- Now do post Release Actions
3919
     pk_release.run_post_actions (pvid, rtagid);
3920
     -- Now update the Dash_Board Table (DEPRECATED)
3921
     pk_rmapi.update_dash_board (rtagid);
3922
 
3923
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
3924
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
3925
     clean_do_not_ripple(rtagid);
3926
     clean_advisory_ripple(rtagid);
3927
 
3928
     -- Log
3929
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
3930
   END;
3931
 
3932
/*-------------------------------------------------------------------------------------------------------*/
3933
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
3934
   IS
3935
     viewid   NUMBER;
3936
     envtab   NUMBER;
3937
   BEGIN
3938
     -- Get ViewId
3939
     --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
3940
     viewid := get_package_view (pvid, rtagid);
3941
     -- Remove from current area
3942
     envtab := pk_environment.get_package_area (pvid, rtagid);
3943
     -- Log
3944
     log_action (pvid,
3945
              'action',
3946
              userid,
3947
              'Start of Make Package UnRelease...'
3948
             );
3949
 
3950
     IF envtab = 2
3951
     THEN
3952
       -- RELEASE AREA --
3953
       pk_release.remove_package (pvid, rtagid, userid);
3954
     ELSIF envtab = 1
3955
     THEN
3956
       -- PENDING --
3957
       pk_planned.remove_package (pvid, rtagid, userid);
3958
     END IF;
3959
 
3960
     -- Change package state
3961
     pk_package.change_state (pvid, 'N', userid);
3962
 
3963
     -- Make sure it is valid BASE VIEW
3964
     IF viewid < 1
3965
     THEN
3966
       viewid := 7;                     -- This is default base view
3967
     END IF;
3968
 
3969
     -- Add package to new area
3970
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
3971
     -- Now do post Release Actions
3972
     pk_release.run_post_actions (pvid, rtagid);
3973
     -- Log
3974
     log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
3975
   END;
3976
 
3977
/*-------------------------------------------------------------------------------------------------------*/
3978
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
3979
   IS
3980
     viewid     NUMBER;
3981
     ispatch    CHAR (1) := NULL;
3982
     buildtype  CHAR (1) := NULL;
3983
   BEGIN
3984
     -- Check if package is patch
3985
     SELECT pv.is_patch, pv.build_type
3986
      INTO ispatch, buildtype
3987
      FROM package_versions pv
3988
      WHERE pv.pv_id = pvid;
3989
 
3990
     -- Get ViewId
3991
     viewid := get_package_view (pvid, rtagid);
3992
     --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
3993
 
3994
     -- Log
3995
     log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
3996
 
3997
     IF (ispatch IS NULL)
3998
     THEN
3999
       -- Remove from current area
4000
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
4001
       -- Change package state
4002
       pk_package.change_state (pvid, 'P', userid);
4003
       -- Add package to new area
4004
       pk_planned.add_package (pvid, viewid, rtagid, userid);
4005
     END IF;
4006
 
4007
     -- Log
4008
     log_action (pvid, 'action', userid, 'End of Make Package Pending...');
4009
   END;
4010
 
4011
/*-------------------------------------------------------------------------------------------------------*/
4012
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
4013
   IS
4014
   BEGIN
4015
     -- Log
4016
     log_action (pvid,
4017
                 'action',
4018
                 userid,
4019
                 'Start of Package Pending Approval...'
4020
                 );
4021
     -- Change package state
4022
     pk_package.change_state (pvid, 'A', userid);
4023
     -- Log
4024
     log_action (pvid, 'action', userid,
4025
                 'End of Package Pending Approval...');
4026
   END;
4027
 
4028
/*-------------------------------------------------------------------------------------------------------*/
4029
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
4030
   IS
4031
     viewid   NUMBER;
4032
     operation CHAR;
4033
   BEGIN
4034
     -- Get ViewId
4035
     viewid := get_package_view (pvid, rtagid);
4036
     -- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
4037
 
4038
     -- DEVI-45275
4039
     -- If the package version is an official version that is to be rejected from a merge operation
4040
     -- then find out in order to prevent it being added back to work-in-progress table . This will
4041
     -- be denoted by the operation field in the planned table being A or S
4042
     operation := ' ';
4043
     SELECT
4044
     (CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operation
4045
     FROM planned pl
4046
     WHERE pl.PV_ID = pvid
4047
     AND pl.RTAG_ID = rtagid;
4048
 
4049
     -- Log
4050
     log_action (pvid, 'action', userid, 'Start of Reject Package...');
4051
     -- Remove from current area
4052
     pk_planned.remove_package (pvid, rtagid, userid);
4053
 
4054
     -- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .
4055
     IF operation <> 'A' AND operation <> 'S'
4056
     THEN
4057
     -- Change package state
4058
     pk_package.change_state (pvid, 'R', userid);
4059
     -- Add package to new area
4060
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
4061
     ELSE
4062
      log_action (pvid, 'action', userid, 'Rejected Package Merge');
4063
     END IF;
4064
     -- Log
4065
     log_action (pvid, 'action', userid, 'End of Reject Package...');
4066
   END;
4067
 
4068
/*-------------------------------------------------------------------------------------------------------*/
4069
   PROCEDURE change_package_view (
4070
     pvid       IN   NUMBER,
4071
     rtagid     IN   NUMBER,
4072
     newviewid  IN   NUMBER
4073
   )
4074
   IS
4075
     envtab   NUMBER;
4076
   BEGIN
4077
     envtab := pk_environment.get_package_area (pvid, rtagid);
4078
 
4079
     IF envtab = 0
4080
     THEN
4081
       -- WORK IN PROGRESS --
4082
       pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
4083
     ELSIF envtab = 1
4084
     THEN
4085
       -- PENDING --
4086
       pk_planned.change_package_view (pvid, rtagid, newviewid);
4087
     ELSIF envtab = 2
4088
     THEN
4089
       -- RELEASED --
4090
       pk_release.change_package_view (pvid, rtagid, newviewid);
4091
     END IF;
4092
   END;
4093
 
4094
/*-------------------------------------------------------------------------------------------------------*/
4095
   PROCEDURE find_package (
4096
     skeyword     IN      VARCHAR2,
4097
     nrtagid      IN      NUMBER,
4098
     nsearcharea  IN      NUMBER,
4099
     recordset    OUT     typecur
4100
   )
4101
   IS
4102
   BEGIN
4103
     IF nsearcharea = 0
4104
     THEN
4105
       /* Search Work In Progress */
4106
       OPEN recordset FOR
4107
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
4108
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
4109
                pv.modified_stamp, usr.full_name, usr.user_email
4110
           FROM views vi,
4111
                work_in_progress rc,
4112
                PACKAGES pkg,
4113
                package_versions pv,
4114
                users usr
4115
          WHERE rc.view_id = vi.view_id
4116
            AND rc.pv_id = pv.pv_id
4117
            AND pkg.pkg_id = pv.pkg_id
4118
            AND pv.modifier_id = usr.user_id
4119
            AND rc.rtag_id = nrtagid
4120
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
4121
       ORDER BY UPPER (pkg.pkg_name);
4122
     ELSIF nsearcharea = 1
4123
     THEN
4124
       /* Search Pending */
4125
       OPEN recordset FOR
4126
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
4127
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
4128
                pv.modified_stamp, usr.full_name, usr.user_email
4129
           FROM views vi,
4130
                planned rc,
4131
                PACKAGES pkg,
4132
                package_versions pv,
4133
                users usr
4134
          WHERE rc.view_id = vi.view_id
4135
            AND rc.pv_id = pv.pv_id
4136
            AND pkg.pkg_id = pv.pkg_id
4137
            AND pv.modifier_id = usr.user_id
4138
            AND rc.rtag_id = nrtagid
4139
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
4140
       ORDER BY UPPER (pkg.pkg_name);
4141
     ELSIF nsearcharea = 2
4142
     THEN
4143
       /* Search Released */
4144
       OPEN recordset FOR
4145
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
4146
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
4147
                pv.modified_stamp, usr.full_name, usr.user_email
4148
           FROM views vi,
4149
                release_content rc,
4150
                PACKAGES pkg,
4151
                package_versions pv,
4152
                users usr
4153
          WHERE rc.base_view_id = vi.view_id
4154
            AND rc.pv_id = pv.pv_id
4155
            AND pkg.pkg_id = pv.pkg_id
4156
            AND pv.modifier_id = usr.user_id
4157
            AND rc.rtag_id = nrtagid
4158
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
4159
         ORDER BY UPPER (pkg.pkg_name);
4160
     ELSIF nsearcharea = 3
4161
     THEN
4162
       /* Search ALL */
4163
       OPEN recordset FOR
4164
         SELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
4165
                pv.pv_id, pv.pkg_version, pv.comments,
4166
                pv.modified_stamp, usr.full_name, usr.user_email
4167
           FROM views vi,
4168
                environment_view rc,
4169
                PACKAGES pkg,
4170
                package_versions pv,
4171
                users usr
4172
          WHERE rc.view_id = vi.view_id
4173
            AND rc.pv_id = pv.pv_id
4174
            AND pkg.pkg_id = pv.pkg_id
4175
            AND pv.modifier_id = usr.user_id
4176
            AND rc.rtag_id = nrtagid
4177
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
4178
         ORDER BY UPPER (pkg.pkg_name);
4179
     END IF;
4180
   END;
4181
 
4182
/*-------------------------------------------------------------------------------------------------------*/
4183
   PROCEDURE find_file (
4184
     skeyword     IN      VARCHAR2,
4185
     nrtagid      IN      NUMBER,
4186
     nsearcharea  IN      NUMBER,
4187
     npagesize    IN      NUMBER,
4188
     recordset    OUT     typecur
4189
   )
4190
   IS
4191
   BEGIN
4192
     IF nsearcharea = 0
4193
     THEN
4194
       /* Search Work In Progress */
4195
       OPEN recordset FOR
4196
         SELECT   qry.*
4197
            FROM (
4198
                 /* File search on Packages */
4199
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4200
                        pv.pv_id, pv.pkg_version, art.crc_cksum
4201
                   FROM work_in_progress rc,
4202
                        PACKAGES pkg,
4203
                        package_versions pv,
4204
                        release_components art
4205
                  WHERE rc.pv_id = art.pv_id
4206
                    AND pv.pkg_id = pkg.pkg_id
4207
                    AND rc.pv_id = pv.pv_id
4208
                    AND rc.rtag_id = nrtagid
4209
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
4210
                 UNION ALL
4211
                 /* File search on Products */
4212
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4213
                        pv.pv_id, pv.pkg_version, art.crc_cksum
4214
                   FROM work_in_progress rc,
4215
                        PACKAGES pkg,
4216
                        package_versions pv,
4217
                        product_components art
4218
                  WHERE rc.pv_id = art.pv_id
4219
                    AND pv.pkg_id = pkg.pkg_id
4220
                    AND rc.pv_id = pv.pv_id
4221
                    AND rc.rtag_id = nrtagid
4222
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
4223
            WHERE ROWNUM <= npagesize
4224
         ORDER BY UPPER (qry.pkg_name);
4225
     ELSIF nsearcharea = 1
4226
     THEN
4227
       /* Search Pending */
4228
       OPEN recordset FOR
4229
         SELECT   qry.*
4230
            FROM (
4231
                 /* File search on Packages */
4232
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4233
                        pv.pv_id, pv.pkg_version, art.crc_cksum
4234
                   FROM planned rc,
4235
                        PACKAGES pkg,
4236
                        package_versions pv,
4237
                        release_components art
4238
                  WHERE rc.pv_id = art.pv_id
4239
                    AND pv.pkg_id = pkg.pkg_id
4240
                    AND rc.pv_id = pv.pv_id
4241
                    AND rc.rtag_id = nrtagid
4242
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
4243
                 UNION ALL
4244
                 /* File search on Products */
4245
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4246
                        pv.pv_id, pv.pkg_version, art.crc_cksum
4247
                   FROM planned rc,
4248
                        PACKAGES pkg,
4249
                        package_versions pv,
4250
                        product_components art
4251
                  WHERE rc.pv_id = art.pv_id
4252
                    AND pv.pkg_id = pkg.pkg_id
4253
                    AND rc.pv_id = pv.pv_id
4254
                    AND rc.rtag_id = nrtagid
4255
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
4256
            WHERE ROWNUM <= npagesize
4257
         ORDER BY UPPER (qry.pkg_name);
4258
     ELSIF nsearcharea = 2
4259
     THEN
4260
       /* Search Released */
4261
       OPEN recordset FOR
4262
         SELECT   qry.*
4263
            FROM (
4264
                 /* File search on Packages */
4265
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4266
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
4267
                        NULL AS patch_id
4268
                   FROM release_content rc,
4269
                        PACKAGES pkg,
4270
                        package_versions pv,
4271
                        release_components art
4272
                  WHERE rc.pv_id = art.pv_id
4273
                    AND pv.pkg_id = pkg.pkg_id
4274
                    AND rc.pv_id = pv.pv_id
4275
                    AND rc.rtag_id = nrtagid
4276
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
4277
                 UNION ALL
4278
                 /* File search on Products */
4279
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4280
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
4281
                        NULL AS patch_id
4282
                   FROM release_content rc,
4283
                        PACKAGES pkg,
4284
                        package_versions pv,
4285
                        product_components art
4286
                  WHERE rc.pv_id = art.pv_id
4287
                    AND pv.pkg_id = pkg.pkg_id
4288
                    AND rc.pv_id = pv.pv_id
4289
                    AND rc.rtag_id = nrtagid
4290
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
4291
                 UNION ALL
4292
                 /* File search on Patches */
4293
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4294
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
4295
                        DECODE (art.file_path,
4296
                                NULL, pp.patch_id,
4297
                                NULL
4298
                                ) AS patch_id
4299
                   FROM release_content rc,
4300
                        PACKAGES pkg,
4301
                        package_versions pv,
4302
                        release_components art,
4303
                        package_patches pp
4304
                  WHERE pv.pv_id = pp.pv_id
4305
                    AND pv.pkg_id = pkg.pkg_id
4306
                    AND rc.rtag_id = nrtagid
4307
                    AND art.pv_id = pp.patch_id
4308
                    AND rc.pv_id = pp.pv_id
4309
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
4310
            WHERE ROWNUM <= npagesize
4311
         ORDER BY UPPER (qry.pkg_name);
4312
     ELSIF nsearcharea = 3
4313
     THEN
4314
       /* Search ALL */
4315
       OPEN recordset FOR
4316
         SELECT   qry.*
4317
            FROM (
4318
                 /* File search on Packages */
4319
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4320
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
4321
                        NULL AS patch_id
4322
                   FROM environment_view rc,
4323
                        PACKAGES pkg,
4324
                        package_versions pv,
4325
                        release_components art
4326
                  WHERE rc.pv_id = art.pv_id
4327
                    AND pv.pkg_id = pkg.pkg_id
4328
                    AND rc.pv_id = pv.pv_id
4329
                    AND rc.rtag_id = nrtagid
4330
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
4331
                 UNION ALL
4332
                 /* File search on Products */
4333
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4334
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
4335
                        NULL AS patch_id
4336
                   FROM environment_view rc,
4337
                        PACKAGES pkg,
4338
                        package_versions pv,
4339
                        product_components art
4340
                  WHERE rc.pv_id = art.pv_id
4341
                    AND pv.pkg_id = pkg.pkg_id
4342
                    AND rc.pv_id = pv.pv_id
4343
                    AND rc.rtag_id = nrtagid
4344
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
4345
                 UNION ALL
4346
                 /* File search on Patches */
4347
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
4348
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
4349
                        DECODE (art.file_path,
4350
                                NULL, pp.patch_id,
4351
                                NULL
4352
                               ) AS patch_id
4353
                   FROM release_content rc,
4354
                        PACKAGES pkg,
4355
                        package_versions pv,
4356
                        release_components art,
4357
                        package_patches pp
4358
                  WHERE pv.pv_id = pp.pv_id
4359
                    AND pv.pkg_id = pkg.pkg_id
4360
                    AND rc.rtag_id = nrtagid
4361
                    AND art.pv_id = pp.patch_id
4362
                    AND rc.pv_id = pp.pv_id
4363
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
4364
            WHERE ROWNUM <= npagesize
4365
         ORDER BY UPPER (qry.pkg_name);
4366
     END IF;
4367
   END;
4368
 
4369
/*-------------------------------------------------------------------------------------------------------*/
4370
   PROCEDURE get_prodrelease_items (
4371
     rtagid           IN      NUMBER,
4372
     ntruerecordcount OUT     NUMBER,
4373
     recordset        OUT     typecur
4374
   )
4375
   IS
4376
   BEGIN
4377
     -- Get true record count n the number of integration products
4378
     SELECT COUNT (rc.pv_id)
4379
      INTO ntruerecordcount
4380
      FROM release_content rc
4381
      WHERE rc.rtag_id = rtagid;
4382
 
4383
     OPEN recordset FOR
4384
       SELECT vi.view_id, vi.view_name, rel.pkg_state,   --rel.pkg_state,
4385
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
4386
              pv.pkg_version, pv.dlocked, pv.pv_description
4387
         FROM release_content rel,
4388
              PACKAGES pkg,
4389
              package_versions pv,
4390
              views vi
4391
        WHERE pv.pkg_id = pkg.pkg_id
4392
          AND rel.pv_id = pv.pv_id
4393
          AND rel.base_view_id = vi.view_id
4394
          AND pv.is_deployable = 'Y'
4395
          AND rtag_id = rtagid
4396
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
4397
                                 FROM deployment_manager.os_contents)
4398
          AND rel.product_state IS NULL
4399
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
4400
   END;
4401
 
4402
/*-------------------------------------------------------------------------------------------------------*/
4403
   PROCEDURE get_integration_items (
4404
     rtagid           IN      NUMBER,
4405
     ntruerecordcount OUT     NUMBER,
4406
     recordset        OUT     typecur
4407
   )
4408
   IS
4409
   BEGIN
4410
     -- Get true record count n the number of integration products
4411
     SELECT COUNT (rc.pv_id)
4412
      INTO ntruerecordcount
4413
      FROM release_content rc
4414
      WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
4415
 
4416
     OPEN recordset FOR
4417
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
4418
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
4419
              pv.pkg_version, pv.dlocked, pv.pv_description
4420
         FROM release_content rel,
4421
              PACKAGES pkg,
4422
              package_versions pv,
4423
              views vi
4424
        WHERE pv.pkg_id = pkg.pkg_id
4425
          AND rel.pv_id = pv.pv_id
4426
          AND rel.base_view_id = vi.view_id
4427
          AND pv.is_deployable = 'Y'
4428
          AND rtag_id = rtagid
4429
          AND rel.product_state IN (1, 5)
4430
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
4431
   END;
4432
 
4433
/*-------------------------------------------------------------------------------------------------------*/
4434
   PROCEDURE get_test_items (
4435
     rtagid           IN      NUMBER,
4436
     ntruerecordcount OUT     NUMBER,
4437
     recordset        OUT     typecur
4438
   )
4439
   IS
4440
   BEGIN
4441
     -- Get true record count n the number of test products
4442
     SELECT COUNT (rc.pv_id)
4443
      INTO ntruerecordcount
4444
      FROM release_content rc
4445
      WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
4446
 
4447
     OPEN recordset FOR
4448
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
4449
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
4450
              pv.pkg_version, pv.dlocked, pv.pv_description
4451
         FROM release_content rel,
4452
              PACKAGES pkg,
4453
              package_versions pv,
4454
              views vi
4455
        WHERE pv.pkg_id = pkg.pkg_id
4456
          AND rel.pv_id = pv.pv_id
4457
          AND rel.base_view_id = vi.view_id
4458
          AND pv.is_deployable = 'Y'
4459
          AND rtag_id = rtagid
4460
          AND rel.product_state = 2
4461
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
4462
   END;
4463
 
4464
/*-------------------------------------------------------------------------------------------------------*/
4465
   PROCEDURE get_deploy_items (
4466
     rtagid           IN      NUMBER,
4467
     ntruerecordcount OUT     NUMBER,
4468
     recordset        OUT     typecur
4469
   )
4470
   IS
4471
   BEGIN
4472
     -- Get true record count n the number of deploy products
4473
     SELECT COUNT (rc.pv_id)
4474
      INTO ntruerecordcount
4475
      FROM release_content rc
4476
      WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
4477
 
4478
     OPEN recordset FOR
4479
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
4480
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
4481
              pv.pkg_version, pv.dlocked, pv.pv_description
4482
         FROM release_content rel,
4483
              PACKAGES pkg,
4484
              package_versions pv,
4485
              views vi
4486
        WHERE pv.pkg_id = pkg.pkg_id
4487
          AND rel.pv_id = pv.pv_id
4488
          AND rel.base_view_id = vi.view_id
4489
          AND pv.is_deployable = 'Y'
4490
          AND rtag_id = rtagid
4491
          AND rel.product_state IN (3, 5)
4492
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
4493
                                 FROM deployment_manager.os_contents)
4494
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
4495
   END;
4496
 
4497
/*-------------------------------------------------------------------------------------------------------*/
4498
   PROCEDURE get_reject_items (
4499
     rtagid           IN      NUMBER,
4500
     ntruerecordcount OUT     NUMBER,
4501
     recordset        OUT     typecur
4502
   )
4503
   IS
4504
   BEGIN
4505
     -- Get true record count n the number of reject products
4506
     SELECT COUNT (rc.pv_id)
4507
       INTO ntruerecordcount
4508
       FROM release_content rc
4509
      WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
4510
 
4511
     OPEN recordset FOR
4512
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
4513
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
4514
              pv.pkg_version, pv.dlocked, pv.pv_description
4515
         FROM release_content rel,
4516
              PACKAGES pkg,
4517
              package_versions pv,
4518
              views vi
4519
        WHERE pv.pkg_id = pkg.pkg_id
4520
          AND rel.pv_id = pv.pv_id
4521
          AND rel.base_view_id = vi.view_id
4522
          AND pv.is_deployable = 'Y'
4523
          AND rtag_id = rtagid
4524
          AND rel.product_state = 4
4525
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
4526
   END;
4527
/*-------------------------------------------------------------------------------------------------------*/
4528
   -- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table
4529
   -- to the release_content table.
4530
 
4531
  PROCEDURE approve_merge (
4532
   PvId    IN NUMBER,
4533
   RtagId  IN NUMBER,
4534
   UserId  IN NUMBER
4535
  )
4536
  IS
4537
   viewid        NUMBER;
4538
   envtab        NUMBER;
4539
   oper         CHAR;
4540
  BEGIN
4541
      -- Get ViewId
4542
     viewid := get_package_view (pvid, rtagid);
4543
 
4544
     -- Get the view tab
4545
     envtab := pk_environment.get_package_area (pvid, rtagid);
4546
 
4547
     -- Make sure that package was in pending before merging it to released
4548
     IF (envtab <> 1)
4549
     THEN
4550
       -- Not found in pending
4551
       raise_application_error (-20000,
4552
                          'This package cannot be released here.'
4553
                         );
4554
     END IF;
4555
 
4556
     -- Log
4557
     log_action (pvid, 'action', userid, 'Start of Package Merge...');
4558
 
4559
     -- Get the planned operation type A=Add, S=Subtract
4560
     SELECT ev.operation INTO oper
4561
       FROM environment_view ev
4562
      WHERE ev.rtag_id = RtagId
4563
        AND ev.pv_id = PvId
4564
        AND (ev.operation = 'A' OR ev.operation = 'S');
4565
 
4566
     -- Remove from Pending
4567
     pk_planned.remove_package (PvId, RtagId, UserId);
4568
 
4569
     -- Either add to the release, or remove from the release as the operation commands
4570
     IF oper = 'A'
4571
     THEN
4572
       pk_release.add_package(PvId, viewId, RtagId, UserId);
4573
 
4574
     ELSIF oper = 'S'
4575
     THEN
4576
       pk_release.remove_package(PvId, RtagId, UserId);
4577
 
4578
       -- Delete old package's pegging info
4579
       DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;
4580
 
4581
       -- Delete old package's advisory ripple info
4582
       DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;
4583
     END IF;
4584
 
4585
     touch_release(RtagId);
4586
 
4587
     -- Log
4588
     log_action (pvid, 'action', userid, 'End of Package Merge...');
4589
  END;
4590
/*-------------------------------------------------------------------------------------------------------*/
4591
END pk_environment;
1374 dpurdie 4592
/
4593
--------------------------------------------------------
3959 dpurdie 4594
--  DDL for Package Body PK_LICENCING
1374 dpurdie 4595
--------------------------------------------------------
1373 dpurdie 4596
 
3959 dpurdie 4597
  CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS
1373 dpurdie 4598
 
4599
/*
4600
------------------------------
3959 dpurdie 4601
||  Last Modified:  G.Huddy
4602
||  Modified Date:  19/Aug/2008
1373 dpurdie 4603
||  Body Version:   1.0
4604
------------------------------
4605
*/
4606
 
3959 dpurdie 4607
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
4608
   BEGIN
4609
      IF IS_LICENCED(PvId, licenceId) = 0 THEN
4610
         -- Add entry to licencing table
4611
         INSERT INTO licencing (pv_id, licence)
4612
         VALUES (PvId, licenceId);
1373 dpurdie 4613
 
3959 dpurdie 4614
         -- log action
4615
         -- TODO
4616
      END IF;
1373 dpurdie 4617
 
3959 dpurdie 4618
   END;
1373 dpurdie 4619
 
4620
/*-------------------------------------------------------------------------------------------------------*/
4621
 
3959 dpurdie 4622
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
4623
   BEGIN
4624
      IF NOT IS_LICENCED(PvId, licenceId) = 0 THEN
4625
         -- Delete entry from licencing table
4626
         DELETE FROM licencing
4627
         WHERE pv_id = PvId
4628
         AND licence = licenceId;
1373 dpurdie 4629
 
3959 dpurdie 4630
         -- log action
4631
         -- TODO
4632
      END IF;
4633
   END;
1373 dpurdie 4634
 
4635
/*-------------------------------------------------------------------------------------------------------*/
4636
 
3959 dpurdie 4637
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 4638
 
3959 dpurdie 4639
      CURSOR licencing_cur
4640
      IS
4641
         SELECT *
4642
         FROM licencing
4643
         WHERE pv_id = fromPvId;
1373 dpurdie 4644
 
3959 dpurdie 4645
      licencing_rec licencing_cur%ROWTYPE;
1373 dpurdie 4646
 
4647
   BEGIN
3959 dpurdie 4648
      -- For each licence association that the Last PV_ID had, create a similar
4649
      -- arrangement for the new PV_ID
4650
      -- NOTE that any additional licencing associations the new PV_ID has that the old one
4651
      -- does not have, are retained. The assumption is that the user has made those and so we do not
4652
      -- have any right to destroy them without asking them.
4653
      OPEN licencing_cur;
1373 dpurdie 4654
 
3959 dpurdie 4655
      FETCH licencing_cur
4656
      INTO licencing_rec;
1373 dpurdie 4657
 
3959 dpurdie 4658
      WHILE licencing_cur%FOUND
1373 dpurdie 4659
      LOOP
3959 dpurdie 4660
         ADD_LICENCE ( toPvId, licencing_rec.licence, UserId );
1373 dpurdie 4661
 
3959 dpurdie 4662
         FETCH licencing_cur
4663
         INTO licencing_rec;
1373 dpurdie 4664
      END LOOP;
4665
   END;
4666
 
4667
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 4668
 
4669
   FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER IS
4670
      found NUMBER;
1373 dpurdie 4671
   BEGIN
4672
 
3959 dpurdie 4673
      SELECT COUNT(*) INTO found
4674
      FROM licencing
4675
      WHERE pv_id = PvId
4676
      AND licence = LicenceId;
1373 dpurdie 4677
 
3959 dpurdie 4678
      RETURN found;
1373 dpurdie 4679
   END;
4680
 
4681
/*-------------------------------------------------------------------------------------------------------*/
4682
 
3959 dpurdie 4683
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 4684
 
3959 dpurdie 4685
      CURSOR licencing_cur
4686
      IS
1373 dpurdie 4687
         SELECT *
3959 dpurdie 4688
         FROM licencing
4689
         WHERE pv_id = PvId;
1373 dpurdie 4690
 
3959 dpurdie 4691
      licencing_rec licencing_cur%ROWTYPE;
4692
   BEGIN
4693
      -- For each licence association that the PV_ID had, remove it
4694
      OPEN licencing_cur;
1373 dpurdie 4695
 
3959 dpurdie 4696
      FETCH licencing_cur
4697
      INTO licencing_rec;
1373 dpurdie 4698
 
3959 dpurdie 4699
      WHILE licencing_cur%FOUND
4700
      LOOP
4701
         REMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );
1373 dpurdie 4702
 
3959 dpurdie 4703
         FETCH licencing_cur
4704
         INTO licencing_rec;
4705
      END LOOP;
1373 dpurdie 4706
   END;
4707
 
4708
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 4709
END PK_LICENCING;
1374 dpurdie 4710
/
4711
--------------------------------------------------------
3959 dpurdie 4712
--  DDL for Package Body PK_PACKAGE
1374 dpurdie 4713
--------------------------------------------------------
1373 dpurdie 4714
 
3959 dpurdie 4715
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE" 
1373 dpurdie 4716
IS
4717
   /*-------------------------------------------------------------------------------------------------------*/
4718
   PROCEDURE new_version (
4719
      nlastpvid                   IN       NUMBER,
4720
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
4721
      cbuildtype                  IN       CHAR,
4722
      nsettopvid                  IN       NUMBER DEFAULT NULL,
4723
      nrtagid                     IN       NUMBER,
4724
      nuserid                     IN       NUMBER,
4725
      enumissues_state_imported   IN       NUMBER,
4726
      returnpvid                  OUT      NUMBER
4727
   )
4728
   IS
3959 dpurdie 4729
      origpkg_id                  package_versions.pkg_id%TYPE;
4730
      origdlocked                 package_versions.dlocked%TYPE;
4731
      ssv_mm                      package_versions.v_mm%TYPE;
4732
      ssv_nmm                     package_versions.v_nmm%TYPE;
4733
      ssv_ext                     package_versions.v_ext%TYPE;
4734
      spackageversion             VARCHAR2 (4000);
4735
      nissuestypes                NUMBER;
4736
      nviewid                     NUMBER;
4737
      reccount                    NUMBER;
4738
      isreleased                  package_versions.dlocked%TYPE := 'N';
4739
      slabel                      VARCHAR2 (4000)               := NULL;
1373 dpurdie 4740
 
4741
      CURSOR package_versions_cur
4742
      IS
4743
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
4744
           FROM package_versions pv
4745
          WHERE pv.pkg_version = snewpkgversion
4746
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
4747
                                         FROM package_versions origpv
4748
                                        WHERE origpv.pv_id = nlastpvid);
4749
 
3959 dpurdie 4750
      package_versions_rec package_versions_cur%ROWTYPE;
1373 dpurdie 4751
 
4752
      CURSOR clone_package_versions_cur
4753
      IS
4754
         SELECT DISTINCT pkg_id, dlocked
4755
                    FROM package_versions
4756
                   WHERE pv_id = nlastpvid;
4757
 
3959 dpurdie 4758
      clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
1373 dpurdie 4759
   BEGIN
4760
      spackageversion := snewpkgversion;
4761
 
4762
      IF nsettopvid IS NULL
4763
      THEN
4764
         -- SetToPv_id is not supplied, hence proceed.
4765
 
4766
         /* ---------------------------------------------------- */
3959 dpurdie 4767
         /* Find id package_version exists                       */
4768
         /* ---------------------------------------------------- */
1373 dpurdie 4769
         OPEN package_versions_cur;
4770
 
4771
         FETCH package_versions_cur
4772
          INTO package_versions_rec;
4773
 
4774
         IF package_versions_cur%NOTFOUND
4775
         THEN
4776
            ---  Create brand new package ---
4777
            SELECT seq_pv_id.NEXTVAL
4778
              INTO returnpvid
4779
              FROM DUAL;
4780
 
4781
            -- Split Version to get extention + other
4782
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
4783
 
4784
            -- Get previous package to clone from
4785
            OPEN clone_package_versions_cur;
4786
 
4787
            FETCH clone_package_versions_cur
4788
             INTO clone_package_versions_rec;
4789
 
4790
            origpkg_id := clone_package_versions_rec.pkg_id;
4791
            origdlocked := clone_package_versions_rec.dlocked;
4792
 
4793
            CLOSE clone_package_versions_cur;
4794
 
4795
            -- Automated built config
4796
            IF (cbuildtype = 'A')
4797
            THEN
4798
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
3959 dpurdie 4799
               -- Make sure that version is still unique
1373 dpurdie 4800
            END IF;
4801
 
4802
            -- Clone Package Version Details --
3959 dpurdie 4803
            INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,
4804
                                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
4805
                                         v_ext, src_path, pv_description, pv_overview,
4806
                                         last_pv_id, owner_id, is_deployable,
4807
                                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
4808
                 SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
4809
                        spackageversion AS pkg_version, 'N' AS dlocked,
4810
                        ora_sysdate AS created_stamp, nuserid AS creator_id,
4811
                        ora_sysdatetime AS modified_stamp,
4812
                        nuserid AS modifier_id, ssv_mm AS v_mm,
4813
                        ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
4814
                        pv.pv_description, pv.pv_overview,
4815
                        nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
4816
                        pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
4817
                   FROM package_versions pv
4818
                  WHERE pv.pv_id = nlastpvid;
1373 dpurdie 4819
 
4820
            -- Set Issues Type for cloning ---
4821
            IF origdlocked = 'Y'
4822
            THEN
4823
               nissuestypes := enumissues_state_imported;
4824
            ELSE
4825
               nissuestypes := NULL;
4826
            END IF;
4827
 
4828
            -- Update Label for automated built
4829
            IF (cbuildtype = 'A')
4830
            THEN
4831
               slabel := get_automated_label (returnpvid);
4832
 
4833
               UPDATE package_versions pv
4834
                  SET pv.pkg_label = slabel
4835
                WHERE pv.pv_id = returnpvid;
4836
            END IF;
4837
 
4838
            basic_clone (nlastpvid,
4839
                         returnpvid,
4840
                         nrtagid,
4841
                         nuserid,
4842
                         origpkg_id,
4843
                         nissuestypes
4844
                        );
4845
         ELSE
4846
            --- Package already exists, hence reuse ---
4847
            returnpvid := package_versions_rec.pv_id;
4848
            isreleased := package_versions_rec.dlocked;
4849
         END IF;
4850
 
4851
         CLOSE package_versions_cur;
4852
      ELSE
4853
         returnpvid := nsettopvid;
4854
      END IF;
4855
   END new_version;
4856
 
4857
/*-------------------------------------------------------------------------------------------------------*/
4858
   PROCEDURE change_state (
4859
      pvid       IN   NUMBER,
4860
      newstate   IN   package_versions.dlocked%TYPE,
4861
      userid     IN   NUMBER
4862
   )
4863
   IS
4864
   BEGIN
4865
      -- Set package in Released mode
4866
      UPDATE package_versions pv
4867
         SET pv.dlocked = newstate,
4868
             pv.modified_stamp = ora_sysdatetime,
4869
             pv.modifier_id = userid
4870
       WHERE pv.pv_id = pvid;
4871
 
4872
      -- Log action --
4873
      IF newstate = 'Y'
4874
      THEN
4875
         -- RELEASED --
4876
         log_action (pvid,
4877
                     'makeofficial',
4878
                     userid,
4879
                     'Package state change to: Released'
4880
                    );
4881
      ELSIF newstate = 'N'
4882
      THEN
4883
         -- UNLOCKED --
4884
         log_action (pvid,
4885
                     'makeunofficial',
4886
                     userid,
4887
                     'Package state change to: Ulocked'
4888
                    );
4889
      ELSIF newstate = 'P'
4890
      THEN
4891
         -- PENDING APPROVAL --
4892
         log_action (pvid,
4893
                     'add_to_planned',
4894
                     userid,
4895
                     'Package state change to: Pending Approval'
4896
                    );
4897
      ELSIF newstate = 'R'
4898
      THEN
4899
         -- REJECTED --
4900
         log_action (pvid,
4901
                     'reject_package',
4902
                     userid,
4903
                     'Package state change to: Rejected'
4904
                    );
4905
      ELSIF newstate = 'A'
4906
      THEN
4907
         -- APPROVED --
4908
         log_action (pvid,
4909
                     'approve_package',
4910
                     userid,
4911
                     'Package state change to: Approved'
4912
                    );
4913
      END IF;
4914
   END;
4915
 
4916
/*-------------------------------------------------------------------------------------------------------*/
4917
   PROCEDURE destroy_package (
4918
      pvid               IN       NUMBER,
4919
      overridewarnings   IN       CHAR DEFAULT 'N',
4920
      problemstring      OUT      VARCHAR2
4921
   )
4922
   IS
4923
      LOCKED     CHAR;
4924
      pkgid      NUMBER;
4925
      ROWCOUNT   NUMBER;
4926
   BEGIN
4927
      /*
4928
      || This will destroy all package details from database.
4929
      || It will only be used to remove unwanted work in progress packages,
4930
      || or mestaken versions
4931
      */
4932
 
4933
      /*--------------- Business Rules Here -------------------*/
4934
      problemstring := NULL;
4935
 
4936
      IF overridewarnings = 'N'
4937
      THEN
4938
         -- Package must not be official
4939
         SELECT pv.dlocked
4940
           INTO LOCKED
4941
           FROM package_versions pv
4942
          WHERE pv.pv_id = pvid;
4943
 
4944
         IF LOCKED = 'Y'
4945
         THEN
4946
            problemstring :=
4947
                  problemstring
4948
               || '- Package is locked and released.'
4949
               || UTL_TCP.crlf;
4950
         END IF;
4951
 
4952
         -- Cannot remove if used in BOMs
4953
         SELECT COUNT (osc.prod_id)
4954
           INTO ROWCOUNT
4955
           FROM deployment_manager.os_contents osc
4956
          WHERE osc.prod_id = pvid;
4957
 
4958
         IF ROWCOUNT > 0
4959
         THEN
4960
            problemstring :=
4961
                  problemstring
4962
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
4963
               || UTL_TCP.crlf;
4964
         END IF;
4965
 
4966
         -- Cannot remove if Referenced as build dependency
4967
         SELECT COUNT (dep.pv_id)
4968
           INTO ROWCOUNT
4969
           FROM package_dependencies dep
4970
          WHERE dep.dpv_id = pvid;
4971
 
4972
         IF ROWCOUNT > 0
4973
         THEN
4974
            problemstring :=
4975
                  problemstring
4976
               || '- Package is referenced by other package as build dependency.'
4977
               || UTL_TCP.crlf;
4978
         END IF;
4979
 
4980
         -- Cannot remove if Referenced as runtime dependency
4981
         SELECT COUNT (rd.pv_id)
4982
           INTO ROWCOUNT
4983
           FROM runtime_dependencies rd
4984
          WHERE rd.rtd_id = pvid;
4985
 
4986
         IF ROWCOUNT > 0
4987
         THEN
4988
            problemstring :=
4989
                  problemstring
4990
               || '- Package is referenced by other package as runtime dependency.'
4991
               || UTL_TCP.crlf;
4992
         END IF;
4993
 
4994
         -- Cannot remove if Referenced as patch
4995
         SELECT COUNT (pp.pv_id)
4996
           INTO ROWCOUNT
4997
           FROM package_patches pp
4998
          WHERE pp.patch_id = pvid;
4999
 
5000
         IF ROWCOUNT > 0
5001
         THEN
5002
            problemstring :=
5003
                  problemstring
5004
               || '- Package is used as patch by other package.'
5005
               || UTL_TCP.crlf;
5006
         END IF;
5007
      END IF;
5008
 
5009
/*-------------------------------------------------------*/
5010
      IF (problemstring IS NULL)
5011
      THEN
5012
         --- Remove From Work in Progress
5013
         DELETE FROM work_in_progress wip
5014
               WHERE wip.pv_id = pvid;
5015
 
5016
         --- Remove From Pending
5017
         DELETE FROM planned pl
5018
               WHERE pl.pv_id = pvid;
5019
 
5020
         --- Remove From Released area
5021
         DELETE FROM release_content rc
5022
               WHERE rc.pv_id = pvid;
5023
 
5024
         ---Remove From Package Processes
5025
         DELETE FROM package_processes pp
5026
               WHERE pp.pv_id = pvid;
5027
 
5028
         --- Remove Dependencies
5029
         DELETE FROM package_dependencies dep
5030
               WHERE dep.pv_id = pvid;
5031
 
5032
         DELETE FROM package_dependencies dep
5033
               WHERE dep.dpv_id = pvid;
5034
 
5035
         --- Remove Runtime dependencies
5036
         DELETE FROM runtime_dependencies rtd
5037
               WHERE rtd.pv_id = pvid;
5038
 
5039
         DELETE FROM runtime_dependencies rtd
5040
               WHERE rtd.rtd_id = pvid;
5041
 
5042
         --- Remove components
5043
         DELETE FROM product_components pc
5044
               WHERE pc.pv_id = pvid;
5045
 
5046
         DELETE FROM release_components rc
5047
               WHERE rc.pv_id = pvid;
5048
 
5049
         --- Remove From Notification History
5050
         DELETE FROM notification_history nh
5051
               WHERE nh.pv_id = pvid;
5052
 
5053
         --- Remove From Ignore Warnings
5054
         DELETE FROM ignore_warnings iw
5055
               WHERE iw.pv_id = pvid;
5056
 
5057
         --- Remove From Additional Notes
5058
         DELETE FROM additional_notes an
5059
               WHERE an.pv_id = pvid;
5060
 
5061
         --- Remove From CQ Issues
5062
         DELETE FROM cq_issues cq
5063
               WHERE cq.pv_id = pvid;
5064
 
5065
         --- Remove from Package Patches
5066
         DELETE FROM package_patches pp
5067
               WHERE pp.pv_id = pvid;
5068
 
5069
         DELETE FROM package_patches pp
5070
               WHERE pp.patch_id = pvid;
5071
 
5072
         --- Remove From Package Documents
5073
         DELETE FROM package_documents pd
5074
               WHERE pd.pv_id = pvid;
5075
 
5076
         --- Remove from Code Review
5077
         DELETE FROM code_reviews cr
5078
               WHERE cr.pv_id = pvid;
5079
 
3959 dpurdie 5080
         --- Remove from Code Review URL
5081
         DELETE FROM code_review_url cru
5082
               WHERE cru.pv_id = pvid;
5083
 
1373 dpurdie 5084
         --- Remove from Unit Tests
5085
         DELETE FROM unit_tests ut
5086
               WHERE ut.pv_id = pvid;
5087
 
5088
         --- Remove from Package BuildEnv
5089
         DELETE FROM package_build_env pbe
5090
               WHERE pbe.pv_id = pvid;
5091
 
3959 dpurdie 5092
         --- Remove from Package Build Info
5093
         DELETE FROM package_build_info pbi
5094
               WHERE pbi.pv_id = pvid;
5095
 
1373 dpurdie 5096
         --- Remove from Build Order
5097
         DELETE FROM build_order bo
5098
               WHERE bo.pv_id = pvid;
5099
 
3959 dpurdie 5100
         --- Remove from Licencing
5101
         PK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );
5102
 
1373 dpurdie 5103
         --- Remove from Note Manager
5104
         DELETE FROM note_manager nm
5105
               WHERE nm.nid = pvid;
5106
 
5107
         --- Remove from Action log
5108
         DELETE FROM action_log al
5109
               WHERE al.pv_id = pvid;
3959 dpurdie 5110
 
5111
         --- Remove from Do Not Ripple
5112
         DELETE FROM DO_NOT_RIPPLE dnr
5113
               WHERE dnr.PV_ID = pvid;
5114
 
5115
         --- Remove from Advisory Ripple
5116
         DELETE FROM ADVISORY_RIPPLE ar
5117
               WHERE ar.PV_ID = pvid;
5118
 
5119
         --- Remove from Jira Issues
5120
         DELETE FROM JIRA_ISSUES jira
5121
               WHERE jira.PV_ID = pvid;
5122
 
5123
         --- Remove from Package Metrics
5124
         DELETE FROM package_metrics pm
5125
              WHERE pm.pv_id = pvid;
5126
 
5127
         -- Delete from Pegged Versions
5128
         DELETE FROM pegged_versions pegv
5129
              WHERE pegv.pv_id = pvid;
5130
 
1373 dpurdie 5131
         --- Finally Remove From Package Versions
5132
         --- Get Package name
5133
         SELECT pv.pkg_id
5134
           INTO pkgid
5135
           FROM package_versions pv
5136
          WHERE pv.pv_id = pvid;
5137
 
5138
         DELETE FROM package_versions pv
5139
               WHERE pv.pv_id = pvid;
5140
 
5141
         --- Remove package name if not used any more
5142
         SELECT COUNT (pv.pv_id)
5143
           INTO ROWCOUNT
5144
           FROM package_versions pv
5145
          WHERE pv.pkg_id = pkgid;
5146
 
5147
         IF ROWCOUNT < 1
5148
         THEN
5149
            DELETE FROM PACKAGES pkg
5150
                  WHERE pkg.pkg_id = pkgid;
5151
         END IF;
5152
      END IF;
5153
   END;
5154
 
5155
/*-------------------------------------------------------------------------------------------------------*/
5156
   PROCEDURE new_patch (
5157
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
5158
      nparentpvid        IN       NUMBER,
5159
      spatchidlist       IN       VARCHAR2,
5160
      nuserid            IN       NUMBER,
5161
      returnpatchid      OUT      NUMBER
5162
   )
5163
   IS
5164
      patchpv_id           NUMBER;
5165
      parpkg_id            NUMBER;
5166
      lastinstallorder     NUMBER;
5167
      ispatchdlocked       package_versions.dlocked%TYPE;
5168
      ssv_mm               package_versions.v_mm%TYPE;
5169
      ssv_nmm              package_versions.v_nmm%TYPE;
5170
      ssv_ext              package_versions.v_ext%TYPE;
3959 dpurdie 5171
      opatchdepcollector   relmgr_number_tab_t  := relmgr_number_tab_t ();
1373 dpurdie 5172
 
5173
      CURSOR parent_cur
5174
      IS
5175
         SELECT pv.*, pkg.pkg_name
5176
           FROM package_versions pv, PACKAGES pkg
5177
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
5178
 
3959 dpurdie 5179
      parent_rec parent_cur%ROWTYPE;
1373 dpurdie 5180
 
5181
      CURSOR patch_cur
5182
      IS
5183
         SELECT pv.*, pg.pkg_name
5184
           FROM package_versions pv, PACKAGES pg
5185
          WHERE pv.pkg_id = parpkg_id
5186
            AND pv.pkg_version = snewpatchversion
5187
            AND pv.pkg_id = pg.pkg_id;
5188
 
3959 dpurdie 5189
      patch_rec  patch_cur%ROWTYPE;
1373 dpurdie 5190
 
5191
      CURSOR releases_cur
5192
      IS
5193
         SELECT rc.pv_id
5194
           FROM release_content rc
5195
          WHERE rc.pv_id = patch_rec.pv_id;
5196
 
3959 dpurdie 5197
      releases_rec releases_cur%ROWTYPE;
1373 dpurdie 5198
   BEGIN
5199
      -- Get Last Install Order
5200
      SELECT COUNT (*)
5201
        INTO lastinstallorder
5202
        FROM package_patches pp
5203
       WHERE pp.pv_id = nparentpvid;
5204
 
5205
      -- Get parent details
5206
      OPEN parent_cur;
5207
 
5208
      FETCH parent_cur
5209
       INTO parent_rec;
5210
 
5211
      parpkg_id := parent_rec.pkg_id;
5212
 
5213
      -- Find if patch exists in database
5214
      OPEN patch_cur;
5215
 
5216
      FETCH patch_cur
5217
       INTO patch_rec;
5218
 
5219
      -- Parent must be official
5220
      IF parent_rec.dlocked = 'Y'
5221
      THEN
5222
         IF patch_cur%NOTFOUND
5223
         THEN
5224
            ispatchdlocked := 'N';
5225
 
5226
            -- Create new patch version --
5227
            SELECT seq_pv_id.NEXTVAL
5228
              INTO patchpv_id
5229
              FROM DUAL;
5230
 
5231
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
5232
 
5233
            INSERT INTO package_versions
5234
                        (pv_id, pkg_id, pkg_version,
5235
                         dlocked, created_stamp, creator_id,
5236
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
5237
                         src_path,
5238
                         pv_description,
5239
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
3959 dpurdie 5240
                         is_autobuildable, ripple_field
1373 dpurdie 5241
                        )
5242
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
5243
                         ispatchdlocked, ora_sysdate, nuserid,
5244
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
5245
                         parent_rec.src_path,
5246
                            'This is a patch to '
5247
                         || parent_rec.pkg_name
5248
                         || ' '
5249
                         || parent_rec.pkg_version,
3959 dpurdie 5250
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
1373 dpurdie 5251
                        );
5252
 
5253
            INSERT INTO package_patches
5254
                        (pv_id, patch_id, install_order)
3959 dpurdie 5255
                (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
5256
                        lastinstallorder + 1 AS install_order
5257
                   FROM package_versions pv
5258
                  WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
1373 dpurdie 5259
 
5260
            /* LOG ACTION */
5261
            log_action (patchpv_id,
5262
                        'new_version',
5263
                        nuserid,
5264
                        'Patch version created: ' || snewpatchversion
5265
                       );
5266
            log_action (nparentpvid,
5267
                        'patch_add',
5268
                        nuserid,
5269
                        'New patch created and attached: ' || snewpatchversion
5270
                       );
5271
         ELSE
5272
            patchpv_id := patch_rec.pv_id;
5273
            ispatchdlocked := patch_rec.dlocked;
5274
 
5275
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
5276
            OPEN releases_cur;
5277
 
5278
            FETCH releases_cur
5279
             INTO releases_rec;
5280
 
5281
            IF releases_cur%NOTFOUND
5282
            THEN
5283
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
5284
               UPDATE package_versions
5285
                  SET is_patch = 'Y'
5286
                WHERE pv_id = patchpv_id;
5287
 
5288
               INSERT INTO package_patches
5289
                           (pv_id, patch_id, install_order)
3959 dpurdie 5290
                   (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
5291
                           lastinstallorder + 1 AS install_order
5292
                      FROM package_versions pv
5293
                     WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
1373 dpurdie 5294
            END IF;
5295
 
5296
            CLOSE releases_cur;
5297
 
5298
            /* LOG ACTION */
5299
            log_action (nparentpvid,
5300
                        'patch_add',
5301
                        nuserid,
5302
                           'Patch version was found and attached: '
5303
                        || snewpatchversion
5304
                       );
5305
         END IF;
5306
      END IF;
5307
 
5308
      /* Create Patch Dependencies */
5309
      opatchdepcollector := in_list_number (spatchidlist);
5310
 
5311
      -- Make sure patch is unofficial before altering its dependencies
5312
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
5313
      THEN
5314
         -- Delete Existing Dependencies
5315
         DELETE FROM package_dependencies dep
5316
               WHERE dep.pv_id = patchpv_id;
5317
 
5318
         -- Insert new dependencies
5319
         INSERT INTO package_dependencies
5320
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
3959 dpurdie 5321
              SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
5322
                     parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
5323
                     'L' AS build_type
5324
                FROM package_versions pv
5325
               WHERE pv.pv_id IN (
1373 dpurdie 5326
                      SELECT *
5327
                        FROM TABLE
5328
                                (CAST
5329
                                    (opatchdepcollector AS relmgr_number_tab_t)
5330
                                ));
5331
      END IF;
5332
 
5333
      -- Return patch_id
5334
      returnpatchid := patchpv_id;
5335
 
5336
      CLOSE parent_cur;
5337
 
5338
      CLOSE patch_cur;
5339
   EXCEPTION
5340
      WHEN DUP_VAL_ON_INDEX
5341
      THEN
5342
         raise_application_error (-20000,
5343
                                     'Patch version '
5344
                                  || snewpatchversion
5345
                                  || ' already exist.'
5346
                                 );
5347
   END;
5348
 
5349
/*-------------------------------------------------------------------------------------------------------*/
5350
   PROCEDURE obsolete_patch (
5351
      patchid            IN   NUMBER,
5352
      isobsolete         IN   CHAR,
5353
      obsoletecomments   IN   VARCHAR2,
5354
      userid             IN   NUMBER
5355
   )
5356
   IS
5357
   BEGIN
5358
      -- Update patch
5359
      UPDATE package_versions pv
5360
         SET pv.is_obsolete = isobsolete,
5361
             pv.obsolete_comments = obsoletecomments
5362
       WHERE pv.pv_id = patchid;
5363
 
5364
      /*
5365
      -- Update patch children
5366
      UPDATE PACKAGE_VERSIONS pv SET
5367
      pv.IS_OBSOLETE = IsObsolete,
5368
      pv.OBSOLETE_COMMENTS = ObsoleteComments
5369
      WHERE pv.PV_ID IN (
5370
                     SELECT DISTINCT dep.DPV_ID
5371
                       FROM PACKAGE_DEPENDENCIES dep
5372
                      WHERE dep.PV_ID = PatchId
5373
                     );
5374
 
5375
 
5376
      -- Update patch parent
5377
      UPDATE PACKAGE_VERSIONS pv SET
5378
      pv.IS_OBSOLETE = IsObsolete,
5379
      pv.OBSOLETE_COMMENTS = ObsoleteComments
5380
      WHERE pv.PV_ID IN (
5381
                     SELECT DISTINCT dep.PV_ID
5382
                       FROM PACKAGE_DEPENDENCIES dep
5383
                      WHERE dep.DPV_ID = PatchId
5384
                     );
5385
 
3959 dpurdie 5386
      */
1373 dpurdie 5387
 
5388
      /* LOG ACTION */
5389
      IF isobsolete IS NOT NULL
5390
      THEN
5391
         log_action (patchid,
5392
                     'patch_obsolete',
5393
                     userid,
5394
                     'Obsolete patch. ' || obsoletecomments
5395
                    );
5396
      ELSE
5397
         log_action (patchid,
5398
                     'patch_obsolete',
5399
                     userid,
5400
                     'Undo patch obsolete.'
5401
                    );
5402
      END IF;
5403
   END;
5404
 
5405
/*-------------------------------------------------------------------------------------------------------*/
5406
   PROCEDURE obsolete_patches (
5407
      spatchidlist       IN   VARCHAR2,
5408
      isobsolete         IN   CHAR,
5409
      obsoletecomments   IN   VARCHAR2,
5410
      userid             IN   NUMBER
5411
   )
5412
   IS
5413
   BEGIN
5414
      /*--------------- Business Rules Here -------------------*/
5415
      IF spatchidlist IS NULL
5416
      THEN
5417
         raise_application_error (-20000,
5418
                                  'Please select one or more Patches.'
5419
                                 );
5420
      END IF;
5421
 
5422
/*-------------------------------------------------------*/
5423
 
5424
      -- Update patch
5425
      UPDATE package_versions pv
5426
         SET pv.is_obsolete = isobsolete,
5427
             pv.obsolete_comments = obsoletecomments
5428
       WHERE pv.pv_id IN (
5429
                SELECT *
5430
                  FROM THE
5431
                          (SELECT CAST
5432
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
5433
                                     )
5434
                             FROM DUAL
5435
                          ));
3959 dpurdie 5436
      /*
5437
      -- Update patch children
5438
      UPDATE PACKAGE_VERSIONS pv SET
5439
      pv.IS_OBSOLETE = IsObsolete,
5440
      pv.OBSOLETE_COMMENTS = ObsoleteComments
5441
      WHERE pv.PV_ID IN (
5442
                     SELECT DISTINCT dep.DPV_ID
5443
                       FROM PACKAGE_DEPENDENCIES dep
5444
                      WHERE dep.PV_ID = PatchId
5445
                     );
1373 dpurdie 5446
 
5447
 
3959 dpurdie 5448
      -- Update patch parent
5449
      UPDATE PACKAGE_VERSIONS pv SET
5450
      pv.IS_OBSOLETE = IsObsolete,
5451
      pv.OBSOLETE_COMMENTS = ObsoleteComments
5452
      WHERE pv.PV_ID IN (
5453
                     SELECT DISTINCT dep.PV_ID
5454
                       FROM PACKAGE_DEPENDENCIES dep
5455
                      WHERE dep.DPV_ID = PatchId
5456
                     );
1373 dpurdie 5457
 
5458
      */
5459
 
3959 dpurdie 5460
      /* LOG ACTION
5461
      IF IsObsolete IS NOT NULL THEN
1373 dpurdie 5462
         Log_Action ( PatchId, 'patch_obsolete', UserId,
3959 dpurdie 5463
                     'Obsolete patch. '|| ObsoleteComments );
5464
      ELSE
5465
         Log_Action ( PatchId, 'patch_obsolete', UserId,
5466
                     'Undo patch obsolete.' );
5467
      END IF;  */
1373 dpurdie 5468
   END;
5469
 
5470
/*-------------------------------------------------------------------------------------------------------*/
5471
   PROCEDURE add_process (
5472
      nprocid         IN   processes.proc_id%TYPE,
5473
      shealthtag      IN   processes.proc_name%TYPE,
5474
      sprocdesc       IN   processes.proc_description%TYPE,
5475
      scmdinterface   IN   processes.run_as%TYPE,
5476
      spkgowner       IN   processes.pkg_owner%TYPE,
5477
      sisinterface    IN   processes.is_interface%TYPE,
5478
      npvid           IN   package_processes.pv_id%TYPE,
5479
      nuserid         IN   NUMBER
5480
   )
5481
   IS
5482
      pkgname   VARCHAR2 (100);
3959 dpurdie 5483
 
1373 dpurdie 5484
   BEGIN
5485
      INSERT INTO processes
5486
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
5487
                   is_interface
5488
                  )
5489
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
5490
                   sisinterface
5491
                  );
5492
 
5493
      pk_package.add_package_process (nprocid, npvid, nuserid);
5494
   END;
5495
 
5496
/*-------------------------------------------------------------------------------------------------------*/
5497
   PROCEDURE add_package_process (
5498
      nprocidlist   IN   VARCHAR2,
5499
      npvid         IN   package_processes.pv_id%TYPE,
5500
      nuserid       IN   NUMBER
5501
   )
5502
   IS
5503
      processname   VARCHAR2 (4000);
5504
 
5505
      CURSOR proc_cur
5506
      IS
5507
         SELECT prc.proc_id
5508
           FROM processes prc
5509
          WHERE prc.proc_id IN (
5510
                   SELECT *
5511
                     FROM THE
5512
                             (SELECT CAST
5513
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
5514
                                        )
5515
                                FROM DUAL
5516
                             ));
5517
 
3959 dpurdie 5518
      proc_rec  proc_cur%ROWTYPE;
1373 dpurdie 5519
   BEGIN
5520
      OPEN proc_cur;
5521
 
5522
      FETCH proc_cur
5523
       INTO proc_rec;
5524
 
5525
      WHILE proc_cur%FOUND
5526
      LOOP
3959 dpurdie 5527
         INSERT INTO package_processes (proc_id, pv_id)
5528
              VALUES (proc_rec.proc_id, npvid);
1373 dpurdie 5529
 
5530
         SELECT prc.proc_name
5531
           INTO processname
5532
           FROM processes prc
5533
          WHERE prc.proc_id = proc_rec.proc_id;
5534
 
5535
         -- Log Action --
5536
         log_action (npvid,
5537
                     'process_add',
5538
                     nuserid,
5539
                     'Added process with health tag ' || processname
5540
                    );
5541
 
5542
         FETCH proc_cur
5543
          INTO proc_rec;
5544
      END LOOP;
3959 dpurdie 5545
 
5546
      CLOSE proc_cur;
1373 dpurdie 5547
   END;
5548
 
5549
/*-------------------------------------------------------------------------------------------------------*/
5550
   PROCEDURE remove_process (
5551
      nprocid   IN   package_processes.proc_id%TYPE,
5552
      npvid     IN   package_processes.pv_id%TYPE,
5553
      nuserid   IN   NUMBER
5554
   )
5555
   IS
5556
      processname   VARCHAR2 (4000);
5557
   BEGIN
5558
      SELECT prc.proc_name
5559
        INTO processname
5560
        FROM processes prc
5561
       WHERE prc.proc_id = nprocid;
5562
 
5563
      DELETE FROM package_processes
5564
            WHERE proc_id = nprocid AND pv_id = npvid;
5565
 
5566
      -- Log Action --
5567
      log_action (npvid,
5568
                  'process_remove',
5569
                  nuserid,
5570
                  'Removed process with health tag ' || processname
5571
                 );
5572
   END;
5573
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 5574
   /*
5575
   ** Author: Rupesh Solanki
5576
   ** Purpose: To move package versions from one release to another
5577
   ** Release: 4th September 2006
5578
   */
5579
   PROCEDURE move_package (
5580
      npvid        IN package_versions.pv_id%TYPE,
5581
      nrtagid      IN release_tags.rtag_id%TYPE,
5582
      nnewrtagid   IN release_tags.rtag_id%TYPE,
5583
      nuserid      IN NUMBER
5584
   )
5585
   IS
1373 dpurdie 5586
 
3959 dpurdie 5587
      oldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);
5588
 
5589
   BEGIN
5590
      SELECT rtag_name into oldrtag_name
5591
      FROM RELEASE_TAGS
5592
      WHERE rtag_id = nrtagid;
5593
 
5594
      SELECT rtag_name into newrtag_name
5595
      FROM RELEASE_TAGS
5596
      WHERE rtag_id = nnewrtagid;
5597
 
5598
      /* Table Work In Progress*/
5599
      UPDATE WORK_IN_PROGRESS
5600
      SET RTAG_ID = nnewrtagid
5601
      WHERE RTAG_ID = nrtagid
5602
      AND PV_ID = npvid;
5603
 
5604
      /* Table PLANNED*/
5605
      UPDATE PLANNED
5606
      SET RTAG_ID = nnewrtagid
5607
      WHERE RTAG_ID = nrtagid
5608
      AND PV_ID = npvid;
5609
 
5610
      /* Table PEGGED_VERSIONS */
5611
      DELETE FROM PEGGED_VERSIONS pegv
5612
      WHERE pegv.RTAG_ID = nrtagid
5613
      AND pegv.PV_ID = npvid;
5614
 
5615
      /* Table ADVISORY_RIPPLE*/
5616
      DELETE FROM ADVISORY_RIPPLE
5617
      WHERE RTAG_ID = nrtagid
5618
      AND PV_ID = npvid;
5619
 
5620
 
1373 dpurdie 5621
      -- Log Action --
5622
      log_action (npvid,
5623
                  'move_package_version',
5624
                  nuserid,
5625
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
3959 dpurdie 5626
                 );
5627
   END;
5628
 
1373 dpurdie 5629
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 5630
   /*
5631
   ** Author: Rupesh Solanki
5632
   ** Purpose: To modify the product state from integration to test to deployment
5633
   ** Release: 25th January 2006
5634
   */
5635
   PROCEDURE modify_product_state (
5636
      npvid    IN package_versions.pv_id%TYPE,
5637
      nrtagid  IN release_tags.rtag_id%TYPE,
5638
      nstateid IN product_states.state_id%TYPE,
5639
      nuserid  IN NUMBER
1373 dpurdie 5640
   ) IS
3959 dpurdie 5641
 
5642
      sStateName VARCHAR2(4000);
5643
      sRtagName VARCHAR2(4000);
5644
 
5645
   BEGIN
5646
 
5647
      UPDATE RELEASE_CONTENT
5648
      SET PRODUCT_STATE = nstateid
5649
      WHERE PV_ID = npvid
5650
      AND RTAG_ID = nrtagid;
5651
 
5652
 
5653
      SELECT STATE INTO sStateName
5654
      FROM PRODUCT_STATES
5655
      WHERE STATE_ID = nstateid;
5656
 
5657
      SELECT RTAG_NAME into sRtagName
5658
      FROM RELEASE_TAGS
5659
      WHERE RTAG_ID = nrtagid;
5660
 
5661
 
5662
      -- Log Action --
5663
      log_action (npvid,
5664
                  'modify_product_state',
5665
                     nuserid,
5666
                     sStateName || ' in '|| sRtagName
5667
                  );
5668
   END;
5669
/*-------------------------------------------------------------------------------------------------------*/
5670
   /*
5671
   ** Author: Jeremy Tweddle
5672
   ** Date: 24/Aug/2007
5673
   */
5674
   PROCEDURE add_code_review_url (
5675
      npvid           IN    NUMBER,
5676
      nprojid         IN    NUMBER,
5677
      surl            IN    VARCHAR2,
5678
      sreason         IN    VARCHAR2,
5679
      ddateofreview   IN    DATE
5680
   ) IS
5681
 
5682
      ncrid NUMBER;
5683
 
5684
   BEGIN
5685
 
5686
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
5687
 
5688
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
5689
                                    last_modified )
5690
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
5691
 
5692
   END;
5693
/*-------------------------------------------------------------------------------------------------------*/
5694
   /*
5695
   ** Author: Jeremy Tweddle
5696
   ** Date: 22/Aug/2007
5697
   */
5698
   PROCEDURE update_code_review_url (
5699
      ncrid           IN    NUMBER,
5700
      nprojid         IN    NUMBER,
5701
      surl            IN    VARCHAR2,
5702
      sreason         IN    VARCHAR2
5703
   ) IS
5704
 
5705
   BEGIN
5706
 
5707
      UPDATE code_review_url
5708
      SET url = surl,
5709
          proj_id = nprojid,
5710
          reason = sreason,
5711
          last_modified = ora_sysdate
5712
      WHERE cr_id = ncrid;
5713
 
5714
   END;
5715
/*-------------------------------------------------------------------------------------------------------*/
5716
   /*
5717
   ** Author: Jeremy Tweddle
5718
   ** Date: 22/Aug/2007
5719
   */
5720
   PROCEDURE remove_code_review_url (
5721
      ncrid  IN    NUMBER
5722
   ) IS
5723
 
5724
   BEGIN
5725
      DELETE FROM code_review_url
5726
      WHERE cr_id = ncrid;
5727
   END;
5728
/*-------------------------------------------------------------------------------------------------------*/
5729
END pk_package;
1374 dpurdie 5730
/
5731
--------------------------------------------------------
3959 dpurdie 5732
--  DDL for Package Body PK_PLANNED
1374 dpurdie 5733
--------------------------------------------------------
1373 dpurdie 5734
 
3959 dpurdie 5735
  CREATE OR REPLACE PACKAGE BODY "PK_PLANNED" IS
5736
 
1373 dpurdie 5737
/*
5738
------------------------------
3959 dpurdie 5739
||  Last Modified:  G.Huddy
5740
||  Modified Date:  05/Aug/2008
5741
||  Body Version:   1.2
1373 dpurdie 5742
------------------------------
5743
*/
5744
 
5745
 
5746
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 5747
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 5748
 
3959 dpurdie 5749
    oldPvId NUMBER;
5750
    ReleaseLocation VARCHAR2(4000);
5751
    IsPatch CHAR(1) := NULL;
5752
    sLocation VARCHAR2(4000) := NULL;
5753
    nRtagIdLocation NUMBER;
1373 dpurdie 5754
 
5755
 
5756
 
3959 dpurdie 5757
BEGIN
5758
    /*--------------- Business Rules Here -------------------*/
5759
    /*-------------------------------------------------------*/
1373 dpurdie 5760
 
3959 dpurdie 5761
    BEGIN
5762
        -- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
5763
        SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME, rt.RTAG_ID  INTO sLocation, nRtagIdLocation
5764
          FROM PLANNED pl,
5765
               RELEASE_TAGS rt,
5766
               PROJECTS proj
5767
         WHERE pl.PV_ID = newPvId
5768
           AND pl.RTAG_ID = rt.RTAG_ID
5769
           AND rt.OFFICIAL != 'Y'
5770
           AND rt.PROJ_ID = proj.PROJ_ID;
1373 dpurdie 5771
 
3959 dpurdie 5772
        EXCEPTION
5773
            WHEN NO_DATA_FOUND THEN
5774
                sLocation := NULL;
5775
    END;
1373 dpurdie 5776
 
3959 dpurdie 5777
 
5778
 
5779
    IF (sLocation IS NULL) OR (nRtagIdLocation = RtagId) THEN
5780
 
5781
        -- Add to "Pending" area
5782
        INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
5783
        VALUES( RtagId, newPvId, ViewId, 'R' );
5784
 
5785
 
5786
        /* LOG ACTION */
5787
        SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
5788
          FROM PROJECTS proj,
5789
               RELEASE_TAGS rt
5790
         WHERE rt.PROJ_ID = proj.PROJ_ID
5791
           AND rt.RTAG_ID = RtagId;
5792
 
5793
        Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
5794
 
5795
    ELSE
5796
 
5797
        RAISE_APPLICATION_ERROR (-20000, 'This version is already in Pending Area at '|| sLocation ||'.' );
5798
 
5799
    END IF;
5800
 
5801
END;
1373 dpurdie 5802
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 5803
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 5804
 
3959 dpurdie 5805
    ReleaseLocation VARCHAR2(4000);
1373 dpurdie 5806
 
3959 dpurdie 5807
BEGIN
1373 dpurdie 5808
 
3959 dpurdie 5809
    /*--------------- Business Rules Here -------------------*/
5810
    /*-------------------------------------------------------*/
1373 dpurdie 5811
 
5812
 
3959 dpurdie 5813
    -- Get release location for logging pusposes
5814
    SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
5815
      FROM PROJECTS proj,
5816
           RELEASE_TAGS rt
5817
     WHERE rt.PROJ_ID = proj.PROJ_ID
5818
       AND rt.RTAG_ID = RtagId;
1373 dpurdie 5819
 
5820
 
3959 dpurdie 5821
    -- Delete from Work In Progress
5822
    DELETE
5823
      FROM PLANNED pl
5824
     WHERE pl.RTAG_ID = RtagId
5825
       AND pl.PV_ID = PvId;
1373 dpurdie 5826
 
3959 dpurdie 5827
    Log_Action ( PvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
5828
 
5829
 
5830
 
5831
 
5832
END;
1373 dpurdie 5833
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 5834
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
1373 dpurdie 5835
 
3959 dpurdie 5836
    ReturnValue NUMBER;
1373 dpurdie 5837
 
3959 dpurdie 5838
BEGIN
5839
    SELECT pl.VIEW_ID INTO ReturnValue
5840
      FROM PLANNED pl
5841
     WHERE pl.RTAG_ID = RtagId
5842
       AND pl.PV_ID = PvId;
5843
 
5844
    RETURN ReturnValue;
5845
END;
5846
/*-------------------------------------------------------------------------------------------------------*/
5847
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
5848
 
5849
    IsBaseView CHAR(1);
5850
 
5851
BEGIN
5852
 
5853
    -- Check if the view is BASE VIEW
5854
    SELECT vi.BASE_VIEW INTO IsBaseView
5855
      FROM VIEWS vi
5856
     WHERE vi.VIEW_ID = ViewId;
5857
 
5858
 
5859
    IF (IsBaseView = 'Y') THEN
5860
        -- Get Base view content
5861
        OPEN RecordSet FOR
5862
        SELECT 0 AS PKG_STATE,
5863
               NULL AS DEPRECATED_STATE,
5864
               pv.pv_id,
5865
               pkg.pkg_name,
5866
               pv.pkg_version,
5867
               pv.dlocked,
5868
               pv.pv_description,
5869
               pv.BUILD_TYPE,
5870
               rel.operation
5871
          FROM PLANNED rel,
5872
               packages pkg,
5873
               package_versions pv
5874
         WHERE pv.pkg_id = pkg.pkg_id
5875
           AND rel.pv_id = pv.pv_id
5876
           AND rel.VIEW_ID = ViewId
5877
           AND rel.RTAG_ID = RtagId
5878
         ORDER BY UPPER(pkg.PKG_NAME);
5879
 
5880
    ELSE
5881
 
5882
        -- Get non base view content
5883
        OPEN RecordSet FOR
5884
        SELECT 0 AS PKG_STATE,
5885
               NULL AS DEPRECATED_STATE,
5886
               pv.pv_id,
5887
               pkg.pkg_name,
5888
               pv.pkg_version,
5889
               pv.dlocked,
5890
               pv.pv_description,
5891
               pv.BUILD_TYPE,
5892
               rel.operation
5893
          FROM PLANNED rel,
5894
               packages pkg,
5895
               package_versions pv,
5896
               VIEW_DEF vd
5897
         WHERE pv.pkg_id = pkg.pkg_id
5898
           AND rel.pv_id = pv.pv_id
5899
           AND rel.RTAG_ID = RtagId
5900
           AND vd.VIEW_ID = ViewId
5901
           AND vd.PKG_ID = pv.PKG_ID
5902
         ORDER BY UPPER(pkg.PKG_NAME);
5903
 
5904
    END IF;
5905
 
5906
 
5907
END;
5908
/*-------------------------------------------------------------------------------------------------------*/
5909
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
5910
 
5911
BEGIN
5912
 
5913
    UPDATE PLANNED pl SET
5914
    pl.VIEW_ID = NewViewId
5915
    WHERE pl.PV_ID = PvId
5916
      AND pl.RTAG_ID = RtagId;
5917
 
5918
END;
5919
/*-------------------------------------------------------------------------------------------------------*/
5920
-- DEVI-45275 This new function supports the ability to insert into the planned table, and existing
5921
-- version of a package as part of a release-to-release merge operation carried out within release manager.
5922
-- DEVI-49594 This function has subsequently been changed to allow a merge operation to cancel its
5923
-- opposite operation, if the opposite already exists in the planned table. This supports user activity
5924
-- via the Release Manager merge manager display
5925
 
5926
PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR ) IS
5927
 
5928
    ReleaseLocation VARCHAR2(4000);
5929
 
5930
        entryExists NUMBER;
5931
        existingOperation CHAR;
5932
BEGIN
5933
    /*--------------- Business Rules Here -------------------*/
5934
    /*-------------------------------------------------------*/
5935
 
5936
      -- Determine if the specified PV_ID already exists in the planned table....
5937
      SELECT COUNT (pl.pv_id) INTO entryExists
5938
      FROM PLANNED pl
5939
      WHERE pl.pv_id = newPvId
5940
      AND pl.rtag_id = RtagId
5941
      AND pl.view_id = ViewId;
5942
 
5943
      -- If the specified PV_ID already exists in the planned table....
5944
      IF entryExists = 1 THEN
5945
 
5946
         -- Get the operation for the existing entry
5947
         SELECT pl.operation INTO existingOperation
5948
         FROM PLANNED pl
5949
         WHERE pl.pv_id = newPvId
5950
         AND pl.rtag_id = RtagId
5951
         AND pl.view_id = ViewId;
5952
 
5953
         -- Is the specified merge operation the opposite of the existing entry?
5954
         -- If it is not, then there is nothing to do, otherwise...
5955
         -- NOTE: A = Add, S = Subtract
5956
         IF (mergeOperation = 'S' AND existingOperation = 'A')
5957
            OR (mergeOperation = 'A' AND existingOperation = 'S') THEN
5958
 
5959
           -- It is the opposite, so effectively it cancels the existing entry
5960
           -- Remove the entry from the planned table
5961
           DELETE
5962
            FROM PLANNED pl
5963
           WHERE pl.pv_id = newPvId
5964
             AND pl.rtag_id = RtagId
5965
             AND pl.view_id = ViewId;
5966
 
5967
           -- Log action
5968
           SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
5969
             FROM PROJECTS proj,
5970
                  RELEASE_TAGS rt
5971
            WHERE rt.PROJ_ID = proj.PROJ_ID
5972
              AND rt.RTAG_ID = RtagId;
5973
 
5974
           Log_Action ( newPvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1373 dpurdie 5975
         END IF;
3959 dpurdie 5976
      ELSE
5977
         -- Add to Planned tabled
5978
         INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
5979
         VALUES( RtagId, newPvId, ViewId, mergeOperation );
1373 dpurdie 5980
 
3959 dpurdie 5981
         -- Log Action
5982
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
5983
          FROM PROJECTS proj,
5984
               RELEASE_TAGS rt
5985
         WHERE rt.PROJ_ID = proj.PROJ_ID
5986
         AND   rt.RTAG_ID = RtagId;
5987
 
5988
         Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1373 dpurdie 5989
      END IF;
5990
 
3959 dpurdie 5991
END;
1373 dpurdie 5992
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 5993
END PK_PLANNED;
5994
/
5995
--------------------------------------------------------
5996
--  DDL for Package Body PK_PROJECT
5997
--------------------------------------------------------
1373 dpurdie 5998
 
3959 dpurdie 5999
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS
1373 dpurdie 6000
 
3959 dpurdie 6001
    /*------------------------------------------------------------------------*/
6002
    PROCEDURE update_base_url (
6003
    nprojid   IN  projects.proj_id%TYPE,
6004
    sbaseurl  IN  VARCHAR2
6005
    ) IS
6006
    BEGIN
1373 dpurdie 6007
 
3959 dpurdie 6008
    UPDATE projects
6009
    SET base_url = sbaseurl
6010
    WHERE proj_id = nprojid;
6011
 
6012
    END update_base_url;
6013
 
6014
/*------------------------------------------------------------------------*/
6015
    PROCEDURE update_project_config (
6016
    nprojid   IN  projects.proj_id%TYPE,
6017
    sbaseurl  IN  VARCHAR2,
6018
    sjirakey  IN  VARCHAR2
6019
    ) IS
6020
    BEGIN
6021
 
6022
    UPDATE projects
6023
    SET base_url = sbaseurl,
6024
        jira_key = sjirakey
6025
    WHERE proj_id = nprojid;
6026
 
6027
    END update_project_config;
6028
    /*------------------------------------------------------------------------*/
6029
 
6030
    END pk_project;
6031
/
6032
--------------------------------------------------------
6033
--  DDL for Package Body PK_RELEASE
6034
--------------------------------------------------------
6035
 
6036
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS
6037
 
1373 dpurdie 6038
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 6039
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
1373 dpurdie 6040
 
3959 dpurdie 6041
RtagId NUMBER;
6042
ParentRtagId NUMBER;
6043
RecCount NUMBER := 0;
6044
VtreeId NUMBER;
1373 dpurdie 6045
 
3959 dpurdie 6046
BEGIN
6047
   /*--------------- Business Rules Here -------------------*/
6048
   -- Check for missing parameters
6049
   IF (sReleaseName IS NULL) OR (nUserId IS NULL)
6050
   THEN
6051
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
1373 dpurdie 6052
 
3959 dpurdie 6053
   END IF;
1373 dpurdie 6054
 
3959 dpurdie 6055
 
6056
   -- Check for duplicate Release Names
6057
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
6058
     FROM RELEASE_TAGS rt
6059
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
6060
      AND rt.PROJ_ID = nProjId;
6061
 
6062
   IF (RecCount > 0) THEN
6063
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
6064
   END IF;
6065
   /*-------------------------------------------------------*/
6066
 
6067
 
6068
   -- Get rtag_id
6069
   SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
6070
 
6071
   SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;
6072
 
6073
 
6074
 
6075
   -- Get Parent RtagId
6076
   ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
6077
 
6078
   -- If the parent RTAG is NOT in this project then we cannot use it.
6079
   -- We must re-assign the parent to be the new release's RTAG_ID instead
6080
   -- else it will not show up in the projects release tree (DEVI-55480)
6081
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
6082
     FROM RELEASE_TAGS rt
6083
    WHERE rt.RTAG_ID = ParentRtagId
6084
      AND rt.PROJ_ID = nProjId;
6085
 
6086
   IF (RecCount = 0) THEN
6087
     ParentRtagId := RtagId;
6088
   END IF;
6089
 
6090
   -- Create new release
6091
   INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,
6092
                        OFFICIAL, REBUILD_ENV, REBUILD_STAMP,
6093
                        PARENT_RTAG_ID, PROJ_ID, VTREE_ID )
6094
   VALUES ( RtagId,
6095
          sReleaseName,
6096
          sReleaseComments,
6097
          ORA_SYSDATE,
6098
          nUserId,
6099
          'N',
6100
          'N',
6101
          0,
6102
          ParentRtagId,
6103
          nProjId,
6104
          VtreeId );
6105
 
6106
   -- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)
6107
   IF (NOT nSourceRtagId IS NULL)
6108
   THEN
6109
      UPDATE RELEASE_TAGS rtd
6110
      SET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)
6111
      WHERE rtd.RTAG_ID = RtagId;
6112
   END IF;
6113
 
6114
   -- Update display Order
6115
   UPDATE_DISPLAY_ORDER ( nProjId );
6116
 
6117
   /* Log Project Action */
6118
   Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
6119
 
6120
 
6121
   -- Import Release Contents
6122
   IF (NOT nSourceRtagId IS NULL) THEN
6123
      Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
6124
   END IF;
6125
 
6126
END;
6127
/*-------------------------------------------------------------------------------------------------------*/
6128
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
6129
 
6130
 
6131
BEGIN
6132
 
6133
 
6134
   /*--------------- Business Rules Here -------------------*/
6135
   /*-------------------------------------------------------*/
6136
 
6137
   UPDATE RELEASE_TAGS urt SET
6138
   urt.DISPLAY_ORDER = (
6139
                  SELECT qry.REC_NUM
6140
                    FROM (
6141
                        SELECT rel.*, ROWNUM AS REC_NUM
6142
                          FROM (
6143
 
6144
                                SELECT rt.RTAG_ID,
6145
                                    rt.DISPLAY_ORDER,
6146
                                     DECODE( rt.PARENT_RTAG_ID,
6147
                                             rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
6148
                                FROM RELEASE_TAGS rt
6149
                               WHERE rt.PROJ_ID = nProjId
6150
 
6151
                                ) rel
6152
                        START WITH rel.PARENT_RTAG_ID = 0
6153
                        CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID
6154
                        ORDER SIBLINGS BY rel.DISPLAY_ORDER
6155
                        ) qry
6156
                     WHERE qry.RTAG_ID = urt.RTAG_ID
6157
                  )
6158
   WHERE urt.PROJ_ID = nProjId;
6159
 
6160
END;
6161
/*-------------------------------------------------------------------------------------------------------*/
6162
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
6163
 
6164
   nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
6165
   SeqNum NUMBER;
6166
 
6167
BEGIN
6168
 
6169
 
6170
   /*--------------- Business Rules Here -------------------*/
6171
   /*-------------------------------------------------------*/
6172
 
6173
   nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
6174
 
6175
   -- Set start sequence number
6176
   SeqNum := 1;
6177
 
6178
   FOR i IN 1..nIdCollector.COUNT
6179
   LOOP
6180
 
6181
      -- Update new display order
6182
      UPDATE RELEASE_TAGS rt SET
6183
         rt.DISPLAY_ORDER = SeqNum
6184
       WHERE rt.PROJ_ID = nProjId
6185
         AND rt.RTAG_ID = nIdCollector(i);
6186
 
6187
      SeqNum := SeqNum + 1;
6188
 
6189
   END LOOP;
6190
 
6191
END;
6192
/*-------------------------------------------------------------------------------------------------------*/
6193
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 ) IS
6194
 
6195
RecCount NUMBER := 0;
6196
ProjId NUMBER;
6197
 
6198
BEGIN
6199
 
6200
 
6201
   /*--------------- Business Rules Here -------------------*/
6202
   -- Check for missing parameters
6203
   IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
6204
   THEN
6205
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
6206
 
6207
   END IF;
6208
 
6209
 
6210
   -- Check for duplicate Release Names
6211
   SELECT rt.PROJ_ID INTO ProjId
6212
     FROM RELEASE_TAGS rt
6213
    WHERE rt.RTAG_ID = nRtagId;
6214
 
6215
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
6216
     FROM RELEASE_TAGS rt
6217
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
6218
      AND rt.RTAG_ID != nRtagId
6219
      AND rt.PROJ_ID = ProjId;
6220
 
6221
 
6222
   IF (RecCount > 0) THEN
6223
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
6224
   END IF;
6225
   /*-------------------------------------------------------*/
6226
 
6227
 
6228
 
6229
   -- Update release details
6230
   UPDATE RELEASE_TAGS rt SET
6231
   rt.RTAG_NAME = sReleaseName,
6232
   rt.DESCRIPTION = sReleaseComments,
6233
   rt.PARENT_RTAG_ID = nParentRtagId,
6234
   rt.ASSOC_MASS_REF = nMASSRtagId,
6235
   rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,
6236
   rt.OWNER_EMAIL = sOwnerEmail,
6237
   rt.PRODUCT_STATE_USED = cState
6238
   WHERE rt.RTAG_ID = nRtagId;
6239
 
6240
   -- Update display Order
6241
   UPDATE_DISPLAY_ORDER ( ProjId );
6242
 
6243
   /* Log Project Action */
6244
   Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
6245
 
6246
 
6247
 
6248
 
6249
END;
6250
/*-------------------------------------------------------------------------------------------------------*/
6251
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
6252
 
6253
   RecCount NUMBER := 0;
6254
   sReleaseId VARCHAR2(4000);
6255
   ProjId NUMBER;
6256
 
6257
BEGIN
6258
   /*--------------- Business Rules Here -------------------*/
6259
   IF (nRtagId IS NULL)
6260
   THEN
6261
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
6262
   END IF;
6263
 
6264
 
6265
 
6266
   -- Check for any kids
6267
   SELECT COUNT( rt.RTAG_ID ) INTO RecCount
6268
     FROM RELEASE_TAGS rt
6269
    WHERE rt.PARENT_RTAG_ID = nRtagId
6270
      AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
6271
 
6272
   IF (RecCount > 0) THEN
6273
      RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
6274
   END IF;
6275
   /*-------------------------------------------------------*/
6276
 
6277
   -- Clear the release contents
6278
   Clean_Release_Contents ( nRtagId, nUserId );
6279
 
6280
   /* Log Project Action */
6281
   SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
6282
     FROM RELEASE_TAGS rt
6283
    WHERE rt.RTAG_ID = nRtagId;
6284
 
6285
   Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
6286
 
6287
 
6288
   -- Remove Release
6289
   DELETE
6290
     FROM RELEASE_TAGS rt
6291
    WHERE rt.RTAG_ID = nRtagId;
6292
 
6293
 
6294
 
6295
END;
6296
/*-------------------------------------------------------------------------------------------------------*/
6297
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
6298
 
6299
   sSourceLocation VARCHAR2(4000);
6300
   sTargetLocation VARCHAR2(4000);
6301
   ProjId NUMBER;
6302
   cReleaseMode CHAR(1);
6303
   RconId NUMBER;
6304
 
6305
   -- this cursor gets the source release daemon configurations, ensuring that the
6306
   -- first record will be the master daemon, and subsequent records will be the slaves.
6307
   CURSOR curSrcReleaseConfigs IS
6308
    SELECT daemon_hostname, gbe_id, gbe_buildfilter
6309
     FROM RELEASE_CONFIG rc
6310
    WHERE rc.RTAG_ID = nSourceRtagId
6311
    ORDER BY rc.daemon_mode;
6312
    recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;
6313
 
6314
    -- this cursor looks for target release daemons
6315
   CURSOR curTgtReleaseConfigs IS
6316
    SELECT rcon_id
6317
     FROM RELEASE_CONFIG rc
6318
    WHERE rc.RTAG_ID = nTargetRtagId;
6319
    recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;
6320
 
6321
    -- this cursor looks for target release daemon run level entries
6322
   CURSOR curTgtReleaseConfigRunLevel IS
6323
    SELECT current_run_level
6324
     FROM RUN_LEVEL rl
6325
    WHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;
6326
    recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;
6327
 
6328
BEGIN
6329
   /*--------------- Business Rules Here -------------------*/
6330
   IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
6331
   THEN
6332
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
6333
   END IF;
6334
 
6335
   IF (nSourceRtagId = nTargetRtagId) THEN
6336
      RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
6337
   END IF;
6338
 
6339
 
6340
   -- Check if Target release is in OPEN mode
6341
   SELECT rt.OFFICIAL  INTO  cReleaseMode
6342
     FROM RELEASE_TAGS rt
6343
    WHERE rt.RTAG_ID = nTargetRtagId;
6344
 
6345
   IF (cReleaseMode != 'N') THEN
6346
      RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
6347
   END IF;
6348
 
6349
   -- check that the target release's daemons are all paused before we allow an import operation
6350
   OPEN curTgtReleaseConfigs;
6351
   FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;
6352
 
6353
   WHILE curTgtReleaseConfigs%FOUND
6354
   LOOP
6355
      OPEN curTgtReleaseConfigRunLevel;
6356
      FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;
6357
      IF curTgtReleaseConfigRunLevel%FOUND THEN
6358
         IF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR
6359
            (recTgtReleaseConfigRunLevel.current_run_level <> 2) THEN
6360
            RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
6361
         END IF;
1373 dpurdie 6362
      ELSE
3959 dpurdie 6363
         -- we don't know what the daemon run level is so err on the side of caution
6364
         RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
1373 dpurdie 6365
      END IF;
3959 dpurdie 6366
      CLOSE curTgtReleaseConfigRunLevel;
1373 dpurdie 6367
 
3959 dpurdie 6368
      FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;
6369
   END LOOP;
1373 dpurdie 6370
 
3959 dpurdie 6371
   CLOSE curTgtReleaseConfigs;
1373 dpurdie 6372
 
6373
 
3959 dpurdie 6374
   /*-------------------------------------------------------*/
1373 dpurdie 6375
 
3959 dpurdie 6376
   -- Clean target contents
6377
   Clean_Release_Contents ( nTargetRtagId, nUserId );
1373 dpurdie 6378
 
6379
 
3959 dpurdie 6380
   -- Import Released Area Contents
6381
   INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )
6382
   SELECT nTargetRtagId AS RTAG_ID,
6383
         rc.PV_ID,
6384
         rc.BASE_VIEW_ID,
6385
         rc.INSERT_STAMP,
6386
         rc.INSERTOR_ID,
6387
         rc.PKG_STATE,
6388
         rc.PKG_ID,
6389
         rc.DEPRECATED_STATE
6390
     FROM RELEASE_CONTENT rc
6391
    WHERE rc.RTAG_ID = nSourceRtagId;
6392
 
6393
 
6394
   -- Import any Pegged Version settings from the source release
6395
   INSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )
6396
   SELECT nTargetRtagId AS RTAG_ID,
6397
          pegv.PV_ID
6398
     FROM PEGGED_VERSIONS pegv
6399
    WHERE pegv.RTAG_ID = nSourceRtagId;
6400
 
6401
   -- Import any Advisory Ripple settings from the source release
6402
   INSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )
6403
   SELECT nTargetRtagId AS RTAG_ID,
6404
          avr.PV_ID
6405
     FROM ADVISORY_RIPPLE avr
6406
    WHERE avr.RTAG_ID = nSourceRtagId;
6407
 
6408
 
6409
   --Import Release Configuration Information
6410
   OPEN curSrcReleaseConfigs;
6411
   FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
6412
 
6413
   WHILE curSrcReleaseConfigs%FOUND
6414
   LOOP
6415
      -- add a daemon to the target release
6416
      PK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );
6417
 
6418
      FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
6419
   END LOOP;
6420
 
6421
   CLOSE curSrcReleaseConfigs;
6422
 
6423
 
6424
 
6425
   -- Import Ignore Warning states
6426
   INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
6427
   SELECT nTargetRtagId AS RTAG_ID,
6428
          igw.PV_ID,
6429
          igw.DPV_ID
6430
     FROM IGNORE_WARNINGS igw
6431
    WHERE igw.rtag_id = nSourceRtagId;
6432
 
6433
 
6434
   /* Log Project Action */
6435
   -- Get Source Location
6436
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
6437
     FROM RELEASE_TAGS rt,
6438
           PROJECTS pr
6439
    WHERE rt.PROJ_ID = pr.PROJ_ID
6440
      AND rt.RTAG_ID = nSourceRtagId;
6441
 
6442
   -- Get Target Location
6443
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
6444
     FROM RELEASE_TAGS rt,
6445
           PROJECTS pr
6446
    WHERE rt.PROJ_ID = pr.PROJ_ID
6447
      AND rt.RTAG_ID = nTargetRtagId;
6448
 
6449
   -- Get project id
6450
   SELECT rt.PROJ_ID  INTO  ProjId
6451
     FROM RELEASE_TAGS rt
6452
    WHERE rt.RTAG_ID = nTargetRtagId;
6453
 
6454
   Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );
6455
END;
6456
 
6457
 
6458
 
1373 dpurdie 6459
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 6460
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
1373 dpurdie 6461
 
3959 dpurdie 6462
   RecCount NUMBER;
6463
        rconIdList VARCHAR2(4000);
1373 dpurdie 6464
 
3959 dpurdie 6465
BEGIN
6466
   /*--------------- Business Rules Here -------------------*/
6467
   IF (nRtagId IS NULL)
6468
   THEN
6469
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
6470
   END IF;
1373 dpurdie 6471
 
6472
 
3959 dpurdie 6473
   -- Check if other release references this release
6474
   SELECT COUNT( rl.RTAG_ID ) INTO RecCount
6475
     FROM RELEASE_LINKS rl
6476
    WHERE rl.REF_RTAG_ID = nRtagId;
1373 dpurdie 6477
 
3959 dpurdie 6478
   IF (RecCount > 0) THEN
6479
      RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
6480
   END IF;
6481
   /*-------------------------------------------------------*/
1373 dpurdie 6482
 
3959 dpurdie 6483
   -- Delete Release links
6484
   DELETE
6485
     FROM RELEASE_LINKS rl
6486
    WHERE rl.RTAG_ID = nRtagId;
6487
 
6488
   -- Delete ignore warning
6489
   DELETE
6490
     FROM IGNORE_WARNINGS iw
6491
    WHERE iw.RTAG_ID = nRtagId;
6492
 
6493
 
6494
   -- Delete Build Order cached calculations
6495
   DELETE
6496
     FROM BUILD_ORDER bo
6497
    WHERE bo.RTAG_ID = nRtagId;
6498
 
6499
 
6500
   -- Delete Notification History
6501
   DELETE
6502
     FROM NOTIFICATION_HISTORY nh
6503
    WHERE nh.RTAG_ID = nRtagId;
6504
 
6505
 
6506
   -- Delete Released Area Contents
6507
   DELETE
6508
     FROM RELEASE_CONTENT rc
6509
    WHERE rc.RTAG_ID = nRtagId;
6510
 
6511
 
6512
   -- Delete Work In Progress Area Contents
6513
   DELETE
6514
     FROM WORK_IN_PROGRESS wip
6515
    WHERE wip.RTAG_ID = nRtagId;
6516
 
6517
 
6518
   -- Delete Pending Area Contents
6519
   DELETE
6520
     FROM PLANNED pl
6521
    WHERE pl.RTAG_ID = nRtagId;
6522
 
6523
   -- Delete Deprecated Packages
6524
   DELETE
6525
     FROM DEPRECATED_PACKAGES dp
6526
    WHERE dp.RTAG_ID = nRtagId;
6527
 
6528
   -- Delete Project Action Log
6529
   DELETE
6530
     FROM PROJECT_ACTION_LOG pal
6531
    WHERE pal.RTAG_ID = nRtagId;
6532
 
6533
   -- Delete Do Not Ripple Contents
6534
   DELETE
6535
     FROM DO_NOT_RIPPLE dnr
6536
    WHERE dnr.RTAG_ID = nRtagId;
6537
 
6538
   -- Delete Dash Board Contents
6539
   DELETE
6540
     FROM DASH_BOARD db
6541
    WHERE db.RTAG_ID = nRtagId;
6542
 
6543
   -- Delete Advisory Ripple Contents
6544
   DELETE
6545
     FROM ADVISORY_RIPPLE adr
6546
    WHERE adr.RTAG_ID = nRtagId;
6547
 
6548
   -- Delete Archive Action Log
6549
   DELETE
6550
     FROM ARCHIVE_ACTION_LOG aal
6551
    WHERE aal.RTAG_ID = nRtagId;
6552
 
6553
   -- Delete Daemons For This Release
6554
   FOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )
6555
   LOOP
6556
      rconIdList := rconIdList || rcon.RCON_ID || ',';
6557
   END LOOP;
6558
 
6559
   pk_buildapi.DELETE_DAEMON(rconIdList);
6560
 
6561
   -- Delete Release Metrics Contents
6562
   DELETE
6563
     FROM RELEASE_METRICS rm
6564
    WHERE rm.RTAG_ID = nRtagId;
6565
 
6566
   -- Delete Release Configuration Contents
6567
   DELETE
6568
     FROM RELEASE_CONFIG rc
6569
    WHERE rc.RTAG_ID = nRtagId;
6570
 
6571
   -- Delete Pegged Version Contents
6572
   DELETE
6573
     FROM PEGGED_VERSIONS pegv
6574
    WHERE pegv.RTAG_ID = nRtagId;
6575
 
6576
END;
6577
/*-------------------------------------------------------------------------------------------------------*/
6578
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
6579
 
6580
   nSourceParentRtagId NUMBER;
6581
 
6582
BEGIN
6583
   /*--------------- Business Rules Here -------------------*/
6584
   IF (nRtagId IS NULL) OR (cIsBranch IS NULL)
6585
   THEN
6586
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
6587
   END IF;
6588
   /*-------------------------------------------------------*/
6589
 
6590
 
6591
   IF ( nSourceRtagId IS NULL ) THEN
6592
      -- Create new on main branch
6593
      RETURN nRtagId;
6594
 
6595
   ELSE
6596
      -- Create from source rtag_id
6597
 
6598
      -- Find parent of Source RtagId
6599
      SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
6600
        FROM RELEASE_TAGS rt
6601
       WHERE rt.RTAG_ID = nSourceRtagId;
6602
 
6603
      IF (UPPER(cIsBranch) = 'Y') THEN
6604
         RETURN nSourceRtagId;
6605
      ELSE
6606
         IF (nSourceRtagId = nSourceParentRtagId) THEN
6607
            RETURN nRtagId;
6608
         ELSE
6609
            RETURN nSourceParentRtagId;
1373 dpurdie 6610
         END IF;
6611
      END IF;
6612
 
3959 dpurdie 6613
 
6614
   END IF;
6615
 
6616
 
6617
END;
1373 dpurdie 6618
/*-------------------------------------------------------------------------------------------------------*/
6619
 
3959 dpurdie 6620
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
6621
--                       sNextVersion OUT VARCHAR2,
6622
--                       nNextLifeCycle OUT NUMBER,
6623
--                       nParentRtagId OUT NUMBER,
6624
--                       nProjId IN NUMBER ) IS
6625
--
6626
-- SourceBranchCount NUMBER;
6627
-- ProjRootVersion VARCHAR2(4000);
6628
-- LastLifeCycle NUMBER;
6629
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
6630
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
6631
--
6632
-- SourceProjId NUMBER;
6633
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
6634
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
6635
--
6636
-- BEGIN
6637
--    /*--------------- Business Rules Here -------------------*/
6638
--    /*-------------------------------------------------------*/
6639
--
6640
--
6641
--    BEGIN
6642
--       -- Get Project root version
6643
--       SELECT rt.RTAG_VERSION INTO ProjRootVersion
6644
--         FROM RELEASE_TAGS rt
6645
--        WHERE rt.PROJ_ID = nProjId
6646
--          AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
6647
--
6648
--       EXCEPTION
6649
--       WHEN NO_DATA_FOUND THEN
6650
--       ProjRootVersion := ROOT_VERSION_NOT_FOUND;
6651
--    END;
6652
--
6653
--
6654
--
6655
--
6656
--    BEGIN
6657
--       -- Get info for source rtagid
6658
--       SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
6659
--         FROM RELEASE_TAGS rt
6660
--        WHERE rt.RTAG_ID = nSourceRtagId;
6661
--
6662
--       EXCEPTION
6663
--       WHEN NO_DATA_FOUND THEN
6664
--       SourceProjId := NULL;
6665
--       SourceVersion := NULL;
6666
--       SourceLifeCycle := NULL;
6667
--    END;
6668
--
6669
--
6670
--    IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
6671
--
6672
--       /* Blank Release Required  OR  Release imported from other project */
6673
--
6674
--       IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
6675
--          /* No Releases found in the project, hence calculate next version available.  */
6676
--
6677
--          -- Set parent rtag
6678
--          nParentRtagId := SET_PARENT_AS_YOURSELF;
6679
--
6680
--
6681
--          BEGIN
6682
--             -- Get Next Available Global Root Version
6683
--             SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
6684
--               FROM RELEASE_TAGS rt
6685
--              WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
6686
--
6687
--             -- Set Next Rtag Version
6688
--             sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
6689
--
6690
--             -- Restart Lifecycle
6691
--             nNextLifeCycle := 0;
6692
--
6693
--
6694
--             EXCEPTION
6695
--             WHEN NO_DATA_FOUND THEN
6696
--             -- Release Manager has no releases, hence start from 1
6697
--             sNextVersion := '1';
6698
--             nNextLifeCycle := 0;
6699
--
6700
--          END;
6701
--
6702
--
6703
--
6704
--       ELSE
6705
--          /* Releases found in this project. */
6706
--
6707
--          SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
6708
--            FROM (
6709
--                SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
6710
--                  FROM RELEASE_TAGS rt
6711
--                 WHERE rt.PROJ_ID = nProjId
6712
--                   AND rt.RTAG_VERSION = ProjRootVersion
6713
--                 ORDER BY rt.RTAG_LIFE_CYCLE DESC
6714
--                  ) qry
6715
--           WHERE ROWNUM = 1;
6716
--
6717
--
6718
--          -- Set same Rtag Version
6719
--          sNextVersion := ProjRootVersion;
6720
--
6721
--          -- Increase Lifecycle
6722
--          nNextLifeCycle := LastLifeCycle + 1;
6723
--
6724
--       END IF;
6725
--
6726
--
6727
--
6728
--    ELSE
6729
--       /* Create Release From other release within this project */
6730
--
6731
--       -- Set parent id
6732
--       nParentRtagId := nSourceRtagId;
6733
--
6734
--
6735
--       -- Get number of source branches
6736
--       SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
6737
--         FROM RELEASE_TAGS rt
6738
--        WHERE rt.PROJ_ID = nProjId
6739
--          AND rt.PARENT_RTAG_ID = nSourceRtagId;
6740
--
6741
--
6742
--       IF SourceBranchCount = 0 THEN
6743
--          /* Release is Head (i.e. Tip on its branch ) */
6744
--
6745
--          -- Set Next Rtag Version
6746
--          sNextVersion := SourceVersion;
6747
--
6748
--          -- Increase Lifecycle
6749
--          nNextLifeCycle := SourceLifeCycle + 1;
6750
--
6751
--
6752
--       ELSIF SourceBranchCount = 1 THEN
6753
--          /* Release IS NOT Head, but can be branched */
6754
--
6755
--          -- Set Next Rtag Version
6756
--          sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
6757
--
6758
--          -- Reset Lifecycle to 1
6759
--          nNextLifeCycle := 1;
6760
--
6761
--
6762
--       ELSE
6763
--          -- Limit of two branches is reached
6764
--          RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');
6765
--
6766
--       END IF;
6767
--
6768
--
6769
--
6770
--
6771
--
6772
--
6773
--    END IF;
6774
--
6775
--
6776
-- END;
6777
 
6778
/*-------------------------------------------------------------------------------------------------------*/
6779
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
6780
 
6781
   IsBaseView CHAR(1);
6782
 
6783
BEGIN
6784
 
6785
   -- Check if the view is BASE VIEW
6786
   SELECT vi.BASE_VIEW INTO IsBaseView
6787
     FROM VIEWS vi
6788
    WHERE vi.VIEW_ID = ViewId;
6789
 
6790
   IF (IsBaseView = 'Y') THEN
6791
      -- Get Base view content
6792
      OPEN RecordSet FOR
6793
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
6794
            rel.deprecated_state,
6795
            pv.pv_id,
6796
            pkg.pkg_name,
6797
            pv.pkg_version,
6798
            pv.dlocked,
6799
            pv.pv_description,
6800
            pv.BUILD_TYPE
6801
        FROM release_content rel,
6802
             packages pkg,
6803
             package_versions pv
6804
       WHERE pv.pkg_id = pkg.pkg_id
6805
         AND rel.pv_id = pv.pv_id
6806
         AND rel.BASE_VIEW_ID = ViewId
6807
         AND rel.RTAG_ID = RtagId
6808
       ORDER BY UPPER(pkg.PKG_NAME);
6809
 
6810
   ELSE
6811
 
6812
       -- Get non base view content
6813
      OPEN RecordSet FOR
6814
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
6815
            rel.deprecated_state,
6816
            pv.pv_id,
6817
            pkg.pkg_name,
6818
            pv.pkg_version,
6819
            pv.dlocked,
6820
            pv.pv_description,
6821
            pv.BUILD_TYPE
6822
        FROM release_content rel,
6823
             packages pkg,
6824
             package_versions pv,
6825
            VIEW_DEF vd
6826
       WHERE pv.pkg_id = pkg.pkg_id
6827
         AND rel.pv_id = pv.pv_id
6828
         AND vd.VIEW_ID = ViewId
6829
         AND vd.PKG_ID = pv.PKG_ID
6830
         AND rel.RTAG_ID = RtagId
6831
       ORDER BY UPPER(pkg.PKG_NAME);
6832
 
6833
   END IF;
6834
 
6835
 
6836
 
6837
 
6838
END;
6839
/*-------------------------------------------------------------------------------------------------------*/
6840
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
6841
 
6842
   ReleaseLocation VARCHAR2(4000);
6843
   sPkgVersion VARCHAR2(4000);
6844
   nPkgId NUMBER;
6845
   sVExt VARCHAR2(4000);
6846
   IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
6847
 
6848
   -- Find package for replacement
6849
   CURSOR curReplacePkg IS
6850
    SELECT pv.PV_ID
6851
     FROM RELEASE_CONTENT rc,
6852
           PACKAGE_VERSIONS pv
6853
    WHERE rc.PV_ID = pv.PV_ID
6854
      AND rc.RTAG_ID = RtagId
6855
      AND pv.PKG_ID = nPkgId
6856
      AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
6857
    recReplacePkg curReplacePkg%ROWTYPE;
6858
 
6859
BEGIN
6860
 
6861
   -- Get is_patch, pkg_id and v_ext
6862
   SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
6863
     FROM PACKAGE_VERSIONS pv
6864
    WHERE pv.PV_ID = newPvId;
6865
 
6866
 
6867
   -- Never put patch in relesed area
6868
   IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
6869
 
6870
      -- Try to get a package to be replaced with this new one.
6871
      -- Use unique constraint of PKG_ID and V_EXT
6872
      OPEN curReplacePkg;
6873
       FETCH curReplacePkg INTO recReplacePkg;
6874
 
6875
       IF curReplacePkg%FOUND THEN
6876
         -- Replace package
6877
         REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
6878
 
6879
      ELSE
6880
         -- Add new package
6881
         INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
6882
         VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
6883
 
6884
 
6885
          /* LOG ACTION */
6886
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
6887
           FROM PROJECTS proj,
6888
                 RELEASE_TAGS rt
6889
          WHERE rt.PROJ_ID = proj.PROJ_ID
6890
            AND rt.RTAG_ID = RtagId;
6891
 
6892
         SELECT pv.PKG_VERSION INTO sPkgVersion
6893
           FROM PACKAGE_VERSIONS pv
6894
          WHERE pv.PV_ID = newPvId;
6895
 
6896
         Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
6897
 
6898
 
1373 dpurdie 6899
      END IF;
6900
 
3959 dpurdie 6901
      CLOSE curReplacePkg;
6902
 
6903
   END IF;
6904
 
6905
END;
1373 dpurdie 6906
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 6907
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 6908
 
3959 dpurdie 6909
   ReleaseLocation VARCHAR2(4000);
6910
   sPkgVersion VARCHAR2(4000);
6911
 
6912
BEGIN
6913
 
6914
   -- Replace Package
6915
    UPDATE RELEASE_CONTENT
6916
       SET pv_id = newPvId,
6917
           insert_stamp = Ora_Sysdate,
6918
           insertor_id = UserId,
6919
         product_state = NULL
6920
     WHERE rtag_id = RtagId
6921
       AND pv_id = oldPvId;
6922
 
6923
   -- update the pegging table
6924
   UPDATE PEGGED_VERSIONS
6925
      SET pv_id = newPvId
6926
     WHERE rtag_id = RtagId
6927
       AND pv_id = oldPvId;
6928
 
6929
   -- update the advisory_ripple table
6930
   UPDATE ADVISORY_RIPPLE
6931
      SET pv_id = newPvId
6932
     WHERE rtag_id = RtagId
6933
       AND pv_id = oldPvId;
6934
 
6935
    /* LOG ACTION */
6936
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
6937
     FROM PROJECTS proj,
6938
           RELEASE_TAGS rt
6939
    WHERE rt.PROJ_ID = proj.PROJ_ID
6940
      AND rt.RTAG_ID = RtagId;
6941
 
6942
   SELECT pv.PKG_VERSION INTO sPkgVersion
6943
     FROM PACKAGE_VERSIONS pv
6944
    WHERE pv.PV_ID = newPvId;
6945
 
6946
   Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
6947
   Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
6948
 
6949
END;
6950
/*-------------------------------------------------------------------------------------------------------*/
6951
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
6952
   ReleaseLocation VARCHAR2(4000);
6953
 
6954
BEGIN
6955
 
6956
 
6957
   -- Delete old package
6958
   DELETE
6959
     FROM RELEASE_CONTENT rc
6960
    WHERE rc.PV_ID = PvId
6961
      AND rc.RTAG_ID = RtagId;
6962
 
6963
 
6964
   /* LOG ACTION */
6965
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
6966
     FROM PROJECTS proj,
6967
          RELEASE_TAGS rt
6968
    WHERE rt.PROJ_ID = proj.PROJ_ID
6969
      AND rt.RTAG_ID = RtagId;
6970
 
6971
   Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
6972
 
6973
 
6974
END;
6975
/*-------------------------------------------------------------------------------------------------------*/
6976
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
6977
   ReleaseLocation VARCHAR2(4000);
6978
 
6979
   CURSOR curMatchingPackage IS
6980
    SELECT mpv.PV_ID
6981
     FROM RELEASE_CONTENT rc,
6982
           PACKAGE_VERSIONS mpv,
6983
         PACKAGE_VERSIONS pv
6984
    WHERE rc.PV_ID = mpv.PV_ID
6985
      AND rc.RTAG_ID = RtagId
6986
      AND pv.PV_ID = PvId
6987
      AND pv.PKG_ID = mpv.PKG_ID
6988
      AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
6989
    recMatchingPackage curMatchingPackage%ROWTYPE;
6990
 
6991
BEGIN
6992
 
6993
   OPEN curMatchingPackage;
6994
    FETCH curMatchingPackage INTO recMatchingPackage;
6995
 
6996
    IF curMatchingPackage%FOUND THEN
6997
      -- Delete old package
6998
      DELETE
6999
        FROM RELEASE_CONTENT rc
7000
       WHERE rc.PV_ID = recMatchingPackage.PV_ID
7001
         AND rc.RTAG_ID = RtagId;
7002
 
7003
 
7004
      /* LOG ACTION */
7005
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7006
        FROM PROJECTS proj,
7007
              RELEASE_TAGS rt
7008
       WHERE rt.PROJ_ID = proj.PROJ_ID
7009
         AND rt.RTAG_ID = RtagId;
7010
 
7011
      Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7012
 
7013
   END IF;
7014
 
7015
 
7016
   CLOSE curMatchingPackage;
7017
 
7018
 
7019
 
7020
 
7021
END;
7022
/*-------------------------------------------------------------------------------------------------------*/
7023
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
7024
 
7025
   ReturnValue NUMBER;
7026
 
7027
BEGIN
7028
   SELECT rc.BASE_VIEW_ID INTO ReturnValue
7029
     FROM RELEASE_CONTENT rc
7030
    WHERE rc.RTAG_ID = RtagId
7031
      AND rc.PV_ID = PvId;
7032
 
7033
   RETURN ReturnValue;
7034
END;
7035
/*-------------------------------------------------------------------------------------------------------*/
7036
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
7037
 
7038
BEGIN
7039
   -- Reset Ignore warnings up-the-tree
7040
   RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
7041
 
7042
   -- Refresh Package states
7043
   TOUCH_RELEASE ( RtagId );
7044
 
7045
END;
7046
/*-------------------------------------------------------------------------------------------------------*/
7047
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
7048
   CURSOR curReleases IS
7049
    SELECT rc.RTAG_ID
7050
     FROM RELEASE_CONTENT rc
7051
    WHERE rc.PV_ID = PvId;
7052
    recReleases curReleases%ROWTYPE;
7053
 
7054
BEGIN
7055
 
7056
   OPEN curReleases;
7057
    FETCH curReleases INTO recReleases;
7058
 
7059
   WHILE curReleases%FOUND
7060
   LOOP
7061
 
7062
      RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
7063
 
7064
      FETCH curReleases INTO recReleases;
7065
   END LOOP;
7066
 
7067
   CLOSE curReleases;
7068
 
7069
END;
7070
/*-------------------------------------------------------------------------------------------------------*/
7071
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
7072
 
7073
BEGIN
7074
 
7075
   UPDATE RELEASE_CONTENT rc SET
7076
   rc.BASE_VIEW_ID = NewViewId
7077
   WHERE rc.PV_ID = PvId
7078
     AND rc.RTAG_ID = RtagId;
7079
 
7080
END;
7081
/*-------------------------------------------------------------------------------------------------------*/
7082
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
7083
 
7084
   RowCount NUMBER;
7085
 
7086
 
7087
   CURSOR curPackageClash IS
7088
   SELECT pkg.PKG_NAME,
7089
         er.*
7090
     FROM (
7091
 
7092
           /* Get existing referenced packages */
7093
         SELECT pv.PKG_ID,
7094
                pv.V_EXT
7095
           FROM RELEASE_LINKS rl,
7096
                 RELEASE_CONTENT rc,
7097
                 PACKAGE_VERSIONS pv
7098
          WHERE rl.RTAG_ID = nRtagId
7099
            AND rl.REF_RTAG_ID = rc.RTAG_ID
7100
            AND rc.PV_ID = pv.PV_ID
7101
 
7102
            ) er,
7103
         (
7104
 
7105
         /* Get current reference packages */
7106
         SELECT pv.PKG_ID,
7107
                pv.V_EXT
7108
           FROM RELEASE_CONTENT rc,
7109
                 PACKAGE_VERSIONS pv
7110
          WHERE rc.RTAG_ID = nRefRtagId
7111
            AND rc.PV_ID = pv.PV_ID
7112
 
7113
         ) cr,
7114
         PACKAGES PKG
7115
    WHERE er.PKG_ID = cr.PKG_ID
7116
      AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7117
      AND er.PKG_ID = pkg.PKG_ID;
7118
 
7119
   recPackageClash curPackageClash%ROWTYPE;
7120
 
7121
BEGIN
7122
   /*--------------- Business Rules Here -------------------*/
7123
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7124
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7125
   END IF;
7126
 
7127
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7128
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7129
   END IF;
7130
   /*-------------------------------------------------------*/
7131
   ProblemString := NULL;
7132
 
7133
 
7134
   -- Check if release already has references
7135
   SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
7136
     FROM RELEASE_LINKS rl
7137
    WHERE rl.RTAG_ID = nRtagId;
7138
 
7139
 
7140
   IF RowCount > 0 THEN
7141
      -- Found existing references
7142
 
7143
      -- Make sure there is no package clashes
7144
      OPEN curPackageClash;
7145
       FETCH curPackageClash INTO recPackageClash;
7146
 
7147
      IF curPackageClash%FOUND THEN
7148
 
7149
         ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
7150
 
7151
         WHILE curPackageClash%FOUND
7152
         LOOP
7153
            EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;   -- Do not allow variable overflow
7154
 
7155
            ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
7156
 
7157
            FETCH curPackageClash INTO recPackageClash;
7158
         END LOOP;
7159
 
1373 dpurdie 7160
      END IF;
7161
 
3959 dpurdie 7162
      CLOSE curPackageClash;
7163
 
7164
 
7165
   ELSE
7166
      -- No references found, hence reference a release
7167
 
7168
 
7169
      -- Remove exising package from this release to be referenced
7170
      REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);
7171
 
7172
 
7173
      -- Add new linked packages to release
7174
      INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
7175
      SELECT nRtagId,
7176
            rc.PV_ID,
7177
            rc.BASE_VIEW_ID,
7178
            rc.INSERT_STAMP,
7179
            rc.INSERTOR_ID,
7180
            rc.PKG_STATE
7181
        FROM RELEASE_CONTENT rc
7182
       WHERE rc.RTAG_ID = nRefRtagId;
7183
 
7184
 
7185
 
7186
      -- Copy ignore warnings for referenced packages
7187
      INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
7188
      SELECT nRtagId,
7189
            iw.PV_ID,
7190
            iw.DPV_ID,
7191
            iw.IS_PATCH_IGNORE
7192
        FROM IGNORE_WARNINGS iw,
7193
              RELEASE_CONTENT rc
7194
       WHERE iw.RTAG_ID = rc.RTAG_ID
7195
         AND iw.PV_ID = rc.PV_ID
7196
         AND rc.RTAG_ID = nRefRtagId;
7197
 
7198
 
7199
 
7200
      -- Reference release
7201
      INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
7202
      VALUES ( nRtagId, nRefRtagId );
7203
 
7204
 
7205
      -- Refresh Package states
7206
      TOUCH_RELEASE ( nRtagId );
7207
 
7208
   END IF;
7209
 
7210
 
7211
END;
1373 dpurdie 7212
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7213
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
1373 dpurdie 7214
 
3959 dpurdie 7215
 
7216
BEGIN
7217
   /*--------------- Business Rules Here -------------------*/
7218
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7219
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7220
   END IF;
7221
 
7222
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7223
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7224
   END IF;
7225
 
7226
   /*-------------------------------------------------------*/
7227
 
7228
 
7229
   -- Remove ignore warnings for those packages who use referenced packages
7230
   DELETE FROM IGNORE_WARNINGS iw
7231
    WHERE iw.RTAG_ID = nRtagId
7232
      AND iw.DPV_ID IN (
7233
                        SELECT dep.DPV_ID
7234
                       FROM (
7235
 
7236
                           /* Get referenced packages */
7237
                           SELECT pv.PKG_ID,
7238
                                  pv.V_EXT
7239
                             FROM RELEASE_CONTENT rc,
7240
                                   PACKAGE_VERSIONS pv
7241
                            WHERE rc.RTAG_ID = nRefRtagId
7242
                              AND rc.PV_ID = pv.PV_ID
7243
 
7244
                           ) cr,
7245
                           (
7246
 
7247
                           /* Get all dependencies for current release */
7248
                           SELECT DISTINCT
7249
                                 pv.PKG_ID,
7250
                                 pv.V_EXT,
7251
                                 dep.DPV_ID
7252
                             FROM RELEASE_CONTENT rc,
7253
                                 PACKAGE_DEPENDENCIES dep,
7254
                                 PACKAGE_VERSIONS pv
7255
                            WHERE rc.RTAG_ID = nRtagId
7256
                              AND rc.PV_ID = dep.PV_ID
7257
                              AND dep.PV_ID = pv.PV_ID
7258
 
7259
                           ) dep
7260
                      WHERE dep.PKG_ID = cr.PKG_ID
7261
                        AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7262
                     );
7263
 
7264
 
7265
 
7266
 
7267
   -- Remove ignore warnings for those package which are going to be replaced with the reference
7268
   DELETE FROM IGNORE_WARNINGS iw
7269
    WHERE iw.RTAG_ID = nRtagId
7270
      AND iw.PV_ID IN (
7271
                  SELECT pv.PV_ID
7272
                    FROM (
7273
 
7274
                        /* Get referenced packages */
7275
                        SELECT pv.PKG_ID,
7276
                               pv.V_EXT
7277
                          FROM RELEASE_CONTENT rc,
7278
                                PACKAGE_VERSIONS pv
7279
                         WHERE rc.RTAG_ID = nRefRtagId
7280
                           AND rc.PV_ID = pv.PV_ID
7281
 
7282
                        ) cr,
7283
                        RELEASE_CONTENT rc,
7284
                        PACKAGE_VERSIONS pv
7285
                   WHERE pv.PKG_ID = cr.PKG_ID
7286
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7287
                     AND rc.RTAG_ID = nRtagId
7288
                     AND rc.PV_ID = pv.PV_ID
7289
                  );
7290
 
7291
 
7292
 
7293
 
7294
 
7295
   -- Remove matching packages from release
7296
   DELETE FROM RELEASE_CONTENT rc
7297
    WHERE rc.RTAG_ID = nRtagId
7298
      AND rc.PV_ID IN (
7299
                  SELECT pv.PV_ID
7300
                    FROM (
7301
 
7302
                        /* Get referenced packages */
7303
                        SELECT pv.PKG_ID,
7304
                               pv.V_EXT
7305
                          FROM RELEASE_CONTENT rc,
7306
                                PACKAGE_VERSIONS pv
7307
                         WHERE rc.RTAG_ID = nRefRtagId
7308
                           AND rc.PV_ID = pv.PV_ID
7309
 
7310
                        ) cr,
7311
                        RELEASE_CONTENT rc,
7312
                        PACKAGE_VERSIONS pv
7313
                   WHERE pv.PKG_ID = cr.PKG_ID
7314
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7315
                     AND rc.RTAG_ID = nRtagId
7316
                     AND rc.PV_ID = pv.PV_ID
7317
                  );
7318
 
7319
 
7320
 
7321
 
7322
 
7323
   -- Remove Reference release
7324
   DELETE
7325
     FROM RELEASE_LINKS rl
7326
    WHERE rl.RTAG_ID = nRtagId
7327
      AND rl.REF_RTAG_ID = nRefRtagId;
7328
 
7329
 
7330
   -- Refresh Package states
7331
   TOUCH_RELEASE ( nRtagId );
7332
 
7333
 
7334
END;
7335
/*-------------------------------------------------------------------------------------------------------*/
7336
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
7337
 
7338
   cReleaseMode CHAR(1);
7339
   cPvMode CHAR(1);
7340
 
7341
BEGIN
7342
 
7343
   -- Get Release Mode
7344
   SELECT rt.OFFICIAL INTO cReleaseMode
7345
     FROM RELEASE_TAGS rt
7346
    WHERE rt.RTAG_ID = RtagId;
7347
 
7348
 
7349
   -- Get Package Mode
7350
   SELECT pv.DLOCKED INTO cPvMode
7351
     FROM PACKAGE_VERSIONS pv
7352
    WHERE pv.PV_ID = PvId;
7353
 
7354
   -- Only check if package is locked
7355
   IF (cPvMode = 'Y') THEN
7356
 
7357
      IF (cReleaseMode != 'N') AND (Permission != 'Y')
1373 dpurdie 7358
      THEN
3959 dpurdie 7359
         RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
7360
 
1373 dpurdie 7361
      END IF;
7362
 
3959 dpurdie 7363
   END IF;
7364
 
7365
 
7366
END;
7367
 
1373 dpurdie 7368
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7369
END PK_RELEASE;
7370
/
7371
--------------------------------------------------------
7372
--  DDL for Package Body PK_RMAPI
7373
--------------------------------------------------------
7374
 
7375
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI" 
7376
IS
7377
 
7378
   /*-------------------------------------------------------------------------------------------------------*/
7379
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
7380
      RETURN typecur
1373 dpurdie 7381
   IS
3959 dpurdie 7382
      npvid     NUMBER  := 0;
7383
      RECORDS   typecur;
1373 dpurdie 7384
   BEGIN
3959 dpurdie 7385
      BEGIN
7386
         -- Get PV_ID --
7387
         SELECT pv.pv_id
7388
           INTO npvid
7389
           FROM PACKAGES pkg, package_versions pv
7390
          WHERE pv.pkg_id = pkg.pkg_id
7391
            AND pkg.pkg_name = pkgname
7392
            AND pv.pkg_version = pkgversion;
7393
      EXCEPTION
7394
         WHEN NO_DATA_FOUND
7395
         THEN
7396
            raise_application_error (-20000, 'Package Not Found!');
7397
            --WHEN OTHERS THEN
7398
                  -- Consider logging the error and then re-raise
7399
            RAISE;
7400
      END;
1373 dpurdie 7401
 
3959 dpurdie 7402
      -- Finally get package dependencies --
7403
      OPEN RECORDS FOR
7404
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
7405
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
7406
          WHERE dep.pv_id = npvid
7407
            AND dpv.pkg_id = dpkg.pkg_id
7408
            AND dpv.pv_id = dep.dpv_id;
7409
 
7410
      RETURN RECORDS;
1373 dpurdie 7411
   END;
7412
 
7413
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7414
   FUNCTION wip_iteration_package (
7415
      projname        VARCHAR2,
7416
      iterationname   VARCHAR2,
7417
      pkgname         VARCHAR2
1373 dpurdie 7418
   )
3959 dpurdie 7419
      RETURN typecur
1373 dpurdie 7420
   IS
3959 dpurdie 7421
      nrtagid   NUMBER  := 0;
7422
      RECORDS   typecur;
1373 dpurdie 7423
   BEGIN
3959 dpurdie 7424
      BEGIN
7425
         -- Get latest rtag_id --
7426
         SELECT rt.rtag_id
7427
           INTO nrtagid
7428
           FROM projects proj, release_tags rt
7429
          WHERE rt.proj_id = proj.proj_id
7430
            AND UPPER (proj.proj_name) = UPPER (projname)
7431
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
1373 dpurdie 7432
 
3959 dpurdie 7433
         IF (nrtagid IS NULL)
7434
         THEN
7435
            raise_application_error (-20000,
7436
                                     'Work In Progress is Not Found!');
7437
         END IF;
7438
      EXCEPTION
7439
         WHEN NO_DATA_FOUND
7440
         THEN
7441
            raise_application_error (-20000,
7442
                                     'Work In Progress is Not Found!');
7443
            RAISE;
7444
      END;
7445
 
7446
      -- Finally get package dependencies --
7447
      OPEN RECORDS FOR
7448
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
7449
                pv.src_path
7450
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
7451
          WHERE pv.pkg_id = pkg.pkg_id
7452
            AND wip.pv_id = pv.pv_id
7453
            AND wip.rtag_id = nrtagid
7454
            AND pkg.pkg_name = pkgname;
7455
 
7456
      RETURN RECORDS;
1373 dpurdie 7457
   END;
7458
 
7459
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7460
   FUNCTION auto_make_vcsrelease (
7461
      rtagid                   IN   NUMBER,
7462
      pkgname                  IN   VARCHAR2,
7463
      vext                     IN   VARCHAR2,
7464
      newpkgversion            IN   VARCHAR2,
7465
      vcstag                   IN   VARCHAR2,
7466
      dependenciesimportlist   IN   VARCHAR2,
7467
      isrippled                IN   NUMBER,
7468
      username                 IN   VARCHAR2
7469
   )
1373 dpurdie 7470
      RETURN NUMBER
7471
   IS
3959 dpurdie 7472
      pkgid                           NUMBER;
7473
      pvid                            NUMBER                        := 0;
7474
      userid                          NUMBER;
7475
      dlocked                         VARCHAR2 (20)                 := NULL;
7476
      clonefrompvid                   NUMBER;
7477
      ssv_mm                          package_versions.v_mm%TYPE;
7478
      ssv_nmm                         package_versions.v_nmm%TYPE;
7479
      ssv_ext                         package_versions.v_ext%TYPE;
7480
      return_package_not_found        NUMBER                        := -1;
7481
      return_package_already_exists   NUMBER                        := -2;
7482
      return_not_approved             NUMBER                        := -3;
7483
      return_migrated_pkg             NUMBER                        := -4;
1373 dpurdie 7484
 
7485
 
3959 dpurdie 7486
      x_vcstypeid                     NUMBER;
7487
      x_tag                           VARCHAR2(32);
7488
      x_label                         VARCHAR2(60);
7489
      x_srcpath                       VARCHAR2(2000);
7490
      p_srcpath                       VARCHAR2(2000);
1373 dpurdie 7491
 
3959 dpurdie 7492
      -- Regular expression constituents
7493
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
7494
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
7495
      BOL           VARCHAR2(4)  := '^';
7496
      Anything      VARCHAR2(4)  := '.*';
7497
      ReplaceToken1 VARCHAR2(4)  := '\1';
7498
      ReplaceToken2 VARCHAR2(4)  := '\2';
7499
      ReplaceToken3 VARCHAR2(4)  := '\3';
7500
      iprev_modifier_id               NUMBER;
7501
 
1373 dpurdie 7502
   BEGIN
3959 dpurdie 7503
      /*--------------- Business Rules Here -------------------*/
7504
      IF (rtagid IS NULL)
7505
      THEN
7506
         raise_application_error (-20000, 'RtagId must be supplied.');
7507
      END IF;
1373 dpurdie 7508
 
3959 dpurdie 7509
      IF (pkgname IS NULL)
7510
      THEN
7511
         raise_application_error (-20000, 'PkgName must be supplied.');
7512
      END IF;
1373 dpurdie 7513
 
3959 dpurdie 7514
      IF (newpkgversion IS NULL)
1373 dpurdie 7515
      THEN
3959 dpurdie 7516
         raise_application_error (-20000, 'PkgVersion must be supplied.');
1373 dpurdie 7517
      END IF;
7518
 
3959 dpurdie 7519
      IF (vcstag IS NULL)
1373 dpurdie 7520
      THEN
3959 dpurdie 7521
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
1373 dpurdie 7522
      END IF;
7523
 
3959 dpurdie 7524
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
1373 dpurdie 7525
      THEN
3959 dpurdie 7526
         raise_application_error
7527
            (-20000,
7528
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
7529
            );
1373 dpurdie 7530
      END IF;
7531
 
3959 dpurdie 7532
      IF (username IS NULL)
1373 dpurdie 7533
      THEN
3959 dpurdie 7534
         raise_application_error (-20000, 'UserName must be supplied.');
1373 dpurdie 7535
      END IF;
7536
 
3959 dpurdie 7537
      -- Parse the PkgVcsTag
7538
      -- Sets up
7539
      --   x_tag, x_label, x_srcpath
1373 dpurdie 7540
 
3959 dpurdie 7541
       BEGIN
7542
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
7543
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
1373 dpurdie 7544
 
3959 dpurdie 7545
          -- Decode the short tag
7546
          CASE x_tag
7547
             WHEN 'CC' THEN
7548
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
7549
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
7550
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1373 dpurdie 7551
 
3959 dpurdie 7552
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
7553
                -- check for that error as well as the obvious zero-length string conditions.
7554
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
7555
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
7556
                END IF;
7557
 
7558
                IF isSVNbyName(pkgname) > 0 THEN
7559
                    -- Don't allow migrated packages to be released from a CC label
7560
                    return return_migrated_pkg;
7561
                END IF;
1373 dpurdie 7562
 
7563
 
3959 dpurdie 7564
             WHEN 'SVN' THEN
7565
                -- extract the 2nd token, that being the subversion tag
7566
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
7567
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1373 dpurdie 7568
 
3959 dpurdie 7569
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
7570
                -- check for that error as well as the obvious zero-length string conditions.
7571
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
7572
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
7573
                END IF;
7574
 
7575
             WHEN 'UC' THEN
7576
                -- nothing to extract, just assign defaults
7577
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
7578
                x_label   := 'N/A';
7579
             ELSE
7580
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
7581
          END CASE;
7582
       END;
7583
 
7584
      -- Get the VCS_TYPE_ID for the version control system.
7585
      BEGIN
7586
         SELECT vt.vcs_type_id
7587
         INTO x_vcstypeid
7588
         FROM VCS_TYPE vt
7589
         WHERE vt.tag = x_tag;
7590
         EXCEPTION
7591
            WHEN NO_DATA_FOUND THEN
7592
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
7593
      END;
7594
 
7595
 
7596
      -- Get user_id
7597
      BEGIN
7598
         SELECT usr.user_id
7599
           INTO userid
7600
           FROM users usr
7601
          WHERE UPPER (usr.user_name) = UPPER (username)
7602
            AND usr.is_disabled IS NULL;
7603
      EXCEPTION
7604
         WHEN NO_DATA_FOUND
1373 dpurdie 7605
         THEN
7606
            raise_application_error (-20000,
3959 dpurdie 7607
                                        'UserName '
7608
                                     || username
7609
                                     || ' is not valid or disabled.'
1373 dpurdie 7610
                                    );
3959 dpurdie 7611
      END;
1373 dpurdie 7612
 
3959 dpurdie 7613
/*-------------------------------------------------------*/
1373 dpurdie 7614
 
3959 dpurdie 7615
      -- Create package if necessary
7616
      IF isrippled = 1
1373 dpurdie 7617
      THEN
3959 dpurdie 7618
         /* Ripple Build */
7619
         BEGIN
7620
            -- Make sure that package does not exist
7621
            SELECT pv.pv_id
7622
              INTO pvid
7623
              FROM package_versions pv, PACKAGES pkg
7624
             WHERE pv.pkg_id = pkg.pkg_id
7625
               AND pkg.pkg_name = pkgname
7626
               AND pv.pkg_version = newpkgversion;
7627
         EXCEPTION
7628
            WHEN NO_DATA_FOUND
7629
            THEN
7630
               pvid := 0;
7631
         END;
7632
 
7633
         IF (pvid = 0)
1373 dpurdie 7634
         THEN
3959 dpurdie 7635
            -- Split current version in parts
7636
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
7637
 
7638
            BEGIN
7639
               -- Find package to be replaced with the ripple package
7640
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
7641
               THEN
7642
                  SELECT pv.pv_id, pv.src_path
7643
                    INTO clonefrompvid, p_srcpath
7644
                    FROM PACKAGES pkg, package_versions pv,
7645
                         release_content rc
7646
                   WHERE rc.pv_id = pv.pv_id
7647
                     AND pv.pkg_id = pkg.pkg_id
7648
                     AND rc.rtag_id = rtagid
7649
                     AND pkg.pkg_name = pkgname
7650
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
7651
               ELSE
7652
                  SELECT pv.pv_id, pv.src_path
7653
                    INTO clonefrompvid, p_srcpath
7654
                    FROM PACKAGES pkg, package_versions pv,
7655
                         release_content rc
7656
                   WHERE rc.pv_id = pv.pv_id
7657
                     AND pv.pkg_id = pkg.pkg_id
7658
                     AND rc.rtag_id = rtagid
7659
                     AND pkg.pkg_name = pkgname
7660
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
7661
               END IF;
7662
            EXCEPTION
7663
               WHEN NO_DATA_FOUND
7664
               THEN
7665
                  raise_application_error
7666
                                        (-20000,
7667
                                            'Cannot get CloneFromPvId. VExt='
7668
                                         || vext
7669
                                         || ', RtagId='
7670
                                         || rtagid
7671
                                         || ', PkgName='
7672
                                         || pkgname
7673
                                         || ', SSV_EXT='
7674
                                         || ssv_ext
7675
                                        );
7676
            END;
7677
 
7678
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
7679
            THEN
7680
               -- Create package
7681
               seed_package_names_versions (pkgname,
7682
                                            newpkgversion,
7683
                                            userid,
7684
                                            pvid,
7685
                                            clonefrompvid
7686
                                           );
7687
            ELSE
7688
               -- Create package
7689
               seed_package_names_versions2 (pkgname,
7690
                                             newpkgversion,
7691
                                             userid,
7692
                                             pvid,
7693
                                             clonefrompvid
7694
                                            );
7695
            END IF;
7696
 
7697
            -- Update Package reason for release
7698
            UPDATE package_versions pv
7699
               SET pv.comments = 'Rippled Build.',
7700
                   pv.build_type = 'Y'
7701
             WHERE pv.pv_id = pvid;
7702
         ELSE
7703
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
7704
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
7705
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
7706
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
7707
            UPDATE package_versions pv
7708
               SET pv.release_notes_info = null,
7709
                   pv.modified_stamp = ora_sysdatetime
7710
             WHERE pv.pv_id = pvid;
7711
 
7712
            --DEVI-066151
7713
            log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');
7714
 
7715
            RETURN return_package_already_exists;
1373 dpurdie 7716
         END IF;
7717
      ELSE
3959 dpurdie 7718
         /* Auto build from Pending area */
7719
 
7720
         -- Find package in pending area
7721
         BEGIN
7722
            SELECT pv.pv_id, pv.dlocked, pv.src_path
7723
              INTO pvid, dlocked, p_srcpath
7724
              FROM planned pl, package_versions pv, PACKAGES pkg
7725
             WHERE pl.pv_id = pv.pv_id
7726
               AND pv.pkg_id = pkg.pkg_id
7727
               AND pl.rtag_id = rtagid
7728
               AND pkg.pkg_name = pkgname
7729
               AND pv.dlocked = 'A'
7730
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
7731
               AND rownum = 1
7732
             ORDER BY pv.modified_stamp;
7733
         EXCEPTION
7734
            WHEN NO_DATA_FOUND
7735
            THEN
7736
               pvid := 0;
7737
         END;
7738
 
7739
         IF (pvid = 0)
1373 dpurdie 7740
         THEN
3959 dpurdie 7741
            -- Package does not exist in pending area, hence report it
7742
            RETURN return_package_not_found;
7743
         ELSIF (dlocked != 'A')
1373 dpurdie 7744
         THEN
3959 dpurdie 7745
            -- Package is not approved for autobuild
7746
            RETURN return_not_approved;
1373 dpurdie 7747
         END IF;
7748
 
7749
      END IF;
7750
 
3959 dpurdie 7751
      -- Ensure Source Path does not change
7752
      -- Do not expect the SVN development branch to change
7753
      -- From the previous package
7754
      IF ( x_tag = 'SVN' AND p_srcpath != x_srcpath )
1373 dpurdie 7755
      THEN
3959 dpurdie 7756
        raise_application_error (-20000, 'Source Path does not match (' || p_srcpath || ','|| x_srcpath || ')' );
1373 dpurdie 7757
      END IF;
7758
 
3959 dpurdie 7759
      BEGIN
7760
         -- Import Dependencies
7761
         import_dependencies (pvid, dependenciesimportlist, userid);
7762
      END;
1373 dpurdie 7763
 
7764
 
3959 dpurdie 7765
      BEGIN
7766
         -- Split current version in parts
7767
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
1373 dpurdie 7768
 
3959 dpurdie 7769
         -- Update Package Details
7770
         UPDATE package_versions pv
7771
            SET pv.pkg_version = newpkgversion,
7772
                pv.v_ext = ssv_ext,
7773
                pv.v_mm = ssv_mm,
7774
                pv.v_nmm = ssv_nmm,
7775
                pv.src_path = x_srcpath,
7776
                pv.pkg_label = x_label,
7777
                pv.vcs_type_id = x_vcstypeid
7778
          WHERE pv.pv_id = pvid;
7779
      EXCEPTION
7780
         WHEN DUP_VAL_ON_INDEX
7781
         THEN
7782
            -- Package already exists, hence cannot be used for ripple build
7783
            RETURN return_package_already_exists;
7784
      END;
7785
 
7786
      -- Update the is_autobuildable
7787
      UPDATE package_versions
7788
         SET is_autobuildable = 'Y'
7789
       WHERE pv_id = pvid;
7790
 
7791
      -- DEVI-063601
7792
      -- For planned builds the modifier_id shouldn't be set to buildadm.
7793
      -- To ensure this the modifier_id is obtained so it can be restored after
7794
      -- the function pk_environment.auto_make_release is called.
7795
      -- This function calls, change_state, which sets the modifier_id to the
7796
      -- specified userid, which for auto builds is buildadm.
7797
      SELECT pv.modifier_id INTO iprev_modifier_id
7798
      FROM package_versions pv WHERE pv.pv_id = pvid;
7799
 
7800
      -- Now release package
7801
      pk_environment.auto_make_release (pvid,
7802
                                        rtagid,
7803
                                        userid,
7804
                                        vext,
7805
                                        ssv_ext,
7806
                                        clonefrompvid
7807
                                       );
7808
 
7809
      -- DEVI-063601
7810
      -- if it is a planned build then restore the modifier_id to the previous modifier
7811
      UPDATE package_versions pv SET pv.modifier_id = iprev_modifier_id
7812
      WHERE pv.pv_id = pvid;
7813
 
7814
      --Now clean the PLANNED_VERSIONS table
7815
      SELECT pkg_id
7816
        INTO pkgid
7817
        FROM PACKAGES
7818
       WHERE pkg_name = pkgname;
7819
 
7820
      DELETE FROM planned_versions
7821
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
7822
 
7823
      RETURN pvid;
1373 dpurdie 7824
   END;
7825
 
7826
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7827
   PROCEDURE import_dependencies (
7828
      pvid                     IN   NUMBER,
7829
      dependenciesimportlist   IN   VARCHAR2,
7830
      userid                   IN   NUMBER
7831
   )
1373 dpurdie 7832
   IS
3959 dpurdie 7833
/*
7834
|| DependenciesImportList Format:
7835
|| "pkgA","1.0.0";"pkgB","2.0.0";
7836
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
7837
*/
7838
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
7839
         INDEX BY VARCHAR2 (4000);
7840
 
7841
      seperator         VARCHAR2 (2)           := '||';
7842
      pkgname           VARCHAR2 (4000);
7843
      pkgversion        VARCHAR2 (4000);
7844
      buildtype         VARCHAR2 (50);
7845
      pkgid             NUMBER;
7846
      vext              VARCHAR2 (4000);
7847
      dpvid             NUMBER;
7848
      slist             VARCHAR2 (4000);
7849
      cbuildtypes       tdictionary;
7850
      dependencyrow     NUMBER;
7851
      sdependency       VARCHAR2 (4000);
7852
      first_pos         VARCHAR2 (4000);
7853
      second_pos        VARCHAR2 (4000);
7854
      third_pos         VARCHAR2 (4000);
7855
      forth_pos         VARCHAR2 (4000);
7856
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
7857
 
7858
      CURSOR curbuildtype
7859
      IS
7860
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
7861
                dep.build_type
7862
           FROM package_dependencies dep, package_versions dpv
7863
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
7864
 
7865
      recbuildtype      curbuildtype%ROWTYPE;
1373 dpurdie 7866
   BEGIN
3959 dpurdie 7867
      slist := dependenciesimportlist;
1373 dpurdie 7868
 
3959 dpurdie 7869
      -- Preformat String
7870
      IF NOT slist IS NULL
1373 dpurdie 7871
      THEN
3959 dpurdie 7872
         slist := REPLACE (slist, ' ');                      -- Remove spaces
7873
         slist := REPLACE (slist, UTL_TCP.crlf);
7874
         -- Remove new line and carriage-return characters
7875
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
1373 dpurdie 7876
      END IF;
7877
 
3959 dpurdie 7878
      -- Get Current Dependencies
7879
      OPEN curbuildtype;
1373 dpurdie 7880
 
3959 dpurdie 7881
      FETCH curbuildtype
7882
       INTO recbuildtype;
1373 dpurdie 7883
 
3959 dpurdie 7884
      WHILE curbuildtype%FOUND
7885
      LOOP
7886
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
1373 dpurdie 7887
 
3959 dpurdie 7888
         FETCH curbuildtype
7889
          INTO recbuildtype;
7890
      END LOOP;
1373 dpurdie 7891
 
3959 dpurdie 7892
      CLOSE curbuildtype;
1373 dpurdie 7893
 
3959 dpurdie 7894
      -- Separate dependencies with ; separator
7895
      citemcollection := in_list_varchar2 (slist, ';');
1373 dpurdie 7896
 
3959 dpurdie 7897
      BEGIN
7898
         -- Remove old dependencies
7899
         DELETE FROM package_dependencies dep
7900
               WHERE dep.pv_id = pvid;
1373 dpurdie 7901
 
3959 dpurdie 7902
         -- Loop through dependencies
7903
         FOR dependencyrow IN 1 .. citemcollection.COUNT
7904
         LOOP
7905
            -- Extract pkg_name and pkg_version
7906
            sdependency := citemcollection (dependencyrow);
7907
            first_pos := INSTR (sdependency, '"', 1, 1);
7908
            second_pos := INSTR (sdependency, '"', 1, 2);
7909
            third_pos := INSTR (sdependency, '"', 1, 3);
7910
            forth_pos := INSTR (sdependency, '"', 1, 4);
7911
            pkgname :=
7912
               SUBSTR (sdependency,
7913
                       (first_pos + 1),
7914
                       (second_pos - first_pos - 1)
7915
                      );
7916
            pkgversion :=
7917
               SUBSTR (sdependency,
7918
                       (third_pos + 1),
7919
                       (forth_pos - third_pos - 1)
7920
                      );
7921
 
7922
            -- Dependency must exits to be linked against
7923
            BEGIN
7924
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
7925
                 INTO dpvid, pkgid, vext
7926
                 FROM package_versions pv, PACKAGES pkg
7927
                WHERE pv.pkg_id = pkg.pkg_id
7928
                  AND pkg.pkg_name = pkgname
7929
                  AND pv.pkg_version = pkgversion;
7930
            EXCEPTION
7931
               WHEN NO_DATA_FOUND
7932
               THEN
7933
                  raise_application_error
7934
                                  (-20000,
7935
                                      'Dependency ['
7936
                                   || pkgname
7937
                                   || ' '
7938
                                   || pkgversion
7939
                                   || '] does not exist yet and cannot be used!'
7940
                                  );
7941
            END;
7942
 
7943
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
7944
            BEGIN
7945
               buildtype := cbuildtypes (pkgid || seperator || vext);
7946
 
7947
               IF buildtype IS NULL
7948
               THEN
7949
                  -- Set build type to LinkPackageArchive by default
7950
                  buildtype := 'L';
7951
               END IF;
7952
            EXCEPTION
7953
               WHEN NO_DATA_FOUND
7954
               THEN
7955
                  buildtype := 'L';
7956
            END;
7957
 
7958
            -- Insert Dependencies
7959
            update_package_dependency (pvid,
7960
                                       pkgname,
7961
                                       pkgversion,
7962
                                       buildtype,
7963
                                       userid,
7964
 
7965
                                      );
7966
         END LOOP;
7967
      END;
1373 dpurdie 7968
   END;
7969
 
7970
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7971
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
7972
      RETURN VARCHAR2
1373 dpurdie 7973
   IS
3959 dpurdie 7974
      pkgversion   VARCHAR2 (4000);
1373 dpurdie 7975
   BEGIN
3959 dpurdie 7976
      BEGIN
7977
         SELECT pv.pkg_version
7978
           INTO pkgversion
7979
           FROM PACKAGES pkg, release_content rc, package_versions pv
7980
          WHERE pv.pv_id = rc.pv_id
7981
            AND pkg.pkg_id = pv.pkg_id
7982
            AND pkg.pkg_name = pkgname
7983
            AND rc.rtag_id = rtagid;
7984
 
7985
         RETURN pkgversion;
7986
      END;
1373 dpurdie 7987
   END;
7988
 
7989
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 7990
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
7991
      RETURN VARCHAR2
1373 dpurdie 7992
   IS
3959 dpurdie 7993
      pkgversion   VARCHAR2 (4000);
1373 dpurdie 7994
   BEGIN
3959 dpurdie 7995
      BEGIN
7996
         SELECT pv.pkg_version
7997
           INTO pkgversion
7998
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
7999
          WHERE pv.pv_id = wip.pv_id
8000
            AND pkg.pkg_id = pv.pkg_id
8001
            AND pkg.pkg_name = pkgname
8002
            AND wip.rtag_id = rtagid;
1373 dpurdie 8003
 
3959 dpurdie 8004
         IF pkgversion IS NULL
8005
         THEN
8006
            SELECT pv.pkg_version
8007
              INTO pkgversion
8008
              FROM PACKAGES pkg, planned pl, package_versions pv
8009
             WHERE pv.pv_id = pl.pv_id
8010
               AND pkg.pkg_id = pv.pkg_id
8011
               AND pkg.pkg_name = pkgname
8012
               AND pl.rtag_id = rtagid;
8013
         END IF;
8014
 
8015
         RETURN pkgversion;
8016
      END;
1373 dpurdie 8017
   END;
8018
 
8019
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8020
   PROCEDURE update_dash_board (rtagid IN NUMBER)
1373 dpurdie 8021
   IS
3959 dpurdie 8022
      projid       NUMBER;
8023
      projiddb     NUMBER;
8024
      total        NUMBER;
8025
      auto_total   NUMBER;
8026
      rtagiddb     NUMBER;
1373 dpurdie 8027
   BEGIN
3959 dpurdie 8028
      SELECT COUNT (*)
8029
        INTO total
8030
        FROM release_content rc, package_versions pv
8031
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
1373 dpurdie 8032
 
3959 dpurdie 8033
      SELECT COUNT (*)
8034
        INTO auto_total
8035
        FROM release_content rc, package_versions pv
8036
       WHERE pv.pv_id = rc.pv_id
8037
         AND pv.is_autobuildable = 'Y'
8038
         AND rc.rtag_id = rtagid;
8039
 
8040
      BEGIN
8041
         SELECT rtag_id
8042
           INTO rtagiddb
8043
           FROM dash_board
8044
          WHERE rtag_id = rtagid;
8045
 
8046
         SELECT proj_id
8047
           INTO projiddb
8048
           FROM dash_board
8049
          WHERE rtag_id = rtagid;
8050
      EXCEPTION
8051
         WHEN NO_DATA_FOUND
8052
         THEN
8053
            rtagiddb := '';
8054
      END;
8055
 
8056
      IF rtagiddb IS NULL
1373 dpurdie 8057
      THEN
3959 dpurdie 8058
         SELECT proj_id
8059
           INTO projid
8060
           FROM release_tags
8061
          WHERE rtag_id = rtagid;
8062
 
8063
         INSERT INTO dash_board
8064
                     (proj_id, rtag_id, last_build_time, automated_packages,
8065
                      total_packages
8066
                     )
8067
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
8068
                      total
8069
                     );
8070
      ELSE
8071
         UPDATE dash_board
8072
            SET last_build_time = ora_sysdatetime,
8073
                automated_packages = auto_total,
8074
                total_packages = total
8075
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
1373 dpurdie 8076
      END IF;
8077
   END;
8078
 
8079
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8080
   FUNCTION exclude_from_build (
8081
      pvid          IN   NUMBER,
8082
      spkgversion   IN   VARCHAR2,
8083
      rtagid        IN   NUMBER,
8084
      username      IN   VARCHAR2
1373 dpurdie 8085
   )
3959 dpurdie 8086
      RETURN NUMBER
1373 dpurdie 8087
   IS
3959 dpurdie 8088
      userid              NUMBER;
8089
      outerrcode          NUMBER;
8090
      pkgid               NUMBER;
8091
 
8092
      CURSOR dnr_duplicate_cur
8093
      IS
8094
         SELECT *
8095
           FROM do_not_ripple
8096
          WHERE pv_id = pvid AND rtag_id = rtagid;
8097
 
8098
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
1373 dpurdie 8099
   BEGIN
3959 dpurdie 8100
      outerrcode := -1;       -- Set default return error code to ERROR state
8101
 
8102
      /*--------------- Business Rules Here -------------------*/
8103
      IF (rtagid IS NULL)
1373 dpurdie 8104
      THEN
3959 dpurdie 8105
         RETURN outerrcode;
8106
--         raise_application_error (-20000, 'RtagId must be supplied.');
8107
      END IF;
8108
 
8109
      IF (pvid IS NULL)
1373 dpurdie 8110
      THEN
3959 dpurdie 8111
         RETURN outerrcode;
8112
--         raise_application_error (-20000, 'PvId must be supplied.');
8113
      END IF;
8114
 
8115
      IF (username IS NULL)
1373 dpurdie 8116
      THEN
3959 dpurdie 8117
         RETURN outerrcode;
8118
--         raise_application_error (-20000, 'UserName must be supplied.');
8119
      END IF;
8120
 
8121
      -- Get user_id
8122
      BEGIN
8123
         SELECT usr.user_id
8124
           INTO userid
8125
           FROM users usr
8126
          WHERE UPPER (usr.user_name) = UPPER (username)
8127
            AND usr.is_disabled IS NULL;
8128
      EXCEPTION
8129
         WHEN NO_DATA_FOUND
8130
         THEN
8131
            RETURN outerrcode;
8132
--            raise_application_error (-20000,
8133
--                                        'UserName '
8134
--                                     || username
8135
--                                     || ' is not valid or disabled.'
8136
--                                    );
8137
      END;
8138
 
8139
      OPEN dnr_duplicate_cur;
8140
 
8141
      FETCH dnr_duplicate_cur
8142
       INTO dnr_duplicate_rec;
8143
 
8144
      IF dnr_duplicate_cur%FOUND
1373 dpurdie 8145
      THEN
3959 dpurdie 8146
         outerrcode := 0;
1373 dpurdie 8147
      END IF;
3959 dpurdie 8148
 
8149
      IF dnr_duplicate_cur%NOTFOUND
8150
      THEN
8151
         /* No duplicate recordset */
8152
         unripple_package (pvid, rtagid, userid);
8153
         outerrcode := 0;                            -- Set return to SUCCESS
8154
      END IF;
8155
 
8156
      CLOSE dnr_duplicate_cur;
8157
 
8158
      SELECT pkg_id
8159
        INTO pkgid
8160
        FROM package_versions
8161
       WHERE pv_id = pvid;
8162
 
8163
      DELETE FROM planned_versions
8164
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
8165
 
8166
      RETURN outerrcode;
1373 dpurdie 8167
   END;
8168
 
8169
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8170
   FUNCTION exclude_indirect_from_build (
8171
      pvid          IN   NUMBER,
8172
      spkgversion   IN   VARCHAR2,
8173
      rtagid        IN   NUMBER,
8174
      username      IN   VARCHAR2,
8175
      rootpvid      IN   NUMBER,
8176
      rootcause     IN   VARCHAR2,
8177
      rootfile      IN   VARCHAR2
1373 dpurdie 8178
   )
3959 dpurdie 8179
      RETURN NUMBER
1373 dpurdie 8180
   IS
3959 dpurdie 8181
      userid              NUMBER;
8182
      outerrcode          NUMBER;
8183
      pkgid               NUMBER;
8184
 
8185
      CURSOR dnr_duplicate_cur
8186
      IS
8187
         SELECT *
8188
           FROM do_not_ripple
8189
          WHERE pv_id = pvid AND rtag_id = rtagid;
8190
 
8191
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
1373 dpurdie 8192
   BEGIN
3959 dpurdie 8193
      outerrcode := -1;       -- Set default return error code to ERROR state
8194
 
8195
      /*--------------- Business Rules Here -------------------*/
8196
      IF (rtagid IS NULL)
1373 dpurdie 8197
      THEN
3959 dpurdie 8198
         RETURN outerrcode;
8199
--         raise_application_error (-20000, 'RtagId must be supplied.');
8200
      END IF;
8201
 
8202
      IF (pvid IS NULL)
1373 dpurdie 8203
      THEN
3959 dpurdie 8204
         RETURN outerrcode;
8205
--         raise_application_error (-20000, 'PvId must be supplied.');
8206
      END IF;
8207
 
8208
      IF (username IS NULL)
1373 dpurdie 8209
      THEN
3959 dpurdie 8210
         RETURN outerrcode;
8211
--         raise_application_error (-20000, 'UserName must be supplied.');
1373 dpurdie 8212
      END IF;
3959 dpurdie 8213
 
8214
      -- Get user_id
8215
      BEGIN
8216
         SELECT usr.user_id
8217
           INTO userid
8218
           FROM users usr
8219
          WHERE UPPER (usr.user_name) = UPPER (username)
8220
            AND usr.is_disabled IS NULL;
8221
      EXCEPTION
8222
         WHEN NO_DATA_FOUND
8223
         THEN
8224
            RETURN outerrcode;
8225
--            raise_application_error (-20000,
8226
--                                        'UserName '
8227
--                                     || username
8228
--                                     || ' is not valid or disabled.'
8229
--                                    );
8230
      END;
8231
 
8232
     /* No duplicate recordset */
8233
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
8234
     outerrcode := 0;                            -- Set return to SUCCESS
8235
 
8236
      SELECT pkg_id
8237
        INTO pkgid
8238
        FROM package_versions
8239
       WHERE pv_id = pvid;
8240
 
8241
      DELETE FROM planned_versions
8242
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
8243
 
8244
      RETURN outerrcode;
1373 dpurdie 8245
   END;
8246
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8247
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
1373 dpurdie 8248
   IS
8249
   BEGIN
3959 dpurdie 8250
      INSERT INTO abt_action_log
8251
                  (rcon_id, action_datetime, action
8252
                  )
8253
           VALUES (rconid, ora_sysdatetime, action
8254
                  );
1373 dpurdie 8255
   END;
8256
 
8257
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8258
   FUNCTION insert_package_metrics (
8259
      rtagid                   IN   NUMBER,
8260
      pkgname                  IN   VARCHAR2,
8261
      vext                     IN   VARCHAR2,
8262
      metricstring             IN   VARCHAR2
1373 dpurdie 8263
   )
3959 dpurdie 8264
      RETURN NUMBER
1373 dpurdie 8265
   IS
3959 dpurdie 8266
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
8267
      lv_pvid                  NUMBER                 := 0;
8268
      rownumber                NUMBER;
8269
      rowcontent               VARCHAR2(4000);
8270
      metricname               VARCHAR2(1000);
8271
      metricvalue              VARCHAR2(4000);
8272
      return_insert_error      NUMBER                 := -1;
8273
      return_insert_success    NUMBER                 := 0;
8274
 
8275
      /* Metrics */
8276
      lv_branches                 NUMBER;
8277
      lv_branchlist               VARCHAR2(4000);
8278
      lv_codefiles                NUMBER;
8279
      lv_ignoredfiles             NUMBER;
8280
      lv_directories              NUMBER;
8281
      lv_directorydepth           NUMBER;
8282
      lv_totalfiles               NUMBER;
8283
      lv_makefiles                NUMBER;
8284
      lv_blanklines               NUMBER;
8285
      lv_codelines                NUMBER;
8286
      lv_commentlines             NUMBER;
8287
 
1373 dpurdie 8288
   BEGIN
3959 dpurdie 8289
      /*--------------- Business Rules Here -------------------*/
8290
      IF (rtagid IS NULL)
8291
      THEN
8292
         RETURN return_insert_error;
8293
      END IF;
1373 dpurdie 8294
 
3959 dpurdie 8295
      IF (pkgname IS NULL)
8296
      THEN
8297
         RETURN return_insert_error;
8298
      END IF;
8299
 
8300
      IF (metricstring IS NULL)
8301
      THEN
8302
         RETURN return_insert_error;
8303
      END IF;
8304
 
8305
      BEGIN
8306
         SELECT pv.pv_id
8307
           INTO lv_pvid
8308
           FROM package_versions pv, packages pkg, release_content rc
8309
          WHERE pv.pkg_id = pkg.pkg_id
8310
            AND rc.rtag_id = rtagid
8311
            AND pv.pv_id = rc.pv_id
8312
            AND pkg.pkg_name = pkgname
8313
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
8314
      EXCEPTION
8315
           WHEN NO_DATA_FOUND
8316
           THEN
8317
                lv_pvid := 0;
8318
      END;
8319
 
8320
      citemcollection := in_list_varchar2 (metricstring, ';');
8321
 
8322
      FOR rownumber IN 1 .. citemcollection.COUNT
8323
      LOOP
8324
         rowcontent := citemcollection(rownumber);
8325
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
8326
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
8327
 
8328
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
8329
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
8330
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
8331
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
8332
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
8333
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
8334
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
8335
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
8336
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
8337
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
8338
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
8339
         END IF;
8340
      END LOOP;
8341
 
8342
      IF (lv_pvid > 0)
8343
      THEN
8344
         -- Delete any existing entries for this package version to makes sure our data is untainted
8345
         DELETE FROM package_metrics pm
8346
         WHERE pm.pv_id = lv_pvid;
8347
 
8348
         -- Insert the new data into the metrics table
8349
         INSERT INTO package_metrics
8350
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
8351
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
8352
                     )
8353
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
8354
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
8355
                     );
8356
 
8357
         -- Now update the Release_Metrics Table
8358
         update_release_metrics(rtagid);
8359
 
8360
         RETURN return_insert_success;
8361
      ELSE
8362
         RETURN return_insert_error;
8363
      END IF;
1373 dpurdie 8364
   END;
8365
 
8366
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8367
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
1373 dpurdie 8368
   IS
3959 dpurdie 8369
      lv_totalpackages       NUMBER;
8370
      lv_autobuilt           NUMBER;
8371
      lv_linesofcode         NUMBER;
8372
      lv_unittested          NUMBER;
8373
      lv_autotested          NUMBER;
8374
      lv_numOfbranches       NUMBER;
8375
      lv_lastbuildtime       DATE;
1373 dpurdie 8376
   BEGIN
3959 dpurdie 8377
      IF (rtagid > 0)
8378
      THEN
8379
         -- Get the total number of packages in this release and the number of
8380
         -- those that are autobuilt
8381
         SELECT COUNT (DISTINCT rc.pv_id),
8382
                COUNT (DISTINCT autobuilt_qry.pv_id)
8383
           INTO lv_totalpackages, lv_autobuilt
8384
           FROM release_content rc,
8385
                package_versions pv,
8386
                (
8387
                 SELECT rc.pv_id
8388
                   FROM release_content rc,
8389
                        package_versions pv
8390
                  WHERE pv.is_autobuildable = 'Y'
8391
                    AND pv.pv_id = rc.pv_id
8392
                    AND rc.rtag_id = rtagid
8393
                ) autobuilt_qry
8394
          WHERE pv.pv_id = rc.pv_id
8395
            AND rc.rtag_id = rtagid
8396
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
1373 dpurdie 8397
 
3959 dpurdie 8398
         -- Get the build time of the last package built in this release and the
8399
         -- total number of lines of code
8400
         SELECT MAX(pm.created_stamp),
8401
                SUM(pm.code_lines)
8402
           INTO lv_lastbuildtime, lv_linesofcode
8403
           FROM package_metrics pm, release_content rc
8404
          WHERE pm.pv_id = rc.pv_id
8405
            AND rc.rtag_id = rtagid;
8406
 
8407
         -- Get the number of packages with unit tests in this release and the
8408
         -- number of those that are autotested
8409
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
8410
           FROM unit_tests ut,
8411
                release_content rc
8412
          WHERE ut.pv_id = rc.pv_id
8413
            AND rc.rtag_id = rtagid
8414
        AND ut.test_types_fk != 1;
8415
 
8416
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
8417
          FROM unit_tests ut,
8418
               release_content rc
8419
         WHERE ut.pv_id = rc.pv_id
8420
           AND rc.rtag_id = rtagid
8421
           AND ut.test_types_fk = 7;
8422
 
8423
 
8424
         -- Count the number of unique branches in the packages in this release.
8425
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
8426
--           FROM (
8427
--                SELECT pv_id,
8428
--                       regexp_substr(str, '[^,]+', 1, level) branch,
8429
--                       level lv,
8430
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
8431
--                  FROM (
8432
--                       SELECT pm.pv_id,
8433
--                              ','||pm.branch_list str
8434
--                         FROM package_metrics pm,
8435
--                              release_content rc
8436
--                        WHERE pm.pv_id = rc.pv_id
8437
--                          AND rc.rtag_id = rtagid
8438
--                       )
8439
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
8440
--                )
8441
--          WHERE lv != lg;
8442
 
8443
         UPDATE release_metrics rm
8444
            SET rm.total_packages = lv_totalpackages,
8445
                rm.autobuilt = lv_autobuilt,
8446
                rm.lines_of_code = lv_linesofcode,
8447
                rm.unit_tested = lv_unittested,
8448
                rm.autotested = lv_autotested,
8449
--                rm.branches = lv_numOfbranches,
8450
                rm.last_build_time = lv_lastbuildtime
8451
          WHERE rtag_id = rtagid;
8452
 
8453
         IF (SQL%ROWCOUNT = 0)
8454
         THEN
8455
            INSERT INTO release_metrics
8456
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
8457
                         autotested, last_build_time
8458
                        )
8459
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
8460
                         lv_autotested, lv_lastbuildtime
8461
                        );
8462
         END IF;
8463
--         IF (SQL%ROWCOUNT = 0)
8464
--         THEN
8465
--            INSERT INTO release_metrics
8466
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
8467
--                         autotested, branches, last_build_time
8468
--                        )
8469
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
8470
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
8471
--                        );
8472
--         END IF;
8473
--      ELSE
8474
--         raise_application_error (-20000, 'RtagId must be supplied.');
8475
      END IF;
1373 dpurdie 8476
   END;
8477
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8478
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
1373 dpurdie 8479
   IS
3959 dpurdie 8480
      vcstypeid    NUMBER;
8481
      vcstag       VARCHAR2(32);
8482
      label        VARCHAR2(60);
8483
      srcpath      VARCHAR2(2000);
8484
      vcstypeid_cc NUMBER;
8485
      vcstypeid_uc NUMBER;
1373 dpurdie 8486
   BEGIN
3959 dpurdie 8487
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
8488
      -- what the primary key value is for the ClearCase VCS entry.
8489
      BEGIN
8490
         SELECT vt.vcs_type_id
8491
         INTO vcstypeid_cc
8492
         FROM VCS_TYPE vt
8493
         WHERE vt.tag = 'CC';
8494
         EXCEPTION
8495
            WHEN NO_DATA_FOUND THEN
8496
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
8497
      END;
1373 dpurdie 8498
 
3959 dpurdie 8499
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
8500
      -- what the primary key value is for the Uncontrolled VCS entry.
8501
      BEGIN
8502
         SELECT vt.vcs_type_id
8503
         INTO vcstypeid_uc
8504
         FROM VCS_TYPE vt
8505
         WHERE vt.tag = 'UC';
8506
         EXCEPTION
8507
            WHEN NO_DATA_FOUND THEN
8508
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
8509
      END;
8510
 
8511
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
8512
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
8513
      BEGIN
8514
         SELECT pv.pkg_label, pv.src_path,
8515
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
8516
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
8517
                 ELSE pv.vcs_type_id END) AS vcs_type_id
8518
         INTO label, srcpath, vcstypeid
8519
         FROM PACKAGE_VERSIONS pv
8520
         WHERE pv.pv_id = pvid;
8521
         EXCEPTION
8522
            WHEN NO_DATA_FOUND THEN
8523
               raise_application_error (-20000, 'Package Version Not Found!');
8524
      END;
8525
 
8526
      -- Get the VCS TAG for the VCS_TYPE_ID.
8527
      BEGIN
8528
         SELECT vt.tag
8529
         INTO vcstag
8530
         FROM VCS_TYPE vt
8531
         WHERE vt.vcs_type_id = vcstypeid;
8532
         EXCEPTION
8533
            WHEN NO_DATA_FOUND THEN
8534
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
8535
      END;
8536
 
8537
      -- Return value depending upon which VCS Tag is being used.
8538
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
8539
      CASE vcstag
8540
         WHEN 'CC' THEN
8541
            RETURN vcstag || '::' || srcpath || '::' || label;
8542
         WHEN 'SVN' THEN
8543
            RETURN vcstag || '::' || srcpath || '::' || label;
8544
         ELSE
8545
            RETURN vcstag || '::';
8546
      END CASE;
8547
 
1373 dpurdie 8548
   END;
3959 dpurdie 8549
/*-------------------------------------------------------------------------------------------------------*/
1373 dpurdie 8550
 
3959 dpurdie 8551
/*-------------------------------------------------------------------------------------------------------
8552
Name:        update_vcs_details
8553
Description: Updates the Version Control System (vcs) details specified in the vcstag
8554
             parameter for the specified package version.
8555
             The specified package vcstag is parsed and split into 3 fields:
8556
                vcs type, src path, label
8557
             These fields are then stored for the specified pv_id in the package_versions, table.
8558
             An action is recorded in the action log and provides information for tracking and
8559
             for restoring the previous vcs settings if a recovery is required.
8560
Paramters:
8561
             ipv_id:     Package version identifier
8562
             vcstag:     Full version control tag.
8563
                         Examples:
8564
                             "SVN::AUPERASVN01/DPG_SWBase/tools/trunk::daf_tools_25.1.7027.cr@1234"
8565
                            "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
8566
             user_id:    Identifier of the user that is performing this function.
8567
*/
8568
PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)
1373 dpurdie 8569
   IS
3959 dpurdie 8570
      ivcs_type_id   NUMBER;
8571
      svcs_type      VARCHAR2(128);
8572
      ssrc_path      VARCHAR2(512);
8573
      spkg_label     VARCHAR2(512);
8574
      spattern       VARCHAR2(64);
8575
      saction_desc   VARCHAR2(2048);
8576
      old_vcs_type   VARCHAR2(128);
8577
      old_src_path   VARCHAR2(512);
8578
      old_pkg_label  VARCHAR2(512);
8579
      old_pkg_vcstag VARCHAR2(1024);
8580
      i              NUMBER;
8581
      vcount         NUMBER;
1373 dpurdie 8582
   BEGIN
3959 dpurdie 8583
     -- Split vcs tag into fields: vcs type, src path, label
8584
     -- Fields are separated by '::'
8585
     -- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
8586
     -- The below regular expression pattern has groups to achieve this.
1373 dpurdie 8587
 
3959 dpurdie 8588
     spattern:= '^([^:]*)::([^:]*)(::(.*))?$';
8589
 
8590
     --As Oracle 10g does not allow REGEXP_SUBSTR to return a group,
8591
     --REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).
8592
     SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type  FROM DUAL;
8593
     SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path  FROM DUAL;
8594
     SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;
8595
 
8596
     -- Validate vcs type
8597
     BEGIN
8598
       SELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);
8599
     EXCEPTION
8600
       WHEN NO_DATA_FOUND THEN
8601
         raise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
8602
       --RAISE;
8603
     END;
8604
 
8605
     -- If Clearcase
8606
     IF (ivcs_type_id = 2) THEN
8607
       -- Validate source path
8608
       IF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THEN
8609
         raise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
8610
       END IF;
8611
 
8612
       -- Validate label
8613
       -- For clearcase the label must be specified. For subversion it is not required.
8614
       IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THEN
8615
         raise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
8616
       END IF;
8617
 
8618
     -- if Subversion
8619
     ELSIF (ivcs_type_id = 23) THEN
8620
       -- general validity
8621
       -- Not as picky as the RM Data entry
8622
       IF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))+$','i') THEN
8623
         raise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
8624
       END IF;
8625
 
8626
       -- Validate Tag
8627
       -- May be a Peg or a Label
8628
       IF NOT REGEXP_LIKE(spkg_label,'^@?[0-9]+$','i') THEN
8629
           IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+($|@[0-9]+)','i') THEN
8630
             raise_application_error (-20000, 'Invalid SVN tag:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
8631
           END IF;
8632
       END IF;
8633
 
8634
        -- Check for suitable ending
8635
        IF NOT REGEXP_LIKE(ssrc_path,'(\/tags$)|(\/branches\/)|(\/trunk$)','i') THEN
8636
            raise_application_error (-20000, 'Must end in /trunk or /tags/ or /branches/.... Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
8637
        END IF;
8638
 
8639
       -- Check for combined use of tags, branches, trunk or repeats of each
8640
       -- Count occurrences of /tags or /branches/ or /trunk
8641
       vcount:=0;
8642
       i:=1;
8643
       WHILE i > 0 LOOP
8644
         i:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk(\/|$))',i,1,1,'i');
8645
         IF i > 0 THEN
8646
           -- if found then increment count
8647
           vcount:=vcount+1;
8648
           i:=i-1;  -- move index back to "/"
8649
         END IF;
8650
       END LOOP;
8651
 
8652
       IF vcount = 0  THEN
8653
         raise_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 || '"');
8654
       END IF;
8655
 
8656
       IF vcount > 1  THEN
8657
         raise_application_error (-20000, 'Combined use of /trunk, /tags, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
8658
       END IF;
8659
 
8660
 
8661
     END IF;
8662
 
8663
     BEGIN
8664
       -- Get current vcs tag for specified package version
8665
       SELECT pv.src_path, pv.pkg_label, vc.tag as vcs_type
8666
       INTO old_src_path, old_pkg_label, old_vcs_type
8667
       FROM package_versions pv, vcs_type vc
8668
       WHERE pv.pv_id = ipv_id
8669
       AND pv.vcs_type_id = vc.vcs_type_id (+);
8670
 
8671
     EXCEPTION
8672
       WHEN NO_DATA_FOUND THEN
8673
         raise_application_error (-20000, 'Package version not found: ' || ipv_id);
8674
     END;
8675
 
8676
     old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;
8677
     IF (old_pkg_label IS NOT NULL) THEN
8678
       old_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;
8679
     END IF;
8680
 
8681
     -- Create action description
8682
     -- This description will contain the old and new tags.
8683
     -- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.
8684
     -- An example of the action description is below:
8685
     --   OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr
8686
     saction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;
8687
 
8688
     -- Store new vcs details
8689
     UPDATE package_versions SET
8690
       src_path = ssrc_path,
8691
       pkg_label = spkg_label,
8692
       vcs_type_id = ivcs_type_id
8693
     WHERE
8694
       pv_id = ipv_id;
8695
 
8696
     -- Store action in action log so that we can back track and also restore vcs settings if required.
8697
     log_action (ipv_id,'VcsConversion',user_id,saction_desc);
8698
 
8699
   END update_vcs_details;
8700
 
8701
/*-------------------------------------------------------------------------------------------------------
8702
Name:        isSVN
8703
Description: Determine if any of the packages versions are controlled under SVN
8704
			 Intended to be used to prevent users from releasing a package
8705
			 that has been migrated to SVN
8706
 
8707
Paramters:	pkgid:     Package ID
8708
 
8709
Returns:	Number of versions under SVN version control
8710
*/
8711
 
8712
FUNCTION isSVN( pkgid IN NUMBER )
8713
    RETURN NUMBER
8714
    IS
8715
    svncount   NUMBER  := 0;
8716
   BEGIN
8717
        SELECT COUNT(*) INTO svncount FROM PACKAGE_VERSIONS pv WHERE pv.PKG_ID = pkgid AND pv.VCS_TYPE_ID = 23;
8718
        RETURN (svncount);
1373 dpurdie 8719
   END;
3959 dpurdie 8720
 
8721
/*-------------------------------------------------------------------------------------------------------
8722
Name:        isSVNbyName
8723
Description: Determine if any of the packages versions are controlled under SVN
8724
			 Intended to be used to prevent users from releasing a package
8725
			 that has been migrated to SVN
8726
 
8727
Paramters:	pkgname:	Package Name
8728
 
8729
Returns:	Number of versions under SVN version control
8730
*/
8731
 
8732
FUNCTION isSVNbyName( pkgname IN VARCHAR2 ) 
8733
    RETURN NUMBER
8734
IS
8735
   svncount   NUMBER  := 0;
8736
   BEGIN
8737
        SELECT COUNT(*) INTO svncount FROM PACKAGE_VERSIONS pv, PACKAGES pkg WHERE pkg.pkg_name = pkgname AND pv.PKG_ID = pkg.pkg_id AND pv.VCS_TYPE_ID = 23;
8738
        RETURN (svncount);
8739
   END;
8740
 
8741
   END;
1374 dpurdie 8742
/
8743
--------------------------------------------------------
3959 dpurdie 8744
--  DDL for Package Body PK_WORK_IN_PROGRESS
1374 dpurdie 8745
--------------------------------------------------------
1373 dpurdie 8746
 
3959 dpurdie 8747
  CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS
1373 dpurdie 8748
 
8749
/*
8750
------------------------------
8751
||  Last Modified:  S.Vukovic
3959 dpurdie 8752
||  Modified Date:  2/May/2005
1373 dpurdie 8753
||  Body Version:   1.0
8754
------------------------------
8755
*/
8756
 
8757
 
8758
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8759
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 8760
 
3959 dpurdie 8761
	oldPvId NUMBER;
8762
	ReleaseLocation VARCHAR2(4000);
8763
	sLocation VARCHAR2(4000) := NULL;
1373 dpurdie 8764
 
3959 dpurdie 8765
 
1373 dpurdie 8766
BEGIN
8767
	/*--------------- Business Rules Here -------------------*/
3959 dpurdie 8768
	/*-------------------------------------------------------*/
1373 dpurdie 8769
 
3959 dpurdie 8770
	BEGIN
8771
		-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
8772
		SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
8773
		  FROM WORK_IN_PROGRESS wip,
8774
		  	   RELEASE_TAGS rt,
8775
			   PROJECTS proj
8776
		 WHERE wip.PV_ID = newPvId
8777
		   AND wip.RTAG_ID = rt.RTAG_ID
8778
		   AND rt.OFFICIAL != 'Y'
8779
		   AND rt.PROJ_ID = proj.PROJ_ID;
1373 dpurdie 8780
 
3959 dpurdie 8781
		EXCEPTION
8782
	    	WHEN NO_DATA_FOUND THEN
8783
	       		sLocation := NULL;
8784
 
8785
	END;	   	   
1373 dpurdie 8786
 
8787
 
8788
 
3959 dpurdie 8789
	IF (sLocation IS NULL)  THEN
1373 dpurdie 8790
 
3959 dpurdie 8791
		-- Add to "Work in progress"
8792
		INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
8793
		VALUES( RtagId, newPvId, ViewId );
8794
 
8795
 
8796
	    /* LOG ACTION */
8797
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
8798
		  FROM PROJECTS proj,
8799
		  	   RELEASE_TAGS rt
8800
		 WHERE rt.PROJ_ID = proj.PROJ_ID
8801
		   AND rt.RTAG_ID = RtagId;
8802
 
8803
		Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );
8804
 
8805
	ELSE
8806
 
8807
		RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
8808
 
1373 dpurdie 8809
	END IF;
8810
 
3959 dpurdie 8811
END;
8812
/*-------------------------------------------------------------------------------------------------------*/
8813
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 8814
 
3959 dpurdie 8815
	ReleaseLocation VARCHAR2(4000);
1373 dpurdie 8816
 
3959 dpurdie 8817
BEGIN
8818
 
8819
	/*--------------- Business Rules Here -------------------*/
1373 dpurdie 8820
	/*-------------------------------------------------------*/
8821
 
8822
 
3959 dpurdie 8823
	-- Get release location for logging pusposes
8824
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
8825
	  FROM PROJECTS proj,
8826
	  	   RELEASE_TAGS rt
8827
	 WHERE rt.PROJ_ID = proj.PROJ_ID
8828
	   AND rt.RTAG_ID = RtagId;
1373 dpurdie 8829
 
8830
 
3959 dpurdie 8831
	-- Delete from Work In Progress
8832
	DELETE
8833
	  FROM WORK_IN_PROGRESS wip
8834
	 WHERE wip.RTAG_ID = RtagId
8835
	   AND wip.PV_ID = PvId;
1373 dpurdie 8836
 
3959 dpurdie 8837
	Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );
1373 dpurdie 8838
 
3959 dpurdie 8839
 
8840
 
8841
 
1373 dpurdie 8842
END;
8843
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8844
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS
1373 dpurdie 8845
 
3959 dpurdie 8846
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
8847
	ReleaseLocation VARCHAR2(4000);
8848
	PvId NUMBER;
1373 dpurdie 8849
 
8850
BEGIN
3959 dpurdie 8851
 
1373 dpurdie 8852
	/*--------------- Business Rules Here -------------------*/
3959 dpurdie 8853
	IF (PvIdList IS NULL)
8854
	THEN
8855
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
8856
	END IF;
1373 dpurdie 8857
	/*-------------------------------------------------------*/
8858
 
8859
 
3959 dpurdie 8860
	nIdCollector := IN_LIST_NUMBER ( PvIdList );
1373 dpurdie 8861
 
8862
 
3959 dpurdie 8863
	-- Get release location for logging pusposes
8864
	SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
8865
	  FROM PROJECTS proj,
8866
	  	   RELEASE_TAGS rt
8867
	 WHERE rt.PROJ_ID = proj.PROJ_ID
8868
	   AND rt.RTAG_ID = RtagId;
1373 dpurdie 8869
 
3959 dpurdie 8870
 
8871
	FOR i IN 1..nIdCollector.COUNT
8872
	LOOP
8873
		PvId := nIdCollector(i);
8874
 
8875
		-- Delete from Work In Progress
8876
		DELETE
8877
		  FROM WORK_IN_PROGRESS wip
8878
		 WHERE wip.RTAG_ID = RtagId
8879
		   AND wip.PV_ID = PvId;
8880
 
8881
		Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );
8882
 
8883
	END LOOP;
8884
 
8885
 
1373 dpurdie 8886
END;
8887
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8888
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
8889
 
8890
	ReturnValue NUMBER;
8891
 
1373 dpurdie 8892
BEGIN
3959 dpurdie 8893
	SELECT wip.VIEW_ID INTO ReturnValue
8894
	  FROM WORK_IN_PROGRESS wip
8895
	 WHERE wip.RTAG_ID = RtagId
8896
	   AND wip.PV_ID = PvId;
1373 dpurdie 8897
 
3959 dpurdie 8898
	RETURN ReturnValue;
1373 dpurdie 8899
END;
8900
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8901
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
8902
 
8903
	IsBaseView CHAR(1);
8904
 
1373 dpurdie 8905
BEGIN
8906
 
3959 dpurdie 8907
	-- Check if the view is BASE VIEW
8908
	SELECT vi.BASE_VIEW INTO IsBaseView
8909
	  FROM VIEWS vi
8910
	 WHERE vi.VIEW_ID = ViewId;
8911
 
8912
	IF (IsBaseView = 'Y') THEN 
8913
		-- Get Base view content
8914
		OPEN RecordSet FOR
8915
		SELECT 0 AS PKG_STATE,
8916
			   NULL AS DEPRECATED_STATE,
8917
			   pv.pv_id, 
8918
			   pkg.pkg_name, 
8919
			   pv.pkg_version, 
8920
			   pv.dlocked, 
8921
			   pv.pv_description,
8922
			   pv.BUILD_TYPE
8923
		  FROM WORK_IN_PROGRESS rel,
8924
		       packages pkg,
8925
		       package_versions pv
8926
		 WHERE pv.pkg_id = pkg.pkg_id
8927
		   AND rel.pv_id = pv.pv_id
8928
		   AND rel.VIEW_ID = ViewId
8929
		   AND rel.RTAG_ID = RtagId
8930
		 ORDER BY UPPER(pkg.PKG_NAME);
8931
 
1373 dpurdie 8932
 
3959 dpurdie 8933
	ELSE	 
1373 dpurdie 8934
 
3959 dpurdie 8935
	 	-- Get non base view content
8936
		OPEN RecordSet FOR
8937
		SELECT 0 AS PKG_STATE,
8938
			   NULL AS DEPRECATED_STATE,
8939
			   pv.pv_id, 
8940
			   pkg.pkg_name, 
8941
			   pv.pkg_version, 
8942
			   pv.dlocked, 
8943
			   pv.pv_description,
8944
			   pv.BUILD_TYPE
8945
		  FROM WORK_IN_PROGRESS rel,
8946
		       packages pkg,
8947
		       package_versions pv,
8948
			   VIEW_DEF vd
8949
		 WHERE pv.pkg_id = pkg.pkg_id
8950
		   AND rel.pv_id = pv.pv_id
8951
		   AND vd.VIEW_ID = ViewId
8952
		   AND vd.PKG_ID = pv.PKG_ID
8953
		   AND rel.RTAG_ID = RtagId
8954
		 ORDER BY UPPER(pkg.PKG_NAME);
1373 dpurdie 8955
 
3959 dpurdie 8956
 
8957
	END IF;	 	
8958
 
8959
 
1373 dpurdie 8960
END;
8961
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8962
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
8963
 
1373 dpurdie 8964
BEGIN
8965
 
3959 dpurdie 8966
	UPDATE WORK_IN_PROGRESS wip SET
8967
	wip.VIEW_ID = NewViewId
8968
	WHERE wip.PV_ID = PvId
8969
	  AND wip.RTAG_ID = RtagId;
8970
 
1373 dpurdie 8971
END;
8972
/*-------------------------------------------------------------------------------------------------------*/
3959 dpurdie 8973
END PK_WORK_IN_PROGRESS;
8974
/
8975
--------------------------------------------------------
8976
--  DDL for Package Body RM_ISSUES
8977
--------------------------------------------------------
1373 dpurdie 8978
 
3959 dpurdie 8979
  CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS
1373 dpurdie 8980
 
3959 dpurdie 8981
-- Private Implementation -----------------------------------------------------
1373 dpurdie 8982
 
8983
 
3959 dpurdie 8984
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
8985
	AS
1373 dpurdie 8986
 
3959 dpurdie 8987
	BEGIN
8988
		-- start boundary case
8989
		IF ( XXstart < XX ) THEN
8990
			RETURN 1;
1373 dpurdie 8991
 
3959 dpurdie 8992
		ELSIF ( XXstart = XX ) THEN
1373 dpurdie 8993
 
3959 dpurdie 8994
			-- need to consider YY
8995
			IF ( YYstart < YY ) THEN
8996
				RETURN 1;
1373 dpurdie 8997
 
3959 dpurdie 8998
			ELSIF ( YYstart = YY ) THEN
1373 dpurdie 8999
 
3959 dpurdie 9000
					-- need to consider ZZ
9001
					IF ( ZZstart <= ZZ ) THEN
9002
						RETURN 1;
9003
 
9004
					ELSE
9005
						RETURN 0;
9006
					END IF;
9007
 
9008
			ELSE
9009
				RETURN 0;
9010
			END IF;
9011
		ELSE
9012
			RETURN 0;
9013
		END IF;
9014
	EXCEPTION
9015
		WHEN OTHERS THEN
9016
			RETURN -1;
9017
	END;
9018
 
9019
 
9020
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
9021
	AS
9022
 
9023
	BEGIN
9024
		-- end boundary case
9025
		IF ( XX < XXend ) THEN
9026
			RETURN 1;
9027
 
9028
		ELSIF ( XX = XXend ) THEN
9029
 
9030
			-- need to consider YY
9031
			IF ( YY < YYend ) THEN
9032
				RETURN 1;
9033
 
9034
			ELSIF ( YY = YYend ) THEN
9035
 
9036
					-- need to consider ZZ
9037
					IF ( ZZ <= ZZend ) THEN
9038
						RETURN 1;
9039
 
9040
					ELSE
9041
						RETURN 0;
9042
					END IF;
9043
			ELSE
9044
 
9045
				RETURN 0;
9046
			END IF;
9047
		ELSE
9048
			RETURN 0;
9049
		END IF;
9050
	EXCEPTION
9051
		WHEN OTHERS THEN
9052
			RETURN -1;
9053
	END;
9054
 
9055
	/*
9056
	-	version format:		XX.YY.ZZ.abc
9057
	*/
9058
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER
9059
	AS
9060
		XXstart		NUMBER	:=	0;
9061
		XXend		NUMBER	:=	0;
9062
		XX			NUMBER	:=	0;
9063
		YYstart		NUMBER	:=	0;
9064
		YYend		NUMBER	:=	0;
9065
		YY			NUMBER	:=	0;
9066
		ZZstart		NUMBER	:=	0;
9067
		ZZend		NUMBER	:=	0;
9068
		ZZ			NUMBER	:=	0;
9069
		first_dot	NUMBER	:=	0;
9070
		second_dot	NUMBER	:=	0;
9071
		third_dot	NUMBER	:=	0;
9072
 
9073
		ProjExtstart	VARCHAR2(10);
9074
		ProjExtend		VARCHAR2(10);
9075
		ProjExt			VARCHAR2(10);
9076
 
9077
	BEGIN
9078
		-- strip the version number
9079
		first_dot :=  INSTR(version_start, '.', 1, 1);
9080
		second_dot :=  INSTR(version_start, '.', 1, 2);
9081
		third_dot :=  INSTR(version_start, '.', 1, 3);
9082
 
9083
		XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );
9084
		YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
9085
		ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
9086
		ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );
9087
 
9088
		first_dot :=  INSTR(version_end, '.', 1, 1);
9089
		second_dot :=  INSTR(version_end, '.', 1, 2);
9090
		third_dot :=  INSTR(version_end, '.', 1, 3);
9091
 
9092
		XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );
9093
		YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
9094
		ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
9095
		ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );
9096
 
9097
		first_dot :=  INSTR(version, '.', 1, 1);
9098
		second_dot :=  INSTR(version, '.', 1, 2);
9099
		third_dot :=  INSTR(version, '.', 1, 3);
9100
 
9101
		XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );
9102
		YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
9103
		ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
9104
		ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );
9105
 
9106
		-- only include versions if all project extensions are the same
9107
		IF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THEN
9108
 
9109
			IF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THEN
9110
				RETURN 1;
9111
			ELSE
9112
				RETURN 0;
9113
			END IF;
9114
		ELSE
9115
			RETURN 0;
9116
		END IF;
9117
 
9118
	EXCEPTION
9119
		WHEN OTHERS THEN
9120
			RETURN -1;
9121
	END;
9122
 
9123
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER
9124
	AS
9125
	    pkg_id NUMBER;
9126
	BEGIN
9127
		SELECT
9128
			p.PKG_ID
9129
		INTO
9130
			pkg_id
9131
		FROM
9132
			PACKAGES p
9133
		WHERE
9134
			p.PKG_NAME = pkgName;
9135
 
9136
		RETURN pkg_id;
9137
	EXCEPTION
9138
	    WHEN OTHERS THEN
9139
			dbms_output.put_line('GetPkgId exception: ' || SQLERRM );
9140
			RETURN -1;
9141
	END;
9142
 
9143
 
9144
-- Public Implementation ------------------------------------------------------
9145
 
9146
	/*
9147
	-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep
9148
	--
9149
	-- INPUT PARAMETERS:
9150
	--
9151
	--		pkg_name  	-  	The name of the top level package to get issues for
9152
	--		version_start	-	The start version for the comparison
9153
	--		version_end	-	The end version for the comparison
9154
	*/
9155
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
9156
	AS
9157
		pkgId	NUMBER;
9158
	BEGIN
9159
		-- get pkg_id of the input package:
9160
		pkgId := GetPkgId( pkg_name );
9161
 
9162
		OPEN vCursor FOR
9163
		SELECT
9164
			  pv.PKG_ID,
9165
			  pv.PKG_VERSION,
9166
			  pv.PV_ID,
9167
			  i_pkg.ISS_ID,
9168
			  ( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,
9169
			  pd.DPKG_ID,
9170
			  ( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,
9171
			  pd.DPV_ID,
9172
			  i_dpkg.ISS_ID AS ISSUE_ID
9173
		FROM
9174
			 PACKAGE_VERSIONS pv
9175
							  LEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_ID
9176
							  LEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_ID
9177
							  LEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_ID
9178
		WHERE
9179
   			 pv.PKG_ID = pkgId
9180
		AND
9181
			VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1
9182
		AND
9183
			 ( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )
9184
		ORDER BY
9185
			 pv.PKG_ID,
9186
			 pv.PV_ID,
9187
			 pd.DPKG_ID,
9188
			 pd.DPV_ID;
9189
	EXCEPTION
9190
		WHEN OTHERS THEN
9191
			dbms_output.put_line('AllIssues exception: ' || SQLERRM );
9192
	END;
9193
 
9194
 
9195
	-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok
9196
 
9197
	/*
9198
	-- Proc: LoadIssuesTable
9199
	--
9200
	-- Populates Package_Issues table with details of issues from all dependent packages.
9201
	-- This will be for all package versions of the input pkg_name between the
9202
	-- version_start and version_end.
9203
	--
9204
	-- INPUT PARAMETERS:
9205
	--
9206
	--		pkg_name  	-  	The name of the top level package to get issues for
9207
	--		version_start	-	The start version for the comparison
9208
	--		version_end	-	The end version for the comparison
9209
	*/
9210
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
9211
	AS
9212
		pkgId	NUMBER;
9213
 
9214
		CURSOR pack_vers_cur IS
9215
			SELECT
9216
				pv.PV_ID,
9217
				pv.PKG_VERSION,
9218
				pv.PKG_ID,
9219
				p.PKG_NAME
9220
			FROM
9221
				PACKAGE_VERSIONS pv
9222
					JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
9223
			WHERE
9224
   				 pv.PKG_ID = pkgId
9225
			AND
9226
				VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;
9227
 
9228
	BEGIN
9229
		DELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
9230
 
9231
		-- get the pkg_id we are finding issues for
9232
		pkgId := GetPkgId( pkg_name );
9233
 
9234
		-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.
9235
		FOR pack_ver_rec IN  pack_vers_cur
9236
		LOOP
9237
			InsertIssuesForDepends( 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 );
9238
			COMMIT;
9239
		END LOOP;
9240
 
9241
		-- The output cursor - shows the individual versions of the top level package then were reported on
9242
		OPEN vCursor FOR
9243
		SELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
9244
/*removed
9245
		SELECT
9246
			PKG_VERSION
9247
		FROM
9248
			RELEASE_MANAGER.RM_PACKAGE_ISSUES;
9249
*/
9250
 
9251
 
9252
	EXCEPTION
9253
		WHEN OTHERS THEN
9254
			dbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );
9255
	END;
9256
 
9257
 
9258
	/*
9259
	-- Proc: InsertIssuesForDepends
9260
	--
9261
	-- Used by LoadIssuesTable to recursively find issues for all dependent packages
9262
	--
9263
	-- INPUT PARAMETERS:
9264
	--
9265
	--		pvID  		-  	The package version id of the package to get issues for
9266
	--		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)
9267
	--		top_pkgName -  	The package name of the top level package
9268
	--		top_pvID  	-  	The package version id of the top level package
9269
	--		top_pkgVer  -  	The package version description of the top level package
9270
	*/
9271
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )
9272
	AS
9273
		pkgId		NUMBER;
9274
		issCnt		NUMBER := 0;
9275
		pkgCheck	NUMBER := 0;
9276
		depCheck	NUMBER := 0;
9277
 
9278
		dpkgName	VARCHAR(50);
9279
		dpkgVersion	VARCHAR(50);
9280
 
9281
		CURSOR dep_packs_cur IS
9282
			SELECT
9283
				DPV_ID
9284
			FROM
9285
				PACKAGE_DEPENDENCIES
9286
			WHERE
9287
				PV_ID = pvID;
9288
 
9289
	BEGIN
9290
 
9291
		-- check to see if the package has been processed previously
9292
		SELECT
9293
			COUNT(*)
9294
		INTO
9295
			pkgCheck
9296
		FROM
9297
			RM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
9298
		WHERE
9299
			DPV_ID = pvID;
9300
 
9301
		dbms_output.put_line('pkgCheck: ' || pkgCheck );
9302
 
9303
		-- Package not already processed (no cyclic dependency) - process it
9304
		IF ( pkgCheck = 0 ) THEN
9305
 
9306
			-- check to see if this package version has any issues assigned to it
9307
			SELECT
9308
				COUNT(*)
9309
			INTO
9310
				issCnt
9311
			FROM
9312
				CQ_ISSUES i
9313
			WHERE
9314
				i.PV_ID = pvID;
9315
 
9316
			dbms_output.put_line('issCnt: ' || issCnt );
9317
 
9318
			-- Always enter a marker row into the table even if there are no issues for the package.
9319
			-- This allows us to pick up any cyclic dependencies.
9320
			IF ( issCnt > 0 ) THEN
9321
				-- get issues and insert into RM_PACKAGE_ISSUES
9322
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
9323
 
9324
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
9325
					SELECT DISTINCT
9326
						top_pkgID		AS PKG_ID,
9327
						top_pkgName		AS PKG_NAME,
9328
						top_pvID		AS PV_ID,
9329
						top_pkgVer		AS PKG_VERSION,
9330
						pv.PV_ID		AS DPV_ID,
9331
						p.PKG_NAME		AS DPKG_NAME,
9332
						pv.PKG_VERSION	AS DPKG_VERSION,
9333
						ci.ISS_DB,
9334
						ci.ISS_ID
9335
					FROM
9336
						PACKAGE_VERSIONS pv
9337
							JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
9338
							JOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_ID
9339
					WHERE
9340
						pv.PV_ID = pvID;
9341
 
9342
			ELSE
9343
				-- get the dpkg details - there will always be a row returned here
9344
				SELECT
9345
					p.PKG_NAME
9346
				INTO
9347
					dpkgName
9348
				FROM
9349
					PACKAGE_VERSIONS pv
9350
						JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
9351
				WHERE
9352
	   				 pv.PV_ID = pvID;
9353
 
9354
				SELECT
9355
					pv.PKG_VERSION
9356
				INTO
9357
					dpkgVersion
9358
				FROM
9359
					PACKAGE_VERSIONS pv
9360
				WHERE
9361
	   				 pv.PV_ID = pvID;
9362
 
9363
				-- enter a marker row
9364
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
9365
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
9366
				VALUES (
9367
					top_pkgID,
9368
					top_pkgName,
9369
					top_pvID,
9370
					top_pkgVer,
9371
					pvID,
9372
					dpkgName,
9373
					dpkgVersion,
9374
					NULL,
9375
					NULL );
9376
 
9377
			END IF;
9378
 
9379
			-- If this package version has dependencies then recurse
9380
			SELECT
9381
				COUNT(*)
9382
			INTO
9383
				depCheck
9384
			FROM
9385
				PACKAGE_DEPENDENCIES
9386
			WHERE
9387
				PV_ID = pvID;
9388
 
9389
			IF ( depCheck > 0 ) THEN
9390
				-- get dependencies and call this function recursively for each one
9391
				FOR dep_rec IN  dep_packs_cur
9392
				LOOP
9393
					InsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );
9394
				END LOOP;
9395
 
9396
			END IF;
9397
 
9398
		END IF;
9399
 
9400
	/*EXCEPTION
9401
		WHEN OTHERS THEN
9402
			no exception handling required
9403
	*/
9404
	END;
9405
 
9406
END Rm_Issues;
1374 dpurdie 9407
/
9408
--------------------------------------------------------
9409
--  DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO
9410
--------------------------------------------------------
1373 dpurdie 9411
 
9412
  CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (
9413
   nprojid     IN   NUMBER,
9414
   nviewid     IN   NUMBER,
9415
   suserlist   IN   VARCHAR2
9416
)
9417
IS
9418
   groupid   NUMBER;
9419
/******************************************************************************
9420
   NAME:       ADD_AUTOBUILD_FAILURE
9421
   PURPOSE:
9422
 
9423
   REVISIONS:
9424
   Ver        Date        Author           Description
9425
   ---------  ----------  ---------------  ------------------------------------
9426
   1.0        11/04/2006   Rupesh Solanki Created this procedure.
9427
 
9428
   NOTES:
9429
 
9430
   Automatically available Auto Replace Keywords:
9431
      Object Name:     ADD_AUTOBUILD_FAILURE
9432
      Sysdate:         11/04/2006
9433
      Date and Time:   11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AM
9434
      Username:         (set in TOAD Options, Procedure Editor)
9435
      Table Name:       (set in the "New PL/SQL Object" dialog)
9436
 
9437
******************************************************************************/
9438
BEGIN
9439
   BEGIN
9440
      SELECT group_email_id
9441
        INTO groupid
9442
        FROM autobuild_failure
9443
       WHERE proj_id = nprojid AND view_id = nviewid;
9444
   EXCEPTION
9445
      WHEN NO_DATA_FOUND
9446
      THEN
9447
         --  Create Next Sequence Id ---
9448
         SELECT seq_group_email_id.NEXTVAL
9449
           INTO groupid
9450
           FROM DUAL;
9451
 
9452
         INSERT INTO autobuild_failure
9453
                     (group_email_id, proj_id, view_id
9454
                     )
9455
              VALUES (groupid, nprojid, nviewid
9456
                     );
9457
   END;
9458
 
9459
   add_view_members (groupid, suserlist);
9460
END add_autobuild_failure_info;
1374 dpurdie 9461
/
9462
--------------------------------------------------------
3959 dpurdie 9463
--  DDL for Procedure ADD_COMPONENT
1374 dpurdie 9464
--------------------------------------------------------
1373 dpurdie 9465
 
3959 dpurdie 9466
  CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,
9467
	   	  		  						  	sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,
9468
											sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,
9469
											nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,
9470
											sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,
9471
											sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL
9472
                                           ) IS
9473
/* ---------------------------------------------------------------------------
9474
    Version: 3.0.0
9475
   --------------------------------------------------------------------------- */
1373 dpurdie 9476
 
9477
 
9478
BEGIN
9479
 
3959 dpurdie 9480
	 --- Insert into RELEASE_COMPONENTS
9481
	 INSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )
9482
	 VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc  );
1373 dpurdie 9483
 
9484
 
3959 dpurdie 9485
 
9486
 
9487
END Add_Component;
1374 dpurdie 9488
/
9489
--------------------------------------------------------
3959 dpurdie 9490
--  DDL for Procedure ADD_PACKAGE_INTEREST
1374 dpurdie 9491
--------------------------------------------------------
1373 dpurdie 9492
 
3959 dpurdie 9493
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
9494
	   	  		  								  nPkgIdList IN VARCHAR2,
9495
												  nUserId IN NUMBER
9496
	   	  		  								  ) IS
1373 dpurdie 9497
 
3959 dpurdie 9498
/******************************************************************************
9499
   NAME:       ADD_PACKAGE_INTEREST
9500
   PURPOSE:    
1373 dpurdie 9501
 
3959 dpurdie 9502
   REVISIONS:
9503
   Ver        Date        Author           Description
9504
   ---------  ----------  ---------------  ------------------------------------
9505
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
9506
 
9507
   NOTES:
9508
 
9509
   Automatically available Auto Replace Keywords:
9510
      Object Name:     ADD_PACKAGE_INTEREST
9511
      Sysdate:         12/05/2006
9512
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
9513
      Username:         (set in TOAD Options, Procedure Editor)
9514
      Table Name:       (set in the "New PL/SQL Object" dialog)
9515
 
9516
******************************************************************************/
9517
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
9518
   nPkgId NUMBER;
1373 dpurdie 9519
BEGIN
9520
 
3959 dpurdie 9521
	 npkgidcollector := in_list_number2 (nPkgIdList);
9522
 
9523
	FOR i IN 1..npkgidcollector.COUNT
9524
	LOOP
9525
		nPkgId := npkgidcollector(i);
1373 dpurdie 9526
 
3959 dpurdie 9527
	 --- Insert into PACKAGE_INTEREST TABLE
9528
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
9529
	 VALUES(nProjId, nPkgId, nUserId);
9530
	END LOOP;	 
9531
 
1373 dpurdie 9532
 
3959 dpurdie 9533
END ADD_PACKAGE_INTEREST;
9534
/
9535
--------------------------------------------------------
9536
--  DDL for Procedure ADD_PACKAGE_INTEREST_TEST
9537
--------------------------------------------------------
1373 dpurdie 9538
 
3959 dpurdie 9539
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
9540
	   	  		  								  nPkgIdList IN VARCHAR2,
9541
												  nUserId IN NUMBER
9542
	   	  		  								  ) IS
1373 dpurdie 9543
 
3959 dpurdie 9544
/******************************************************************************
9545
   NAME:       ADD_PACKAGE_INTEREST
9546
   PURPOSE:    
9547
 
9548
   REVISIONS:
9549
   Ver        Date        Author           Description
9550
   ---------  ----------  ---------------  ------------------------------------
9551
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
9552
 
9553
   NOTES:
9554
 
9555
   Automatically available Auto Replace Keywords:
9556
      Object Name:     ADD_PACKAGE_INTEREST
9557
      Sysdate:         12/05/2006
9558
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
9559
      Username:         (set in TOAD Options, Procedure Editor)
9560
      Table Name:       (set in the "New PL/SQL Object" dialog)
9561
 
9562
******************************************************************************/
9563
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
9564
   nPkgId NUMBER;
9565
BEGIN
9566
 
9567
	 npkgidcollector := in_list_number2 (nPkgIdList);
9568
 
9569
	FOR i IN 1..npkgidcollector.COUNT
9570
	LOOP
9571
		nPkgId := npkgidcollector(i);
9572
 
9573
	 --- Insert into PACKAGE_INTEREST TABLE
9574
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
9575
	 VALUES(nProjId, nPkgId, nUserId);
9576
	END LOOP;	 
9577
 
9578
 
9579
END ADD_PACKAGE_INTEREST_TEST;
1374 dpurdie 9580
/
9581
--------------------------------------------------------
3959 dpurdie 9582
--  DDL for Procedure ADD_RUNTIME_DEPENDENCY
1374 dpurdie 9583
--------------------------------------------------------
1373 dpurdie 9584
 
3959 dpurdie 9585
  CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,
9586
                                                     SSrtd_name IN PACKAGES.pkg_name%TYPE,
9587
                                                     SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
9588
                                                     NNuser_id IN NUMBER
9589
                                                    ) IS
1373 dpurdie 9590
/* ---------------------------------------------------------------------------
3959 dpurdie 9591
    Version: 3.1
1373 dpurdie 9592
   --------------------------------------------------------------------------- */
9593
 
3959 dpurdie 9594
    retRTD_ID NUMBER;
9595
 
9596
	CURSOR rtd_cur IS
9597
        SELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;
9598
    rtd_rec rtd_cur%ROWTYPE;
9599
 
1373 dpurdie 9600
BEGIN
3959 dpurdie 9601
    --- Seed database with package_name and version if required ---
9602
    Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );
1373 dpurdie 9603
 
3959 dpurdie 9604
	OPEN rtd_cur;
9605
    FETCH rtd_cur INTO rtd_rec;
1373 dpurdie 9606
 
3959 dpurdie 9607
    IF rtd_cur%NOTFOUND
9608
    THEN
9609
		/* Make sure it does not exists already as runtime dependency */
1373 dpurdie 9610
 
3959 dpurdie 9611
		--- Add new Runtime Dependency ---
9612
	    INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )
9613
	    VALUES (  NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );
1373 dpurdie 9614
 
3959 dpurdie 9615
    	/* LOG ACTION */
9616
        Log_Action ( NNpv_id, 'runtime_add', NNuser_id,
9617
    			     'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );
9618
 
9619
	END IF;
9620
 
9621
 
9622
END Add_Runtime_Dependency;
1374 dpurdie 9623
/
9624
--------------------------------------------------------
3959 dpurdie 9625
--  DDL for Procedure ADD_VIEW_MEMBERS
1374 dpurdie 9626
--------------------------------------------------------
1373 dpurdie 9627
 
3959 dpurdie 9628
  CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS
9629
 
9630
/******************************************************************************
9631
   NAME:       ADD_VIEW_MEMBERS
9632
   PURPOSE:    
9633
 
9634
   REVISIONS:
9635
   Ver        Date        Author           Description
9636
   ---------  ----------  ---------------  ------------------------------------
9637
   1.0        11/04/2006          1. Created this procedure.
9638
 
9639
   NOTES:
9640
 
9641
   Automatically available Auto Replace Keywords:
9642
      Object Name:     ADD_VIEW_MEMBERS
9643
      Sysdate:         11/04/2006
9644
      Date and Time:   11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AM
9645
      Username:         (set in TOAD Options, Procedure Editor)
9646
      Table Name:       (set in the "New PL/SQL Object" dialog)
9647
 
9648
******************************************************************************/
9649
CURSOR user_cur IS
9650
	SELECT u.USER_ID
9651
	  FROM USERS u
9652
	 WHERE u.USER_ID IN (
9653
	 	   			   	SELECT * 
9654
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
9655
						);
9656
user_rec user_cur%ROWTYPE;
9657
 
9658
 
9659
BEGIN
9660
 
9661
	 OPEN user_cur;
9662
	 FETCH user_cur INTO user_rec;
9663
 
9664
	 WHILE user_cur%FOUND
9665
	 LOOP
9666
	 	 INSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)
9667
	 	 VALUES ( nGroupId, user_rec.USER_ID);
9668
 
9669
	 	 FETCH user_cur INTO user_rec;	 
9670
	 END LOOP;	 
9671
 
9672
 
9673
 
9674
END ADD_VIEW_MEMBERS;
1374 dpurdie 9675
/
9676
--------------------------------------------------------
9677
--  DDL for Procedure BASIC_CLONE
9678
--------------------------------------------------------
1373 dpurdie 9679
 
9680
  CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,
9681
                        nTOpv_id IN NUMBER,
9682
                        nRtag_id IN NUMBER,
9683
                        nUser_id IN NUMBER,
9684
                        nTOpkg_id IN NUMBER DEFAULT NULL,
9685
                        enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) IS
9686
 
9687
   FromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
9688
   major NUMBER;
9689
   minor NUMBER;
9690
   patch NUMBER;
9691
   buildn NUMBER;
9692
   from_vcs_type_id NUMBER;
9693
BEGIN
9694
------------------------------ Version Control System ------------------------------------------
9695
   SELECT vcs_type_id
9696
      INTO from_vcs_type_id
9697
      FROM package_versions WHERE pv_id = nFROMpv_id;
9698
 
9699
   UPDATE package_versions
9700
      SET vcs_type_id = from_vcs_type_id
9701
      WHERE pv_id = nTOpv_id;
9702
------------------------------------- Limits ---------------------------------------------------
9703
   select major_limit, minor_limit, patch_limit, build_number_limit
9704
   into major, minor, patch, buildn
9705
   from package_versions where pv_id=nFROMpv_id;
9706
    UPDATE package_versions SET
9707
           major_limit = major,
9708
           minor_limit = minor,
9709
           patch_limit = patch,
9710
           build_number_limit = buildn
9711
     WHERE PV_ID = nTOpv_id;
9712
------------------------------------- Clone Dependencies ---------------------------------------------------
9713
   IF NOT nRtag_id IS NULL
9714
   THEN
9715
      -- Auto Update Dependencies --
9716
      INSERT INTO PACKAGE_DEPENDENCIES
9717
           SELECT nTOpv_id AS pv_id,
9718
                  DECODE(nUser_id,
9719
                         frc.modifier_id,
9720
                         frc.pv_id,
9721
                         DECODE(frc.dlocked,
9722
                                'Y',
9723
                                frc.pv_id,
9724
                                dep.dpv_id)
9725
                         ) AS dpv_id,
9726
                  nTOpkg_id AS pkg_id,
9727
                  dep.dpkg_id,
9728
                  dep.build_type,
9729
                  dep.display_order
9730
             FROM PACKAGE_DEPENDENCIES dep,
9731
                  PACKAGE_VERSIONS pv,
9732
                  (
9733
                  /* Full Release Contents used for reference*/
9734
                  SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlocked
9735
                  FROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpv
9736
                  WHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id
9737
                  ) frc
9738
            WHERE dep.pv_id = nFROMpv_id
9739
              AND dep.dpv_id = pv.pv_id
9740
              AND pv.pkg_id = frc.pkg_id(+)
9741
              AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);
9742
   ELSE
9743
      -- Clone Dependencies --
9744
      INSERT INTO PACKAGE_DEPENDENCIES
9745
           SELECT nTOpv_id         AS pv_id,
9746
                  dep.dpv_id,
9747
                  nTOpkg_id        AS pkg_id,
9748
                  dep.dpkg_id,
9749
                  dep.build_type,
9750
                  dep.display_order
9751
             FROM PACKAGE_DEPENDENCIES dep
9752
            WHERE dep.pv_id = nFROMpv_id;
9753
 
9754
   END IF;
9755
 
9756
----------------------------------------- Clone Issues -------------------------------------------------------
9757
   IF enumISSUES_STATE_IMPORTED IS NULL
9758
   THEN
9759
        /* All Issues */
9760
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
9761
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
9762
              FROM CQ_ISSUES
9763
             WHERE pv_id = nFROMpv_id;
9764
   ELSE
9765
       /* Outstanding Issues Only */
9766
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
9767
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
9768
              FROM CQ_ISSUES
9769
             WHERE pv_id = nFROMpv_id
9770
               AND iss_state = enumISSUES_STATE_IMPORTED;
9771
   END IF;
9772
 
9773
------------------------------------ Clone Runtime Dependencies -----------------------------------------------
9774
   INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)
9775
       SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user
9776
       FROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;
9777
 
9778
--------------------------------------- Clone Additional Notes ------------------------------------------------
9779
   INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )
9780
        SELECT an.NOTE_ID,
9781
               nTOpv_id AS PV_ID,
9782
               an.NOTE_TITLE,
9783
               an.NOTE_BODY,
9784
               an.MOD_DATE,
9785
               an.MOD_USER
9786
          FROM ADDITIONAL_NOTES an
9787
         WHERE an.PV_ID = nFROMpv_id;
9788
 
9789
-------------------------------------------- Clone Unit Tests -------------------------------------------------
9790
   -- Clone only Automatic unit tests --
9791
   INSERT INTO UNIT_TESTS (
9792
                           TEST_ID,
9793
                           PV_ID,
9794
                           TEST_TYPES_FK,
9795
                           TEST_SUMMARY,
9796
                           COMPLETION_DATE,
9797
                           COMPLETED_BY,
9798
                           RESULTS_URL,
9799
                           RESULTS_ATTACHMENT_NAME,
9800
                           NUMOF_TEST
9801
                          )
9802
        SELECT ut.TEST_ID,
9803
               nTOpv_id AS PV_ID,
9804
               ut.TEST_TYPES_FK,
9805
               ut.TEST_SUMMARY,
9806
               Ora_Sysdate AS COMPLETION_DATE,
9807
               nUser_id AS COMPLETED_BY,
9808
               ut.RESULTS_URL,
9809
               ut.RESULTS_ATTACHMENT_NAME,
9810
               ut.NUMOF_TEST
9811
          FROM UNIT_TESTS ut
9812
         WHERE ut.PV_ID = nFROMpv_id
9813
           AND ut.TEST_TYPES_FK IN ( 5, 7 );
9814
 
9815
    -- Clone only Interactive Unit Tests --
9816
    INSERT INTO UNIT_TESTS (
9817
                            TEST_ID,
9818
                            PV_ID,
9819
                            TEST_TYPES_FK,
9820
                            TEST_SUMMARY
9821
                           )
9822
       SELECT ut.TEST_ID,
9823
              nTOpv_id AS PV_ID,
9824
              ut.TEST_TYPES_FK,
9825
              ut.TEST_SUMMARY
9826
         FROM UNIT_TESTS ut
9827
        WHERE ut.PV_ID = nFROMpv_id
9828
          AND ut.TEST_TYPES_FK IN (6);
9829
 
9830
-------------------------------------------- Clone Package Documents ------------------------------------------
9831
   INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )
9832
        SELECT nTOpv_id AS PV_ID,
9833
               pd.test_id,
9834
               pd.doc_num,
9835
               pd.doc_id,
9836
               pd.IS_LATEST
9837
          FROM PACKAGE_DOCUMENTS pd
9838
         WHERE pd.PV_ID = nFROMpv_id;
9839
 
9840
-------------------------------------------- Clone Build Environments -----------------------------------------
9841
    INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )
9842
    SELECT nTOpv_id AS PV_ID,
9843
           pkgbe.BE_ID,
9844
           pkgbe.BUILD_TYPE
9845
      FROM PACKAGE_BUILD_ENV pkgbe
9846
     WHERE pkgbe.PV_ID = nFROMpv_id;
9847
---------------------------------------------Clone Package Build Info------------------------------------------
9848
    INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)
9849
    SELECT nTOpv_id AS PV_ID,
9850
           pkgbinfo.BM_ID,
9851
           pkgbinfo.BSA_ID
9852
      FROM PACKAGE_BUILD_INFO pkgbinfo
9853
     WHERE pkgbinfo.PV_ID = nFROMpv_id;
9854
---------------------------------------------Clone Package Version Processes-----------------------------------
9855
    INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )
9856
    SELECT nTOpv_id AS PV_ID,
9857
           pp.PROC_ID
9858
      FROM PACKAGE_PROCESSES pp
9859
     WHERE pp.PV_ID = nFROMpv_id;
9860
---------------------------------------------Clone Licencing Associations-----------------------------------
9861
    PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);
9862
---------------------------------------------------------------------------------------------------------------
9863
 
9864
    /* LOG ACTION */
9865
    SELECT pv.PKG_VERSION INTO FromVersion
9866
      FROM PACKAGE_VERSIONS pv
9867
     WHERE pv.PV_ID = nFROMpv_id;
9868
 
9869
    Log_Action ( nTOpv_id, 'clone_from', nUser_id,
9870
                 'Details cloned from: '|| FromVersion );
9871
 
9872
---------------------------------------------------------------------------------------------------------------
9873
 
9874
END Basic_Clone;
1374 dpurdie 9875
/
9876
--------------------------------------------------------
3959 dpurdie 9877
--  DDL for Procedure BUILD_TREE
1374 dpurdie 9878
--------------------------------------------------------
1373 dpurdie 9879
 
3959 dpurdie 9880
  CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,
9881
	   	  		  					     retSessionNum OUT NUMBER ) IS
9882
 
1373 dpurdie 9883
/* ---------------------------------------------------------------------------
3959 dpurdie 9884
    Version: 3.0.0
1373 dpurdie 9885
   --------------------------------------------------------------------------- */
3959 dpurdie 9886
    rowCnt 			NUMBER := 0;						-- Iterations counter
9887
    iteration 		NUMBER := 1;                  -- Maximum number of iterations allowed.
9888
    maxIterations 	NUMBER := 50;      	  	-- This will prevent infinite loops if cyrcular dependencies are found
9889
	UP_THE_TREE 	CONSTANT NUMBER DEFAULT 1;
9890
	DOWN_THE_TREE 	CONSTANT NUMBER DEFAULT -1;
9891
    sessionNum 		NUMBER;
9892
	levelNum		NUMBER;
9893
 
9894
BEGIN
9895
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
9896
 
9897
	/*
9898
	||	   Start UP THE TREE
9899
	*/
9900
 
9901
 
9902
	/* Packages with no dependencies */    
9903
    INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
9904
		SELECT sessionNum AS SESSION_NUM,
9905
			   iteration AS LEVEL_NUM,
9906
			   UP_THE_TREE AS DIRECTION,
9907
			   rc.pv_id, pv.pkg_id, pv.v_ext
9908
		  FROM release_content rc,
9909
		  	   package_versions pv
9910
		 WHERE rc.rtag_id = nRtag_id
9911
		   AND rc.pv_id = pv.pv_id
9912
		 MINUS
9913
		SELECT sessionNum AS SESSION_NUM, 
9914
			   iteration AS LEVEL_NUM,
9915
			   UP_THE_TREE AS DIRECTION,
9916
			   dep.pv_id, pv.pkg_id, pv.v_ext
9917
		  FROM package_dependencies dep,
9918
		  	   package_versions pv
9919
		 WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )
9920
		   AND dep.pv_id = pv.pv_id;
9921
 
9922
 
9923
	/* Browse UP the build tree */	   
9924
	iteration := iteration + 1;
9925
    LOOP
9926
 
9927
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
9928
			SELECT DISTINCT 
9929
			       sessionNum AS SESSION_NUM,
9930
			       iteration AS LEVEL_NUM,
9931
				   UP_THE_TREE AS DIRECTION, 
9932
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
9933
			  FROM (  
9934
			        SELECT dep.pv_id, pv.pkg_id, pv.v_ext, dep.dpv_id, dpv.pkg_id AS dpkg_id, dpv.v_ext AS dv_ext
9935
			          FROM package_dependencies dep,
9936
			               release_content rc,
9937
						   package_versions pv,
9938
						   package_versions dpv
9939
			         WHERE dep.pv_id = rc.pv_id
9940
			           AND rc.rtag_id = nRtag_id
9941
					   AND dep.pv_id = pv.pv_id
9942
					   AND dep.dpv_id = dpv.pv_id
9943
					) rdep,
9944
					temp_tree_browse ttb
9945
			 WHERE rdep.dpkg_id  = ttb.pkg_id
9946
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')
9947
			   AND ttb.SESSION_NUM = sessionNum
9948
			   AND ttb.LEVEL_NUM = iteration - 1	
9949
			MINUS
9950
			/* Packages with all depencencies NOT matched */  
9951
			SELECT DISTINCT 
9952
			       sessionNum AS SESSION_NUM,
9953
			       iteration AS LEVEL_NUM, 
9954
				   UP_THE_TREE AS DIRECTION,
9955
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
9956
			  FROM (  
9957
			        SELECT dep.pv_id, pv.pkg_id, pv.v_ext, dep.dpv_id, dpv.pkg_id AS dpkg_id, dpv.v_ext AS dv_ext
9958
			          FROM package_dependencies dep,
9959
			               release_content rc,
9960
						   package_versions pv,
9961
						   package_versions dpv
9962
			         WHERE dep.pv_id = rc.pv_id
9963
			           AND rc.rtag_id = nRtag_id
9964
					   AND dep.pv_id = pv.pv_id
9965
					   AND dep.dpv_id = dpv.pv_id
9966
					) rdep,
9967
					(
9968
					 SELECT tb.*
9969
					   FROM temp_tree_browse tb
9970
					  WHERE tb.SESSION_NUM = sessionNum
9971
					) ttb
9972
			 WHERE rdep.dpkg_id  = ttb.pkg_id (+)
9973
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')
9974
			   AND ttb.SESSION_NUM IS NULL;
9975
 
9976
		rowCnt := SQL%ROWCOUNT;
9977
		IF rowCnt > 0 THEN
9978
           iteration := iteration + 1;
9979
		END IF;
9980
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
9981
    END LOOP;
9982
 
9983
	/*---------------------------------------------------------------------------------------------------------------------*/
9984
 
9985
	/*     Check for unresolved dependencies
9986
	||  
9987
	*/
9988
	/* UNRESOLVED */
9989
	 SELECT COUNT(*) INTO rowCnt
9990
	   FROM (
9991
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
9992
			  FROM release_content rc,
9993
			  	   package_versions pv
9994
			 WHERE rc.rtag_id = nRtag_id
9995
			   AND rc.pv_id = pv.pv_id	   
9996
			MINUS
9997
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
9998
			  FROM temp_tree_browse ttb
9999
			 WHERE ttb.session_num = sessionNum
10000
			);
10001
 
10002
 
10003
 
10004
	 IF rowCnt > 0 
10005
	 THEN
10006
	 	 /*     Circular dependencies detected.
10007
		 ||     Try to resolve build order from the top now.
10008
		 ||		Start DOWN THE TREE
10009
		 */
10010
 
10011
		iteration := 0; 
10012
		 /* Top Level packages */	
10013
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )	   
10014
			SELECT sessionNum AS SESSION_NUM,
10015
			       iteration AS LEVEL_NUM,
10016
				   DOWN_THE_TREE AS DIRECTION,
10017
				   pv.pv_id, pv.pkg_id, pv.v_ext
10018
			  FROM (		   
10019
					/* Packages no one depends on ( Top level packages )*/
10020
					( 
10021
					/* All parents*/ 
10022
					SELECT pv.pkg_id, pv.v_ext
10023
			          FROM package_dependencies dep,
10024
			               release_content rc,
10025
						   package_versions pv
10026
			         WHERE dep.pv_id = rc.pv_id
10027
			           AND rc.rtag_id = nRtag_id
10028
					   AND dep.pv_id = pv.pv_id
10029
					 MINUS
10030
					 /* All children */
10031
					SELECT dpv.pkg_id, dpv.v_ext
10032
			          FROM package_dependencies dep,
10033
			               release_content rc,
10034
						   package_versions dpv
10035
			         WHERE dep.pv_id = rc.pv_id
10036
			           AND rc.rtag_id = nRtag_id
10037
					   AND dep.dpv_id = dpv.pv_id
10038
					 ) 
10039
					 MINUS
10040
					/* Packages with resolved dependencies from UP THE TREE */ 
10041
					SELECT ttb.pkg_id, ttb.v_ext
10042
					  FROM temp_tree_browse ttb
10043
					 WHERE ttb.session_num = sessionNum
10044
				  ) tpkg,
10045
				  package_versions pv,
10046
				  release_content rc
10047
			WHERE rc.rtag_id = nRtag_id
10048
			  AND rc.pv_id = pv.pv_id
10049
			  AND tpkg.pkg_id = pv.pkg_id
10050
			  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
10051
 
10052
 
10053
		 /* Keep taking packages which no one depende on */			  
10054
		 iteration := iteration - 1;  
10055
		 LOOP	  
10056
			   INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
10057
					SELECT sessionNum AS SESSION_NUM,
10058
					       iteration AS LEVEL_NUM,
10059
					       DOWN_THE_TREE AS DIRECTION,
10060
					       pv.pv_id, pv.pkg_id, pv.v_ext
10061
					  FROM (		   
10062
					 	/* All Unresolved */
10063
					 	(
10064
					 	SELECT pv.pkg_id, pv.v_ext
10065
					 	  FROM release_content rc,
10066
					 	  	   package_versions pv
10067
					 	 WHERE rc.rtag_id = nRtag_id
10068
					 	   AND rc.pv_id = pv.pv_id	   
10069
					 	MINUS
10070
					 	SELECT ttb.pkg_id, ttb.v_ext
10071
					 	  FROM temp_tree_browse ttb
10072
					 	 WHERE ttb.session_num = sessionNum
10073
					 	)
10074
					 	 MINUS
10075
					 	(  
10076
					 	 /* Children of Unresolved */  
10077
					 	SELECT dpv.pkg_id, dpv.V_EXT
10078
					 	  FROM (
10079
					 			SELECT pv.pv_id, pv.pkg_id, pv.v_ext
10080
					 			  FROM release_content rc,
10081
					 			  	   package_versions pv
10082
					 			 WHERE rc.rtag_id = nRtag_id
10083
					 			   AND rc.pv_id = pv.pv_id	   
10084
					 			MINUS
10085
					 			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
10086
					 			  FROM temp_tree_browse ttb
10087
					 			 WHERE ttb.session_num = sessionNum
10088
					 		   ) unr,
10089
					 		   package_dependencies dep,
10090
					 		   package_versions dpv
10091
					 	 WHERE unr.pv_id = dep.pv_id
10092
					 	   AND dep.dpv_id = dpv.pv_id
10093
					 	 )  
10094
					   ) tpkg,
10095
					   package_versions pv,
10096
					   release_content rc
10097
					WHERE rc.rtag_id = nRtag_id
10098
					  AND rc.pv_id = pv.pv_id
10099
					  AND tpkg.pkg_id = pv.pkg_id
10100
					  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
10101
 
10102
            rowCnt := SQL%ROWCOUNT;
10103
        	IF rowCnt > 0 THEN
10104
	           iteration := iteration - 1;
10105
			END IF;
10106
            EXIT WHEN (rowCnt < 1);
10107
     	END LOOP;
10108
 
10109
	 END IF;
10110
 
10111
 
10112
	/*---------------------------------------------------------------------------------------------------------------------*/
10113
 
10114
	/* 
10115
	|| 	 Save results from temp table
10116
	*/	
10117
	/* Clean up build_order table */
10118
	DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;
10119
 
10120
	/* Save UP THE TREE */
10121
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
10122
		SELECT nRtag_id AS rtag_id,
10123
			   ttb.level_num AS step_num, 
10124
			   ttb.PV_ID
10125
		  FROM temp_tree_browse ttb
10126
		 WHERE ttb.session_num = sessionNum
10127
		   AND ttb.direction = UP_THE_TREE;	
10128
 
10129
	/*Get last step_num */
10130
	SELECT MAX(ttb.level_num) + 1 INTO levelNum
10131
	FROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;
10132
 
10133
	/* UNRESOLVED */
10134
	 SELECT COUNT(*) INTO rowCnt
10135
	   FROM (
10136
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
10137
			  FROM release_content rc,
10138
			  	   package_versions pv
10139
			 WHERE rc.rtag_id = nRtag_id
10140
			   AND rc.pv_id = pv.pv_id	   
10141
			MINUS
10142
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
10143
			  FROM temp_tree_browse ttb
10144
			 WHERE ttb.session_num = sessionNum
10145
			);
10146
 
10147
 
10148
	IF rowCnt > 0
10149
	THEN
10150
		/* Save unresolved packages */
10151
 		INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )
10152
		    SELECT  nRtag_id AS rtag_id,
10153
				    levelNum AS step_num, 
10154
				    upv.PV_ID,
10155
					'Y' AS UNRESOLVED
10156
			   FROM (
10157
					 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
10158
					  FROM release_content rc,
10159
					  	   package_versions pv
10160
					 WHERE rc.rtag_id = nRtag_id
10161
					   AND rc.pv_id = pv.pv_id	   
10162
					MINUS
10163
					SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
10164
					  FROM temp_tree_browse ttb
10165
					 WHERE ttb.session_num = sessionNum
10166
					) upv;
10167
	END IF;	
10168
 
10169
	/* Save DOWN THE TREE */
10170
	levelNum := 1000;
10171
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
10172
		SELECT nRtag_id AS rtag_id,
10173
			   levelNum + ttb.level_num  AS step_num, 
10174
			   ttb.PV_ID
10175
		  FROM temp_tree_browse ttb
10176
		 WHERE ttb.session_num = sessionNum
10177
		   AND ttb.direction = DOWN_THE_TREE;
10178
 
10179
 
10180
	/*---------------------------------------------------------------------------------------------------------------------*/
10181
 
10182
	/* Clean up temp table */
10183
	DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;
10184
 
10185
	retSessionNum := sessionNum;
10186
END Build_Tree;
10187
/
10188
--------------------------------------------------------
10189
--  DDL for Procedure CHANGE_PACKAGE_STATE
10190
--------------------------------------------------------
1373 dpurdie 10191
 
3959 dpurdie 10192
  CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
10193
											 nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
10194
/* ---------------------------------------------------------------------------
10195
    Version: 4.0
10196
   --------------------------------------------------------------------------- */
1373 dpurdie 10197
 
10198
BEGIN
10199
 
3959 dpurdie 10200
    -- Unlock Package
10201
    UPDATE RELEASE_CONTENT rc SET
10202
    	rc.PKG_STATE = 0
10203
    WHERE rc.PV_ID = nPvId
10204
	AND rc.RTAG_ID = nRtagId;
1373 dpurdie 10205
 
3959 dpurdie 10206
    /* LOG ACTION */
10207
   /*	Log_Action ( nPvId, 'unlock_package', nUserId );*/
1373 dpurdie 10208
 
3959 dpurdie 10209
END Change_Package_State;
1374 dpurdie 10210
/
10211
--------------------------------------------------------
3959 dpurdie 10212
--  DDL for Procedure CHANGE_RELEASE_MODE
1374 dpurdie 10213
--------------------------------------------------------
1373 dpurdie 10214
 
3959 dpurdie 10215
  CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS
10216
/* ---------------------------------------------------------------------------
10217
    Version: 3.0.0
10218
   --------------------------------------------------------------------------- */
1373 dpurdie 10219
 
3959 dpurdie 10220
	cMode CHAR(1) := NULL;  
10221
	nProjId NUMBER; 
1373 dpurdie 10222
 
10223
BEGIN
3959 dpurdie 10224
 
1373 dpurdie 10225
 
3959 dpurdie 10226
	/*
10227
	Author: Rupesh Solanki
10228
	Modified: 24th October 2006
10229
	Reason: Added the archive mode state into Release Manager 
10230
	||	1 - Open Mode
10231
	||	2 - Restrictive Mode
10232
	||	3 - Closed Mode
10233
	||	4 - CCB Mode
10234
	||	5 - Archive Mode
10235
	*/	
10236
	-- Get project Id
10237
	SELECT rt.PROJ_ID INTO nProjId
10238
	  FROM RELEASE_TAGS rt
10239
	 WHERE rt.RTAG_ID = nRtagId; 
10240
 
10241
	IF nModeCode = 1 THEN
10242
		-- Open Mode
10243
		cMode := 'N';
10244
 
10245
		/* LOG ACTION */
10246
   		Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );
10247
 
10248
	ELSIF nModeCode = 2 THEN
10249
		-- Restrictive Mode
10250
		cMode := 'R';
10251
 
10252
		/* LOG ACTION */
10253
   		Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );
10254
 
10255
	ELSIF nModeCode = 3 THEN
10256
		-- Closed Mode
10257
		cMode := 'Y';
10258
 
10259
		/* LOG ACTION */
10260
   		Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId  );
1373 dpurdie 10261
 
3959 dpurdie 10262
	ELSIF nModeCode = 4 THEN
10263
		-- CCB Mode
10264
		cMode := 'C';
10265
 
10266
		/* LOG ACTION */
10267
   		Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId  );
10268
 
10269
	ELSIF nModeCode = 5 THEN
10270
		-- Archive Mode
10271
		cMode := 'A';
10272
 
10273
		/* LOG ACTION */
10274
   		Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId  );	
10275
 
10276
 
10277
	END IF;
10278
 
10279
 
10280
 
10281
	-- Now update table
10282
	IF NOT cMode IS NULL THEN
10283
		UPDATE RELEASE_TAGS rt SET
10284
		rt.OFFICIAL = cMode
10285
		WHERE rt.RTAG_ID = nRtagId;
10286
 
10287
	END IF;
1373 dpurdie 10288
 
10289
 
3959 dpurdie 10290
END CHANGE_RELEASE_MODE;
1374 dpurdie 10291
/
10292
--------------------------------------------------------
3959 dpurdie 10293
--  DDL for Procedure CHECK_NEW_PATCHES
1374 dpurdie 10294
--------------------------------------------------------
1373 dpurdie 10295
 
3959 dpurdie 10296
  CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (
10297
   nrtagid   IN   release_content.rtag_id%TYPE
1373 dpurdie 10298
)
10299
IS
10300
/* ---------------------------------------------------------------------------
3959 dpurdie 10301
    Version: 3.0
1373 dpurdie 10302
   --------------------------------------------------------------------------- */
10303
BEGIN
3959 dpurdie 10304
   /*--------------- Business Rules Here -------------------*/
10305
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
10306
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
10307
   END IF
10308
 
10309
   /*-------------------------------------------------------*/
10310
   UPDATE release_content rc
10311
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
10312
    WHERE rc.pv_id IN (
10313
             SELECT prod.pv_id
10314
               FROM (SELECT   pp.pv_id AS orig_parent_id,
10315
                              COUNT (*) AS num_of_patches
10316
                         FROM release_content rc, package_patches pp
10317
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
10318
                     GROUP BY pp.pv_id) orig,
10319
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
10320
                              COUNT (*) AS num_of_patches
10321
                         FROM release_content rc,
10322
                              package_patches pp,
10323
                              package_dependencies dep,
10324
                              package_versions pv,
10325
                              package_patches prodpp
10326
                        WHERE rc.pv_id = pp.pv_id
10327
                          AND rc.rtag_id = nrtagid
10328
                          AND pp.patch_id = dep.dpv_id
10329
                          AND dep.pv_id = pv.pv_id
10330
                          AND pv.is_patch = 'Y'
10331
                          AND pv.dlocked = 'Y'
10332
                          AND prodpp.patch_id = dep.pv_id
10333
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
10334
                    release_content rc
10335
              WHERE orig.orig_parent_id = prod.pv_id
10336
                AND orig.num_of_patches != prod.num_of_patches
10337
                AND rc.rtag_id = nrtagid
10338
                AND rc.pv_id = prod.pv_id
10339
                AND rc.pkg_state = 0
10340
             UNION
10341
             SELECT   prodpp.pv_id
10342
                 FROM release_content rc,
10343
                      package_patches pp,
10344
                      package_dependencies dep,
1373 dpurdie 10345
                      package_versions pv,
3959 dpurdie 10346
                      package_patches prodpp
10347
                WHERE rc.pv_id = pp.pv_id
10348
                  AND rc.rtag_id = nrtagid
10349
                  AND pp.patch_id = dep.dpv_id
1373 dpurdie 10350
                  AND dep.pv_id = pv.pv_id
3959 dpurdie 10351
                  AND pv.is_patch = 'Y'
10352
                  AND pv.dlocked = 'Y'
10353
                  AND prodpp.patch_id = dep.pv_id
10354
             GROUP BY prodpp.pv_id, pp.pv_id
10355
             MINUS
10356
             SELECT   pp.pv_id
10357
                 FROM release_content rc, package_patches pp
10358
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
10359
             GROUP BY pp.pv_id);
10360
END check_new_patches;
1374 dpurdie 10361
/
10362
--------------------------------------------------------
3959 dpurdie 10363
--  DDL for Procedure CLEAN_ADVISORY_RIPPLE
1374 dpurdie 10364
--------------------------------------------------------
1373 dpurdie 10365
 
3959 dpurdie 10366
  CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)
10367
IS
10368
/******************************************************************************
10369
   NAME:       clean_advisory_ripple
1373 dpurdie 10370
 
3959 dpurdie 10371
   PURPOSE:    To delete entries from the advisory_ripple table based upon
10372
               an RTAG_ID only
1373 dpurdie 10373
 
3959 dpurdie 10374
               This is a tidy-up operation performed against the advisory_ripple
10375
               table, ensuring that the table does not have rtag_id/pv_id
10376
               combinations that cannot be found in the release's wip/pending/release
10377
               tabs.
10378
 
10379
******************************************************************************/
1373 dpurdie 10380
BEGIN
3959 dpurdie 10381
   -- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.
10382
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
10383
   -- work_in_progress, planned, or release_content table.
10384
   -- NOTE: Planned operations that represent pending additive/subtractive merge
10385
   -- operations are ignored because they have not been approved yet and so
10386
   -- cannot be said to be "in the release".
10387
   DELETE FROM advisory_ripple
10388
         WHERE rtag_id = nrtagid
10389
           AND pv_id not in
10390
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
10391
                 UNION
10392
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
10393
                 UNION
10394
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
10395
               );
10396
END clean_advisory_ripple;
10397
/
10398
--------------------------------------------------------
10399
--  DDL for Procedure CLEAN_DO_NOT_RIPPLE
10400
--------------------------------------------------------
1373 dpurdie 10401
 
3959 dpurdie 10402
  CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)
10403
IS
10404
/******************************************************************************
10405
   NAME:       clean_do_not_ripple
1373 dpurdie 10406
 
3959 dpurdie 10407
   PURPOSE:    To delete entries from the do_not_ripple table based upon
10408
               an RTAG_ID only
10409
 
10410
               This is a tidy-up operation performed against the do_not_ripple
10411
               table, ensuring that the table does not have rtag_id/pv_id
10412
               combinations that cannot be found in the release's wip/pending/release
10413
               tabs.
10414
 
10415
******************************************************************************/
10416
BEGIN
10417
   -- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.
10418
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
10419
   -- work_in_progress, planned, or release_content table.
10420
   -- NOTE: Planned operations that represent pending additive/subtractive merge
10421
   -- operations are ignored because they have not been approved yet and so
10422
   -- cannot be said to be "in the release".
10423
   DELETE FROM do_not_ripple
10424
         WHERE rtag_id = nrtagid
10425
           AND pv_id not in
10426
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
10427
                 UNION
10428
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
10429
                 UNION
10430
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
10431
               );
10432
END clean_do_not_ripple;
1374 dpurdie 10433
/
10434
--------------------------------------------------------
3959 dpurdie 10435
--  DDL for Procedure CLEAR_ADVISORY_RIPPLE
1374 dpurdie 10436
--------------------------------------------------------
1373 dpurdie 10437
 
3959 dpurdie 10438
  CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
10439
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
10440
											 nUserId IN NUMBER ) IS
1373 dpurdie 10441
/* ---------------------------------------------------------------------------
3959 dpurdie 10442
    Version: 4.0
1373 dpurdie 10443
   --------------------------------------------------------------------------- */
10444
 
10445
BEGIN
10446
 
3959 dpurdie 10447
    -- Clear Advisory Ripple Package
10448
    DELETE FROM ADVISORY_RIPPLE
10449
	WHERE PV_ID = nPvId
10450
	AND RTAG_ID = nRtagId;
1373 dpurdie 10451
 
3959 dpurdie 10452
    /* LOG ACTION */
10453
   	Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );
10454
 
10455
	/*Rebuild_Environment(nRtagId);*/
1373 dpurdie 10456
 
3959 dpurdie 10457
END Clear_Advisory_Ripple;
1374 dpurdie 10458
/
10459
--------------------------------------------------------
3959 dpurdie 10460
--  DDL for Procedure CLONED_PACKAGE_PROCESSES
1374 dpurdie 10461
--------------------------------------------------------
1373 dpurdie 10462
 
3959 dpurdie 10463
  CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES" 
10464
IS
1373 dpurdie 10465
 
3959 dpurdie 10466
proc_id NUMBER;
1373 dpurdie 10467
/******************************************************************************
3959 dpurdie 10468
   NAME:       DELETE_DO_NOT_RIPPLE
10469
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
10470
               IS RELEASED
1373 dpurdie 10471
 
10472
   REVISIONS:
10473
   Ver        Date        Author           Description
10474
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 10475
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
1373 dpurdie 10476
 
10477
   NOTES:
10478
 
10479
   Automatically available Auto Replace Keywords:
3959 dpurdie 10480
      Object Name:     DELETE_DO_NOT_RIPPLE
10481
      Sysdate:         21/04/2006
10482
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
1373 dpurdie 10483
      Username:         (set in TOAD Options, Procedure Editor)
10484
      Table Name:       (set in the "New PL/SQL Object" dialog)
10485
 
10486
******************************************************************************/
3959 dpurdie 10487
   CURSOR ripple_cur
10488
   IS
10489
      select distinct proc_id, prod_id from deployment_manager.processes_config;
10490
 
10491
   ripple_rec   ripple_cur%ROWTYPE;
1373 dpurdie 10492
BEGIN
3959 dpurdie 10493
   OPEN ripple_cur;
1373 dpurdie 10494
 
3959 dpurdie 10495
   FETCH ripple_cur
10496
    INTO ripple_rec;
1373 dpurdie 10497
 
3959 dpurdie 10498
   WHILE ripple_cur%FOUND
10499
   LOOP
10500
 
1373 dpurdie 10501
 
3959 dpurdie 10502
 
10503
insert into package_processes (PROC_ID, PV_ID) 
10504
values( ripple_rec.proc_id, ripple_rec.prod_id);
10505
 
10506
      FETCH ripple_cur
10507
       INTO ripple_rec;
10508
   END LOOP;
10509
END CLONED_PACKAGE_PROCESSES;
1374 dpurdie 10510
/
10511
--------------------------------------------------------
3959 dpurdie 10512
--  DDL for Procedure CLONED_PROCESSES
1374 dpurdie 10513
--------------------------------------------------------
1373 dpurdie 10514
 
3959 dpurdie 10515
  CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES" 
10516
IS
10517
 
10518
proc_id NUMBER;
10519
/******************************************************************************
10520
   NAME:       DELETE_DO_NOT_RIPPLE
10521
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
10522
               IS RELEASED
10523
 
10524
   REVISIONS:
10525
   Ver        Date        Author           Description
10526
   ---------  ----------  ---------------  ------------------------------------
10527
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
10528
 
10529
   NOTES:
10530
 
10531
   Automatically available Auto Replace Keywords:
10532
      Object Name:     DELETE_DO_NOT_RIPPLE
10533
      Sysdate:         21/04/2006
10534
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
10535
      Username:         (set in TOAD Options, Procedure Editor)
10536
      Table Name:       (set in the "New PL/SQL Object" dialog)
10537
 
10538
******************************************************************************/
10539
   CURSOR ripple_cur
10540
   IS
10541
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
10542
 
10543
   ripple_rec   ripple_cur%ROWTYPE;
1373 dpurdie 10544
BEGIN
3959 dpurdie 10545
   OPEN ripple_cur;
1373 dpurdie 10546
 
3959 dpurdie 10547
   FETCH ripple_cur
10548
    INTO ripple_rec;
1373 dpurdie 10549
 
3959 dpurdie 10550
   WHILE ripple_cur%FOUND
10551
   LOOP
10552
 
10553
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
10554
 
10555
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
10556
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
1373 dpurdie 10557
 
3959 dpurdie 10558
      FETCH ripple_cur
10559
       INTO ripple_rec;
10560
   END LOOP;
10561
END CLONED_PROCESSES;
1374 dpurdie 10562
/
10563
--------------------------------------------------------
3959 dpurdie 10564
--  DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO
1374 dpurdie 10565
--------------------------------------------------------
1373 dpurdie 10566
 
3959 dpurdie 10567
  CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO" 
10568
IS
1373 dpurdie 10569
/******************************************************************************
3959 dpurdie 10570
   NAME:       DELETE_AUTOBUILD_FAILURE_INFO
10571
   PURPOSE:
1373 dpurdie 10572
 
10573
   REVISIONS:
3959 dpurdie 10574
   Ver        Date        Author           Description
1373 dpurdie 10575
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 10576
   1.0        2/06/2006    Rupesh Solanki      1. Created this procedure.
1373 dpurdie 10577
 
10578
   NOTES:
10579
 
10580
   Automatically available Auto Replace Keywords:
3959 dpurdie 10581
      Object Name:     DELETE_AUTOBUILD_FAILURE_INFO
10582
      Sysdate:         2/06/2006
10583
      Date and Time:   2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AM
1373 dpurdie 10584
      Username:         (set in TOAD Options, Procedure Editor)
10585
      Table Name:       (set in the "New PL/SQL Object" dialog)
10586
 
10587
******************************************************************************/
10588
BEGIN
3959 dpurdie 10589
   DELETE FROM autobuild_failure
10590
         WHERE group_email_id NOT IN (SELECT group_email_id
10591
                                        FROM members_group);
10592
END delete_autobuild_failure_info;
1374 dpurdie 10593
/
10594
--------------------------------------------------------
10595
--  DDL for Procedure DEPLOY_TO_RELEASE
10596
--------------------------------------------------------
1373 dpurdie 10597
 
10598
  CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS
10599
 
10600
/******************************************************************************
10601
 
10602
 
10603
******************************************************************************/
10604
 
10605
	CURSOR curInfo IS
10606
    SELECT DISTINCT
10607
        qry.DPV_ID
10608
     FROM (
10609
             SELECT dep.*,
10610
                    LEVEL AS LEVEL_NUM
10611
               FROM PACKAGE_DEPENDENCIES dep
10612
             START WITH dep.PV_ID IN ( 
10613
 
10614
                        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
10615
 
10616
                        ) 
10617
 			CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID
10618
 		) qry,
10619
 		PACKAGES pkg,
10620
		PACKAGE_VERSIONS pv
10621
 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
10622
         and (pv.is_patch is null or pv.is_patch = 'N');
10623
    recInfo curInfo%ROWTYPE;
10624
 
10625
 
10626
BEGIN
10627
 
10628
	OPEN curInfo;
10629
    FETCH curInfo INTO recInfo;
10630
 
10631
	WHILE curInfo%FOUND
10632
	LOOP
10633
 
10634
	insert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
10635
    VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);
10636
 
10637
    FETCH curInfo INTO recInfo;
10638
 
10639
	END LOOP;
10640
 
10641
	CLOSE curInfo;
10642
 
10643
 
10644
 
10645
 
10646
END DEPLOY_TO_RELEASE; 
1374 dpurdie 10647
/
10648
--------------------------------------------------------
3959 dpurdie 10649
--  DDL for Procedure DEPRECATE_PACKAGE
1374 dpurdie 10650
--------------------------------------------------------
1373 dpurdie 10651
 
3959 dpurdie 10652
  CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
10653
	   	  		  							   nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
10654
	   	  		  							   nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
10655
											   sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,
10656
											   nUserId IN NUMBER) IS
10657
ext VARCHAR2(50);
1373 dpurdie 10658
 
10659
 
10660
 
3959 dpurdie 10661
 
1373 dpurdie 10662
BEGIN
10663
 
3959 dpurdie 10664
	--Extract the package version extension
10665
	SELECT V_EXT into ext
10666
	FROM PACKAGE_VERSIONS
10667
	WHERE PV_ID = nPvId; 
10668
 
10669
    -- Deprecate Package
10670
    INSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)
10671
	VALUES (nRtagId, nPkgId, sComments, ext);
10672
 
10673
	IF ext IS NOT NULL THEN
10674
	   UPDATE RELEASE_CONTENT 
10675
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
10676
	   WHERE RTAG_ID = nRtagId
10677
	   AND PV_ID IN (SELECT PV.PV_ID 
10678
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
10679
				  	WHERE PKG.PKG_ID = PV.PKG_ID
10680
				  	AND PV.V_EXT = ext
10681
				  	AND PKG.PKG_ID = nPkgId
10682
				 	);						
10683
	ELSE
10684
	   UPDATE RELEASE_CONTENT 
10685
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
10686
	   WHERE RTAG_ID = nRtagId
10687
	   AND PV_ID IN (SELECT PV.PV_ID 
10688
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
10689
				  	WHERE PKG.PKG_ID = PV.PKG_ID
10690
				  	AND PV.V_EXT IS NULL
10691
				  	AND PKG.PKG_ID = nPkgId
10692
				 	);
10693
	END IF;
10694
 
10695
	UPDATE RELEASE_CONTENT
10696
	SET PKG_ID = nPkgId, DEPRECATED_STATE = 7
10697
	WHERE RTAG_ID = nRtagId
10698
	AND PV_ID IN (		   SELECT DISTINCT
10699
 	 		  	 		   qry.PV_ID
10700
						        FROM (
10701
								 	  SELECT dep.*,
10702
									  LEVEL AS LEVEL_NUM
10703
									  FROM PACKAGE_DEPENDENCIES dep 
10704
 								START WITH dep.DPV_ID IN ( nPvId ) 
10705
								CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
10706
 								) qry,
10707
								PACKAGES pkg,
10708
								PACKAGE_VERSIONS pv,
10709
								RELEASE_CONTENT rc
10710
						 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
10711
							 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
10712
							 AND rc.DEPRECATED_STATE IS NULL
10713
				 );			 
1373 dpurdie 10714
 
10715
    /* LOG ACTION */
3959 dpurdie 10716
   	/*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/
10717
 
1373 dpurdie 10718
 
3959 dpurdie 10719
END Deprecate_Package;
1374 dpurdie 10720
/
10721
--------------------------------------------------------
10722
--  DDL for Procedure DT_DROPUSEROBJECTBYID
10723
--------------------------------------------------------
1373 dpurdie 10724
 
10725
  CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;
1374 dpurdie 10726
/
10727
--------------------------------------------------------
3959 dpurdie 10728
--  DDL for Procedure DT_SETPROPERTYBYID
1374 dpurdie 10729
--------------------------------------------------------
1373 dpurdie 10730
 
3959 dpurdie 10731
  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;
10732
/
10733
--------------------------------------------------------
10734
--  DDL for Procedure IGNORE_DEPENDENCY_WARNINGS
10735
--------------------------------------------------------
10736
 
10737
  CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,
10738
                                                         nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,
10739
                                                         sIgnoreIdList IN VARCHAR2,
10740
                                                         bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,
10741
                                                         nUserId IN NUMBER DEFAULT NULL ) IS
10742
/* ---------------------------------------------------------------------------
10743
    Updates the ignore warnings table - this is really two functions in one.
10744
 
10745
    1) One function updates the table based on a list of dependent PV_IDs and a parent PV_ID
10746
       and is called from the RM website's SetIgnoreWarnings() function after a user changes
10747
       the ignore warnings checkboxes and submits the form.
10748
       This can (at time of writing this) only be done within releases that are not build
10749
       daemon enabled. The ignore warnings feature is a feature we would like to see the end
10750
       of in an ideal world.
10751
       The SetIgnoreWarnings() website function now calls Touch_Release so there is no need to
10752
       do so in this stored procedure, thereby making this stored procedure much more precise in
10753
       that it only updates the ignore_warnings table (action log table too although that is just
10754
       a log and doesn't affect any subsequent business rules behaviour) and it cares nothing
10755
       about website presentation layer states, etc.
10756
 
10757
    2) The other function updates the table for out of sync dependencies that have in fact
10758
       been satisfied by patches made to some other product in the release.
10759
       This seems to be a seldom used feature in current projects.
10760
       It is probably the most often taken path through this function given that it occurs when
10761
       this function is called from Rebuild_Environment, and that is called in many circumstances
10762
       from the RM website whenever the seems to be a possibility that the state of a package
10763
       in a release might have changed and therefore affects the state of other packages in
10764
       that same release.
10765
 
10766
    Parameter Usage:
10767
                        when called from    | when called from
10768
                        Rebuild_Environment | SetIgnoreWarnings()
10769
                        stored procedure.   | in the Website
10770
      --------------------------------------+----------------------------
10771
      nRtagId           RTAG_ID             | RTAG_ID
10772
      nPvId             NULL                | PV_ID
10773
      sIgnoreIdList     NULL                | list of dependent PV_ID's
10774
      bDoPatchIgnore    TRUE                | FALSE
10775
      nUserId           NULL                | current user ID
10776
   --------------------------------------------------------------------------- */
10777
 
10778
oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
10779
ReleaseLocation VARCHAR2(4000);
10780
ActionTypeId NUMBER;
10781
 
1373 dpurdie 10782
BEGIN
10783
 
3959 dpurdie 10784
   IF (NOT bDoPatchIgnore) THEN
10785
      /* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website
10786
      */
10787
      oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );
1373 dpurdie 10788
 
10789
 
3959 dpurdie 10790
      /* Log Action */
10791
      -- Get Release Location
10792
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
10793
        FROM PROJECTS proj,
10794
             RELEASE_TAGS rt
10795
       WHERE rt.PROJ_ID = proj.PROJ_ID
10796
         AND rt.RTAG_ID = nRtagId;
1373 dpurdie 10797
 
3959 dpurdie 10798
      -- Get Action Type Id for IGNORE_ON
10799
      SELECT act.ACTTYPE_ID INTO ActionTypeId
10800
        FROM ACTION_TYPE act
10801
       WHERE act.NAME = 'ignore_on';
10802
 
10803
      -- Get Ignored (Current MINUS Old)
10804
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
10805
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
10806
        FROM (
10807
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
10808
                FROM PACKAGE_VERSIONS pv
10809
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
10810
              MINUS
10811
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
10812
                FROM IGNORE_WARNINGS igw
10813
               WHERE igw.RTAG_ID = nRtagId
10814
                 AND igw.PV_ID = nPvId
10815
             ) qry,
10816
             PACKAGE_VERSIONS pv,
10817
             PACKAGES pkg,
10818
             RELEASE_CONTENT rc,
10819
             PACKAGE_VERSIONS rpv
10820
       WHERE pv.PKG_ID = pkg.PKG_ID
10821
         AND rc.RTAG_ID = nRtagId
10822
         AND rc.PV_ID = rpv.PV_ID
10823
         AND rpv.PKG_ID = pv.PKG_ID
10824
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
10825
         AND qry.DPV_ID = pv.PV_ID;
10826
 
10827
 
10828
      -- Get Action Type Id for IGNORE_OFF
10829
      SELECT act.ACTTYPE_ID INTO ActionTypeId
10830
        FROM ACTION_TYPE act
10831
       WHERE act.NAME = 'ignore_off';
10832
 
10833
      -- Get UnIgnored (Old MINUS Current)
10834
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
10835
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
10836
        FROM (
10837
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
10838
                FROM IGNORE_WARNINGS igw
10839
               WHERE igw.RTAG_ID = nRtagId
10840
                 AND igw.PV_ID = nPvId
10841
              MINUS
10842
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
10843
                FROM PACKAGE_VERSIONS pv
10844
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
10845
             ) qry,
10846
             PACKAGE_VERSIONS pv,
10847
             PACKAGES pkg,
10848
             RELEASE_CONTENT rc,
10849
             PACKAGE_VERSIONS rpv
10850
       WHERE pv.PKG_ID = pkg.PKG_ID
10851
         AND rc.RTAG_ID = nRtagId
10852
         AND rc.PV_ID = rpv.PV_ID
10853
         AND rpv.PKG_ID = pv.PKG_ID
10854
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
10855
         AND qry.DPV_ID = pv.PV_ID;
10856
 
10857
 
10858
      -- Delete Current Ignore Warnings
10859
      DELETE
10860
        FROM IGNORE_WARNINGS igw
10861
       WHERE igw.RTAG_ID = nRtagId
10862
         AND igw.PV_ID = nPvId
10863
         AND igw.IS_PATCH_IGNORE IS NULL;
10864
 
10865
 
10866
      IF (oIgnoreIdCollector.COUNT > 0) THEN
10867
         -- Insert Ignore Warnings
10868
         INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )
10869
         SELECT nRtagId,
10870
                nPvId,
10871
                pv.PV_ID AS DPV_ID
10872
           FROM PACKAGE_VERSIONS pv
10873
          WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
10874
      END IF;
10875
 
10876
   ELSE
10877
      /* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */
10878
 
10879
      -- Delete Current Patch Ignore Warnings
10880
      DELETE
10881
        FROM IGNORE_WARNINGS igw
10882
       WHERE igw.RTAG_ID = nRtagId
10883
         AND igw.IS_PATCH_IGNORE = 'Y';
10884
 
10885
 
10886
      -- Delete Manual Ignores that need to be Patch Ignores
10887
      DELETE
10888
        FROM IGNORE_WARNINGS igw
10889
       WHERE ( RTAG_ID, PV_ID, DPV_ID ) IN
10890
             (
10891
              SELECT DISTINCT
10892
                     nRtagId,
10893
                     err.PV_ID,
10894
                     err.ERR_DPV AS DPV_ID
10895
               FROM  (
10896
                      /* Full Release Contents used for reference*/
10897
                      SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
10898
                        FROM release_content rel, package_versions rpv
10899
                       WHERE rel.pv_id = rpv.pv_id
10900
                         AND rtag_id = nRtagId
10901
                     ) frc,
10902
                     (
10903
                      /* DPV_IDs not fount in release*/
10904
                      SELECT dep.pv_id, dep.dpv_id AS err_dpv
10905
                        FROM package_dependencies dep
10906
                       WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
10907
                         AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
10908
                     ) err,
10909
                     (
10910
                      SELECT DISTINCT pp.PV_ID, dep.DPV_ID
10911
                        FROM PACKAGE_PATCHES pp,
10912
                             PACKAGE_DEPENDENCIES dep,
10913
                             RELEASE_CONTENT rc
10914
                       WHERE rc.RTAG_ID = nRtagId
10915
                         AND rc.PV_ID = pp.PV_ID
10916
                         AND dep.PV_ID = pp.PATCH_ID
10917
                     ) pp,
10918
                     package_versions errpkg,
10919
                     package_versions errpv
10920
               WHERE err.err_dpv = errpv.pv_id
10921
                 AND errpv.pkg_id = frc.pkg_id(+)
10922
                 AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
10923
                 AND err.pv_id = errpkg.pv_id
10924
                 AND err.PV_ID = pp.PV_ID
10925
                 AND frc.PV_ID = pp.DPV_ID
10926
             );
10927
 
10928
      /*
10929
      ---------------------------------------------------
10930
      --  Make sure that select statement above and below are same
10931
      ---------------------------------------------------
10932
      */
10933
 
10934
      -- Insert Patch Ignores
10935
      INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )
10936
      SELECT DISTINCT
10937
             nRtagId,
10938
             err.PV_ID,
10939
             err.ERR_DPV AS DPV_ID,
10940
             'Y'
10941
        FROM (
10942
              /* Full Release Contents used for reference*/
10943
              SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
10944
                FROM release_content rel, package_versions rpv
10945
               WHERE rel.pv_id = rpv.pv_id
10946
                 AND rtag_id = nRtagId
10947
             ) frc,
10948
             (
10949
               /* DPV_IDs not fount in release*/
10950
               SELECT dep.pv_id, dep.dpv_id AS err_dpv
10951
                 FROM package_dependencies dep
10952
                WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
10953
                  AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
10954
             ) err,
10955
             (
10956
              SELECT DISTINCT pp.PV_ID, dep.DPV_ID
10957
                FROM PACKAGE_PATCHES pp,
10958
                     PACKAGE_DEPENDENCIES dep,
10959
                     RELEASE_CONTENT rc
10960
               WHERE rc.RTAG_ID = nRtagId
10961
                 AND rc.PV_ID = pp.PV_ID
10962
                 AND dep.PV_ID = pp.PATCH_ID
10963
             ) pp,
10964
             package_versions errpkg,
10965
             package_versions errpv
10966
       WHERE err.err_dpv = errpv.pv_id
10967
         AND errpv.pkg_id = frc.pkg_id(+)
10968
         AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
10969
         AND err.pv_id = errpkg.pv_id
10970
         AND err.PV_ID = pp.PV_ID
10971
         AND frc.PV_ID = pp.DPV_ID;
10972
 
10973
    END IF;
10974
 
10975
END Ignore_Dependency_Warnings;
1374 dpurdie 10976
/
10977
--------------------------------------------------------
3959 dpurdie 10978
--  DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO
1374 dpurdie 10979
--------------------------------------------------------
1373 dpurdie 10980
 
3959 dpurdie 10981
  CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS
1373 dpurdie 10982
 
10983
/******************************************************************************
3959 dpurdie 10984
   NAME:       INSERT_INTO_PACKAGE_BUILD_INFO
1373 dpurdie 10985
   PURPOSE:    
10986
 
10987
   REVISIONS:
10988
   Ver        Date        Author           Description
10989
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 10990
   1.0        6/12/2006          1. Created this procedure.
1373 dpurdie 10991
 
10992
   NOTES:
10993
 
10994
   Automatically available Auto Replace Keywords:
3959 dpurdie 10995
      Object Name:     INSERT_INTO_PACKAGE_BUILD_INFO
10996
      Sysdate:         6/12/2006
10997
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
1373 dpurdie 10998
      Username:         (set in TOAD Options, Procedure Editor)
10999
      Table Name:       (set in the "New PL/SQL Object" dialog)
11000
 
11001
******************************************************************************/
11002
 
11003
	CURSOR curInfo IS
3959 dpurdie 11004
    SELECT PV_ID
11005
	FROM PACKAGE_BUILD_ENV
11006
	WHERE BE_ID IN (11, 12);
1373 dpurdie 11007
    recInfo curInfo%ROWTYPE;
11008
 
11009
 
11010
BEGIN
11011
 
11012
	OPEN curInfo;
11013
    FETCH curInfo INTO recInfo;
11014
 
11015
	WHILE curInfo%FOUND
11016
	LOOP
11017
 
3959 dpurdie 11018
		INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )
11019
		VALUES( recInfo.PV_ID, 2, 5);
11020
 
11021
		UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;
11022
 
1373 dpurdie 11023
		FETCH curInfo INTO recInfo;
3959 dpurdie 11024
 
1373 dpurdie 11025
	END LOOP;
11026
 
11027
	CLOSE curInfo;
11028
 
11029
 
11030
 
11031
 
3959 dpurdie 11032
END INSERT_INTO_PACKAGE_BUILD_INFO;
1374 dpurdie 11033
/
11034
--------------------------------------------------------
3959 dpurdie 11035
--  DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES
1374 dpurdie 11036
--------------------------------------------------------
1373 dpurdie 11037
 
3959 dpurdie 11038
  CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS
1373 dpurdie 11039
 
3959 dpurdie 11040
/******************************************************************************
11041
   NAME:       INSERT_MULTIPLE_STICKY_NOTES
11042
   PURPOSE:    
1373 dpurdie 11043
 
3959 dpurdie 11044
   REVISIONS:
11045
   Ver        Date        Author           Description
11046
   ---------  ----------  ---------------  ------------------------------------
11047
   1.0        6/12/2006          1. Created this procedure.
1373 dpurdie 11048
 
3959 dpurdie 11049
   NOTES:
1373 dpurdie 11050
 
3959 dpurdie 11051
   Automatically available Auto Replace Keywords:
11052
      Object Name:     INSERT_MULTIPLE_STICKY_NOTES
11053
      Sysdate:         6/12/2006
11054
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
11055
      Username:         (set in TOAD Options, Procedure Editor)
11056
      Table Name:       (set in the "New PL/SQL Object" dialog)
1373 dpurdie 11057
 
3959 dpurdie 11058
******************************************************************************/
1373 dpurdie 11059
 
3959 dpurdie 11060
	CURSOR curInfo IS
11061
    SELECT PV_ID
11062
	FROM PACKAGE_BUILD_ENV
11063
	WHERE BE_ID IN (11, 12);
11064
    recInfo curInfo%ROWTYPE;
11065
 
11066
 
1373 dpurdie 11067
BEGIN
11068
 
3959 dpurdie 11069
	OPEN curInfo;
11070
    FETCH curInfo INTO recInfo;
11071
 
11072
	WHILE curInfo%FOUND
11073
	LOOP
1373 dpurdie 11074
 
3959 dpurdie 11075
		INSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )
11076
		VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );
11077
 
11078
		FETCH curInfo INTO recInfo;
11079
 
11080
	END LOOP;
1373 dpurdie 11081
 
3959 dpurdie 11082
	CLOSE curInfo;
1373 dpurdie 11083
 
11084
 
11085
 
11086
 
3959 dpurdie 11087
END INSERT_MULTIPLE_STICKY_NOTES;
1374 dpurdie 11088
/
11089
--------------------------------------------------------
3959 dpurdie 11090
--  DDL for Procedure LEVEL_N_CONFLICTS
1374 dpurdie 11091
--------------------------------------------------------
1373 dpurdie 11092
 
3959 dpurdie 11093
  CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (
11094
   nnrtag_id       IN       NUMBER,
11095
   nnsession_num   IN       NUMBER,
11096
   nnrowcnt        OUT      NUMBER,
11097
   nniteration     IN       NUMBER
11098
)
11099
IS
1373 dpurdie 11100
/* ---------------------------------------------------------------------------
3959 dpurdie 11101
    Version: 3.0.1
1373 dpurdie 11102
   --------------------------------------------------------------------------- */
3959 dpurdie 11103
   previteration   NUMBER := nniteration - 1;
1373 dpurdie 11104
BEGIN
3959 dpurdie 11105
   /* ---------  LEVEL 1 CONFILCTS -----------
11106
   || Following states are used:
11107
   || 0 -> NOT FOUND
11108
   || 1 -> MAJOR
11109
   || 2 -> MINOR MINOR
11110
   */
11111
   INSERT INTO temp_env_states
11112
      SELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,
11113
                      pv.pv_id, pv.pkg_id, pv.v_ext,
11114
                      DECODE (tes.tes_state, 2, 2, 1) AS MESSAGE
11115
                 FROM package_dependencies dep,
11116
                      package_versions dpv,
11117
                      package_versions pv,
11118
                      release_content rel,
11119
                      temp_env_states tes
11120
                WHERE rel.pv_id = dep.pv_id
11121
                  AND rel.rtag_id = nnrtag_id
11122
                  AND dep.pv_id = pv.pv_id
11123
                  AND dep.dpv_id = dpv.pv_id
11124
                  AND dpv.pkg_id = tes.pkg_id
11125
                  AND NVL (dpv.v_ext, '|LINK_A_NULL|') =
11126
                                              NVL (tes.v_ext, '|LINK_A_NULL|')
11127
                  AND tes.session_num = nnsession_num
11128
                  AND tes.level_num = previteration
11129
                  AND (dep.pv_id, dep.dpv_id) IN 
11130
                                                   /* Remove packages listed in IGNORE_WARNINGS table and
11131
                                                 || packages already stored in Temp Table.
11132
                                                 */
11133
                      (
11134
                         SELECT pd.pv_id, pd.dpv_id
11135
                           FROM package_dependencies pd, release_content rc
11136
                          WHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id
11137
                         --AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )
11138
                         MINUS
11139
                         SELECT igw.pv_id, igw.dpv_id
11140
                           FROM ignore_warnings igw
11141
                          WHERE igw.rtag_id = nnrtag_id);
1373 dpurdie 11142
 
3959 dpurdie 11143
   nnrowcnt := SQL%ROWCOUNT;
11144
END level_n_conflicts;
1374 dpurdie 11145
/
11146
--------------------------------------------------------
11147
--  DDL for Procedure LEVEL_ONE_CONFLICTS
11148
--------------------------------------------------------
1373 dpurdie 11149
 
11150
  CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (
11151
   nnrtag_id       IN   NUMBER,
11152
   nnsession_num   IN   NUMBER
11153
)
11154
IS
11155
BEGIN
11156
   /* ---------  LEVEL 1 CONFILCTS -----------
11157
   || Following states are used:
11158
   || 0 -> NOT FOUND
11159
   || 1 -> MAJOR
11160
   || 2 -> MINOR MINOR
11161
   */
11162
   INSERT INTO temp_env_states
11163
      SELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,
11164
                      err.pv_id, errpkg.pkg_id, errpkg.v_ext,
11165
                      DECODE (frc.v_nmm,
11166
                              NULL, 0,
11167
                              errpv.v_nmm, DECODE (frc.v_mm,
11168
                                                   errpv.v_mm, NULL,
11169
                                                   2
11170
                                                  ),
11171
                              1
11172
                             ) AS MESSAGE
11173
                 FROM (
11174
                       /* Full Release Contents used for reference*/
11175
                        SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,
11176
                                NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,
11177
                                rpv.pkg_version, rpv.v_nmm, rpv.v_mm,
11178
                                (SELECT COUNT(*)
11179
                                   FROM ADVISORY_RIPPLE avr
11180
                                  WHERE avr.rtag_id = rel.rtag_id
11181
                                    AND avr.pv_id = rel.pv_id
11182
                                ) AS IsAvr
11183
                          FROM release_content rel,
11184
                                package_versions rpv
11185
                          WHERE rel.pv_id = rpv.pv_id
11186
                             AND rtag_id = nnrtag_id
11187
                      ) frc,
11188
 
11189
                      (
11190
                       /* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will not
11191
                          necessarily be satisfied in the release) */
11192
                       SELECT dep.pv_id, dep.dpv_id AS err_dpv
11193
                         FROM package_dependencies dep,
11194
                              package_versions dep_dpv
11195
                        WHERE dep.dpv_id = dep_dpv.pv_id
11196
                          AND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
11197
                          AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)
11198
                          AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
11199
                       MINUS
11200
                       /* MINUS Dependencies to be ignored */
11201
                       SELECT igw.pv_id, igw.dpv_id AS err_dpv
11202
                         FROM ignore_warnings igw,
11203
                              package_versions igw_dpv
11204
                        WHERE igw.dpv_id = igw_dpv.pv_id
11205
                          AND igw.rtag_id = nnrtag_id
11206
                      ) err,
11207
                      package_versions errpkg,
11208
                      package_versions errpv
11209
                WHERE err.err_dpv = errpv.pv_id
11210
                  AND errpv.pkg_id = frc.pkg_id(+)
11211
                  AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
11212
                  AND err.pv_id = errpkg.pv_id
11213
                  AND frc.IsAvr = 0;
11214
END level_one_conflicts;
1374 dpurdie 11215
/
11216
--------------------------------------------------------
11217
--  DDL for Procedure LOCK_PACKAGE
11218
--------------------------------------------------------
1373 dpurdie 11219
 
11220
  CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
11221
											 nUserId IN NUMBER ) IS
11222
/* ---------------------------------------------------------------------------
11223
    Version: 4.0
11224
   --------------------------------------------------------------------------- */
11225
 
11226
BEGIN
11227
 
11228
    -- Lock Package
11229
    UPDATE PACKAGE_VERSIONS pv SET
11230
    	pv.DLOCKED = 'Y'
11231
    WHERE pv.PV_ID = nPvId;
11232
 
11233
    /* LOG ACTION */
11234
   	Log_Action ( nPvId, 'lock_package', nUserId );
11235
 
11236
END Lock_Package;
1374 dpurdie 11237
/
11238
--------------------------------------------------------
3959 dpurdie 11239
--  DDL for Procedure LOG_ACTION
1374 dpurdie 11240
--------------------------------------------------------
1373 dpurdie 11241
 
3959 dpurdie 11242
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
11243
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
11244
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
11245
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
1373 dpurdie 11246
/* ---------------------------------------------------------------------------
11247
    Version: 3.0
11248
   --------------------------------------------------------------------------- */
11249
 
3959 dpurdie 11250
    ActionTypeId NUMBER;
1373 dpurdie 11251
 
11252
BEGIN
11253
 
3959 dpurdie 11254
    -- Get Action Type FK
11255
    SELECT act.ACTTYPE_ID INTO ActionTypeId
11256
      FROM ACTION_TYPE act
11257
     WHERE act.NAME = enumActionTypeName;
1373 dpurdie 11258
 
11259
 
3959 dpurdie 11260
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
11261
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
1373 dpurdie 11262
 
11263
 
3959 dpurdie 11264
END Log_Action;
1374 dpurdie 11265
/
11266
--------------------------------------------------------
3959 dpurdie 11267
--  DDL for Procedure LOG_ACTION_BULK
1374 dpurdie 11268
--------------------------------------------------------
1373 dpurdie 11269
 
3959 dpurdie 11270
  CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,
11271
										 	  enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
11272
                                         	  nUserId IN ACTION_LOG.USER_ID%TYPE,
11273
										 	  sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
1373 dpurdie 11274
/* ---------------------------------------------------------------------------
3959 dpurdie 11275
    Version: 3.0
1373 dpurdie 11276
   --------------------------------------------------------------------------- */
11277
 
3959 dpurdie 11278
    ActionTypeId NUMBER;
11279
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
1373 dpurdie 11280
 
11281
BEGIN
11282
 
3959 dpurdie 11283
    oPvIdCollector := IN_LIST_NUMBER ( nPvIdList );
1373 dpurdie 11284
 
3959 dpurdie 11285
    -- Get Action Type FK
11286
    SELECT act.ACTTYPE_ID INTO ActionTypeId
11287
      FROM ACTION_TYPE act
11288
     WHERE act.NAME = enumActionTypeName;
1373 dpurdie 11289
 
3959 dpurdie 11290
    -- Log Action
11291
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
11292
    SELECT nUserId,
11293
    	   ORA_SYSDATETIME,
11294
           pv.PV_ID,
11295
           sAdditionalComments,
11296
           ActionTypeId
11297
      FROM PACKAGE_VERSIONS pv
11298
     WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
1373 dpurdie 11299
 
11300
 
3959 dpurdie 11301
END Log_Action_Bulk;
1374 dpurdie 11302
/
11303
--------------------------------------------------------
3959 dpurdie 11304
--  DDL for Procedure LOG_DAEMON_ACTION
1374 dpurdie 11305
--------------------------------------------------------
1373 dpurdie 11306
 
3959 dpurdie 11307
  CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,
11308
												 enumActionTypeName IN VARCHAR2,
11309
		                                         nUserId IN NUMBER,
11310
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL  ) IS
11311
/* ---------------------------------------------------------------------------
11312
    Version: 3.0
11313
   --------------------------------------------------------------------------- */
1373 dpurdie 11314
 
3959 dpurdie 11315
    ActionTypeId NUMBER;
1373 dpurdie 11316
 
11317
BEGIN
11318
 
3959 dpurdie 11319
    -- Get Action Type FK
11320
    SELECT act.ACTTYPE_ID INTO ActionTypeId
11321
      FROM ACTION_TYPE act
11322
     WHERE act.NAME = enumActionTypeName;
1373 dpurdie 11323
 
11324
 
3959 dpurdie 11325
    INSERT INTO DAEMON_ACTION_LOG
11326
    VALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );
1373 dpurdie 11327
 
11328
 
3959 dpurdie 11329
END Log_Daemon_Action;
1374 dpurdie 11330
/
11331
--------------------------------------------------------
3959 dpurdie 11332
--  DDL for Procedure LOG_PROJECT_ACTION
1374 dpurdie 11333
--------------------------------------------------------
1373 dpurdie 11334
 
3959 dpurdie 11335
  CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,
11336
												 enumActionTypeName IN VARCHAR2,
11337
		                                         nUserId IN NUMBER,
11338
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL,
11339
												 nRtagId IN NUMBER  ) IS
1373 dpurdie 11340
/* ---------------------------------------------------------------------------
3959 dpurdie 11341
    Version: 3.0
1373 dpurdie 11342
   --------------------------------------------------------------------------- */
11343
 
3959 dpurdie 11344
    ActionTypeId NUMBER;
1373 dpurdie 11345
 
11346
BEGIN
11347
 
3959 dpurdie 11348
    -- Get Action Type FK
11349
    SELECT act.ACTTYPE_ID INTO ActionTypeId
11350
      FROM ACTION_TYPE act
11351
     WHERE act.NAME = enumActionTypeName;
1373 dpurdie 11352
 
11353
 
3959 dpurdie 11354
    INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)
11355
    VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);
1373 dpurdie 11356
 
11357
 
3959 dpurdie 11358
END Log_Project_Action;
1374 dpurdie 11359
/
11360
--------------------------------------------------------
3959 dpurdie 11361
--  DDL for Procedure NEW_ADDITIONAL_NOTE
1374 dpurdie 11362
--------------------------------------------------------
1373 dpurdie 11363
 
3959 dpurdie 11364
  CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,
11365
                                                  psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
11366
                                                  psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
11367
                                                  pnUser_id IN NUMBER,
11368
                                                  outErrCode OUT NUMBER
11369
                                                 ) IS
1373 dpurdie 11370
/* ---------------------------------------------------------------------------
3959 dpurdie 11371
    Version: 3.0.0
1373 dpurdie 11372
   --------------------------------------------------------------------------- */
11373
 
11374
    newID NUMBER;
11375
 
11376
	CURSOR an_duplicate_cur IS
3959 dpurdie 11377
        SELECT note_id
1373 dpurdie 11378
          FROM ADDITIONAL_NOTES
11379
         WHERE pv_id = pnPv_id
11380
           AND note_title = psNote_title;
11381
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
11382
 
11383
BEGIN
11384
	outErrCode := -1;		-- Set default return error code to ERROR state
11385
 
11386
	OPEN an_duplicate_cur;
11387
    FETCH an_duplicate_cur INTO an_duplicate_rec;
11388
 
3959 dpurdie 11389
    IF an_duplicate_cur%NOTFOUND
1373 dpurdie 11390
    THEN
3959 dpurdie 11391
		/* No duplicate titles */
11392
		-- Get new ID --
11393
    	SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;
11394
 
11395
		--- Add Additional Note ---
11396
	    INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user  )
11397
	    VALUES (  newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );
1373 dpurdie 11398
		outErrCode := 0;		-- Set return to SUCCESS
11399
	END IF;
11400
 
11401
	CLOSE an_duplicate_cur;
3959 dpurdie 11402
END New_Additional_Note;
1374 dpurdie 11403
/
11404
--------------------------------------------------------
3959 dpurdie 11405
--  DDL for Procedure NEW_PACKAGE_NAME
1374 dpurdie 11406
--------------------------------------------------------
1373 dpurdie 11407
 
3959 dpurdie 11408
  CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
11409
                                               retPKG_ID OUT NUMBER ) IS
1373 dpurdie 11410
/* ---------------------------------------------------------------------------
3959 dpurdie 11411
    Version: 3.0.0
1373 dpurdie 11412
   --------------------------------------------------------------------------- */
11413
 
3959 dpurdie 11414
    CURSOR packages_cur IS
11415
        SELECT pkg.pkg_id
11416
          FROM packages pkg
11417
         WHERE pkg.pkg_name = SSpkg_name;
11418
    packages_rec packages_cur%ROWTYPE;
1373 dpurdie 11419
 
11420
 
11421
BEGIN
11422
 
3959 dpurdie 11423
    /* ---------------------------------------------------- */
11424
    /* Find if package name exists                          */
11425
    /* ---------------------------------------------------- */
1373 dpurdie 11426
 
3959 dpurdie 11427
    OPEN packages_cur;
11428
    FETCH packages_cur INTO packages_rec;
1373 dpurdie 11429
 
3959 dpurdie 11430
    IF packages_cur%NOTFOUND
11431
    THEN
11432
        -- Create new pkg_name --
11433
        SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;
1373 dpurdie 11434
 
3959 dpurdie 11435
        INSERT INTO packages ( pkg_id, pkg_name )
11436
        VALUES ( retPKG_ID, SSpkg_name );
1373 dpurdie 11437
 
3959 dpurdie 11438
    ELSE
11439
        retPKG_ID := packages_rec.pkg_id;
1373 dpurdie 11440
 
3959 dpurdie 11441
    END IF;
1373 dpurdie 11442
 
11443
 
3959 dpurdie 11444
    CLOSE packages_cur;
1373 dpurdie 11445
 
3959 dpurdie 11446
END New_Package_Name;
1374 dpurdie 11447
/
11448
--------------------------------------------------------
11449
--  DDL for Procedure NEW_PATCH
11450
--------------------------------------------------------
1373 dpurdie 11451
 
11452
  CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
11453
 	   	  		  					  	NNparent_id IN NUMBER,
11454
                                        sPatchIdList IN VARCHAR2,
11455
										NNuser_id IN NUMBER ) IS
11456
/* ---------------------------------------------------------------------------
11457
    Version: 3.5
11458
   --------------------------------------------------------------------------- */
11459
 
11460
    patchPv_id    NUMBER;
11461
	parPkg_id	  NUMBER;
11462
    LastInstallOrder NUMBER;
11463
    isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
11464
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
11465
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
11466
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
11467
	oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
11468
 
11469
	CURSOR parent_cur IS
11470
        SELECT pv.*, pkg.pkg_name
11471
          FROM package_versions pv,
11472
		       packages pkg
11473
         WHERE pv.pv_id = NNparent_id
11474
		   AND pv.pkg_id = pkg.pkg_id;
11475
    parent_rec parent_cur%ROWTYPE;
11476
 
11477
    CURSOR patch_cur IS
11478
        SELECT pv.*, pg.pkg_name
11479
          FROM package_versions pv,
11480
		       packages pg
11481
         WHERE pv.pkg_id = parPkg_id
11482
		   AND pv.pkg_version = SSpatch_version
11483
		   AND pv.pkg_id = pg.pkg_id;
11484
    patch_rec patch_cur%ROWTYPE;
11485
 
11486
	CURSOR releases_cur IS
11487
        SELECT rc.pv_id
11488
		  FROM release_content rc
11489
		 WHERE rc.pv_id = patch_rec.pv_id;
11490
    releases_rec releases_cur%ROWTYPE;
11491
 
11492
 
11493
BEGIN
11494
 
11495
	-- Get Last Install Order
11496
    SELECT Count(*) INTO LastInstallOrder
11497
	  FROM PACKAGE_PATCHES pp
11498
	 WHERE pp.PV_ID = NNparent_id;
11499
 
11500
 
11501
    -- Get parent details
11502
	OPEN parent_cur;
11503
    FETCH parent_cur INTO parent_rec;
11504
	parPkg_id := parent_rec.pkg_id;
11505
 
11506
 
11507
	-- Find if patch exists in database
11508
    OPEN patch_cur;
11509
    FETCH patch_cur INTO patch_rec;
11510
 
11511
 
11512
    -- Parent must be official
11513
    IF parent_rec.dlocked = 'Y' THEN
11514
 
11515
	    IF patch_cur%NOTFOUND
11516
	    THEN
11517
        	isPatchDlocked := 'N';
11518
 
11519
	        -- Create new patch version --
11520
	        SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
11521
 
11522
 
11523
	        Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
11524
 
11525
	        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 )
11526
				   VALUES (
11527
						   patchPv_id,
11528
	                       parPkg_id,
11529
	                       SSpatch_version,
11530
	                       isPatchDlocked,
11531
	                       ORA_SYSDATE,
11532
	                       NNuser_id,
11533
	                       ORA_SYSDATETIME,
11534
	                       NNuser_id,
11535
	                       SSV_MM,
11536
	                       SSV_NMM,
11537
	                       SSV_EXT,
11538
	                       parent_rec.src_path,
11539
	                       'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
11540
	                       NNuser_id,
11541
						   'Y',
11542
                           patchPv_id,
11543
						   parent_rec.bs_id,
11544
						   parent_rec.is_autobuildable,
11545
						   parent_rec.ripple_field
11546
 
11547
						   );
11548
 
11549
			INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
11550
		    	   ( SELECT NNparent_id AS pv_id,
11551
				            pv.pv_id AS patch_id,
11552
	                        LastInstallOrder + 1 AS INSTALL_ORDER
11553
				       FROM package_versions pv
11554
					  WHERE pv.pv_id = patchPv_id
11555
					    AND pv.is_patch = 'Y' );
11556
 
11557
	        /* LOG ACTION */
11558
            Log_Action ( patchPv_id, 'new_version', NNuser_id,
11559
        			     'Patch version created: '|| SSpatch_version );
11560
 
11561
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
11562
        			     'New patch created and attached: '|| SSpatch_version );
11563
 
11564
 
11565
	    ELSE
11566
 
11567
		    patchPv_id := patch_rec.pv_id;
11568
	    	isPatchDlocked := patch_rec.dlocked;
11569
 
11570
			-- Find if pv_id exists in release content (i.e. it cannot be a patch)
11571
		    OPEN releases_cur;
11572
		    FETCH releases_cur INTO releases_rec;
11573
 
11574
			IF releases_cur%NOTFOUND
11575
	   		THEN
11576
				-- This pv_id is trully a patch, hence add Y to column IS_PATCH
11577
				UPDATE package_versions SET
11578
					   is_patch = 'Y'
11579
					   WHERE pv_id = patchPv_id;
11580
 
11581
				INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
11582
			    	   ( SELECT NNparent_id AS pv_id,
11583
					            pv.pv_id AS patch_id,
11584
	                            LastInstallOrder + 1 AS INSTALL_ORDER
11585
					       FROM package_versions pv
11586
						  WHERE pv.pv_id = patchPv_id
11587
						    AND pv.is_patch = 'Y' );
11588
 
11589
			END IF;
11590
 
11591
			CLOSE releases_cur;
11592
 
11593
            /* LOG ACTION */
11594
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
11595
        			     'Patch version was found and attached: '|| SSpatch_version );
11596
 
11597
	    END IF;
11598
 
11599
 
11600
 
11601
 
11602
    END IF;
11603
 
11604
 
11605
 
11606
    /* Create Patch Dependencies */
11607
    oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
11608
 
11609
 
11610
    -- Make sure patch is unofficial before altering its dependencies
11611
    IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
11612
    	-- Delete Existing Dependencies
11613
        DELETE
11614
          FROM PACKAGE_DEPENDENCIES dep
11615
         WHERE dep.PV_ID = patchPv_id;
11616
 
11617
 
11618
        -- Insert new dependencies
11619
        INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
11620
        SELECT patchPv_id AS PV_ID,
11621
        	   pv.PV_ID AS DPV_ID,
11622
               parPkg_id AS PKG_ID,
11623
               pv.PKG_ID AS DPKG_ID,
11624
               'L' AS BUILD_TYPE
11625
          FROM PACKAGE_VERSIONS pv
11626
         WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
11627
 
11628
 
11629
    END IF;
11630
 
11631
 
11632
    CLOSE parent_cur;
11633
    CLOSE patch_cur;
11634
END New_Patch;
1374 dpurdie 11635
/
11636
--------------------------------------------------------
3959 dpurdie 11637
--  DDL for Procedure NEW_UNIT_TEST
1374 dpurdie 11638
--------------------------------------------------------
1373 dpurdie 11639
 
3959 dpurdie 11640
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
11641
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
11642
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
11643
                                            sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,
11644
                                            sDpkg_path IN VARCHAR2,
11645
                                            sResults IN VARCHAR2,
11646
                                            sCompletion_date IN VARCHAR2,
11647
                                            nCompleted_by IN NUMBER,
11648
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
11649
											enumTEST_TYPE_NOT_DONE IN NUMBER,
11650
											outFileName OUT VARCHAR2
11651
                                           ) IS
11652
/* ---------------------------------------------------------------------------
11653
    Version: 3.2.0
11654
   --------------------------------------------------------------------------- */
1373 dpurdie 11655
 
3959 dpurdie 11656
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
1373 dpurdie 11657
 
3959 dpurdie 11658
    newID NUMBER;
11659
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
11660
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
1373 dpurdie 11661
 
3959 dpurdie 11662
BEGIN
1373 dpurdie 11663
 
3959 dpurdie 11664
	-- Get new ID --
11665
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
1373 dpurdie 11666
 
3959 dpurdie 11667
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
11668
       	ResultsURL := sResults;
11669
       ELSE
11670
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
11671
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
11672
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
11673
           END IF;
11674
       END IF;
1373 dpurdie 11675
 
3959 dpurdie 11676
	-- Remove NOT_DONE entry if exists
11677
	DELETE FROM UNIT_TESTS
11678
	 WHERE pv_id = nPv_id
11679
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
1373 dpurdie 11680
 
3959 dpurdie 11681
	--- Add Additional Note ---
11682
    INSERT INTO UNIT_TESTS ( TEST_ID,
11683
								PV_ID,
11684
								TEST_TYPES_FK,
11685
								TEST_SUMMARY,
11686
								COMPLETION_DATE,
11687
								COMPLETED_BY,
11688
								RESULTS_URL,
11689
								RESULTS_ATTACHMENT_NAME,
11690
								NUMOF_TEST )
11691
    VALUES (
11692
       	newID,
11693
           nPv_id,
11694
           nTestTypeId,
11695
           sTest_summary,
11696
           TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
11697
           nCompleted_by,
11698
           ResultsURL,
11699
           ResultsAttachment,
11700
		   sNumOfTest );
1373 dpurdie 11701
 
3959 dpurdie 11702
END New_Unit_Test;
1374 dpurdie 11703
/
11704
--------------------------------------------------------
3959 dpurdie 11705
--  DDL for Procedure NEW_VERSION
1374 dpurdie 11706
--------------------------------------------------------
1373 dpurdie 11707
 
3959 dpurdie 11708
  CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,
11709
                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,
11710
                                          NNsetto_pv_id IN NUMBER DEFAULT NULL,
11711
                                          NNrtag_id IN NUMBER,
11712
                                          NNuser_id IN NUMBER,
11713
                                          enumISSUES_STATE_IMPORTED IN NUMBER,
11714
                                          retPv_id OUT NUMBER ) IS
11715
 
11716
 
11717
  TO BE REMOVED   !!!										  
11718
 
11719
 
11720
 
11721
 
11722
/* ---------------------------------------------------------------------------
11723
    Version: 3.3
11724
   --------------------------------------------------------------------------- */
1373 dpurdie 11725
 
3959 dpurdie 11726
    ReleaseLocation VARCHAR2(4000);
11727
    origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;
11728
    origDlocked PACKAGE_VERSIONS.dlocked%TYPE;
11729
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
11730
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
11731
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
11732
    nIssuesTypes NUMBER;
1373 dpurdie 11733
 
3959 dpurdie 11734
    CURSOR package_versions_cur IS
11735
        SELECT pv.pv_id, pv.is_patch
11736
          FROM PACKAGE_VERSIONS pv
11737
         WHERE pv.pkg_version = SSpkg_version
11738
           AND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );
11739
    package_versions_rec package_versions_cur%ROWTYPE;
1373 dpurdie 11740
 
3959 dpurdie 11741
    CURSOR clone_package_versions_cur IS
11742
        SELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;
11743
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
1373 dpurdie 11744
 
11745
BEGIN
3959 dpurdie 11746
	IF NNsetto_pv_id IS NULL
11747
    THEN
11748
		-- SetToPv_id is not supplied, hence proceed.
1373 dpurdie 11749
 
3959 dpurdie 11750
	    /* ---------------------------------------------------- */
11751
	    /* Find id package_version exists                       */
11752
	    /* ---------------------------------------------------- */
1373 dpurdie 11753
 
3959 dpurdie 11754
	    OPEN package_versions_cur;
11755
	    FETCH package_versions_cur INTO package_versions_rec;
1373 dpurdie 11756
 
3959 dpurdie 11757
	    IF package_versions_cur%NOTFOUND
11758
	    THEN
11759
	        SELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;
11760
	        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
1373 dpurdie 11761
 
3959 dpurdie 11762
	        OPEN clone_package_versions_cur;
11763
	        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
11764
	        origPkg_id := clone_package_versions_rec.pkg_id;
11765
	        origDlocked := clone_package_versions_rec.dlocked;
11766
	        CLOSE clone_package_versions_cur;
1373 dpurdie 11767
 
3959 dpurdie 11768
	        -- Clone Package Version Details --
11769
	        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,
11770
	                                       src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )
11771
	            SELECT retPv_id         AS pv_id,
11772
	                   origPkg_id       AS pkg_id,
11773
	                   SSpkg_version    AS pkg_version,
11774
	                   'N'              AS dlocked,
11775
	                   Ora_Sysdate      AS created_stamp,
11776
	                   NNuser_id        AS creator_id,
11777
	                   Ora_Sysdatetime  AS modified_stamp,
11778
	                   NNuser_id        AS modifier_id,
11779
	                   SSV_MM           AS V_MM,
11780
	                   SSV_NMM          AS V_NMM,
11781
	                   SSV_EXT          AS V_EXT,
11782
	                   pv.src_path,
11783
	                   pv.pv_description,
11784
                       pv.PV_OVERVIEW,
11785
                       NNorig_pv_id 	AS LAST_PV_ID,
11786
	                   pv.owner_id,
11787
					   pv.IS_DEPLOYABLE,
11788
					   pv.IS_BUILD_ENV_REQUIRED
11789
	              FROM PACKAGE_VERSIONS pv
11790
	             WHERE pv.pv_id = NNorig_pv_id;
1373 dpurdie 11791
 
11792
 
3959 dpurdie 11793
	        -- Set Issues Type for cloning ---
11794
	        IF origDlocked = 'Y'
11795
	        THEN
11796
            	nIssuesTypes := enumISSUES_STATE_IMPORTED;
11797
	        ELSE
11798
            	nIssuesTypes := NULL;
11799
	        END IF;
1373 dpurdie 11800
 
3959 dpurdie 11801
			Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );
1373 dpurdie 11802
 
11803
 
3959 dpurdie 11804
 
11805
	    ELSE
11806
	        retPv_id := package_versions_rec.pv_id;
11807
 
11808
	    END IF;
11809
 
11810
        CLOSE package_versions_cur;
11811
 
11812
	ELSE
11813
    	retPv_id := NNsetto_pv_id;
11814
    END IF;
11815
 
11816
 
11817
    /* ---------------------------------------------------- */
11818
    /* Insert into Release Contents (EXCLUDE PATCHES)       */
11819
    /* ---------------------------------------------------- */
11820
	IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THEN
11821
	    UPDATE RELEASE_CONTENT
11822
	       SET pv_id = retPv_id,
11823
	           insert_stamp = Ora_Sysdate,
11824
	           insertor_id = NNuser_id
11825
	     WHERE rtag_id = NNrtag_id
11826
	       AND pv_id = NNorig_pv_id;
11827
 
11828
        /* LOG ACTION */
11829
        SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11830
		  FROM PROJECTS proj,
11831
		  	   VTREES vt,
11832
		       RELEASE_TAGS rt
11833
		 WHERE rt.VTREE_ID = vt.VTREE_ID
11834
		   AND vt.PROJ_ID = proj.PROJ_ID
11835
		   AND rt.RTAG_ID = NNrtag_id;
11836
 
11837
        Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );
11838
   		Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );
11839
 
11840
	END IF;
11841
 
11842
 
11843
END New_Version;
1374 dpurdie 11844
/
11845
--------------------------------------------------------
3959 dpurdie 11846
--  DDL for Procedure OLE
1374 dpurdie 11847
--------------------------------------------------------
1373 dpurdie 11848
 
3959 dpurdie 11849
  CREATE OR REPLACE PROCEDURE "OLE" 
11850
IS retval VARCHAR2(40);   
11851
BEGIN   retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 ) 
11852
DBMS_OUTPUT.PUT_LINE(retval);
11853
/
11854
--------------------------------------------------------
11855
--  DDL for Procedure PAOLO_BUILD_TREE
11856
--------------------------------------------------------
1373 dpurdie 11857
 
3959 dpurdie 11858
  CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) IS
1373 dpurdie 11859
 
3959 dpurdie 11860
    sessionNumber NUMBER := 0;
11861
    iteration NUMBER := 1; 
11862
    rowCnt NUMBER := 0;
11863
    maxIterations 	NUMBER := 50;
11864
 
1373 dpurdie 11865
BEGIN
3959 dpurdie 11866
 
11867
 
11868
    INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
11869
    SELECT sessionNumber, iteration, rc.PV_ID
11870
      FROM RELEASE_CONTENT rc
11871
     WHERE rc.RTAG_ID = nRtag_id;
11872
 
11873
    iteration := iteration + 1;
11874
    LOOP
11875
 
11876
        INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
11877
		SELECT sessionNumber,     
11878
               iteration,
11879
               dep.DPV_ID
11880
          FROM TEMP_TREE_BROWSE ttb,
11881
               PACKAGE_DEPENDENCIES dep
11882
         WHERE dep.PV_ID = ttb.PV_ID 
11883
           AND ttb.LEVEL_NUM = iteration - 1 
11884
 
11885
         MINUS  
11886
 
11887
        SELECT sessionNumber, iteration, ttb.PV_ID
11888
          FROM TEMP_TREE_BROWSE ttb;   
11889
 
11890
 
11891
 
11892
 
11893
		rowCnt := SQL%ROWCOUNT;
11894
		IF rowCnt > 0 THEN
11895
           iteration := iteration + 1;
11896
		END IF;
11897
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
11898
    END LOOP; 
11899
 
11900
END PAOLO_Build_Tree;
1374 dpurdie 11901
/
11902
--------------------------------------------------------
11903
--  DDL for Procedure REBUILD_ENVIRONMENT
11904
--------------------------------------------------------
1373 dpurdie 11905
 
11906
  CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS
11907
 
11908
/* ---------------------------------------------------------------------------
11909
    Version: 3.3
11910
   --------------------------------------------------------------------------- */
11911
    rowCnt NUMBER := 0;
11912
    iteration NUMBER := 2;          -- Iterations counter
11913
    maxIterations NUMBER := 50;    -- Maximum number of iterations allowed.
11914
                                    -- This will prevent infinite loops if cyrcular dependencies are found
11915
    sessionNum NUMBER;
11916
BEGIN
11917
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
11918
 
11919
 
11920
    -- Redo Patch Ignore warnings
11921
    Ignore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );
11922
 
11923
 
11924
    Level_One_Conflicts ( NNrtag_id, sessionNum );
11925
 
11926
    LOOP
11927
        Level_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );
11928
        iteration := iteration + 1;
11929
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
11930
    END LOOP;
11931
 
11932
    Update_Package_States ( NNrtag_id, sessionNum );
11933
 
11934
    DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;
11935
 
11936
    -- Flag Packages with New Patches Available
11937
    Check_New_Patches ( NNrtag_id );
11938
 
11939
	Clean_Do_Not_Ripple( NNrtag_id );
11940
 
11941
 
11942
	/* Circular Dependency Flag */
11943
    /*
11944
	IF iteration > maxIterations
11945
	THEN
11946
		UPDATE release_tags SET
11947
		   	   circular_dependency = 'Y'
11948
		 WHERE rtag_id = NNrtag_id;
11949
	ELSE
11950
		UPDATE release_tags SET
11951
		   	   circular_dependency = NULL
11952
		 WHERE rtag_id = NNrtag_id;
11953
	END IF;
11954
    */
11955
END Rebuild_Environment;
1374 dpurdie 11956
/
11957
--------------------------------------------------------
3959 dpurdie 11958
--  DDL for Procedure RELEASE_MANAGER_MAILOUT
1374 dpurdie 11959
--------------------------------------------------------
1373 dpurdie 11960
 
3959 dpurdie 11961
  CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (
11962
  sender      IN VARCHAR2,
11963
  recipient   IN VARCHAR2,
11964
  ccrecipient IN VARCHAR2,
11965
  subject     IN VARCHAR2,
11966
  message     IN VARCHAR2
11967
  ) IS
11968
 
11969
  crlf VARCHAR2(2):= UTL_TCP.CRLF;
11970
  connection utl_smtp.connection;
11971
  mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';
11972
  header VARCHAR2(1000);
11973
 
11974
BEGIN
11975
 
11976
  --
11977
  -- Start the connection.
11978
  --
11979
  connection := utl_smtp.open_connection(mailhost,25);
11980
 
11981
  header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
11982
     'From: '||sender||''||crlf||
11983
  'Subject: '||subject||crlf||
11984
       'To: '||recipient||crlf||
11985
       'CC: '||ccrecipient;
11986
 
11987
  --
11988
  -- Handshake with the SMTP server
11989
  --
11990
  utl_smtp.helo(connection, mailhost);
11991
  utl_smtp.mail(connection, sender);
11992
  utl_smtp.rcpt(connection, recipient);
11993
  utl_smtp.rcpt(connection, ccrecipient);
11994
  utl_smtp.open_data(connection);
11995
  --
11996
  -- Write the header
11997
  --
11998
  utl_smtp.write_data(connection, header);
11999
  --
12000
  -- The crlf is required to distinguish that what comes next is not simply part of the header..
12001
  --
12002
  utl_smtp.write_data(connection, crlf ||message);
12003
  utl_smtp.close_data(connection);
12004
  utl_smtp.quit(connection);
12005
 
12006
EXCEPTION
12007
  WHEN UTL_SMTP.INVALID_OPERATION THEN
12008
    dbms_output.put_line(' Invalid Operation in SMTP transaction.');
12009
  WHEN UTL_SMTP.TRANSIENT_ERROR THEN
12010
    dbms_output.put_line(' Temporary problems with sending email - try again later.');
12011
  WHEN UTL_SMTP.PERMANENT_ERROR THEN
12012
    dbms_output.put_line(' Errors in code for SMTP transaction.');
12013
 
12014
END RELEASE_MANAGER_MAILOUT;
12015
/
12016
--------------------------------------------------------
12017
--  DDL for Procedure REMOVE_COMPONENTS
12018
--------------------------------------------------------
12019
 
12020
  CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS
12021
/* ---------------------------------------------------------------------------
12022
    Version: 3.0.0
12023
   --------------------------------------------------------------------------- */
12024
 
12025
 
12026
BEGIN
12027
 
12028
	 --- Delete From RELEASE_COMPONENTS
12029
	 DELETE FROM RELEASE_COMPONENTS
12030
	 WHERE PV_ID = nPvId;
12031
 
12032
END Remove_Components;
12033
/
12034
--------------------------------------------------------
12035
--  DDL for Procedure REMOVE_DOCUMENT
12036
--------------------------------------------------------
12037
 
12038
  CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
12039
											  nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,
12040
                                              nUserId IN NUMBER ) IS
12041
/* ---------------------------------------------------------------------------
12042
    Version: 3.0
12043
   --------------------------------------------------------------------------- */
12044
 
12045
   DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;
12046
 
12047
BEGIN
12048
 
12049
	-- Get Doc Num
12050
    SELECT pd.DOC_NUM INTO DocNumber
12051
      FROM PACKAGE_DOCUMENTS pd
12052
     WHERE pd.PV_ID = nPvId
12053
       AND pd.DOC_ID = nDocId;
12054
 
12055
 
12056
	-- Delete Document
12057
    DELETE
12058
      FROM PACKAGE_DOCUMENTS pd
12059
     WHERE pd.PV_ID = nPvId
12060
       AND pd.DOC_ID = nDocId;
12061
 
12062
 
12063
    /* LOG ACTION */
12064
   	Log_Action ( nPvId, 'document_remove', nUserId,
12065
   			     'Document number: '|| DocNumber );
12066
 
12067
 
12068
END Remove_Document;
12069
/
12070
--------------------------------------------------------
12071
--  DDL for Procedure REMOVE_PACKAGE_INTEREST
12072
--------------------------------------------------------
12073
 
12074
  CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
12075
	   	  		  								  	nPkgId IN PACKAGES.PKG_ID%TYPE,
12076
												  	nUserId IN NUMBER
12077
	   	  		  									) IS
12078
 
1373 dpurdie 12079
/******************************************************************************
3959 dpurdie 12080
   NAME:       REMOVE_PACKAGE_INTEREST
12081
   PURPOSE:    To remove interest in a given package per project
1373 dpurdie 12082
 
12083
   REVISIONS:
12084
   Ver        Date        Author           Description
12085
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 12086
   1.0        12/05/2006  Rupesh Solanki      1. Created this procedure.
1373 dpurdie 12087
 
12088
   NOTES:
12089
 
12090
   Automatically available Auto Replace Keywords:
3959 dpurdie 12091
      Object Name:     REMOVE_PACKAGE_INTEREST
12092
      Sysdate:         12/05/2006
12093
      Date and Time:   12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AM
1373 dpurdie 12094
      Username:         (set in TOAD Options, Procedure Editor)
12095
      Table Name:       (set in the "New PL/SQL Object" dialog)
12096
 
12097
******************************************************************************/
12098
BEGIN
12099
 
3959 dpurdie 12100
	 --Delete from PACKAGE_INTEREST
12101
	 DELETE FROM PACKAGE_INTEREST
12102
	 WHERE PROJ_ID = nProjId
12103
	 AND PKG_ID = nPkgId
12104
	 AND USER_ID = nUserId;
12105
 
12106
END REMOVE_PACKAGE_INTEREST;
1374 dpurdie 12107
/
12108
--------------------------------------------------------
3959 dpurdie 12109
--  DDL for Procedure REMOVE_PATCH
1374 dpurdie 12110
--------------------------------------------------------
1373 dpurdie 12111
 
3959 dpurdie 12112
  CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
12113
										   nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
12114
                                           nUserId IN NUMBER ) IS
1373 dpurdie 12115
/* ---------------------------------------------------------------------------
3959 dpurdie 12116
    Version: 4.0
1373 dpurdie 12117
   --------------------------------------------------------------------------- */
12118
 
3959 dpurdie 12119
PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
1373 dpurdie 12120
 
3959 dpurdie 12121
CURSOR curPatch IS
12122
	SELECT pp.PV_ID,
12123
		   pp.PATCH_ID,
12124
	       ROWNUM AS NEW_INSTALL_ORDER
12125
	  FROM PACKAGE_PATCHES pp
12126
	 WHERE pp.PV_ID = nPvId
12127
	ORDER BY pp.INSTALL_ORDER;
12128
recPatch curPatch%ROWTYPE;
12129
 
1373 dpurdie 12130
BEGIN
12131
 
3959 dpurdie 12132
	 -- Delete Patch
12133
     DELETE
12134
       FROM PACKAGE_PATCHES pp
12135
      WHERE pp.PV_ID = nPvId
12136
        AND pp.PATCH_ID = nPatchId;
1373 dpurdie 12137
 
12138
 
3959 dpurdie 12139
	-- Redo Install Order
12140
    OPEN curPatch;
12141
	FETCH curPatch INTO recPatch;
12142
 
12143
	WHILE curPatch%FOUND
12144
	LOOP
12145
 
12146
		UPDATE PACKAGE_PATCHES pp SET
12147
			pp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDER
12148
		WHERE pp.PV_ID = nPvId
12149
		  AND pp.PATCH_ID = recPatch.PATCH_ID;
12150
 
12151
		FETCH curPatch INTO recPatch;
12152
	END LOOP;
12153
 
12154
	CLOSE curPatch;
12155
 
12156
 
12157
 
12158
 
12159
    /* LOG ACTION */
12160
    SELECT pv.PKG_VERSION INTO PatchVersion
1373 dpurdie 12161
      FROM PACKAGE_VERSIONS pv
3959 dpurdie 12162
     WHERE pv.PV_ID = nPatchId;
1373 dpurdie 12163
 
3959 dpurdie 12164
   	Log_Action ( nPvId, 'patch_remove', nUserId,
12165
   			     'Version: '|| PatchVersion );
1373 dpurdie 12166
 
3959 dpurdie 12167
END Remove_Patch;
1374 dpurdie 12168
/
12169
--------------------------------------------------------
3959 dpurdie 12170
--  DDL for Procedure REMOVE_PROJECT_VIEW_OWNER
1374 dpurdie 12171
--------------------------------------------------------
1373 dpurdie 12172
 
3959 dpurdie 12173
  CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,
12174
	   	  		  						 			  nViewId IN NUMBER,
12175
										 			  sUserIdList IN VARCHAR2,
12176
										 			  nUserId IN NUMBER ) IS
1373 dpurdie 12177
 
3959 dpurdie 12178
GroupId NUMBER;													  
12179
 
12180
 
12181
 
1373 dpurdie 12182
/******************************************************************************
3959 dpurdie 12183
   NAME:       UPDATE_VIEW
12184
   PURPOSE:    
1373 dpurdie 12185
 
12186
   REVISIONS:
3959 dpurdie 12187
   Ver        Date        Author           		Description
1373 dpurdie 12188
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 12189
   1.0        10/04/2006     Rupesh Solanki     1. Created this procedure.
1373 dpurdie 12190
 
12191
   NOTES:
12192
 
12193
   Automatically available Auto Replace Keywords:
3959 dpurdie 12194
      Object Name:     UPDATE_VIEW
12195
      Sysdate:         10/04/2006
12196
      Date and Time:   10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PM
1373 dpurdie 12197
      Username:         (set in TOAD Options, Procedure Editor)
12198
      Table Name:       (set in the "New PL/SQL Object" dialog)
12199
 
12200
******************************************************************************/
12201
 
12202
BEGIN
3959 dpurdie 12203
	 SELECT GROUP_EMAIL_ID into GroupId
12204
	 FROM AUTOBUILD_FAILURE
12205
	 WHERE PROJ_ID = nProjId
12206
	 AND VIEW_ID = nViewId;
12207
 
12208
	 DELETE FROM MEMBERS_GROUP
12209
	 WHERE GROUP_EMAIL_ID = GroupId
12210
	 AND USER_ID IN (
12211
	 SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
12212
	 );
12213
 
1373 dpurdie 12214
 
3959 dpurdie 12215
 
12216
END REMOVE_PROJECT_VIEW_OWNER;
12217
/
12218
--------------------------------------------------------
12219
--  DDL for Procedure REMOVE_RELEASE_CONTENT
12220
--------------------------------------------------------
1373 dpurdie 12221
 
3959 dpurdie 12222
  CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,
12223
													 sNotPvIdList IN VARCHAR2,
12224
                                                     nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
12225
/* ---------------------------------------------------------------------------
12226
    Version: 3.0
12227
   --------------------------------------------------------------------------- */
1373 dpurdie 12228
 
3959 dpurdie 12229
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
12230
oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
1373 dpurdie 12231
 
3959 dpurdie 12232
BEGIN
12233
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
12234
    oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );
12235
 
12236
    -- Delete From Release Content
12237
    DELETE
12238
      FROM RELEASE_CONTENT
12239
	 WHERE rtag_id = nRTagId
12240
	   AND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
12241
	   AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
12242
 
12243
 
12244
 
12245
END Remove_Release_Content;
1374 dpurdie 12246
/
12247
--------------------------------------------------------
3959 dpurdie 12248
--  DDL for Procedure REMOVE_RUNTIME
12249
--------------------------------------------------------
12250
 
12251
  CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
12252
											 nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,
12253
                                             nUserId IN NUMBER ) IS
12254
/* ---------------------------------------------------------------------------
12255
    Version: 3.0
12256
   --------------------------------------------------------------------------- */
12257
 
12258
   RuntimeDependency VARCHAR2(4000);
12259
 
12260
BEGIN
12261
 
12262
	-- Get Runtime dependency
12263
    SELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION  INTO RuntimeDependency
12264
	  FROM RUNTIME_DEPENDENCIES rtd,
12265
	  	   PACKAGES pkg,
12266
	       PACKAGE_VERSIONS pv
12267
	 WHERE rtd.PV_ID = nPvId
12268
	   AND pv.PKG_ID = pkg.PKG_ID
12269
	   AND rtd.RTD_ID = pv.PV_ID
12270
	   AND rtd.RTD_ID = nRuntimeId;
12271
 
12272
 
12273
	-- Delete Document
12274
    DELETE
12275
      FROM RUNTIME_DEPENDENCIES rtd
12276
     WHERE rtd.PV_ID = nPvId
12277
       AND rtd.RTD_ID = nRuntimeId;
12278
 
12279
 
12280
    /* LOG ACTION */
12281
   	Log_Action ( nPvId, 'runtime_remove', nUserId,
12282
   			     'Runtime package: '|| RuntimeDependency );
12283
 
12284
 
12285
END Remove_Runtime;
12286
/
12287
--------------------------------------------------------
12288
--  DDL for Procedure RENAME_PACKAGE_VERSION
12289
--------------------------------------------------------
12290
 
12291
  CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,
12292
                                                     SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
12293
													 cBuildType IN CHAR,
12294
                                                     NNuser_id IN NUMBER,
12295
                                                     errMessage OUT VARCHAR2 ) IS
12296
/* ---------------------------------------------------------------------------
12297
    Version: 3.2
12298
   --------------------------------------------------------------------------- */
12299
 
12300
    sPackageVersion VARCHAR2(4000);
12301
	sLabel VARCHAR2(4000) := NULL;
12302
    OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
12303
 
12304
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
12305
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
12306
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
12307
 
12308
    CURSOR package_versions_cur IS
12309
        SELECT pv_id
12310
     	  FROM package_versions
12311
     	 WHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )
12312
     	   AND pkg_version = SSpkg_version;
12313
    package_versions_rec package_versions_cur%ROWTYPE;
12314
 
12315
 
12316
BEGIN
12317
 
12318
    /* ---------------------------------------------------- */
12319
    /* Find if package_version exists                       */
12320
    /* ---------------------------------------------------- */
12321
 
12322
	errMessage := NULL;
12323
 
12324
 
12325
	-- Get previous version
12326
	SELECT pv.PKG_VERSION INTO OldPkgVersion
12327
      FROM PACKAGE_VERSIONS pv
12328
     WHERE pv.PV_ID = NNpv_id;
12329
 
12330
 
12331
	sPackageVersion := SSpkg_version;
12332
 
12333
 
12334
	IF OldPkgVersion != sPackageVersion THEN
12335
 
12336
	    OPEN package_versions_cur;
12337
	    FETCH package_versions_cur INTO package_versions_rec;
12338
 
12339
	    IF package_versions_cur%NOTFOUND
12340
	    THEN
12341
 
12342
			-- Split current version in parts
12343
	    	Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
12344
 
12345
 
12346
		    -- Automated built config
12347
			IF (cBuildType = 'A') THEN
12348
				sPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT;	-- Make sure that version is still unique
12349
			END IF;
12350
 
12351
 
12352
	        -- Packge version not found, hence rename it.
12353
	        UPDATE package_versions
12354
	           SET pkg_version = sPackageVersion,
12355
	               v_mm = SSV_MM,
12356
	               v_nmm = SSV_NMM,
12357
	               v_ext = SSV_EXT,
12358
	               modified_stamp = ORA_SYSDATETIME,
12359
	               modifier_id = NNuser_id,
12360
				   build_type = cBuildType,
12361
				   pkg_label = NULL
12362
	         WHERE pv_id = NNpv_id;
12363
 
12364
 
12365
			IF (cBuildType = 'A') THEN
12366
				sLabel := GET_AUTOMATED_LABEL( NNpv_id );
12367
				UPDATE PACKAGE_VERSIONS pv SET
12368
					pv.PKG_LABEL = sLabel
12369
		         WHERE pv_id = NNpv_id;
12370
			END IF;
12371
 
12372
			/* LOG ACTION */
12373
	      	Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );
12374
 
12375
	    ELSE
12376
	        -- Package version exists. Cannot proceed.
12377
	        errMessage := 'enum_MSG_VERSION_EXISTS';
12378
 
12379
	    END IF;
12380
 
12381
	    CLOSE package_versions_cur;
12382
 
12383
	END IF;
12384
 
12385
 
12386
 
12387
 
12388
END Rename_Package_Version;
12389
/
12390
--------------------------------------------------------
12391
--  DDL for Procedure RESET_IGNORE_WARNINGS
12392
--------------------------------------------------------
12393
 
12394
  CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,
12395
                                                    nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
12396
/* ---------------------------------------------------------------------------
12397
    Version: 5.0
12398
   --------------------------------------------------------------------------- */
12399
 
12400
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
12401
 
12402
BEGIN
12403
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
12404
 
12405
    -- Remove Ignore Warnings
12406
     DELETE
12407
       FROM ignore_warnings
12408
	  WHERE (rtag_id, pv_id, dpv_id) IN
12409
	     (
12410
	      SELECT igw.rtag_id, igw.pv_id, igw.dpv_id
12411
	        FROM ignore_warnings igw,
12412
	             package_versions dpv,
12413
	             package_versions pv
12414
	       WHERE igw.dpv_id = dpv.pv_id
12415
	         AND igw.rtag_id = nRTagId
12416
	         AND dpv.pkg_id = pv.pkg_id
12417
	         AND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')
12418
	         AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
12419
         );
12420
 
12421
END Reset_Ignore_Warnings;
12422
/
12423
--------------------------------------------------------
12424
--  DDL for Procedure RIPPLE_PACKAGE
12425
--------------------------------------------------------
12426
 
12427
  CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (
12428
        sPvIdList IN VARCHAR2,
12429
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
12430
        nUserId IN NUMBER
12431
    ) IS
12432
/* ---------------------------------------------------------------------------
12433
    Version: 4.1
12434
   --------------------------------------------------------------------------- */
12435
 
12436
BEGIN
12437
 
12438
    IF (sPvIdList IS NULL) THEN
12439
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
12440
    END IF;
12441
 
12442
    -- Ripple Package
12443
    DELETE FROM DO_NOT_RIPPLE
12444
    WHERE RTAG_ID = nRtagId
12445
    AND PV_ID IN (
12446
        SELECT *
12447
        FROM THE (
12448
            SELECT CAST( IN_LIST_NUMBER( sPvIdList )
12449
            AS RELMGR_NUMBER_TAB_t )
12450
            FROM DUAL
12451
        )
12452
    );
12453
 
12454
    /* LOG ACTION */
12455
    Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );
12456
 
12457
END Ripple_Package;
12458
/
12459
--------------------------------------------------------
12460
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS
12461
--------------------------------------------------------
12462
 
12463
CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
12464
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
12465
                                                          NNuser_id IN NUMBER,
12466
                                                          retPV_ID OUT NUMBER,
12467
                                                          nCloneFromPvId IN NUMBER DEFAULT NULL,
12468
                                                          nBuildType IN CHAR DEFAULT 'M',
12469
                                                          nChangeType IN CHAR DEFAULT 'F') IS
12470
/* ---------------------------------------------------------------------------
12471
    Version: 4.0
12472
   --------------------------------------------------------------------------- */
12473
 
12474
    parPkg_id   NUMBER;
12475
    parPv_id    NUMBER;
12476
    cloneFrom_pv_id NUMBER;
12477
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
12478
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
12479
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
12480
    spackageversion VARCHAR2 (4000);
12481
 
12482
    CURSOR packages_cur IS
12483
        SELECT pkg_id FROM PACKAGES
12484
        WHERE pkg_name = SSpkg_name;
12485
    packages_rec packages_cur%ROWTYPE;
12486
 
12487
    CURSOR package_versions_cur IS
12488
        SELECT pv_id FROM PACKAGE_VERSIONS
12489
        WHERE pkg_id = parPkg_id
12490
        AND pkg_version = SSpkg_version;
12491
    package_versions_rec package_versions_cur%ROWTYPE;
12492
 
12493
    CURSOR clone_package_versions_cur IS
12494
        SELECT MAX(pv_id) AS pv_id
12495
          FROM PACKAGE_VERSIONS
12496
         WHERE pkg_id = parPkg_id
12497
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
12498
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
12499
 
12500
BEGIN
12501
    /* -------------------------------------------- */
12502
    /* Find if pkg_name exists and seed if required */
12503
    /* -------------------------------------------- */
12504
    OPEN packages_cur;
12505
    FETCH packages_cur INTO packages_rec;
12506
 
12507
    IF packages_cur%NOTFOUND
12508
    THEN
12509
        /* INSERT into packages table */
12510
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
12511
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
12512
 
12513
    ELSE
12514
        parPkg_id := packages_rec.pkg_id;
12515
 
12516
    END IF;
12517
 
12518
    CLOSE packages_cur;
12519
 
12520
 
12521
    /* ---------------------------------------------------- */
12522
    /* Find if package_version exists and seed if required  */
12523
    /* ---------------------------------------------------- */
12524
    OPEN package_versions_cur;
12525
    FETCH package_versions_cur INTO package_versions_rec;
12526
 
12527
    IF package_versions_cur%NOTFOUND
12528
    THEN
12529
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
12530
 
12531
        /* Generate automated version Number */
12532
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
12533
        spackageversion := SSpkg_version;
12534
 
12535
        IF ( nBuildType = 'A' )
12536
        THEN
12537
            spackageversion := '(' || parPv_id || ')' || SSV_EXT;
12538
        END If;
12539
 
12540
        /* LOG ACTION */
12541
        Log_Action ( parPv_id, 'new_version', NNuser_id,
12542
                     'New package version: '|| spackageversion );
12543
 
12544
 
12545
        /* Find similar pkg_name + ext to clone from */
12546
        OPEN clone_package_versions_cur;
12547
        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
12548
 
12549
 
12550
        IF NOT clone_package_versions_rec.pv_id IS NULL
12551
        THEN
12552
            /* CLONE details from similar version  OR  from nCloneFromPvId */
12553
            IF ( NOT nCloneFromPvId IS NULL) THEN
12554
                cloneFrom_pv_id := nCloneFromPvId;
12555
            ELSE
12556
                cloneFrom_pv_id := clone_package_versions_rec.pv_id;
12557
            END IF;
12558
 
12559
            -- Clone Package Version Details --
12560
            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,
12561
                                           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,change_type  )
12562
                SELECT parPv_id         AS pv_id,
12563
                       parPkg_id        AS pkg_id,
12564
                       spackageversion  AS pkg_version,
12565
                       'N'              AS dlocked,
12566
                       Ora_Sysdate      AS created_stamp,
12567
                       NNuser_id        AS creator_id,
12568
                       Ora_Sysdatetime  AS modified_stamp,
12569
                       NNuser_id        AS modifier_id,
12570
                       SSV_MM           AS V_MM,
12571
                       SSV_NMM          AS V_NMM,
12572
                       SSV_EXT          AS V_EXT,
12573
                       pv.src_path,
12574
                       pv.pv_description,
12575
                       pv.PV_OVERVIEW,
12576
                       cloneFrom_pv_id  AS LAST_PV_ID,
12577
                       pv.owner_id,
12578
                       nBuildType       AS BUILD_TYPE,
12579
                       pv.IS_BUILD_ENV_REQUIRED,
12580
                       pv.BS_ID,
12581
                       pv.is_autobuildable,
12582
                       pv.IS_DEPLOYABLE, 
12583
                       pv.ripple_field,
12584
                       nChangeType       AS change_type
12585
                  FROM PACKAGE_VERSIONS pv
12586
                 WHERE pv.pv_id = cloneFrom_pv_id;
12587
 
12588
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
12589
 
12590
        ELSE
12591
            /* BRAND NEW version + ext */
12592
            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, change_type )
12593
            VALUES (
12594
                    parPv_id,
12595
                    parPkg_id,
12596
                    spackageversion,
12597
                    'N',
12598
                    Ora_Sysdate,
12599
                    NNuser_id,
12600
                    Ora_Sysdatetime,
12601
                    NNuser_id,
12602
                    SSV_MM,
12603
                    SSV_NMM,
12604
                    SSV_EXT,
12605
                    NNuser_id,
12606
                    parPv_id,
12607
                    nBuildType,
12608
                    'b',
12609
                    nChangeType
12610
                   );
12611
 
12612
        END IF;
12613
 
12614
        CLOSE clone_package_versions_cur;
12615
        retPV_ID := parPv_id;
12616
 
12617
    ELSE
12618
        retPV_ID := package_versions_rec.pv_id;
12619
 
12620
    END IF;
12621
 
12622
    CLOSE package_versions_cur;
12623
 
12624
END Seed_Package_Names_Versions;
12625
/
12626
 
12627
--------------------------------------------------------
1374 dpurdie 12628
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2
12629
--------------------------------------------------------
1373 dpurdie 12630
 
12631
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
12632
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
12633
                                                          NNuser_id IN NUMBER,
12634
                                                          retPV_ID OUT NUMBER,
12635
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
12636
/* ---------------------------------------------------------------------------
12637
    Version: 4.0
12638
   --------------------------------------------------------------------------- */
12639
 
12640
    parPkg_id   NUMBER;
12641
    parPv_id    NUMBER;
12642
    cloneFrom_pv_id NUMBER;
12643
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
12644
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
12645
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
12646
 
12647
    CURSOR packages_cur IS
12648
        SELECT pkg_id FROM PACKAGES
12649
        WHERE pkg_name = SSpkg_name;
12650
    packages_rec packages_cur%ROWTYPE;
12651
 
12652
    CURSOR package_versions_cur IS
12653
        SELECT pv_id FROM PACKAGE_VERSIONS
12654
        WHERE pkg_id = parPkg_id
12655
        AND pkg_version = SSpkg_version;
12656
    package_versions_rec package_versions_cur%ROWTYPE;
12657
 
12658
    CURSOR clone_package_versions_cur IS
12659
        SELECT MAX(pv_id) AS pv_id
12660
          FROM PACKAGE_VERSIONS
12661
         WHERE pkg_id = parPkg_id
12662
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
12663
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
12664
 
12665
BEGIN
12666
    /* -------------------------------------------- */
12667
    /* Find if pkg_name exists and seed if required */
12668
    /* -------------------------------------------- */
12669
    OPEN packages_cur;
12670
    FETCH packages_cur INTO packages_rec;
12671
 
12672
    IF packages_cur%NOTFOUND
12673
    THEN
12674
        /* INSERT into packages table */
12675
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
12676
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
12677
 
12678
    ELSE
12679
        parPkg_id := packages_rec.pkg_id;
12680
 
12681
    END IF;
12682
 
12683
    CLOSE packages_cur;
12684
 
12685
 
12686
 
12687
    /* ---------------------------------------------------- */
12688
    /* Find if package_version exists and seed if required  */
12689
    /* ---------------------------------------------------- */
12690
    OPEN package_versions_cur;
12691
    FETCH package_versions_cur INTO package_versions_rec;
12692
 
12693
    IF package_versions_cur%NOTFOUND
12694
    THEN
12695
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
12696
 
12697
        /* LOG ACTION */
12698
        Log_Action ( parPv_id, 'new_version', NNuser_id,
12699
        			 'New package version: '|| SSpkg_version );
12700
 
12701
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
12702
 
12703
 
12704
 
12705
 
12706
 
12707
            /* CLONE details from similar version  OR  from nCloneFromPvId */
12708
			IF ( NOT nCloneFromPvId IS NULL) THEN
12709
            	cloneFrom_pv_id := nCloneFromPvId;
12710
			ELSE
12711
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
12712
			END IF;
12713
 
12714
            -- Clone Package Version Details --
12715
            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,
12716
                                           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 )
12717
                SELECT parPv_id         AS pv_id,
12718
                       parPkg_id        AS pkg_id,
12719
                       SSpkg_version    AS pkg_version,
12720
                       'N'              AS dlocked,
12721
                       Ora_Sysdate      AS created_stamp,
12722
                       NNuser_id        AS creator_id,
12723
                       Ora_Sysdatetime  AS modified_stamp,
12724
                       NNuser_id        AS modifier_id,
12725
                       SSV_MM           AS V_MM,
12726
                       SSV_NMM          AS V_NMM,
12727
                       SSV_EXT          AS V_EXT,
12728
                       pv.src_path,
12729
                       pv.pv_description,
12730
                       pv.PV_OVERVIEW,
12731
                       cloneFrom_pv_id 	AS LAST_PV_ID,
12732
                       pv.owner_id,
12733
					   pv.BUILD_TYPE,
12734
					   pv.IS_BUILD_ENV_REQUIRED,
12735
					   pv.bs_id,
12736
					   pv.is_autobuildable,
12737
					   pv.IS_DEPLOYABLE,
12738
					   pv.ripple_field
12739
                  FROM PACKAGE_VERSIONS pv
12740
                 WHERE pv.pv_id = cloneFrom_pv_id;
12741
 
12742
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
12743
 
12744
        retPV_ID := parPv_id;
12745
 
12746
    ELSE
12747
        retPV_ID := package_versions_rec.pv_id;
12748
 
12749
    END IF;
12750
 
12751
    CLOSE package_versions_cur;
12752
 
12753
 
12754
 
12755
 
12756
END Seed_Package_Names_Versions2;
1374 dpurdie 12757
/
12758
--------------------------------------------------------
3959 dpurdie 12759
--  DDL for Procedure SET_ADVISORY_RIPPLE
1374 dpurdie 12760
--------------------------------------------------------
1373 dpurdie 12761
 
3959 dpurdie 12762
  CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
1373 dpurdie 12763
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
12764
											 nUserId IN NUMBER ) IS
12765
/* ---------------------------------------------------------------------------
12766
    Version: 4.0
12767
   --------------------------------------------------------------------------- */
12768
 
12769
BEGIN
12770
 
3959 dpurdie 12771
    -- Set Advisory Ripple Package
12772
    INSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)
12773
	VALUES (nRtagId, nPvId);
1373 dpurdie 12774
 
12775
    /* LOG ACTION */
3959 dpurdie 12776
   	Log_Action ( nPvId, 'set_advisory_ripple', nUserId );
1373 dpurdie 12777
 
12778
	/*Rebuild_Environment(nRtagId);*/
12779
 
3959 dpurdie 12780
END Set_Advisory_Ripple;
1374 dpurdie 12781
/
12782
--------------------------------------------------------
3959 dpurdie 12783
--  DDL for Procedure SET_PACKAGE_BUILD_ENV
1374 dpurdie 12784
--------------------------------------------------------
1373 dpurdie 12785
 
3959 dpurdie 12786
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
12787
	   	  		  								  	sBuildEnvIdList IN VARCHAR2 ) IS
1373 dpurdie 12788
/* ---------------------------------------------------------------------------
3959 dpurdie 12789
    Last Modified: Rupesh Solanki
12790
	Version: 3.0.1
1373 dpurdie 12791
   --------------------------------------------------------------------------- */
12792
 
12793
 
12794
BEGIN
12795
 
3959 dpurdie 12796
   -- Delete Current Build Env settings
12797
   DELETE FROM PACKAGE_BUILD_ENV
12798
   WHERE pv_id = nPvId;
12799
 
12800
   -- Delet Current Package Build Info Settings
12801
   DELETE FROM PACKAGE_BUILD_INFO
12802
   WHERE pv_id = nPvId;
1373 dpurdie 12803
 
3959 dpurdie 12804
   -- Reset flag to N
12805
   UPDATE PACKAGE_VERSIONS SET
12806
	   IS_BUILD_ENV_REQUIRED = 'N'
12807
   WHERE PV_ID = nPvId;
1373 dpurdie 12808
 
12809
 
3959 dpurdie 12810
   -- Set new Build Env
12811
   IF NOT sBuildEnvIdList IS NULL THEN
12812
   	  -- Insert into PACKAGE_BUILD_ENV
12813
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
12814
	  SELECT nPvId AS PV_ID,
12815
	  		 be.BE_ID
12816
	    FROM BUILD_ENVIRONMENTS be
12817
	   WHERE be.BE_ID IN (
12818
	   		 		  	   SELECT *
12819
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
12820
	   		 		  	 );
12821
 
12822
   	  -- Insert into PACKAGE_BUILD_INFO
12823
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
12824
	  SELECT nPvId AS PV_ID,
12825
	  		 be.BM_ID
12826
	    FROM BUILD_MACHINES be
12827
	   WHERE be.BM_ID IN (
12828
	   		 		  	   SELECT *
12829
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
12830
	   		 		  	 );						 
1373 dpurdie 12831
 
3959 dpurdie 12832
	   -- Set flag to Y
12833
	   UPDATE PACKAGE_VERSIONS SET
12834
		   IS_BUILD_ENV_REQUIRED = 'Y'
12835
	   WHERE PV_ID = nPvId;
1373 dpurdie 12836
 
3959 dpurdie 12837
   END IF;
1373 dpurdie 12838
 
12839
 
3959 dpurdie 12840
END Set_Package_Build_Env;
1374 dpurdie 12841
/
12842
--------------------------------------------------------
12843
--  DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP
12844
--------------------------------------------------------
1373 dpurdie 12845
 
12846
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
12847
	   	  		  								  	   	 sBuildEnvIdList IN VARCHAR2,
12848
														 nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE 
12849
														 ) IS
12850
/* ---------------------------------------------------------------------------
12851
    Last Modified: Rupesh Solanki
12852
	Version: 3.0.1
12853
   --------------------------------------------------------------------------- */
12854
 
12855
   nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();   
12856
   BsId NUMBER;
12857
   HackBsId NUMBER;
12858
 
12859
 
12860
BEGIN
12861
 
12862
   nBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );
12863
 
12864
   -- Delete Current Build Env settings
12865
   DELETE FROM PACKAGE_BUILD_ENV
12866
   WHERE pv_id = nPvId;
12867
 
12868
   -- Delet Current Package Build Info Settings
12869
   DELETE FROM PACKAGE_BUILD_INFO
12870
   WHERE pv_id = nPvId;
12871
 
12872
   -- Reset flag to N
12873
   UPDATE PACKAGE_VERSIONS SET
12874
	   IS_BUILD_ENV_REQUIRED = 'N'
12875
   WHERE PV_ID = nPvId;
12876
 
12877
 
12878
   -- Set new Build Env
12879
   IF NOT sBuildEnvIdList IS NULL THEN
12880
	FOR i IN 1..nBsCollector.COUNT
12881
	LOOP   
12882
 
12883
	BsId := nBsCollector(i);
12884
 
12885
	IF nBuildStandard = 2 THEN
12886
	   IF BsId = 1 THEN
12887
	   	  HackBsId := 11;
12888
	   ELSE
12889
	   	  HackBsId := 12;
12890
	   END IF;
12891
 
12892
   	  -- Insert into PACKAGE_BUILD_ENV
12893
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
12894
	  SELECT nPvId AS PV_ID,
12895
	  		 be.BE_ID
12896
	    FROM BUILD_ENVIRONMENTS be
12897
	   WHERE be.BE_ID IN ( HackBsId );
12898
 
12899
   	  -- Insert into PACKAGE_BUILD_INFO
12900
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
12901
	  SELECT nPvId AS PV_ID,
12902
	  		 be.BM_ID
12903
	    FROM BUILD_MACHINES be
12904
	   WHERE be.BM_ID IN ( BsId );						 
12905
 
12906
	   -- Set flag to Y
12907
	   UPDATE PACKAGE_VERSIONS SET
12908
		   IS_BUILD_ENV_REQUIRED = 'Y'
12909
	   WHERE PV_ID = nPvId;	
12910
 
12911
 
12912
	ELSE
12913
 
12914
   	  -- Insert into PACKAGE_BUILD_ENV
12915
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
12916
	  SELECT nPvId AS PV_ID,
12917
	  		 be.BE_ID
12918
	    FROM BUILD_ENVIRONMENTS be
12919
	   WHERE be.BE_ID IN ( BsId );
12920
 
12921
   	  -- Insert into PACKAGE_BUILD_INFO
12922
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
12923
	  SELECT nPvId AS PV_ID,
12924
	  		 be.BM_ID
12925
	    FROM BUILD_MACHINES be
12926
	   WHERE be.BM_ID IN ( BsId );						 
12927
 
12928
	   -- Set flag to Y
12929
	   UPDATE PACKAGE_VERSIONS SET
12930
		   IS_BUILD_ENV_REQUIRED = 'Y'
12931
	   WHERE PV_ID = nPvId;
12932
 
12933
	END IF;  
12934
 
12935
 
12936
	END LOOP;	   
12937
 
12938
   END IF;
12939
 
12940
 
12941
END Set_Package_Build_Env_Temp;
1374 dpurdie 12942
/
12943
--------------------------------------------------------
3959 dpurdie 12944
--  DDL for Procedure SET_TO_AUTOBUILDABLE
1374 dpurdie 12945
--------------------------------------------------------
1373 dpurdie 12946
 
3959 dpurdie 12947
  CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (
12948
   nrtagid     IN   NUMBER,
12949
   spvidlist   IN   VARCHAR2
12950
)
12951
IS
12952
/******************************************************************************
12953
   NAME:       SET_TO_AUTOBUILDABLE
12954
   PURPOSE:
1373 dpurdie 12955
 
3959 dpurdie 12956
   REVISIONS:
12957
   Ver        Date        Author           Description
12958
   ---------  ----------  ---------------  ------------------------------------
12959
   1.0        15/12/2006   Rupesh Solanki       1. Created this procedure.
1373 dpurdie 12960
 
3959 dpurdie 12961
   NOTES:
1373 dpurdie 12962
 
3959 dpurdie 12963
   Automatically available Auto Replace Keywords:
12964
      Object Name:     SET_TO_AUTOBUILDABLE
12965
      Sysdate:         15/12/2006
12966
      Date and Time:   15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AM
12967
      Username:         (set in TOAD Options, Procedure Editor)
12968
      Table Name:       (set in the "New PL/SQL Object" dialog)
1373 dpurdie 12969
 
3959 dpurdie 12970
******************************************************************************/
12971
   npvidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
12972
   PvId NUMBER;
1373 dpurdie 12973
BEGIN
12974
 
3959 dpurdie 12975
   npvidcollector := in_list_number2 (spvidlist);
12976
 
12977
   UPDATE package_versions
12978
      SET is_autobuildable = 'N'
12979
    WHERE pv_id IN (SELECT pv_id
12980
                      FROM release_content
12981
                     WHERE rtag_id = nrtagid);
1373 dpurdie 12982
 
3959 dpurdie 12983
 
12984
 
12985
   	FOR i IN 1..npvidcollector.COUNT
12986
	LOOP
12987
		PvId := npvidcollector(i);
1373 dpurdie 12988
 
3959 dpurdie 12989
		UPDATE package_versions
12990
		set is_autobuildable = 'Y'
12991
		where pv_id = PvId;
1373 dpurdie 12992
 
3959 dpurdie 12993
	END LOOP;
12994
 
12995
 
12996
END set_to_autobuildable;
12997
/
12998
--------------------------------------------------------
12999
--  DDL for Procedure SHIFT_INSTALL_ORDER
13000
--------------------------------------------------------
1373 dpurdie 13001
 
3959 dpurdie 13002
  CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
13003
												  nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
13004
                                                  nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS
13005
/* ---------------------------------------------------------------------------
13006
    Version: 3.0
13007
   --------------------------------------------------------------------------- */
1373 dpurdie 13008
 
3959 dpurdie 13009
currInstallOrder NUMBER;
13010
FromInstallOrder NUMBER;
1373 dpurdie 13011
 
3959 dpurdie 13012
BEGIN
1373 dpurdie 13013
 
3959 dpurdie 13014
	 -- Get Current Install Order
13015
     SELECT pp.INSTALL_ORDER INTO currInstallOrder
13016
       FROM PACKAGE_PATCHES pp
13017
      WHERE pp.PV_ID = nPvId
13018
        AND pp.PATCH_ID = nPatchId;
1373 dpurdie 13019
 
13020
 
3959 dpurdie 13021
	 IF currInstallOrder > nToInstallOrder
13022
	 THEN
1373 dpurdie 13023
 
3959 dpurdie 13024
		FromInstallOrder := nToInstallOrder;
1373 dpurdie 13025
 
3959 dpurdie 13026
	    -- Shift others Up
13027
		UPDATE PACKAGE_PATCHES pp SET
13028
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER + 1
13029
		 WHERE pp.PV_ID = nPvId
13030
           AND pp.PATCH_ID != nPatchId
13031
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  currInstallOrder - 1;
1373 dpurdie 13032
 
13033
 
3959 dpurdie 13034
	 ELSIF currInstallOrder < nToInstallOrder
13035
	 THEN
1373 dpurdie 13036
 
3959 dpurdie 13037
		FromInstallOrder := currInstallOrder + 1;
1373 dpurdie 13038
 
3959 dpurdie 13039
		-- Shift others Down
13040
        UPDATE PACKAGE_PATCHES pp SET
13041
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER - 1
13042
		 WHERE pp.PV_ID = nPvId
13043
           AND pp.PATCH_ID != nPatchId
13044
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  nToInstallOrder;
1373 dpurdie 13045
 
3959 dpurdie 13046
	 END IF;
1373 dpurdie 13047
 
13048
 
3959 dpurdie 13049
	 -- Move Patch to new install order
13050
     UPDATE PACKAGE_PATCHES pp SET
13051
		    pp.INSTALL_ORDER = nToInstallOrder
13052
	  WHERE pp.PV_ID = nPvId
13053
	    AND pp.PATCH_ID = nPatchId;
1373 dpurdie 13054
 
13055
 
3959 dpurdie 13056
END Shift_Install_Order;
1374 dpurdie 13057
/
13058
--------------------------------------------------------
3959 dpurdie 13059
--  DDL for Procedure SPLIT_VERSION
1374 dpurdie 13060
--------------------------------------------------------
1373 dpurdie 13061
 
3959 dpurdie 13062
  CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
13063
                                            SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,
13064
                                            SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,
13065
                                            SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE  ) IS
1373 dpurdie 13066
/* ---------------------------------------------------------------------------
3959 dpurdie 13067
    Version: 3.0.0
1373 dpurdie 13068
   --------------------------------------------------------------------------- */
13069
 
3959 dpurdie 13070
    TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)
13071
        INDEX BY BINARY_INTEGER;
1373 dpurdie 13072
 
3959 dpurdie 13073
    version_components VERSION_COMPONENTS_TYPE;
13074
    lastDot NUMBER := 0;
13075
    currDot NUMBER := 0;
1373 dpurdie 13076
 
13077
BEGIN
3959 dpurdie 13078
    currDot := INSTR ( SSpkg_version, '.', -1 );      -- Find 1st dot from the right
1373 dpurdie 13079
 
3959 dpurdie 13080
    IF ( currDot > 0 )
1373 dpurdie 13081
    THEN
3959 dpurdie 13082
        -- YES dot separator found --
13083
        SSV_EXT := GET_V_EXT( SSpkg_version );
1373 dpurdie 13084
 
3959 dpurdie 13085
        IF NOT SSV_EXT IS NULL
1373 dpurdie 13086
        THEN
3959 dpurdie 13087
            lastDot := currDot;
13088
            currDot := INSTR ( SSpkg_version, '.', -1, 2 );   -- Find 2nd dot from the right
1373 dpurdie 13089
 
3959 dpurdie 13090
            IF ( currDot > 0 )
13091
            THEN
13092
                -- XXXX.M.E
13093
                SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);
13094
                SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;
13095
            ELSE
13096
                -- XXXX.E
13097
                SSV_MM := NULL;
13098
                SSV_NMM := SSpkg_version;
13099
            END IF;
1373 dpurdie 13100
 
13101
        ELSE
3959 dpurdie 13102
            -- XXXX.M
13103
            SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );
13104
            SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );
1373 dpurdie 13105
 
13106
        END IF;
13107
 
13108
    ELSE
3959 dpurdie 13109
        -- NO dot separator found --
13110
        -- XXXXXX
13111
        SSV_MM  := NULL;
13112
        SSV_NMM := SSpkg_version;
13113
        SSV_EXT := NULL;
1373 dpurdie 13114
 
13115
    END IF;
13116
 
3959 dpurdie 13117
END Split_Version;
1374 dpurdie 13118
/
13119
--------------------------------------------------------
3959 dpurdie 13120
--  DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE
1374 dpurdie 13121
--------------------------------------------------------
1373 dpurdie 13122
 
3959 dpurdie 13123
  CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)IS
13124
Auto CHAR;
13125
/******************************************************************************
13126
   NAME:       SWITCH_REPRODUCIBLE_PACKAGE
13127
   PURPOSE:    
1373 dpurdie 13128
 
3959 dpurdie 13129
   REVISIONS:
13130
   Ver        Date        Author           Description
13131
   ---------  ----------  ---------------  ------------------------------------
13132
   1.0        14/12/2006   Rupesh Solanki       1. Created this procedure.
1373 dpurdie 13133
 
3959 dpurdie 13134
   NOTES:
1373 dpurdie 13135
 
3959 dpurdie 13136
   Automatically available Auto Replace Keywords:
13137
      Object Name:     SWITCH_REPRODUCIBLE_PACKAGE
13138
      Sysdate:         14/12/2006
13139
      Date and Time:   14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AM
13140
      Username:         (set in TOAD Options, Procedure Editor)
13141
      Table Name:       (set in the "New PL/SQL Object" dialog)
1373 dpurdie 13142
 
3959 dpurdie 13143
******************************************************************************/
1373 dpurdie 13144
BEGIN
13145
 
3959 dpurdie 13146
	 SELECT IS_AUTOBUILDABLE into Auto
13147
	 FROM PACKAGE_VERSIONS 
13148
	 WHERE PV_ID = nPvId;
1373 dpurdie 13149
 
3959 dpurdie 13150
	 IF Auto = 'N' Then
13151
 
13152
	 	UPDATE PACKAGE_VERSIONS
13153
	 	SET IS_AUTOBUILDABLE = 'Y'
13154
	 	WHERE PV_ID = nPvId;
13155
 
13156
 
13157
	 	/* LOG ACTION */
13158
   		Log_Action ( nPvId, 'reproducible_package', nUserId );	 
13159
 
13160
	 Else
13161
 
13162
		 UPDATE PACKAGE_VERSIONS
13163
		 SET IS_AUTOBUILDABLE = 'N'
13164
		 WHERE PV_ID = nPvId;
13165
 
13166
 
13167
	 	 /* LOG ACTION */
13168
   	 	 Log_Action ( nPvId, 'unreproducible_package', nUserId );	 
13169
 
13170
	 End If;
13171
 
13172
 
1373 dpurdie 13173
 
3959 dpurdie 13174
 
1373 dpurdie 13175
 
13176
 
13177
 
13178
 
3959 dpurdie 13179
END SWITCH_REPRODUCIBLE_PACKAGE;
1374 dpurdie 13180
/
13181
--------------------------------------------------------
3959 dpurdie 13182
--  DDL for Procedure SYNC_PROJECTS_NEW_VERSION
1374 dpurdie 13183
--------------------------------------------------------
1373 dpurdie 13184
 
3959 dpurdie 13185
  CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id 				IN NUMBER,
13186
														  sSyncRtagsInList		IN VARCHAR2,
13187
				                                          nUser_id 				IN NUMBER ) IS
1373 dpurdie 13188
/* ---------------------------------------------------------------------------
13189
    Version: 3.0.0
13190
   --------------------------------------------------------------------------- */
13191
 
3959 dpurdie 13192
	CURSOR sync_rtags_cur IS
13193
        SELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_id
13194
		  FROM release_content rc,
13195
		  	   package_versions pv,
13196
		       package_versions opv
13197
		 WHERE rc.pv_id = pv.pv_id
13198
		   AND opv.pkg_id = pv.pkg_id
13199
		   AND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')
13200
		   AND opv.pv_id = nPv_id
13201
		   AND rtag_id IN ( SELECT *
13202
		   	   		   	      FROM THE (
13203
					   	   		   	    SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )
13204
					       		   	    FROM dual
13205
									   )
13206
						  );
13207
    sync_rtags_rec sync_rtags_cur%ROWTYPE;
1373 dpurdie 13208
 
13209
BEGIN
13210
 
3959 dpurdie 13211
	OPEN sync_rtags_cur;
13212
	FETCH sync_rtags_cur INTO sync_rtags_rec;
1373 dpurdie 13213
 
3959 dpurdie 13214
	WHILE sync_rtags_cur%FOUND
13215
	LOOP
13216
		DELETE FROM RELEASE_CONTENT
13217
		 WHERE rtag_id = sync_rtags_rec.rtag_id
13218
	       AND pv_id = sync_rtags_rec.pv_id;
1373 dpurdie 13219
 
3959 dpurdie 13220
		INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
13221
	   		   VALUES ( sync_rtags_rec.rtag_id,
13222
		       		  	nPv_id,
13223
						sync_rtags_rec.BASE_VIEW_ID,
13224
	           			Ora_Sysdate,
13225
	           			nUser_id,
13226
 
13227
	      	   		   );
1373 dpurdie 13228
 
3959 dpurdie 13229
-- 		UPDATE RELEASE_CONTENT
13230
-- 	       SET pv_id = nPv_id,
13231
-- 	           insert_stamp = Ora_Sysdate,
13232
-- 	           insertor_id = nUser_id
13233
-- 	     WHERE rtag_id = sync_rtags_rec.rtag_id
13234
-- 	       AND pv_id = sync_rtags_rec.pv_id;
1373 dpurdie 13235
 
3959 dpurdie 13236
		FETCH sync_rtags_cur INTO sync_rtags_rec;
13237
	END LOOP;
1373 dpurdie 13238
 
3959 dpurdie 13239
	CLOSE sync_rtags_cur;
13240
 
13241
END Sync_Projects_New_Version;
1374 dpurdie 13242
/
13243
--------------------------------------------------------
3959 dpurdie 13244
--  DDL for Procedure TEST
1374 dpurdie 13245
--------------------------------------------------------
1373 dpurdie 13246
 
3959 dpurdie 13247
  CREATE OR REPLACE PROCEDURE "TEST" 
13248
IS
1373 dpurdie 13249
 
3959 dpurdie 13250
proc_id NUMBER;
13251
/******************************************************************************
13252
   NAME:       DELETE_DO_NOT_RIPPLE
13253
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
13254
               IS RELEASED
1373 dpurdie 13255
 
3959 dpurdie 13256
   REVISIONS:
13257
   Ver        Date        Author           Description
13258
   ---------  ----------  ---------------  ------------------------------------
13259
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
1373 dpurdie 13260
 
3959 dpurdie 13261
   NOTES:
13262
 
13263
   Automatically available Auto Replace Keywords:
13264
      Object Name:     DELETE_DO_NOT_RIPPLE
13265
      Sysdate:         21/04/2006
13266
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
13267
      Username:         (set in TOAD Options, Procedure Editor)
13268
      Table Name:       (set in the "New PL/SQL Object" dialog)
13269
 
13270
******************************************************************************/
13271
   CURSOR ripple_cur
13272
   IS
13273
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
13274
 
13275
   ripple_rec   ripple_cur%ROWTYPE;
1373 dpurdie 13276
BEGIN
3959 dpurdie 13277
   OPEN ripple_cur;
1373 dpurdie 13278
 
3959 dpurdie 13279
   FETCH ripple_cur
13280
    INTO ripple_rec;
1373 dpurdie 13281
 
3959 dpurdie 13282
   WHILE ripple_cur%FOUND
13283
   LOOP
13284
 
13285
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
13286
 
13287
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
13288
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
1373 dpurdie 13289
 
3959 dpurdie 13290
      FETCH ripple_cur
13291
       INTO ripple_rec;
13292
   END LOOP;
13293
END test;
1374 dpurdie 13294
/
13295
--------------------------------------------------------
3959 dpurdie 13296
--  DDL for Procedure TEST_MARCO
1374 dpurdie 13297
--------------------------------------------------------
1373 dpurdie 13298
 
3959 dpurdie 13299
  CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS
1373 dpurdie 13300
/******************************************************************************
3959 dpurdie 13301
   NAME:       TEST_MARCO
1373 dpurdie 13302
   PURPOSE:    
13303
 
13304
   REVISIONS:
13305
   Ver        Date        Author           Description
13306
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 13307
   1.0        2/03/2007          1. Created this procedure.
1373 dpurdie 13308
 
13309
   NOTES:
13310
 
13311
   Automatically available Auto Replace Keywords:
3959 dpurdie 13312
      Object Name:     TEST_MARCO
13313
      Sysdate:         2/03/2007
13314
      Date and Time:   2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PM
1373 dpurdie 13315
      Username:         (set in TOAD Options, Procedure Editor)
13316
      Table Name:       (set in the "New PL/SQL Object" dialog)
13317
 
13318
******************************************************************************/
13319
 
3959 dpurdie 13320
parPv_id    NUMBER;
13321
parPkg_id   NUMBER;
13322
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
13323
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
13324
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
1373 dpurdie 13325
BEGIN
13326
 
3959 dpurdie 13327
SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
1373 dpurdie 13328
 
3959 dpurdie 13329
        /* LOG ACTION */
13330
        Log_Action ( parPv_id, 'new_version', 3764,
13331
        			 'New package version: '|| parPv_id || '.' );
13332
 
13333
        Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );
1373 dpurdie 13334
 
3959 dpurdie 13335
     -- Clone Package Version Details --
13336
            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,
13337
                                           src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )
13338
                SELECT parPv_id         AS pv_id,
13339
                       pv.pkg_id        AS pkg_id,
13340
                       parPv_id || '.'    AS pkg_version,
13341
                       'N'              AS dlocked,
13342
                       Ora_Sysdate      AS created_stamp,
13343
                       3764        AS creator_id,
13344
                       Ora_Sysdatetime  AS modified_stamp,
13345
                       3764        AS modifier_id,
13346
                       SSV_MM          AS V_MM,
13347
                       SSV_NMM         AS V_NMM,
13348
                       SSV_EXT          AS V_EXT,
13349
                       pv.src_path,
13350
                       pv.pv_description,
13351
                       pv.PV_OVERVIEW,
13352
                       112982 	AS LAST_PV_ID,
13353
                       pv.owner_id,
13354
					   pv.BUILD_TYPE,
13355
					   pv.IS_BUILD_ENV_REQUIRED,
13356
					   pv.bs_id,
13357
					   pv.is_autobuildable,
13358
					   pv.IS_DEPLOYABLE
13359
                  FROM PACKAGE_VERSIONS pv
13360
                 WHERE pv.pv_id = 112982;		
1373 dpurdie 13361
 
3959 dpurdie 13362
Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );
1373 dpurdie 13363
 
13364
 
3959 dpurdie 13365
END TEST_MARCO;
13366
/
13367
--------------------------------------------------------
13368
--  DDL for Procedure TOUCH_RELEASE
13369
--------------------------------------------------------
1373 dpurdie 13370
 
3959 dpurdie 13371
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
13372
/* ---------------------------------------------------------------------------
13373
    The purpose of this procedure is to flag in the database that the specified
13374
    release has changed to an extent that the procedure Rebuild_Environment
13375
    should be called at the next opportunity in order that the package state
13376
    icons are all re-evaluated.
13377
    The package state icons are controlled using the pkg_state column in the
13378
    release_content table, and Rebuild_Environment updates that column.
13379
    It will be through user action in the website that Rebuild_Environment will
13380
    be called, for example:
13381
      a) when setting/clearing ignore warnings checkboxes
13382
      b) when someone opens a page upon a rtag/pvid and rebuild_en flag is set
13383
      c) when someone opens the build order report form
13384
      d) when someone modifies dependencies of a package
13385
      + other scenarios (?)
13386
   --------------------------------------------------------------------------- */
13387
BEGIN
13388
   -- Touch Release for Rebuild
13389
   UPDATE RELEASE_TAGS rt SET
13390
          rt.REBUILD_ENV = 'Y',
13391
          rt.REBUILD_STAMP = 0
13392
    WHERE rt.RTAG_ID = nRtagId;
1373 dpurdie 13393
 
3959 dpurdie 13394
END Touch_Release;
1374 dpurdie 13395
/
13396
--------------------------------------------------------
13397
--  DDL for Procedure TOUCH_RELEASE_BULK
13398
--------------------------------------------------------
1373 dpurdie 13399
 
13400
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS
13401
/* ---------------------------------------------------------------------------
13402
    Version: 3.0
13403
   --------------------------------------------------------------------------- */
13404
 
13405
oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
13406
 
13407
BEGIN
13408
	 oRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );
13409
 
13410
	 -- Touch Release for Rebuild
13411
     UPDATE RELEASE_TAGS rt SET
13412
     	rt.REBUILD_ENV = 'Y',
13413
        rt.REBUILD_STAMP = 0
13414
      WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
13415
 
13416
 
13417
END Touch_Release_Bulk;
1374 dpurdie 13418
/
13419
--------------------------------------------------------
3959 dpurdie 13420
--  DDL for Procedure TO_INSERT_VTREE_ID
1374 dpurdie 13421
--------------------------------------------------------
1373 dpurdie 13422
 
3959 dpurdie 13423
  CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS
1373 dpurdie 13424
 
3959 dpurdie 13425
/******************************************************************************
13426
   NAME:       TO_INSERT_VTREE_ID
13427
   PURPOSE:    
1373 dpurdie 13428
 
3959 dpurdie 13429
   REVISIONS:
13430
   Ver        Date        Author           Description
13431
   ---------  ----------  ---------------  ------------------------------------
13432
   1.0        2/02/2007          1. Created this procedure.
1373 dpurdie 13433
 
3959 dpurdie 13434
   NOTES:
1373 dpurdie 13435
 
3959 dpurdie 13436
   Automatically available Auto Replace Keywords:
13437
      Object Name:     TO_INSERT_VTREE_ID
13438
      Sysdate:         2/02/2007
13439
      Date and Time:   2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AM
13440
      Username:         (set in TOAD Options, Procedure Editor)
13441
      Table Name:       (set in the "New PL/SQL Object" dialog)
1373 dpurdie 13442
 
3959 dpurdie 13443
******************************************************************************/
13444
VTreeId NUMBER;																			  																	   
1373 dpurdie 13445
 
13446
 
3959 dpurdie 13447
	CURSOR curInfo IS
13448
    SELECT RTAG_ID
13449
	FROM RELEASE_TAGS
13450
	WHERE VTREE_ID IS NULL;
13451
    recInfo curInfo%ROWTYPE;
13452
 
13453
 
1373 dpurdie 13454
BEGIN
13455
 
3959 dpurdie 13456
	OPEN curInfo;
13457
    FETCH curInfo INTO recInfo;
13458
 
13459
	WHILE curInfo%FOUND
13460
	LOOP
13461
		SELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;
1373 dpurdie 13462
 
3959 dpurdie 13463
		UPDATE RELEASE_TAGS
13464
		SET VTREE_ID = VTreeId
13465
		WHERE RTAG_ID = recInfo.RTAG_ID;
1373 dpurdie 13466
 
3959 dpurdie 13467
		FETCH curInfo INTO recInfo;
13468
	END LOOP;
1373 dpurdie 13469
 
3959 dpurdie 13470
	CLOSE curInfo;
1373 dpurdie 13471
 
3959 dpurdie 13472
END TO_INSERT_VTREE_ID;
1374 dpurdie 13473
/
13474
--------------------------------------------------------
13475
--  DDL for Procedure UNDEPRECATE_PACKAGE
13476
--------------------------------------------------------
1373 dpurdie 13477
 
13478
  CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
13479
	   	  		  								 nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
13480
	   	  		  							   	 nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
13481
											   	 nUserId IN NUMBER) IS
13482
 
13483
ext VARCHAR2(50);
13484
PvIdList VARCHAR2(32767);
13485
nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
13486
PvId NUMBER;
13487
sComments VARCHAR2(32767);
13488
 
13489
BEGIN
13490
 
13491
 
13492
 
13493
	--Extract the package extension
13494
	SELECT V_EXT into ext 
13495
	FROM PACKAGE_VERSIONS 
13496
	WHERE PV_ID = nPvId;
13497
 
13498
	--SELECT COMMENTS into sComments 
13499
	--FROM DEPRECATED_PACKAGES
13500
	--WHERE RTAG_ID = nRtagId
13501
	--AND V_EXT = ext
13502
	--AND PKG_ID = nPkgId;
13503
 
13504
	--SELECT PV_ID into PvIdList FROM
13505
	--RELEASE_CONTENT WHERE RTAG_ID = nRtagId
13506
	--AND PKG_STATE = 6
13507
	--AND PV_ID NOT IN nPvId;
13508
 
13509
 
13510
	IF ext IS NOT NULL THEN
13511
       -- Undeprecate Package
13512
       DELETE FROM DEPRECATED_PACKAGES 
13513
	   WHERE RTAG_ID = nRtagId 
13514
	   AND PKG_ID = nPkgId
13515
	   AND V_EXT = ext;	
13516
 
13517
		UPDATE RELEASE_CONTENT 
13518
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
13519
		WHERE RTAG_ID = nRtagId
13520
		AND PV_ID IN (SELECT PV.PV_ID 
13521
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
13522
					  WHERE PKG.PKG_ID = PV.PKG_ID
13523
					  AND PKG.PKG_ID = nPkgId
13524
					  AND PV.V_EXT = ext
13525
					  UNION
13526
					  SELECT DISTINCT
13527
	 	 		  	 		   qry.PV_ID
13528
							        FROM (
13529
									 	  SELECT dep.*,
13530
										  LEVEL AS LEVEL_NUM
13531
										  FROM PACKAGE_DEPENDENCIES dep
13532
	 								START WITH dep.DPV_ID IN ( nPvId )
13533
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
13534
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
13535
	 								) qry,
13536
									PACKAGES pkg,
13537
									PACKAGE_VERSIONS pv,
13538
									RELEASE_CONTENT rc
13539
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
13540
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
13541
 
13542
					 );	 
13543
 
13544
	ELSE
13545
       -- Undeprecate Package
13546
       DELETE FROM DEPRECATED_PACKAGES 
13547
	   WHERE RTAG_ID = nRtagId 
13548
	   AND PKG_ID = nPkgId
13549
	   AND V_EXT IS NULL;	
13550
 
13551
		UPDATE RELEASE_CONTENT 
13552
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
13553
		WHERE RTAG_ID = nRtagId
13554
		AND PV_ID IN (SELECT PV.PV_ID 
13555
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
13556
					  WHERE PKG.PKG_ID = PV.PKG_ID
13557
					  AND PKG.PKG_ID = nPkgId
13558
					  AND PV.V_EXT IS NULL
13559
					  UNION
13560
					  SELECT DISTINCT
13561
	 	 		  	 		   qry.PV_ID
13562
							        FROM (
13563
									 	  SELECT dep.*,
13564
										  LEVEL AS LEVEL_NUM
13565
										  FROM PACKAGE_DEPENDENCIES dep
13566
	 								START WITH dep.DPV_ID IN ( nPvId )
13567
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
13568
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
13569
	 								) qry,
13570
									PACKAGES pkg,
13571
									PACKAGE_VERSIONS pv,
13572
									RELEASE_CONTENT rc
13573
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
13574
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
13575
 
13576
					 );	 	   
13577
 
13578
	END IF;
13579
 
13580
	--IF PvIdList IS NOT NULL THEN
13581
 
13582
	 --  nIdCollector := IN_LIST_NUMBER ( PvIdList );
13583
 
13584
	 --  FOR i IN 1..nIdCollector.COUNT
13585
	 --  LOOP
13586
	--	   PvId := nIdCollector(i);
13587
 
13588
 
13589
 
13590
	--		Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );
13591
	--		END LOOP;
13592
	--END IF;
13593
 
13594
	Rebuild_environment(nRtagId);			 
13595
 
13596
 
13597
 
13598
END Undeprecate_Package;
1374 dpurdie 13599
/
13600
--------------------------------------------------------
3959 dpurdie 13601
--  DDL for Procedure UNLOCK_PACKAGE
1374 dpurdie 13602
--------------------------------------------------------
1373 dpurdie 13603
 
3959 dpurdie 13604
  CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
13605
											 nUserId IN NUMBER ) IS
13606
/* ---------------------------------------------------------------------------
13607
    Author: Rupesh Solanki
13608
 
13609
	Version: 4.0
13610
   --------------------------------------------------------------------------- */
13611
   STATE CHAR;
13612
 
13613
BEGIN
13614
 
13615
	SELECT DLOCKED INTO STATE
13616
	FROM PACKAGE_VERSIONS
13617
	WHERE PV_ID = nPvId; 
1373 dpurdie 13618
 
3959 dpurdie 13619
	IF STATE = 'A' THEN --It was made official for autobuilds
13620
		-- Unlock Package
13621
		UPDATE PACKAGE_VERSIONS pv SET
13622
		pv.DLOCKED = 'P'
13623
		WHERE pv.PV_ID = nPvId;	
13624
	ELSE
13625
		-- Unlock Package
13626
		UPDATE PACKAGE_VERSIONS pv SET
13627
		pv.DLOCKED = 'N'
13628
		WHERE pv.PV_ID = nPvId;	
13629
 
13630
	END IF;	   
13631
 
13632
    /* LOG ACTION */
13633
   	Log_Action ( nPvId, 'unlock_package', nUserId );
13634
 
13635
END Unlock_Package;
13636
/
13637
--------------------------------------------------------
13638
--  DDL for Procedure UNRIPPLE_PACKAGE
13639
--------------------------------------------------------
13640
 
13641
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (
13642
        sPvIdList IN VARCHAR2,
13643
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
13644
        nUserId IN NUMBER
13645
    ) IS
13646
/* ---------------------------------------------------------------------------
13647
    Version: 4.1
13648
   --------------------------------------------------------------------------- */
13649
 
13650
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
13651
 
13652
BEGIN
13653
 
13654
    IF (sPvIdList IS NULL) THEN
13655
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
13656
    END IF;
13657
 
13658
    oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
13659
 
13660
    -- UnRipple Package
13661
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )
13662
    SELECT nRtagId, pv.PV_ID
13663
    FROM PACKAGE_VERSIONS pv
13664
    WHERE pv.PV_ID IN (
13665
        SELECT *
13666
        FROM TABLE (
13667
            CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )
13668
        )
13669
    );
13670
 
13671
    /* LOG ACTION */
13672
    Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );
13673
 
13674
END UnRipple_Package;
13675
/
13676
--------------------------------------------------------
13677
--  DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT
13678
--------------------------------------------------------
13679
 
13680
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (
13681
        nPvId IN NUMBER,
13682
        nRtagId IN NUMBER,
13683
        nUserId IN NUMBER,
13684
        nrootCausePvId IN NUMBER,
13685
        srootCause IN VARCHAR2,
13686
        srootFile IN VARCHAR2
13687
    ) IS
13688
    ReleaseLocation VARCHAR2(4000);
13689
BEGIN
13690
 
13691
    -- UnRipple Package
13692
    delete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;
13693
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);
13694
 
13695
    /* LOG ACTION */
13696
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
13697
              FROM PROJECTS proj,
13698
                   RELEASE_TAGS rt
13699
             WHERE rt.RTAG_ID = nRtagId
13700
               AND rt.PROJ_ID = proj.PROJ_ID;
13701
 
13702
    /* LOG ACTION */
13703
    Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );
13704
 
13705
END UnRipple_Package_Indirect;
13706
/
13707
--------------------------------------------------------
13708
--  DDL for Procedure UPDATE_ADDITIONAL_NOTE
13709
--------------------------------------------------------
13710
 
13711
  CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,
13712
													 pnPv_id IN NUMBER,
13713
                                                     psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
13714
                                                     psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
13715
                                                     pnUser_id IN NUMBER,
13716
                                                     outErrCode OUT NUMBER
13717
                                                    ) IS
13718
/* ---------------------------------------------------------------------------
13719
    Version: 3.0.1
13720
   --------------------------------------------------------------------------- */
13721
 
13722
    newID NUMBER;
13723
 
13724
    /* Disallow duplicate Note Titles */
13725
	CURSOR an_duplicate_cur IS
13726
        SELECT COUNT(*) AS cnt_note
13727
          FROM ADDITIONAL_NOTES
13728
         WHERE pv_id = pnPv_id
13729
           AND note_id != pnNote_id
13730
           AND note_title = psNote_title;
13731
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
13732
 
13733
BEGIN
13734
	outErrCode := -1;		-- Set default return error code to ERROR state
13735
 
13736
	OPEN an_duplicate_cur;
13737
    FETCH an_duplicate_cur INTO an_duplicate_rec;
13738
 
13739
    IF an_duplicate_rec.cnt_note < 1
13740
    THEN
13741
		--- Update Additional Note ---
13742
	    UPDATE ADDITIONAL_NOTES SET
13743
		       note_title = psNote_title,
13744
		       note_body = psNote_body,
13745
		       mod_date = Ora_Sysdate,
13746
		       mod_user = pnUser_id
13747
         WHERE note_id = pnNote_id
13748
           AND pv_id = pnPv_id;
13749
		outErrCode := 0;		-- Set return to SUCCESS
13750
	END IF;
13751
 
13752
	CLOSE an_duplicate_cur;
13753
END Update_Additional_Note;
13754
/
13755
--------------------------------------------------------
13756
--  DDL for Procedure UPDATE_DEPRECATION_STATE
13757
--------------------------------------------------------
13758
 
13759
  CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) AS
13760
 
13761
recno NUMBER;
13762
 
13763
CURSOR deprecate_cur IS
13764
 
13765
SELECT rc.pv_id
13766
FROM release_content rc
13767
WHERE rtag_id = nnrtag_id
13768
 AND deprecated_state IN(7);
13769
 
13770
deprecate_rec deprecate_cur % rowtype;
13771
 
13772
BEGIN
13773
 
13774
  OPEN deprecate_cur;
13775
 
13776
  FETCH deprecate_cur
13777
  INTO deprecate_rec;
13778
 
13779
  WHILE deprecate_cur % FOUND
13780
  LOOP
13781
 
13782
    SELECT COUNT(*)
13783
    INTO recno
13784
    FROM package_dependencies pd,
13785
      release_content rc
13786
    WHERE pd.pv_id = deprecate_rec.pv_id
13787
     AND rc.pv_id = pd.dpv_id
13788
     AND rc.rtag_id = nnrtag_id
13789
     AND rc.deprecated_state IN(6,   7);
13790
 
13791
    IF recno = 0 THEN
13792
 
13793
      UPDATE release_content
13794
      SET pkg_id = NULL, deprecated_state = NULL
13795
      WHERE pv_id = deprecate_rec.pv_id
13796
       AND rtag_id = nnrtag_id;
13797
 
13798
    END IF;
13799
 
13800
    FETCH deprecate_cur
13801
    INTO deprecate_rec;
13802
  END LOOP;
13803
 
13804
END;
13805
/
13806
--------------------------------------------------------
13807
--  DDL for Procedure UPDATE_MISC_VIEW
13808
--------------------------------------------------------
13809
 
13810
  CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS
1373 dpurdie 13811
/******************************************************************************
3959 dpurdie 13812
   NAME:       UPDATE_MISC_VIEW
13813
   PURPOSE:    
1373 dpurdie 13814
 
13815
   REVISIONS:
13816
   Ver        Date        Author           Description
13817
   ---------  ----------  ---------------  ------------------------------------
3959 dpurdie 13818
   1.0        16/03/2007          1. Created this procedure.
1373 dpurdie 13819
 
13820
   NOTES:
13821
 
13822
   Automatically available Auto Replace Keywords:
3959 dpurdie 13823
      Object Name:     UPDATE_MISC_VIEW
13824
      Sysdate:         16/03/2007
13825
      Date and Time:   16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AM
1373 dpurdie 13826
      Username:         (set in TOAD Options, Procedure Editor)
13827
      Table Name:       (set in the "New PL/SQL Object" dialog)
13828
 
13829
******************************************************************************/
3959 dpurdie 13830
   CURSOR view_cur /*Create a record set to store the ripple data*/
13831
   IS
13832
   	 SELECT pkg.pkg_id, rc.base_view_id 
13833
	 FROM package_versions pv, packages pkg, release_content rc
13834
	 where rc.rtag_id = 2362
13835
	 and rc.pv_id = pv.pv_id
13836
	 and pv.pkg_id = pkg.pkg_id;
13837
   view_rec   view_cur%ROWTYPE;
13838
 
13839
 
13840
 
1373 dpurdie 13841
BEGIN
3959 dpurdie 13842
   OPEN view_cur;
1373 dpurdie 13843
 
3959 dpurdie 13844
   FETCH view_cur
13845
    INTO view_rec;
1373 dpurdie 13846
 
3959 dpurdie 13847
   WHILE view_cur%FOUND
13848
   LOOP
1373 dpurdie 13849
 
3959 dpurdie 13850
 
13851
	   update release_content
13852
	   set base_view_id = view_rec.base_view_id
13853
	   where rtag_id = 8027
13854
	   and pv_id IN 
13855
	   (
13856
	   	select pv.pv_id from release_content rc, package_versions pv
13857
		where rc.rtag_id = 8027
13858
		and pv.pv_id = rc.pv_id
13859
		and pv.pkg_id = view_rec.pkg_id 
13860
 
13861
	   );
13862
 
13863
 
1373 dpurdie 13864
 
3959 dpurdie 13865
 
13866
 
13867
 
13868
 
13869
 
1373 dpurdie 13870
 
3959 dpurdie 13871
   FETCH view_cur
13872
   		 INTO view_rec;
13873
   END LOOP;	 
1373 dpurdie 13874
 
13875
 
13876
 
13877
 
3959 dpurdie 13878
 
13879
END UPDATE_MISC_VIEW; 
1374 dpurdie 13880
/
13881
--------------------------------------------------------
3959 dpurdie 13882
--  DDL for Procedure UPDATE_PACKAGE_DEPENDENCY
1374 dpurdie 13883
--------------------------------------------------------
1373 dpurdie 13884
 
3959 dpurdie 13885
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,
13886
                                                        SSdep_name IN PACKAGES.pkg_name%TYPE,
13887
                                                        SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
13888
                                                        CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,
13889
                                                        NNuser_id IN NUMBER,
13890
                                                        NNdelete_old_dependency IN NUMBER
13891
                                                       ) IS
1373 dpurdie 13892
/* ---------------------------------------------------------------------------
3959 dpurdie 13893
    Version: 3.3
1373 dpurdie 13894
   --------------------------------------------------------------------------- */
13895
 
3959 dpurdie 13896
    retPV_ID NUMBER;
13897
    SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;
13898
	DepIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
13899
    PvIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
13900
    NNpkg_id NUMBER;
13901
    NNdpkg_id NUMBER;
1373 dpurdie 13902
 
13903
BEGIN
3959 dpurdie 13904
    --- Seed database with package_name and version if required ---
13905
    Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );
1373 dpurdie 13906
 
3959 dpurdie 13907
    -- get v_ext,pkg_id of current dependency
13908
    SELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatch
13909
      FROM PACKAGE_VERSIONS
13910
     WHERE pv_id = retPV_ID;
1373 dpurdie 13911
 
3959 dpurdie 13912
    -- get pkg_id of parent package
13913
    SELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatch
13914
      FROM PACKAGE_VERSIONS
13915
     WHERE pv_id = NNpv_id;
1373 dpurdie 13916
 
13917
 
3959 dpurdie 13918
	IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR
13919
    	( (PvIsPatch IS NOT NULL) )THEN
1373 dpurdie 13920
 
3959 dpurdie 13921
	    IF NNdelete_old_dependency = 1 THEN
13922
	        /* Used for CUSTOM dependency add/edit */
1373 dpurdie 13923
 
3959 dpurdie 13924
	        --- Remove old dependency ---
13925
            IF (PvIsPatch IS NULL) THEN
13926
            	-- Do it for Packages
13927
		        DELETE FROM PACKAGE_DEPENDENCIES
13928
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
13929
		            (
13930
		            SELECT dep.*
13931
		              FROM PACKAGE_DEPENDENCIES dep,
13932
		                   PACKAGE_VERSIONS dpv,
13933
		                   PACKAGE_VERSIONS pv
13934
		             WHERE dep.dpv_id = dpv.pv_id
13935
		               AND dep.pv_id = NNpv_id
13936
		               AND pv.pv_id = retPV_ID
13937
		               AND dpv.pkg_id = pv.pkg_id
13938
		               AND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|')
13939
		            );
13940
            ELSE
13941
            	-- Do it for Patches
13942
                DELETE FROM PACKAGE_DEPENDENCIES
13943
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
13944
		            (
13945
		            SELECT dep.*
13946
		              FROM PACKAGE_DEPENDENCIES dep
13947
		             WHERE dep.dpv_id = retPV_ID
13948
		               AND dep.pv_id = NNpv_id
13949
		            );
13950
			END IF;
1373 dpurdie 13951
 
3959 dpurdie 13952
	    END IF;
1373 dpurdie 13953
 
3959 dpurdie 13954
	    /* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */
13955
 
13956
	    --- Add new dependency ---
13957
	    INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )
13958
	    VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );
13959
 
13960
	END IF;
13961
 
13962
END Update_Package_Dependency;
1374 dpurdie 13963
/
13964
--------------------------------------------------------
3959 dpurdie 13965
--  DDL for Procedure UPDATE_PACKAGE_STATES
1374 dpurdie 13966
--------------------------------------------------------
1373 dpurdie 13967
 
3959 dpurdie 13968
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,
13969
                                                    NNsession_num IN NUMBER ) IS
13970
/* =============  STATE RULES =================== */
13971
/*
13972
   MNR   MRR   MN   MR    |   pkg_state
13973
   ------------------------------------
13974
 
13975
 
13976
 
13977
 
13978
   ------------------------------------
13979
 
13980
 
13981
 
13982
 
13983
   ------------------------------------
13984
    1     0     0     0   |      MINOR_READY
13985
    1     0     0     1   |      MAJOR
13986
    1     0     1     0   |      MINOR
13987
    1     0     1     1   |      MAJOR
13988
   ------------------------------------
13989
    1     1     0     0   |      MAJOR_READY
13990
    1     1     0     1   |      MAJOR
13991
    1     1     1     0   |      MAJOR
13992
    1     1     1     1   |      MAJOR
13993
   ------------------------------------
13994
*/
13995
BEGIN
13996
    /*----------------------------------------------
13997
    ||              MINOR READY
13998
    */----------------------------------------------
1373 dpurdie 13999
 
3959 dpurdie 14000
    UPDATE release_content
14001
       SET pkg_state = 4
14002
     WHERE rtag_id = NNrtag_id
14003
       AND pv_id IN
14004
           (
14005
           SELECT DISTINCT pv_id
14006
           FROM temp_env_states
14007
           WHERE session_num = NNsession_num
14008
             AND level_num = 1
14009
             AND tes_state = 2
14010
           );
1373 dpurdie 14011
 
3959 dpurdie 14012
    /*----------------------------------------------
14013
    ||              MAJOR READY
14014
    */----------------------------------------------
14015
    UPDATE release_content
14016
       SET pkg_state = 3
14017
     WHERE rtag_id = NNrtag_id
14018
       AND pv_id IN
14019
           (
14020
           SELECT DISTINCT pv_id
14021
           FROM temp_env_states
14022
           WHERE session_num = NNsession_num
14023
             AND level_num = 1
14024
             AND tes_state IN (0,1)
14025
           );
1373 dpurdie 14026
 
3959 dpurdie 14027
    /*----------------------------------------------
14028
    ||                MINOR
14029
    */----------------------------------------------
14030
    UPDATE release_content
14031
       SET pkg_state = 2
14032
     WHERE rtag_id = NNrtag_id
14033
       AND pv_id IN
14034
           (
14035
           SELECT DISTINCT pv_id
14036
            FROM temp_env_states
14037
            WHERE session_num = NNsession_num
14038
              AND level_num >= 2
14039
              AND tes_state = 2
14040
            MINUS
14041
           SELECT pv_id
14042
             FROM release_content
14043
            WHERE rtag_id = NNrtag_id
14044
              AND pkg_state = 3
14045
           );
1373 dpurdie 14046
 
3959 dpurdie 14047
    /*----------------------------------------------
14048
    ||                MAJOR
14049
    */----------------------------------------------
14050
    UPDATE release_content
14051
       SET pkg_state = 1
14052
     WHERE rtag_id = NNrtag_id
14053
       AND pv_id IN
14054
           (
14055
           SELECT DISTINCT pv_id
14056
           FROM temp_env_states
14057
           WHERE session_num = NNsession_num
14058
             AND level_num >= 2
14059
             AND tes_state IN (0,1)
14060
           /* MAJOR EXCEPTION - When package has Major Ready and Minor */
14061
           UNION
14062
           SELECT DISTINCT tes.pv_id
14063
           FROM temp_env_states tes,
14064
                release_content rc
14065
           WHERE tes.session_num = NNsession_num
14066
             AND tes.level_num >= 2
14067
             AND tes.tes_state = 2
14068
             AND rtag_id = NNrtag_id
14069
             AND rc.pv_id = tes.pv_id
14070
             AND rc.pkg_state = 3
14071
           );
1373 dpurdie 14072
 
3959 dpurdie 14073
    /*----------------------------------------------
14074
    ||                 OK
14075
    */----------------------------------------------
14076
    UPDATE release_content
14077
       SET pkg_state = 0
14078
     WHERE rtag_id = NNrtag_id
14079
       AND pv_id IN
14080
           (
14081
           SELECT rc.pv_id
14082
             FROM release_content rc
14083
            WHERE rc.rtag_id = NNrtag_id
14084
              AND NOT rc.pv_id IN
14085
                    (
14086
                     SELECT DISTINCT pv_id
14087
                     FROM temp_env_states WHERE session_num = NNsession_num
14088
                    )
14089
           );
1373 dpurdie 14090
 
3959 dpurdie 14091
      Update_Deprecation_State (NNrtag_id);
1373 dpurdie 14092
 
3959 dpurdie 14093
    /*----------------------------------------------
14094
    ||              PEGGED VERSIONS DEPENDENT
14095
    */----------------------------------------------
14096
    UPDATE release_content
14097
       SET pkg_state = 10
14098
     WHERE rtag_id = NNrtag_id
14099
       AND pv_id IN
14100
           (
14101
           SELECT DISTINCT pv_id
14102
           FROM pegged_versions pegv
14103
           WHERE pegv.rtag_id = NNrtag_id
14104
           );
1373 dpurdie 14105
 
3959 dpurdie 14106
    /*----------------------------------------------
14107
    ||              ADVISORY RIPPLE
14108
    */----------------------------------------------
14109
    UPDATE release_content
14110
       SET pkg_state = 8
14111
     WHERE rtag_id = NNrtag_id
14112
       AND pv_id IN
14113
           (
14114
           SELECT DISTINCT pv_id
14115
           FROM advisory_ripple ar
14116
           WHERE ar.rtag_id = NNrtag_id
14117
           )
14118
       AND pv_id IN
14119
           (
14120
           SELECT DISTINCT pv_id
14121
           FROM release_content rc
14122
           WHERE rc.rtag_id = NNrtag_id
14123
           );
1373 dpurdie 14124
 
3959 dpurdie 14125
END Update_Package_States;
14126
/
14127
--------------------------------------------------------
14128
--  DDL for Procedure UPDATE_PROCESSES
14129
--------------------------------------------------------
1373 dpurdie 14130
 
3959 dpurdie 14131
  CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES" 
14132
IS
1373 dpurdie 14133
 
3959 dpurdie 14134
proc_id NUMBER;
14135
/******************************************************************************
14136
   NAME:       DELETE_DO_NOT_RIPPLE
14137
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
14138
               IS RELEASED
1373 dpurdie 14139
 
3959 dpurdie 14140
   REVISIONS:
14141
   Ver        Date        Author           Description
14142
   ---------  ----------  ---------------  ------------------------------------
14143
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
1373 dpurdie 14144
 
3959 dpurdie 14145
   NOTES:
1373 dpurdie 14146
 
3959 dpurdie 14147
   Automatically available Auto Replace Keywords:
14148
      Object Name:     DELETE_DO_NOT_RIPPLE
14149
      Sysdate:         21/04/2006
14150
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
14151
      Username:         (set in TOAD Options, Procedure Editor)
14152
      Table Name:       (set in the "New PL/SQL Object" dialog)
1373 dpurdie 14153
 
3959 dpurdie 14154
******************************************************************************/
14155
   CURSOR ripple_cur
14156
   IS
14157
      select proc_id,  proc_name, run_as, pkg_owner, is_interface from processes;
1373 dpurdie 14158
 
3959 dpurdie 14159
   ripple_rec   ripple_cur%ROWTYPE;
14160
BEGIN
14161
   OPEN ripple_cur;
14162
 
14163
   FETCH ripple_cur
14164
    INTO ripple_rec;
14165
 
14166
   WHILE ripple_cur%FOUND
14167
   LOOP
14168
 
14169
 
14170
update deployment_manager.processes_config 
14171
set proc_id = ripple_rec.proc_id
14172
where pkg_health_tag = ripple_rec.proc_name
14173
and cmd_interface IS NULL
14174
and pkg_owner IS NULL
14175
and is_interface IS NULL; 
14176
 
14177
 
14178
      FETCH ripple_cur
14179
       INTO ripple_rec;
14180
   END LOOP;
14181
END UPDATE_PROCESSES;
1374 dpurdie 14182
/
14183
--------------------------------------------------------
3959 dpurdie 14184
--  DDL for Procedure UPDATE_RUNTIME_DEPENDENCY
1374 dpurdie 14185
--------------------------------------------------------
1373 dpurdie 14186
 
3959 dpurdie 14187
  CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,
14188
				   	  		  						    NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,
14189
				   	  		  						    SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
14190
													    SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,
14191
													    SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,
14192
													    NNuser_id IN NUMBER ) IS
1373 dpurdie 14193
/* ---------------------------------------------------------------------------
3959 dpurdie 14194
    Version: 3.0.1
1373 dpurdie 14195
   --------------------------------------------------------------------------- */
14196
 
3959 dpurdie 14197
    retRTD_ID	NUMBER;
14198
	CURSOR rtd_cur IS
14199
	    SELECT pv.pkg_version, pkg.pkg_name
14200
		  FROM runtime_dependencies rtd,
14201
		       package_versions pv,
14202
			   packages pkg
14203
		 WHERE rtd.rtd_id = pv.pv_id
14204
		   AND pv.pkg_id = pkg.pkg_id
14205
		   AND rtd.pv_id = NNpv_id
14206
		   AND rtd.rtd_id = NNrtd_id;
14207
	   rtd_rec rtd_cur%ROWTYPE;
1373 dpurdie 14208
 
3959 dpurdie 14209
	CURSOR old_rtd_cur IS
14210
	    SELECT pv.pv_id
14211
		  FROM package_versions pv
14212
		 WHERE pv.pkg_id IN ( SELECT rtdpv.pkg_id
14213
		 	   			 	    FROM package_versions rtdpv
14214
							   WHERE rtdpv.pv_id = NNrtd_id )
14215
		   AND pv.pkg_version = SSrtd_version;
14216
	old_rtd_rec old_rtd_cur%ROWTYPE;
1373 dpurdie 14217
 
3959 dpurdie 14218
 
1373 dpurdie 14219
BEGIN
14220
 
3959 dpurdie 14221
    -- Get current runtime dependency details
14222
	OPEN rtd_cur;
14223
    FETCH rtd_cur INTO rtd_rec;
1373 dpurdie 14224
 
14225
 
14226
 
14227
 
3959 dpurdie 14228
	IF rtd_rec.pkg_version != SSrtd_version THEN
14229
           -- Version has changed, hence create new runtime dependency --
14230
	    /* NOTE: You must create new version as updating just a version will affect
14231
		        all packages using this runtime dependency and user does not expect that.
14232
		        It is safer to create new version */
14233
		OPEN old_rtd_cur;
14234
		FETCH old_rtd_cur INTO old_rtd_rec;
1373 dpurdie 14235
 
14236
 
3959 dpurdie 14237
		IF old_rtd_cur%NOTFOUND
14238
		THEN
14239
			-- Version not found, hence Create New version --
14240
    		Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );
1373 dpurdie 14241
 
3959 dpurdie 14242
			-- Update runtime dependency table --
14243
			UPDATE runtime_dependencies SET
14244
				   rtd_id = retRTD_ID,
14245
				   rtd_url = SSrtd_url,
14246
				   rtd_comments = SSrtd_comments
14247
			 WHERE pv_id = NNpv_id
14248
			   AND rtd_id = NNrtd_id;
1373 dpurdie 14249
 
3959 dpurdie 14250
		ELSE
14251
			-- Update runtime dependency table --
14252
			UPDATE runtime_dependencies SET
14253
				   rtd_id = old_rtd_rec.pv_id,
14254
				   rtd_url = SSrtd_url,
14255
				   rtd_comments = SSrtd_comments
14256
			 WHERE pv_id = NNpv_id
14257
			   AND rtd_id = NNrtd_id;
14258
 
14259
		END IF;
14260
 
14261
 
14262
		CLOSE old_rtd_cur;
14263
 
14264
	ELSE
14265
		--  Version has not changed, hence update everithing except	version --
14266
		UPDATE runtime_dependencies SET
14267
			   rtd_url = SSrtd_url,
14268
			   rtd_comments = SSrtd_comments
14269
		 WHERE pv_id = NNpv_id
14270
		   AND rtd_id = NNrtd_id;
14271
 
14272
 
14273
 
14274
	END IF;
14275
 
14276
 
14277
	CLOSE rtd_cur;
14278
 
14279
END Update_Runtime_Dependency;
1374 dpurdie 14280
/
14281
--------------------------------------------------------
3959 dpurdie 14282
--  DDL for Procedure UPDATE_UNIT_TEST
1374 dpurdie 14283
--------------------------------------------------------
1373 dpurdie 14284
 
3959 dpurdie 14285
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,
14286
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
14287
											   nPv_id IN NUMBER,
14288
											   nUserId IN NUMBER,
14289
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
14290
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
14291
	                                           sCompletion_date IN VARCHAR2,
14292
											   sDpkg_path IN VARCHAR2,
14293
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
14294
											   sResults IN VARCHAR2,
14295
											   outFileName OUT VARCHAR2
14296
                                              ) IS
1373 dpurdie 14297
/* ---------------------------------------------------------------------------
3959 dpurdie 14298
    Version: 3.1.0
1373 dpurdie 14299
   --------------------------------------------------------------------------- */
3959 dpurdie 14300
 
14301
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
1373 dpurdie 14302
 
3959 dpurdie 14303
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
14304
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
1373 dpurdie 14305
 
3959 dpurdie 14306
 
1373 dpurdie 14307
BEGIN
14308
 
3959 dpurdie 14309
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
14310
       	ResultsURL := sResults;
14311
       ELSE
14312
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
14313
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
14314
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
14315
           END IF;
14316
       END IF;
1373 dpurdie 14317
 
3959 dpurdie 14318
	--- Update Unit Test ---
14319
    UPDATE UNIT_TESTS SET
14320
           TEST_SUMMARY = sTest_summary,
14321
		   NUMOF_TEST = sNumof_test,
14322
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
14323
		   COMPLETED_BY = nUserId,
14324
		   RESULTS_URL = ResultsURL,
14325
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
14326
     WHERE TEST_ID = nTest_id
14327
       AND PV_ID = nPv_id;
1373 dpurdie 14328
 
3959 dpurdie 14329
END Update_Unit_Test;
14330
/
14331
--------------------------------------------------------
14332
--  DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE
14333
--------------------------------------------------------
1373 dpurdie 14334
 
3959 dpurdie 14335
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,
14336
														  pnPv_id IN NUMBER,
14337
					                                      sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,
14338
														  sAcceptanceDate IN VARCHAR2,
14339
														  sAcceptedBy IN NUMBER,
14340
					                                      sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,
14341
														  cUpdateAcceptedStateOnly IN CHAR
14342
					                                     ) IS
14343
/* ---------------------------------------------------------------------------
14344
    Version: 3.0.0
14345
   --------------------------------------------------------------------------- */
1373 dpurdie 14346
 
14347
 
14348
 
3959 dpurdie 14349
BEGIN
14350
	IF cUpdateAcceptedStateOnly = 'Y'
14351
	THEN
14352
		--- Update Accepted State Only ---
14353
		IF ( sAccepted IS NULL )
14354
		THEN
14355
			-- Clear alleptance
14356
			UPDATE UNIT_TESTS SET
14357
		           TEST_ACCEPTED = NULL,
14358
		           ACCEPTANCE_DATE = NULL,
14359
				   ACCEPTED_BY = NULL,
14360
				   REVIEW_COMMENTS = NULL
14361
		     WHERE TEST_ID = pnTest_id
14362
		       AND PV_ID = pnPv_id;
14363
 
14364
	    ELSE
14365
			UPDATE UNIT_TESTS SET
14366
		           TEST_ACCEPTED = sAccepted,
14367
		           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
14368
				   ACCEPTED_BY = sAcceptedBy
14369
		     WHERE TEST_ID = pnTest_id
14370
		       AND PV_ID = pnPv_id;
14371
 
14372
		END IF;
14373
 
14374
 
14375
	ELSE
14376
		--- Update Unit Test Acceptance ---
14377
	    UPDATE UNIT_TESTS SET
14378
	           TEST_ACCEPTED = sAccepted,
14379
			   REVIEW_COMMENTS = sReviewComments,
14380
	           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
14381
			   ACCEPTED_BY = sAcceptedBy
14382
	     WHERE TEST_ID = pnTest_id
14383
	       AND PV_ID = pnPv_id;
14384
 
14385
	END IF;
14386
 
14387
END Update_Unit_Test_Acceptance;
1374 dpurdie 14388
/
14389
--------------------------------------------------------
3959 dpurdie 14390
--  DDL for Procedure UPDATE_UNIT_TEST_TEST
1374 dpurdie 14391
--------------------------------------------------------
1373 dpurdie 14392
 
3959 dpurdie 14393
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,
14394
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
14395
											   nPv_id IN NUMBER,
14396
											   nUserId IN NUMBER,
14397
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
14398
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
14399
	                                           sCompletion_date IN VARCHAR2,
14400
											   sDpkg_path IN VARCHAR2,
14401
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
14402
											   sResults IN VARCHAR2,
14403
											   outFileName OUT VARCHAR2
14404
                                              ) IS
1373 dpurdie 14405
/* ---------------------------------------------------------------------------
3959 dpurdie 14406
    Version: 3.1.0
1373 dpurdie 14407
   --------------------------------------------------------------------------- */
3959 dpurdie 14408
 
14409
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
1373 dpurdie 14410
 
3959 dpurdie 14411
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
14412
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
14413
 
14414
 
1373 dpurdie 14415
BEGIN
14416
 
3959 dpurdie 14417
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
14418
       	ResultsURL := sResults;
14419
       ELSE
14420
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
14421
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
14422
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
14423
           END IF;
14424
       END IF;
1373 dpurdie 14425
 
3959 dpurdie 14426
       /*	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
14427
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
14428
    		sResults_url:= 'doc' || '/' || 
14429
			;
14430
        END IF;*/
14431
	--- Update Unit Test ---
14432
    UPDATE UNIT_TESTS SET
14433
           TEST_SUMMARY = sTest_summary,
14434
		   NUMOF_TEST = sNumof_test,
14435
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
14436
		   COMPLETED_BY = nUserId,
14437
		   RESULTS_URL = ResultsURL,
14438
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
14439
     WHERE TEST_ID = nTest_id
14440
       AND PV_ID = nPv_id;
1373 dpurdie 14441
 
3959 dpurdie 14442
END Update_Unit_Test_Test;
1373 dpurdie 14443
/