Subversion Repositories DevTools

Rev

Rev 2362 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1374 dpurdie 1
--------------------------------------------------------
2362 dpurdie 2
--  File created - Monday-October-29-2012   
1374 dpurdie 3
--------------------------------------------------------
1373 dpurdie 4
 
1374 dpurdie 5
--------------------------------------------------------
6
--  DDL for Function ORA_SYSDATE
7
--------------------------------------------------------
8
 
1373 dpurdie 9
  CREATE OR REPLACE FUNCTION "ORA_SYSDATE" 
10
RETURN DATE
11
IS
12
/* ---------------------------------------------------------------------------
13
    Version: 3.0.0
14
   --------------------------------------------------------------------------- */
15
BEGIN
16
 
17
    RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY' ),'DD-MON-YYYY' );
18
END ORA_SYSDATE;
1374 dpurdie 19
/
20
--------------------------------------------------------
21
--  DDL for Function GET_AUTOMATED_LABEL
22
--------------------------------------------------------
1373 dpurdie 23
 
24
  CREATE OR REPLACE FUNCTION "GET_AUTOMATED_LABEL" ( nPvId IN NUMBER ) RETURN VARCHAR2 IS
25
 
26
/* ---------------------------------------------------------------------------
27
    Version: 3.0.0
28
   --------------------------------------------------------------------------- */
29
 
30
	sPkgName VARCHAR2(4000);
31
	sVext VARCHAR2(4000);
32
 
33
BEGIN
34
 
35
	-- Get package details
36
	SELECT pkg.PKG_NAME, pv.V_EXT INTO sPkgName, sVext
37
	  FROM PACKAGE_VERSIONS pv,
38
	  	   PACKAGES pkg
39
	 WHERE pv.PKG_ID = pkg.PKG_ID
40
	   AND pv.PV_ID = nPvId;
41
 
42
 
43
	-- Generate Label for automated build
44
	RETURN UPPER( sPkgName ||'.'|| nPvId || sVext ||'.WIP' );
45
 
46
END GET_AUTOMATED_LABEL;
1374 dpurdie 47
/
48
--------------------------------------------------------
49
--  DDL for Function CAN_EDIT_PKG_IN_PROJECT
50
--------------------------------------------------------
1373 dpurdie 51
 
52
  CREATE OR REPLACE FUNCTION "CAN_EDIT_PKG_IN_PROJECT" ( nPvId IN NUMBER, nRtagId IN NUMBER ) RETURN NUMBER IS
53
 
54
/* ---------------------------------------------------------------------------
55
    Version: 3.0.0
56
   --------------------------------------------------------------------------- */
57
 
58
    VExt PACKAGE_VERSIONS.V_EXT%TYPE;
59
	ProjId NUMBER;
60
	RowCount NUMBER;
61
	cReleaseMode CHAR(1);
62
 
63
BEGIN
64
 
65
	--RETURN 1;
66
 
67
 
68
	/*--------------- Business Rules Here -------------------*/
69
	IF (nRtagId IS NULL)  OR  (nRtagId < 1)THEN
70
		RETURN 0;
71
	END IF;
72
	/*-------------------------------------------------------*/
73
 
74
 
75
 
76
 
77
 
78
 
79
	/*-- First Check. See if package is used through release reference --*/
80
	SELECT COUNT(rc.PV_ID) INTO RowCount
81
	  FROM (
82
	  		SELECT rl.REF_RTAG_ID
83
			  FROM RELEASE_LINKS rl
84
			 WHERE rl.RTAG_ID = nRtagId
85
	  		) rl,
86
			RELEASE_CONTENT rc
87
	  WHERE rc.RTAG_ID = rl.REF_RTAG_ID
88
	    AND rc.PV_ID = nPvId;			
89
 
90
 
91
	-- Decide if package can be edited  
92
	IF RowCount > 0 THEN
93
		-- Package is referenced from other release, hence cannot be edited
94
		RETURN 0;	
95
 
96
	ELSE
97
 
98
		-- Check is only done for releases in restrictive mode
99
		SELECT rt.OFFICIAL INTO cReleaseMode
100
		  FROM RELEASE_TAGS rt
101
		 WHERE rt.RTAG_ID = nRtagId;
102
 
103
		IF cReleaseMode = 'N'OR cReleaseMode = 'R' THEN
104
			-- Do not do any firther checking,
105
			-- Package is editable here
106
			RETURN 1;
107
		END IF;	
108
 
109
	END IF;
110
 
111
 
112
 
113
 
114
	/*-- Further checking --*/
115
	-- Get proj_id
116
	SELECT rt.PROJ_ID  INTO  ProjId
117
	  FROM RELEASE_TAGS rt
118
	 WHERE rt.RTAG_ID = nRtagId;
119
 
120
 
121
 
122
	BEGIN
123
 
124
		-- Get v_ext
125
		SELECT pv.V_EXT  INTO  Vext
126
		  FROM PACKAGE_VERSIONS pv
127
		 WHERE pv.PV_ID = nPvId;  
128
 
129
		EXCEPTION
130
	    	WHEN NO_DATA_FOUND THEN
131
	       		Vext := NULL;
132
 
133
	END;	 
134
 
135
 
136
	--Temp Hack for Step Project
137
	IF ProjId != 281 THEN
138
		-- Find if package can be edited in this project
139
			SELECT COUNT(pe.EXT_NAME) INTO RowCount
140
	 		FROM PROJECT_EXTENTIONS pe
141
			WHERE pe.PROJ_ID != ProjId  
142
	  		AND pe.EXT_NAME = VExt;
143
	END IF;		
144
 
145
 
146
	-- Decide if package can be edited  
147
	IF RowCount > 0 THEN
148
		-- Package extension is found in other projects, hece NOT EDITABLE
149
		RETURN 0;
150
	ELSE
151
		RETURN 1;	
152
	END IF;
153
 
154
 
155
END CAN_EDIT_PKG_IN_PROJECT;
1374 dpurdie 156
/
157
--------------------------------------------------------
158
--  DDL for Function GET_PV_FIRST_MODIFIED
159
--------------------------------------------------------
1373 dpurdie 160
 
161
  CREATE OR REPLACE FUNCTION "GET_PV_FIRST_MODIFIED" (v_pv_id NUMBER) RETURN DATE IS
162
  ret DATE;
163
BEGIN
164
  SELECT q.modified_stamp
165
    INTO ret
166
    FROM (
167
            SELECT level AS lvl, pvc.pv_id, pvc.modified_stamp, pvc.change_type
168
              FROM package_versions pvc
169
              START WITH pvc.pv_id = v_pv_id
170
            CONNECT BY NOCYCLE pvc.pv_id = PRIOR pvc.last_pv_id
171
          ) Q
172
  WHERE q.change_type IS NOT NULL
173
    AND rownum = 1
174
  ORDER BY q.lvl;
175
 
176
  RETURN ret;
177
END;
1374 dpurdie 178
/
179
--------------------------------------------------------
180
--  DDL for Function GET_BUILD_NUMBER
181
--------------------------------------------------------
1373 dpurdie 182
 
183
  CREATE OR REPLACE FUNCTION "GET_BUILD_NUMBER" (s_version IN VARCHAR2) RETURN VARCHAR2
184
IS
185
/* ---------------------------------------------------------------------------
186
    Version: 1.0.0
187
   --------------------------------------------------------------------------- */
188
BEGIN
189
    IF is_number(s_version) AND LENGTH(s_version) > 3
190
    THEN
191
        RETURN MOD(TO_NUMBER(s_version), 1000);
192
    ELSE
193
        RETURN 0;
194
    END IF;
195
END get_build_number;
1374 dpurdie 196
/
197
--------------------------------------------------------
198
--  DDL for Function ORA_SYSDATETIME
199
--------------------------------------------------------
1373 dpurdie 200
 
201
  CREATE OR REPLACE FUNCTION "ORA_SYSDATETIME" 
202
RETURN DATE
203
IS
204
/* ---------------------------------------------------------------------------
205
    Version: 3.0.0
206
   --------------------------------------------------------------------------- */
207
BEGIN
208
 
209
    RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' );
210
END ORA_SYSDATETIME;
1374 dpurdie 211
/
212
--------------------------------------------------------
213
--  DDL for Function IS_VERSION_EXTENSION
214
--------------------------------------------------------
1373 dpurdie 215
 
216
  CREATE OR REPLACE FUNCTION "IS_VERSION_EXTENSION" (SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE) RETURN BOOLEAN
217
IS
218
/* ---------------------------------------------------------------------------
219
    Version: 3.0.0
220
   --------------------------------------------------------------------------- */
221
 
222
BEGIN
223
    IF LENGTH ( TRIM (TRANSLATE (SSV_EXT, '.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',' ') ) ) > 0
224
    THEN
225
        RETURN FALSE;
226
    ELSE
227
        RETURN TRUE;
228
    END IF;
229
 
230
END IS_VERSION_EXTENSION;
1374 dpurdie 231
/
232
--------------------------------------------------------
233
--  DDL for Function IS_NUMBER
234
--------------------------------------------------------
1373 dpurdie 235
 
236
  CREATE OR REPLACE FUNCTION "IS_NUMBER" (p_val IN VARCHAR2) RETURN BOOLEAN
237
IS
238
   temp_num NUMBER;
239
/* ---------------------------------------------------------------------------
240
    Version: 1.0.0
241
   --------------------------------------------------------------------------- */
242
BEGIN
243
   temp_num := TO_NUMBER(p_val);
244
   RETURN true;
245
EXCEPTION WHEN VALUE_ERROR THEN
246
   RETURN false;
247
END IS_NUMBER;
1374 dpurdie 248
/
249
--------------------------------------------------------
250
--  DDL for Function GET_PATCH_VERSION
251
--------------------------------------------------------
1373 dpurdie 252
 
253
  CREATE OR REPLACE FUNCTION "GET_PATCH_VERSION" (s_version IN VARCHAR2) RETURN VARCHAR2
254
IS
255
/* ---------------------------------------------------------------------------
256
    Version: 1.0.0
257
   --------------------------------------------------------------------------- */
258
BEGIN
259
    IF is_number(s_version) AND LENGTH(s_version) > 3
260
    THEN
261
        RETURN FLOOR(TO_NUMBER(s_version) / 1000);
262
    ELSE
263
        RETURN s_version;
264
    END IF;
265
END get_patch_version;
1374 dpurdie 266
/
267
--------------------------------------------------------
268
--  DDL for Function IN_LIST_NUMBER2
269
--------------------------------------------------------
1373 dpurdie 270
 
271
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER2" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS
272
 
273
/* ---------------------------------------------------------------------------
274
    Version: 3.0.0
275
   --------------------------------------------------------------------------- */
276
 
277
    sync_rtags		   RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
278
	pos				   NUMBER;
279
	in_list			   VARCHAR2(32767) := sInList || ',';
280
 
281
BEGIN
282
 
283
	IF NOT sInList IS NULL
284
	THEN
285
		LOOP
286
	        EXIT WHEN in_list IS NULL;
287
	        pos := INSTR ( in_list, ',' );
288
	        sync_rtags.extend;
289
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
290
	        in_list := SUBSTR ( in_list, pos+1 );
291
		END LOOP;
292
	END IF;
293
 
294
	RETURN sync_rtags;
295
END IN_LIST_NUMBER2;
1374 dpurdie 296
/
297
--------------------------------------------------------
298
--  DDL for Function DT_ADDUSEROBJECT
299
--------------------------------------------------------
1373 dpurdie 300
 
301
  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;
1374 dpurdie 302
/
303
--------------------------------------------------------
304
--  DDL for Function IN_LIST_NUMBER
305
--------------------------------------------------------
1373 dpurdie 306
 
307
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS
308
 
309
/* ---------------------------------------------------------------------------
310
    Version: 3.0.0
311
   --------------------------------------------------------------------------- */
312
 
313
    sync_rtags		   RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
314
	pos				   NUMBER;
315
	in_list			   VARCHAR2(4000) := sInList || ',';
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, ',' );
324
	        sync_rtags.extend;
325
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
326
	        in_list := SUBSTR ( in_list, pos+1 );
327
		END LOOP;
328
	END IF;
329
 
330
	RETURN sync_rtags;
331
END IN_LIST_NUMBER;
1374 dpurdie 332
/
333
--------------------------------------------------------
334
--  DDL for Function RELEASE_MODE
335
--------------------------------------------------------
1373 dpurdie 336
 
337
  CREATE OR REPLACE FUNCTION "RELEASE_MODE" ( nRtagId IN NUMBER ) RETURN CHAR IS
338
 
339
/* ---------------------------------------------------------------------------
340
    Version: 3.0.0
341
   --------------------------------------------------------------------------- */
342
 
343
   returnValue CHAR(1);
344
 
345
BEGIN
346
 
347
    /*--------------- Business Rules Here -------------------*/
348
	/*-------------------------------------------------------*/
349
 
350
	-- Get release mode
351
	SELECT rt.OFFICIAL INTO returnValue
352
	  FROM RELEASE_TAGS rt
353
	 WHERE rt.RTAG_ID = nRtagId;
354
 
355
	RETURN returnValue;
356
 
357
END RELEASE_MODE;
1374 dpurdie 358
/
359
--------------------------------------------------------
360
--  DDL for Function PERL_DBD_TESTFUNC
361
--------------------------------------------------------
1373 dpurdie 362
 
363
  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 364
/
365
--------------------------------------------------------
366
--  DDL for Function GET_V_EXT
367
--------------------------------------------------------
1373 dpurdie 368
 
369
  CREATE OR REPLACE FUNCTION "GET_V_EXT" (SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE) RETURN VARCHAR2 IS
370
 
371
/* ---------------------------------------------------------------------------
372
    Version: 3.0.0
373
   --------------------------------------------------------------------------- */
374
 
375
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
376
    lastDot NUMBER;
377
 
378
BEGIN
379
    lastDot := INSTR (SSpkg_version, '.', -1);
380
 
381
    IF ( lastDot > 0 ) AND ( lastDot != LENGTH(SSpkg_version) )
382
    THEN
383
        -- YES dot separator found --
384
        SSV_EXT := SUBSTR (SSpkg_version, lastDot, LENGTH(SSpkg_version)-lastDot+1);
385
 
386
        IF IS_VERSION_EXTENSION ( SSV_EXT )
387
        THEN
388
            RETURN SSV_EXT;
389
        ELSE
390
            RETURN NULL;
391
        END IF;
392
 
393
    ELSE
394
        -- NO dot separator found --
395
        RETURN NULL;
396
    END IF;
397
 
398
END GET_V_EXT;
1374 dpurdie 399
/
400
--------------------------------------------------------
401
--  DDL for Function IN_LIST_VARCHAR2
402
--------------------------------------------------------
1373 dpurdie 403
 
404
  CREATE OR REPLACE FUNCTION "IN_LIST_VARCHAR2" ( sInList IN VARCHAR2, cSeparator IN VARCHAR2 ) RETURN RELMGR_VARCHAR2_TAB_t IS
405
 
406
/* ---------------------------------------------------------------------------
407
    Version: 3.1
408
   --------------------------------------------------------------------------- */
409
 
410
    cItemCollection	   RELMGR_VARCHAR2_TAB_t := RELMGR_VARCHAR2_TAB_t();
411
	pos				   NUMBER;
412
	in_list			   VARCHAR2(4000) := sInList || cSeparator;
413
	val				   VARCHAR2(4000);
414
 
415
BEGIN
416
 
417
	IF NOT sInList IS NULL
418
	THEN
419
		LOOP
420
	        EXIT WHEN in_list IS NULL;
421
	        pos := INSTR ( in_list, cSeparator );
422
			val := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
423
 
424
			IF (NOT val IS NULL) THEN
425
		        cItemCollection.extend;
426
		        cItemCollection(cItemCollection.count) := val;
427
			END IF;
428
 
429
	        in_list := SUBSTR ( in_list, pos+1 );
430
		END LOOP;
431
	END IF;
432
 
433
	RETURN cItemCollection;
434
END IN_LIST_VARCHAR2;
1374 dpurdie 435
/
436
--------------------------------------------------------
437
--  DDL for Package PK_PROJECT
438
--------------------------------------------------------
1373 dpurdie 439
 
440
  CREATE OR REPLACE PACKAGE "PK_PROJECT" IS
441
 
442
    TYPE typecur IS REF CURSOR;
443
 
444
    /*------------------------------------------------------------------------*/
445
    PROCEDURE update_base_url (
446
        nprojid   IN  projects.proj_id%TYPE,
447
        sbaseurl  IN  VARCHAR2
448
    );
449
    /*------------------------------------------------------------------------*/
450
    PROCEDURE update_project_config (
451
    nprojid   IN  projects.proj_id%TYPE,
452
    sbaseurl  IN  VARCHAR2,
453
    sjirakey  IN  VARCHAR2
454
    );
455
    /*------------------------------------------------------------------------*/
456
 
457
    END pk_project;
1374 dpurdie 458
/
459
--------------------------------------------------------
460
--  DDL for Package PK_PACKAGE
461
--------------------------------------------------------
1373 dpurdie 462
 
463
  CREATE OR REPLACE PACKAGE "PK_PACKAGE" 
464
IS
465
/*
466
------------------------------
467
||  Last Modified:  Jeremy Tweddle
468
||  Modified Date:  24/08/2007
469
||
470
------------------------------
471
*/
472
   TYPE typecur IS REF CURSOR;
473
 
474
/*================================================================================================*/
475
   PROCEDURE new_version (
476
      nlastpvid                   IN       NUMBER,
477
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
478
      cbuildtype                  IN       CHAR,
479
      nsettopvid                  IN       NUMBER DEFAULT NULL,
480
      nrtagid                     IN       NUMBER,
481
      nuserid                     IN       NUMBER,
482
      enumissues_state_imported   IN       NUMBER,
483
      returnpvid                  OUT      NUMBER
484
   );
485
 
486
   PROCEDURE change_state (
487
      pvid       IN   NUMBER,
488
      newstate   IN   package_versions.dlocked%TYPE,
489
      userid     IN   NUMBER
490
   );
491
 
492
   PROCEDURE new_patch (
493
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
494
      nparentpvid        IN       NUMBER,
495
      spatchidlist       IN       VARCHAR2,
496
      nuserid            IN       NUMBER,
497
      returnpatchid      OUT      NUMBER
498
   );
499
 
500
   PROCEDURE obsolete_patch (
501
      patchid            IN   NUMBER,
502
      isobsolete         IN   CHAR,
503
      obsoletecomments   IN   VARCHAR2,
504
      userid             IN   NUMBER
505
   );
506
 
507
   PROCEDURE obsolete_patches (
508
      spatchidlist       IN   VARCHAR2,
509
      isobsolete         IN   CHAR,
510
      obsoletecomments   IN   VARCHAR2,
511
      userid             IN   NUMBER
512
   );
513
 
514
   PROCEDURE destroy_package (
515
      pvid               IN       NUMBER,
516
      overridewarnings   IN       CHAR DEFAULT 'N',
517
      problemstring      OUT      VARCHAR2
518
   );
519
 
520
   PROCEDURE add_process (
521
      nprocid         IN   processes.proc_id%TYPE,
522
      shealthtag      IN   processes.proc_name%TYPE,
523
      sprocdesc       IN   processes.proc_description%TYPE,
524
      scmdinterface   IN   processes.run_as%TYPE,
525
      spkgowner       IN   processes.pkg_owner%TYPE,
526
      sisinterface    IN   processes.is_interface%TYPE,
527
      npvid           IN   package_processes.pv_id%TYPE,
528
      nuserid         IN   NUMBER
529
   );
530
 
531
   PROCEDURE add_package_process (
532
      nprocidlist   IN   VARCHAR2,
533
      npvid         IN   package_processes.pv_id%TYPE,
534
      nuserid       IN   NUMBER
535
   );
536
 
537
 
538
 
539
   PROCEDURE remove_process (
540
      nprocid   IN   package_processes.proc_id%TYPE,
541
      npvid     IN   package_processes.pv_id%TYPE,
542
      nuserid   IN   NUMBER
543
   );
544
 
545
   PROCEDURE move_package (
546
   	  npvid  			  IN package_versions.pv_id%TYPE,
547
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
548
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
549
	  nuserid			  IN NUMBER		 
550
   ); 
551
 
552
   PROCEDURE modify_product_state (
553
   	  npvid IN package_versions.pv_id%TYPE,
554
	  nrtagid IN release_tags.rtag_id%TYPE,
555
	  nstateid IN product_states.state_id%TYPE,
556
	  nuserid IN NUMBER
557
   );
558
 
559
   PROCEDURE add_code_review_url (
560
        npvid           IN    NUMBER,
561
        nprojid         IN    NUMBER,
562
        surl            IN    VARCHAR2,
563
        sreason         IN    VARCHAR2,
564
        ddateofreview   IN    DATE
565
   );
566
 
567
   PROCEDURE update_code_review_url (
568
        ncrid           IN    NUMBER,
569
        nprojid         IN    NUMBER,
570
        surl            IN    VARCHAR2,
571
        sreason         IN    VARCHAR2
572
   );
573
 
574
   PROCEDURE remove_code_review_url (
575
        ncrid           IN    NUMBER
576
   );
577
/*================================================================================================*/
578
END pk_package;
1374 dpurdie 579
/
580
--------------------------------------------------------
581
--  DDL for Package RM_ISSUES
582
--------------------------------------------------------
1373 dpurdie 583
 
584
  CREATE OR REPLACE PACKAGE "RM_ISSUES" AS
585
 
586
	TYPE T_Cur IS REF CURSOR;
587
 
588
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;
589
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER;
590
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;
591
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER;
592
 
593
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );
594
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );
595
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 );
596
 
597
END Rm_Issues;
1374 dpurdie 598
/
599
--------------------------------------------------------
600
--  DDL for Package PK_APP_UTILS
601
--------------------------------------------------------
1373 dpurdie 602
 
603
  CREATE OR REPLACE PACKAGE "PK_APP_UTILS" IS
604
/*
605
------------------------------
606
||  Last Modified:  S.Vukovic
607
||  Modified Date:  26/Apr/2005
608
||  Spec Version:   1.0
609
------------------------------
610
*/
611
 
612
	TYPE typeCur IS REF CURSOR;
613
 
614
    /*================================================================================================*/
615
 
616
	PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur);
617
 
618
	/*================================================================================================*/
619
 
620
END PK_APP_UTILS;
1374 dpurdie 621
/
622
--------------------------------------------------------
623
--  DDL for Package PK_RMAPI_TEST
624
--------------------------------------------------------
1373 dpurdie 625
 
626
  CREATE OR REPLACE PACKAGE "PK_RMAPI_TEST" 
627
IS
628
   TYPE typecur IS REF CURSOR;
629
 
630
/*================================================================================================*/
631
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
632
      RETURN typecur;
633
 
634
   FUNCTION wip_iteration_package (
635
      projname        VARCHAR2,
636
      iterationname   VARCHAR2,
637
      pkgname         VARCHAR2
638
   )
639
      RETURN typecur;
640
 
641
/* This version is to be deprecated when auto_make_vcsrelease is used */
642
   FUNCTION auto_make_release (
643
      rtagid                   IN   NUMBER,
644
      pkgname                  IN   VARCHAR2,
645
      vext                     IN   VARCHAR2,
646
      newpkgversion            IN   VARCHAR2,
647
      label                    IN   VARCHAR2,
648
      dependenciesimportlist   IN   VARCHAR2,
649
      isrippled                IN   NUMBER,
650
      username                 IN   VARCHAR2
651
   )
652
      RETURN NUMBER;
653
 
654
   FUNCTION auto_make_vcsrelease (
655
      rtagid                   IN   NUMBER,
656
      pkgname                  IN   VARCHAR2,
657
      vext                     IN   VARCHAR2,
658
      newpkgversion            IN   VARCHAR2,
659
      vcstag                   IN   VARCHAR2,
660
      dependenciesimportlist   IN   VARCHAR2,
661
      isrippled                IN   NUMBER,
662
      username                 IN   VARCHAR2
663
   )
664
      RETURN NUMBER;
665
 
666
 
667
   PROCEDURE import_dependencies (
668
      pvid                     IN   NUMBER,
669
      dependenciesimportlist   IN   VARCHAR2,
670
      userid                   IN   NUMBER
671
   );
672
 
673
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
674
      RETURN VARCHAR2;
675
 
676
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
677
      RETURN VARCHAR2;
678
 
679
   PROCEDURE update_dash_board (rtagid IN NUMBER);
680
 
681
   FUNCTION exclude_from_build (
682
      pvid          IN   NUMBER,
683
      spkgversion   IN   VARCHAR2,
684
      rtagid        IN   NUMBER,
685
      username      IN   VARCHAR2
686
   )
687
      RETURN NUMBER;
688
 
689
   FUNCTION exclude_indirect_from_build (
690
      pvid          IN   NUMBER,
691
      spkgversion   IN   VARCHAR2,
692
      rtagid        IN   NUMBER,
693
      username      IN   VARCHAR2,
694
      rootpvid      IN   NUMBER,
695
      rootcause     IN   VARCHAR2,
696
      rootfile      IN   VARCHAR2
697
   )
698
      RETURN NUMBER;
699
/*================================================================================================*/
700
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);
701
 
702
   FUNCTION insert_package_metrics (
703
      rtagid IN NUMBER,
704
      pkgname IN VARCHAR2,
705
      vext IN VARCHAR2,
706
      metricstring IN VARCHAR2
707
   )
708
      RETURN NUMBER;
709
 
710
   PROCEDURE update_release_metrics (rtagid IN NUMBER);
711
 
712
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;
713
 
714
END pk_rmapi_test;
1374 dpurdie 715
/
716
--------------------------------------------------------
717
--  DDL for Package PK_RMAPI
718
--------------------------------------------------------
1373 dpurdie 719
 
720
  CREATE OR REPLACE PACKAGE "PK_RMAPI" 
721
IS
722
   TYPE typecur IS REF CURSOR;
723
 
724
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
725
      RETURN typecur;
726
 
727
   FUNCTION wip_iteration_package (
728
      projname        VARCHAR2,
729
      iterationname   VARCHAR2,
730
      pkgname         VARCHAR2
731
   )
732
      RETURN typecur;
733
 
734
   FUNCTION auto_make_vcsrelease (
735
      rtagid                   IN   NUMBER,
736
      pkgname                  IN   VARCHAR2,
737
      vext                     IN   VARCHAR2,
738
      newpkgversion            IN   VARCHAR2,
739
      vcstag                   IN   VARCHAR2,
740
      dependenciesimportlist   IN   VARCHAR2,
741
      isrippled                IN   NUMBER,
742
      username                 IN   VARCHAR2
743
   )
744
      RETURN NUMBER;
745
 
746
 
747
   PROCEDURE import_dependencies (
748
      pvid                     IN   NUMBER,
749
      dependenciesimportlist   IN   VARCHAR2,
750
      userid                   IN   NUMBER
751
   );
752
 
753
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
754
      RETURN VARCHAR2;
755
 
756
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
757
      RETURN VARCHAR2;
758
 
759
   PROCEDURE update_dash_board (rtagid IN NUMBER);
760
 
761
   FUNCTION exclude_from_build (
762
      pvid          IN   NUMBER,
763
      spkgversion   IN   VARCHAR2,
764
      rtagid        IN   NUMBER,
765
      username      IN   VARCHAR2
766
   )
767
      RETURN NUMBER;
768
 
769
   FUNCTION exclude_indirect_from_build (
770
      pvid          IN   NUMBER,
771
      spkgversion   IN   VARCHAR2,
772
      rtagid        IN   NUMBER,
773
      username      IN   VARCHAR2,
774
      rootpvid      IN   NUMBER,
775
      rootcause     IN   VARCHAR2,
776
      rootfile      IN   VARCHAR2
777
   )
778
      RETURN NUMBER;
1374 dpurdie 779
 
1373 dpurdie 780
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);
781
 
782
   FUNCTION insert_package_metrics (
783
      rtagid IN NUMBER,
784
      pkgname IN VARCHAR2,
785
      vext IN VARCHAR2,
786
      metricstring IN VARCHAR2
787
   )
788
      RETURN NUMBER;
789
 
790
   PROCEDURE update_release_metrics (rtagid IN NUMBER);
791
 
792
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;
793
 
1374 dpurdie 794
   PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER);
795
 
2362 dpurdie 796
   FUNCTION isSVN( pkgid IN NUMBER ) RETURN NUMBER;
797
 
798
   FUNCTION isSVNbyName( pkgname IN VARCHAR2 ) RETURN NUMBER;
799
 
1373 dpurdie 800
END pk_rmapi;
1374 dpurdie 801
/
802
--------------------------------------------------------
803
--  DDL for Package PK_BUILDAPI
804
--------------------------------------------------------
1373 dpurdie 805
 
806
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI" 
807
IS
808
   /*================================================================================================*/
809
   PROCEDURE add_product_component (
810
      npvid           IN   NUMBER,
811
      sosname         IN   VARCHAR2,
812
      sorigfilepath   IN   VARCHAR2,
813
      sfilename       IN   VARCHAR2,
814
      sdestfilepath   IN   VARCHAR2,
815
      nbytesize       IN   NUMBER,
816
      scrccksum       IN   VARCHAR2
817
   );
818
 
819
   PROCEDURE remove_all_product_components (
820
      npvid     IN   NUMBER,
821
      sosname   IN   VARCHAR2
822
   );
823
 
824
   /*================================================================================================*/
825
   FUNCTION get_osid (sosname IN VARCHAR2)
826
      RETURN NUMBER;
827
 
828
   /*================================================================================================*/
829
   PROCEDURE update_build_service (
830
      sdatabaseserver   IN   VARCHAR2,
831
      swebserver        IN   VARCHAR2,
832
      smailserver       IN   VARCHAR2,
833
      smailsender       IN   VARCHAR2,
834
      sdiskspace        IN   VARCHAR2,
835
      ssbommanagement   IN   VARCHAR2
836
   );
837
 
838
   /*================================================================================================*/
839
   PROCEDURE update_build_service_info (
840
      sdatabaseserver   IN   VARCHAR2,
841
      sarchiveserver    IN   VARCHAR2,
842
      smailserver       IN   VARCHAR2,
843
      smailsender       IN   VARCHAR2,
844
      sdiskspace        IN   VARCHAR2,
845
      ssbommanagement   IN   VARCHAR2
846
   );
847
 
848
   /*================================================================================================*/
849
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2);
850
 
851
   /*================================================================================================*/
852
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER);
853
 
854
   /*================================================================================================*/
855
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2);
856
 
857
   /*================================================================================================*/
858
   PROCEDURE add_daemon (
859
      sdaemonhostname   IN   VARCHAR2,
860
      nrtagid           IN   NUMBER,
861
      ngbeid            IN   NUMBER,
862
      sgbebuildfilter   IN   VARCHAR2
863
   );
864
 
865
   /*================================================================================================*/
866
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2);
867
 
868
   /*================================================================================================*/
869
   PROCEDURE update_daemon (
870
      sdaemonhostname   IN   VARCHAR2,
871
      nrconid           IN   NUMBER,
872
      ngbeid            IN   NUMBER,
873
      sgbebuildfilter   IN   VARCHAR2
874
   );
875
 
876
   /*================================================================================================*/
877
   PROCEDURE insert_schedule_info (
878
      dschedulepause     IN   DATE,
879
      dscheduleresume    IN   DATE,
880
      crepeat            IN   VARCHAR2,
881
      cindefinitepause   IN   VARCHAR2
882
   );
883
 
884
   /*================================================================================================*/
885
   PROCEDURE delete_schedule (nscheduleid IN NUMBER);
886
 
887
   /*================================================================================================*/
888
   PROCEDURE set_infinite_pause;
889
 
890
   /*================================================================================================*/
891
   PROCEDURE set_resume;
892
 
893
   /*================================================================================================*/
894
   PROCEDURE delete_out_of_date_schedule;
895
 
896
   /*================================================================================================*/
897
   PROCEDURE set_daemon_resume (nrconid IN NUMBER);
898
 
899
   /*================================================================================================*/
900
   PROCEDURE set_daemon_pause (nrconid IN NUMBER);
901
 
902
   /*================================================================================================*/
903
   PROCEDURE set_daemon_disable (nrconid NUMBER);
904
 
905
   /*================================================================================================*/
906
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER);
907
 
908
   /*================================================================================================*/
909
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER );
910
   /*================================================================================================*/
911
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER );
912
   /*================================================================================================*/
913
   FUNCTION get_daemon_inst(
914
      nRtag_id IN NUMBER,
915
      nInst_id IN OUT NUMBER,
916
      nOp_code IN OUT NUMBER,
917
      nPv_id OUT NUMBER,
918
      nUser_id OUT NUMBER,
919
      nInProgress OUT NUMBER
920
   ) RETURN NUMBER;
921
   /*================================================================================================*/
922
   PROCEDURE cleanup_stranded_daemon_insts;
923
   /*================================================================================================*/
924
   PROCEDURE insert_daemon_inst(
925
      nOp_code IN NUMBER,
926
      nRtag_id IN NUMBER,
927
      nPv_id IN NUMBER,
928
      nSchedDate IN DATE,
929
      nRepeatSecs IN NUMBER,
930
      nAddedDate IN DATE,
931
      nUser_id IN NUMBER
932
   );
933
   /*================================================================================================*/
934
   PROCEDURE del_daemon_inst( nInstId IN NUMBER );
935
   /*================================================================================================*/
936
   PROCEDURE del_daemon_inst_by_rtag_pvid(
937
      nOp_code IN NUMBER,
938
      nRtag_id IN NUMBER,
939
      nPv_id IN NUMBER
940
   );
941
   /*================================================================================================*/
942
   PROCEDURE update_daemon_inst(
943
      nInstId IN NUMBER,
944
      nOp_code IN NUMBER,
945
      nRtag_id IN NUMBER,
946
      nPv_id IN NUMBER,
947
      nSchedDate IN DATE,
948
      nRepeatSecs IN NUMBER,
949
      nAddedDate IN DATE,
950
      nUser_id IN NUMBER
951
   );
952
   /*================================================================================================*/
953
   FUNCTION daemon_ops_for_rtag_pvid(
954
      nRtag_id IN NUMBER,
955
      nPv_id IN NUMBER
956
   ) RETURN VARCHAR2;
957
   /*================================================================================================*/
958
   FUNCTION daemon_ops_for_rtag(
959
      nRtag_id IN NUMBER
960
   ) RETURN VARCHAR2;
961
   /*================================================================================================*/
962
   PROCEDURE add_daemon_config (
963
      nrtagid           IN   NUMBER,
964
      nbmcon_id         IN   NUMBER,
965
      sdaemon_mode      IN   VARCHAR2,
966
      sgbebuildfilter   IN   VARCHAR2
967
   );
968
   /*================================================================================================*/
969
   PROCEDURE update_daemon_config (
970
      nrconid           IN   NUMBER,
971
      nbmcon_id         IN   NUMBER,
972
      sdaemon_mode      IN   VARCHAR2,
973
      sgbebuildfilter   IN   VARCHAR2
974
   );
975
 
976
   /*================================================================================================*/
977
   PROCEDURE add_build_machine (
978
      sdisplay_name          IN   VARCHAR2,
979
      smachine_hostname      IN   VARCHAR2,
980
      ngbeid                 IN   NUMBER,
981
      sdescription           IN   VARCHAR2
982
   );
983
   /*================================================================================================*/
984
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2);
985
   /*================================================================================================*/
986
   PROCEDURE update_build_machine (
987
      nbmcon_id              IN   NUMBER,
988
      sdisplay_name          IN   VARCHAR2,
989
      smachine_hostname      IN   VARCHAR2,
990
      ngbeid                 IN   NUMBER,
991
      sdescription           IN   VARCHAR2
992
   );
993
END pk_buildapi;
1374 dpurdie 994
/
995
--------------------------------------------------------
996
--  DDL for Package PK_BUILDAPI_TEST
997
--------------------------------------------------------
1373 dpurdie 998
 
999
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI_TEST" IS
1000
/*
1001
------------------------------
1002
||  Last Modified:  S.Vukovic
1003
||  Modified Date:  30/Mar/2005
1004
||  Spec Version:   1.0
1005
------------------------------
1006
*/
1007
 
1008
	/*================================================================================================*/
1009
	PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
1010
								  sOsName IN VARCHAR2,
1011
								  sOrigFilePath IN VARCHAR2,
1012
								  sFileName IN VARCHAR2,
1013
								  sDestFilePath IN VARCHAR2,
1014
								  nByteSize IN NUMBER,
1015
								  sCRCcksum IN VARCHAR2 );
1016
 
1017
	PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 );
1018
    /*================================================================================================*/
1019
	FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER;
1020
	/*================================================================================================*/
1021
 
1022
	PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
1023
			  					   	 sWebServer IN VARCHAR2,
1024
									 sMailServer IN VARCHAR2,
1025
									 sMailSender IN VARCHAR2);
1026
	/*================================================================================================*/
1027
 
1028
	PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue IN VARCHAR2 );
1029
	/*================================================================================================*/
1030
 
1031
	PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER );
1032
	/*================================================================================================*/
1033
	PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 );
1034
	/*================================================================================================*/	        
1035
    PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER );
1036
	/*================================================================================================*/	
1037
 
1038
END PK_BUILDAPI_TEST;
1374 dpurdie 1039
/
1040
--------------------------------------------------------
1041
--  DDL for Package PK_PACKAGE_TEST
1042
--------------------------------------------------------
1373 dpurdie 1043
 
1044
  CREATE OR REPLACE PACKAGE "PK_PACKAGE_TEST" 
1045
IS
1046
/*
1047
------------------------------
1048
||  Last Modified:  Rupesh Solanki
1049
||  Modified Date:  18/05/2006
1050
||
1051
------------------------------
1052
*/
1053
   TYPE typecur IS REF CURSOR;
1054
 
1055
/*================================================================================================*/
1056
   PROCEDURE new_version (
1057
      nlastpvid                   IN       NUMBER,
1058
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
1059
      cbuildtype                  IN       CHAR,
1060
      nsettopvid                  IN       NUMBER DEFAULT NULL,
1061
      nrtagid                     IN       NUMBER,
1062
      nuserid                     IN       NUMBER,
1063
      enumissues_state_imported   IN       NUMBER,
1064
      returnpvid                  OUT      NUMBER
1065
   );
1066
 
1067
   PROCEDURE change_state (
1068
      pvid       IN   NUMBER,
1069
      newstate   IN   package_versions.dlocked%TYPE,
1070
      userid     IN   NUMBER
1071
   );
1072
 
1073
   PROCEDURE new_patch (
1074
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
1075
      nparentpvid        IN       NUMBER,
1076
      spatchidlist       IN       VARCHAR2,
1077
      nuserid            IN       NUMBER,
1078
      returnpatchid      OUT      NUMBER
1079
   );
1080
 
1081
   PROCEDURE obsolete_patch (
1082
      patchid            IN   NUMBER,
1083
      isobsolete         IN   CHAR,
1084
      obsoletecomments   IN   VARCHAR2,
1085
      userid             IN   NUMBER
1086
   );
1087
 
1088
   PROCEDURE obsolete_patches (
1089
      spatchidlist       IN   VARCHAR2,
1090
      isobsolete         IN   CHAR,
1091
      obsoletecomments   IN   VARCHAR2,
1092
      userid             IN   NUMBER
1093
   );
1094
 
1095
   PROCEDURE destroy_package (
1096
      pvid               IN       NUMBER,
1097
      overridewarnings   IN       CHAR DEFAULT 'N',
1098
      problemstring      OUT      VARCHAR2
1099
   );
1100
 
1101
   PROCEDURE add_process (
1102
      nprocid         IN   processes.proc_id%TYPE,
1103
      shealthtag      IN   processes.proc_name%TYPE,
1104
      sprocdesc       IN   processes.proc_description%TYPE,
1105
      scmdinterface   IN   processes.run_as%TYPE,
1106
      spkgowner       IN   processes.pkg_owner%TYPE,
1107
      sisinterface    IN   processes.is_interface%TYPE,
1108
      npvid           IN   package_processes.pv_id%TYPE,
1109
      nuserid         IN   NUMBER
1110
   );
1111
 
1112
   PROCEDURE add_package_process (
1113
      nprocidlist   IN   VARCHAR2,
1114
      npvid         IN   package_processes.pv_id%TYPE,
1115
      nuserid       IN   NUMBER
1116
   );
1117
 
1118
 
1119
 
1120
   PROCEDURE remove_process (
1121
      nprocid   IN   package_processes.proc_id%TYPE,
1122
      npvid     IN   package_processes.pv_id%TYPE,
1123
      nuserid   IN   NUMBER
1124
   );
1125
 
1126
   PROCEDURE move_package (
1127
   	  npvid  			  IN package_versions.pv_id%TYPE,
1128
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
1129
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
1130
	  nuserid			  IN NUMBER		 
1131
   ); 
1132
 
1133
PROCEDURE modify_product_state (
1134
   	  npvid IN package_versions.pv_id%TYPE,
1135
	  nstateid IN product_states.state_id%TYPE,
1136
	  nuserid IN NUMBER
1137
   );
1138
/*================================================================================================*/
1139
END pk_package_Test;
1374 dpurdie 1140
/
1141
--------------------------------------------------------
1142
--  DDL for Package PK_PLANNED
1143
--------------------------------------------------------
1373 dpurdie 1144
 
1145
  CREATE OR REPLACE PACKAGE "PK_PLANNED" IS
1146
/*
1147
------------------------------
1148
||  Last Modified:  G.Huddy
1149
||  Modified Date:  28/May/2008
1150
||  Spec Version:   1.1
1151
------------------------------
1152
*/
1153
 
1154
	TYPE typeCur IS REF CURSOR;
1155
 
1156
    /*================================================================================================*/
1157
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1158
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1159
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1160
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
1161
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1162
	PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR);
1163
	/*================================================================================================*/
1164
 
1165
END PK_PLANNED;
1374 dpurdie 1166
/
1167
--------------------------------------------------------
1168
--  DDL for Package PK_ENVIRONMENT_TEST
1169
--------------------------------------------------------
1373 dpurdie 1170
 
1171
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT_TEST" IS
1172
/*
1173
------------------------------
1174
||  Last Modified:  Rupesh Solanki
1175
||  Modified Date:  29/Jan/2007
1176
||  Spec Version:   1.1
1177
------------------------------
1178
*/
1179
 
1180
	TYPE typeCur IS REF CURSOR;
1181
 
1182
    /*================================================================================================*/
1183
 
1184
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
1185
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1186
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1187
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1188
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1189
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1190
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
1191
 
1192
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1193
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1194
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1195
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1196
 
1197
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1198
 
1199
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1200
 
1201
 
1202
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1203
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1204
 
1205
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1206
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1207
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1208
 
1209
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1210
 
1211
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
1212
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
1213
 
1214
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN 
1215
			  			   	 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE, 
1216
							 CloneFromPvId IN NUMBER );
1217
 
1218
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1219
 
1220
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );							 
1221
 
1222
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1223
 
1224
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );								 							 
1225
 
1226
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );	
1227
	/*================================================================================================*/
1228
 
1229
END PK_ENVIRONMENT_test;
1374 dpurdie 1230
/
1231
--------------------------------------------------------
1232
--  DDL for Package PK_ENVIRONMENT
1233
--------------------------------------------------------
1373 dpurdie 1234
 
1235
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT" IS
1236
/*
1237
------------------------------
1238
||  Last Modified:  G.Huddy
1239
||  Modified Date:  28/May/2008
1240
||  Spec Version:   1.2
1241
------------------------------
1242
*/
1243
 
1244
	TYPE typeCur IS REF CURSOR;
1245
 
1246
	/*================================================================================================*/
1247
 
1248
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
1249
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1250
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1251
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1252
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1253
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1254
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
1255
 
1256
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1257
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1258
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1259
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1260
 
1261
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
1262
 
1263
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1264
 
1265
 
1266
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1267
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1268
 
1269
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1270
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1271
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1272
	PROCEDURE APPROVE_MERGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1273
 
1274
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1275
 
1276
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
1277
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
1278
 
1279
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN
1280
							 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE,
1281
							 CloneFromPvId IN NUMBER );
1282
 
1283
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1284
 
1285
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1286
 
1287
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1288
 
1289
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1290
 
1291
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1292
	/*================================================================================================*/
1293
 
1294
END PK_ENVIRONMENT;
1374 dpurdie 1295
/
1296
--------------------------------------------------------
1297
--  DDL for Package PK_RELEASE
1298
--------------------------------------------------------
1373 dpurdie 1299
 
1300
  CREATE OR REPLACE PACKAGE "PK_RELEASE" IS
1301
/*
1302
------------------------------
1303
||  Last Modified:  S.Vukovic
1304
||  Modified Date:  12/Sep/2005
1305
||  Body Version:   3.0
1306
------------------------------
1307
*/
1308
 
1309
	TYPE typeCur IS REF CURSOR;
1310
 
1311
    /*================================================================================================*/
1312
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
1313
	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 );
1314
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
1315
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
1316
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
1317
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
1318
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
1319
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
1320
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
1321
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1322
	--PROCEDURE ADD_DEPRECATE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, nPkgId IN NUMBER );
1323
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1324
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1325
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1326
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1327
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
1328
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
1329
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1330
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
1331
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
1332
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
1333
 
1334
	/*================================================================================================*/
1335
 
1336
END PK_RELEASE;
1374 dpurdie 1337
/
1338
--------------------------------------------------------
1339
--  DDL for Package PK_WORK_IN_PROGRESS
1340
--------------------------------------------------------
1373 dpurdie 1341
 
1342
  CREATE OR REPLACE PACKAGE "PK_WORK_IN_PROGRESS" IS
1343
/*
1344
------------------------------
1345
||  Last Modified:  S.Vukovic
1346
||  Modified Date:  2/May/2005
1347
||  Spec Version:   1.0
1348
------------------------------
1349
*/
1350
 
1351
	TYPE typeCur IS REF CURSOR;
1352
 
1353
    /*================================================================================================*/
1354
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1355
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1356
	PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER );
1357
 
1358
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1359
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1360
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1361
	/*================================================================================================*/
1362
 
1363
END PK_WORK_IN_PROGRESS;
1374 dpurdie 1364
/
1365
--------------------------------------------------------
1366
--  DDL for Package PK_LICENCING
1367
--------------------------------------------------------
1373 dpurdie 1368
 
1369
  CREATE OR REPLACE PACKAGE "PK_LICENCING" IS
1370
/*
1371
------------------------------
1372
||  Last Modified:  G.Huddy
1373
||  Modified Date:  19/Aug/2008
1374
||  Spec Version:   1.0
1375
------------------------------
1376
*/
1377
 
1378
   TYPE typeCur IS REF CURSOR;
1379
 
1380
    /*================================================================================================*/
1381
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
1382
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
1383
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER );
1384
   FUNCTION  IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER;
1385
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER );
1386
   /*================================================================================================*/
1387
 
1388
END PK_LICENCING;
1374 dpurdie 1389
/
1390
--------------------------------------------------------
1391
--  DDL for Package PK_ARCHIVE
1392
--------------------------------------------------------
1373 dpurdie 1393
 
1394
  CREATE OR REPLACE PACKAGE "PK_ARCHIVE" 
1395
IS
1396
/*
1397
------------------------------
1398
||  Author:  Rupesh Solanki
1399
||  Date:    26 October 2006
1400
||  Version:   1.0
1401
------------------------------
1402
*/
1403
 
1404
   /*================================================================================================*/
1405
   PROCEDURE populate_packages_table;
1406
 
1407
   PROCEDURE populate_archive_data_table (
1408
      nrtagid   IN   release_tags.rtag_id%TYPE
1409
   );
1410
 
1411
   PROCEDURE migrate_pv_to_archive_SCHEMA (nrtagid IN release_tags.rtag_id%TYPE);
1412
 
1413
   PROCEDURE migrate_rtag_to_archive_schema (
1414
      nrtagid   IN   release_tags.rtag_id%TYPE
1415
   );
1416
 
1417
   PROCEDURE clean_up_archive_data_table (
1418
      nrtagid   IN   release_tags.rtag_id%TYPE
1419
   );
1420
 
1421
   PROCEDURE write_action_log (
1422
      nuserid   IN   NUMBER,
1423
      nrtagid   IN   release_tags.rtag_id%TYPE
1424
   );
1425
/*================================================================================================*/
1426
END pk_archive;
1374 dpurdie 1427
/
1428
--------------------------------------------------------
1429
--  DDL for Package PK_RELEASE_TEST
1430
--------------------------------------------------------
1373 dpurdie 1431
 
1432
  CREATE OR REPLACE PACKAGE "PK_RELEASE_TEST" IS
1433
/*
1434
------------------------------
1435
||  Last Modified:  S.Vukovic
1436
||  Modified Date:  12/Sep/2005
1437
||  Body Version:   3.0
1438
------------------------------
1439
*/
1440
 
1441
	TYPE typeCur IS REF CURSOR;
1442
 
1443
    /*================================================================================================*/
1444
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
1445
	PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, nUserId IN NUMBER );
1446
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
1447
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
1448
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
1449
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
1450
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
1451
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
1452
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
1453
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1454
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1455
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1456
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1457
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1458
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
1459
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
1460
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1461
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
1462
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
1463
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
1464
	/*================================================================================================*/
1465
 
1466
END PK_RELEASE_TEST;
1374 dpurdie 1467
/
1468
--------------------------------------------------------
1469
--  DDL for Package Body PK_PLANNED
1470
--------------------------------------------------------
1373 dpurdie 1471
 
1472
  CREATE OR REPLACE PACKAGE BODY "PK_PLANNED" IS
1473
 
1474
/*
1475
------------------------------
1476
||  Last Modified:  G.Huddy
1477
||  Modified Date:  05/Aug/2008
1478
||  Body Version:   1.2
1479
------------------------------
1480
*/
1481
 
1482
 
1483
/*-------------------------------------------------------------------------------------------------------*/
1484
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1485
 
1486
    oldPvId NUMBER;
1487
    ReleaseLocation VARCHAR2(4000);
1488
    IsPatch CHAR(1) := NULL;
1489
    sLocation VARCHAR2(4000) := NULL;
1490
    nRtagIdLocation NUMBER;
1491
 
1492
 
1493
 
1494
BEGIN
1495
    /*--------------- Business Rules Here -------------------*/
1496
    /*-------------------------------------------------------*/
1497
 
1498
    BEGIN
1499
        -- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
1500
        SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME, rt.RTAG_ID  INTO sLocation, nRtagIdLocation
1501
          FROM PLANNED pl,
1502
               RELEASE_TAGS rt,
1503
               PROJECTS proj
1504
         WHERE pl.PV_ID = newPvId
1505
           AND pl.RTAG_ID = rt.RTAG_ID
1506
           AND rt.OFFICIAL != 'Y'
1507
           AND rt.PROJ_ID = proj.PROJ_ID;
1508
 
1509
        EXCEPTION
1510
            WHEN NO_DATA_FOUND THEN
1511
                sLocation := NULL;
1512
    END;
1513
 
1514
 
1515
 
1516
    IF (sLocation IS NULL) OR (nRtagIdLocation = RtagId) THEN
1517
 
1518
        -- Add to "Pending" area
1519
        INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
1520
        VALUES( RtagId, newPvId, ViewId, 'R' );
1521
 
1522
 
1523
        /* LOG ACTION */
1524
        SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1525
          FROM PROJECTS proj,
1526
               RELEASE_TAGS rt
1527
         WHERE rt.PROJ_ID = proj.PROJ_ID
1528
           AND rt.RTAG_ID = RtagId;
1529
 
1530
        Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1531
 
1532
    ELSE
1533
 
1534
        RAISE_APPLICATION_ERROR (-20000, 'This version is already in Pending Area at '|| sLocation ||'.' );
1535
 
1536
    END IF;
1537
 
1538
END;
1539
/*-------------------------------------------------------------------------------------------------------*/
1540
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1541
 
1542
    ReleaseLocation VARCHAR2(4000);
1543
 
1544
BEGIN
1545
 
1546
    /*--------------- Business Rules Here -------------------*/
1547
    /*-------------------------------------------------------*/
1548
 
1549
 
1550
    -- Get release location for logging pusposes
1551
    SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1552
      FROM PROJECTS proj,
1553
           RELEASE_TAGS rt
1554
     WHERE rt.PROJ_ID = proj.PROJ_ID
1555
       AND rt.RTAG_ID = RtagId;
1556
 
1557
 
1558
    -- Delete from Work In Progress
1559
    DELETE
1560
      FROM PLANNED pl
1561
     WHERE pl.RTAG_ID = RtagId
1562
       AND pl.PV_ID = PvId;
1563
 
1564
    Log_Action ( PvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1565
 
1566
 
1567
 
1568
 
1569
END;
1570
/*-------------------------------------------------------------------------------------------------------*/
1571
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
1572
 
1573
    ReturnValue NUMBER;
1574
 
1575
BEGIN
1576
    SELECT pl.VIEW_ID INTO ReturnValue
1577
      FROM PLANNED pl
1578
     WHERE pl.RTAG_ID = RtagId
1579
       AND pl.PV_ID = PvId;
1580
 
1581
    RETURN ReturnValue;
1582
END;
1583
/*-------------------------------------------------------------------------------------------------------*/
1584
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
1585
 
1586
    IsBaseView CHAR(1);
1587
 
1588
BEGIN
1589
 
1590
    -- Check if the view is BASE VIEW
1591
    SELECT vi.BASE_VIEW INTO IsBaseView
1592
      FROM VIEWS vi
1593
     WHERE vi.VIEW_ID = ViewId;
1594
 
1595
 
1596
    IF (IsBaseView = 'Y') THEN
1597
        -- Get Base view content
1598
        OPEN RecordSet FOR
1599
        SELECT 0 AS PKG_STATE,
1600
               NULL AS DEPRECATED_STATE,
1601
               pv.pv_id,
1602
               pkg.pkg_name,
1603
               pv.pkg_version,
1604
               pv.dlocked,
1605
               pv.pv_description,
1606
               pv.BUILD_TYPE,
1607
               rel.operation
1608
          FROM PLANNED rel,
1609
               packages pkg,
1610
               package_versions pv
1611
         WHERE pv.pkg_id = pkg.pkg_id
1612
           AND rel.pv_id = pv.pv_id
1613
           AND rel.VIEW_ID = ViewId
1614
           AND rel.RTAG_ID = RtagId
1615
         ORDER BY UPPER(pkg.PKG_NAME);
1616
 
1617
    ELSE
1618
 
1619
        -- Get non base view content
1620
        OPEN RecordSet FOR
1621
        SELECT 0 AS PKG_STATE,
1622
               NULL AS DEPRECATED_STATE,
1623
               pv.pv_id,
1624
               pkg.pkg_name,
1625
               pv.pkg_version,
1626
               pv.dlocked,
1627
               pv.pv_description,
1628
               pv.BUILD_TYPE,
1629
               rel.operation
1630
          FROM PLANNED rel,
1631
               packages pkg,
1632
               package_versions pv,
1633
               VIEW_DEF vd
1634
         WHERE pv.pkg_id = pkg.pkg_id
1635
           AND rel.pv_id = pv.pv_id
1636
           AND rel.RTAG_ID = RtagId
1637
           AND vd.VIEW_ID = ViewId
1638
           AND vd.PKG_ID = pv.PKG_ID
1639
         ORDER BY UPPER(pkg.PKG_NAME);
1640
 
1641
    END IF;
1642
 
1643
 
1644
END;
1645
/*-------------------------------------------------------------------------------------------------------*/
1646
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
1647
 
1648
BEGIN
1649
 
1650
    UPDATE PLANNED pl SET
1651
    pl.VIEW_ID = NewViewId
1652
    WHERE pl.PV_ID = PvId
1653
      AND pl.RTAG_ID = RtagId;
1654
 
1655
END;
1656
/*-------------------------------------------------------------------------------------------------------*/
1657
-- DEVI-45275 This new function supports the ability to insert into the planned table, and existing
1658
-- version of a package as part of a release-to-release merge operation carried out within release manager.
1659
-- DEVI-49594 This function has subsequently been changed to allow a merge operation to cancel its
1660
-- opposite operation, if the opposite already exists in the planned table. This supports user activity
1661
-- via the Release Manager merge manager display
1662
 
1663
PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR ) IS
1664
 
1665
    ReleaseLocation VARCHAR2(4000);
1666
 
1667
        entryExists NUMBER;
1668
        existingOperation CHAR;
1669
BEGIN
1670
    /*--------------- Business Rules Here -------------------*/
1671
    /*-------------------------------------------------------*/
1672
 
1673
      -- Determine if the specified PV_ID already exists in the planned table....
1674
      SELECT COUNT (pl.pv_id) INTO entryExists
1675
      FROM PLANNED pl
1676
      WHERE pl.pv_id = newPvId
1677
      AND pl.rtag_id = RtagId
1678
      AND pl.view_id = ViewId;
1679
 
1680
      -- If the specified PV_ID already exists in the planned table....
1681
      IF entryExists = 1 THEN
1682
 
1683
         -- Get the operation for the existing entry
1684
         SELECT pl.operation INTO existingOperation
1685
         FROM PLANNED pl
1686
         WHERE pl.pv_id = newPvId
1687
         AND pl.rtag_id = RtagId
1688
         AND pl.view_id = ViewId;
1689
 
1690
         -- Is the specified merge operation the opposite of the existing entry?
1691
         -- If it is not, then there is nothing to do, otherwise...
1692
         -- NOTE: A = Add, S = Subtract
1693
         IF (mergeOperation = 'S' AND existingOperation = 'A')
1694
            OR (mergeOperation = 'A' AND existingOperation = 'S') THEN
1695
 
1696
           -- It is the opposite, so effectively it cancels the existing entry
1697
           -- Remove the entry from the planned table
1698
           DELETE
1699
            FROM PLANNED pl
1700
           WHERE pl.pv_id = newPvId
1701
             AND pl.rtag_id = RtagId
1702
             AND pl.view_id = ViewId;
1703
 
1704
           -- Log action
1705
           SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1706
             FROM PROJECTS proj,
1707
                  RELEASE_TAGS rt
1708
            WHERE rt.PROJ_ID = proj.PROJ_ID
1709
              AND rt.RTAG_ID = RtagId;
1710
 
1711
           Log_Action ( newPvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1712
         END IF;
1713
      ELSE
1714
         -- Add to Planned tabled
1715
         INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
1716
         VALUES( RtagId, newPvId, ViewId, mergeOperation );
1717
 
1718
         -- Log Action
1719
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1720
          FROM PROJECTS proj,
1721
               RELEASE_TAGS rt
1722
         WHERE rt.PROJ_ID = proj.PROJ_ID
1723
         AND   rt.RTAG_ID = RtagId;
1724
 
1725
         Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1726
      END IF;
1727
 
1728
END;
1729
/*-------------------------------------------------------------------------------------------------------*/
1730
END PK_PLANNED;
1374 dpurdie 1731
/
1732
--------------------------------------------------------
1733
--  DDL for Package Body PK_RMAPI
1734
--------------------------------------------------------
1373 dpurdie 1735
 
1736
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI" 
1737
IS
1738
 
1739
   /*-------------------------------------------------------------------------------------------------------*/
1740
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
1741
      RETURN typecur
1742
   IS
1743
      npvid     NUMBER  := 0;
1744
      RECORDS   typecur;
1745
   BEGIN
1746
      BEGIN
1747
         -- Get PV_ID --
1748
         SELECT pv.pv_id
1749
           INTO npvid
1750
           FROM PACKAGES pkg, package_versions pv
1751
          WHERE pv.pkg_id = pkg.pkg_id
1752
            AND pkg.pkg_name = pkgname
1753
            AND pv.pkg_version = pkgversion;
1754
      EXCEPTION
1755
         WHEN NO_DATA_FOUND
1756
         THEN
1757
            raise_application_error (-20000, 'Package Not Found!');
1758
            --WHEN OTHERS THEN
1759
                  -- Consider logging the error and then re-raise
1760
            RAISE;
1761
      END;
1762
 
1763
      -- Finally get package dependencies --
1764
      OPEN RECORDS FOR
1765
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
1766
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
1767
          WHERE dep.pv_id = npvid
1768
            AND dpv.pkg_id = dpkg.pkg_id
1769
            AND dpv.pv_id = dep.dpv_id;
1770
 
1771
      RETURN RECORDS;
1772
   END;
1773
 
1774
/*-------------------------------------------------------------------------------------------------------*/
1775
   FUNCTION wip_iteration_package (
1776
      projname        VARCHAR2,
1777
      iterationname   VARCHAR2,
1778
      pkgname         VARCHAR2
1779
   )
1780
      RETURN typecur
1781
   IS
1782
      nrtagid   NUMBER  := 0;
1783
      RECORDS   typecur;
1784
   BEGIN
1785
      BEGIN
1786
         -- Get latest rtag_id --
1787
         SELECT rt.rtag_id
1788
           INTO nrtagid
1789
           FROM projects proj, release_tags rt
1790
          WHERE rt.proj_id = proj.proj_id
1791
            AND UPPER (proj.proj_name) = UPPER (projname)
1792
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
1793
 
1794
         IF (nrtagid IS NULL)
1795
         THEN
1796
            raise_application_error (-20000,
1797
                                     'Work In Progress is Not Found!');
1798
         END IF;
1799
      EXCEPTION
1800
         WHEN NO_DATA_FOUND
1801
         THEN
1802
            raise_application_error (-20000,
1803
                                     'Work In Progress is Not Found!');
1804
            RAISE;
1805
      END;
1806
 
1807
      -- Finally get package dependencies --
1808
      OPEN RECORDS FOR
1809
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
1810
                pv.src_path
1811
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
1812
          WHERE pv.pkg_id = pkg.pkg_id
1813
            AND wip.pv_id = pv.pv_id
1814
            AND wip.rtag_id = nrtagid
1815
            AND pkg.pkg_name = pkgname;
1816
 
1817
      RETURN RECORDS;
1818
   END;
1819
 
1820
/*-------------------------------------------------------------------------------------------------------*/
1821
   FUNCTION auto_make_vcsrelease (
1822
      rtagid                   IN   NUMBER,
1823
      pkgname                  IN   VARCHAR2,
1824
      vext                     IN   VARCHAR2,
1825
      newpkgversion            IN   VARCHAR2,
1374 dpurdie 1826
      vcstag                   IN   VARCHAR2,
1373 dpurdie 1827
      dependenciesimportlist   IN   VARCHAR2,
1828
      isrippled                IN   NUMBER,
1829
      username                 IN   VARCHAR2
1830
   )
1831
      RETURN NUMBER
1832
   IS
1833
      pkgid                           NUMBER;
1834
      pvid                            NUMBER                        := 0;
1835
      userid                          NUMBER;
1836
      dlocked                         VARCHAR2 (20)                 := NULL;
1837
      clonefrompvid                   NUMBER;
1838
      ssv_mm                          package_versions.v_mm%TYPE;
1839
      ssv_nmm                         package_versions.v_nmm%TYPE;
1840
      ssv_ext                         package_versions.v_ext%TYPE;
1841
      return_package_not_found        NUMBER                        := -1;
1842
      return_package_already_exists   NUMBER                        := -2;
1843
      return_not_approved             NUMBER                        := -3;
2546 dpurdie 1844
      return_migrated_pkg             NUMBER                        := -4;
1373 dpurdie 1845
 
1846
      x_vcstypeid                     NUMBER;
1847
      x_tag                           VARCHAR2(32);
1848
      x_label                         VARCHAR2(60);
1849
      x_srcpath                       VARCHAR2(2000);
1374 dpurdie 1850
      p_srcpath                       VARCHAR2(2000);
1373 dpurdie 1851
 
1852
      -- Regular expression constituents
1853
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
1854
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
1855
      BOL           VARCHAR2(4)  := '^';
1856
      Anything      VARCHAR2(4)  := '.*';
1857
      ReplaceToken1 VARCHAR2(4)  := '\1';
1858
      ReplaceToken2 VARCHAR2(4)  := '\2';
1859
      ReplaceToken3 VARCHAR2(4)  := '\3';
1860
      iprev_modifier_id               NUMBER;
1861
 
1862
   BEGIN
1863
      /*--------------- Business Rules Here -------------------*/
1864
      IF (rtagid IS NULL)
1865
      THEN
1866
         raise_application_error (-20000, 'RtagId must be supplied.');
1867
      END IF;
1868
 
1869
      IF (pkgname IS NULL)
1870
      THEN
1871
         raise_application_error (-20000, 'PkgName must be supplied.');
1872
      END IF;
1873
 
1874
      IF (newpkgversion IS NULL)
1875
      THEN
1876
         raise_application_error (-20000, 'PkgVersion must be supplied.');
1877
      END IF;
1878
 
1879
      IF (vcstag IS NULL)
1880
      THEN
1881
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
1882
      END IF;
1883
 
1884
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
1885
      THEN
1886
         raise_application_error
1887
            (-20000,
1888
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
1889
            );
1890
      END IF;
1891
 
1892
      IF (username IS NULL)
1893
      THEN
1894
         raise_application_error (-20000, 'UserName must be supplied.');
1895
      END IF;
1896
 
1897
      -- Parse the PkgVcsTag
1898
      -- Sets up
1899
      --   x_tag, x_label, x_srcpath
1900
 
1901
       BEGIN
1902
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
1903
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
1904
 
1905
          -- Decode the short tag
1906
          CASE x_tag
1907
             WHEN 'CC' THEN
1908
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
1909
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1910
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1911
 
1912
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1913
                -- check for that error as well as the obvious zero-length string conditions.
1914
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1915
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1916
                END IF;
2546 dpurdie 1917
 
2362 dpurdie 1918
                IF isSVNbyName(pkgname) > 0 THEN
2546 dpurdie 1919
				    -- Don't allow migrated packages to be released from a CC label
1920
					return return_migrated_pkg;
2362 dpurdie 1921
                END IF;
1373 dpurdie 1922
 
1923
             WHEN 'SVN' THEN
1924
                -- extract the 2nd token, that being the subversion tag
1374 dpurdie 1925
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1926
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1373 dpurdie 1927
 
1928
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1929
                -- check for that error as well as the obvious zero-length string conditions.
1374 dpurdie 1930
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1373 dpurdie 1931
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1932
                END IF;
1933
 
1934
             WHEN 'UC' THEN
1935
                -- nothing to extract, just assign defaults
1374 dpurdie 1936
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1373 dpurdie 1937
                x_label   := 'N/A';
1938
             ELSE
1939
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
1940
          END CASE;
1941
       END;
1942
 
1943
      -- Get the VCS_TYPE_ID for the version control system.
1944
      BEGIN
1945
         SELECT vt.vcs_type_id
1946
         INTO x_vcstypeid
1947
         FROM VCS_TYPE vt
1948
         WHERE vt.tag = x_tag;
1949
         EXCEPTION
1950
            WHEN NO_DATA_FOUND THEN
1951
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
1952
      END;
1953
 
1954
 
1955
      -- Get user_id
1956
      BEGIN
1957
         SELECT usr.user_id
1958
           INTO userid
1959
           FROM users usr
1960
          WHERE UPPER (usr.user_name) = UPPER (username)
1961
            AND usr.is_disabled IS NULL;
1962
      EXCEPTION
1963
         WHEN NO_DATA_FOUND
1964
         THEN
1965
            raise_application_error (-20000,
1966
                                        'UserName '
1967
                                     || username
1968
                                     || ' is not valid or disabled.'
1969
                                    );
1970
      END;
1971
 
1972
/*-------------------------------------------------------*/
1973
 
1974
      -- Create package if necessary
1975
      IF isrippled = 1
1976
      THEN
1977
         /* Ripple Build */
1978
         BEGIN
1979
            -- Make sure that package does not exist
1980
            SELECT pv.pv_id
1981
              INTO pvid
1982
              FROM package_versions pv, PACKAGES pkg
1983
             WHERE pv.pkg_id = pkg.pkg_id
1984
               AND pkg.pkg_name = pkgname
1985
               AND pv.pkg_version = newpkgversion;
1986
         EXCEPTION
1987
            WHEN NO_DATA_FOUND
1988
            THEN
1989
               pvid := 0;
1990
         END;
1991
 
1992
         IF (pvid = 0)
1993
         THEN
1994
            -- Split current version in parts
1995
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
1996
 
1997
            BEGIN
1374 dpurdie 1998
               -- Find package to be replaced with the ripple package
1373 dpurdie 1999
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2000
               THEN
1374 dpurdie 2001
                  SELECT pv.pv_id, pv.src_path
2002
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2003
                    FROM PACKAGES pkg, package_versions pv,
2004
                         release_content rc
2005
                   WHERE rc.pv_id = pv.pv_id
2006
                     AND pv.pkg_id = pkg.pkg_id
2007
                     AND rc.rtag_id = rtagid
2008
                     AND pkg.pkg_name = pkgname
2009
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
2010
               ELSE
1374 dpurdie 2011
                  SELECT pv.pv_id, pv.src_path
2012
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2013
                    FROM PACKAGES pkg, package_versions pv,
2014
                         release_content rc
2015
                   WHERE rc.pv_id = pv.pv_id
2016
                     AND pv.pkg_id = pkg.pkg_id
2017
                     AND rc.rtag_id = rtagid
2018
                     AND pkg.pkg_name = pkgname
2019
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2020
               END IF;
2021
            EXCEPTION
2022
               WHEN NO_DATA_FOUND
2023
               THEN
2024
                  raise_application_error
2025
                                        (-20000,
2026
                                            'Cannot get CloneFromPvId. VExt='
2027
                                         || vext
2028
                                         || ', RtagId='
2029
                                         || rtagid
2030
                                         || ', PkgName='
2031
                                         || pkgname
2032
                                         || ', SSV_EXT='
2033
                                         || ssv_ext
2034
                                        );
2035
            END;
2036
 
2037
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2038
            THEN
2039
               -- Create package
2040
               seed_package_names_versions (pkgname,
2041
                                            newpkgversion,
2042
                                            userid,
2043
                                            pvid,
2044
                                            clonefrompvid
2045
                                           );
2046
            ELSE
2047
               -- Create package
2048
               seed_package_names_versions2 (pkgname,
2049
                                             newpkgversion,
2050
                                             userid,
2051
                                             pvid,
2052
                                             clonefrompvid
2053
                                            );
2054
            END IF;
2055
 
2056
            -- Update Package reason for release
2057
            UPDATE package_versions pv
2058
               SET pv.comments = 'Rippled Build.',
2059
                   pv.build_type = 'Y'
2060
             WHERE pv.pv_id = pvid;
2061
         ELSE
2062
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
2063
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
2064
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
2065
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
2066
            UPDATE package_versions pv
2067
               SET pv.release_notes_info = null,
2068
                   pv.modified_stamp = ora_sysdatetime
2069
             WHERE pv.pv_id = pvid;
2070
 
2071
            --DEVI-066151
2072
            log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');
2073
 
2074
            RETURN return_package_already_exists;
2075
         END IF;
2076
      ELSE
2077
         /* Auto build from Pending area */
2078
 
2079
         -- Find package in pending area
2080
         BEGIN
1374 dpurdie 2081
            SELECT pv.pv_id, pv.dlocked, pv.src_path
2082
              INTO pvid, dlocked, p_srcpath
1373 dpurdie 2083
              FROM planned pl, package_versions pv, PACKAGES pkg
2084
             WHERE pl.pv_id = pv.pv_id
2085
               AND pv.pkg_id = pkg.pkg_id
2086
               AND pl.rtag_id = rtagid
2087
               AND pkg.pkg_name = pkgname
2088
               AND pv.dlocked = 'A'
2089
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
2090
               AND rownum = 1
2091
             ORDER BY pv.modified_stamp;
2092
         EXCEPTION
2093
            WHEN NO_DATA_FOUND
2094
            THEN
2095
               pvid := 0;
2096
         END;
2097
 
2098
         IF (pvid = 0)
2099
         THEN
2100
            -- Package does not exist in pending area, hence report it
2101
            RETURN return_package_not_found;
2102
         ELSIF (dlocked != 'A')
2103
         THEN
2104
            -- Package is not approved for autobuild
2105
            RETURN return_not_approved;
2106
         END IF;
1374 dpurdie 2107
 
1373 dpurdie 2108
      END IF;
2109
 
1374 dpurdie 2110
      -- Ensure Source Path does not change
2111
      -- Do not expect the SVN development branch to change
2112
      -- From the previous package
2113
      IF ( x_tag = 'SVN' AND p_srcpath != x_srcpath )
2114
      THEN
2115
        raise_application_error (-20000, 'Source Path does not match (' || p_srcpath || ','|| x_srcpath || ')' );
2116
      END IF;
2117
 
1373 dpurdie 2118
      BEGIN
2119
         -- Import Dependencies
2120
         import_dependencies (pvid, dependenciesimportlist, userid);
2121
      END;
2122
 
2123
 
2124
      BEGIN
2125
         -- Split current version in parts
2126
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2127
 
2128
         -- Update Package Details
2129
         UPDATE package_versions pv
2130
            SET pv.pkg_version = newpkgversion,
2131
                pv.v_ext = ssv_ext,
2132
                pv.v_mm = ssv_mm,
2133
                pv.v_nmm = ssv_nmm,
2134
                pv.src_path = x_srcpath,
2135
                pv.pkg_label = x_label,
2136
                pv.vcs_type_id = x_vcstypeid
2137
          WHERE pv.pv_id = pvid;
2138
      EXCEPTION
2139
         WHEN DUP_VAL_ON_INDEX
2140
         THEN
2141
            -- Package already exists, hence cannot be used for ripple build
2142
            RETURN return_package_already_exists;
2143
      END;
2144
 
2145
      -- Update the is_autobuildable
2146
      UPDATE package_versions
2147
         SET is_autobuildable = 'Y'
2148
       WHERE pv_id = pvid;
2149
 
2150
      -- DEVI-063601
2151
      -- For planned builds the modifier_id shouldn't be set to buildadm.
2152
      -- To ensure this the modifier_id is obtained so it can be restored after
2153
      -- the function pk_environment.auto_make_release is called.
2154
      -- This function calls, change_state, which sets the modifier_id to the
2155
      -- specified userid, which for auto builds is buildadm.
2156
      SELECT pv.modifier_id INTO iprev_modifier_id
2157
      FROM package_versions pv WHERE pv.pv_id = pvid;
2158
 
2159
      -- Now release package
2160
      pk_environment.auto_make_release (pvid,
2161
                                        rtagid,
2162
                                        userid,
2163
                                        vext,
2164
                                        ssv_ext,
2165
                                        clonefrompvid
2166
                                       );
2167
 
2168
      -- DEVI-063601
2169
      -- if it is a planned build then restore the modifier_id to the previous modifier
2170
      UPDATE package_versions pv SET pv.modifier_id = iprev_modifier_id
2171
      WHERE pv.pv_id = pvid;
2172
 
2173
      --Now clean the PLANNED_VERSIONS table
2174
      SELECT pkg_id
2175
        INTO pkgid
2176
        FROM PACKAGES
2177
       WHERE pkg_name = pkgname;
2178
 
2179
      DELETE FROM planned_versions
2180
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
2181
 
2182
      RETURN pvid;
2183
   END;
2184
 
2185
/*-------------------------------------------------------------------------------------------------------*/
2186
   PROCEDURE import_dependencies (
2187
      pvid                     IN   NUMBER,
2188
      dependenciesimportlist   IN   VARCHAR2,
2189
      userid                   IN   NUMBER
2190
   )
2191
   IS
2192
/*
2193
|| DependenciesImportList Format:
2194
|| "pkgA","1.0.0";"pkgB","2.0.0";
2195
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
2196
*/
2197
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
2198
         INDEX BY VARCHAR2 (4000);
2199
 
2200
      seperator         VARCHAR2 (2)           := '||';
2201
      pkgname           VARCHAR2 (4000);
2202
      pkgversion        VARCHAR2 (4000);
2203
      buildtype         VARCHAR2 (50);
2204
      pkgid             NUMBER;
2205
      vext              VARCHAR2 (4000);
2206
      dpvid             NUMBER;
2207
      slist             VARCHAR2 (4000);
2208
      cbuildtypes       tdictionary;
2209
      dependencyrow     NUMBER;
2210
      sdependency       VARCHAR2 (4000);
2211
      first_pos         VARCHAR2 (4000);
2212
      second_pos        VARCHAR2 (4000);
2213
      third_pos         VARCHAR2 (4000);
2214
      forth_pos         VARCHAR2 (4000);
2215
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2216
 
2217
      CURSOR curbuildtype
2218
      IS
2219
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
2220
                dep.build_type
2221
           FROM package_dependencies dep, package_versions dpv
2222
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
2223
 
2224
      recbuildtype      curbuildtype%ROWTYPE;
2225
   BEGIN
2226
      slist := dependenciesimportlist;
2227
 
2228
      -- Preformat String
2229
      IF NOT slist IS NULL
2230
      THEN
2231
         slist := REPLACE (slist, ' ');                      -- Remove spaces
2232
         slist := REPLACE (slist, UTL_TCP.crlf);
2233
         -- Remove new line and carriage-return characters
2234
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
2235
      END IF;
2236
 
2237
      -- Get Current Dependencies
2238
      OPEN curbuildtype;
2239
 
2240
      FETCH curbuildtype
2241
       INTO recbuildtype;
2242
 
2243
      WHILE curbuildtype%FOUND
2244
      LOOP
2245
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
2246
 
2247
         FETCH curbuildtype
2248
          INTO recbuildtype;
2249
      END LOOP;
2250
 
2251
      CLOSE curbuildtype;
2252
 
2253
      -- Separate dependencies with ; separator
2254
      citemcollection := in_list_varchar2 (slist, ';');
2255
 
2256
      BEGIN
2257
         -- Remove old dependencies
2258
         DELETE FROM package_dependencies dep
2259
               WHERE dep.pv_id = pvid;
2260
 
2261
         -- Loop through dependencies
2262
         FOR dependencyrow IN 1 .. citemcollection.COUNT
2263
         LOOP
2264
            -- Extract pkg_name and pkg_version
2265
            sdependency := citemcollection (dependencyrow);
2266
            first_pos := INSTR (sdependency, '"', 1, 1);
2267
            second_pos := INSTR (sdependency, '"', 1, 2);
2268
            third_pos := INSTR (sdependency, '"', 1, 3);
2269
            forth_pos := INSTR (sdependency, '"', 1, 4);
2270
            pkgname :=
2271
               SUBSTR (sdependency,
2272
                       (first_pos + 1),
2273
                       (second_pos - first_pos - 1)
2274
                      );
2275
            pkgversion :=
2276
               SUBSTR (sdependency,
2277
                       (third_pos + 1),
2278
                       (forth_pos - third_pos - 1)
2279
                      );
2280
 
2281
            -- Dependency must exits to be linked against
2282
            BEGIN
2283
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
2284
                 INTO dpvid, pkgid, vext
2285
                 FROM package_versions pv, PACKAGES pkg
2286
                WHERE pv.pkg_id = pkg.pkg_id
2287
                  AND pkg.pkg_name = pkgname
2288
                  AND pv.pkg_version = pkgversion;
2289
            EXCEPTION
2290
               WHEN NO_DATA_FOUND
2291
               THEN
2292
                  raise_application_error
2293
                                  (-20000,
2294
                                      'Dependency ['
2295
                                   || pkgname
2296
                                   || ' '
2297
                                   || pkgversion
2298
                                   || '] does not exist yet and cannot be used!'
2299
                                  );
2300
            END;
2301
 
2302
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
2303
            BEGIN
2304
               buildtype := cbuildtypes (pkgid || seperator || vext);
2305
 
2306
               IF buildtype IS NULL
2307
               THEN
2308
                  -- Set build type to LinkPackageArchive by default
2309
                  buildtype := 'L';
2310
               END IF;
2311
            EXCEPTION
2312
               WHEN NO_DATA_FOUND
2313
               THEN
2314
                  buildtype := 'L';
2315
            END;
2316
 
2317
            -- Insert Dependencies
2318
            update_package_dependency (pvid,
2319
                                       pkgname,
2320
                                       pkgversion,
2321
                                       buildtype,
2322
                                       userid,
2323
 
2324
                                      );
2325
         END LOOP;
2326
      END;
2327
   END;
2328
 
2329
/*-------------------------------------------------------------------------------------------------------*/
2330
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
2331
      RETURN VARCHAR2
2332
   IS
2333
      pkgversion   VARCHAR2 (4000);
2334
   BEGIN
2335
      BEGIN
2336
         SELECT pv.pkg_version
2337
           INTO pkgversion
2338
           FROM PACKAGES pkg, release_content rc, package_versions pv
2339
          WHERE pv.pv_id = rc.pv_id
2340
            AND pkg.pkg_id = pv.pkg_id
2341
            AND pkg.pkg_name = pkgname
2342
            AND rc.rtag_id = rtagid;
2343
 
2344
         RETURN pkgversion;
2345
      END;
2346
   END;
2347
 
2348
/*-------------------------------------------------------------------------------------------------------*/
2349
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
2350
      RETURN VARCHAR2
2351
   IS
2352
      pkgversion   VARCHAR2 (4000);
2353
   BEGIN
2354
      BEGIN
2355
         SELECT pv.pkg_version
2356
           INTO pkgversion
2357
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
2358
          WHERE pv.pv_id = wip.pv_id
2359
            AND pkg.pkg_id = pv.pkg_id
2360
            AND pkg.pkg_name = pkgname
2361
            AND wip.rtag_id = rtagid;
2362
 
2363
         IF pkgversion IS NULL
2364
         THEN
2365
            SELECT pv.pkg_version
2366
              INTO pkgversion
2367
              FROM PACKAGES pkg, planned pl, package_versions pv
2368
             WHERE pv.pv_id = pl.pv_id
2369
               AND pkg.pkg_id = pv.pkg_id
2370
               AND pkg.pkg_name = pkgname
2371
               AND pl.rtag_id = rtagid;
2372
         END IF;
2373
 
2374
         RETURN pkgversion;
2375
      END;
2376
   END;
2377
 
2378
/*-------------------------------------------------------------------------------------------------------*/
2379
   PROCEDURE update_dash_board (rtagid IN NUMBER)
2380
   IS
2381
      projid       NUMBER;
2382
      projiddb     NUMBER;
2383
      total        NUMBER;
2384
      auto_total   NUMBER;
2385
      rtagiddb     NUMBER;
2386
   BEGIN
2387
      SELECT COUNT (*)
2388
        INTO total
2389
        FROM release_content rc, package_versions pv
2390
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
2391
 
2392
      SELECT COUNT (*)
2393
        INTO auto_total
2394
        FROM release_content rc, package_versions pv
2395
       WHERE pv.pv_id = rc.pv_id
2396
         AND pv.is_autobuildable = 'Y'
2397
         AND rc.rtag_id = rtagid;
2398
 
2399
      BEGIN
2400
         SELECT rtag_id
2401
           INTO rtagiddb
2402
           FROM dash_board
2403
          WHERE rtag_id = rtagid;
2404
 
2405
         SELECT proj_id
2406
           INTO projiddb
2407
           FROM dash_board
2408
          WHERE rtag_id = rtagid;
2409
      EXCEPTION
2410
         WHEN NO_DATA_FOUND
2411
         THEN
2412
            rtagiddb := '';
2413
      END;
2414
 
2415
      IF rtagiddb IS NULL
2416
      THEN
2417
         SELECT proj_id
2418
           INTO projid
2419
           FROM release_tags
2420
          WHERE rtag_id = rtagid;
2421
 
2422
         INSERT INTO dash_board
2423
                     (proj_id, rtag_id, last_build_time, automated_packages,
2424
                      total_packages
2425
                     )
2426
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
2427
                      total
2428
                     );
2429
      ELSE
2430
         UPDATE dash_board
2431
            SET last_build_time = ora_sysdatetime,
2432
                automated_packages = auto_total,
2433
                total_packages = total
2434
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
2435
      END IF;
2436
   END;
2437
 
2438
/*-------------------------------------------------------------------------------------------------------*/
2439
   FUNCTION exclude_from_build (
2440
      pvid          IN   NUMBER,
2441
      spkgversion   IN   VARCHAR2,
2442
      rtagid        IN   NUMBER,
2443
      username      IN   VARCHAR2
2444
   )
2445
      RETURN NUMBER
2446
   IS
2447
      userid              NUMBER;
2448
      outerrcode          NUMBER;
2449
      pkgid               NUMBER;
2450
 
2451
      CURSOR dnr_duplicate_cur
2452
      IS
2453
         SELECT *
2454
           FROM do_not_ripple
2455
          WHERE pv_id = pvid AND rtag_id = rtagid;
2456
 
2457
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2458
   BEGIN
2459
      outerrcode := -1;       -- Set default return error code to ERROR state
2460
 
2461
      /*--------------- Business Rules Here -------------------*/
2462
      IF (rtagid IS NULL)
2463
      THEN
2464
         RETURN outerrcode;
2465
--         raise_application_error (-20000, 'RtagId must be supplied.');
2466
      END IF;
2467
 
2468
      IF (pvid IS NULL)
2469
      THEN
2470
         RETURN outerrcode;
2471
--         raise_application_error (-20000, 'PvId must be supplied.');
2472
      END IF;
2473
 
2474
      IF (username IS NULL)
2475
      THEN
2476
         RETURN outerrcode;
2477
--         raise_application_error (-20000, 'UserName must be supplied.');
2478
      END IF;
2479
 
2480
      -- Get user_id
2481
      BEGIN
2482
         SELECT usr.user_id
2483
           INTO userid
2484
           FROM users usr
2485
          WHERE UPPER (usr.user_name) = UPPER (username)
2486
            AND usr.is_disabled IS NULL;
2487
      EXCEPTION
2488
         WHEN NO_DATA_FOUND
2489
         THEN
2490
            RETURN outerrcode;
2491
--            raise_application_error (-20000,
2492
--                                        'UserName '
2493
--                                     || username
2494
--                                     || ' is not valid or disabled.'
2495
--                                    );
2496
      END;
2497
 
2498
      OPEN dnr_duplicate_cur;
2499
 
2500
      FETCH dnr_duplicate_cur
2501
       INTO dnr_duplicate_rec;
2502
 
2503
      IF dnr_duplicate_cur%FOUND
2504
      THEN
2505
         outerrcode := 0;
2506
      END IF;
2507
 
2508
      IF dnr_duplicate_cur%NOTFOUND
2509
      THEN
2510
         /* No duplicate recordset */
2511
         unripple_package (pvid, rtagid, userid);
2512
         outerrcode := 0;                            -- Set return to SUCCESS
2513
      END IF;
2514
 
2515
      CLOSE dnr_duplicate_cur;
2516
 
2517
      SELECT pkg_id
2518
        INTO pkgid
2519
        FROM package_versions
2520
       WHERE pv_id = pvid;
2521
 
2522
      DELETE FROM planned_versions
2523
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2524
 
2525
      RETURN outerrcode;
2526
   END;
2527
 
2528
/*-------------------------------------------------------------------------------------------------------*/
2529
   FUNCTION exclude_indirect_from_build (
2530
      pvid          IN   NUMBER,
2531
      spkgversion   IN   VARCHAR2,
2532
      rtagid        IN   NUMBER,
2533
      username      IN   VARCHAR2,
2534
      rootpvid      IN   NUMBER,
2535
      rootcause     IN   VARCHAR2,
2536
      rootfile      IN   VARCHAR2
2537
   )
2538
      RETURN NUMBER
2539
   IS
2540
      userid              NUMBER;
2541
      outerrcode          NUMBER;
2542
      pkgid               NUMBER;
2543
 
2544
      CURSOR dnr_duplicate_cur
2545
      IS
2546
         SELECT *
2547
           FROM do_not_ripple
2548
          WHERE pv_id = pvid AND rtag_id = rtagid;
2549
 
2550
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2551
   BEGIN
2552
      outerrcode := -1;       -- Set default return error code to ERROR state
2553
 
2554
      /*--------------- Business Rules Here -------------------*/
2555
      IF (rtagid IS NULL)
2556
      THEN
2557
         RETURN outerrcode;
2558
--         raise_application_error (-20000, 'RtagId must be supplied.');
2559
      END IF;
2560
 
2561
      IF (pvid IS NULL)
2562
      THEN
2563
         RETURN outerrcode;
2564
--         raise_application_error (-20000, 'PvId must be supplied.');
2565
      END IF;
2566
 
2567
      IF (username IS NULL)
2568
      THEN
2569
         RETURN outerrcode;
2570
--         raise_application_error (-20000, 'UserName must be supplied.');
2571
      END IF;
2572
 
2573
      -- Get user_id
2574
      BEGIN
2575
         SELECT usr.user_id
2576
           INTO userid
2577
           FROM users usr
2578
          WHERE UPPER (usr.user_name) = UPPER (username)
2579
            AND usr.is_disabled IS NULL;
2580
      EXCEPTION
2581
         WHEN NO_DATA_FOUND
2582
         THEN
2583
            RETURN outerrcode;
2584
--            raise_application_error (-20000,
2585
--                                        'UserName '
2586
--                                     || username
2587
--                                     || ' is not valid or disabled.'
2588
--                                    );
2589
      END;
2590
 
2591
     /* No duplicate recordset */
2592
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
2593
     outerrcode := 0;                            -- Set return to SUCCESS
2594
 
2595
      SELECT pkg_id
2596
        INTO pkgid
2597
        FROM package_versions
2598
       WHERE pv_id = pvid;
2599
 
2600
      DELETE FROM planned_versions
2601
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2602
 
2603
      RETURN outerrcode;
2604
   END;
2605
/*-------------------------------------------------------------------------------------------------------*/
2606
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
2607
   IS
2608
   BEGIN
2609
      INSERT INTO abt_action_log
2610
                  (rcon_id, action_datetime, action
2611
                  )
2612
           VALUES (rconid, ora_sysdatetime, action
2613
                  );
2614
   END;
2615
 
2616
/*-------------------------------------------------------------------------------------------------------*/
2617
   FUNCTION insert_package_metrics (
2618
      rtagid                   IN   NUMBER,
2619
      pkgname                  IN   VARCHAR2,
2620
      vext                     IN   VARCHAR2,
2621
      metricstring             IN   VARCHAR2
2622
   )
2623
      RETURN NUMBER
2624
   IS
2625
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2626
      lv_pvid                  NUMBER                 := 0;
2627
      rownumber                NUMBER;
2628
      rowcontent               VARCHAR2(4000);
2629
      metricname               VARCHAR2(1000);
2630
      metricvalue              VARCHAR2(4000);
2631
      return_insert_error      NUMBER                 := -1;
2632
      return_insert_success    NUMBER                 := 0;
2633
 
2634
      /* Metrics */
2635
      lv_branches                 NUMBER;
2636
      lv_branchlist               VARCHAR2(4000);
2637
      lv_codefiles                NUMBER;
2638
      lv_ignoredfiles             NUMBER;
2639
      lv_directories              NUMBER;
2640
      lv_directorydepth           NUMBER;
2641
      lv_totalfiles               NUMBER;
2642
      lv_makefiles                NUMBER;
2643
      lv_blanklines               NUMBER;
2644
      lv_codelines                NUMBER;
2645
      lv_commentlines             NUMBER;
2646
 
2647
   BEGIN
2648
      /*--------------- Business Rules Here -------------------*/
2649
      IF (rtagid IS NULL)
2650
      THEN
2651
         RETURN return_insert_error;
2652
      END IF;
2653
 
2654
      IF (pkgname IS NULL)
2655
      THEN
2656
         RETURN return_insert_error;
2657
      END IF;
2658
 
2659
      IF (metricstring IS NULL)
2660
      THEN
2661
         RETURN return_insert_error;
2662
      END IF;
2663
 
2664
      BEGIN
2665
         SELECT pv.pv_id
2666
           INTO lv_pvid
2667
           FROM package_versions pv, packages pkg, release_content rc
2668
          WHERE pv.pkg_id = pkg.pkg_id
2669
            AND rc.rtag_id = rtagid
2670
            AND pv.pv_id = rc.pv_id
2671
            AND pkg.pkg_name = pkgname
2672
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2673
      EXCEPTION
2674
           WHEN NO_DATA_FOUND
2675
           THEN
2676
                lv_pvid := 0;
2677
      END;
2678
 
2679
      citemcollection := in_list_varchar2 (metricstring, ';');
2680
 
2681
      FOR rownumber IN 1 .. citemcollection.COUNT
2682
      LOOP
2683
         rowcontent := citemcollection(rownumber);
2684
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
2685
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
2686
 
2687
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
2688
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
2689
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
2690
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
2691
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
2692
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
2693
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
2694
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
2695
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
2696
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
2697
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
2698
         END IF;
2699
      END LOOP;
2700
 
2701
      IF (lv_pvid > 0)
2702
      THEN
2703
         -- Delete any existing entries for this package version to makes sure our data is untainted
2704
         DELETE FROM package_metrics pm
2705
         WHERE pm.pv_id = lv_pvid;
2706
 
2707
         -- Insert the new data into the metrics table
2708
         INSERT INTO package_metrics
2709
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
2710
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
2711
                     )
2712
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
2713
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
2714
                     );
2715
 
2716
         -- Now update the Release_Metrics Table
2717
         update_release_metrics(rtagid);
2718
 
2719
         RETURN return_insert_success;
2720
      ELSE
2721
         RETURN return_insert_error;
2722
      END IF;
2723
   END;
2724
 
2725
/*-------------------------------------------------------------------------------------------------------*/
2726
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
2727
   IS
2728
      lv_totalpackages       NUMBER;
2729
      lv_autobuilt           NUMBER;
2730
      lv_linesofcode         NUMBER;
2731
      lv_unittested          NUMBER;
2732
      lv_autotested          NUMBER;
2733
      lv_numOfbranches       NUMBER;
2734
      lv_lastbuildtime       DATE;
2735
   BEGIN
2736
      IF (rtagid > 0)
2737
      THEN
2738
         -- Get the total number of packages in this release and the number of
2739
         -- those that are autobuilt
2740
         SELECT COUNT (DISTINCT rc.pv_id),
2741
                COUNT (DISTINCT autobuilt_qry.pv_id)
2742
           INTO lv_totalpackages, lv_autobuilt
2743
           FROM release_content rc,
2744
                package_versions pv,
2745
                (
2746
                 SELECT rc.pv_id
2747
                   FROM release_content rc,
2748
                        package_versions pv
2749
                  WHERE pv.is_autobuildable = 'Y'
2750
                    AND pv.pv_id = rc.pv_id
2751
                    AND rc.rtag_id = rtagid
2752
                ) autobuilt_qry
2753
          WHERE pv.pv_id = rc.pv_id
2754
            AND rc.rtag_id = rtagid
2755
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
2756
 
2757
         -- Get the build time of the last package built in this release and the
2758
         -- total number of lines of code
2759
         SELECT MAX(pm.created_stamp),
2760
                SUM(pm.code_lines)
2761
           INTO lv_lastbuildtime, lv_linesofcode
2762
           FROM package_metrics pm, release_content rc
2763
          WHERE pm.pv_id = rc.pv_id
2764
            AND rc.rtag_id = rtagid;
2765
 
2766
         -- Get the number of packages with unit tests in this release and the
2767
         -- number of those that are autotested
2768
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
2769
           FROM unit_tests ut,
2770
                release_content rc
2771
          WHERE ut.pv_id = rc.pv_id
2772
            AND rc.rtag_id = rtagid
2773
        AND ut.test_types_fk != 1;
2774
 
2775
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
2776
          FROM unit_tests ut,
2777
               release_content rc
2778
         WHERE ut.pv_id = rc.pv_id
2779
           AND rc.rtag_id = rtagid
2780
           AND ut.test_types_fk = 7;
2781
 
2782
 
2783
         -- Count the number of unique branches in the packages in this release.
2784
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
2785
--           FROM (
2786
--                SELECT pv_id,
2787
--                       regexp_substr(str, '[^,]+', 1, level) branch,
2788
--                       level lv,
2789
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
2790
--                  FROM (
2791
--                       SELECT pm.pv_id,
2792
--                              ','||pm.branch_list str
2793
--                         FROM package_metrics pm,
2794
--                              release_content rc
2795
--                        WHERE pm.pv_id = rc.pv_id
2796
--                          AND rc.rtag_id = rtagid
2797
--                       )
2798
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
2799
--                )
2800
--          WHERE lv != lg;
2801
 
2802
         UPDATE release_metrics rm
2803
            SET rm.total_packages = lv_totalpackages,
2804
                rm.autobuilt = lv_autobuilt,
2805
                rm.lines_of_code = lv_linesofcode,
2806
                rm.unit_tested = lv_unittested,
2807
                rm.autotested = lv_autotested,
2808
--                rm.branches = lv_numOfbranches,
2809
                rm.last_build_time = lv_lastbuildtime
2810
          WHERE rtag_id = rtagid;
2811
 
2812
         IF (SQL%ROWCOUNT = 0)
2813
         THEN
2814
            INSERT INTO release_metrics
2815
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2816
                         autotested, last_build_time
2817
                        )
2818
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2819
                         lv_autotested, lv_lastbuildtime
2820
                        );
2821
         END IF;
2822
--         IF (SQL%ROWCOUNT = 0)
2823
--         THEN
2824
--            INSERT INTO release_metrics
2825
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2826
--                         autotested, branches, last_build_time
2827
--                        )
2828
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2829
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
2830
--                        );
2831
--         END IF;
2832
--      ELSE
2833
--         raise_application_error (-20000, 'RtagId must be supplied.');
2834
      END IF;
2835
   END;
2836
/*-------------------------------------------------------------------------------------------------------*/
2837
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
2838
   IS
2839
      vcstypeid    NUMBER;
2840
      vcstag       VARCHAR2(32);
2841
      label        VARCHAR2(60);
2842
      srcpath      VARCHAR2(2000);
2843
      vcstypeid_cc NUMBER;
2844
      vcstypeid_uc NUMBER;
2845
   BEGIN
2846
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
2847
      -- what the primary key value is for the ClearCase VCS entry.
2848
      BEGIN
2849
         SELECT vt.vcs_type_id
2850
         INTO vcstypeid_cc
2851
         FROM VCS_TYPE vt
2852
         WHERE vt.tag = 'CC';
2853
         EXCEPTION
2854
            WHEN NO_DATA_FOUND THEN
2855
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
2856
      END;
2857
 
2858
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
2859
      -- what the primary key value is for the Uncontrolled VCS entry.
2860
      BEGIN
2861
         SELECT vt.vcs_type_id
2862
         INTO vcstypeid_uc
2863
         FROM VCS_TYPE vt
2864
         WHERE vt.tag = 'UC';
2865
         EXCEPTION
2866
            WHEN NO_DATA_FOUND THEN
2867
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
2868
      END;
2869
 
2870
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
2871
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
2872
      BEGIN
2873
         SELECT pv.pkg_label, pv.src_path,
2874
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
2875
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
2876
                 ELSE pv.vcs_type_id END) AS vcs_type_id
2877
         INTO label, srcpath, vcstypeid
2878
         FROM PACKAGE_VERSIONS pv
2879
         WHERE pv.pv_id = pvid;
2880
         EXCEPTION
2881
            WHEN NO_DATA_FOUND THEN
2882
               raise_application_error (-20000, 'Package Version Not Found!');
2883
      END;
2884
 
2885
      -- Get the VCS TAG for the VCS_TYPE_ID.
2886
      BEGIN
2887
         SELECT vt.tag
2888
         INTO vcstag
2889
         FROM VCS_TYPE vt
2890
         WHERE vt.vcs_type_id = vcstypeid;
2891
         EXCEPTION
2892
            WHEN NO_DATA_FOUND THEN
2893
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
2894
      END;
2895
 
2896
      -- Return value depending upon which VCS Tag is being used.
2897
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
2898
      CASE vcstag
2899
         WHEN 'CC' THEN
2900
            RETURN vcstag || '::' || srcpath || '::' || label;
2901
         WHEN 'SVN' THEN
1374 dpurdie 2902
            RETURN vcstag || '::' || srcpath || '::' || label;
1373 dpurdie 2903
         ELSE
2904
            RETURN vcstag || '::';
2905
      END CASE;
2906
 
2907
   END;
2908
/*-------------------------------------------------------------------------------------------------------*/
2909
 
1374 dpurdie 2910
/*-------------------------------------------------------------------------------------------------------
2911
Name:        update_vcs_details
2912
Description: Updates the Version Control System (vcs) details specified in the vcstag
2913
             parameter for the specified package version.
2914
             The specified package vcstag is parsed and split into 3 fields:
2915
                vcs type, src path, label
2916
             These fields are then stored for the specified pv_id in the package_versions, table.
2917
             An action is recorded in the action log and provides information for tracking and
2918
             for restoring the previous vcs settings if a recovery is required.
2919
Paramters:
2920
             ipv_id:     Package version identifier
2921
             vcstag:     Full version control tag.
2922
                         Examples:
2923
                             "SVN::AUPERASVN01/DPG_SWBase/tools/trunk::daf_tools_25.1.7027.cr@1234"
2924
                            "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2925
             user_id:    Identifier of the user that is performing this function.
2926
*/
2927
PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)
2928
   IS
2929
      ivcs_type_id   NUMBER;
2930
      svcs_type      VARCHAR2(128);
2931
      ssrc_path      VARCHAR2(512);
2932
      spkg_label     VARCHAR2(512);
2933
      spattern       VARCHAR2(64);
2934
      saction_desc   VARCHAR2(2048);
2935
      old_vcs_type   VARCHAR2(128);
2936
      old_src_path   VARCHAR2(512);
2937
      old_pkg_label  VARCHAR2(512);
2938
      old_pkg_vcstag VARCHAR2(1024);
2939
      i              NUMBER;
2940
      vcount         NUMBER;
2941
   BEGIN
2942
     -- Split vcs tag into fields: vcs type, src path, label
2943
     -- Fields are separated by '::'
2944
     -- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2945
     -- The below regular expression pattern has groups to achieve this.
2946
 
2947
     spattern:= '^([^:]*)::([^:]*)(::(.*))?$';
2948
 
2949
     --As Oracle 10g does not allow REGEXP_SUBSTR to return a group,
2950
     --REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).
2951
     SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type  FROM DUAL;
2952
     SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path  FROM DUAL;
2953
     SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;
2954
 
2955
     -- Validate vcs type
2956
     BEGIN
2957
       SELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);
2958
     EXCEPTION
2959
       WHEN NO_DATA_FOUND THEN
2960
         raise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2961
       --RAISE;
2362 dpurdie 2962
     END;
1374 dpurdie 2963
 
2362 dpurdie 2964
     -- If Clearcase
1374 dpurdie 2965
     IF (ivcs_type_id = 2) THEN
2966
       -- Validate source path
2967
       IF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THEN
2968
         raise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2969
       END IF;
2362 dpurdie 2970
 
1374 dpurdie 2971
       -- Validate label
2972
       -- For clearcase the label must be specified. For subversion it is not required.
2973
       IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THEN
2974
         raise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2975
       END IF;
2976
 
2977
     -- if Subversion
2978
     ELSIF (ivcs_type_id = 23) THEN
2979
       -- general validity
2980
       -- Not as picky as the RM Data entry
2981
       IF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))+$','i') THEN
2982
         raise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2983
       END IF;
2984
 
2985
       -- Validate Tag
2986
       -- May be a Peg or a Label
2987
       IF NOT REGEXP_LIKE(spkg_label,'^@?[0-9]+$','i') THEN
2988
           IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+($|@[0-9]+)','i') THEN
2989
             raise_application_error (-20000, 'Invalid SVN tag:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2990
           END IF;
2991
       END IF;
2992
 
2993
        -- Check for suitable ending
2994
        IF NOT REGEXP_LIKE(ssrc_path,'(\/tags$)|(\/branches\/)|(\/trunk$)','i') THEN
2995
            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 || '"');
2996
        END IF;
2997
 
2998
       -- Check for combined use of tags, branches, trunk or repeats of each
2999
       -- Count occurrences of /tags or /branches/ or /trunk
3000
       vcount:=0;
3001
       i:=1;
3002
       WHILE i > 0 LOOP
3003
         i:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk(\/|$))',i,1,1,'i');
3004
         IF i > 0 THEN
3005
           -- if found then increment count
3006
           vcount:=vcount+1;
3007
           i:=i-1;  -- move index back to "/"
3008
         END IF;
3009
       END LOOP;
3010
 
3011
       IF vcount = 0  THEN
3012
         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 || '"');
3013
       END IF;
3014
 
3015
       IF vcount > 1  THEN
3016
         raise_application_error (-20000, 'Combined use of /trunk, /tags, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
3017
       END IF;
2362 dpurdie 3018
 
3019
 
1374 dpurdie 3020
     END IF;
3021
 
3022
     BEGIN
3023
       -- Get current vcs tag for specified package version
3024
       SELECT pv.src_path, pv.pkg_label, vc.tag as vcs_type
3025
       INTO old_src_path, old_pkg_label, old_vcs_type
3026
       FROM package_versions pv, vcs_type vc
3027
       WHERE pv.pv_id = ipv_id
3028
       AND pv.vcs_type_id = vc.vcs_type_id (+);
3029
 
3030
     EXCEPTION
3031
       WHEN NO_DATA_FOUND THEN
3032
         raise_application_error (-20000, 'Package version not found: ' || ipv_id);
2362 dpurdie 3033
     END;
1374 dpurdie 3034
 
3035
     old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;
3036
     IF (old_pkg_label IS NOT NULL) THEN
3037
       old_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;
3038
     END IF;
3039
 
3040
     -- Create action description
3041
     -- This description will contain the old and new tags.
3042
     -- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.
3043
     -- An example of the action description is below:
3044
     --   OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr
3045
     saction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;
3046
 
3047
     -- Store new vcs details
3048
     UPDATE package_versions SET
3049
       src_path = ssrc_path,
3050
       pkg_label = spkg_label,
3051
       vcs_type_id = ivcs_type_id
3052
     WHERE
3053
       pv_id = ipv_id;
3054
 
3055
     -- Store action in action log so that we can back track and also restore vcs settings if required.
3056
     log_action (ipv_id,'VcsConversion',user_id,saction_desc);
3057
 
3058
   END update_vcs_details;
3059
 
2362 dpurdie 3060
/*-------------------------------------------------------------------------------------------------------
3061
Name:        isSVN
3062
Description: Determine if any of the packages versions are controlled under SVN
3063
			 Intended to be used to prevent users from releasing a package
3064
			 that has been migrated to SVN
3065
 
3066
Paramters:	pkgid:     Package ID
3067
 
3068
Returns:	Number of versions under SVN version control
3069
*/
3070
 
3071
FUNCTION isSVN( pkgid IN NUMBER )
3072
    RETURN NUMBER
3073
    IS
3074
    svncount   NUMBER  := 0;
3075
   BEGIN
3076
        SELECT COUNT(*) INTO svncount FROM PACKAGE_VERSIONS pv WHERE pv.PKG_ID = pkgid AND pv.VCS_TYPE_ID = 23;
3077
        RETURN (svncount);
3078
   END;
3079
 
3080
/*-------------------------------------------------------------------------------------------------------
3081
Name:        isSVNbyName
3082
Description: Determine if any of the packages versions are controlled under SVN
3083
			 Intended to be used to prevent users from releasing a package
3084
			 that has been migrated to SVN
3085
 
3086
Paramters:	pkgname:	Package Name
3087
 
3088
Returns:	Number of versions under SVN version control
3089
*/
3090
 
3091
FUNCTION isSVNbyName( pkgname IN VARCHAR2 )
3092
    RETURN NUMBER
3093
IS
3094
   svncount   NUMBER  := 0;
3095
   BEGIN
3096
        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;
3097
        RETURN (svncount);
3098
   END;
3099
 
3100
   END;
1374 dpurdie 3101
/
3102
--------------------------------------------------------
3103
--  DDL for Package Body PK_BUILDAPI
3104
--------------------------------------------------------
1373 dpurdie 3105
 
3106
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI" 
3107
IS
3108
   /*-------------------------------------------------------------------------------------------------------*/
3109
   PROCEDURE add_product_component (
3110
      npvid           IN   NUMBER,
3111
      sosname         IN   VARCHAR2,
3112
      sorigfilepath   IN   VARCHAR2,
3113
      sfilename       IN   VARCHAR2,
3114
      sdestfilepath   IN   VARCHAR2,
3115
      nbytesize       IN   NUMBER,
3116
      scrccksum       IN   VARCHAR2
3117
   )
3118
   IS
3119
      nosid   NUMBER;
3120
   BEGIN
3121
      /*--------------- Business Rules Here -------------------*/
3122
      -- OS Name Requirements --
3123
      IF (sosname IS NULL)
3124
      THEN
3125
         raise_application_error (-20000, 'OsName cannot be NULL.');
3126
      END IF;
3127
 
3128
      -- File Requirements --
3129
      IF (NOT sfilename IS NULL)
3130
      THEN
3131
         IF (nbytesize IS NULL)
3132
         THEN
3133
            raise_application_error (-20000, 'Byte Size cannot be NULL.');
3134
         ELSIF (scrccksum IS NULL)
3135
         THEN
3136
            raise_application_error (-20000, 'CRC CKSUM cannot be NULL.');
3137
         END IF;
3138
      END IF;
3139
 
3140
      -- Folder Requirements --
3141
      -- No requirements for now.
3142
 
3143
      /*-------------------------------------------------------*/
3144
 
3145
      -- Get OsId
3146
      nosid := get_osid (sosname);
3147
 
3148
      -- Insert component entry
3149
      INSERT INTO product_components
3150
                  (pv_id, os_id, file_path, file_name, destination_path,
3151
                  byte_size, crc_cksum
3152
                  )
3153
         VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,
3154
                  nbytesize, scrccksum
3155
                  );
3156
   EXCEPTION
3157
      WHEN DUP_VAL_ON_INDEX
3158
      THEN
3159
         raise_application_error (-20000,
3160
                                 'Cannot have duplicate product components.'
3161
                                 );
3162
   END;
3163
 
3164
/*-------------------------------------------------------------------------------------------------------*/
3165
   PROCEDURE remove_all_product_components (
3166
      npvid     IN   NUMBER,
3167
      sosname   IN   VARCHAR2
3168
   )
3169
   IS
3170
      nosid   NUMBER;
3171
   BEGIN
3172
/*--------------- Business Rules Here -------------------*/
3173
/*-------------------------------------------------------*/
3174
 
3175
      -- Get OsId
3176
      nosid := get_osid (sosname);
3177
 
3178
      -- Delete component entry
3179
      DELETE FROM product_components pc
3180
            WHERE pc.pv_id = npvid AND pc.os_id = nosid;
3181
   END;
3182
 
3183
/*-------------------------------------------------------------------------------------------------------*/
3184
   FUNCTION get_osid (sosname IN VARCHAR2)
3185
      RETURN NUMBER
3186
   IS
3187
      code   NUMBER;
3188
   BEGIN
3189
      -- Get Platform Code --
3190
      SELECT pf.code
3191
      INTO code
3192
      FROM platforms pf
3193
      WHERE UPPER (pf.NAME) = UPPER (sosname);
3194
 
3195
      RETURN code;
3196
   EXCEPTION
3197
      WHEN NO_DATA_FOUND
3198
      THEN
3199
         raise_application_error
3200
            (-20000,
3201
               'Platform '
3202
            || sosname
3203
            || ' is not valid. It needs to be added to PLATFORMS table in Release Manager.'
3204
            );
3205
         RAISE;
3206
   END;
3207
 
3208
/*-------------------------------------------------------------------------------------------------------
3209
Obsolete - Superseded by update_build_service_info
3210
*/
3211
 
3212
   PROCEDURE update_build_service (
3213
      sdatabaseserver   IN   VARCHAR2,
3214
      swebserver        IN   VARCHAR2,
3215
      smailserver       IN   VARCHAR2,
3216
      smailsender       IN   VARCHAR2,
3217
      sdiskspace        IN   VARCHAR2,
3218
      ssbommanagement   IN   VARCHAR2
3219
   )
3220
   IS
3221
   BEGIN
3222
      UPDATE build_service_config
3223
         SET config = sdatabaseserver
3224
      WHERE service = 'DATABASE SERVER';
3225
 
3226
      UPDATE build_service_config
3227
         SET config = swebserver
3228
      WHERE service = 'WEB SERVER';
3229
 
3230
      UPDATE build_service_config
3231
         SET config = smailserver
3232
      WHERE service = 'MAIL SERVER';
3233
 
3234
      UPDATE build_service_config
3235
         SET config = smailsender
3236
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3237
 
3238
      UPDATE build_service_config
3239
         SET config = sdiskspace
3240
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3241
 
3242
      UPDATE build_service_config
3243
         SET config = ssbommanagement
3244
      WHERE service = 'SBOM MANAGEMENT';
3245
   END;
3246
 
3247
/*-------------------------------------------------------------------------------------------------------*/
3248
   PROCEDURE update_build_service_info (
3249
      sdatabaseserver   IN   VARCHAR2,
3250
      sarchiveserver    IN   VARCHAR2,
3251
      smailserver       IN   VARCHAR2,
3252
      smailsender       IN   VARCHAR2,
3253
      sdiskspace        IN   VARCHAR2,
3254
      ssbommanagement   IN   VARCHAR2
3255
   )
3256
   IS
3257
   BEGIN
3258
      UPDATE build_service_config
3259
         SET config = sdatabaseserver
3260
      WHERE service = 'DATABASE SERVER';
3261
 
3262
      UPDATE build_service_config
3263
         SET config = sarchiveserver
3264
      WHERE service = 'ARCHIVE SERVER';
3265
 
3266
      UPDATE build_service_config
3267
         SET config = smailserver
3268
      WHERE service = 'MAIL SERVER';
3269
 
3270
      UPDATE build_service_config
3271
         SET config = smailsender
3272
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3273
 
3274
      UPDATE build_service_config
3275
         SET config = sdiskspace
3276
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3277
 
3278
      UPDATE build_service_config
3279
         SET config = ssbommanagement
3280
      WHERE service = 'SBOM MANAGEMENT';
3281
   END;
3282
 
3283
 
3284
/*-------------------------------------------------------------------------------------------------------*/
3285
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)
3286
   IS
3287
      gbe_id   NUMBER;
3288
   BEGIN
3289
      -- Get GBE_ID
3290
      SELECT seq_gbe_id.NEXTVAL
3291
      INTO gbe_id
3292
      FROM DUAL;
3293
 
3294
      INSERT INTO gbe_machtype
3295
                  (gbe_id, gbe_value
3296
                  )
3297
         VALUES (gbe_id, sgbevalue
3298
                  );
3299
   END;
3300
 
3301
/*-------------------------------------------------------------------------------------------------------*/
3302
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)
3303
   IS
3304
   BEGIN
3305
      DELETE FROM gbe_machtype
3306
            WHERE gbe_id = ngbe_id;
3307
   END;
3308
 
3309
/*-------------------------------------------------------------------------------------------------------*/
3310
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)
3311
   IS
3312
   BEGIN
3313
      UPDATE gbe_machtype
3314
         SET gbe_value = sgbevalue
3315
      WHERE gbe_id = ngbe_id;
3316
   END;
3317
 
3318
/*-------------------------------------------------------------------------------------------------------*/
3319
  --This function is obsolete.  It was replaced by add_daemon_config. Done for DEVI-046806
3320
   PROCEDURE add_daemon (
3321
      sdaemonhostname   IN   VARCHAR2,
3322
      nrtagid           IN   NUMBER,
3323
      ngbeid            IN   NUMBER,
3324
      sgbebuildfilter   IN   VARCHAR2
3325
   )
3326
   IS
3327
      nrecordnumber   NUMBER;
3328
      nrconid         NUMBER;
3329
   BEGIN
3330
      -- Get RCON_ID
3331
      SELECT seq_rcon_id.NEXTVAL
3332
      INTO nrconid
3333
      FROM DUAL;
3334
 
3335
      SELECT COUNT (*)
3336
      INTO nrecordnumber
3337
      FROM release_config
3338
      WHERE rtag_id = nrtagid;
3339
 
3340
      IF nrecordnumber = 0
3341
      THEN
3342
         INSERT INTO release_config
3343
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3344
                     gbe_id, gbe_buildfilter
3345
                     )
3346
            VALUES (nrconid, nrtagid, sdaemonhostname, 'M',
3347
                     ngbeid, sgbebuildfilter
3348
                     );
3349
      ELSE
3350
         INSERT INTO release_config
3351
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3352
                     gbe_id, gbe_buildfilter
3353
                     )
3354
            VALUES (nrconid, nrtagid, sdaemonhostname, 'S',
3355
                     ngbeid, sgbebuildfilter
3356
                     );
3357
      END IF;
3358
 
3359
      -- A newly configured daemon should initially be paused (DEVI-047277)
3360
      INSERT INTO run_level
3361
                  (rcon_id, pause)
3362
           VALUES (nrconid, 1);
3363
   END;
3364
 
3365
/*-------------------------------------------------------------------------------------------------------*/
3366
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2)
3367
   IS
3368
   BEGIN
3369
      -- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.
3370
      DELETE FROM daemon_action_log
3371
            WHERE rcon_id IN (
3372
                     SELECT *
3373
                     FROM THE
3374
                              (SELECT CAST
3375
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3376
                                          )
3377
                                 FROM DUAL
3378
                              ));
3379
 
3380
      DELETE FROM run_level
3381
            WHERE rcon_id IN (
3382
                     SELECT *
3383
                     FROM THE
3384
                              (SELECT CAST
3385
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3386
                                          )
3387
                                 FROM DUAL
3388
                              ));
3389
 
3390
      DELETE FROM abt_action_log
3391
            WHERE rcon_id IN (
3392
                     SELECT *
3393
                     FROM THE
3394
                              (SELECT CAST
3395
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3396
                                          )
3397
                                 FROM DUAL
3398
                              ));
3399
 
3400
      -- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.
3401
      DELETE FROM release_config
3402
            WHERE rcon_id IN (
3403
                     SELECT *
3404
                     FROM THE
3405
                              (SELECT CAST
3406
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3407
                                          )
3408
                                 FROM DUAL
3409
                              ));
3410
   END;
3411
 
3412
/*-------------------------------------------------------------------------------------------------------*/
3413
  --This function is obsolete.  It was replaced by update_daemon_config for DEVI-046806
3414
   PROCEDURE update_daemon (
3415
      sdaemonhostname   IN   VARCHAR2,
3416
      nrconid           IN   NUMBER,
3417
      ngbeid            IN   NUMBER,
3418
      sgbebuildfilter   IN   VARCHAR2
3419
   )
3420
   IS
3421
   BEGIN
3422
      UPDATE release_config
3423
         SET daemon_hostname = sdaemonhostname,
3424
            gbe_id = ngbeid,
3425
            gbe_buildfilter = sgbebuildfilter
3426
      WHERE rcon_id = nrconid;
3427
   END;
3428
 
3429
/*-------------------------------------------------------------------------------------------------------*/
3430
   PROCEDURE insert_schedule_info (
3431
      dschedulepause     IN   DATE,
3432
      dscheduleresume    IN   DATE,
3433
      crepeat            IN   VARCHAR2,
3434
      cindefinitepause   IN   VARCHAR2
3435
   )
3436
   IS
3437
      nscheduledid   NUMBER;
3438
   BEGIN
3439
      -- Get Next Available Scheduled Id
3440
      SELECT seq_scheduled_id.NEXTVAL
3441
      INTO nscheduledid
3442
      FROM DUAL;
3443
 
3444
      INSERT INTO run_level_schedule
3445
         VALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,
3446
                  cindefinitepause);
3447
   END;
3448
 
3449
/*-------------------------------------------------------------------------------------------------------*/
3450
   PROCEDURE delete_schedule (nscheduleid IN NUMBER)
3451
   IS
3452
   BEGIN
3453
      DELETE FROM run_level_schedule
3454
            WHERE scheduled_id = nscheduleid;
3455
   END;
3456
 
3457
/*-------------------------------------------------------------------------------------------------------*/
3458
   PROCEDURE set_infinite_pause
3459
   IS
3460
      nscheduledid   NUMBER;
3461
   BEGIN
3462
      -- Get Next Available Scheduled Id
3463
      SELECT seq_scheduled_id.NEXTVAL
3464
      INTO nscheduledid
3465
      FROM DUAL;
3466
 
3467
      INSERT INTO run_level_schedule
3468
         VALUES (nscheduledid, NULL, NULL, NULL, 'P');
3469
   END;
3470
 
3471
/*-------------------------------------------------------------------------------------------------------*/
3472
   PROCEDURE set_resume
3473
   IS
3474
   BEGIN
3475
      DELETE FROM run_level_schedule
3476
            WHERE indefinite_pause = 'P';
3477
   END;
3478
 
3479
/*-------------------------------------------------------------------------------------------------------*/
3480
   PROCEDURE delete_out_of_date_schedule
3481
   IS
3482
   BEGIN
3483
      DELETE FROM run_level_schedule
3484
            WHERE scheduled_resume < ora_sysdatetime AND repeat = 0;
3485
   END;
3486
 
3487
/*-------------------------------------------------------------------------------------------------------*/
3488
   PROCEDURE set_daemon_resume (nrconid IN NUMBER)
3489
   IS
3490
   BEGIN
3491
      UPDATE run_level
3492
         SET PAUSE = NULL
3493
      WHERE rcon_id = nrconid;
3494
   END;
3495
 
3496
/*-------------------------------------------------------------------------------------------------------*/
3497
   PROCEDURE set_daemon_pause (nrconid IN NUMBER)
3498
   IS
3499
   BEGIN
3500
      UPDATE run_level
3501
         SET PAUSE = 1
3502
      WHERE rcon_id = nrconid;
3503
   END;
3504
/*-------------------------------------------------------------------------------------------------------*/
3505
   PROCEDURE set_daemon_disable (nrconid NUMBER)
3506
   IS
3507
   BEGIN
3508
      UPDATE run_level
3509
         SET PAUSE = 2
3510
      WHERE rcon_id = nrconid;
3511
   END;
3512
 
3513
/*-------------------------------------------------------------------------------------------------------*/
3514
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)
3515
   IS
3516
   BEGIN
3517
     UPDATE run_level
3518
     SET pause = nstate
3519
     WHERE rcon_id IN
3520
     (SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);
3521
   END;
3522
 
3523
/*-------------------------------------------------------------------------------------------------------*/
3524
   -- inserts a new daemon instruction
3525
   -- This is for use by the Release Manager Website code.
3526
   --
3527
   PROCEDURE insert_daemon_inst
3528
   ( nOp_code IN NUMBER
3529
   , nRtag_id IN NUMBER
3530
   , nPv_id IN NUMBER
3531
   , nSchedDate IN DATE
3532
   , nRepeatSecs IN NUMBER
3533
   , nAddedDate IN DATE
3534
   , nUser_id IN NUMBER
3535
   ) IS
3536
      nInstId   NUMBER;
3537
   BEGIN
3538
      -- Get Next Available Scheduled Id
3539
      SELECT seq_daemon_instruction_id.NEXTVAL
3540
      INTO nInstId
3541
      FROM DUAL;
3542
 
3543
      INSERT INTO Daemon_Instructions
3544
         VALUES (nInstId, nOp_code, nRtag_id,
3545
                  nPv_id, nSchedDate, nRepeatSecs,
3546
                  nAddedDate, nUser_id, '0');
3547
   EXCEPTION
3548
      WHEN DUP_VAL_ON_INDEX
3549
      THEN
3550
         raise_application_error (-20000,
3551
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3552
                                 );
3553
      WHEN OTHERS
3554
      THEN
3555
         raise;
3556
   END insert_daemon_inst;
3557
 
3558
/*-------------------------------------------------------------------------------------------------------*/
3559
   -- Deletes a daemon instruction matching the specified instruction ID
3560
   --
3561
   PROCEDURE del_daemon_inst
3562
   ( nInstId IN NUMBER
3563
   ) IS
3564
 
3565
   BEGIN
3566
      DELETE FROM Daemon_Instructions
3567
      WHERE DAEMON_INSTRUCTIONS_ID = nInstId;
3568
 
3569
   END del_daemon_inst;
3570
 
3571
/*-------------------------------------------------------------------------------------------------------*/
3572
   -- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id
3573
   --
3574
   PROCEDURE del_daemon_inst_by_rtag_pvid(
3575
      nOp_code IN NUMBER,
3576
      nRtag_id IN NUMBER,
3577
      nPv_id IN NUMBER
3578
   ) IS
3579
   BEGIN
3580
      DELETE FROM Daemon_Instructions
3581
      WHERE OP_CODE = nOp_code
3582
      AND RTAG_ID = nRtag_id
3583
      AND PV_ID   = nPv_id;
3584
 
3585
   END del_daemon_inst_by_rtag_pvid;
3586
 
3587
/*-------------------------------------------------------------------------------------------------------*/
3588
   -- Updates a daemon instruction
3589
   -- This is for use by the Release Manager Website code.
3590
   --
3591
   PROCEDURE update_daemon_inst
3592
   ( nInstId IN NUMBER
3593
   , nOp_code IN NUMBER
3594
   , nRtag_id IN NUMBER
3595
   , nPv_id IN NUMBER
3596
   , nSchedDate IN DATE
3597
   , nRepeatSecs IN NUMBER
3598
   , nAddedDate IN DATE
3599
   , nUser_id IN NUMBER
3600
   ) IS
3601
      CURSOR daemon_inst_cur IS
3602
         SELECT *
3603
         FROM daemon_instructions di
3604
         WHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;
3605
 
3606
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3607
 
3608
      exc_inst_removed EXCEPTION;
3609
   BEGIN
3610
      OPEN daemon_inst_cur;
3611
 
3612
      FETCH daemon_inst_cur
3613
      INTO daemon_inst_rec;
3614
 
3615
      IF daemon_inst_cur%FOUND THEN
3616
 
3617
         UPDATE Daemon_Instructions
3618
         SET op_code = nOp_code,
3619
            rtag_id = nRtag_id,
3620
            pv_id   = nPv_id,
3621
            scheduled_datetime = nSchedDate,
3622
            repeat_secs = nRepeatSecs,
3623
            added_datetime = nAddedDate,
3624
            user_id = nUser_id,
3625
            in_progress = '0'
3626
         WHERE daemon_instructions_id = nInstId;
3627
      ELSE
3628
         raise exc_inst_removed;
3629
      END IF;
3630
 
3631
      CLOSE daemon_inst_cur;
3632
   EXCEPTION
3633
      WHEN DUP_VAL_ON_INDEX
3634
      THEN
3635
         raise_application_error (-20000,
3636
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3637
                                 );
3638
      WHEN exc_inst_removed
3639
      THEN
3640
         raise_application_error (-20000,
3641
                                 'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.'
3642
                                 );
3643
      WHEN OTHERS
3644
      THEN
3645
         raise;
3646
   END update_daemon_inst;
3647
 
3648
/*-------------------------------------------------------------------------------------------------------*/
3649
   -- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination
3650
   -- This is for use by the Release Manager Website code.
3651
   --
3652
   FUNCTION daemon_ops_for_rtag_pvid(
3653
      nRtag_id IN NUMBER,
3654
      nPv_id IN NUMBER
3655
   ) RETURN VARCHAR2
3656
   IS
3657
      CURSOR daemon_inst_cur IS
3658
         SELECT di.OP_CODE
3659
         FROM daemon_instructions di
3660
         WHERE di.RTAG_ID = nRtag_id
3661
            AND di.PV_ID = nPv_id;
3662
 
3663
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3664
 
3665
      sRetList VARCHAR2(4000) := '';
3666
 
3667
   BEGIN
3668
      OPEN daemon_inst_cur;
3669
 
3670
      FETCH daemon_inst_cur
3671
      INTO daemon_inst_rec;
3672
 
3673
      WHILE daemon_inst_cur%FOUND
3674
      LOOP
3675
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3676
 
3677
         FETCH daemon_inst_cur
3678
         INTO daemon_inst_rec;
3679
      END LOOP;
3680
 
3681
      CLOSE daemon_inst_cur;
3682
 
3683
      RETURN sRetList;
3684
   END daemon_ops_for_rtag_pvid;
3685
/*-------------------------------------------------------------------------------------------------------*/
3686
   -- Returns a comma-separated list of operation codes found for a given rtag
3687
   -- This is for use by the Release Manager Website code.
3688
   --
3689
   FUNCTION daemon_ops_for_rtag(
3690
      nRtag_id IN NUMBER
3691
   ) RETURN VARCHAR2
3692
   IS
3693
      CURSOR daemon_inst_cur IS
3694
         SELECT di.OP_CODE
3695
         FROM daemon_instructions di
3696
         WHERE di.RTAG_ID = nRtag_id;
3697
 
3698
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3699
 
3700
      sRetList VARCHAR2(4000) := '';
3701
 
3702
   BEGIN
3703
      OPEN daemon_inst_cur;
3704
 
3705
      FETCH daemon_inst_cur
3706
      INTO daemon_inst_rec;
3707
 
3708
      WHILE daemon_inst_cur%FOUND
3709
      LOOP
3710
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3711
 
3712
         FETCH daemon_inst_cur
3713
         INTO daemon_inst_rec;
3714
      END LOOP;
3715
 
3716
      CLOSE daemon_inst_cur;
3717
 
3718
      RETURN sRetList;
3719
   END daemon_ops_for_rtag;
3720
/*-------------------------------------------------------------------------------------------------------*/
3721
   -- Gets a record from the daemon instruction table that can be carried out now and returns the fields
3722
   -- in the record a daemon will need
3723
   -- The Buildtool should use this to find a job to do for a particular release. It should then call
3724
   -- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call
3725
   -- mark_daemon_inst_completed(inst_id) to signal its completion.
3726
   -- Can be called repeatedly to get a full list of all instructions for a release, by passing back in
3727
   -- the instruction ID obtained from the previous call (the 1st call should use 0)
3728
   -- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,
3729
   -- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)
3730
   -- Returns 1 if a record was found, else 0.
3731
   --
3732
   FUNCTION get_daemon_inst(
3733
      nRtag_id IN NUMBER,
3734
      nInst_id IN OUT NUMBER,
3735
      nOp_code IN OUT NUMBER,
3736
      nPv_id OUT NUMBER,
3737
      nUser_id OUT NUMBER,
3738
      nInProgress OUT NUMBER
3739
   ) RETURN NUMBER
3740
   IS
3741
      CURSOR daemon_inst_cur IS
3742
         SELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progress
3743
           FROM daemon_instructions di
3744
          WHERE di.rtag_id = nRtag_id
3745
            AND di.daemon_instructions_id > nInst_id
3746
            AND di.scheduled_datetime <= ora_sysdatetime
3747
            AND ((nOp_code = -1) OR (nOp_code = di.op_code))
3748
            AND rownum <= 1
3749
       ORDER BY di.daemon_instructions_id;
3750
 
3751
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3752
   BEGIN
3753
      OPEN daemon_inst_cur;
3754
 
3755
      FETCH daemon_inst_cur
3756
      INTO daemon_inst_rec;
3757
 
3758
      -- If we found a record, return it.
3759
      IF daemon_inst_cur%FOUND THEN
3760
         nInst_id := daemon_inst_rec.daemon_instructions_id;
3761
         nOp_code := daemon_inst_rec.op_code;
3762
         nPv_id   := daemon_inst_rec.pv_id;
3763
         nUser_id := daemon_inst_rec.user_id;
3764
         IF daemon_inst_rec.in_progress = '1' THEN
3765
            nInProgress := 1;
3766
         ELSE
3767
            nInProgress := 0;
3768
         END IF;
3769
         CLOSE daemon_inst_cur;
3770
         RETURN 1;
3771
      END IF;
3772
 
3773
      CLOSE daemon_inst_cur;
3774
      RETURN 0;
3775
 
3776
   END get_daemon_inst;
3777
/*-------------------------------------------------------------------------------------------------------*/
3778
   -- Marks a daemon instruction as being processed by a daemon
3779
   -- The Buildtool should use this before it embarks on the work the instruction commands
3780
   --
3781
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )
3782
   IS
3783
   BEGIN
3784
      UPDATE Daemon_Instructions
3785
      SET in_progress = '1'
3786
      WHERE daemon_instructions_id = nInstId;
3787
 
3788
   END mark_daemon_inst_in_progress;
3789
 
3790
/*-------------------------------------------------------------------------------------------------------*/
3791
   -- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored
3792
   -- procedure in order to either delete the instruction or update it in the case where it is a repeating
3793
   -- instruction.
3794
   --
3795
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )
3796
   IS
3797
      repSecs NUMBER;
3798
      schedDate  DATE;
3799
 
3800
      CURSOR daemon_inst_cur IS
3801
         SELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDate
3802
         FROM daemon_instructions di
3803
         WHERE di.daemon_instructions_id = nInstId;
3804
 
3805
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3806
   BEGIN
3807
      OPEN daemon_inst_cur;
3808
 
3809
      FETCH daemon_inst_cur
3810
      INTO daemon_inst_rec;
3811
 
3812
      IF daemon_inst_cur%FOUND THEN
3813
 
3814
         -- if instruction repeats daily, add 1 day to the scheduled time and update the record
3815
         IF daemon_inst_rec.repSecs = 86400 THEN
3816
            UPDATE Daemon_Instructions
3817
               SET scheduled_datetime = daemon_inst_rec.schedDate + 1,
3818
                  in_progress = '0'
3819
            WHERE daemon_instructions_id = nInstId;
3820
         ELSE
3821
            -- Delete the daemon instruction, we are done with it
3822
            del_daemon_inst(nInstId);
3823
         END IF;
3824
      END IF;
3825
 
3826
      CLOSE daemon_inst_cur;
3827
 
3828
   EXCEPTION
3829
      WHEN OTHERS
3830
      THEN
3831
         raise;
3832
 
3833
   END mark_daemon_inst_completed;
3834
/*-------------------------------------------------------------------------------------------------------*/
3835
   -- This function deletes any old daemon instruction that appears stranded due to a problem that might
3836
   -- have occured during buildtool operation such as might occur if the buildtool or the machine it was
3837
   -- hosted on came down whilst it was processing a daemon instruction.
3838
   PROCEDURE cleanup_stranded_daemon_insts
3839
   IS
3840
   BEGIN
3841
      -- delete records at least two days old
3842
      DELETE FROM daemon_instructions di
3843
      WHERE  (di.scheduled_datetime + 5) <= ora_sysdatetime;
3844
 
3845
   END cleanup_stranded_daemon_insts;
3846
/*-------------------------------------------------------------------------------------------------------*/
3847
  --This function supersedes function, add_daemon. Done for DEVI-046806
3848
   PROCEDURE add_daemon_config (
3849
      nrtagid           IN   NUMBER,
3850
      nbmcon_id         IN   NUMBER,
3851
      sdaemon_mode      IN   VARCHAR2,
3852
      sgbebuildfilter   IN   VARCHAR2
3853
   )
3854
   IS
3855
      nrecordnumber   NUMBER;
3856
      nrconid         NUMBER;
3857
      sdaemonhostname VARCHAR2(50);
3858
      ngbeid         NUMBER;
3859
   BEGIN
3860
      -- Get RCON_ID
3861
      SELECT seq_rcon_id.NEXTVAL
3862
      INTO nrconid
3863
      FROM DUAL;
3864
 
3865
      SELECT COUNT (*)
3866
      INTO nrecordnumber
3867
      FROM release_config
3868
      WHERE rtag_id = nrtagid;
3869
 
3870
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3871
      FROM build_machine_config
3872
      WHERE bmcon_id = nbmcon_id;
3873
 
3874
      INSERT INTO release_config
3875
             (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3876
                gbe_id, gbe_buildfilter)
3877
      VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,
3878
                ngbeid, sgbebuildfilter);
3879
 
3880
      -- A newly configured daemon should initially be paused (DEVI-047277)
3881
      INSERT INTO run_level
3882
                  (rcon_id, pause)
3883
           VALUES (nrconid, 2);
3884
 
3885
   END;
3886
 
3887
/*-------------------------------------------------------------------------------------------------------*/
3888
  --This function supersedes function, update_daemon. Done for DEVI-046806
3889
   PROCEDURE update_daemon_config (
3890
      nrconid           IN   NUMBER,
3891
      nbmcon_id         IN   NUMBER,
3892
      sdaemon_mode      IN   VARCHAR2,
3893
      sgbebuildfilter   IN   VARCHAR2
3894
   )
3895
   IS
3896
      sdaemonhostname VARCHAR2(50);
3897
      ngbeid         NUMBER;
3898
   BEGIN
3899
 
3900
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3901
      FROM build_machine_config
3902
      WHERE bmcon_id = nbmcon_id;
3903
 
3904
      UPDATE release_config
3905
         SET daemon_hostname = sdaemonhostname,
3906
            gbe_id = ngbeid,
3907
            daemon_mode = sdaemon_mode,
3908
            gbe_buildfilter = sgbebuildfilter
3909
      WHERE rcon_id = nrconid;
3910
   END;
3911
 
3912
 
3913
/*-------------------------------------------------------------------------------------------------------*/
3914
   PROCEDURE add_build_machine (
3915
      sdisplay_name          IN   VARCHAR2,
3916
      smachine_hostname      IN   VARCHAR2,
3917
      ngbeid                 IN   NUMBER,
3918
      sdescription           IN   VARCHAR2
3919
   )
3920
   IS
3921
      nrecordnumber   NUMBER;
3922
      nbmcon_id       NUMBER;
3923
   BEGIN
3924
      -- Get BMCON_ID
3925
      SELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;
3926
 
3927
      INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)
3928
            VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);
3929
 
3930
   EXCEPTION
3931
      WHEN DUP_VAL_ON_INDEX
3932
      THEN
3933
         raise_application_error (-20000,
3934
                                 'Cannot have duplicate machines.'
3935
                                 );
3936
 
3937
   END;
3938
 
3939
/*-------------------------------------------------------------------------------------------------------*/
3940
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)
3941
   IS
3942
   BEGIN
3943
      DELETE FROM build_machine_config
3944
            WHERE bmcon_id IN (
3945
                     SELECT * FROM THE
3946
                              (SELECT CAST
3947
                                          (in_list_number (sbmcon_id_list) AS relmgr_number_tab_t
3948
                                          )
3949
                                 FROM DUAL
3950
                              ));
3951
   END;
3952
 
3953
 
3954
/*-------------------------------------------------------------------------------------------------------*/
3955
   PROCEDURE update_build_machine (
3956
      nbmcon_id              IN   NUMBER,
3957
      sdisplay_name          IN   VARCHAR2,
3958
      smachine_hostname      IN   VARCHAR2,
3959
      ngbeid                 IN   NUMBER,
3960
      sdescription           IN   VARCHAR2
3961
   )
3962
   IS
3963
   BEGIN
3964
      UPDATE build_machine_config
3965
         SET display_name = sdisplay_name,
3966
             machine_hostname = smachine_hostname,
3967
             gbe_id = ngbeid,
3968
             description = sdescription
3969
      WHERE bmcon_id = nbmcon_id;
3970
   EXCEPTION
3971
      WHEN DUP_VAL_ON_INDEX
3972
      THEN
3973
         raise_application_error (-20000,
3974
                                 'Cannot have duplicate machines.'
3975
                                 );
3976
   END;
3977
END pk_buildapi;
1374 dpurdie 3978
/
3979
--------------------------------------------------------
3980
--  DDL for Package Body PK_PACKAGE
3981
--------------------------------------------------------
1373 dpurdie 3982
 
3983
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE" 
3984
IS
3985
   /*-------------------------------------------------------------------------------------------------------*/
3986
   PROCEDURE new_version (
3987
      nlastpvid                   IN       NUMBER,
3988
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
3989
      cbuildtype                  IN       CHAR,
3990
      nsettopvid                  IN       NUMBER DEFAULT NULL,
3991
      nrtagid                     IN       NUMBER,
3992
      nuserid                     IN       NUMBER,
3993
      enumissues_state_imported   IN       NUMBER,
3994
      returnpvid                  OUT      NUMBER
3995
   )
3996
   IS
3997
      origpkg_id                  package_versions.pkg_id%TYPE;
3998
      origdlocked                 package_versions.dlocked%TYPE;
3999
      ssv_mm                      package_versions.v_mm%TYPE;
4000
      ssv_nmm                     package_versions.v_nmm%TYPE;
4001
      ssv_ext                     package_versions.v_ext%TYPE;
4002
      spackageversion             VARCHAR2 (4000);
4003
      nissuestypes                NUMBER;
4004
      nviewid                     NUMBER;
4005
      reccount                    NUMBER;
4006
      isreleased                  package_versions.dlocked%TYPE := 'N';
4007
      slabel                      VARCHAR2 (4000)               := NULL;
4008
 
4009
      CURSOR package_versions_cur
4010
      IS
4011
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
4012
           FROM package_versions pv
4013
          WHERE pv.pkg_version = snewpkgversion
4014
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
4015
                                         FROM package_versions origpv
4016
                                        WHERE origpv.pv_id = nlastpvid);
4017
 
4018
      package_versions_rec package_versions_cur%ROWTYPE;
4019
 
4020
      CURSOR clone_package_versions_cur
4021
      IS
4022
         SELECT DISTINCT pkg_id, dlocked
4023
                    FROM package_versions
4024
                   WHERE pv_id = nlastpvid;
4025
 
4026
      clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
4027
   BEGIN
4028
      spackageversion := snewpkgversion;
4029
 
4030
      IF nsettopvid IS NULL
4031
      THEN
4032
         -- SetToPv_id is not supplied, hence proceed.
4033
 
4034
         /* ---------------------------------------------------- */
4035
         /* Find id package_version exists                       */
4036
         /* ---------------------------------------------------- */
4037
         OPEN package_versions_cur;
4038
 
4039
         FETCH package_versions_cur
4040
          INTO package_versions_rec;
4041
 
4042
         IF package_versions_cur%NOTFOUND
4043
         THEN
4044
            ---  Create brand new package ---
4045
            SELECT seq_pv_id.NEXTVAL
4046
              INTO returnpvid
4047
              FROM DUAL;
4048
 
4049
            -- Split Version to get extention + other
4050
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
4051
 
4052
            -- Get previous package to clone from
4053
            OPEN clone_package_versions_cur;
4054
 
4055
            FETCH clone_package_versions_cur
4056
             INTO clone_package_versions_rec;
4057
 
4058
            origpkg_id := clone_package_versions_rec.pkg_id;
4059
            origdlocked := clone_package_versions_rec.dlocked;
4060
 
4061
            CLOSE clone_package_versions_cur;
4062
 
4063
            -- Automated built config
4064
            IF (cbuildtype = 'A')
4065
            THEN
4066
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
4067
               -- Make sure that version is still unique
4068
            END IF;
4069
 
4070
            -- Clone Package Version Details --
4071
            INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,
4072
                                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
4073
                                         v_ext, src_path, pv_description, pv_overview,
4074
                                         last_pv_id, owner_id, is_deployable,
4075
                                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
4076
                 SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
4077
                        spackageversion AS pkg_version, 'N' AS dlocked,
4078
                        ora_sysdate AS created_stamp, nuserid AS creator_id,
4079
                        ora_sysdatetime AS modified_stamp,
4080
                        nuserid AS modifier_id, ssv_mm AS v_mm,
4081
                        ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
4082
                        pv.pv_description, pv.pv_overview,
4083
                        nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
4084
                        pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
4085
                   FROM package_versions pv
4086
                  WHERE pv.pv_id = nlastpvid;
4087
 
4088
            -- Set Issues Type for cloning ---
4089
            IF origdlocked = 'Y'
4090
            THEN
4091
               nissuestypes := enumissues_state_imported;
4092
            ELSE
4093
               nissuestypes := NULL;
4094
            END IF;
4095
 
4096
            -- Update Label for automated built
4097
            IF (cbuildtype = 'A')
4098
            THEN
4099
               slabel := get_automated_label (returnpvid);
4100
 
4101
               UPDATE package_versions pv
4102
                  SET pv.pkg_label = slabel
4103
                WHERE pv.pv_id = returnpvid;
4104
            END IF;
4105
 
4106
            basic_clone (nlastpvid,
4107
                         returnpvid,
4108
                         nrtagid,
4109
                         nuserid,
4110
                         origpkg_id,
4111
                         nissuestypes
4112
                        );
4113
         ELSE
4114
            --- Package already exists, hence reuse ---
4115
            returnpvid := package_versions_rec.pv_id;
4116
            isreleased := package_versions_rec.dlocked;
4117
         END IF;
4118
 
4119
         CLOSE package_versions_cur;
4120
      ELSE
4121
         returnpvid := nsettopvid;
4122
      END IF;
4123
   END new_version;
4124
 
4125
/*-------------------------------------------------------------------------------------------------------*/
4126
   PROCEDURE change_state (
4127
      pvid       IN   NUMBER,
4128
      newstate   IN   package_versions.dlocked%TYPE,
4129
      userid     IN   NUMBER
4130
   )
4131
   IS
4132
   BEGIN
4133
      -- Set package in Released mode
4134
      UPDATE package_versions pv
4135
         SET pv.dlocked = newstate,
4136
             pv.modified_stamp = ora_sysdatetime,
4137
             pv.modifier_id = userid
4138
       WHERE pv.pv_id = pvid;
4139
 
4140
      -- Log action --
4141
      IF newstate = 'Y'
4142
      THEN
4143
         -- RELEASED --
4144
         log_action (pvid,
4145
                     'makeofficial',
4146
                     userid,
4147
                     'Package state change to: Released'
4148
                    );
4149
      ELSIF newstate = 'N'
4150
      THEN
4151
         -- UNLOCKED --
4152
         log_action (pvid,
4153
                     'makeunofficial',
4154
                     userid,
4155
                     'Package state change to: Ulocked'
4156
                    );
4157
      ELSIF newstate = 'P'
4158
      THEN
4159
         -- PENDING APPROVAL --
4160
         log_action (pvid,
4161
                     'add_to_planned',
4162
                     userid,
4163
                     'Package state change to: Pending Approval'
4164
                    );
4165
      ELSIF newstate = 'R'
4166
      THEN
4167
         -- REJECTED --
4168
         log_action (pvid,
4169
                     'reject_package',
4170
                     userid,
4171
                     'Package state change to: Rejected'
4172
                    );
4173
      ELSIF newstate = 'A'
4174
      THEN
4175
         -- APPROVED --
4176
         log_action (pvid,
4177
                     'approve_package',
4178
                     userid,
4179
                     'Package state change to: Approved'
4180
                    );
4181
      END IF;
4182
   END;
4183
 
4184
/*-------------------------------------------------------------------------------------------------------*/
4185
   PROCEDURE destroy_package (
4186
      pvid               IN       NUMBER,
4187
      overridewarnings   IN       CHAR DEFAULT 'N',
4188
      problemstring      OUT      VARCHAR2
4189
   )
4190
   IS
4191
      LOCKED     CHAR;
4192
      pkgid      NUMBER;
4193
      ROWCOUNT   NUMBER;
4194
   BEGIN
4195
      /*
4196
      || This will destroy all package details from database.
4197
      || It will only be used to remove unwanted work in progress packages,
4198
      || or mestaken versions
4199
      */
4200
 
4201
      /*--------------- Business Rules Here -------------------*/
4202
      problemstring := NULL;
4203
 
4204
      IF overridewarnings = 'N'
4205
      THEN
4206
         -- Package must not be official
4207
         SELECT pv.dlocked
4208
           INTO LOCKED
4209
           FROM package_versions pv
4210
          WHERE pv.pv_id = pvid;
4211
 
4212
         IF LOCKED = 'Y'
4213
         THEN
4214
            problemstring :=
4215
                  problemstring
4216
               || '- Package is locked and released.'
4217
               || UTL_TCP.crlf;
4218
         END IF;
4219
 
4220
         -- Cannot remove if used in BOMs
4221
         SELECT COUNT (osc.prod_id)
4222
           INTO ROWCOUNT
4223
           FROM deployment_manager.os_contents osc
4224
          WHERE osc.prod_id = pvid;
4225
 
4226
         IF ROWCOUNT > 0
4227
         THEN
4228
            problemstring :=
4229
                  problemstring
4230
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
4231
               || UTL_TCP.crlf;
4232
         END IF;
4233
 
4234
         -- Cannot remove if Referenced as build dependency
4235
         SELECT COUNT (dep.pv_id)
4236
           INTO ROWCOUNT
4237
           FROM package_dependencies dep
4238
          WHERE dep.dpv_id = pvid;
4239
 
4240
         IF ROWCOUNT > 0
4241
         THEN
4242
            problemstring :=
4243
                  problemstring
4244
               || '- Package is referenced by other package as build dependency.'
4245
               || UTL_TCP.crlf;
4246
         END IF;
4247
 
4248
         -- Cannot remove if Referenced as runtime dependency
4249
         SELECT COUNT (rd.pv_id)
4250
           INTO ROWCOUNT
4251
           FROM runtime_dependencies rd
4252
          WHERE rd.rtd_id = pvid;
4253
 
4254
         IF ROWCOUNT > 0
4255
         THEN
4256
            problemstring :=
4257
                  problemstring
4258
               || '- Package is referenced by other package as runtime dependency.'
4259
               || UTL_TCP.crlf;
4260
         END IF;
4261
 
4262
         -- Cannot remove if Referenced as patch
4263
         SELECT COUNT (pp.pv_id)
4264
           INTO ROWCOUNT
4265
           FROM package_patches pp
4266
          WHERE pp.patch_id = pvid;
4267
 
4268
         IF ROWCOUNT > 0
4269
         THEN
4270
            problemstring :=
4271
                  problemstring
4272
               || '- Package is used as patch by other package.'
4273
               || UTL_TCP.crlf;
4274
         END IF;
4275
      END IF;
4276
 
4277
/*-------------------------------------------------------*/
4278
      IF (problemstring IS NULL)
4279
      THEN
4280
         --- Remove From Work in Progress
4281
         DELETE FROM work_in_progress wip
4282
               WHERE wip.pv_id = pvid;
4283
 
4284
         --- Remove From Pending
4285
         DELETE FROM planned pl
4286
               WHERE pl.pv_id = pvid;
4287
 
4288
         --- Remove From Released area
4289
         DELETE FROM release_content rc
4290
               WHERE rc.pv_id = pvid;
4291
 
4292
         ---Remove From Package Processes
4293
         DELETE FROM package_processes pp
4294
               WHERE pp.pv_id = pvid;
4295
 
4296
         --- Remove Dependencies
4297
         DELETE FROM package_dependencies dep
4298
               WHERE dep.pv_id = pvid;
4299
 
4300
         DELETE FROM package_dependencies dep
4301
               WHERE dep.dpv_id = pvid;
4302
 
4303
         --- Remove Runtime dependencies
4304
         DELETE FROM runtime_dependencies rtd
4305
               WHERE rtd.pv_id = pvid;
4306
 
4307
         DELETE FROM runtime_dependencies rtd
4308
               WHERE rtd.rtd_id = pvid;
4309
 
4310
         --- Remove components
4311
         DELETE FROM product_components pc
4312
               WHERE pc.pv_id = pvid;
4313
 
4314
         DELETE FROM release_components rc
4315
               WHERE rc.pv_id = pvid;
4316
 
4317
         --- Remove From Notification History
4318
         DELETE FROM notification_history nh
4319
               WHERE nh.pv_id = pvid;
4320
 
4321
         --- Remove From Ignore Warnings
4322
         DELETE FROM ignore_warnings iw
4323
               WHERE iw.pv_id = pvid;
4324
 
4325
         --- Remove From Additional Notes
4326
         DELETE FROM additional_notes an
4327
               WHERE an.pv_id = pvid;
4328
 
4329
         --- Remove From CQ Issues
4330
         DELETE FROM cq_issues cq
4331
               WHERE cq.pv_id = pvid;
4332
 
4333
         --- Remove from Package Patches
4334
         DELETE FROM package_patches pp
4335
               WHERE pp.pv_id = pvid;
4336
 
4337
         DELETE FROM package_patches pp
4338
               WHERE pp.patch_id = pvid;
4339
 
4340
         --- Remove From Package Documents
4341
         DELETE FROM package_documents pd
4342
               WHERE pd.pv_id = pvid;
4343
 
4344
         --- Remove from Code Review
4345
         DELETE FROM code_reviews cr
4346
               WHERE cr.pv_id = pvid;
4347
 
4348
         --- Remove from Code Review URL
4349
         DELETE FROM code_review_url cru
4350
               WHERE cru.pv_id = pvid;
4351
 
4352
         --- Remove from Unit Tests
4353
         DELETE FROM unit_tests ut
4354
               WHERE ut.pv_id = pvid;
4355
 
4356
         --- Remove from Package BuildEnv
4357
         DELETE FROM package_build_env pbe
4358
               WHERE pbe.pv_id = pvid;
4359
 
4360
         --- Remove from Package Build Info
4361
         DELETE FROM package_build_info pbi
4362
               WHERE pbi.pv_id = pvid;
4363
 
4364
         --- Remove from Build Order
4365
         DELETE FROM build_order bo
4366
               WHERE bo.pv_id = pvid;
4367
 
4368
         --- Remove from Licencing
4369
         PK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );
4370
 
4371
         --- Remove from Note Manager
4372
         DELETE FROM note_manager nm
4373
               WHERE nm.nid = pvid;
4374
 
4375
         --- Remove from Action log
4376
         DELETE FROM action_log al
4377
               WHERE al.pv_id = pvid;
4378
 
4379
         --- Remove from Do Not Ripple
4380
         DELETE FROM DO_NOT_RIPPLE dnr
4381
               WHERE dnr.PV_ID = pvid;
4382
 
4383
         --- Remove from Advisory Ripple
4384
         DELETE FROM ADVISORY_RIPPLE ar
4385
               WHERE ar.PV_ID = pvid;
4386
 
4387
         --- Remove from Jira Issues
4388
         DELETE FROM JIRA_ISSUES jira
4389
               WHERE jira.PV_ID = pvid;
4390
 
4391
         --- Remove from Package Metrics
4392
         DELETE FROM package_metrics pm
4393
              WHERE pm.pv_id = pvid;
4394
 
4395
         -- Delete from Pegged Versions
4396
         DELETE FROM pegged_versions pegv
4397
              WHERE pegv.pv_id = pvid;
4398
 
4399
         --- Finally Remove From Package Versions
4400
         --- Get Package name
4401
         SELECT pv.pkg_id
4402
           INTO pkgid
4403
           FROM package_versions pv
4404
          WHERE pv.pv_id = pvid;
4405
 
4406
         DELETE FROM package_versions pv
4407
               WHERE pv.pv_id = pvid;
4408
 
4409
         --- Remove package name if not used any more
4410
         SELECT COUNT (pv.pv_id)
4411
           INTO ROWCOUNT
4412
           FROM package_versions pv
4413
          WHERE pv.pkg_id = pkgid;
4414
 
4415
         IF ROWCOUNT < 1
4416
         THEN
4417
            DELETE FROM PACKAGES pkg
4418
                  WHERE pkg.pkg_id = pkgid;
4419
         END IF;
4420
      END IF;
4421
   END;
4422
 
4423
/*-------------------------------------------------------------------------------------------------------*/
4424
   PROCEDURE new_patch (
4425
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
4426
      nparentpvid        IN       NUMBER,
4427
      spatchidlist       IN       VARCHAR2,
4428
      nuserid            IN       NUMBER,
4429
      returnpatchid      OUT      NUMBER
4430
   )
4431
   IS
4432
      patchpv_id           NUMBER;
4433
      parpkg_id            NUMBER;
4434
      lastinstallorder     NUMBER;
4435
      ispatchdlocked       package_versions.dlocked%TYPE;
4436
      ssv_mm               package_versions.v_mm%TYPE;
4437
      ssv_nmm              package_versions.v_nmm%TYPE;
4438
      ssv_ext              package_versions.v_ext%TYPE;
4439
      opatchdepcollector   relmgr_number_tab_t  := relmgr_number_tab_t ();
4440
 
4441
      CURSOR parent_cur
4442
      IS
4443
         SELECT pv.*, pkg.pkg_name
4444
           FROM package_versions pv, PACKAGES pkg
4445
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
4446
 
4447
      parent_rec parent_cur%ROWTYPE;
4448
 
4449
      CURSOR patch_cur
4450
      IS
4451
         SELECT pv.*, pg.pkg_name
4452
           FROM package_versions pv, PACKAGES pg
4453
          WHERE pv.pkg_id = parpkg_id
4454
            AND pv.pkg_version = snewpatchversion
4455
            AND pv.pkg_id = pg.pkg_id;
4456
 
4457
      patch_rec  patch_cur%ROWTYPE;
4458
 
4459
      CURSOR releases_cur
4460
      IS
4461
         SELECT rc.pv_id
4462
           FROM release_content rc
4463
          WHERE rc.pv_id = patch_rec.pv_id;
4464
 
4465
      releases_rec releases_cur%ROWTYPE;
4466
   BEGIN
4467
      -- Get Last Install Order
4468
      SELECT COUNT (*)
4469
        INTO lastinstallorder
4470
        FROM package_patches pp
4471
       WHERE pp.pv_id = nparentpvid;
4472
 
4473
      -- Get parent details
4474
      OPEN parent_cur;
4475
 
4476
      FETCH parent_cur
4477
       INTO parent_rec;
4478
 
4479
      parpkg_id := parent_rec.pkg_id;
4480
 
4481
      -- Find if patch exists in database
4482
      OPEN patch_cur;
4483
 
4484
      FETCH patch_cur
4485
       INTO patch_rec;
4486
 
4487
      -- Parent must be official
4488
      IF parent_rec.dlocked = 'Y'
4489
      THEN
4490
         IF patch_cur%NOTFOUND
4491
         THEN
4492
            ispatchdlocked := 'N';
4493
 
4494
            -- Create new patch version --
4495
            SELECT seq_pv_id.NEXTVAL
4496
              INTO patchpv_id
4497
              FROM DUAL;
4498
 
4499
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
4500
 
4501
            INSERT INTO package_versions
4502
                        (pv_id, pkg_id, pkg_version,
4503
                         dlocked, created_stamp, creator_id,
4504
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
4505
                         src_path,
4506
                         pv_description,
4507
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
4508
                         is_autobuildable, ripple_field
4509
                        )
4510
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
4511
                         ispatchdlocked, ora_sysdate, nuserid,
4512
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
4513
                         parent_rec.src_path,
4514
                            'This is a patch to '
4515
                         || parent_rec.pkg_name
4516
                         || ' '
4517
                         || parent_rec.pkg_version,
4518
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
4519
                        );
4520
 
4521
            INSERT INTO package_patches
4522
                        (pv_id, patch_id, install_order)
4523
                (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4524
                        lastinstallorder + 1 AS install_order
4525
                   FROM package_versions pv
4526
                  WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4527
 
4528
            /* LOG ACTION */
4529
            log_action (patchpv_id,
4530
                        'new_version',
4531
                        nuserid,
4532
                        'Patch version created: ' || snewpatchversion
4533
                       );
4534
            log_action (nparentpvid,
4535
                        'patch_add',
4536
                        nuserid,
4537
                        'New patch created and attached: ' || snewpatchversion
4538
                       );
4539
         ELSE
4540
            patchpv_id := patch_rec.pv_id;
4541
            ispatchdlocked := patch_rec.dlocked;
4542
 
4543
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
4544
            OPEN releases_cur;
4545
 
4546
            FETCH releases_cur
4547
             INTO releases_rec;
4548
 
4549
            IF releases_cur%NOTFOUND
4550
            THEN
4551
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
4552
               UPDATE package_versions
4553
                  SET is_patch = 'Y'
4554
                WHERE pv_id = patchpv_id;
4555
 
4556
               INSERT INTO package_patches
4557
                           (pv_id, patch_id, install_order)
4558
                   (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4559
                           lastinstallorder + 1 AS install_order
4560
                      FROM package_versions pv
4561
                     WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4562
            END IF;
4563
 
4564
            CLOSE releases_cur;
4565
 
4566
            /* LOG ACTION */
4567
            log_action (nparentpvid,
4568
                        'patch_add',
4569
                        nuserid,
4570
                           'Patch version was found and attached: '
4571
                        || snewpatchversion
4572
                       );
4573
         END IF;
4574
      END IF;
4575
 
4576
      /* Create Patch Dependencies */
4577
      opatchdepcollector := in_list_number (spatchidlist);
4578
 
4579
      -- Make sure patch is unofficial before altering its dependencies
4580
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
4581
      THEN
4582
         -- Delete Existing Dependencies
4583
         DELETE FROM package_dependencies dep
4584
               WHERE dep.pv_id = patchpv_id;
4585
 
4586
         -- Insert new dependencies
4587
         INSERT INTO package_dependencies
4588
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
4589
              SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
4590
                     parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
4591
                     'L' AS build_type
4592
                FROM package_versions pv
4593
               WHERE pv.pv_id IN (
4594
                      SELECT *
4595
                        FROM TABLE
4596
                                (CAST
4597
                                    (opatchdepcollector AS relmgr_number_tab_t)
4598
                                ));
4599
      END IF;
4600
 
4601
      -- Return patch_id
4602
      returnpatchid := patchpv_id;
4603
 
4604
      CLOSE parent_cur;
4605
 
4606
      CLOSE patch_cur;
4607
   EXCEPTION
4608
      WHEN DUP_VAL_ON_INDEX
4609
      THEN
4610
         raise_application_error (-20000,
4611
                                     'Patch version '
4612
                                  || snewpatchversion
4613
                                  || ' already exist.'
4614
                                 );
4615
   END;
4616
 
4617
/*-------------------------------------------------------------------------------------------------------*/
4618
   PROCEDURE obsolete_patch (
4619
      patchid            IN   NUMBER,
4620
      isobsolete         IN   CHAR,
4621
      obsoletecomments   IN   VARCHAR2,
4622
      userid             IN   NUMBER
4623
   )
4624
   IS
4625
   BEGIN
4626
      -- Update patch
4627
      UPDATE package_versions pv
4628
         SET pv.is_obsolete = isobsolete,
4629
             pv.obsolete_comments = obsoletecomments
4630
       WHERE pv.pv_id = patchid;
4631
 
4632
      /*
4633
      -- Update patch children
4634
      UPDATE PACKAGE_VERSIONS pv SET
4635
      pv.IS_OBSOLETE = IsObsolete,
4636
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4637
      WHERE pv.PV_ID IN (
4638
                     SELECT DISTINCT dep.DPV_ID
4639
                       FROM PACKAGE_DEPENDENCIES dep
4640
                      WHERE dep.PV_ID = PatchId
4641
                     );
4642
 
4643
 
4644
      -- Update patch parent
4645
      UPDATE PACKAGE_VERSIONS pv SET
4646
      pv.IS_OBSOLETE = IsObsolete,
4647
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4648
      WHERE pv.PV_ID IN (
4649
                     SELECT DISTINCT dep.PV_ID
4650
                       FROM PACKAGE_DEPENDENCIES dep
4651
                      WHERE dep.DPV_ID = PatchId
4652
                     );
4653
 
4654
      */
4655
 
4656
      /* LOG ACTION */
4657
      IF isobsolete IS NOT NULL
4658
      THEN
4659
         log_action (patchid,
4660
                     'patch_obsolete',
4661
                     userid,
4662
                     'Obsolete patch. ' || obsoletecomments
4663
                    );
4664
      ELSE
4665
         log_action (patchid,
4666
                     'patch_obsolete',
4667
                     userid,
4668
                     'Undo patch obsolete.'
4669
                    );
4670
      END IF;
4671
   END;
4672
 
4673
/*-------------------------------------------------------------------------------------------------------*/
4674
   PROCEDURE obsolete_patches (
4675
      spatchidlist       IN   VARCHAR2,
4676
      isobsolete         IN   CHAR,
4677
      obsoletecomments   IN   VARCHAR2,
4678
      userid             IN   NUMBER
4679
   )
4680
   IS
4681
   BEGIN
4682
      /*--------------- Business Rules Here -------------------*/
4683
      IF spatchidlist IS NULL
4684
      THEN
4685
         raise_application_error (-20000,
4686
                                  'Please select one or more Patches.'
4687
                                 );
4688
      END IF;
4689
 
4690
/*-------------------------------------------------------*/
4691
 
4692
      -- Update patch
4693
      UPDATE package_versions pv
4694
         SET pv.is_obsolete = isobsolete,
4695
             pv.obsolete_comments = obsoletecomments
4696
       WHERE pv.pv_id IN (
4697
                SELECT *
4698
                  FROM THE
4699
                          (SELECT CAST
4700
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
4701
                                     )
4702
                             FROM DUAL
4703
                          ));
4704
      /*
4705
      -- Update patch children
4706
      UPDATE PACKAGE_VERSIONS pv SET
4707
      pv.IS_OBSOLETE = IsObsolete,
4708
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4709
      WHERE pv.PV_ID IN (
4710
                     SELECT DISTINCT dep.DPV_ID
4711
                       FROM PACKAGE_DEPENDENCIES dep
4712
                      WHERE dep.PV_ID = PatchId
4713
                     );
4714
 
4715
 
4716
      -- Update patch parent
4717
      UPDATE PACKAGE_VERSIONS pv SET
4718
      pv.IS_OBSOLETE = IsObsolete,
4719
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4720
      WHERE pv.PV_ID IN (
4721
                     SELECT DISTINCT dep.PV_ID
4722
                       FROM PACKAGE_DEPENDENCIES dep
4723
                      WHERE dep.DPV_ID = PatchId
4724
                     );
4725
 
4726
      */
4727
 
4728
      /* LOG ACTION
4729
      IF IsObsolete IS NOT NULL THEN
4730
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4731
                     'Obsolete patch. '|| ObsoleteComments );
4732
      ELSE
4733
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4734
                     'Undo patch obsolete.' );
4735
      END IF;  */
4736
   END;
4737
 
4738
/*-------------------------------------------------------------------------------------------------------*/
4739
   PROCEDURE add_process (
4740
      nprocid         IN   processes.proc_id%TYPE,
4741
      shealthtag      IN   processes.proc_name%TYPE,
4742
      sprocdesc       IN   processes.proc_description%TYPE,
4743
      scmdinterface   IN   processes.run_as%TYPE,
4744
      spkgowner       IN   processes.pkg_owner%TYPE,
4745
      sisinterface    IN   processes.is_interface%TYPE,
4746
      npvid           IN   package_processes.pv_id%TYPE,
4747
      nuserid         IN   NUMBER
4748
   )
4749
   IS
4750
      pkgname   VARCHAR2 (100);
4751
 
4752
   BEGIN
4753
      INSERT INTO processes
4754
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
4755
                   is_interface
4756
                  )
4757
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
4758
                   sisinterface
4759
                  );
4760
 
4761
      pk_package.add_package_process (nprocid, npvid, nuserid);
4762
   END;
4763
 
4764
/*-------------------------------------------------------------------------------------------------------*/
4765
   PROCEDURE add_package_process (
4766
      nprocidlist   IN   VARCHAR2,
4767
      npvid         IN   package_processes.pv_id%TYPE,
4768
      nuserid       IN   NUMBER
4769
   )
4770
   IS
4771
      processname   VARCHAR2 (4000);
4772
 
4773
      CURSOR proc_cur
4774
      IS
4775
         SELECT prc.proc_id
4776
           FROM processes prc
4777
          WHERE prc.proc_id IN (
4778
                   SELECT *
4779
                     FROM THE
4780
                             (SELECT CAST
4781
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
4782
                                        )
4783
                                FROM DUAL
4784
                             ));
4785
 
4786
      proc_rec  proc_cur%ROWTYPE;
4787
   BEGIN
4788
      OPEN proc_cur;
4789
 
4790
      FETCH proc_cur
4791
       INTO proc_rec;
4792
 
4793
      WHILE proc_cur%FOUND
4794
      LOOP
4795
         INSERT INTO package_processes (proc_id, pv_id)
4796
              VALUES (proc_rec.proc_id, npvid);
4797
 
4798
         SELECT prc.proc_name
4799
           INTO processname
4800
           FROM processes prc
4801
          WHERE prc.proc_id = proc_rec.proc_id;
4802
 
4803
         -- Log Action --
4804
         log_action (npvid,
4805
                     'process_add',
4806
                     nuserid,
4807
                     'Added process with health tag ' || processname
4808
                    );
4809
 
4810
         FETCH proc_cur
4811
          INTO proc_rec;
4812
      END LOOP;
4813
 
4814
      CLOSE proc_cur;
4815
   END;
4816
 
4817
/*-------------------------------------------------------------------------------------------------------*/
4818
   PROCEDURE remove_process (
4819
      nprocid   IN   package_processes.proc_id%TYPE,
4820
      npvid     IN   package_processes.pv_id%TYPE,
4821
      nuserid   IN   NUMBER
4822
   )
4823
   IS
4824
      processname   VARCHAR2 (4000);
4825
   BEGIN
4826
      SELECT prc.proc_name
4827
        INTO processname
4828
        FROM processes prc
4829
       WHERE prc.proc_id = nprocid;
4830
 
4831
      DELETE FROM package_processes
4832
            WHERE proc_id = nprocid AND pv_id = npvid;
4833
 
4834
      -- Log Action --
4835
      log_action (npvid,
4836
                  'process_remove',
4837
                  nuserid,
4838
                  'Removed process with health tag ' || processname
4839
                 );
4840
   END;
4841
/*-------------------------------------------------------------------------------------------------------*/
4842
   /*
4843
   ** Author: Rupesh Solanki
4844
   ** Purpose: To move package versions from one release to another
4845
   ** Release: 4th September 2006
4846
   */
4847
   PROCEDURE move_package (
4848
      npvid        IN package_versions.pv_id%TYPE,
4849
      nrtagid      IN release_tags.rtag_id%TYPE,
4850
      nnewrtagid   IN release_tags.rtag_id%TYPE,
4851
      nuserid      IN NUMBER
4852
   )
4853
   IS
4854
 
4855
      oldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);
4856
 
4857
   BEGIN
4858
      SELECT rtag_name into oldrtag_name
4859
      FROM RELEASE_TAGS
4860
      WHERE rtag_id = nrtagid;
4861
 
4862
      SELECT rtag_name into newrtag_name
4863
      FROM RELEASE_TAGS
4864
      WHERE rtag_id = nnewrtagid;
4865
 
4866
      /* Table Work In Progress*/
4867
      UPDATE WORK_IN_PROGRESS
4868
      SET RTAG_ID = nnewrtagid
4869
      WHERE RTAG_ID = nrtagid
4870
      AND PV_ID = npvid;
4871
 
4872
      /* Table PLANNED*/
4873
      UPDATE PLANNED
4874
      SET RTAG_ID = nnewrtagid
4875
      WHERE RTAG_ID = nrtagid
4876
      AND PV_ID = npvid;
4877
 
4878
      /* Table PEGGED_VERSIONS */
4879
      DELETE FROM PEGGED_VERSIONS pegv
4880
      WHERE pegv.RTAG_ID = nrtagid
4881
      AND pegv.PV_ID = npvid;
4882
 
4883
      /* Table ADVISORY_RIPPLE*/
4884
      DELETE FROM ADVISORY_RIPPLE
4885
      WHERE RTAG_ID = nrtagid
4886
      AND PV_ID = npvid;
4887
 
4888
 
4889
      -- Log Action --
4890
      log_action (npvid,
4891
                  'move_package_version',
4892
                  nuserid,
4893
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
4894
                 );
4895
   END;
4896
 
4897
/*-------------------------------------------------------------------------------------------------------*/
4898
   /*
4899
   ** Author: Rupesh Solanki
4900
   ** Purpose: To modify the product state from integration to test to deployment
4901
   ** Release: 25th January 2006
4902
   */
4903
   PROCEDURE modify_product_state (
4904
      npvid    IN package_versions.pv_id%TYPE,
4905
      nrtagid  IN release_tags.rtag_id%TYPE,
4906
      nstateid IN product_states.state_id%TYPE,
4907
      nuserid  IN NUMBER
4908
   ) IS
4909
 
4910
      sStateName VARCHAR2(4000);
4911
      sRtagName VARCHAR2(4000);
4912
 
4913
   BEGIN
4914
 
4915
      UPDATE RELEASE_CONTENT
4916
      SET PRODUCT_STATE = nstateid
4917
      WHERE PV_ID = npvid
4918
      AND RTAG_ID = nrtagid;
4919
 
4920
 
4921
      SELECT STATE INTO sStateName
4922
      FROM PRODUCT_STATES
4923
      WHERE STATE_ID = nstateid;
4924
 
4925
      SELECT RTAG_NAME into sRtagName
4926
      FROM RELEASE_TAGS
4927
      WHERE RTAG_ID = nrtagid;
4928
 
4929
 
4930
      -- Log Action --
4931
      log_action (npvid,
4932
                  'modify_product_state',
4933
                     nuserid,
4934
                     sStateName || ' in '|| sRtagName
4935
                  );
4936
   END;
4937
/*-------------------------------------------------------------------------------------------------------*/
4938
   /*
4939
   ** Author: Jeremy Tweddle
4940
   ** Date: 24/Aug/2007
4941
   */
4942
   PROCEDURE add_code_review_url (
4943
      npvid           IN    NUMBER,
4944
      nprojid         IN    NUMBER,
4945
      surl            IN    VARCHAR2,
4946
      sreason         IN    VARCHAR2,
4947
      ddateofreview   IN    DATE
4948
   ) IS
4949
 
4950
      ncrid NUMBER;
4951
 
4952
   BEGIN
4953
 
4954
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
4955
 
4956
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
4957
                                    last_modified )
4958
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
4959
 
4960
   END;
4961
/*-------------------------------------------------------------------------------------------------------*/
4962
   /*
4963
   ** Author: Jeremy Tweddle
4964
   ** Date: 22/Aug/2007
4965
   */
4966
   PROCEDURE update_code_review_url (
4967
      ncrid           IN    NUMBER,
4968
      nprojid         IN    NUMBER,
4969
      surl            IN    VARCHAR2,
4970
      sreason         IN    VARCHAR2
4971
   ) IS
4972
 
4973
   BEGIN
4974
 
4975
      UPDATE code_review_url
4976
      SET url = surl,
4977
          proj_id = nprojid,
4978
          reason = sreason,
4979
          last_modified = ora_sysdate
4980
      WHERE cr_id = ncrid;
4981
 
4982
   END;
4983
/*-------------------------------------------------------------------------------------------------------*/
4984
   /*
4985
   ** Author: Jeremy Tweddle
4986
   ** Date: 22/Aug/2007
4987
   */
4988
   PROCEDURE remove_code_review_url (
4989
      ncrid  IN    NUMBER
4990
   ) IS
4991
 
4992
   BEGIN
4993
      DELETE FROM code_review_url
4994
      WHERE cr_id = ncrid;
4995
   END;
4996
/*-------------------------------------------------------------------------------------------------------*/
4997
END pk_package;
1374 dpurdie 4998
/
4999
--------------------------------------------------------
5000
--  DDL for Package Body PK_RMAPI_TEST
5001
--------------------------------------------------------
1373 dpurdie 5002
 
5003
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI_TEST" 
5004
IS
5005
 
5006
   /*-------------------------------------------------------------------------------------------------------*/
5007
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
5008
      RETURN typecur
5009
   IS
5010
      npvid     NUMBER  := 0;
5011
      RECORDS   typecur;
5012
   BEGIN
5013
      BEGIN
5014
         -- Get PV_ID --
5015
         SELECT pv.pv_id
5016
           INTO npvid
5017
           FROM PACKAGES pkg, package_versions pv
5018
          WHERE pv.pkg_id = pkg.pkg_id
5019
            AND pkg.pkg_name = pkgname
5020
            AND pv.pkg_version = pkgversion;
5021
      EXCEPTION
5022
         WHEN NO_DATA_FOUND
5023
         THEN
5024
            raise_application_error (-20000, 'Package Not Found!');
5025
            --WHEN OTHERS THEN
5026
                  -- Consider logging the error and then re-raise
5027
            RAISE;
5028
      END;
5029
 
5030
      -- Finally get package dependencies --
5031
      OPEN RECORDS FOR
5032
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
5033
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
5034
          WHERE dep.pv_id = npvid
5035
            AND dpv.pkg_id = dpkg.pkg_id
5036
            AND dpv.pv_id = dep.dpv_id;
5037
 
5038
      RETURN RECORDS;
5039
   END;
5040
 
5041
/*-------------------------------------------------------------------------------------------------------*/
5042
   FUNCTION wip_iteration_package (
5043
      projname        VARCHAR2,
5044
      iterationname   VARCHAR2,
5045
      pkgname         VARCHAR2
5046
   )
5047
      RETURN typecur
5048
   IS
5049
      nrtagid   NUMBER  := 0;
5050
      RECORDS   typecur;
5051
   BEGIN
5052
      BEGIN
5053
         -- Get latest rtag_id --
5054
         SELECT rt.rtag_id
5055
           INTO nrtagid
5056
           FROM projects proj, release_tags rt
5057
          WHERE rt.proj_id = proj.proj_id
5058
            AND UPPER (proj.proj_name) = UPPER (projname)
5059
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
5060
 
5061
         IF (nrtagid IS NULL)
5062
         THEN
5063
            raise_application_error (-20000,
5064
                                     'Work In Progress is Not Found!');
5065
         END IF;
5066
      EXCEPTION
5067
         WHEN NO_DATA_FOUND
5068
         THEN
5069
            raise_application_error (-20000,
5070
                                     'Work In Progress is Not Found!');
5071
            RAISE;
5072
      END;
5073
 
5074
      -- Finally get package dependencies --
5075
      OPEN RECORDS FOR
5076
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
5077
                pv.src_path
5078
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
5079
          WHERE pv.pkg_id = pkg.pkg_id
5080
            AND wip.pv_id = pv.pv_id
5081
            AND wip.rtag_id = nrtagid
5082
            AND pkg.pkg_name = pkgname;
5083
 
5084
      RETURN RECORDS;
5085
   END;
5086
 
5087
/*-------------------------------------------------------------------------------------------------------*/
5088
   FUNCTION auto_make_release (
5089
      rtagid                   IN   NUMBER,
5090
      pkgname                  IN   VARCHAR2,
5091
      vext                     IN   VARCHAR2,
5092
      newpkgversion            IN   VARCHAR2,
5093
      label                    IN   VARCHAR2,
5094
      dependenciesimportlist   IN   VARCHAR2,
5095
      isrippled                IN   NUMBER,
5096
      username                 IN   VARCHAR2
5097
   )
5098
      RETURN NUMBER
5099
   IS
5100
      pkgid                           NUMBER;
5101
      pvid                            NUMBER                        := 0;
5102
      userid                          NUMBER;
5103
      dlocked                         VARCHAR2 (20)                 := NULL;
5104
      clonefrompvid                   NUMBER;
5105
      ssv_mm                          package_versions.v_mm%TYPE;
5106
      ssv_nmm                         package_versions.v_nmm%TYPE;
5107
      ssv_ext                         package_versions.v_ext%TYPE;
5108
      return_package_not_found        NUMBER                        := -1;
5109
      return_package_already_exists   NUMBER                        := -2;
5110
      return_not_approved             NUMBER                        := -3;
5111
   BEGIN
5112
      /*--------------- Business Rules Here -------------------*/
5113
      IF (rtagid IS NULL)
5114
      THEN
5115
         raise_application_error (-20000, 'RtagId must be supplied.');
5116
      END IF;
5117
 
5118
      IF (pkgname IS NULL)
5119
      THEN
5120
         raise_application_error (-20000, 'PkgName must be supplied.');
5121
      END IF;
5122
 
5123
      IF (newpkgversion IS NULL)
5124
      THEN
5125
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5126
      END IF;
5127
 
5128
      IF (label IS NULL)
5129
      THEN
5130
         raise_application_error (-20000, 'Label must be supplied.');
5131
      END IF;
5132
 
5133
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5134
      THEN
5135
         raise_application_error
5136
            (-20000,
5137
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5138
            );
5139
      END IF;
5140
 
5141
      IF (username IS NULL)
5142
      THEN
5143
         raise_application_error (-20000, 'UserName must be supplied.');
5144
      END IF;
5145
 
5146
      -- Get user_id
5147
      BEGIN
5148
         SELECT usr.user_id
5149
           INTO userid
5150
           FROM users usr
5151
          WHERE UPPER (usr.user_name) = UPPER (username)
5152
            AND usr.is_disabled IS NULL;
5153
      EXCEPTION
5154
         WHEN NO_DATA_FOUND
5155
         THEN
5156
            raise_application_error (-20000,
5157
                                        'UserName '
5158
                                     || username
5159
                                     || ' is not valid or disabled.'
5160
                                    );
5161
      END;
5162
 
5163
/*-------------------------------------------------------*/
5164
 
5165
      -- Create package if necessary
5166
      IF isrippled = 1
5167
      THEN
5168
         /* Ripple Build */
5169
         BEGIN
5170
            -- Make sure that package does not exist
5171
            SELECT pv.pv_id
5172
              INTO pvid
5173
              FROM package_versions pv, PACKAGES pkg
5174
             WHERE pv.pkg_id = pkg.pkg_id
5175
               AND pkg.pkg_name = pkgname
5176
               AND pv.pkg_version = newpkgversion;
5177
         EXCEPTION
5178
            WHEN NO_DATA_FOUND
5179
            THEN
5180
               pvid := 0;
5181
         END;
5182
 
5183
         IF (pvid = 0)
5184
         THEN
5185
            -- Split current version in parts
5186
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5187
 
5188
            BEGIN
5189
               -- Find package to be replaced with thie ripple package
5190
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5191
               THEN
5192
                  SELECT pv.pv_id
5193
                    INTO clonefrompvid
5194
                    FROM PACKAGES pkg, package_versions pv,
5195
                         release_content rc
5196
                   WHERE rc.pv_id = pv.pv_id
5197
                     AND pv.pkg_id = pkg.pkg_id
5198
                     AND rc.rtag_id = rtagid
5199
                     AND pkg.pkg_name = pkgname
5200
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5201
               ELSE
5202
                  SELECT pv.pv_id
5203
                    INTO clonefrompvid
5204
                    FROM PACKAGES pkg, package_versions pv,
5205
                         release_content rc
5206
                   WHERE rc.pv_id = pv.pv_id
5207
                     AND pv.pkg_id = pkg.pkg_id
5208
                     AND rc.rtag_id = rtagid
5209
                     AND pkg.pkg_name = pkgname
5210
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5211
               END IF;
5212
            EXCEPTION
5213
               WHEN NO_DATA_FOUND
5214
               THEN
5215
                  raise_application_error
5216
                                        (-20000,
5217
                                            'Cannot get CloneFromPvId. VExt='
5218
                                         || vext
5219
                                         || ', RtagId='
5220
                                         || rtagid
5221
                                         || ', PkgName='
5222
                                         || pkgname
5223
                                         || ', SSV_EXT='
5224
                                         || ssv_ext
5225
                                        );
5226
            END;
5227
 
5228
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5229
            THEN
5230
               -- Create package
5231
               seed_package_names_versions (pkgname,
5232
                                            newpkgversion,
5233
                                            userid,
5234
                                            pvid,
5235
                                            clonefrompvid
5236
                                           );
5237
            ELSE
5238
               -- Create package
5239
               seed_package_names_versions2 (pkgname,
5240
                                             newpkgversion,
5241
                                             userid,
5242
                                             pvid,
5243
                                             clonefrompvid
5244
                                            );
5245
            END IF;
5246
 
5247
            -- Update Package reason for release
5248
            UPDATE package_versions pv
5249
               SET pv.comments = 'Rippled Build.',
5250
                   pv.build_type = 'Y'
5251
             WHERE pv.pv_id = pvid;
5252
         ELSE
5253
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5254
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5255
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5256
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5257
            UPDATE package_versions pv
5258
               SET pv.release_notes_info = null,
5259
                   pv.modified_stamp = ora_sysdatetime
5260
             WHERE pv.pv_id = pvid;
5261
 
5262
            RETURN return_package_already_exists;
5263
         END IF;
5264
      ELSE
5265
         /* Auto build from Pending area */
5266
 
5267
         -- Find package in pending area
5268
         BEGIN
5269
            SELECT pv.pv_id, pv.dlocked
5270
              INTO pvid, dlocked
5271
              FROM planned pl, package_versions pv, PACKAGES pkg
5272
             WHERE pl.pv_id = pv.pv_id
5273
               AND pv.pkg_id = pkg.pkg_id
5274
               AND pl.rtag_id = rtagid
5275
               AND pkg.pkg_name = pkgname
5276
               AND pv.dlocked = 'A'
5277
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5278
               AND rownum = 1
5279
             ORDER BY pv.modified_stamp;
5280
         EXCEPTION
5281
            WHEN NO_DATA_FOUND
5282
            THEN
5283
               pvid := 0;
5284
         END;
5285
 
5286
         IF (pvid = 0)
5287
         THEN
5288
            -- Package does not exist in pending area, hence report it
5289
            RETURN return_package_not_found;
5290
         ELSIF (dlocked != 'A')
5291
         THEN
5292
            -- Package is not approved for autobuild
5293
            RETURN return_not_approved;
5294
         END IF;
5295
      END IF;
5296
 
5297
      BEGIN
5298
         -- Import Dependencies
5299
         import_dependencies (pvid, dependenciesimportlist, userid);
5300
      END;
5301
 
5302
      BEGIN
5303
         -- Split current version in parts
5304
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5305
 
5306
         -- Update Package Details
5307
         UPDATE package_versions pv
5308
            SET pv.pkg_version = newpkgversion,
5309
                pv.v_ext = ssv_ext,
5310
                pv.v_mm = ssv_mm,
5311
                pv.v_nmm = ssv_nmm,
5312
                pv.pkg_label = label
5313
          WHERE pv.pv_id = pvid;
5314
      EXCEPTION
5315
         WHEN DUP_VAL_ON_INDEX
5316
         THEN
5317
            -- Package already exists, hence cannot be used for ripple build
5318
            RETURN return_package_already_exists;
5319
      END;
5320
 
5321
      -- Update the is_autobuildable
5322
      UPDATE package_versions
5323
         SET is_autobuildable = 'Y'
5324
       WHERE pv_id = pvid;
5325
 
5326
      -- Now release package
5327
      pk_environment.auto_make_release (pvid,
5328
                                        rtagid,
5329
                                        userid,
5330
                                        vext,
5331
                                        ssv_ext,
5332
                                        clonefrompvid
5333
                                       );
5334
 
5335
      --Now clean the PLANNED_VERSIONS table
5336
      SELECT pkg_id
5337
        INTO pkgid
5338
        FROM PACKAGES
5339
       WHERE pkg_name = pkgname;
5340
 
5341
      DELETE FROM planned_versions
5342
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5343
 
5344
      RETURN pvid;
5345
   END;
5346
 
5347
/*-------------------------------------------------------------------------------------------------------*/
5348
   FUNCTION auto_make_vcsrelease (
5349
      rtagid                   IN   NUMBER,
5350
      pkgname                  IN   VARCHAR2,
5351
      vext                     IN   VARCHAR2,
5352
      newpkgversion            IN   VARCHAR2,
5353
      vcstag             IN   VARCHAR2,
5354
      dependenciesimportlist   IN   VARCHAR2,
5355
      isrippled                IN   NUMBER,
5356
      username                 IN   VARCHAR2
5357
   )
5358
      RETURN NUMBER
5359
   IS
5360
      pkgid                           NUMBER;
5361
      pvid                            NUMBER                        := 0;
5362
      userid                          NUMBER;
5363
      dlocked                         VARCHAR2 (20)                 := NULL;
5364
      clonefrompvid                   NUMBER;
5365
      ssv_mm                          package_versions.v_mm%TYPE;
5366
      ssv_nmm                         package_versions.v_nmm%TYPE;
5367
      ssv_ext                         package_versions.v_ext%TYPE;
5368
      return_package_not_found        NUMBER                        := -1;
5369
      return_package_already_exists   NUMBER                        := -2;
5370
      return_not_approved             NUMBER                        := -3;
5371
 
5372
      x_vcstypeid                     NUMBER;
5373
      x_tag                           VARCHAR2(32);
5374
      x_label                         VARCHAR2(60);
5375
      x_srcpath                       VARCHAR2(2000);
5376
 
5377
      -- Regular expression constituents
5378
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
5379
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
5380
      BOL           VARCHAR2(4)  := '^';
5381
      Anything      VARCHAR2(4)  := '.*';
5382
      ReplaceToken1 VARCHAR2(4)  := '\1';
5383
      ReplaceToken2 VARCHAR2(4)  := '\2';
5384
      ReplaceToken3 VARCHAR2(4)  := '\3';
5385
 
5386
 
5387
   BEGIN
5388
      /*--------------- Business Rules Here -------------------*/
5389
      IF (rtagid IS NULL)
5390
      THEN
5391
         raise_application_error (-20000, 'RtagId must be supplied.');
5392
      END IF;
5393
 
5394
      IF (pkgname IS NULL)
5395
      THEN
5396
         raise_application_error (-20000, 'PkgName must be supplied.');
5397
      END IF;
5398
 
5399
      IF (newpkgversion IS NULL)
5400
      THEN
5401
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5402
      END IF;
5403
 
5404
      IF (vcstag IS NULL)
5405
      THEN
5406
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
5407
      END IF;
5408
 
5409
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5410
      THEN
5411
         raise_application_error
5412
            (-20000,
5413
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5414
            );
5415
      END IF;
5416
 
5417
      IF (username IS NULL)
5418
      THEN
5419
         raise_application_error (-20000, 'UserName must be supplied.');
5420
      END IF;
5421
 
5422
      -- Parse the PkgVcsTag
5423
      -- Sets up
5424
      --   x_tag, x_label, x_srcpath
5425
 
5426
       BEGIN
5427
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
5428
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
5429
 
5430
          -- Decode the short tag
5431
          CASE x_tag
5432
             WHEN 'CC' THEN
5433
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
5434
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
5435
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
5436
 
5437
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5438
                -- check for that error as well as the obvious zero-length string conditions.
5439
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
5440
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5441
                END IF;
5442
 
5443
             WHEN 'SVN' THEN
5444
                -- extract the 2nd token, that being the subversion tag
5445
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);
5446
                x_label   := 'N/A';
5447
 
5448
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5449
                -- check for that error as well as the obvious zero-length string conditions.
5450
                IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THEN
5451
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5452
                END IF;
5453
 
5454
             WHEN 'UC' THEN
5455
                -- nothing to extract, just assign defaults
5456
                x_srcpath := '';
5457
                x_label   := 'N/A';
5458
             ELSE
5459
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
5460
          END CASE;
5461
       END;
5462
 
5463
      -- Get the VCS_TYPE_ID for the version control system.
5464
      BEGIN
5465
         SELECT vt.vcs_type_id
5466
         INTO x_vcstypeid
5467
         FROM VCS_TYPE vt
5468
         WHERE vt.tag = x_tag;
5469
         EXCEPTION
5470
            WHEN NO_DATA_FOUND THEN
5471
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
5472
      END;
5473
 
5474
 
5475
      -- Get user_id
5476
      BEGIN
5477
         SELECT usr.user_id
5478
           INTO userid
5479
           FROM users usr
5480
          WHERE UPPER (usr.user_name) = UPPER (username)
5481
            AND usr.is_disabled IS NULL;
5482
      EXCEPTION
5483
         WHEN NO_DATA_FOUND
5484
         THEN
5485
            raise_application_error (-20000,
5486
                                        'UserName '
5487
                                     || username
5488
                                     || ' is not valid or disabled.'
5489
                                    );
5490
      END;
5491
 
5492
/*-------------------------------------------------------*/
5493
 
5494
      -- Create package if necessary
5495
      IF isrippled = 1
5496
      THEN
5497
         /* Ripple Build */
5498
         BEGIN
5499
            -- Make sure that package does not exist
5500
            SELECT pv.pv_id
5501
              INTO pvid
5502
              FROM package_versions pv, PACKAGES pkg
5503
             WHERE pv.pkg_id = pkg.pkg_id
5504
               AND pkg.pkg_name = pkgname
5505
               AND pv.pkg_version = newpkgversion;
5506
         EXCEPTION
5507
            WHEN NO_DATA_FOUND
5508
            THEN
5509
               pvid := 0;
5510
         END;
5511
 
5512
         IF (pvid = 0)
5513
         THEN
5514
            -- Split current version in parts
5515
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5516
 
5517
            BEGIN
5518
               -- Find package to be replaced with thie ripple package
5519
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5520
               THEN
5521
                  SELECT pv.pv_id
5522
                    INTO clonefrompvid
5523
                    FROM PACKAGES pkg, package_versions pv,
5524
                         release_content rc
5525
                   WHERE rc.pv_id = pv.pv_id
5526
                     AND pv.pkg_id = pkg.pkg_id
5527
                     AND rc.rtag_id = rtagid
5528
                     AND pkg.pkg_name = pkgname
5529
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5530
               ELSE
5531
                  SELECT pv.pv_id
5532
                    INTO clonefrompvid
5533
                    FROM PACKAGES pkg, package_versions pv,
5534
                         release_content rc
5535
                   WHERE rc.pv_id = pv.pv_id
5536
                     AND pv.pkg_id = pkg.pkg_id
5537
                     AND rc.rtag_id = rtagid
5538
                     AND pkg.pkg_name = pkgname
5539
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5540
               END IF;
5541
            EXCEPTION
5542
               WHEN NO_DATA_FOUND
5543
               THEN
5544
                  raise_application_error
5545
                                        (-20000,
5546
                                            'Cannot get CloneFromPvId. VExt='
5547
                                         || vext
5548
                                         || ', RtagId='
5549
                                         || rtagid
5550
                                         || ', PkgName='
5551
                                         || pkgname
5552
                                         || ', SSV_EXT='
5553
                                         || ssv_ext
5554
                                        );
5555
            END;
5556
 
5557
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5558
            THEN
5559
               -- Create package
5560
               seed_package_names_versions (pkgname,
5561
                                            newpkgversion,
5562
                                            userid,
5563
                                            pvid,
5564
                                            clonefrompvid
5565
                                           );
5566
            ELSE
5567
               -- Create package
5568
               seed_package_names_versions2 (pkgname,
5569
                                             newpkgversion,
5570
                                             userid,
5571
                                             pvid,
5572
                                             clonefrompvid
5573
                                            );
5574
            END IF;
5575
 
5576
            -- Update Package reason for release
5577
            UPDATE package_versions pv
5578
               SET pv.comments = 'Rippled Build.',
5579
                   pv.build_type = 'Y'
5580
             WHERE pv.pv_id = pvid;
5581
         ELSE
5582
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5583
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5584
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5585
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5586
            UPDATE package_versions pv
5587
               SET pv.release_notes_info = null,
5588
                   pv.modified_stamp = ora_sysdatetime
5589
             WHERE pv.pv_id = pvid;
5590
 
5591
            RETURN return_package_already_exists;
5592
         END IF;
5593
      ELSE
5594
         /* Auto build from Pending area */
5595
 
5596
         -- Find package in pending area
5597
         BEGIN
5598
            SELECT pv.pv_id, pv.dlocked
5599
              INTO pvid, dlocked
5600
              FROM planned pl, package_versions pv, PACKAGES pkg
5601
             WHERE pl.pv_id = pv.pv_id
5602
               AND pv.pkg_id = pkg.pkg_id
5603
               AND pl.rtag_id = rtagid
5604
               AND pkg.pkg_name = pkgname
5605
               AND pv.dlocked = 'A'
5606
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5607
               AND rownum = 1
5608
             ORDER BY pv.modified_stamp;
5609
         EXCEPTION
5610
            WHEN NO_DATA_FOUND
5611
            THEN
5612
               pvid := 0;
5613
         END;
5614
 
5615
         IF (pvid = 0)
5616
         THEN
5617
            -- Package does not exist in pending area, hence report it
5618
            RETURN return_package_not_found;
5619
         ELSIF (dlocked != 'A')
5620
         THEN
5621
            -- Package is not approved for autobuild
5622
            RETURN return_not_approved;
5623
         END IF;
5624
      END IF;
5625
 
5626
      BEGIN
5627
         -- Import Dependencies
5628
         import_dependencies (pvid, dependenciesimportlist, userid);
5629
      END;
5630
 
5631
      BEGIN
5632
         -- Split current version in parts
5633
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5634
 
5635
         -- Update Package Details
5636
         UPDATE package_versions pv
5637
            SET pv.pkg_version = newpkgversion,
5638
                pv.v_ext = ssv_ext,
5639
                pv.v_mm = ssv_mm,
5640
                pv.v_nmm = ssv_nmm,
5641
                pv.src_path = x_srcpath,
5642
                pv.pkg_label = x_label,
5643
                pv.vcs_type_id = x_vcstypeid
5644
          WHERE pv.pv_id = pvid;
5645
      EXCEPTION
5646
         WHEN DUP_VAL_ON_INDEX
5647
         THEN
5648
            -- Package already exists, hence cannot be used for ripple build
5649
            RETURN return_package_already_exists;
5650
      END;
5651
 
5652
      -- Update the is_autobuildable
5653
      UPDATE package_versions
5654
         SET is_autobuildable = 'Y'
5655
       WHERE pv_id = pvid;
5656
 
5657
      -- Now release package
5658
      pk_environment.auto_make_release (pvid,
5659
                                        rtagid,
5660
                                        userid,
5661
                                        vext,
5662
                                        ssv_ext,
5663
                                        clonefrompvid
5664
                                       );
5665
 
5666
      --Now clean the PLANNED_VERSIONS table
5667
      SELECT pkg_id
5668
        INTO pkgid
5669
        FROM PACKAGES
5670
       WHERE pkg_name = pkgname;
5671
 
5672
      DELETE FROM planned_versions
5673
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5674
 
5675
      RETURN pvid;
5676
   END;
5677
 
5678
/*-------------------------------------------------------------------------------------------------------*/
5679
   PROCEDURE import_dependencies (
5680
      pvid                     IN   NUMBER,
5681
      dependenciesimportlist   IN   VARCHAR2,
5682
      userid                   IN   NUMBER
5683
   )
5684
   IS
5685
/*
5686
|| DependenciesImportList Format:
5687
|| "pkgA","1.0.0";"pkgB","2.0.0";
5688
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
5689
*/
5690
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
5691
         INDEX BY VARCHAR2 (4000);
5692
 
5693
      seperator         VARCHAR2 (2)           := '||';
5694
      pkgname           VARCHAR2 (4000);
5695
      pkgversion        VARCHAR2 (4000);
5696
      buildtype         VARCHAR2 (50);
5697
      pkgid             NUMBER;
5698
      vext              VARCHAR2 (4000);
5699
      dpvid             NUMBER;
5700
      slist             VARCHAR2 (4000);
5701
      cbuildtypes       tdictionary;
5702
      dependencyrow     NUMBER;
5703
      sdependency       VARCHAR2 (4000);
5704
      first_pos         VARCHAR2 (4000);
5705
      second_pos        VARCHAR2 (4000);
5706
      third_pos         VARCHAR2 (4000);
5707
      forth_pos         VARCHAR2 (4000);
5708
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
5709
 
5710
      CURSOR curbuildtype
5711
      IS
5712
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
5713
                dep.build_type
5714
           FROM package_dependencies dep, package_versions dpv
5715
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
5716
 
5717
      recbuildtype      curbuildtype%ROWTYPE;
5718
   BEGIN
5719
      slist := dependenciesimportlist;
5720
 
5721
      -- Preformat String
5722
      IF NOT slist IS NULL
5723
      THEN
5724
         slist := REPLACE (slist, ' ');                      -- Remove spaces
5725
         slist := REPLACE (slist, UTL_TCP.crlf);
5726
         -- Remove new line and carriage-return characters
5727
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
5728
      END IF;
5729
 
5730
      -- Get Current Dependencies
5731
      OPEN curbuildtype;
5732
 
5733
      FETCH curbuildtype
5734
       INTO recbuildtype;
5735
 
5736
      WHILE curbuildtype%FOUND
5737
      LOOP
5738
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
5739
 
5740
         FETCH curbuildtype
5741
          INTO recbuildtype;
5742
      END LOOP;
5743
 
5744
      CLOSE curbuildtype;
5745
 
5746
      -- Separate dependencies with ; separator
5747
      citemcollection := in_list_varchar2 (slist, ';');
5748
 
5749
      BEGIN
5750
         -- Remove old dependencies
5751
         DELETE FROM package_dependencies dep
5752
               WHERE dep.pv_id = pvid;
5753
 
5754
         -- Loop through dependencies
5755
         FOR dependencyrow IN 1 .. citemcollection.COUNT
5756
         LOOP
5757
            -- Extract pkg_name and pkg_version
5758
            sdependency := citemcollection (dependencyrow);
5759
            first_pos := INSTR (sdependency, '"', 1, 1);
5760
            second_pos := INSTR (sdependency, '"', 1, 2);
5761
            third_pos := INSTR (sdependency, '"', 1, 3);
5762
            forth_pos := INSTR (sdependency, '"', 1, 4);
5763
            pkgname :=
5764
               SUBSTR (sdependency,
5765
                       (first_pos + 1),
5766
                       (second_pos - first_pos - 1)
5767
                      );
5768
            pkgversion :=
5769
               SUBSTR (sdependency,
5770
                       (third_pos + 1),
5771
                       (forth_pos - third_pos - 1)
5772
                      );
5773
 
5774
            -- Dependency must exits to be linked against
5775
            BEGIN
5776
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
5777
                 INTO dpvid, pkgid, vext
5778
                 FROM package_versions pv, PACKAGES pkg
5779
                WHERE pv.pkg_id = pkg.pkg_id
5780
                  AND pkg.pkg_name = pkgname
5781
                  AND pv.pkg_version = pkgversion;
5782
            EXCEPTION
5783
               WHEN NO_DATA_FOUND
5784
               THEN
5785
                  raise_application_error
5786
                                  (-20000,
5787
                                      'Dependency ['
5788
                                   || pkgname
5789
                                   || ' '
5790
                                   || pkgversion
5791
                                   || '] does not exist yet and cannot be used!'
5792
                                  );
5793
            END;
5794
 
5795
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
5796
            BEGIN
5797
               buildtype := cbuildtypes (pkgid || seperator || vext);
5798
 
5799
               IF buildtype IS NULL
5800
               THEN
5801
                  -- Set build type to LinkPackageArchive by default
5802
                  buildtype := 'L';
5803
               END IF;
5804
            EXCEPTION
5805
               WHEN NO_DATA_FOUND
5806
               THEN
5807
                  buildtype := 'L';
5808
            END;
5809
 
5810
            -- Insert Dependencies
5811
            update_package_dependency (pvid,
5812
                                       pkgname,
5813
                                       pkgversion,
5814
                                       buildtype,
5815
                                       userid,
5816
 
5817
                                      );
5818
         END LOOP;
5819
      END;
5820
   END;
5821
 
5822
/*-------------------------------------------------------------------------------------------------------*/
5823
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
5824
      RETURN VARCHAR2
5825
   IS
5826
      pkgversion   VARCHAR2 (4000);
5827
   BEGIN
5828
      BEGIN
5829
         SELECT pv.pkg_version
5830
           INTO pkgversion
5831
           FROM PACKAGES pkg, release_content rc, package_versions pv
5832
          WHERE pv.pv_id = rc.pv_id
5833
            AND pkg.pkg_id = pv.pkg_id
5834
            AND pkg.pkg_name = pkgname
5835
            AND rc.rtag_id = rtagid;
5836
 
5837
         RETURN pkgversion;
5838
      END;
5839
   END;
5840
 
5841
/*-------------------------------------------------------------------------------------------------------*/
5842
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
5843
      RETURN VARCHAR2
5844
   IS
5845
      pkgversion   VARCHAR2 (4000);
5846
   BEGIN
5847
      BEGIN
5848
         SELECT pv.pkg_version
5849
           INTO pkgversion
5850
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
5851
          WHERE pv.pv_id = wip.pv_id
5852
            AND pkg.pkg_id = pv.pkg_id
5853
            AND pkg.pkg_name = pkgname
5854
            AND wip.rtag_id = rtagid;
5855
 
5856
         IF pkgversion IS NULL
5857
         THEN
5858
            SELECT pv.pkg_version
5859
              INTO pkgversion
5860
              FROM PACKAGES pkg, planned pl, package_versions pv
5861
             WHERE pv.pv_id = pl.pv_id
5862
               AND pkg.pkg_id = pv.pkg_id
5863
               AND pkg.pkg_name = pkgname
5864
               AND pl.rtag_id = rtagid;
5865
         END IF;
5866
 
5867
         RETURN pkgversion;
5868
      END;
5869
   END;
5870
 
5871
/*-------------------------------------------------------------------------------------------------------*/
5872
   PROCEDURE update_dash_board (rtagid IN NUMBER)
5873
   IS
5874
      projid       NUMBER;
5875
      projiddb     NUMBER;
5876
      total        NUMBER;
5877
      auto_total   NUMBER;
5878
      rtagiddb     NUMBER;
5879
   BEGIN
5880
      SELECT COUNT (*)
5881
        INTO total
5882
        FROM release_content rc, package_versions pv
5883
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
5884
 
5885
      SELECT COUNT (*)
5886
        INTO auto_total
5887
        FROM release_content rc, package_versions pv
5888
       WHERE pv.pv_id = rc.pv_id
5889
         AND pv.is_autobuildable = 'Y'
5890
         AND rc.rtag_id = rtagid;
5891
 
5892
      BEGIN
5893
         SELECT rtag_id
5894
           INTO rtagiddb
5895
           FROM dash_board
5896
          WHERE rtag_id = rtagid;
5897
 
5898
         SELECT proj_id
5899
           INTO projiddb
5900
           FROM dash_board
5901
          WHERE rtag_id = rtagid;
5902
      EXCEPTION
5903
         WHEN NO_DATA_FOUND
5904
         THEN
5905
            rtagiddb := '';
5906
      END;
5907
 
5908
      IF rtagiddb IS NULL
5909
      THEN
5910
         SELECT proj_id
5911
           INTO projid
5912
           FROM release_tags
5913
          WHERE rtag_id = rtagid;
5914
 
5915
         INSERT INTO dash_board
5916
                     (proj_id, rtag_id, last_build_time, automated_packages,
5917
                      total_packages
5918
                     )
5919
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
5920
                      total
5921
                     );
5922
      ELSE
5923
         UPDATE dash_board
5924
            SET last_build_time = ora_sysdatetime,
5925
                automated_packages = auto_total,
5926
                total_packages = total
5927
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
5928
      END IF;
5929
   END;
5930
 
5931
/*-------------------------------------------------------------------------------------------------------*/
5932
   FUNCTION exclude_from_build (
5933
      pvid          IN   NUMBER,
5934
      spkgversion   IN   VARCHAR2,
5935
      rtagid        IN   NUMBER,
5936
      username      IN   VARCHAR2
5937
   )
5938
      RETURN NUMBER
5939
   IS
5940
      userid              NUMBER;
5941
      outerrcode          NUMBER;
5942
      pkgid               NUMBER;
5943
 
5944
      CURSOR dnr_duplicate_cur
5945
      IS
5946
         SELECT *
5947
           FROM do_not_ripple
5948
          WHERE pv_id = pvid AND rtag_id = rtagid;
5949
 
5950
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
5951
   BEGIN
5952
      outerrcode := -1;       -- Set default return error code to ERROR state
5953
 
5954
      /*--------------- Business Rules Here -------------------*/
5955
      IF (rtagid IS NULL)
5956
      THEN
5957
         RETURN outerrcode;
5958
--         raise_application_error (-20000, 'RtagId must be supplied.');
5959
      END IF;
5960
 
5961
      IF (pvid IS NULL)
5962
      THEN
5963
         RETURN outerrcode;
5964
--         raise_application_error (-20000, 'PvId must be supplied.');
5965
      END IF;
5966
 
5967
      IF (username IS NULL)
5968
      THEN
5969
         RETURN outerrcode;
5970
--         raise_application_error (-20000, 'UserName must be supplied.');
5971
      END IF;
5972
 
5973
      -- Get user_id
5974
      BEGIN
5975
         SELECT usr.user_id
5976
           INTO userid
5977
           FROM users usr
5978
          WHERE UPPER (usr.user_name) = UPPER (username)
5979
            AND usr.is_disabled IS NULL;
5980
      EXCEPTION
5981
         WHEN NO_DATA_FOUND
5982
         THEN
5983
            RETURN outerrcode;
5984
--            raise_application_error (-20000,
5985
--                                        'UserName '
5986
--                                     || username
5987
--                                     || ' is not valid or disabled.'
5988
--                                    );
5989
      END;
5990
 
5991
      OPEN dnr_duplicate_cur;
5992
 
5993
      FETCH dnr_duplicate_cur
5994
       INTO dnr_duplicate_rec;
5995
 
5996
      IF dnr_duplicate_cur%FOUND
5997
      THEN
5998
         outerrcode := 0;
5999
      END IF;
6000
 
6001
      IF dnr_duplicate_cur%NOTFOUND
6002
      THEN
6003
         /* No duplicate recordset */
6004
         unripple_package (pvid, rtagid, userid);
6005
         outerrcode := 0;                            -- Set return to SUCCESS
6006
      END IF;
6007
 
6008
      CLOSE dnr_duplicate_cur;
6009
 
6010
      SELECT pkg_id
6011
        INTO pkgid
6012
        FROM package_versions
6013
       WHERE pv_id = pvid;
6014
 
6015
      DELETE FROM planned_versions
6016
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6017
 
6018
      RETURN outerrcode;
6019
   END;
6020
 
6021
/*-------------------------------------------------------------------------------------------------------*/
6022
   FUNCTION exclude_indirect_from_build (
6023
      pvid          IN   NUMBER,
6024
      spkgversion   IN   VARCHAR2,
6025
      rtagid        IN   NUMBER,
6026
      username      IN   VARCHAR2,
6027
      rootpvid      IN   NUMBER,
6028
      rootcause     IN   VARCHAR2,
6029
      rootfile      IN   VARCHAR2
6030
   )
6031
      RETURN NUMBER
6032
   IS
6033
      userid              NUMBER;
6034
      outerrcode          NUMBER;
6035
      pkgid               NUMBER;
6036
 
6037
      CURSOR dnr_duplicate_cur
6038
      IS
6039
         SELECT *
6040
           FROM do_not_ripple
6041
          WHERE pv_id = pvid AND rtag_id = rtagid;
6042
 
6043
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
6044
   BEGIN
6045
      outerrcode := -1;       -- Set default return error code to ERROR state
6046
 
6047
      /*--------------- Business Rules Here -------------------*/
6048
      IF (rtagid IS NULL)
6049
      THEN
6050
         RETURN outerrcode;
6051
--         raise_application_error (-20000, 'RtagId must be supplied.');
6052
      END IF;
6053
 
6054
      IF (pvid IS NULL)
6055
      THEN
6056
         RETURN outerrcode;
6057
--         raise_application_error (-20000, 'PvId must be supplied.');
6058
      END IF;
6059
 
6060
      IF (username IS NULL)
6061
      THEN
6062
         RETURN outerrcode;
6063
--         raise_application_error (-20000, 'UserName must be supplied.');
6064
      END IF;
6065
 
6066
      -- Get user_id
6067
      BEGIN
6068
         SELECT usr.user_id
6069
           INTO userid
6070
           FROM users usr
6071
          WHERE UPPER (usr.user_name) = UPPER (username)
6072
            AND usr.is_disabled IS NULL;
6073
      EXCEPTION
6074
         WHEN NO_DATA_FOUND
6075
         THEN
6076
            RETURN outerrcode;
6077
--            raise_application_error (-20000,
6078
--                                        'UserName '
6079
--                                     || username
6080
--                                     || ' is not valid or disabled.'
6081
--                                    );
6082
      END;
6083
 
6084
     /* No duplicate recordset */
6085
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
6086
     outerrcode := 0;                            -- Set return to SUCCESS
6087
 
6088
      SELECT pkg_id
6089
        INTO pkgid
6090
        FROM package_versions
6091
       WHERE pv_id = pvid;
6092
 
6093
      DELETE FROM planned_versions
6094
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6095
 
6096
      RETURN outerrcode;
6097
   END;
6098
/*-------------------------------------------------------------------------------------------------------*/
6099
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
6100
   IS
6101
   BEGIN
6102
      INSERT INTO abt_action_log
6103
                  (rcon_id, action_datetime, action
6104
                  )
6105
           VALUES (rconid, ora_sysdatetime, action
6106
                  );
6107
   END;
6108
 
6109
/*-------------------------------------------------------------------------------------------------------*/
6110
   FUNCTION insert_package_metrics (
6111
      rtagid                   IN   NUMBER,
6112
      pkgname                  IN   VARCHAR2,
6113
      vext                     IN   VARCHAR2,
6114
      metricstring             IN   VARCHAR2
6115
   )
6116
      RETURN NUMBER
6117
   IS
6118
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
6119
      lv_pvid                  NUMBER                 := 0;
6120
      rownumber                NUMBER;
6121
      rowcontent               VARCHAR2(4000);
6122
      metricname               VARCHAR2(1000);
6123
      metricvalue              VARCHAR2(4000);
6124
      return_insert_error      NUMBER                 := -1;
6125
      return_insert_success    NUMBER                 := 0;
6126
 
6127
      /* Metrics */
6128
      lv_branches                 NUMBER;
6129
      lv_branchlist               VARCHAR2(4000);
6130
      lv_codefiles                NUMBER;
6131
      lv_ignoredfiles             NUMBER;
6132
      lv_directories              NUMBER;
6133
      lv_directorydepth           NUMBER;
6134
      lv_totalfiles               NUMBER;
6135
      lv_makefiles                NUMBER;
6136
      lv_blanklines               NUMBER;
6137
      lv_codelines                NUMBER;
6138
      lv_commentlines             NUMBER;
6139
 
6140
   BEGIN
6141
      /*--------------- Business Rules Here -------------------*/
6142
      IF (rtagid IS NULL)
6143
      THEN
6144
         RETURN return_insert_error;
6145
      END IF;
6146
 
6147
      IF (pkgname IS NULL)
6148
      THEN
6149
         RETURN return_insert_error;
6150
      END IF;
6151
 
6152
      IF (metricstring IS NULL)
6153
      THEN
6154
         RETURN return_insert_error;
6155
      END IF;
6156
 
6157
      BEGIN
6158
         SELECT pv.pv_id
6159
           INTO lv_pvid
6160
           FROM package_versions pv, packages pkg, release_content rc
6161
          WHERE pv.pkg_id = pkg.pkg_id
6162
            AND rc.rtag_id = rtagid
6163
            AND pv.pv_id = rc.pv_id
6164
            AND pkg.pkg_name = pkgname
6165
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
6166
      EXCEPTION
6167
           WHEN NO_DATA_FOUND
6168
           THEN
6169
                lv_pvid := 0;
6170
      END;
6171
 
6172
      citemcollection := in_list_varchar2 (metricstring, ';');
6173
 
6174
      FOR rownumber IN 1 .. citemcollection.COUNT
6175
      LOOP
6176
         rowcontent := citemcollection(rownumber);
6177
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
6178
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
6179
 
6180
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
6181
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
6182
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
6183
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
6184
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
6185
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
6186
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
6187
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
6188
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
6189
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
6190
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
6191
         END IF;
6192
      END LOOP;
6193
 
6194
      IF (lv_pvid > 0)
6195
      THEN
6196
         -- Delete any existing entries for this package version to makes sure our data is untainted
6197
         DELETE FROM package_metrics pm
6198
         WHERE pm.pv_id = lv_pvid;
6199
 
6200
         -- Insert the new data into the metrics table
6201
         INSERT INTO package_metrics
6202
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
6203
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
6204
                     )
6205
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
6206
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
6207
                     );
6208
 
6209
         -- Now update the Release_Metrics Table
6210
         update_release_metrics(rtagid);
6211
 
6212
         RETURN return_insert_success;
6213
      ELSE
6214
         RETURN return_insert_error;
6215
      END IF;
6216
   END;
6217
 
6218
/*-------------------------------------------------------------------------------------------------------*/
6219
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
6220
   IS
6221
      lv_totalpackages       NUMBER;
6222
      lv_autobuilt           NUMBER;
6223
      lv_linesofcode         NUMBER;
6224
      lv_unittested          NUMBER;
6225
      lv_autotested          NUMBER;
6226
      lv_numOfbranches       NUMBER;
6227
      lv_lastbuildtime       DATE;
6228
   BEGIN
6229
      IF (rtagid > 0)
6230
      THEN
6231
         -- Get the total number of packages in this release and the number of
6232
         -- those that are autobuilt
6233
         SELECT COUNT (DISTINCT rc.pv_id),
6234
                COUNT (DISTINCT autobuilt_qry.pv_id)
6235
           INTO lv_totalpackages, lv_autobuilt
6236
           FROM release_content rc,
6237
                package_versions pv,
6238
                (
6239
                 SELECT rc.pv_id
6240
                   FROM release_content rc,
6241
                        package_versions pv
6242
                  WHERE pv.is_autobuildable = 'Y'
6243
                    AND pv.pv_id = rc.pv_id
6244
                    AND rc.rtag_id = rtagid
6245
                ) autobuilt_qry
6246
          WHERE pv.pv_id = rc.pv_id
6247
            AND rc.rtag_id = rtagid
6248
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
6249
 
6250
         -- Get the build time of the last package built in this release and the
6251
         -- total number of lines of code
6252
         SELECT MAX(pm.created_stamp),
6253
                SUM(pm.code_lines)
6254
           INTO lv_lastbuildtime, lv_linesofcode
6255
           FROM package_metrics pm, release_content rc
6256
          WHERE pm.pv_id = rc.pv_id
6257
            AND rc.rtag_id = rtagid;
6258
 
6259
         -- Get the number of packages with unit tests in this release and the
6260
         -- number of those that are autotested
6261
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
6262
           FROM unit_tests ut,
6263
                release_content rc
6264
          WHERE ut.pv_id = rc.pv_id
6265
            AND rc.rtag_id = rtagid
6266
        AND ut.test_types_fk != 1;
6267
 
6268
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
6269
          FROM unit_tests ut,
6270
               release_content rc
6271
         WHERE ut.pv_id = rc.pv_id
6272
           AND rc.rtag_id = rtagid
6273
           AND ut.test_types_fk = 7;
6274
 
6275
 
6276
         -- Count the number of unique branches in the packages in this release.
6277
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
6278
--           FROM (
6279
--                SELECT pv_id,
6280
--                       regexp_substr(str, '[^,]+', 1, level) branch,
6281
--                       level lv,
6282
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
6283
--                  FROM (
6284
--                       SELECT pm.pv_id,
6285
--                              ','||pm.branch_list str
6286
--                         FROM package_metrics pm,
6287
--                              release_content rc
6288
--                        WHERE pm.pv_id = rc.pv_id
6289
--                          AND rc.rtag_id = rtagid
6290
--                       )
6291
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
6292
--                )
6293
--          WHERE lv != lg;
6294
 
6295
         UPDATE release_metrics rm
6296
            SET rm.total_packages = lv_totalpackages,
6297
                rm.autobuilt = lv_autobuilt,
6298
                rm.lines_of_code = lv_linesofcode,
6299
                rm.unit_tested = lv_unittested,
6300
                rm.autotested = lv_autotested,
6301
--                rm.branches = lv_numOfbranches,
6302
                rm.last_build_time = lv_lastbuildtime
6303
          WHERE rtag_id = rtagid;
6304
 
6305
         IF (SQL%ROWCOUNT = 0)
6306
         THEN
6307
            INSERT INTO release_metrics
6308
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6309
                         autotested, last_build_time
6310
                        )
6311
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6312
                         lv_autotested, lv_lastbuildtime
6313
                        );
6314
         END IF;
6315
--         IF (SQL%ROWCOUNT = 0)
6316
--         THEN
6317
--            INSERT INTO release_metrics
6318
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6319
--                         autotested, branches, last_build_time
6320
--                        )
6321
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6322
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
6323
--                        );
6324
--         END IF;
6325
--      ELSE
6326
--         raise_application_error (-20000, 'RtagId must be supplied.');
6327
      END IF;
6328
   END;
6329
/*-------------------------------------------------------------------------------------------------------*/
6330
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
6331
   IS
6332
      vcstypeid    NUMBER;
6333
      vcstag       VARCHAR2(32);
6334
      label        VARCHAR2(60);
6335
      srcpath      VARCHAR2(2000);
6336
      vcstypeid_cc NUMBER;
6337
      vcstypeid_uc NUMBER;
6338
   BEGIN
6339
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
6340
      -- what the primary key value is for the ClearCase VCS entry.
6341
      BEGIN
6342
         SELECT vt.vcs_type_id
6343
         INTO vcstypeid_cc
6344
         FROM VCS_TYPE vt
6345
         WHERE vt.tag = 'CC';
6346
         EXCEPTION
6347
            WHEN NO_DATA_FOUND THEN
6348
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
6349
      END;
6350
 
6351
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
6352
      -- what the primary key value is for the Uncontrolled VCS entry.
6353
      BEGIN
6354
         SELECT vt.vcs_type_id
6355
         INTO vcstypeid_uc
6356
         FROM VCS_TYPE vt
6357
         WHERE vt.tag = 'UC';
6358
         EXCEPTION
6359
            WHEN NO_DATA_FOUND THEN
6360
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
6361
      END;
6362
 
6363
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
6364
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
6365
      BEGIN
6366
         SELECT pv.pkg_label, pv.src_path,
6367
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
6368
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
6369
                 ELSE pv.vcs_type_id END) AS vcs_type_id
6370
         INTO label, srcpath, vcstypeid
6371
         FROM PACKAGE_VERSIONS pv
6372
         WHERE pv.pv_id = pvid;
6373
         EXCEPTION
6374
            WHEN NO_DATA_FOUND THEN
6375
               raise_application_error (-20000, 'Package Version Not Found!');
6376
      END;
6377
 
6378
      -- Get the VCS TAG for the VCS_TYPE_ID.
6379
      BEGIN
6380
         SELECT vt.tag
6381
         INTO vcstag
6382
         FROM VCS_TYPE vt
6383
         WHERE vt.vcs_type_id = vcstypeid;
6384
         EXCEPTION
6385
            WHEN NO_DATA_FOUND THEN
6386
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
6387
      END;
6388
 
6389
      -- Return value depending upon which VCS Tag is being used.
6390
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
6391
      CASE vcstag
6392
         WHEN 'CC' THEN
6393
            RETURN vcstag || '::' || srcpath || '::' || label;
6394
         WHEN 'SVN' THEN
6395
            RETURN vcstag || '::' || srcpath;
6396
         ELSE
6397
            RETURN vcstag || '::';
6398
      END CASE;
6399
 
6400
   END;
6401
/*-------------------------------------------------------------------------------------------------------*/
6402
 
6403
END pk_rmapi_test;
1374 dpurdie 6404
/
6405
--------------------------------------------------------
6406
--  DDL for Package Body PK_LICENCING
6407
--------------------------------------------------------
1373 dpurdie 6408
 
6409
  CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS
6410
 
6411
/*
6412
------------------------------
6413
||  Last Modified:  G.Huddy
6414
||  Modified Date:  19/Aug/2008
6415
||  Body Version:   1.0
6416
------------------------------
6417
*/
6418
 
6419
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6420
   BEGIN
6421
      IF IS_LICENCED(PvId, licenceId) = 0 THEN
6422
         -- Add entry to licencing table
6423
         INSERT INTO licencing (pv_id, licence)
6424
         VALUES (PvId, licenceId);
6425
 
6426
         -- log action
6427
         -- TODO
6428
      END IF;
6429
 
6430
   END;
6431
 
6432
/*-------------------------------------------------------------------------------------------------------*/
6433
 
6434
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6435
   BEGIN
6436
      IF NOT IS_LICENCED(PvId, licenceId) = 0 THEN
6437
         -- Delete entry from licencing table
6438
         DELETE FROM licencing
6439
         WHERE pv_id = PvId
6440
         AND licence = licenceId;
6441
 
6442
         -- log action
6443
         -- TODO
6444
      END IF;
6445
   END;
6446
 
6447
/*-------------------------------------------------------------------------------------------------------*/
6448
 
6449
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) IS
6450
 
6451
      CURSOR licencing_cur
6452
      IS
6453
         SELECT *
6454
         FROM licencing
6455
         WHERE pv_id = fromPvId;
6456
 
6457
      licencing_rec licencing_cur%ROWTYPE;
6458
 
6459
   BEGIN
6460
      -- For each licence association that the Last PV_ID had, create a similar
6461
      -- arrangement for the new PV_ID
6462
      -- NOTE that any additional licencing associations the new PV_ID has that the old one
6463
      -- does not have, are retained. The assumption is that the user has made those and so we do not
6464
      -- have any right to destroy them without asking them.
6465
      OPEN licencing_cur;
6466
 
6467
      FETCH licencing_cur
6468
      INTO licencing_rec;
6469
 
6470
      WHILE licencing_cur%FOUND
6471
      LOOP
6472
         ADD_LICENCE ( toPvId, licencing_rec.licence, UserId );
6473
 
6474
         FETCH licencing_cur
6475
         INTO licencing_rec;
6476
      END LOOP;
6477
   END;
6478
 
6479
/*-------------------------------------------------------------------------------------------------------*/
6480
 
6481
   FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER IS
6482
      found NUMBER;
6483
   BEGIN
6484
 
6485
      SELECT COUNT(*) INTO found
6486
      FROM licencing
6487
      WHERE pv_id = PvId
6488
      AND licence = LicenceId;
6489
 
6490
      RETURN found;
6491
   END;
6492
 
6493
/*-------------------------------------------------------------------------------------------------------*/
6494
 
6495
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) IS
6496
 
6497
      CURSOR licencing_cur
6498
      IS
6499
         SELECT *
6500
         FROM licencing
6501
         WHERE pv_id = PvId;
6502
 
6503
      licencing_rec licencing_cur%ROWTYPE;
6504
   BEGIN
6505
      -- For each licence association that the PV_ID had, remove it
6506
      OPEN licencing_cur;
6507
 
6508
      FETCH licencing_cur
6509
      INTO licencing_rec;
6510
 
6511
      WHILE licencing_cur%FOUND
6512
      LOOP
6513
         REMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );
6514
 
6515
         FETCH licencing_cur
6516
         INTO licencing_rec;
6517
      END LOOP;
6518
   END;
6519
 
6520
/*-------------------------------------------------------------------------------------------------------*/
6521
END PK_LICENCING;
1374 dpurdie 6522
/
6523
--------------------------------------------------------
6524
--  DDL for Package Body RM_ISSUES
6525
--------------------------------------------------------
1373 dpurdie 6526
 
6527
  CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS
6528
 
6529
-- Private Implementation -----------------------------------------------------
6530
 
6531
 
6532
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6533
	AS
6534
 
6535
	BEGIN
6536
		-- start boundary case
6537
		IF ( XXstart < XX ) THEN
6538
			RETURN 1;
6539
 
6540
		ELSIF ( XXstart = XX ) THEN
6541
 
6542
			-- need to consider YY
6543
			IF ( YYstart < YY ) THEN
6544
				RETURN 1;
6545
 
6546
			ELSIF ( YYstart = YY ) THEN
6547
 
6548
					-- need to consider ZZ
6549
					IF ( ZZstart <= ZZ ) THEN
6550
						RETURN 1;
6551
 
6552
					ELSE
6553
						RETURN 0;
6554
					END IF;
6555
 
6556
			ELSE
6557
				RETURN 0;
6558
			END IF;
6559
		ELSE
6560
			RETURN 0;
6561
		END IF;
6562
	EXCEPTION
6563
		WHEN OTHERS THEN
6564
			RETURN -1;
6565
	END;
6566
 
6567
 
6568
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6569
	AS
6570
 
6571
	BEGIN
6572
		-- end boundary case
6573
		IF ( XX < XXend ) THEN
6574
			RETURN 1;
6575
 
6576
		ELSIF ( XX = XXend ) THEN
6577
 
6578
			-- need to consider YY
6579
			IF ( YY < YYend ) THEN
6580
				RETURN 1;
6581
 
6582
			ELSIF ( YY = YYend ) THEN
6583
 
6584
					-- need to consider ZZ
6585
					IF ( ZZ <= ZZend ) THEN
6586
						RETURN 1;
6587
 
6588
					ELSE
6589
						RETURN 0;
6590
					END IF;
6591
			ELSE
6592
 
6593
				RETURN 0;
6594
			END IF;
6595
		ELSE
6596
			RETURN 0;
6597
		END IF;
6598
	EXCEPTION
6599
		WHEN OTHERS THEN
6600
			RETURN -1;
6601
	END;
6602
 
6603
	/*
6604
	-	version format:		XX.YY.ZZ.abc
6605
	*/
6606
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER
6607
	AS
6608
		XXstart		NUMBER	:=	0;
6609
		XXend		NUMBER	:=	0;
6610
		XX			NUMBER	:=	0;
6611
		YYstart		NUMBER	:=	0;
6612
		YYend		NUMBER	:=	0;
6613
		YY			NUMBER	:=	0;
6614
		ZZstart		NUMBER	:=	0;
6615
		ZZend		NUMBER	:=	0;
6616
		ZZ			NUMBER	:=	0;
6617
		first_dot	NUMBER	:=	0;
6618
		second_dot	NUMBER	:=	0;
6619
		third_dot	NUMBER	:=	0;
6620
 
6621
		ProjExtstart	VARCHAR2(10);
6622
		ProjExtend		VARCHAR2(10);
6623
		ProjExt			VARCHAR2(10);
6624
 
6625
	BEGIN
6626
		-- strip the version number
6627
		first_dot :=  INSTR(version_start, '.', 1, 1);
6628
		second_dot :=  INSTR(version_start, '.', 1, 2);
6629
		third_dot :=  INSTR(version_start, '.', 1, 3);
6630
 
6631
		XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );
6632
		YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6633
		ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6634
		ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );
6635
 
6636
		first_dot :=  INSTR(version_end, '.', 1, 1);
6637
		second_dot :=  INSTR(version_end, '.', 1, 2);
6638
		third_dot :=  INSTR(version_end, '.', 1, 3);
6639
 
6640
		XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );
6641
		YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6642
		ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6643
		ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );
6644
 
6645
		first_dot :=  INSTR(version, '.', 1, 1);
6646
		second_dot :=  INSTR(version, '.', 1, 2);
6647
		third_dot :=  INSTR(version, '.', 1, 3);
6648
 
6649
		XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );
6650
		YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6651
		ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6652
		ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );
6653
 
6654
		-- only include versions if all project extensions are the same
6655
		IF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THEN
6656
 
6657
			IF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THEN
6658
				RETURN 1;
6659
			ELSE
6660
				RETURN 0;
6661
			END IF;
6662
		ELSE
6663
			RETURN 0;
6664
		END IF;
6665
 
6666
	EXCEPTION
6667
		WHEN OTHERS THEN
6668
			RETURN -1;
6669
	END;
6670
 
6671
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER
6672
	AS
6673
	    pkg_id NUMBER;
6674
	BEGIN
6675
		SELECT
6676
			p.PKG_ID
6677
		INTO
6678
			pkg_id
6679
		FROM
6680
			PACKAGES p
6681
		WHERE
6682
			p.PKG_NAME = pkgName;
6683
 
6684
		RETURN pkg_id;
6685
	EXCEPTION
6686
	    WHEN OTHERS THEN
6687
			dbms_output.put_line('GetPkgId exception: ' || SQLERRM );
6688
			RETURN -1;
6689
	END;
6690
 
6691
 
6692
-- Public Implementation ------------------------------------------------------
6693
 
6694
	/*
6695
	-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep
6696
	--
6697
	-- INPUT PARAMETERS:
6698
	--
6699
	--		pkg_name  	-  	The name of the top level package to get issues for
6700
	--		version_start	-	The start version for the comparison
6701
	--		version_end	-	The end version for the comparison
6702
	*/
6703
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6704
	AS
6705
		pkgId	NUMBER;
6706
	BEGIN
6707
		-- get pkg_id of the input package:
6708
		pkgId := GetPkgId( pkg_name );
6709
 
6710
		OPEN vCursor FOR
6711
		SELECT
6712
			  pv.PKG_ID,
6713
			  pv.PKG_VERSION,
6714
			  pv.PV_ID,
6715
			  i_pkg.ISS_ID,
6716
			  ( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,
6717
			  pd.DPKG_ID,
6718
			  ( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,
6719
			  pd.DPV_ID,
6720
			  i_dpkg.ISS_ID AS ISSUE_ID
6721
		FROM
6722
			 PACKAGE_VERSIONS pv
6723
							  LEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_ID
6724
							  LEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_ID
6725
							  LEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_ID
6726
		WHERE
6727
   			 pv.PKG_ID = pkgId
6728
		AND
6729
			VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1
6730
		AND
6731
			 ( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )
6732
		ORDER BY
6733
			 pv.PKG_ID,
6734
			 pv.PV_ID,
6735
			 pd.DPKG_ID,
6736
			 pd.DPV_ID;
6737
	EXCEPTION
6738
		WHEN OTHERS THEN
6739
			dbms_output.put_line('AllIssues exception: ' || SQLERRM );
6740
	END;
6741
 
6742
 
6743
	-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok
6744
 
6745
	/*
6746
	-- Proc: LoadIssuesTable
6747
	--
6748
	-- Populates Package_Issues table with details of issues from all dependent packages.
6749
	-- This will be for all package versions of the input pkg_name between the
6750
	-- version_start and version_end.
6751
	--
6752
	-- INPUT PARAMETERS:
6753
	--
6754
	--		pkg_name  	-  	The name of the top level package to get issues for
6755
	--		version_start	-	The start version for the comparison
6756
	--		version_end	-	The end version for the comparison
6757
	*/
6758
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6759
	AS
6760
		pkgId	NUMBER;
6761
 
6762
		CURSOR pack_vers_cur IS
6763
			SELECT
6764
				pv.PV_ID,
6765
				pv.PKG_VERSION,
6766
				pv.PKG_ID,
6767
				p.PKG_NAME
6768
			FROM
6769
				PACKAGE_VERSIONS pv
6770
					JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6771
			WHERE
6772
   				 pv.PKG_ID = pkgId
6773
			AND
6774
				VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;
6775
 
6776
	BEGIN
6777
		DELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6778
 
6779
		-- get the pkg_id we are finding issues for
6780
		pkgId := GetPkgId( pkg_name );
6781
 
6782
		-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.
6783
		FOR pack_ver_rec IN  pack_vers_cur
6784
		LOOP
6785
			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 );
6786
			COMMIT;
6787
		END LOOP;
6788
 
6789
		-- The output cursor - shows the individual versions of the top level package then were reported on
6790
		OPEN vCursor FOR
6791
		SELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6792
/*removed
6793
		SELECT
6794
			PKG_VERSION
6795
		FROM
6796
			RELEASE_MANAGER.RM_PACKAGE_ISSUES;
6797
*/
6798
 
6799
 
6800
	EXCEPTION
6801
		WHEN OTHERS THEN
6802
			dbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );
6803
	END;
6804
 
6805
 
6806
	/*
6807
	-- Proc: InsertIssuesForDepends
6808
	--
6809
	-- Used by LoadIssuesTable to recursively find issues for all dependent packages
6810
	--
6811
	-- INPUT PARAMETERS:
6812
	--
6813
	--		pvID  		-  	The package version id of the package to get issues for
6814
	--		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)
6815
	--		top_pkgName -  	The package name of the top level package
6816
	--		top_pvID  	-  	The package version id of the top level package
6817
	--		top_pkgVer  -  	The package version description of the top level package
6818
	*/
6819
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )
6820
	AS
6821
		pkgId		NUMBER;
6822
		issCnt		NUMBER := 0;
6823
		pkgCheck	NUMBER := 0;
6824
		depCheck	NUMBER := 0;
6825
 
6826
		dpkgName	VARCHAR(50);
6827
		dpkgVersion	VARCHAR(50);
6828
 
6829
		CURSOR dep_packs_cur IS
6830
			SELECT
6831
				DPV_ID
6832
			FROM
6833
				PACKAGE_DEPENDENCIES
6834
			WHERE
6835
				PV_ID = pvID;
6836
 
6837
	BEGIN
6838
 
6839
		-- check to see if the package has been processed previously
6840
		SELECT
6841
			COUNT(*)
6842
		INTO
6843
			pkgCheck
6844
		FROM
6845
			RM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6846
		WHERE
6847
			DPV_ID = pvID;
6848
 
6849
		dbms_output.put_line('pkgCheck: ' || pkgCheck );
6850
 
6851
		-- Package not already processed (no cyclic dependency) - process it
6852
		IF ( pkgCheck = 0 ) THEN
6853
 
6854
			-- check to see if this package version has any issues assigned to it
6855
			SELECT
6856
				COUNT(*)
6857
			INTO
6858
				issCnt
6859
			FROM
6860
				CQ_ISSUES i
6861
			WHERE
6862
				i.PV_ID = pvID;
6863
 
6864
			dbms_output.put_line('issCnt: ' || issCnt );
6865
 
6866
			-- Always enter a marker row into the table even if there are no issues for the package.
6867
			-- This allows us to pick up any cyclic dependencies.
6868
			IF ( issCnt > 0 ) THEN
6869
				-- get issues and insert into RM_PACKAGE_ISSUES
6870
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6871
 
6872
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6873
					SELECT DISTINCT
6874
						top_pkgID		AS PKG_ID,
6875
						top_pkgName		AS PKG_NAME,
6876
						top_pvID		AS PV_ID,
6877
						top_pkgVer		AS PKG_VERSION,
6878
						pv.PV_ID		AS DPV_ID,
6879
						p.PKG_NAME		AS DPKG_NAME,
6880
						pv.PKG_VERSION	AS DPKG_VERSION,
6881
						ci.ISS_DB,
6882
						ci.ISS_ID
6883
					FROM
6884
						PACKAGE_VERSIONS pv
6885
							JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6886
							JOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_ID
6887
					WHERE
6888
						pv.PV_ID = pvID;
6889
 
6890
			ELSE
6891
				-- get the dpkg details - there will always be a row returned here
6892
				SELECT
6893
					p.PKG_NAME
6894
				INTO
6895
					dpkgName
6896
				FROM
6897
					PACKAGE_VERSIONS pv
6898
						JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6899
				WHERE
6900
	   				 pv.PV_ID = pvID;
6901
 
6902
				SELECT
6903
					pv.PKG_VERSION
6904
				INTO
6905
					dpkgVersion
6906
				FROM
6907
					PACKAGE_VERSIONS pv
6908
				WHERE
6909
	   				 pv.PV_ID = pvID;
6910
 
6911
				-- enter a marker row
6912
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6913
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6914
				VALUES (
6915
					top_pkgID,
6916
					top_pkgName,
6917
					top_pvID,
6918
					top_pkgVer,
6919
					pvID,
6920
					dpkgName,
6921
					dpkgVersion,
6922
					NULL,
6923
					NULL );
6924
 
6925
			END IF;
6926
 
6927
			-- If this package version has dependencies then recurse
6928
			SELECT
6929
				COUNT(*)
6930
			INTO
6931
				depCheck
6932
			FROM
6933
				PACKAGE_DEPENDENCIES
6934
			WHERE
6935
				PV_ID = pvID;
6936
 
6937
			IF ( depCheck > 0 ) THEN
6938
				-- get dependencies and call this function recursively for each one
6939
				FOR dep_rec IN  dep_packs_cur
6940
				LOOP
6941
					InsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );
6942
				END LOOP;
6943
 
6944
			END IF;
6945
 
6946
		END IF;
6947
 
6948
	/*EXCEPTION
6949
		WHEN OTHERS THEN
6950
			no exception handling required
6951
	*/
6952
	END;
6953
 
6954
END Rm_Issues;
1374 dpurdie 6955
/
6956
--------------------------------------------------------
6957
--  DDL for Package Body PK_RELEASE_TEST
6958
--------------------------------------------------------
1373 dpurdie 6959
 
6960
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE_TEST" IS
6961
 
6962
 
6963
/*
6964
------------------------------
6965
||  Last Modified:  S.Vukovic
6966
||  Modified Date:  12/Sep/2005
6967
||  Body Version:   3.0
6968
------------------------------
6969
*/
6970
 
6971
 
6972
/*-------------------------------------------------------------------------------------------------------*/
6973
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
6974
 
6975
RtagId NUMBER;
6976
ParentRtagId NUMBER;
6977
RecCount NUMBER := 0;
6978
 
6979
 
6980
BEGIN
6981
	/*--------------- Business Rules Here -------------------*/
6982
	-- Check for missing parameters
6983
	IF (sReleaseName IS NULL) OR (nUserId IS NULL)
6984
	THEN
6985
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
6986
 
6987
	END IF;
6988
 
6989
 
6990
	-- Check for duplicate Release Names
6991
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
6992
	  FROM RELEASE_TAGS rt
6993
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
6994
	   AND rt.PROJ_ID = nProjId;
6995
 
6996
	IF (RecCount > 0) THEN
6997
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
6998
	END IF;
6999
	/*-------------------------------------------------------*/
7000
 
7001
 
7002
	-- Get rtag_id
7003
	SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
7004
 
7005
 
7006
 
7007
	-- Get Parent RtagId
7008
	ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
7009
 
7010
 
7011
	-- Create new release
7012
	INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID, 
7013
							   OFFICIAL, REBUILD_ENV, REBUILD_STAMP, 
7014
							   PARENT_RTAG_ID, PROJ_ID )
7015
	VALUES ( RtagId, 
7016
			 sReleaseName, 
7017
			 sReleaseComments,
7018
			 ORA_SYSDATE,
7019
			 nUserId,
7020
			 'N',
7021
			 'N',
7022
			 0,
7023
			 ParentRtagId,
7024
			 nProjId );
7025
 
7026
	-- Update display Order
7027
	UPDATE_DISPLAY_ORDER ( nProjId );
7028
 
7029
	/* Log Project Action */
7030
	Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
7031
 
7032
 
7033
	-- Import Release Contents
7034
	IF (NOT nSourceRtagId IS NULL) THEN
7035
		Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
7036
 
7037
	END IF;
7038
 
7039
 
7040
 
7041
END;
7042
/*-------------------------------------------------------------------------------------------------------*/
7043
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
7044
 
7045
 
7046
BEGIN
7047
 
7048
 
7049
	/*--------------- Business Rules Here -------------------*/
7050
	/*-------------------------------------------------------*/
7051
 
7052
	UPDATE RELEASE_TAGS urt SET
7053
	urt.DISPLAY_ORDER = (
7054
						SELECT qry.REC_NUM
7055
						  FROM (	
7056
								SELECT rel.*, ROWNUM AS REC_NUM
7057
								  FROM (
7058
 
7059
								  		SELECT rt.RTAG_ID, 
7060
											   rt.DISPLAY_ORDER,
7061
										       DECODE( rt.PARENT_RTAG_ID, 
7062
											   		   rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
7063
										  FROM RELEASE_TAGS rt
7064
										 WHERE rt.PROJ_ID = nProjId 
7065
 
7066
								  		) rel
7067
								START WITH rel.PARENT_RTAG_ID = 0
7068
								CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID   
7069
								ORDER SIBLINGS BY rel.DISPLAY_ORDER
7070
								) qry
7071
					      WHERE qry.RTAG_ID = urt.RTAG_ID 								
7072
						)
7073
	WHERE urt.PROJ_ID = nProjId;
7074
 
7075
END;
7076
/*-------------------------------------------------------------------------------------------------------*/
7077
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
7078
 
7079
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();						 
7080
	SeqNum NUMBER;
7081
 
7082
BEGIN
7083
 
7084
 
7085
	/*--------------- Business Rules Here -------------------*/
7086
	/*-------------------------------------------------------*/
7087
 
7088
	nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
7089
 
7090
	-- Set start sequence number
7091
	SeqNum := 1;
7092
 
7093
	FOR i IN 1..nIdCollector.COUNT
7094
	LOOP
7095
 
7096
		-- Update new display order
7097
		UPDATE RELEASE_TAGS rt SET
7098
			rt.DISPLAY_ORDER = SeqNum
7099
		 WHERE rt.PROJ_ID = nProjId
7100
		   AND rt.RTAG_ID = nIdCollector(i);
7101
 
7102
		SeqNum := SeqNum + 1;
7103
 
7104
	END LOOP;
7105
 
7106
END;
7107
/*-------------------------------------------------------------------------------------------------------*/
7108
PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, nUserId IN NUMBER ) IS
7109
 
7110
RecCount NUMBER := 0;
7111
ProjId NUMBER;
7112
 
7113
BEGIN
7114
 
7115
 
7116
	/*--------------- Business Rules Here -------------------*/
7117
	-- Check for missing parameters
7118
	IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
7119
	THEN
7120
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
7121
 
7122
	END IF;
7123
 
7124
 
7125
	-- Check for duplicate Release Names
7126
	SELECT rt.PROJ_ID INTO ProjId
7127
	  FROM RELEASE_TAGS rt
7128
	 WHERE rt.RTAG_ID = nRtagId;
7129
 
7130
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
7131
	  FROM RELEASE_TAGS rt
7132
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
7133
	   AND rt.RTAG_ID != nRtagId
7134
	   AND rt.PROJ_ID = ProjId;
7135
 
7136
 
7137
	IF (RecCount > 0) THEN
7138
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7139
	END IF;
7140
	/*-------------------------------------------------------*/
7141
 
7142
 
7143
 
7144
	-- Update release details
7145
	UPDATE RELEASE_TAGS rt SET
7146
	rt.RTAG_NAME = sReleaseName,
7147
	rt.DESCRIPTION = sReleaseComments,
7148
	rt.PARENT_RTAG_ID = nParentRtagId,
7149
	rt.ASSOC_MASS_REF = nMASSRtagId,
7150
	rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch
7151
	WHERE rt.RTAG_ID = nRtagId; 
7152
 
7153
	-- Update display Order
7154
	UPDATE_DISPLAY_ORDER ( ProjId );
7155
 
7156
	/* Log Project Action */
7157
	Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
7158
 
7159
 
7160
 
7161
 
7162
END;
7163
/*-------------------------------------------------------------------------------------------------------*/
7164
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7165
 
7166
	RecCount NUMBER := 0;
7167
	sReleaseId VARCHAR2(4000);
7168
	ProjId NUMBER;
7169
 
7170
BEGIN
7171
	/*--------------- Business Rules Here -------------------*/
7172
	IF (nRtagId IS NULL) 
7173
	THEN
7174
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7175
	END IF;
7176
 
7177
 
7178
 
7179
	-- Check for any kids
7180
	SELECT COUNT( rt.RTAG_ID ) INTO RecCount
7181
	  FROM RELEASE_TAGS rt
7182
	 WHERE rt.PARENT_RTAG_ID = nRtagId
7183
	   AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
7184
 
7185
	IF (RecCount > 0) THEN
7186
		RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
7187
	END IF; 
7188
	/*-------------------------------------------------------*/
7189
 
7190
	-- Clear the release contents
7191
	Clean_Release_Contents ( nRtagId, nUserId );
7192
 
7193
	/* Log Project Action */
7194
	SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
7195
	  FROM RELEASE_TAGS rt
7196
	 WHERE rt.RTAG_ID = nRtagId;
7197
 
7198
	Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
7199
 
7200
 
7201
	-- Remove Release
7202
	DELETE 
7203
	  FROM RELEASE_TAGS rt
7204
	 WHERE rt.RTAG_ID = nRtagId;
7205
 
7206
 
7207
 
7208
END;
7209
/*-------------------------------------------------------------------------------------------------------*/
7210
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
7211
 
7212
	sSourceLocation VARCHAR2(4000);
7213
	sTargetLocation VARCHAR2(4000);
7214
	ProjId NUMBER;
7215
	cReleaseMode CHAR(1);
7216
 
7217
 
7218
BEGIN
7219
	/*--------------- Business Rules Here -------------------*/
7220
	IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
7221
	THEN
7222
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
7223
	END IF;
7224
 
7225
	IF (nSourceRtagId = nTargetRtagId) THEN
7226
		RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
7227
	END IF;
7228
 
7229
 
7230
	-- Check if Target release is in OPEN mode
7231
	SELECT rt.OFFICIAL  INTO  cReleaseMode
7232
	  FROM RELEASE_TAGS rt
7233
	 WHERE rt.RTAG_ID = nTargetRtagId;
7234
 
7235
	IF (cReleaseMode != 'N') THEN
7236
		RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
7237
	END IF;	 
7238
 
7239
	/*-------------------------------------------------------*/
7240
 
7241
	-- Clean target contents
7242
	Clean_Release_Contents ( nTargetRtagId, nUserId );
7243
 
7244
 
7245
	-- Import Released Area Contents
7246
	INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE ) 
7247
	SELECT nTargetRtagId AS RTAG_ID, 
7248
		   rc.PV_ID, 
7249
		   rc.BASE_VIEW_ID, 
7250
		   rc.INSERT_STAMP, 
7251
		   rc.INSERTOR_ID, 
7252
		   rc.PKG_STATE
7253
	  FROM RELEASE_CONTENT rc
7254
	 WHERE rc.RTAG_ID = nSourceRtagId;
7255
 
7256
 
7257
	-- Import Ignore Warning states
7258
	INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
7259
	SELECT nTargetRtagId AS RTAG_ID,
7260
	       igw.PV_ID,
7261
	       igw.DPV_ID
7262
	  FROM IGNORE_WARNINGS igw
7263
	 WHERE igw.rtag_id = nSourceRtagId;
7264
 
7265
 
7266
	/* Log Project Action */
7267
	-- Get Source Location
7268
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
7269
	  FROM RELEASE_TAGS rt,
7270
	  	   PROJECTS pr
7271
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7272
	   AND rt.RTAG_ID = nSourceRtagId;
7273
 
7274
	-- Get Target Location
7275
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
7276
	  FROM RELEASE_TAGS rt,
7277
	  	   PROJECTS pr
7278
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7279
	   AND rt.RTAG_ID = nTargetRtagId;	   
7280
 
7281
	-- Get project id   
7282
	SELECT rt.PROJ_ID  INTO  ProjId
7283
	  FROM RELEASE_TAGS rt
7284
	 WHERE rt.RTAG_ID = nTargetRtagId;   
7285
 
7286
	Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );	
7287
 
7288
 
7289
END;
7290
/*-------------------------------------------------------------------------------------------------------*/
7291
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7292
 
7293
	RecCount NUMBER;
7294
 
7295
BEGIN
7296
	/*--------------- Business Rules Here -------------------*/
7297
	IF (nRtagId IS NULL) 
7298
	THEN
7299
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7300
	END IF;
7301
 
7302
 
7303
	-- Check if other release references this release
7304
	SELECT COUNT( rl.RTAG_ID ) INTO RecCount
7305
	  FROM RELEASE_LINKS rl
7306
	 WHERE rl.REF_RTAG_ID = nRtagId;
7307
 
7308
	IF (RecCount > 0) THEN
7309
		RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
7310
	END IF; 	
7311
	/*-------------------------------------------------------*/
7312
 
7313
	-- Delete Release links
7314
	DELETE 
7315
	  FROM RELEASE_LINKS rl
7316
	 WHERE rl.RTAG_ID = nRtagId;
7317
 
7318
	-- Delete ignore warning
7319
	DELETE 
7320
	  FROM IGNORE_WARNINGS iw
7321
	 WHERE iw.RTAG_ID = nRtagId;
7322
 
7323
 
7324
	-- Delete Build Order cached calculations	  
7325
	DELETE
7326
	  FROM BUILD_ORDER bo
7327
	 WHERE bo.RTAG_ID = nRtagId;
7328
 
7329
 
7330
	-- Delete Notification History
7331
	DELETE
7332
	  FROM NOTIFICATION_HISTORY nh
7333
	 WHERE nh.RTAG_ID = nRtagId;
7334
 
7335
 
7336
	-- Delete Released Area Contents
7337
	DELETE
7338
	  FROM RELEASE_CONTENT rc
7339
	 WHERE rc.RTAG_ID = nRtagId;
7340
 
7341
 
7342
	-- Delete Work In Progress Area Contents
7343
	DELETE
7344
	  FROM WORK_IN_PROGRESS wip
7345
	 WHERE wip.RTAG_ID = nRtagId;
7346
 
7347
 
7348
	-- Delete Pending Area Contents
7349
	DELETE 
7350
	  FROM PLANNED pl
7351
	 WHERE pl.RTAG_ID = nRtagId;
7352
 
7353
 
7354
END;
7355
/*-------------------------------------------------------------------------------------------------------*/
7356
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
7357
 
7358
	nSourceParentRtagId NUMBER;
7359
 
7360
BEGIN
7361
	/*--------------- Business Rules Here -------------------*/
7362
	IF (nRtagId IS NULL) OR (cIsBranch IS NULL)  
7363
	THEN
7364
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
7365
	END IF;
7366
	/*-------------------------------------------------------*/
7367
 
7368
 
7369
	IF ( nSourceRtagId IS NULL ) THEN
7370
		-- Create new on main branch
7371
		RETURN nRtagId;
7372
 
7373
	ELSE
7374
		-- Create from source rtag_id
7375
 
7376
		-- Find parent of Source RtagId
7377
		SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
7378
		  FROM RELEASE_TAGS rt
7379
		 WHERE rt.RTAG_ID = nSourceRtagId;
7380
 
7381
		IF (UPPER(cIsBranch) = 'Y') THEN
7382
			RETURN nSourceRtagId;
7383
		ELSE
7384
			IF (nSourceRtagId = nSourceParentRtagId) THEN
7385
				RETURN nRtagId;
7386
			ELSE
7387
				RETURN nSourceParentRtagId;
7388
			END IF;
7389
		END IF;	
7390
 
7391
 
7392
	END IF;
7393
 
7394
 
7395
END;
7396
/*-------------------------------------------------------------------------------------------------------*/
7397
 
7398
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
7399
-- 							 sNextVersion OUT VARCHAR2,
7400
-- 							 nNextLifeCycle OUT NUMBER,
7401
-- 							 nParentRtagId OUT NUMBER,
7402
-- 							 nProjId IN NUMBER ) IS
7403
-- 							
7404
-- SourceBranchCount NUMBER;
7405
-- ProjRootVersion VARCHAR2(4000);
7406
-- LastLifeCycle NUMBER;
7407
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
7408
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
7409
-- 
7410
-- SourceProjId NUMBER; 
7411
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
7412
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
7413
-- 
7414
-- BEGIN
7415
-- 	/*--------------- Business Rules Here -------------------*/
7416
-- 	/*-------------------------------------------------------*/
7417
-- 	
7418
-- 	   
7419
-- 	BEGIN
7420
-- 		-- Get Project root version
7421
-- 		SELECT rt.RTAG_VERSION INTO ProjRootVersion
7422
-- 		  FROM RELEASE_TAGS rt
7423
-- 		 WHERE rt.PROJ_ID = nProjId
7424
-- 		   AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
7425
-- 	   
7426
-- 		EXCEPTION
7427
-- 		WHEN NO_DATA_FOUND THEN
7428
-- 		ProjRootVersion := ROOT_VERSION_NOT_FOUND;
7429
-- 	END;		   
7430
-- 	
7431
-- 	
7432
-- 	
7433
-- 	 
7434
-- 	BEGIN
7435
-- 		-- Get info for source rtagid
7436
-- 		SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
7437
-- 		  FROM RELEASE_TAGS rt
7438
-- 		 WHERE rt.RTAG_ID = nSourceRtagId;	
7439
-- 	   
7440
-- 		EXCEPTION
7441
-- 		WHEN NO_DATA_FOUND THEN
7442
-- 		SourceProjId := NULL;
7443
-- 		SourceVersion := NULL;
7444
-- 		SourceLifeCycle := NULL;
7445
-- 	END;	  
7446
-- 	
7447
-- 	
7448
-- 	IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
7449
-- 	
7450
-- 		/* Blank Release Required  OR  Release imported from other project */
7451
-- 		
7452
-- 		IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
7453
-- 			/* No Releases found in the project, hence calculate next version available.  */
7454
-- 			
7455
-- 			-- Set parent rtag
7456
-- 			nParentRtagId := SET_PARENT_AS_YOURSELF;
7457
-- 			
7458
-- 			
7459
-- 			BEGIN
7460
-- 				-- Get Next Available Global Root Version 
7461
-- 				SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
7462
-- 				  FROM RELEASE_TAGS rt
7463
-- 				 WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
7464
-- 				
7465
-- 				-- Set Next Rtag Version
7466
-- 				sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
7467
-- 				
7468
-- 				-- Restart Lifecycle
7469
-- 				nNextLifeCycle := 0;
7470
-- 				
7471
-- 				
7472
-- 				EXCEPTION
7473
-- 				WHEN NO_DATA_FOUND THEN
7474
-- 				-- Release Manager has no releases, hence start from 1
7475
-- 				sNextVersion := '1';
7476
-- 				nNextLifeCycle := 0;
7477
-- 				
7478
-- 			END;
7479
-- 			
7480
-- 			
7481
-- 					
7482
-- 		ELSE
7483
-- 			/* Releases found in this project. */
7484
-- 							   
7485
-- 			SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
7486
-- 			  FROM (
7487
-- 					SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
7488
-- 					  FROM RELEASE_TAGS rt
7489
-- 					 WHERE rt.PROJ_ID = nProjId
7490
-- 					   AND rt.RTAG_VERSION = ProjRootVersion 
7491
-- 					 ORDER BY rt.RTAG_LIFE_CYCLE DESC
7492
-- 			  		) qry
7493
-- 			 WHERE ROWNUM = 1;		
7494
-- 
7495
-- 			
7496
-- 			-- Set same Rtag Version
7497
-- 			sNextVersion := ProjRootVersion;
7498
-- 			
7499
-- 			-- Increase Lifecycle
7500
-- 			nNextLifeCycle := LastLifeCycle + 1;
7501
-- 		
7502
-- 		END IF;
7503
-- 				
7504
-- 	
7505
-- 		
7506
-- 	ELSE
7507
-- 		/* Create Release From other release within this project */
7508
-- 		
7509
-- 		-- Set parent id
7510
-- 		nParentRtagId := nSourceRtagId;
7511
-- 		
7512
-- 		
7513
-- 		-- Get number of source branches
7514
-- 		SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
7515
-- 		  FROM RELEASE_TAGS rt
7516
-- 		 WHERE rt.PROJ_ID = nProjId
7517
-- 		   AND rt.PARENT_RTAG_ID = nSourceRtagId;		   
7518
-- 		   
7519
-- 		   
7520
-- 		IF SourceBranchCount = 0 THEN
7521
-- 			/* Release is Head (i.e. Tip on its branch ) */
7522
-- 			
7523
-- 			-- Set Next Rtag Version
7524
-- 			sNextVersion := SourceVersion;
7525
-- 			
7526
-- 			-- Increase Lifecycle
7527
-- 			nNextLifeCycle := SourceLifeCycle + 1;
7528
-- 			
7529
-- 			
7530
-- 		ELSIF SourceBranchCount = 1 THEN
7531
-- 			/* Release IS NOT Head, but can be branched */
7532
-- 			
7533
-- 			-- Set Next Rtag Version
7534
-- 			sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
7535
-- 			
7536
-- 			-- Reset Lifecycle to 1
7537
-- 			nNextLifeCycle := 1;
7538
-- 			
7539
-- 			
7540
-- 		ELSE	
7541
-- 			-- Limit of two branches is reached
7542
-- 			RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');		
7543
-- 			
7544
-- 		END IF;	
7545
-- 			
7546
-- 			
7547
-- 		
7548
-- 		
7549
-- 		
7550
-- 	
7551
-- 	END IF;
7552
-- 	
7553
-- 		
7554
-- END;
7555
 
7556
/*-------------------------------------------------------------------------------------------------------*/
7557
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
7558
 
7559
	IsBaseView CHAR(1);
7560
 
7561
BEGIN
7562
 
7563
	-- Check if the view is BASE VIEW
7564
	SELECT vi.BASE_VIEW INTO IsBaseView
7565
	  FROM VIEWS vi
7566
	 WHERE vi.VIEW_ID = ViewId;
7567
 
7568
	IF (IsBaseView = 'Y') THEN 
7569
		-- Get Base view content
7570
		OPEN RecordSet FOR
7571
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7572
			   pv.pv_id, 
7573
			   pkg.pkg_name, 
7574
			   pv.pkg_version, 
7575
			   pv.dlocked, 
7576
			   pv.pv_description,
7577
			   pv.BUILD_TYPE
7578
		  FROM release_content rel,
7579
		       packages pkg,
7580
		       package_versions pv
7581
		 WHERE pv.pkg_id = pkg.pkg_id
7582
		   AND rel.pv_id = pv.pv_id
7583
		   AND rel.BASE_VIEW_ID = ViewId
7584
		   AND rel.RTAG_ID = RtagId
7585
		 ORDER BY UPPER(pkg.PKG_NAME);
7586
 
7587
	ELSE	 
7588
 
7589
	 	-- Get non base view content
7590
		OPEN RecordSet FOR
7591
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7592
			   pv.pv_id, 
7593
			   pkg.pkg_name, 
7594
			   pv.pkg_version, 
7595
			   pv.dlocked, 
7596
			   pv.pv_description,
7597
			   pv.BUILD_TYPE
7598
		  FROM release_content rel,
7599
		       packages pkg,
7600
		       package_versions pv,
7601
			   VIEW_DEF vd
7602
		 WHERE pv.pkg_id = pkg.pkg_id
7603
		   AND rel.pv_id = pv.pv_id
7604
		   AND vd.VIEW_ID = ViewId
7605
		   AND vd.PKG_ID = pv.PKG_ID
7606
		   AND rel.RTAG_ID = RtagId
7607
		 ORDER BY UPPER(pkg.PKG_NAME);		 
7608
 
7609
	END IF;	 	 
7610
 
7611
 
7612
 
7613
 
7614
END;
7615
/*-------------------------------------------------------------------------------------------------------*/
7616
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7617
 
7618
	ReleaseLocation VARCHAR2(4000);
7619
	sPkgVersion VARCHAR2(4000);
7620
	nPkgId NUMBER;
7621
	sVExt VARCHAR2(4000);
7622
	IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
7623
 
7624
	-- Find package for replacement
7625
	CURSOR curReplacePkg IS
7626
    SELECT pv.PV_ID
7627
	  FROM RELEASE_CONTENT rc,
7628
	  	   PACKAGE_VERSIONS pv
7629
	 WHERE rc.PV_ID = pv.PV_ID
7630
	   AND rc.RTAG_ID = RtagId
7631
	   AND pv.PKG_ID = nPkgId
7632
	   AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
7633
    recReplacePkg curReplacePkg%ROWTYPE;
7634
 
7635
BEGIN
7636
 
7637
	-- Get is_patch, pkg_id and v_ext
7638
	SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
7639
	  FROM PACKAGE_VERSIONS pv
7640
	 WHERE pv.PV_ID = newPvId;
7641
 
7642
 
7643
	-- Never put patch in relesed area
7644
	IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
7645
 
7646
		-- Try to get a package to be replaced with this new one.
7647
		-- Use unique constraint of PKG_ID and V_EXT
7648
		OPEN curReplacePkg;
7649
	    FETCH curReplacePkg INTO recReplacePkg;
7650
 
7651
	    IF curReplacePkg%FOUND THEN
7652
			-- Replace package
7653
			REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
7654
 
7655
		ELSE
7656
			-- Add new package
7657
			INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
7658
			VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
7659
 
7660
 
7661
		    /* LOG ACTION */
7662
			SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7663
			  FROM PROJECTS proj,
7664
			  	   RELEASE_TAGS rt
7665
			 WHERE rt.PROJ_ID = proj.PROJ_ID
7666
			   AND rt.RTAG_ID = RtagId;
7667
 
7668
			SELECT pv.PKG_VERSION INTO sPkgVersion
7669
			  FROM PACKAGE_VERSIONS pv
7670
			 WHERE pv.PV_ID = newPvId;
7671
 
7672
			Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7673
 
7674
 
7675
		END IF;
7676
 
7677
		CLOSE curReplacePkg;
7678
 
7679
	END IF;
7680
 
7681
END;
7682
/*-------------------------------------------------------------------------------------------------------*/
7683
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7684
 
7685
	ReleaseLocation VARCHAR2(4000);
7686
	sPkgVersion VARCHAR2(4000);
7687
 
7688
BEGIN
7689
 
7690
	-- Replace Package
7691
    UPDATE RELEASE_CONTENT
7692
       SET pv_id = newPvId,
7693
           insert_stamp = Ora_Sysdate,
7694
           insertor_id = UserId
7695
     WHERE rtag_id = RtagId
7696
       AND pv_id = oldPvId;
7697
 
7698
 
7699
    /* LOG ACTION */
7700
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7701
	  FROM PROJECTS proj,
7702
	  	   RELEASE_TAGS rt
7703
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7704
	   AND rt.RTAG_ID = RtagId;
7705
 
7706
	SELECT pv.PKG_VERSION INTO sPkgVersion
7707
	  FROM PACKAGE_VERSIONS pv
7708
	 WHERE pv.PV_ID = newPvId;
7709
 
7710
	Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
7711
	Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7712
 
7713
END;
7714
/*-------------------------------------------------------------------------------------------------------*/
7715
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7716
	ReleaseLocation VARCHAR2(4000);
7717
 
7718
BEGIN
7719
 
7720
 
7721
	-- Delete old package
7722
	DELETE
7723
	  FROM RELEASE_CONTENT rc
7724
	 WHERE rc.PV_ID = PvId
7725
	   AND rc.RTAG_ID = RtagId;
7726
 
7727
 
7728
	/* LOG ACTION */
7729
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7730
	  FROM PROJECTS proj,
7731
	       RELEASE_TAGS rt
7732
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7733
	   AND rt.RTAG_ID = RtagId;
7734
 
7735
	Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7736
 
7737
 
7738
END;
7739
/*-------------------------------------------------------------------------------------------------------*/
7740
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7741
	ReleaseLocation VARCHAR2(4000);
7742
 
7743
	CURSOR curMatchingPackage IS
7744
    SELECT mpv.PV_ID
7745
	  FROM RELEASE_CONTENT rc,
7746
	  	   PACKAGE_VERSIONS mpv,
7747
		   PACKAGE_VERSIONS pv
7748
	 WHERE rc.PV_ID = mpv.PV_ID
7749
	   AND rc.RTAG_ID = RtagId
7750
	   AND pv.PV_ID = PvId
7751
	   AND pv.PKG_ID = mpv.PKG_ID
7752
	   AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
7753
    recMatchingPackage curMatchingPackage%ROWTYPE;
7754
 
7755
BEGIN
7756
 
7757
	OPEN curMatchingPackage;
7758
    FETCH curMatchingPackage INTO recMatchingPackage;
7759
 
7760
    IF curMatchingPackage%FOUND THEN
7761
		-- Delete old package
7762
		DELETE
7763
		  FROM RELEASE_CONTENT rc
7764
		 WHERE rc.PV_ID = recMatchingPackage.PV_ID
7765
		   AND rc.RTAG_ID = RtagId;
7766
 
7767
 
7768
		/* LOG ACTION */
7769
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7770
		  FROM PROJECTS proj,
7771
		  	   RELEASE_TAGS rt
7772
		 WHERE rt.PROJ_ID = proj.PROJ_ID
7773
		   AND rt.RTAG_ID = RtagId;
7774
 
7775
		Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7776
 
7777
	END IF;
7778
 
7779
 
7780
	CLOSE curMatchingPackage;
7781
 
7782
 
7783
 
7784
 
7785
END;
7786
/*-------------------------------------------------------------------------------------------------------*/
7787
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
7788
 
7789
	ReturnValue NUMBER;
7790
 
7791
BEGIN
7792
	SELECT rc.BASE_VIEW_ID INTO ReturnValue
7793
	  FROM RELEASE_CONTENT rc
7794
	 WHERE rc.RTAG_ID = RtagId
7795
	   AND rc.PV_ID = PvId;
7796
 
7797
	RETURN ReturnValue;
7798
END;
7799
/*-------------------------------------------------------------------------------------------------------*/
7800
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
7801
 
7802
BEGIN
7803
	-- Reset Ignore warnings up-the-tree
7804
	RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
7805
 
7806
	-- Refresh Package states
7807
	TOUCH_RELEASE ( RtagId );
7808
 
7809
END;
7810
/*-------------------------------------------------------------------------------------------------------*/
7811
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
7812
	CURSOR curReleases IS
7813
    SELECT rc.RTAG_ID
7814
	  FROM RELEASE_CONTENT rc
7815
	 WHERE rc.PV_ID = PvId;
7816
    recReleases curReleases%ROWTYPE;
7817
 
7818
BEGIN
7819
 
7820
	OPEN curReleases;
7821
    FETCH curReleases INTO recReleases;
7822
 
7823
	WHILE curReleases%FOUND
7824
	LOOP
7825
 
7826
		RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
7827
 
7828
		FETCH curReleases INTO recReleases;
7829
	END LOOP;
7830
 
7831
	CLOSE curReleases;	
7832
 
7833
END;
7834
/*-------------------------------------------------------------------------------------------------------*/
7835
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
7836
 
7837
BEGIN
7838
 
7839
	UPDATE RELEASE_CONTENT rc SET
7840
	rc.BASE_VIEW_ID = NewViewId
7841
	WHERE rc.PV_ID = PvId
7842
	  AND rc.RTAG_ID = RtagId;
7843
 
7844
END;
7845
/*-------------------------------------------------------------------------------------------------------*/
7846
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
7847
 
7848
	RowCount NUMBER;
7849
 
7850
 
7851
	CURSOR curPackageClash IS
7852
	SELECT pkg.PKG_NAME,
7853
		   er.*
7854
	  FROM (
7855
 
7856
	  		/* Get existing referenced packages */
7857
			SELECT pv.PKG_ID,
7858
			       pv.V_EXT
7859
			  FROM RELEASE_LINKS rl,
7860
			  	   RELEASE_CONTENT rc,
7861
			  	   PACKAGE_VERSIONS pv
7862
			 WHERE rl.RTAG_ID = nRtagId
7863
			   AND rl.REF_RTAG_ID = rc.RTAG_ID
7864
			   AND rc.PV_ID = pv.PV_ID
7865
 
7866
	  	    ) er,
7867
			(
7868
 
7869
			/* Get current reference packages */
7870
			SELECT pv.PKG_ID,
7871
			       pv.V_EXT
7872
			  FROM RELEASE_CONTENT rc,
7873
			  	   PACKAGE_VERSIONS pv
7874
			 WHERE rc.RTAG_ID = nRefRtagId
7875
			   AND rc.PV_ID = pv.PV_ID    
7876
 
7877
			) cr,
7878
			PACKAGES PKG
7879
	 WHERE er.PKG_ID = cr.PKG_ID
7880
	   AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7881
	   AND er.PKG_ID = pkg.PKG_ID;
7882
 
7883
	recPackageClash curPackageClash%ROWTYPE;	   
7884
 
7885
BEGIN
7886
	/*--------------- Business Rules Here -------------------*/
7887
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7888
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7889
	END IF;
7890
 
7891
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7892
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7893
	END IF;
7894
	/*-------------------------------------------------------*/
7895
	ProblemString := NULL;
7896
 
7897
 
7898
	-- Check if release already has references
7899
	SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
7900
	  FROM RELEASE_LINKS rl
7901
	 WHERE rl.RTAG_ID = nRtagId;	
7902
 
7903
 
7904
	IF RowCount > 0 THEN
7905
		-- Found existing references
7906
 
7907
		-- Make sure there is no package clashes
7908
		OPEN curPackageClash;
7909
	    FETCH curPackageClash INTO recPackageClash;
7910
 
7911
		IF curPackageClash%FOUND THEN
7912
 
7913
			ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
7914
 
7915
			WHILE curPackageClash%FOUND
7916
			LOOP
7917
				EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;	-- Do not allow variable overflow 
7918
 
7919
				ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
7920
 
7921
				FETCH curPackageClash INTO recPackageClash;
7922
			END LOOP;
7923
 
7924
		END IF;
7925
 
7926
		CLOSE curPackageClash;
7927
 
7928
 
7929
	ELSE
7930
		-- No references found, hence reference a release
7931
 
7932
 
7933
		-- Remove exising package from this release to be referenced
7934
		REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);	
7935
 
7936
 
7937
		-- Add new linked packages to release
7938
		INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
7939
		SELECT nRtagId,
7940
			   rc.PV_ID,
7941
			   rc.BASE_VIEW_ID, 
7942
			   rc.INSERT_STAMP, 
7943
			   rc.INSERTOR_ID, 
7944
			   rc.PKG_STATE
7945
		  FROM RELEASE_CONTENT rc
7946
		 WHERE rc.RTAG_ID = nRefRtagId;
7947
 
7948
 
7949
 
7950
		-- Copy ignore warnings for referenced packages
7951
		INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
7952
		SELECT nRtagId, 
7953
			   iw.PV_ID, 
7954
			   iw.DPV_ID, 
7955
			   iw.IS_PATCH_IGNORE
7956
		  FROM IGNORE_WARNINGS iw,
7957
		  	   RELEASE_CONTENT rc
7958
		 WHERE iw.RTAG_ID = rc.RTAG_ID 
7959
		   AND iw.PV_ID = rc.PV_ID
7960
		   AND rc.RTAG_ID = nRefRtagId;	 
7961
 
7962
 
7963
 
7964
		-- Reference release 
7965
		INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
7966
		VALUES ( nRtagId, nRefRtagId );		 
7967
 
7968
 
7969
		-- Refresh Package states
7970
		TOUCH_RELEASE ( nRtagId );
7971
 
7972
	END IF;	 
7973
 
7974
 
7975
END;
7976
/*-------------------------------------------------------------------------------------------------------*/
7977
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
7978
 
7979
 
7980
BEGIN
7981
	/*--------------- Business Rules Here -------------------*/
7982
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7983
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7984
	END IF;
7985
 
7986
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7987
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7988
	END IF;
7989
 
7990
	/*-------------------------------------------------------*/
7991
 
7992
 
7993
	-- Remove ignore warnings for those packages who use referenced packages
7994
	DELETE FROM IGNORE_WARNINGS iw
7995
	 WHERE iw.RTAG_ID = nRtagId
7996
	   AND iw.DPV_ID IN (
7997
	   						SELECT dep.DPV_ID
7998
							  FROM (
7999
 
8000
									/* Get referenced packages */
8001
									SELECT pv.PKG_ID,
8002
									       pv.V_EXT
8003
									  FROM RELEASE_CONTENT rc,
8004
									  	   PACKAGE_VERSIONS pv
8005
									 WHERE rc.RTAG_ID = nRefRtagId
8006
									   AND rc.PV_ID = pv.PV_ID    
8007
 
8008
									) cr,
8009
									(
8010
 
8011
									/* Get all dependencies for current release */
8012
									SELECT DISTINCT 
8013
										   pv.PKG_ID,
8014
										   pv.V_EXT,
8015
										   dep.DPV_ID
8016
									  FROM RELEASE_CONTENT rc,
8017
										   PACKAGE_DEPENDENCIES dep,
8018
										   PACKAGE_VERSIONS pv
8019
									 WHERE rc.RTAG_ID = nRtagId
8020
									   AND rc.PV_ID = dep.PV_ID		
8021
									   AND dep.PV_ID = pv.PV_ID	   
8022
 
8023
									) dep
8024
							 WHERE dep.PKG_ID = cr.PKG_ID
8025
							   AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8026
	   					);  
8027
 
8028
 
8029
 
8030
 
8031
	-- Remove ignore warnings for those package which are going to be replaced with the reference
8032
	DELETE FROM IGNORE_WARNINGS iw
8033
	 WHERE iw.RTAG_ID = nRtagId
8034
	   AND iw.PV_ID IN (
8035
						SELECT pv.PV_ID
8036
						  FROM (
8037
 
8038
								/* Get referenced packages */
8039
								SELECT pv.PKG_ID,
8040
								       pv.V_EXT
8041
								  FROM RELEASE_CONTENT rc,
8042
								  	   PACKAGE_VERSIONS pv
8043
								 WHERE rc.RTAG_ID = nRefRtagId
8044
								   AND rc.PV_ID = pv.PV_ID    
8045
 
8046
								) cr,
8047
								RELEASE_CONTENT rc,
8048
								PACKAGE_VERSIONS pv
8049
						 WHERE pv.PKG_ID = cr.PKG_ID
8050
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8051
						   AND rc.RTAG_ID = nRtagId
8052
						   AND rc.PV_ID = pv.PV_ID
8053
						);			
8054
 
8055
 
8056
 
8057
 
8058
 
8059
	-- Remove matching packages from release
8060
	DELETE FROM RELEASE_CONTENT rc
8061
	 WHERE rc.RTAG_ID = nRtagId
8062
	   AND rc.PV_ID IN (
8063
						SELECT pv.PV_ID
8064
						  FROM (
8065
 
8066
								/* Get referenced packages */
8067
								SELECT pv.PKG_ID,
8068
								       pv.V_EXT
8069
								  FROM RELEASE_CONTENT rc,
8070
								  	   PACKAGE_VERSIONS pv
8071
								 WHERE rc.RTAG_ID = nRefRtagId
8072
								   AND rc.PV_ID = pv.PV_ID    
8073
 
8074
								) cr,
8075
								RELEASE_CONTENT rc,
8076
								PACKAGE_VERSIONS pv
8077
						 WHERE pv.PKG_ID = cr.PKG_ID
8078
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8079
						   AND rc.RTAG_ID = nRtagId
8080
						   AND rc.PV_ID = pv.PV_ID
8081
						);	
8082
 
8083
 
8084
 
8085
 
8086
 
8087
	-- Remove Reference release 
8088
	DELETE 
8089
	  FROM RELEASE_LINKS rl
8090
	 WHERE rl.RTAG_ID = nRtagId
8091
	   AND rl.REF_RTAG_ID = nRefRtagId;
8092
 
8093
 
8094
	-- Refresh Package states
8095
	TOUCH_RELEASE ( nRtagId );
8096
 
8097
 
8098
END;
8099
/*-------------------------------------------------------------------------------------------------------*/
8100
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
8101
 
8102
	cReleaseMode CHAR(1);
8103
	cPvMode CHAR(1);
8104
 
8105
BEGIN
8106
 
8107
	-- Get Release Mode
8108
	SELECT rt.OFFICIAL INTO cReleaseMode
8109
	  FROM RELEASE_TAGS rt
8110
	 WHERE rt.RTAG_ID = RtagId;
8111
 
8112
 
8113
	-- Get Package Mode
8114
	SELECT pv.DLOCKED INTO cPvMode
8115
	  FROM PACKAGE_VERSIONS pv
8116
	 WHERE pv.PV_ID = PvId;	 
8117
 
8118
	-- Only check if package is locked 
8119
	IF (cPvMode = 'Y') THEN
8120
 
8121
		IF (cReleaseMode != 'N') AND (Permission != 'Y')
8122
		THEN
8123
			RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
8124
 
8125
		END IF;
8126
 
8127
	END IF;	
8128
 
8129
 
8130
END;
8131
/*-------------------------------------------------------------------------------------------------------*/
8132
END PK_RELEASE_TEST;
1374 dpurdie 8133
/
8134
--------------------------------------------------------
8135
--  DDL for Package Body PK_APP_UTILS
8136
--------------------------------------------------------
1373 dpurdie 8137
 
8138
  CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS
8139
 
8140
/*
8141
------------------------------
8142
||  Last Modified:  S.Vukovic
8143
||  Modified Date:  26/Apr/2005
8144
||  Body Version:   1.0
8145
------------------------------
8146
*/
8147
 
8148
 
8149
/*-------------------------------------------------------------------------------------------------------*/
8150
PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur)   IS
8151
 
8152
 
8153
BEGIN
8154
 
8155
 
8156
	IF (NOT RtagId IS NULL) THEN
8157
		-- Case with RTAG_ID present
8158
		OPEN records FOR
8159
		SELECT rt.PROJ_ID,
8160
			   rt.RTAG_ID AS RTAG_ID
8161
		  FROM RELEASE_TAGS rt
8162
		 WHERE rt.RTAG_ID = TO_NUMBER(RtagId);
8163
 
8164
	ELSIF (NOT ProjId IS NULL) THEN
8165
		-- Case with PROJ_ID present
8166
		OPEN records FOR
8167
		SELECT TO_NUMBER(ProjId) AS PROJ_ID,
8168
			   -1 AS RTAG_ID
8169
		  FROM DUAL;
8170
 
8171
	ELSE
8172
		-- Case with none present
8173
		OPEN records FOR
8174
		SELECT -1 AS PROJ_ID,
8175
			   -1 AS RTAG_ID
8176
		  FROM DUAL;
8177
 
8178
	END IF;
8179
 
8180
 
8181
 
8182
 
8183
   	--RETURN records;
8184
 
8185
END;
8186
/*-------------------------------------------------------------------------------------------------------*/
8187
END PK_APP_UTILS;
1374 dpurdie 8188
/
8189
--------------------------------------------------------
8190
--  DDL for Package Body PK_RELEASE
8191
--------------------------------------------------------
1373 dpurdie 8192
 
8193
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS
8194
 
8195
/*-------------------------------------------------------------------------------------------------------*/
8196
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
8197
 
8198
RtagId NUMBER;
8199
ParentRtagId NUMBER;
8200
RecCount NUMBER := 0;
8201
VtreeId NUMBER;
8202
 
8203
BEGIN
8204
   /*--------------- Business Rules Here -------------------*/
8205
   -- Check for missing parameters
8206
   IF (sReleaseName IS NULL) OR (nUserId IS NULL)
8207
   THEN
8208
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
8209
 
8210
   END IF;
8211
 
8212
 
8213
   -- Check for duplicate Release Names
8214
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8215
     FROM RELEASE_TAGS rt
8216
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8217
      AND rt.PROJ_ID = nProjId;
8218
 
8219
   IF (RecCount > 0) THEN
8220
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8221
   END IF;
8222
   /*-------------------------------------------------------*/
8223
 
8224
 
8225
   -- Get rtag_id
8226
   SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
8227
 
8228
   SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;
8229
 
8230
 
8231
 
8232
   -- Get Parent RtagId
8233
   ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
8234
 
8235
   -- If the parent RTAG is NOT in this project then we cannot use it.
8236
   -- We must re-assign the parent to be the new release's RTAG_ID instead
8237
   -- else it will not show up in the projects release tree (DEVI-55480)
8238
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8239
     FROM RELEASE_TAGS rt
8240
    WHERE rt.RTAG_ID = ParentRtagId
8241
      AND rt.PROJ_ID = nProjId;
8242
 
8243
   IF (RecCount = 0) THEN
8244
     ParentRtagId := RtagId;
8245
   END IF;
8246
 
8247
   -- Create new release
8248
   INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,
8249
                        OFFICIAL, REBUILD_ENV, REBUILD_STAMP,
8250
                        PARENT_RTAG_ID, PROJ_ID, VTREE_ID )
8251
   VALUES ( RtagId,
8252
          sReleaseName,
8253
          sReleaseComments,
8254
          ORA_SYSDATE,
8255
          nUserId,
8256
          'N',
8257
          'N',
8258
          0,
8259
          ParentRtagId,
8260
          nProjId,
8261
          VtreeId );
8262
 
8263
   -- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)
8264
   IF (NOT nSourceRtagId IS NULL)
8265
   THEN
8266
      UPDATE RELEASE_TAGS rtd
8267
      SET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)
8268
      WHERE rtd.RTAG_ID = RtagId;
8269
   END IF;
8270
 
8271
   -- Update display Order
8272
   UPDATE_DISPLAY_ORDER ( nProjId );
8273
 
8274
   /* Log Project Action */
8275
   Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
8276
 
8277
 
8278
   -- Import Release Contents
8279
   IF (NOT nSourceRtagId IS NULL) THEN
8280
      Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
8281
   END IF;
8282
 
8283
END;
8284
/*-------------------------------------------------------------------------------------------------------*/
8285
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
8286
 
8287
 
8288
BEGIN
8289
 
8290
 
8291
   /*--------------- Business Rules Here -------------------*/
8292
   /*-------------------------------------------------------*/
8293
 
8294
   UPDATE RELEASE_TAGS urt SET
8295
   urt.DISPLAY_ORDER = (
8296
                  SELECT qry.REC_NUM
8297
                    FROM (
8298
                        SELECT rel.*, ROWNUM AS REC_NUM
8299
                          FROM (
8300
 
8301
                                SELECT rt.RTAG_ID,
8302
                                    rt.DISPLAY_ORDER,
8303
                                     DECODE( rt.PARENT_RTAG_ID,
8304
                                             rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
8305
                                FROM RELEASE_TAGS rt
8306
                               WHERE rt.PROJ_ID = nProjId
8307
 
8308
                                ) rel
8309
                        START WITH rel.PARENT_RTAG_ID = 0
8310
                        CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID
8311
                        ORDER SIBLINGS BY rel.DISPLAY_ORDER
8312
                        ) qry
8313
                     WHERE qry.RTAG_ID = urt.RTAG_ID
8314
                  )
8315
   WHERE urt.PROJ_ID = nProjId;
8316
 
8317
END;
8318
/*-------------------------------------------------------------------------------------------------------*/
8319
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
8320
 
8321
   nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
8322
   SeqNum NUMBER;
8323
 
8324
BEGIN
8325
 
8326
 
8327
   /*--------------- Business Rules Here -------------------*/
8328
   /*-------------------------------------------------------*/
8329
 
8330
   nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
8331
 
8332
   -- Set start sequence number
8333
   SeqNum := 1;
8334
 
8335
   FOR i IN 1..nIdCollector.COUNT
8336
   LOOP
8337
 
8338
      -- Update new display order
8339
      UPDATE RELEASE_TAGS rt SET
8340
         rt.DISPLAY_ORDER = SeqNum
8341
       WHERE rt.PROJ_ID = nProjId
8342
         AND rt.RTAG_ID = nIdCollector(i);
8343
 
8344
      SeqNum := SeqNum + 1;
8345
 
8346
   END LOOP;
8347
 
8348
END;
8349
/*-------------------------------------------------------------------------------------------------------*/
8350
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
8351
 
8352
RecCount NUMBER := 0;
8353
ProjId NUMBER;
8354
 
8355
BEGIN
8356
 
8357
 
8358
   /*--------------- Business Rules Here -------------------*/
8359
   -- Check for missing parameters
8360
   IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
8361
   THEN
8362
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
8363
 
8364
   END IF;
8365
 
8366
 
8367
   -- Check for duplicate Release Names
8368
   SELECT rt.PROJ_ID INTO ProjId
8369
     FROM RELEASE_TAGS rt
8370
    WHERE rt.RTAG_ID = nRtagId;
8371
 
8372
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8373
     FROM RELEASE_TAGS rt
8374
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8375
      AND rt.RTAG_ID != nRtagId
8376
      AND rt.PROJ_ID = ProjId;
8377
 
8378
 
8379
   IF (RecCount > 0) THEN
8380
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8381
   END IF;
8382
   /*-------------------------------------------------------*/
8383
 
8384
 
8385
 
8386
   -- Update release details
8387
   UPDATE RELEASE_TAGS rt SET
8388
   rt.RTAG_NAME = sReleaseName,
8389
   rt.DESCRIPTION = sReleaseComments,
8390
   rt.PARENT_RTAG_ID = nParentRtagId,
8391
   rt.ASSOC_MASS_REF = nMASSRtagId,
8392
   rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,
8393
   rt.OWNER_EMAIL = sOwnerEmail,
8394
   rt.PRODUCT_STATE_USED = cState
8395
   WHERE rt.RTAG_ID = nRtagId;
8396
 
8397
   -- Update display Order
8398
   UPDATE_DISPLAY_ORDER ( ProjId );
8399
 
8400
   /* Log Project Action */
8401
   Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
8402
 
8403
 
8404
 
8405
 
8406
END;
8407
/*-------------------------------------------------------------------------------------------------------*/
8408
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8409
 
8410
   RecCount NUMBER := 0;
8411
   sReleaseId VARCHAR2(4000);
8412
   ProjId NUMBER;
8413
 
8414
BEGIN
8415
   /*--------------- Business Rules Here -------------------*/
8416
   IF (nRtagId IS NULL)
8417
   THEN
8418
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8419
   END IF;
8420
 
8421
 
8422
 
8423
   -- Check for any kids
8424
   SELECT COUNT( rt.RTAG_ID ) INTO RecCount
8425
     FROM RELEASE_TAGS rt
8426
    WHERE rt.PARENT_RTAG_ID = nRtagId
8427
      AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
8428
 
8429
   IF (RecCount > 0) THEN
8430
      RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
8431
   END IF;
8432
   /*-------------------------------------------------------*/
8433
 
8434
   -- Clear the release contents
8435
   Clean_Release_Contents ( nRtagId, nUserId );
8436
 
8437
   /* Log Project Action */
8438
   SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
8439
     FROM RELEASE_TAGS rt
8440
    WHERE rt.RTAG_ID = nRtagId;
8441
 
8442
   Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
8443
 
8444
 
8445
   -- Remove Release
8446
   DELETE
8447
     FROM RELEASE_TAGS rt
8448
    WHERE rt.RTAG_ID = nRtagId;
8449
 
8450
 
8451
 
8452
END;
8453
/*-------------------------------------------------------------------------------------------------------*/
8454
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
8455
 
8456
   sSourceLocation VARCHAR2(4000);
8457
   sTargetLocation VARCHAR2(4000);
8458
   ProjId NUMBER;
8459
   cReleaseMode CHAR(1);
8460
   RconId NUMBER;
8461
 
8462
   -- this cursor gets the source release daemon configurations, ensuring that the
8463
   -- first record will be the master daemon, and subsequent records will be the slaves.
8464
   CURSOR curSrcReleaseConfigs IS
8465
    SELECT daemon_hostname, gbe_id, gbe_buildfilter
8466
     FROM RELEASE_CONFIG rc
8467
    WHERE rc.RTAG_ID = nSourceRtagId
8468
    ORDER BY rc.daemon_mode;
8469
    recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;
8470
 
8471
    -- this cursor looks for target release daemons
8472
   CURSOR curTgtReleaseConfigs IS
8473
    SELECT rcon_id
8474
     FROM RELEASE_CONFIG rc
8475
    WHERE rc.RTAG_ID = nTargetRtagId;
8476
    recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;
8477
 
8478
    -- this cursor looks for target release daemon run level entries
8479
   CURSOR curTgtReleaseConfigRunLevel IS
8480
    SELECT current_run_level
8481
     FROM RUN_LEVEL rl
8482
    WHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;
8483
    recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;
8484
 
8485
BEGIN
8486
   /*--------------- Business Rules Here -------------------*/
8487
   IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
8488
   THEN
8489
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
8490
   END IF;
8491
 
8492
   IF (nSourceRtagId = nTargetRtagId) THEN
8493
      RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
8494
   END IF;
8495
 
8496
 
8497
   -- Check if Target release is in OPEN mode
8498
   SELECT rt.OFFICIAL  INTO  cReleaseMode
8499
     FROM RELEASE_TAGS rt
8500
    WHERE rt.RTAG_ID = nTargetRtagId;
8501
 
8502
   IF (cReleaseMode != 'N') THEN
8503
      RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
8504
   END IF;
8505
 
8506
   -- check that the target release's daemons are all paused before we allow an import operation
8507
   OPEN curTgtReleaseConfigs;
8508
   FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;
8509
 
8510
   WHILE curTgtReleaseConfigs%FOUND
8511
   LOOP
8512
      OPEN curTgtReleaseConfigRunLevel;
8513
      FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;
8514
      IF curTgtReleaseConfigRunLevel%FOUND THEN
8515
         IF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR
8516
            (recTgtReleaseConfigRunLevel.current_run_level <> 2) THEN
8517
            RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8518
         END IF;
8519
      ELSE
8520
         -- we don't know what the daemon run level is so err on the side of caution
8521
         RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8522
      END IF;
8523
      CLOSE curTgtReleaseConfigRunLevel;
8524
 
8525
      FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;
8526
   END LOOP;
8527
 
8528
   CLOSE curTgtReleaseConfigs;
8529
 
8530
 
8531
   /*-------------------------------------------------------*/
8532
 
8533
   -- Clean target contents
8534
   Clean_Release_Contents ( nTargetRtagId, nUserId );
8535
 
8536
 
8537
   -- Import Released Area Contents
8538
   INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )
8539
   SELECT nTargetRtagId AS RTAG_ID,
8540
         rc.PV_ID,
8541
         rc.BASE_VIEW_ID,
8542
         rc.INSERT_STAMP,
8543
         rc.INSERTOR_ID,
8544
         rc.PKG_STATE,
8545
         rc.PKG_ID,
8546
         rc.DEPRECATED_STATE
8547
     FROM RELEASE_CONTENT rc
8548
    WHERE rc.RTAG_ID = nSourceRtagId;
8549
 
8550
 
8551
   -- Import any Pegged Version settings from the source release
8552
   INSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )
8553
   SELECT nTargetRtagId AS RTAG_ID,
8554
          pegv.PV_ID
8555
     FROM PEGGED_VERSIONS pegv
8556
    WHERE pegv.RTAG_ID = nSourceRtagId;
8557
 
8558
   -- Import any Advisory Ripple settings from the source release
8559
   INSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )
8560
   SELECT nTargetRtagId AS RTAG_ID,
8561
          avr.PV_ID
8562
     FROM ADVISORY_RIPPLE avr
8563
    WHERE avr.RTAG_ID = nSourceRtagId;
8564
 
8565
 
8566
   --Import Release Configuration Information
8567
   OPEN curSrcReleaseConfigs;
8568
   FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8569
 
8570
   WHILE curSrcReleaseConfigs%FOUND
8571
   LOOP
8572
      -- add a daemon to the target release
8573
      PK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );
8574
 
8575
      FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8576
   END LOOP;
8577
 
8578
   CLOSE curSrcReleaseConfigs;
8579
 
8580
 
8581
 
8582
   -- Import Ignore Warning states
8583
   INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
8584
   SELECT nTargetRtagId AS RTAG_ID,
8585
          igw.PV_ID,
8586
          igw.DPV_ID
8587
     FROM IGNORE_WARNINGS igw
8588
    WHERE igw.rtag_id = nSourceRtagId;
8589
 
8590
 
8591
   /* Log Project Action */
8592
   -- Get Source Location
8593
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
8594
     FROM RELEASE_TAGS rt,
8595
           PROJECTS pr
8596
    WHERE rt.PROJ_ID = pr.PROJ_ID
8597
      AND rt.RTAG_ID = nSourceRtagId;
8598
 
8599
   -- Get Target Location
8600
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
8601
     FROM RELEASE_TAGS rt,
8602
           PROJECTS pr
8603
    WHERE rt.PROJ_ID = pr.PROJ_ID
8604
      AND rt.RTAG_ID = nTargetRtagId;
8605
 
8606
   -- Get project id
8607
   SELECT rt.PROJ_ID  INTO  ProjId
8608
     FROM RELEASE_TAGS rt
8609
    WHERE rt.RTAG_ID = nTargetRtagId;
8610
 
8611
   Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );
8612
END;
8613
 
8614
 
8615
 
8616
/*-------------------------------------------------------------------------------------------------------*/
8617
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8618
 
8619
   RecCount NUMBER;
8620
        rconIdList VARCHAR2(4000);
8621
 
8622
BEGIN
8623
   /*--------------- Business Rules Here -------------------*/
8624
   IF (nRtagId IS NULL)
8625
   THEN
8626
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8627
   END IF;
8628
 
8629
 
8630
   -- Check if other release references this release
8631
   SELECT COUNT( rl.RTAG_ID ) INTO RecCount
8632
     FROM RELEASE_LINKS rl
8633
    WHERE rl.REF_RTAG_ID = nRtagId;
8634
 
8635
   IF (RecCount > 0) THEN
8636
      RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
8637
   END IF;
8638
   /*-------------------------------------------------------*/
8639
 
8640
   -- Delete Release links
8641
   DELETE
8642
     FROM RELEASE_LINKS rl
8643
    WHERE rl.RTAG_ID = nRtagId;
8644
 
8645
   -- Delete ignore warning
8646
   DELETE
8647
     FROM IGNORE_WARNINGS iw
8648
    WHERE iw.RTAG_ID = nRtagId;
8649
 
8650
 
8651
   -- Delete Build Order cached calculations
8652
   DELETE
8653
     FROM BUILD_ORDER bo
8654
    WHERE bo.RTAG_ID = nRtagId;
8655
 
8656
 
8657
   -- Delete Notification History
8658
   DELETE
8659
     FROM NOTIFICATION_HISTORY nh
8660
    WHERE nh.RTAG_ID = nRtagId;
8661
 
8662
 
8663
   -- Delete Released Area Contents
8664
   DELETE
8665
     FROM RELEASE_CONTENT rc
8666
    WHERE rc.RTAG_ID = nRtagId;
8667
 
8668
 
8669
   -- Delete Work In Progress Area Contents
8670
   DELETE
8671
     FROM WORK_IN_PROGRESS wip
8672
    WHERE wip.RTAG_ID = nRtagId;
8673
 
8674
 
8675
   -- Delete Pending Area Contents
8676
   DELETE
8677
     FROM PLANNED pl
8678
    WHERE pl.RTAG_ID = nRtagId;
8679
 
8680
   -- Delete Deprecated Packages
8681
   DELETE
8682
     FROM DEPRECATED_PACKAGES dp
8683
    WHERE dp.RTAG_ID = nRtagId;
8684
 
8685
   -- Delete Project Action Log
8686
   DELETE
8687
     FROM PROJECT_ACTION_LOG pal
8688
    WHERE pal.RTAG_ID = nRtagId;
8689
 
8690
   -- Delete Do Not Ripple Contents
8691
   DELETE
8692
     FROM DO_NOT_RIPPLE dnr
8693
    WHERE dnr.RTAG_ID = nRtagId;
8694
 
8695
   -- Delete Dash Board Contents
8696
   DELETE
8697
     FROM DASH_BOARD db
8698
    WHERE db.RTAG_ID = nRtagId;
8699
 
8700
   -- Delete Advisory Ripple Contents
8701
   DELETE
8702
     FROM ADVISORY_RIPPLE adr
8703
    WHERE adr.RTAG_ID = nRtagId;
8704
 
8705
   -- Delete Archive Action Log
8706
   DELETE
8707
     FROM ARCHIVE_ACTION_LOG aal
8708
    WHERE aal.RTAG_ID = nRtagId;
8709
 
8710
   -- Delete Daemons For This Release
8711
   FOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )
8712
   LOOP
8713
      rconIdList := rconIdList || rcon.RCON_ID || ',';
8714
   END LOOP;
8715
 
8716
   pk_buildapi.DELETE_DAEMON(rconIdList);
8717
 
8718
   -- Delete Release Metrics Contents
8719
   DELETE
8720
     FROM RELEASE_METRICS rm
8721
    WHERE rm.RTAG_ID = nRtagId;
8722
 
8723
   -- Delete Release Configuration Contents
8724
   DELETE
8725
     FROM RELEASE_CONFIG rc
8726
    WHERE rc.RTAG_ID = nRtagId;
8727
 
8728
   -- Delete Pegged Version Contents
8729
   DELETE
8730
     FROM PEGGED_VERSIONS pegv
8731
    WHERE pegv.RTAG_ID = nRtagId;
8732
 
8733
END;
8734
/*-------------------------------------------------------------------------------------------------------*/
8735
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
8736
 
8737
   nSourceParentRtagId NUMBER;
8738
 
8739
BEGIN
8740
   /*--------------- Business Rules Here -------------------*/
8741
   IF (nRtagId IS NULL) OR (cIsBranch IS NULL)
8742
   THEN
8743
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
8744
   END IF;
8745
   /*-------------------------------------------------------*/
8746
 
8747
 
8748
   IF ( nSourceRtagId IS NULL ) THEN
8749
      -- Create new on main branch
8750
      RETURN nRtagId;
8751
 
8752
   ELSE
8753
      -- Create from source rtag_id
8754
 
8755
      -- Find parent of Source RtagId
8756
      SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
8757
        FROM RELEASE_TAGS rt
8758
       WHERE rt.RTAG_ID = nSourceRtagId;
8759
 
8760
      IF (UPPER(cIsBranch) = 'Y') THEN
8761
         RETURN nSourceRtagId;
8762
      ELSE
8763
         IF (nSourceRtagId = nSourceParentRtagId) THEN
8764
            RETURN nRtagId;
8765
         ELSE
8766
            RETURN nSourceParentRtagId;
8767
         END IF;
8768
      END IF;
8769
 
8770
 
8771
   END IF;
8772
 
8773
 
8774
END;
8775
/*-------------------------------------------------------------------------------------------------------*/
8776
 
8777
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
8778
--                       sNextVersion OUT VARCHAR2,
8779
--                       nNextLifeCycle OUT NUMBER,
8780
--                       nParentRtagId OUT NUMBER,
8781
--                       nProjId IN NUMBER ) IS
8782
--
8783
-- SourceBranchCount NUMBER;
8784
-- ProjRootVersion VARCHAR2(4000);
8785
-- LastLifeCycle NUMBER;
8786
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
8787
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
8788
--
8789
-- SourceProjId NUMBER;
8790
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
8791
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
8792
--
8793
-- BEGIN
8794
--    /*--------------- Business Rules Here -------------------*/
8795
--    /*-------------------------------------------------------*/
8796
--
8797
--
8798
--    BEGIN
8799
--       -- Get Project root version
8800
--       SELECT rt.RTAG_VERSION INTO ProjRootVersion
8801
--         FROM RELEASE_TAGS rt
8802
--        WHERE rt.PROJ_ID = nProjId
8803
--          AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
8804
--
8805
--       EXCEPTION
8806
--       WHEN NO_DATA_FOUND THEN
8807
--       ProjRootVersion := ROOT_VERSION_NOT_FOUND;
8808
--    END;
8809
--
8810
--
8811
--
8812
--
8813
--    BEGIN
8814
--       -- Get info for source rtagid
8815
--       SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
8816
--         FROM RELEASE_TAGS rt
8817
--        WHERE rt.RTAG_ID = nSourceRtagId;
8818
--
8819
--       EXCEPTION
8820
--       WHEN NO_DATA_FOUND THEN
8821
--       SourceProjId := NULL;
8822
--       SourceVersion := NULL;
8823
--       SourceLifeCycle := NULL;
8824
--    END;
8825
--
8826
--
8827
--    IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
8828
--
8829
--       /* Blank Release Required  OR  Release imported from other project */
8830
--
8831
--       IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
8832
--          /* No Releases found in the project, hence calculate next version available.  */
8833
--
8834
--          -- Set parent rtag
8835
--          nParentRtagId := SET_PARENT_AS_YOURSELF;
8836
--
8837
--
8838
--          BEGIN
8839
--             -- Get Next Available Global Root Version
8840
--             SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
8841
--               FROM RELEASE_TAGS rt
8842
--              WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
8843
--
8844
--             -- Set Next Rtag Version
8845
--             sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
8846
--
8847
--             -- Restart Lifecycle
8848
--             nNextLifeCycle := 0;
8849
--
8850
--
8851
--             EXCEPTION
8852
--             WHEN NO_DATA_FOUND THEN
8853
--             -- Release Manager has no releases, hence start from 1
8854
--             sNextVersion := '1';
8855
--             nNextLifeCycle := 0;
8856
--
8857
--          END;
8858
--
8859
--
8860
--
8861
--       ELSE
8862
--          /* Releases found in this project. */
8863
--
8864
--          SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
8865
--            FROM (
8866
--                SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
8867
--                  FROM RELEASE_TAGS rt
8868
--                 WHERE rt.PROJ_ID = nProjId
8869
--                   AND rt.RTAG_VERSION = ProjRootVersion
8870
--                 ORDER BY rt.RTAG_LIFE_CYCLE DESC
8871
--                  ) qry
8872
--           WHERE ROWNUM = 1;
8873
--
8874
--
8875
--          -- Set same Rtag Version
8876
--          sNextVersion := ProjRootVersion;
8877
--
8878
--          -- Increase Lifecycle
8879
--          nNextLifeCycle := LastLifeCycle + 1;
8880
--
8881
--       END IF;
8882
--
8883
--
8884
--
8885
--    ELSE
8886
--       /* Create Release From other release within this project */
8887
--
8888
--       -- Set parent id
8889
--       nParentRtagId := nSourceRtagId;
8890
--
8891
--
8892
--       -- Get number of source branches
8893
--       SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
8894
--         FROM RELEASE_TAGS rt
8895
--        WHERE rt.PROJ_ID = nProjId
8896
--          AND rt.PARENT_RTAG_ID = nSourceRtagId;
8897
--
8898
--
8899
--       IF SourceBranchCount = 0 THEN
8900
--          /* Release is Head (i.e. Tip on its branch ) */
8901
--
8902
--          -- Set Next Rtag Version
8903
--          sNextVersion := SourceVersion;
8904
--
8905
--          -- Increase Lifecycle
8906
--          nNextLifeCycle := SourceLifeCycle + 1;
8907
--
8908
--
8909
--       ELSIF SourceBranchCount = 1 THEN
8910
--          /* Release IS NOT Head, but can be branched */
8911
--
8912
--          -- Set Next Rtag Version
8913
--          sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
8914
--
8915
--          -- Reset Lifecycle to 1
8916
--          nNextLifeCycle := 1;
8917
--
8918
--
8919
--       ELSE
8920
--          -- Limit of two branches is reached
8921
--          RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');
8922
--
8923
--       END IF;
8924
--
8925
--
8926
--
8927
--
8928
--
8929
--
8930
--    END IF;
8931
--
8932
--
8933
-- END;
8934
 
8935
/*-------------------------------------------------------------------------------------------------------*/
8936
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
8937
 
8938
   IsBaseView CHAR(1);
8939
 
8940
BEGIN
8941
 
8942
   -- Check if the view is BASE VIEW
8943
   SELECT vi.BASE_VIEW INTO IsBaseView
8944
     FROM VIEWS vi
8945
    WHERE vi.VIEW_ID = ViewId;
8946
 
8947
   IF (IsBaseView = 'Y') THEN
8948
      -- Get Base view content
8949
      OPEN RecordSet FOR
8950
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8951
            rel.deprecated_state,
8952
            pv.pv_id,
8953
            pkg.pkg_name,
8954
            pv.pkg_version,
8955
            pv.dlocked,
8956
            pv.pv_description,
8957
            pv.BUILD_TYPE
8958
        FROM release_content rel,
8959
             packages pkg,
8960
             package_versions pv
8961
       WHERE pv.pkg_id = pkg.pkg_id
8962
         AND rel.pv_id = pv.pv_id
8963
         AND rel.BASE_VIEW_ID = ViewId
8964
         AND rel.RTAG_ID = RtagId
8965
       ORDER BY UPPER(pkg.PKG_NAME);
8966
 
8967
   ELSE
8968
 
8969
       -- Get non base view content
8970
      OPEN RecordSet FOR
8971
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8972
            rel.deprecated_state,
8973
            pv.pv_id,
8974
            pkg.pkg_name,
8975
            pv.pkg_version,
8976
            pv.dlocked,
8977
            pv.pv_description,
8978
            pv.BUILD_TYPE
8979
        FROM release_content rel,
8980
             packages pkg,
8981
             package_versions pv,
8982
            VIEW_DEF vd
8983
       WHERE pv.pkg_id = pkg.pkg_id
8984
         AND rel.pv_id = pv.pv_id
8985
         AND vd.VIEW_ID = ViewId
8986
         AND vd.PKG_ID = pv.PKG_ID
8987
         AND rel.RTAG_ID = RtagId
8988
       ORDER BY UPPER(pkg.PKG_NAME);
8989
 
8990
   END IF;
8991
 
8992
 
8993
 
8994
 
8995
END;
8996
/*-------------------------------------------------------------------------------------------------------*/
8997
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
8998
 
8999
   ReleaseLocation VARCHAR2(4000);
9000
   sPkgVersion VARCHAR2(4000);
9001
   nPkgId NUMBER;
9002
   sVExt VARCHAR2(4000);
9003
   IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
9004
 
9005
   -- Find package for replacement
9006
   CURSOR curReplacePkg IS
9007
    SELECT pv.PV_ID
9008
     FROM RELEASE_CONTENT rc,
9009
           PACKAGE_VERSIONS pv
9010
    WHERE rc.PV_ID = pv.PV_ID
9011
      AND rc.RTAG_ID = RtagId
9012
      AND pv.PKG_ID = nPkgId
9013
      AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
9014
    recReplacePkg curReplacePkg%ROWTYPE;
9015
 
9016
BEGIN
9017
 
9018
   -- Get is_patch, pkg_id and v_ext
9019
   SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
9020
     FROM PACKAGE_VERSIONS pv
9021
    WHERE pv.PV_ID = newPvId;
9022
 
9023
 
9024
   -- Never put patch in relesed area
9025
   IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
9026
 
9027
      -- Try to get a package to be replaced with this new one.
9028
      -- Use unique constraint of PKG_ID and V_EXT
9029
      OPEN curReplacePkg;
9030
       FETCH curReplacePkg INTO recReplacePkg;
9031
 
9032
       IF curReplacePkg%FOUND THEN
9033
         -- Replace package
9034
         REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
9035
 
9036
      ELSE
9037
         -- Add new package
9038
         INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
9039
         VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
9040
 
9041
 
9042
          /* LOG ACTION */
9043
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9044
           FROM PROJECTS proj,
9045
                 RELEASE_TAGS rt
9046
          WHERE rt.PROJ_ID = proj.PROJ_ID
9047
            AND rt.RTAG_ID = RtagId;
9048
 
9049
         SELECT pv.PKG_VERSION INTO sPkgVersion
9050
           FROM PACKAGE_VERSIONS pv
9051
          WHERE pv.PV_ID = newPvId;
9052
 
9053
         Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9054
 
9055
 
9056
      END IF;
9057
 
9058
      CLOSE curReplacePkg;
9059
 
9060
   END IF;
9061
 
9062
END;
9063
/*-------------------------------------------------------------------------------------------------------*/
9064
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9065
 
9066
   ReleaseLocation VARCHAR2(4000);
9067
   sPkgVersion VARCHAR2(4000);
9068
 
9069
BEGIN
9070
 
9071
   -- Replace Package
9072
    UPDATE RELEASE_CONTENT
9073
       SET pv_id = newPvId,
9074
           insert_stamp = Ora_Sysdate,
9075
           insertor_id = UserId,
9076
         product_state = NULL
9077
     WHERE rtag_id = RtagId
9078
       AND pv_id = oldPvId;
9079
 
9080
   -- update the pegging table
9081
   UPDATE PEGGED_VERSIONS
9082
      SET pv_id = newPvId
9083
     WHERE rtag_id = RtagId
9084
       AND pv_id = oldPvId;
9085
 
9086
   -- update the advisory_ripple table
9087
   UPDATE ADVISORY_RIPPLE
9088
      SET pv_id = newPvId
9089
     WHERE rtag_id = RtagId
9090
       AND pv_id = oldPvId;
9091
 
9092
    /* LOG ACTION */
9093
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9094
     FROM PROJECTS proj,
9095
           RELEASE_TAGS rt
9096
    WHERE rt.PROJ_ID = proj.PROJ_ID
9097
      AND rt.RTAG_ID = RtagId;
9098
 
9099
   SELECT pv.PKG_VERSION INTO sPkgVersion
9100
     FROM PACKAGE_VERSIONS pv
9101
    WHERE pv.PV_ID = newPvId;
9102
 
9103
   Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
9104
   Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9105
 
9106
END;
9107
/*-------------------------------------------------------------------------------------------------------*/
9108
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9109
   ReleaseLocation VARCHAR2(4000);
9110
 
9111
BEGIN
9112
 
9113
 
9114
   -- Delete old package
9115
   DELETE
9116
     FROM RELEASE_CONTENT rc
9117
    WHERE rc.PV_ID = PvId
9118
      AND rc.RTAG_ID = RtagId;
9119
 
9120
 
9121
   /* LOG ACTION */
9122
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9123
     FROM PROJECTS proj,
9124
          RELEASE_TAGS rt
9125
    WHERE rt.PROJ_ID = proj.PROJ_ID
9126
      AND rt.RTAG_ID = RtagId;
9127
 
9128
   Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9129
 
9130
 
9131
END;
9132
/*-------------------------------------------------------------------------------------------------------*/
9133
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9134
   ReleaseLocation VARCHAR2(4000);
9135
 
9136
   CURSOR curMatchingPackage IS
9137
    SELECT mpv.PV_ID
9138
     FROM RELEASE_CONTENT rc,
9139
           PACKAGE_VERSIONS mpv,
9140
         PACKAGE_VERSIONS pv
9141
    WHERE rc.PV_ID = mpv.PV_ID
9142
      AND rc.RTAG_ID = RtagId
9143
      AND pv.PV_ID = PvId
9144
      AND pv.PKG_ID = mpv.PKG_ID
9145
      AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
9146
    recMatchingPackage curMatchingPackage%ROWTYPE;
9147
 
9148
BEGIN
9149
 
9150
   OPEN curMatchingPackage;
9151
    FETCH curMatchingPackage INTO recMatchingPackage;
9152
 
9153
    IF curMatchingPackage%FOUND THEN
9154
      -- Delete old package
9155
      DELETE
9156
        FROM RELEASE_CONTENT rc
9157
       WHERE rc.PV_ID = recMatchingPackage.PV_ID
9158
         AND rc.RTAG_ID = RtagId;
9159
 
9160
 
9161
      /* LOG ACTION */
9162
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9163
        FROM PROJECTS proj,
9164
              RELEASE_TAGS rt
9165
       WHERE rt.PROJ_ID = proj.PROJ_ID
9166
         AND rt.RTAG_ID = RtagId;
9167
 
9168
      Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9169
 
9170
   END IF;
9171
 
9172
 
9173
   CLOSE curMatchingPackage;
9174
 
9175
 
9176
 
9177
 
9178
END;
9179
/*-------------------------------------------------------------------------------------------------------*/
9180
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
9181
 
9182
   ReturnValue NUMBER;
9183
 
9184
BEGIN
9185
   SELECT rc.BASE_VIEW_ID INTO ReturnValue
9186
     FROM RELEASE_CONTENT rc
9187
    WHERE rc.RTAG_ID = RtagId
9188
      AND rc.PV_ID = PvId;
9189
 
9190
   RETURN ReturnValue;
9191
END;
9192
/*-------------------------------------------------------------------------------------------------------*/
9193
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
9194
 
9195
BEGIN
9196
   -- Reset Ignore warnings up-the-tree
9197
   RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
9198
 
9199
   -- Refresh Package states
9200
   TOUCH_RELEASE ( RtagId );
9201
 
9202
END;
9203
/*-------------------------------------------------------------------------------------------------------*/
9204
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
9205
   CURSOR curReleases IS
9206
    SELECT rc.RTAG_ID
9207
     FROM RELEASE_CONTENT rc
9208
    WHERE rc.PV_ID = PvId;
9209
    recReleases curReleases%ROWTYPE;
9210
 
9211
BEGIN
9212
 
9213
   OPEN curReleases;
9214
    FETCH curReleases INTO recReleases;
9215
 
9216
   WHILE curReleases%FOUND
9217
   LOOP
9218
 
9219
      RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
9220
 
9221
      FETCH curReleases INTO recReleases;
9222
   END LOOP;
9223
 
9224
   CLOSE curReleases;
9225
 
9226
END;
9227
/*-------------------------------------------------------------------------------------------------------*/
9228
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
9229
 
9230
BEGIN
9231
 
9232
   UPDATE RELEASE_CONTENT rc SET
9233
   rc.BASE_VIEW_ID = NewViewId
9234
   WHERE rc.PV_ID = PvId
9235
     AND rc.RTAG_ID = RtagId;
9236
 
9237
END;
9238
/*-------------------------------------------------------------------------------------------------------*/
9239
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
9240
 
9241
   RowCount NUMBER;
9242
 
9243
 
9244
   CURSOR curPackageClash IS
9245
   SELECT pkg.PKG_NAME,
9246
         er.*
9247
     FROM (
9248
 
9249
           /* Get existing referenced packages */
9250
         SELECT pv.PKG_ID,
9251
                pv.V_EXT
9252
           FROM RELEASE_LINKS rl,
9253
                 RELEASE_CONTENT rc,
9254
                 PACKAGE_VERSIONS pv
9255
          WHERE rl.RTAG_ID = nRtagId
9256
            AND rl.REF_RTAG_ID = rc.RTAG_ID
9257
            AND rc.PV_ID = pv.PV_ID
9258
 
9259
            ) er,
9260
         (
9261
 
9262
         /* Get current reference packages */
9263
         SELECT pv.PKG_ID,
9264
                pv.V_EXT
9265
           FROM RELEASE_CONTENT rc,
9266
                 PACKAGE_VERSIONS pv
9267
          WHERE rc.RTAG_ID = nRefRtagId
9268
            AND rc.PV_ID = pv.PV_ID
9269
 
9270
         ) cr,
9271
         PACKAGES PKG
9272
    WHERE er.PKG_ID = cr.PKG_ID
9273
      AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9274
      AND er.PKG_ID = pkg.PKG_ID;
9275
 
9276
   recPackageClash curPackageClash%ROWTYPE;
9277
 
9278
BEGIN
9279
   /*--------------- Business Rules Here -------------------*/
9280
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9281
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9282
   END IF;
9283
 
9284
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9285
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9286
   END IF;
9287
   /*-------------------------------------------------------*/
9288
   ProblemString := NULL;
9289
 
9290
 
9291
   -- Check if release already has references
9292
   SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
9293
     FROM RELEASE_LINKS rl
9294
    WHERE rl.RTAG_ID = nRtagId;
9295
 
9296
 
9297
   IF RowCount > 0 THEN
9298
      -- Found existing references
9299
 
9300
      -- Make sure there is no package clashes
9301
      OPEN curPackageClash;
9302
       FETCH curPackageClash INTO recPackageClash;
9303
 
9304
      IF curPackageClash%FOUND THEN
9305
 
9306
         ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
9307
 
9308
         WHILE curPackageClash%FOUND
9309
         LOOP
9310
            EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;   -- Do not allow variable overflow
9311
 
9312
            ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
9313
 
9314
            FETCH curPackageClash INTO recPackageClash;
9315
         END LOOP;
9316
 
9317
      END IF;
9318
 
9319
      CLOSE curPackageClash;
9320
 
9321
 
9322
   ELSE
9323
      -- No references found, hence reference a release
9324
 
9325
 
9326
      -- Remove exising package from this release to be referenced
9327
      REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);
9328
 
9329
 
9330
      -- Add new linked packages to release
9331
      INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
9332
      SELECT nRtagId,
9333
            rc.PV_ID,
9334
            rc.BASE_VIEW_ID,
9335
            rc.INSERT_STAMP,
9336
            rc.INSERTOR_ID,
9337
            rc.PKG_STATE
9338
        FROM RELEASE_CONTENT rc
9339
       WHERE rc.RTAG_ID = nRefRtagId;
9340
 
9341
 
9342
 
9343
      -- Copy ignore warnings for referenced packages
9344
      INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
9345
      SELECT nRtagId,
9346
            iw.PV_ID,
9347
            iw.DPV_ID,
9348
            iw.IS_PATCH_IGNORE
9349
        FROM IGNORE_WARNINGS iw,
9350
              RELEASE_CONTENT rc
9351
       WHERE iw.RTAG_ID = rc.RTAG_ID
9352
         AND iw.PV_ID = rc.PV_ID
9353
         AND rc.RTAG_ID = nRefRtagId;
9354
 
9355
 
9356
 
9357
      -- Reference release
9358
      INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
9359
      VALUES ( nRtagId, nRefRtagId );
9360
 
9361
 
9362
      -- Refresh Package states
9363
      TOUCH_RELEASE ( nRtagId );
9364
 
9365
   END IF;
9366
 
9367
 
9368
END;
9369
/*-------------------------------------------------------------------------------------------------------*/
9370
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
9371
 
9372
 
9373
BEGIN
9374
   /*--------------- Business Rules Here -------------------*/
9375
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9376
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9377
   END IF;
9378
 
9379
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9380
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9381
   END IF;
9382
 
9383
   /*-------------------------------------------------------*/
9384
 
9385
 
9386
   -- Remove ignore warnings for those packages who use referenced packages
9387
   DELETE FROM IGNORE_WARNINGS iw
9388
    WHERE iw.RTAG_ID = nRtagId
9389
      AND iw.DPV_ID IN (
9390
                        SELECT dep.DPV_ID
9391
                       FROM (
9392
 
9393
                           /* Get referenced packages */
9394
                           SELECT pv.PKG_ID,
9395
                                  pv.V_EXT
9396
                             FROM RELEASE_CONTENT rc,
9397
                                   PACKAGE_VERSIONS pv
9398
                            WHERE rc.RTAG_ID = nRefRtagId
9399
                              AND rc.PV_ID = pv.PV_ID
9400
 
9401
                           ) cr,
9402
                           (
9403
 
9404
                           /* Get all dependencies for current release */
9405
                           SELECT DISTINCT
9406
                                 pv.PKG_ID,
9407
                                 pv.V_EXT,
9408
                                 dep.DPV_ID
9409
                             FROM RELEASE_CONTENT rc,
9410
                                 PACKAGE_DEPENDENCIES dep,
9411
                                 PACKAGE_VERSIONS pv
9412
                            WHERE rc.RTAG_ID = nRtagId
9413
                              AND rc.PV_ID = dep.PV_ID
9414
                              AND dep.PV_ID = pv.PV_ID
9415
 
9416
                           ) dep
9417
                      WHERE dep.PKG_ID = cr.PKG_ID
9418
                        AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9419
                     );
9420
 
9421
 
9422
 
9423
 
9424
   -- Remove ignore warnings for those package which are going to be replaced with the reference
9425
   DELETE FROM IGNORE_WARNINGS iw
9426
    WHERE iw.RTAG_ID = nRtagId
9427
      AND iw.PV_ID IN (
9428
                  SELECT pv.PV_ID
9429
                    FROM (
9430
 
9431
                        /* Get referenced packages */
9432
                        SELECT pv.PKG_ID,
9433
                               pv.V_EXT
9434
                          FROM RELEASE_CONTENT rc,
9435
                                PACKAGE_VERSIONS pv
9436
                         WHERE rc.RTAG_ID = nRefRtagId
9437
                           AND rc.PV_ID = pv.PV_ID
9438
 
9439
                        ) cr,
9440
                        RELEASE_CONTENT rc,
9441
                        PACKAGE_VERSIONS pv
9442
                   WHERE pv.PKG_ID = cr.PKG_ID
9443
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9444
                     AND rc.RTAG_ID = nRtagId
9445
                     AND rc.PV_ID = pv.PV_ID
9446
                  );
9447
 
9448
 
9449
 
9450
 
9451
 
9452
   -- Remove matching packages from release
9453
   DELETE FROM RELEASE_CONTENT rc
9454
    WHERE rc.RTAG_ID = nRtagId
9455
      AND rc.PV_ID IN (
9456
                  SELECT pv.PV_ID
9457
                    FROM (
9458
 
9459
                        /* Get referenced packages */
9460
                        SELECT pv.PKG_ID,
9461
                               pv.V_EXT
9462
                          FROM RELEASE_CONTENT rc,
9463
                                PACKAGE_VERSIONS pv
9464
                         WHERE rc.RTAG_ID = nRefRtagId
9465
                           AND rc.PV_ID = pv.PV_ID
9466
 
9467
                        ) cr,
9468
                        RELEASE_CONTENT rc,
9469
                        PACKAGE_VERSIONS pv
9470
                   WHERE pv.PKG_ID = cr.PKG_ID
9471
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9472
                     AND rc.RTAG_ID = nRtagId
9473
                     AND rc.PV_ID = pv.PV_ID
9474
                  );
9475
 
9476
 
9477
 
9478
 
9479
 
9480
   -- Remove Reference release
9481
   DELETE
9482
     FROM RELEASE_LINKS rl
9483
    WHERE rl.RTAG_ID = nRtagId
9484
      AND rl.REF_RTAG_ID = nRefRtagId;
9485
 
9486
 
9487
   -- Refresh Package states
9488
   TOUCH_RELEASE ( nRtagId );
9489
 
9490
 
9491
END;
9492
/*-------------------------------------------------------------------------------------------------------*/
9493
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
9494
 
9495
   cReleaseMode CHAR(1);
9496
   cPvMode CHAR(1);
9497
 
9498
BEGIN
9499
 
9500
   -- Get Release Mode
9501
   SELECT rt.OFFICIAL INTO cReleaseMode
9502
     FROM RELEASE_TAGS rt
9503
    WHERE rt.RTAG_ID = RtagId;
9504
 
9505
 
9506
   -- Get Package Mode
9507
   SELECT pv.DLOCKED INTO cPvMode
9508
     FROM PACKAGE_VERSIONS pv
9509
    WHERE pv.PV_ID = PvId;
9510
 
9511
   -- Only check if package is locked
9512
   IF (cPvMode = 'Y') THEN
9513
 
9514
      IF (cReleaseMode != 'N') AND (Permission != 'Y')
9515
      THEN
9516
         RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
9517
 
9518
      END IF;
9519
 
9520
   END IF;
9521
 
9522
 
9523
END;
9524
 
9525
/*-------------------------------------------------------------------------------------------------------*/
9526
END PK_RELEASE;
1374 dpurdie 9527
/
9528
--------------------------------------------------------
9529
--  DDL for Package Body PK_PROJECT
9530
--------------------------------------------------------
1373 dpurdie 9531
 
9532
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS
9533
 
9534
    /*------------------------------------------------------------------------*/
9535
    PROCEDURE update_base_url (
9536
    nprojid   IN  projects.proj_id%TYPE,
9537
    sbaseurl  IN  VARCHAR2
9538
    ) IS
9539
    BEGIN
9540
 
9541
    UPDATE projects
9542
    SET base_url = sbaseurl
9543
    WHERE proj_id = nprojid;
9544
 
9545
    END update_base_url;
9546
 
9547
/*------------------------------------------------------------------------*/
9548
    PROCEDURE update_project_config (
9549
    nprojid   IN  projects.proj_id%TYPE,
9550
    sbaseurl  IN  VARCHAR2,
9551
    sjirakey  IN  VARCHAR2
9552
    ) IS
9553
    BEGIN
9554
 
9555
    UPDATE projects
9556
    SET base_url = sbaseurl,
9557
        jira_key = sjirakey
9558
    WHERE proj_id = nprojid;
9559
 
9560
    END update_project_config;
9561
    /*------------------------------------------------------------------------*/
9562
 
9563
    END pk_project;
1374 dpurdie 9564
/
9565
--------------------------------------------------------
9566
--  DDL for Package Body PK_ENVIRONMENT
9567
--------------------------------------------------------
1373 dpurdie 9568
 
9569
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT" 
9570
IS
9571
 
9572
   /*-------------------------------------------------------------------------------------------------------*/
9573
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
9574
     RETURN NUMBER
9575
   IS
9576
   BEGIN
9577
      /*
9578
     || N - unlocked
9579
     || Y - release and locked
9580
     || P - penging approval
9581
     || A - approved package ready for auto-build
9582
     */
9583
     IF cdlock = 'N' OR cdlock = 'R'
9584
     THEN
9585
       -- WORK IN PROGRESS --
9586
       RETURN 0;
9587
     ELSIF cdlock = 'P' OR cdlock = 'A'
9588
     THEN
9589
       -- PENDING --
9590
       RETURN 1;
9591
     ELSIF cdlock = 'Y'
9592
     THEN
9593
       -- RELEASED --
9594
       RETURN 2;
9595
     ELSE
9596
       -- NOT FOUND --
9597
       raise_application_error
9598
                   (-20000,
9599
                      'Cannot decide where to place package. [cDlock='
9600
                    || cdlock
9601
                    || ']'
9602
                   );
9603
     END IF;
9604
   END;
9605
 
9606
/*-------------------------------------------------------------------------------------------------------*/
9607
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
9608
     RETURN NUMBER
9609
   IS
9610
     envtab   NUMBER         := -1;
9611
 
9612
     CURSOR curarea
9613
     IS
9614
       SELECT 2 AS envtab
9615
         FROM release_content rc
9616
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9617
       UNION
9618
       SELECT 0 AS envtab
9619
         FROM work_in_progress wip
9620
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9621
       UNION
9622
       SELECT 1 AS envtab
9623
         FROM planned pl
9624
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9625
 
9626
     recarea   curarea%ROWTYPE;
9627
   BEGIN
9628
     OPEN curarea;
9629
 
9630
     FETCH curarea
9631
      INTO recarea;
9632
 
9633
     IF curarea%FOUND
9634
     THEN
9635
       envtab := recarea.envtab;
9636
     END IF;
9637
 
9638
     CLOSE curarea;
9639
 
9640
     RETURN envtab;
9641
   END;
9642
 
9643
/*-------------------------------------------------------------------------------------------------------*/
9644
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
9645
     RETURN NUMBER
9646
   IS
9647
     ispatch   package_versions.dlocked%TYPE;
9648
     viewid   NUMBER                    := -1;
9649
 
9650
     CURSOR curview
9651
     IS
9652
       SELECT rc.base_view_id AS view_id
9653
         FROM release_content rc
9654
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9655
       UNION
9656
       SELECT wip.view_id AS view_id
9657
         FROM work_in_progress wip
9658
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9659
       UNION
9660
       SELECT pl.view_id AS view_id
9661
         FROM planned pl
9662
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9663
 
9664
     recview   curview%ROWTYPE;
9665
   BEGIN
9666
     -- Get dlock state
9667
     SELECT pv.is_patch
9668
      INTO ispatch
9669
      FROM package_versions pv
9670
      WHERE pv.pv_id = pvid;
9671
 
9672
     -- Decide which view id should package go under.
9673
     IF (ispatch != 'Y') OR (ispatch IS NULL)
9674
     THEN
9675
       -- Get VIEW ID of Package
9676
       OPEN curview;
9677
 
9678
       FETCH curview
9679
        INTO recview;
9680
 
9681
       IF curview%FOUND
9682
       THEN
9683
         viewid := recview.view_id;
9684
       ELSE
9685
         raise_application_error
9686
            (-20000,
9687
               'Cannot find view_id to proceed. [PvId='
9688
            || pvid
9689
            || ']. The current version may not exist in the release anymore.'
9690
            );
9691
       END IF;
9692
 
9693
       CLOSE curview;
9694
     ELSE
9695
       -- Get VIEW ID of Patch (view id of parent package)
9696
       SELECT rc.base_view_id
9697
         INTO viewid
9698
         FROM release_content rc, package_patches ppv
9699
        WHERE rc.rtag_id = rtagid
9700
         AND rc.pv_id = ppv.pv_id
9701
         AND ppv.patch_id = pvid;
9702
     END IF;
9703
 
9704
     RETURN viewid;
9705
   END;
9706
 
9707
/*-------------------------------------------------------------------------------------------------------*/
9708
   PROCEDURE add_package (
9709
     pvid    IN   NUMBER,
9710
     viewid   IN   NUMBER,
9711
     rtagid   IN   NUMBER,
9712
     userid   IN   NUMBER
9713
   )
9714
   IS
9715
     dlocked   package_versions.dlocked%TYPE;
9716
     envtab   NUMBER;
9717
   BEGIN
9718
     IF can_edit_pkg_in_project (pvid, rtagid) = 1
9719
     THEN
9720
       -- Get dlock state
9721
       SELECT pv.dlocked
9722
         INTO dlocked
9723
         FROM package_versions pv
9724
        WHERE pv.pv_id = pvid;
9725
 
9726
       -- Get which area should go under
9727
       envtab := select_environment_area (dlocked);
9728
       -- Log
9729
       log_action (pvid, 'action', userid, 'Start of Package Add...');
9730
 
9731
       -- Remove Package
9732
       IF envtab = 0
9733
       THEN
9734
         -- WORK IN PROGRESS --
9735
         pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
9736
       ELSIF envtab = 1
9737
       THEN
9738
         -- PENDING --
9739
         pk_planned.add_package (pvid, viewid, rtagid, userid);
9740
       ELSIF envtab = 2
9741
       THEN
9742
         -- RELEASED --
9743
         -- NOTE: this package will be replaced with matching package
9744
         pk_release.add_package (pvid, viewid, rtagid, userid);
9745
         -- Now do post Release Actions
9746
         pk_release.run_post_actions (pvid, rtagid);
9747
       END IF;
9748
 
9749
       -- Log
9750
       log_action (pvid, 'action', userid, 'End of Package Add...');
9751
     END IF;
9752
   END;
9753
 
9754
/*-------------------------------------------------------------------------------------------------------*/
9755
   PROCEDURE add_package_bulk (
9756
     pvidlist   IN   VARCHAR2,
9757
     viewid    IN   NUMBER,
9758
     rtagid    IN   NUMBER,
9759
     userid    IN   NUMBER
9760
   )
9761
   IS
9762
     nidcollector   relmgr_number_tab_t         := relmgr_number_tab_t
9763
                                                        ();
9764
     dlocked      package_versions.dlocked%TYPE;
9765
     pvid         NUMBER;
9766
     envtab       NUMBER;
9767
   BEGIN
9768
     /*--------------- Business Rules Here -------------------*/
9769
     IF (pvidlist IS NULL)
9770
     THEN
9771
       raise_application_error (-20000,
9772
                          'Please select at least one package.'
9773
                         );
9774
     END IF;
9775
 
9776
/*-------------------------------------------------------*/
9777
     nidcollector := in_list_number (pvidlist);
9778
 
9779
     FOR i IN 1 .. nidcollector.COUNT
9780
     LOOP
9781
       pvid := nidcollector (i);
9782
       add_package (pvid, viewid, rtagid, userid);
9783
     END LOOP;
9784
   END;
9785
 
9786
/*-------------------------------------------------------------------------------------------------------*/
9787
   PROCEDURE replace_package (
9788
     newpvid  IN   NUMBER,
9789
     oldpvid  IN   NUMBER,
9790
     rtagid   IN   NUMBER,
9791
     userid   IN   NUMBER
9792
   )
9793
   IS
9794
     dlocked      package_versions.dlocked%TYPE;
9795
     viewid       NUMBER;
9796
     envtab       NUMBER;
9797
     ROWCOUNT     NUMBER;
9798
     creleasemode CHAR (1);
9799
     npkgid       NUMBER;
9800
   BEGIN
9801
     /*--------------- Business Rules Here -------------------*/
9802
     -- Check if oldPvId exists. It could have been removed
9803
     SELECT COUNT (pv.pv_id)
9804
       INTO ROWCOUNT
9805
       FROM package_versions pv
9806
      WHERE pv.pv_id = oldpvid;
9807
 
9808
/*-------------------------------------------------------*/
9809
 
9810
     /* This procedure is usually used by "History" option in Release Manager */
9811
 
9812
     -- Get dlock state
9813
     SELECT pv.dlocked
9814
       INTO dlocked
9815
       FROM package_versions pv
9816
      WHERE pv.pv_id = newpvid;
9817
 
9818
     -- Get VIEW_ID ---
9819
     IF ROWCOUNT = 1
9820
     THEN
9821
       viewid := get_view_location (oldpvid, rtagid);
9822
     ELSE
9823
       -- Set ViewID to default
9824
       viewid := 7;
9825
     END IF;
9826
 
9827
     -- Get which area should go under
9828
     envtab := select_environment_area (dlocked);
9829
     -- Log
9830
     log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
9831
 
9832
     -- Replace package
9833
     IF envtab = 0
9834
     THEN
9835
       -- WORK IN PROGRESS --
9836
 
9837
       -- Delete old package
9838
       pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
9839
 
9840
       -- Add new package
9841
       pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
9842
     ELSIF envtab = 1
9843
     THEN
9844
       -- PENDING --
9845
 
9846
       -- Delete old package
9847
       pk_planned.remove_package (oldpvid, rtagid, userid);
9848
 
9849
       -- Add new package
9850
       pk_planned.add_package (newpvid, viewid, rtagid, userid);
9851
     ELSIF envtab = 2
9852
     THEN
9853
       -- RELEASED --
9854
 
9855
       -- Delete old package
9856
       pk_release.remove_package (oldpvid, rtagid, userid);
9857
       -- Add new package
9858
       pk_release.add_package (newpvid, viewid, rtagid, userid);
9859
 
9860
       -- update the pegging table
9861
       UPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9862
 
9863
       -- update the advisory ripple table
9864
       UPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9865
 
9866
       -- Now do post Release Actions
9867
       pk_release.run_post_actions (newpvid, rtagid);
9868
     END IF;
9869
 
9870
     -- Log
9871
     log_action (oldpvid, 'action', userid, 'End of Package Replace...');
9872
   END;
9873
 
9874
/*-------------------------------------------------------------------------------------------------------*/
9875
   FUNCTION remove_package (
9876
     pvid        IN   NUMBER,
9877
     rtagid      IN   NUMBER,
9878
     userid      IN   NUMBER,
9879
     forceremove IN   CHAR
9880
   )
9881
     RETURN NUMBER
9882
   IS
9883
     envtab      NUMBER;
9884
     isused      BOOLEAN;
9885
     recordcount   NUMBER;
9886
   BEGIN
9887
/*--------------- Business Rules Here -------------------*/
9888
/*-------------------------------------------------------*/
9889
 
9890
     -- Find location of package
9891
     envtab := get_package_area (pvid, rtagid);
9892
 
9893
     -- Remove Package
9894
     IF envtab = 0
9895
     THEN
9896
       -- WORK IN PROGRESS --
9897
       -- Delete package
9898
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
9899
 
9900
       RETURN 0;
9901
     ELSIF envtab = 1
9902
     THEN
9903
       -- PENDING --
9904
       -- Delete package
9905
       pk_planned.remove_package (pvid, rtagid, userid);
9906
 
9907
       RETURN 0;
9908
     ELSIF envtab = 2
9909
     THEN
9910
       -- RELEASED --
9911
 
9912
       -- Check if is used by other packages
9913
       isused := TRUE;
9914
 
9915
       IF forceremove = 'N'
9916
       THEN
9917
         SELECT COUNT (pv.pv_id)
9918
           INTO recordcount
9919
           FROM (SELECT dpv.pkg_id, dpv.v_ext
9920
                 FROM release_content rc,
9921
                     package_dependencies dep,
9922
                     package_versions dpv
9923
                WHERE rc.rtag_id = rtagid
9924
                  AND rc.pv_id = dep.pv_id
9925
                  AND dep.dpv_id = dpv.pv_id) rdep,
9926
               package_versions pv
9927
          WHERE pv.pkg_id = rdep.pkg_id
9928
            AND NVL (pv.v_ext, '|LINK_A_NULL|') =
9929
                                  NVL (rdep.v_ext, '|LINK_A_NULL|')
9930
            AND pv.pv_id = pvid;
9931
 
9932
         IF recordcount > 0
9933
         THEN
9934
            RETURN 1;               -- Return 1 as package being used
9935
         ELSE
9936
            isused := FALSE;
9937
         END IF;
9938
       END IF;
9939
 
9940
       IF forceremove = 'Y' OR NOT isused
9941
       THEN
9942
         -- Delete old package
9943
         pk_release.remove_package (pvid, rtagid, userid);
9944
 
9945
         -- Delete old package's pegging info
9946
         DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;
9947
 
9948
         -- Delete old package's advisory ripple info
9949
         DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;
9950
 
9951
         -- Now do post Release Actions
9952
         pk_release.run_post_actions (pvid, rtagid);
9953
         RETURN 0;
9954
       END IF;
9955
     END IF;
9956
   END;
9957
 
9958
/*-------------------------------------------------------------------------------------------------------*/
9959
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
9960
 
9961
   PROCEDURE get_environment_items (
9962
     viewtype         IN      NUMBER,
9963
     userid           IN      NUMBER,
9964
     rtagid           IN      NUMBER,
9965
     sviewidshowlist  IN      VARCHAR2,
9966
     ntruerecordcount OUT     NUMBER,
9967
     recordset        OUT     typecur
9968
   )
9969
   IS
9970
   BEGIN
9971
     -- Get true record count because views can give false count
9972
     SELECT COUNT (pl.pv_id)
9973
      INTO ntruerecordcount
9974
      FROM environment_view pl
9975
      WHERE pl.rtag_id = rtagid;
9976
 
9977
     IF viewtype = 1
9978
     THEN
9979
       /*--- GUEST VIEW ---*/
9980
       OPEN recordset FOR
9981
         SELECT   *
9982
            FROM (
9983
                 /* Base Views collapsed */
9984
                 SELECT DISTINCT vi.view_id, vi.view_name,
9985
                             TO_NUMBER (NULL) AS pkg_state,
9986
                             TO_NUMBER (NULL) AS deprecated_state,
9987
                             TO_NUMBER (NULL) AS pv_id,
9988
                             NULL AS pkg_name, NULL AS pkg_version,
9989
                             NULL AS dlocked, NULL AS pv_description,
9990
                             rel.operation
9991
                         FROM environment_view rel, views vi
9992
                        WHERE rel.view_id = vi.view_id
9993
                          AND rtag_id = rtagid
9994
                          AND rel.view_id NOT IN (
9995
                               SELECT *
9996
                                 FROM THE
9997
                                       (SELECT CAST
9998
                                               (in_list_number
9999
                                                  (sviewidshowlist
10000
                                                  ) AS relmgr_number_tab_t
10001
                                               )
10002
                                         FROM DUAL
10003
                                       ))
10004
                 UNION
10005
                 /* Base Views expanded */
10006
                 SELECT vi.view_id, vi.view_name,
10007
                      DECODE (rel.pkg_state,
10008
                            NULL, 0,
10009
                            rel.pkg_state
10010
                           ) AS pkg_state,
10011
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10012
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10013
                      rel.operation
10014
                  FROM environment_view rel,
10015
                      PACKAGES pkg,
10016
                      package_versions pv,
10017
                      views vi
10018
                  WHERE pv.pkg_id = pkg.pkg_id
10019
                   AND rel.pv_id = pv.pv_id
10020
                   AND rel.view_id = vi.view_id
10021
                   AND rel.view_id IN (
10022
                        SELECT *
10023
                          FROM THE
10024
                                (SELECT CAST
10025
                                        (in_list_number
10026
                                               (sviewidshowlist) AS relmgr_number_tab_t
10027
                                        )
10028
                                  FROM DUAL
10029
                                ))
10030
                   AND rtag_id = rtagid) ord
10031
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10032
     ELSIF viewtype = 2
10033
     THEN
10034
       /*--- PERSONAL VIEW ---*/
10035
       OPEN recordset FOR
10036
         SELECT   *
10037
            FROM (
10038
                 /* Base Views collapsed */
10039
                 SELECT DISTINCT vi.view_id, vi.view_name,
10040
                             TO_NUMBER (NULL) AS pkg_state,
10041
                             TO_NUMBER (NULL) AS deprecated_state,
10042
                             TO_NUMBER (NULL) AS pv_id,
10043
                             NULL AS pkg_name, NULL AS pkg_version,
10044
                             NULL AS dlocked, NULL AS pv_description,
10045
                             rel.operation
10046
                         FROM environment_view rel,
10047
                             view_settings vs,
10048
                             views vi
10049
                        WHERE rel.view_id = vi.view_id
10050
                          AND vs.view_id = rel.view_id
10051
                          AND vs.user_id = userid
10052
                          AND rtag_id = rtagid
10053
                          AND rel.view_id NOT IN (
10054
                               SELECT *
10055
                                 FROM THE
10056
                                       (SELECT CAST
10057
                                               (in_list_number
10058
                                                  (sviewidshowlist
10059
                                                  ) AS relmgr_number_tab_t
10060
                                               )
10061
                                         FROM DUAL
10062
                                       ))
10063
                 UNION
10064
                 /* Base Views expanded */
10065
                 SELECT vi.view_id, vi.view_name,
10066
                      DECODE (rel.pkg_state,
10067
                            NULL, 0,
10068
                            rel.pkg_state
10069
                           ) AS pkg_state,
10070
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10071
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10072
                      rel.operation
10073
                  FROM environment_view rel,
10074
                      PACKAGES pkg,
10075
                      package_versions pv,
10076
                      views vi,
10077
                      view_settings vs
10078
                  WHERE pv.pkg_id = pkg.pkg_id
10079
                   AND rel.pv_id = pv.pv_id
10080
                   AND rel.view_id = vi.view_id
10081
                   AND vs.view_id = vi.view_id
10082
                   AND vs.user_id = userid
10083
                   AND rel.view_id IN (
10084
                        SELECT *
10085
                          FROM THE
10086
                                (SELECT CAST
10087
                                        (in_list_number
10088
                                               (sviewidshowlist) AS relmgr_number_tab_t
10089
                                        )
10090
                                  FROM DUAL
10091
                                ))
10092
                   AND rtag_id = rtagid
10093
                 UNION
10094
                 /* Private Views collapsed */
10095
                 SELECT vi.view_id, vi.view_name,
10096
                      TO_NUMBER (NULL) AS pkg_state,
10097
                      TO_NUMBER (NULL) AS deprecated_state,
10098
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10099
                      NULL AS pkg_version, NULL AS dlocked,
10100
                      NULL AS pv_description,
10101
                      rel.operation
10102
                  FROM view_settings vs,
10103
                      view_def vd,
10104
                      views vi,
10105
                      environment_view rel,
10106
                      package_versions pv
10107
                  WHERE vs.view_id = vi.view_id
10108
                   AND rel.pv_id = pv.pv_id
10109
                   AND vd.pkg_id = pv.pkg_id
10110
                   AND vd.view_id = vi.view_id
10111
                   AND vi.base_view = 'N'
10112
                   AND rel.rtag_id = rtagid
10113
                   AND vs.user_id = userid
10114
                   AND vi.view_id NOT IN (
10115
                        SELECT *
10116
                          FROM THE
10117
                                (SELECT CAST
10118
                                        (in_list_number
10119
                                               (sviewidshowlist) AS relmgr_number_tab_t
10120
                                        )
10121
                                  FROM DUAL
10122
                                ))
10123
                 UNION
10124
                 /* Private Views expanded */
10125
                 SELECT vi.view_id, vi.view_name,
10126
                      DECODE (rel.pkg_state,
10127
                            NULL, 0,
10128
                            rel.pkg_state
10129
                           ) AS pkg_state,
10130
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10131
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10132
                      rel.operation
10133
                  FROM users usr,
10134
                      view_settings vs,
10135
                      view_def vd,
10136
                      views vi,
10137
                      environment_view rel,
10138
                      PACKAGES pkg,
10139
                      package_versions pv
10140
                  WHERE vs.user_id = usr.user_id
10141
                   AND vs.view_id = vi.view_id
10142
                   AND vd.view_id = vi.view_id
10143
                   AND pv.pkg_id = pkg.pkg_id
10144
                   AND rel.pv_id = pv.pv_id
10145
                   AND rel.rtag_id = rtagid
10146
                   AND vd.pkg_id = pkg.pkg_id
10147
                   AND vi.base_view = 'N'
10148
                   AND vi.view_id IN (
10149
                        SELECT *
10150
                          FROM THE
10151
                                (SELECT CAST
10152
                                        (in_list_number
10153
                                               (sviewidshowlist) AS relmgr_number_tab_t
10154
                                        )
10155
                                  FROM DUAL
10156
                                ))
10157
                   AND usr.user_id = userid) ord
10158
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10159
     END IF;
10160
   END;
10161
 
10162
/*-------------------------------------------------------------------------------------------------------*/
10163
   PROCEDURE get_released_items (
10164
     viewtype         IN      NUMBER,
10165
     userid           IN      NUMBER,
10166
     rtagid           IN      NUMBER,
10167
     sviewidshowlist  IN      VARCHAR2,
10168
     ntruerecordcount OUT     NUMBER,
10169
     recordset        OUT     typecur
10170
   )
10171
   IS
10172
   BEGIN
10173
     -- Get true record count because views can give false count
10174
     SELECT COUNT (rc.pv_id)
10175
      INTO ntruerecordcount
10176
      FROM release_content rc
10177
      WHERE rc.rtag_id = rtagid;
10178
 
10179
     IF viewtype = 1
10180
     THEN
10181
       /*--- GUEST VIEW ---*/
10182
       OPEN recordset FOR
10183
         SELECT   *
10184
            FROM (
10185
                 /* Base Views collapsed */
10186
                 SELECT DISTINCT vi.view_id, vi.view_name,
10187
                             TO_NUMBER (NULL) AS pkg_state,
10188
                             TO_NUMBER (NULL) AS deprecated_state,
10189
                             TO_NUMBER (NULL) AS pv_id,
10190
                             NULL AS pkg_name, NULL AS pkg_version,
10191
                             NULL AS dlocked, NULL AS pv_description
10192
                         FROM release_content rel, views vi
10193
                        WHERE rel.base_view_id = vi.view_id
10194
                          AND rtag_id = rtagid
10195
                          AND rel.base_view_id NOT IN (
10196
                               SELECT *
10197
                                 FROM THE
10198
                                       (SELECT CAST
10199
                                               (in_list_number
10200
                                                  (sviewidshowlist
10201
                                                  ) AS relmgr_number_tab_t
10202
                                               )
10203
                                         FROM DUAL
10204
                                       ))
10205
                 UNION
10206
                 /* Base Views expanded */
10207
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10208
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10209
                      pv.pkg_version, pv.dlocked, pv.pv_description
10210
                  FROM release_content rel,
10211
                      PACKAGES pkg,
10212
                      package_versions pv,
10213
                      views vi
10214
                  WHERE pv.pkg_id = pkg.pkg_id
10215
                   AND rel.pv_id = pv.pv_id
10216
                   AND rel.base_view_id = vi.view_id
10217
                   AND rel.base_view_id IN (
10218
                        SELECT *
10219
                          FROM THE
10220
                                (SELECT CAST
10221
                                        (in_list_number
10222
                                               (sviewidshowlist) AS relmgr_number_tab_t
10223
                                        )
10224
                                  FROM DUAL
10225
                                ))
10226
                   AND rtag_id = rtagid) ord
10227
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10228
     ELSIF viewtype = 2
10229
     THEN
10230
       /*--- PERSONAL VIEW ---*/
10231
       OPEN recordset FOR
10232
         SELECT   *
10233
            FROM (
10234
                 /* Base Views collapsed */
10235
                 SELECT DISTINCT vi.view_id, vi.view_name,
10236
                             TO_NUMBER (NULL) AS pkg_state,
10237
                             TO_NUMBER (NULL) AS deprecated_state,
10238
                             TO_NUMBER (NULL) AS pv_id,
10239
                             NULL AS pkg_name, NULL AS pkg_version,
10240
                             NULL AS dlocked, NULL AS pv_description
10241
                         FROM release_content rel,
10242
                             view_settings vs,
10243
                             views vi
10244
                        WHERE rel.base_view_id = vi.view_id
10245
                          AND vs.view_id = rel.base_view_id
10246
                          AND vs.user_id = userid
10247
                          AND rtag_id = rtagid
10248
                          AND rel.base_view_id NOT IN (
10249
                               SELECT *
10250
                                 FROM THE
10251
                                       (SELECT CAST
10252
                                               (in_list_number
10253
                                                  (sviewidshowlist
10254
                                                  ) AS relmgr_number_tab_t
10255
                                               )
10256
                                         FROM DUAL
10257
                                       ))
10258
                 UNION
10259
                 /* Base Views expanded */
10260
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10261
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10262
                      pv.pkg_version, pv.dlocked, pv.pv_description
10263
                  FROM release_content rel,
10264
                      PACKAGES pkg,
10265
                      package_versions pv,
10266
                      views vi,
10267
                      view_settings vs
10268
                  WHERE pv.pkg_id = pkg.pkg_id
10269
                   AND rel.pv_id = pv.pv_id
10270
                   AND rel.base_view_id = vi.view_id
10271
                   AND vs.view_id = vi.view_id
10272
                   AND vs.user_id = userid
10273
                   AND rel.base_view_id IN (
10274
                        SELECT *
10275
                          FROM THE
10276
                                (SELECT CAST
10277
                                        (in_list_number
10278
                                               (sviewidshowlist) AS relmgr_number_tab_t
10279
                                        )
10280
                                  FROM DUAL
10281
                                ))
10282
                   AND rtag_id = rtagid
10283
                 UNION
10284
                 /* Private Views collapsed */
10285
                 SELECT vi.view_id, vi.view_name,
10286
                      TO_NUMBER (NULL) AS pkg_state,
10287
                      TO_NUMBER (NULL) AS deprecated_state,
10288
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10289
                      NULL AS pkg_version, NULL AS dlocked,
10290
                      NULL AS pv_description
10291
                  FROM view_settings vs,
10292
                      view_def vd,
10293
                      views vi,
10294
                      release_content rel,
10295
                      package_versions pv
10296
                  WHERE vs.view_id = vi.view_id
10297
                   AND rel.pv_id = pv.pv_id
10298
                   AND vd.pkg_id = pv.pkg_id
10299
                   AND vd.view_id = vi.view_id
10300
                   AND vi.base_view = 'N'
10301
                   AND rel.rtag_id = rtagid
10302
                   AND vs.user_id = userid
10303
                   AND vi.view_id NOT IN (
10304
                        SELECT *
10305
                          FROM THE
10306
                                (SELECT CAST
10307
                                        (in_list_number
10308
                                               (sviewidshowlist) AS relmgr_number_tab_t
10309
                                        )
10310
                                  FROM DUAL
10311
                                ))
10312
                 UNION
10313
                 /* Private Views expanded */
10314
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10315
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10316
                      pv.pkg_version, pv.dlocked, pv.pv_description
10317
                  FROM users usr,
10318
                      view_settings vs,
10319
                      view_def vd,
10320
                      views vi,
10321
                      release_content rel,
10322
                      PACKAGES pkg,
10323
                      package_versions pv
10324
                  WHERE vs.user_id = usr.user_id
10325
                   AND vs.view_id = vi.view_id
10326
                   AND vd.view_id = vi.view_id
10327
                   AND pv.pkg_id = pkg.pkg_id
10328
                   AND rel.pv_id = pv.pv_id
10329
                   AND rel.rtag_id = rtagid
10330
                   AND vd.pkg_id = pkg.pkg_id
10331
                   AND vi.base_view = 'N'
10332
                   AND vi.view_id IN (
10333
                        SELECT *
10334
                          FROM THE
10335
                                (SELECT CAST
10336
                                        (in_list_number
10337
                                               (sviewidshowlist) AS relmgr_number_tab_t
10338
                                        )
10339
                                  FROM DUAL
10340
                                ))
10341
                   AND usr.user_id = userid) ord
10342
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10343
     END IF;
10344
   END;
10345
 
10346
/*-------------------------------------------------------------------------------------------------------*/
10347
   PROCEDURE get_work_in_progress_items (
10348
     viewtype         IN      NUMBER,
10349
     userid           IN      NUMBER,
10350
     rtagid           IN      NUMBER,
10351
     sviewidshowlist  IN      VARCHAR2,
10352
     ntruerecordcount OUT     NUMBER,
10353
     recordset        OUT     typecur
10354
   )
10355
   IS
10356
   BEGIN
10357
     -- Get true record count because views can give false count
10358
     SELECT COUNT (wip.pv_id)
10359
      INTO ntruerecordcount
10360
      FROM work_in_progress wip
10361
      WHERE wip.rtag_id = rtagid;
10362
 
10363
     IF viewtype = 1
10364
     THEN
10365
       /*--- GUEST VIEW ---*/
10366
       OPEN recordset FOR
10367
         SELECT   *
10368
            FROM (
10369
                 /* Base Views collapsed */
10370
                 SELECT DISTINCT vi.view_id, vi.view_name,
10371
                             TO_NUMBER (NULL) AS pkg_state,
10372
                             TO_NUMBER (NULL) AS deprecated_state,
10373
                             TO_NUMBER (NULL) AS pv_id,
10374
                             NULL AS pkg_name, NULL AS pkg_version,
10375
                             NULL AS dlocked, NULL AS pv_description
10376
                         FROM work_in_progress rel, views vi
10377
                        WHERE rel.view_id = vi.view_id
10378
                          AND rtag_id = rtagid
10379
                          AND rel.view_id NOT IN (
10380
                               SELECT *
10381
                                 FROM THE
10382
                                       (SELECT CAST
10383
                                               (in_list_number
10384
                                                  (sviewidshowlist
10385
                                                  ) AS relmgr_number_tab_t
10386
                                               )
10387
                                         FROM DUAL
10388
                                       ))
10389
                 UNION
10390
                 /* Base Views expanded */
10391
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10392
 
10393
                      --rel.pkg_state,
10394
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10395
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10396
                      pv.pv_description
10397
                  FROM work_in_progress rel,
10398
                      PACKAGES pkg,
10399
                      package_versions pv,
10400
                      views vi
10401
                  WHERE pv.pkg_id = pkg.pkg_id
10402
                   AND rel.pv_id = pv.pv_id
10403
                   AND rel.view_id = vi.view_id
10404
                   AND rel.view_id IN (
10405
                        SELECT *
10406
                          FROM THE
10407
                                (SELECT CAST
10408
                                        (in_list_number
10409
                                               (sviewidshowlist) AS relmgr_number_tab_t
10410
                                        )
10411
                                  FROM DUAL
10412
                                ))
10413
                   AND rtag_id = rtagid) ord
10414
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10415
     ELSIF viewtype = 2
10416
     THEN
10417
       /*--- PERSONAL VIEW ---*/
10418
       OPEN recordset FOR
10419
         SELECT   *
10420
            FROM (
10421
                 /* Base Views collapsed */
10422
                 SELECT DISTINCT vi.view_id, vi.view_name,
10423
                             TO_NUMBER (NULL) AS pkg_state,
10424
                             TO_NUMBER (NULL) AS deprecated_state,
10425
                             TO_NUMBER (NULL) AS pv_id,
10426
                             NULL AS pkg_name, NULL AS pkg_version,
10427
                             NULL AS dlocked, NULL AS pv_description
10428
                         FROM work_in_progress rel,
10429
                             view_settings vs,
10430
                             views vi
10431
                        WHERE rel.view_id = vi.view_id
10432
                          AND vs.view_id = rel.view_id
10433
                          AND vs.user_id = userid
10434
                          AND rtag_id = rtagid
10435
                          AND rel.view_id NOT IN (
10436
                               SELECT *
10437
                                 FROM THE
10438
                                       (SELECT CAST
10439
                                               (in_list_number
10440
                                                  (sviewidshowlist
10441
                                                  ) AS relmgr_number_tab_t
10442
                                               )
10443
                                         FROM DUAL
10444
                                       ))
10445
                 UNION
10446
                 /* Base Views expanded */
10447
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10448
 
10449
                      --rel.pkg_state,
10450
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10451
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10452
                      pv.pv_description
10453
                  FROM work_in_progress rel,
10454
                      PACKAGES pkg,
10455
                      package_versions pv,
10456
                      views vi,
10457
                      view_settings vs
10458
                  WHERE pv.pkg_id = pkg.pkg_id
10459
                   AND rel.pv_id = pv.pv_id
10460
                   AND rel.view_id = vi.view_id
10461
                   AND vs.view_id = vi.view_id
10462
                   AND vs.user_id = userid
10463
                   AND rel.view_id IN (
10464
                        SELECT *
10465
                          FROM THE
10466
                                (SELECT CAST
10467
                                        (in_list_number
10468
                                               (sviewidshowlist) AS relmgr_number_tab_t
10469
                                        )
10470
                                  FROM DUAL
10471
                                ))
10472
                   AND rtag_id = rtagid
10473
                 UNION
10474
                 /* Private Views collapsed */
10475
                 SELECT vi.view_id, vi.view_name,
10476
                      TO_NUMBER (NULL) AS pkg_state,
10477
                      TO_NUMBER (NULL) AS deprecated_state,
10478
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10479
                      NULL AS pkg_version, NULL AS dlocked,
10480
                      NULL AS pv_description
10481
                  FROM view_settings vs,
10482
                      view_def vd,
10483
                      views vi,
10484
                      work_in_progress rel,
10485
                      package_versions pv
10486
                  WHERE vs.view_id = vi.view_id
10487
                   AND rel.pv_id = pv.pv_id
10488
                   AND vd.pkg_id = pv.pkg_id
10489
                   AND vd.view_id = vi.view_id
10490
                   AND vi.base_view = 'N'
10491
                   AND rel.rtag_id = rtagid
10492
                   AND vs.user_id = userid
10493
                   AND vi.view_id NOT IN (
10494
                        SELECT *
10495
                          FROM THE
10496
                                (SELECT CAST
10497
                                        (in_list_number
10498
                                               (sviewidshowlist) AS relmgr_number_tab_t
10499
                                        )
10500
                                  FROM DUAL
10501
                                ))
10502
                 UNION
10503
                 /* Private Views expanded */
10504
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10505
 
10506
                      --rel.pkg_state,
10507
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10508
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10509
                      pv.pv_description
10510
                  FROM users usr,
10511
                      view_settings vs,
10512
                      view_def vd,
10513
                      views vi,
10514
                      work_in_progress rel,
10515
                      PACKAGES pkg,
10516
                      package_versions pv
10517
                  WHERE vs.user_id = usr.user_id
10518
                   AND vs.view_id = vi.view_id
10519
                   AND vd.view_id = vi.view_id
10520
                   AND pv.pkg_id = pkg.pkg_id
10521
                   AND rel.pv_id = pv.pv_id
10522
                   AND rel.rtag_id = rtagid
10523
                   AND vd.pkg_id = pkg.pkg_id
10524
                   AND vi.base_view = 'N'
10525
                   AND vi.view_id IN (
10526
                        SELECT *
10527
                          FROM THE
10528
                                (SELECT CAST
10529
                                        (in_list_number
10530
                                               (sviewidshowlist) AS relmgr_number_tab_t
10531
                                        )
10532
                                  FROM DUAL
10533
                                ))
10534
                   AND usr.user_id = userid) ord
10535
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10536
     END IF;
10537
   END;
10538
 
10539
/*-------------------------------------------------------------------------------------------------------*/
10540
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
10541
 
10542
   PROCEDURE get_pending_items (
10543
     viewtype         IN      NUMBER,
10544
     userid           IN      NUMBER,
10545
     rtagid           IN      NUMBER,
10546
     sviewidshowlist  IN      VARCHAR2,
10547
     ntruerecordcount OUT     NUMBER,
10548
     recordset        OUT     typecur
10549
   )
10550
   IS
10551
   BEGIN
10552
     -- Get true record count because views can give false count
10553
     SELECT COUNT (pl.pv_id)
10554
      INTO ntruerecordcount
10555
      FROM planned pl
10556
      WHERE pl.rtag_id = rtagid;
10557
 
10558
     IF viewtype = 1
10559
     THEN
10560
       /*--- GUEST VIEW ---*/
10561
       OPEN recordset FOR
10562
         SELECT   *
10563
            FROM (
10564
                 /* Base Views collapsed */
10565
                 SELECT DISTINCT vi.view_id, vi.view_name,
10566
                             TO_NUMBER (NULL) AS pkg_state,
10567
                             TO_NUMBER (NULL) AS deprecated_state,
10568
                             TO_NUMBER (NULL) AS pv_id,
10569
                             NULL AS pkg_name, NULL AS pkg_version,
10570
                             NULL AS dlocked, NULL AS pv_description,
10571
                             rel.operation
10572
                         FROM planned rel, views vi
10573
                        WHERE rel.view_id = vi.view_id
10574
                          AND rtag_id = rtagid
10575
                          AND rel.view_id NOT IN (
10576
                               SELECT *
10577
                                 FROM THE
10578
                                       (SELECT CAST
10579
                                               (in_list_number
10580
                                                  (sviewidshowlist
10581
                                                  ) AS relmgr_number_tab_t
10582
                                               )
10583
                                         FROM DUAL
10584
                                       ))
10585
                 UNION
10586
                 /* Base Views expanded */
10587
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10588
 
10589
                      --rel.pkg_state,
10590
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10591
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10592
                      pv.pv_description,
10593
                      rel.operation
10594
                  FROM planned rel,
10595
                      PACKAGES pkg,
10596
                      package_versions pv,
10597
                      views vi
10598
                  WHERE pv.pkg_id = pkg.pkg_id
10599
                   AND rel.pv_id = pv.pv_id
10600
                   AND rel.view_id = vi.view_id
10601
                   AND rel.view_id IN (
10602
                        SELECT *
10603
                          FROM THE
10604
                                (SELECT CAST
10605
                                        (in_list_number
10606
                                               (sviewidshowlist) AS relmgr_number_tab_t
10607
                                        )
10608
                                  FROM DUAL
10609
                                ))
10610
                   AND rtag_id = rtagid) ord
10611
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10612
     ELSIF viewtype = 2
10613
     THEN
10614
       /*--- PERSONAL VIEW ---*/
10615
       OPEN recordset FOR
10616
         SELECT   *
10617
            FROM (
10618
                 /* Base Views collapsed */
10619
                 SELECT DISTINCT vi.view_id, vi.view_name,
10620
                             TO_NUMBER (NULL) AS pkg_state,
10621
                             TO_NUMBER (NULL) AS deprecated_state,
10622
                             TO_NUMBER (NULL) AS pv_id,
10623
                             NULL AS pkg_name, NULL AS pkg_version,
10624
                             NULL AS dlocked, NULL AS pv_description,
10625
                             rel.operation
10626
                         FROM planned rel, view_settings vs, views vi
10627
                        WHERE rel.view_id = vi.view_id
10628
                          AND vs.view_id = rel.view_id
10629
                          AND vs.user_id = userid
10630
                          AND rtag_id = rtagid
10631
                          AND rel.view_id NOT IN (
10632
                               SELECT *
10633
                                 FROM THE
10634
                                       (SELECT CAST
10635
                                               (in_list_number
10636
                                                  (sviewidshowlist
10637
                                                  ) AS relmgr_number_tab_t
10638
                                               )
10639
                                         FROM DUAL
10640
                                       ))
10641
                 UNION
10642
                 /* Base Views expanded */
10643
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10644
 
10645
                      --rel.pkg_state,
10646
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10647
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10648
                      pv.pv_description,
10649
                      rel.operation
10650
                  FROM planned rel,
10651
                      PACKAGES pkg,
10652
                      package_versions pv,
10653
                      views vi,
10654
                      view_settings vs
10655
                  WHERE pv.pkg_id = pkg.pkg_id
10656
                   AND rel.pv_id = pv.pv_id
10657
                   AND rel.view_id = vi.view_id
10658
                   AND vs.view_id = vi.view_id
10659
                   AND vs.user_id = userid
10660
                   AND rel.view_id IN (
10661
                        SELECT *
10662
                          FROM THE
10663
                                (SELECT CAST
10664
                                        (in_list_number
10665
                                               (sviewidshowlist) AS relmgr_number_tab_t
10666
                                        )
10667
                                  FROM DUAL
10668
                                ))
10669
                   AND rtag_id = rtagid
10670
                 UNION
10671
                 /* Private Views collapsed */
10672
                 SELECT vi.view_id, vi.view_name,
10673
                      TO_NUMBER (NULL) AS pkg_state,
10674
                      TO_NUMBER (NULL) AS deprecated_state,
10675
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10676
                      NULL AS pkg_version, NULL AS dlocked,
10677
                      NULL AS pv_description,
10678
                      rel.operation
10679
                  FROM view_settings vs,
10680
                      view_def vd,
10681
                      views vi,
10682
                      planned rel,
10683
                      package_versions pv
10684
                  WHERE vs.view_id = vi.view_id
10685
                   AND rel.pv_id = pv.pv_id
10686
                   AND vd.pkg_id = pv.pkg_id
10687
                   AND vd.view_id = vi.view_id
10688
                   AND vi.base_view = 'N'
10689
                   AND rel.rtag_id = rtagid
10690
                   AND vs.user_id = userid
10691
                   AND vi.view_id NOT IN (
10692
                        SELECT *
10693
                          FROM THE
10694
                                (SELECT CAST
10695
                                        (in_list_number
10696
                                               (sviewidshowlist) AS relmgr_number_tab_t
10697
                                        )
10698
                                  FROM DUAL
10699
                                ))
10700
                 UNION
10701
                 /* Private Views expanded */
10702
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10703
 
10704
                      --rel.pkg_state,
10705
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10706
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10707
                      pv.pv_description,
10708
                      rel.operation
10709
                  FROM users usr,
10710
                      view_settings vs,
10711
                      view_def vd,
10712
                      views vi,
10713
                      planned rel,
10714
                      PACKAGES pkg,
10715
                      package_versions pv
10716
                  WHERE vs.user_id = usr.user_id
10717
                   AND vs.view_id = vi.view_id
10718
                   AND vd.view_id = vi.view_id
10719
                   AND pv.pkg_id = pkg.pkg_id
10720
                   AND rel.pv_id = pv.pv_id
10721
                   AND rel.rtag_id = rtagid
10722
                   AND vd.pkg_id = pkg.pkg_id
10723
                   AND vi.base_view = 'N'
10724
                   AND vi.view_id IN (
10725
                        SELECT *
10726
                          FROM THE
10727
                                (SELECT CAST
10728
                                        (in_list_number
10729
                                               (sviewidshowlist) AS relmgr_number_tab_t
10730
                                        )
10731
                                  FROM DUAL
10732
                                ))
10733
                   AND usr.user_id = userid) ord
10734
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10735
     END IF;
10736
   END;
10737
 
10738
/*-------------------------------------------------------------------------------------------------------*/
10739
   PROCEDURE get_view_content (
10740
     rtagid     IN      NUMBER,
10741
     viewid     IN      NUMBER,
10742
     recordset OUT     typecur
10743
   )
10744
   IS
10745
     isbaseview   CHAR (1);
10746
   BEGIN
10747
     -- Check if the view is BASE VIEW
10748
     SELECT vi.base_view
10749
      INTO isbaseview
10750
      FROM views vi
10751
      WHERE vi.view_id = viewid;
10752
 
10753
     IF (isbaseview = 'Y')
10754
     THEN
10755
       -- Get Base view content
10756
       OPEN recordset FOR
10757
         SELECT   DECODE (rel.pkg_state,
10758
                      NULL, 0,
10759
                      rel.pkg_state
10760
                     ) AS pkg_state,
10761
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10762
                pv.pkg_version, pv.dlocked, pv.pv_description,
10763
                pv.build_type,
10764
                rel.operation
10765
            FROM environment_view rel, PACKAGES pkg, package_versions pv
10766
            WHERE pv.pkg_id = pkg.pkg_id
10767
             AND rel.pv_id = pv.pv_id
10768
             AND rel.view_id = viewid
10769
             AND rel.rtag_id = rtagid
10770
         ORDER BY UPPER (pkg.pkg_name);
10771
     ELSE
10772
       -- Get non base view content
10773
       OPEN recordset FOR
10774
         SELECT   DECODE (rel.pkg_state,
10775
                      NULL, 0,
10776
                      rel.pkg_state
10777
                     ) AS pkg_state,
10778
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10779
                pv.pkg_version, pv.dlocked, pv.pv_description,
10780
                pv.build_type,
10781
                rel.operation
10782
            FROM environment_view rel,
10783
                PACKAGES pkg,
10784
                package_versions pv,
10785
                view_def vd
10786
            WHERE pv.pkg_id = pkg.pkg_id
10787
             AND rel.pv_id = pv.pv_id
10788
             AND rel.rtag_id = rtagid
10789
             AND vd.view_id = viewid
10790
             AND vd.pkg_id = pv.pkg_id
10791
         ORDER BY UPPER (pkg.pkg_name);
10792
     END IF;
10793
   END;
10794
 
10795
/*-------------------------------------------------------------------------------------------------------*/
10796
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
10797
     RETURN NUMBER
10798
   IS
10799
     envtab           NUMBER;
10800
     returnvalue      NUMBER;
10801
     return_not_found NUMBER := -1;
10802
   BEGIN
10803
     envtab := get_package_area (pvid, rtagid);
10804
 
10805
     IF envtab = 0
10806
     THEN
10807
       -- WORK IN PROGRESS --
10808
       returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
10809
     ELSIF envtab = 1
10810
     THEN
10811
       -- PENDING --
10812
       returnvalue := pk_planned.get_package_view (pvid, rtagid);
10813
     ELSIF envtab = 2
10814
     THEN
10815
       -- RELEASED --
10816
       returnvalue := pk_release.get_package_view (pvid, rtagid);
10817
     ELSE
10818
       -- This may be a Patch not located anywhere but unlocked
10819
       returnvalue := return_not_found;
10820
     END IF;
10821
 
10822
     RETURN returnvalue;
10823
   END;
10824
 
10825
/*-------------------------------------------------------------------------------------------------------*/
10826
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
10827
   IS
10828
     viewid        NUMBER;
10829
     envtab        NUMBER;
10830
     ispatch       CHAR (1) := NULL;
10831
     buildtype     CHAR (1) := NULL;
10832
   BEGIN
10833
     -- Check if package is patch
10834
     SELECT pv.is_patch, pv.build_type
10835
      INTO ispatch, buildtype
10836
      FROM package_versions pv
10837
      WHERE pv.pv_id = pvid;
10838
 
10839
     -- Get ViewId
10840
     viewid := get_package_view (pvid, rtagid);
10841
     -- Remove from current area
10842
     envtab := pk_environment.get_package_area (pvid, rtagid);
10843
 
10844
     -- Make sure that package was in work-in-progress or pending before makeing it release
10845
     -- Exclude patches, ripple builds
10846
     IF (envtab < 0)
10847
     THEN
10848
       -- Not found in work-in-progress or pending
10849
       IF (ispatch IS NULL) AND (buildtype = 'M')
10850
       THEN
10851
         raise_application_error (-20000,
10852
                            'This package cannot be released here.'
10853
                           );
10854
       END IF;
10855
     END IF;
10856
 
10857
     -- Log
10858
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10859
 
10860
     IF envtab = 0
10861
     THEN
10862
       -- WORK IN PROGRESS --
10863
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
10864
     ELSIF envtab = 1
10865
     THEN
10866
       -- PENDING --
10867
       pk_planned.remove_package (pvid, rtagid, userid);
10868
     END IF;
10869
 
10870
     -- Change package state
10871
     pk_package.change_state (pvid, 'Y', userid);
10872
 
10873
     -- Make sure it is valid BASE VIEW
10874
     IF viewid < 1
10875
     THEN
10876
       viewid := 7;                     -- This is default base view
10877
     END IF;
10878
 
10879
     IF (ispatch IS NULL)
10880
     THEN
10881
       -- Add package to new area
10882
       pk_release.add_package (pvid, viewid, rtagid, userid);
10883
     END IF;
10884
 
10885
     -- Now do post Release Actions
10886
     pk_release.run_post_actions (pvid, rtagid);
10887
 
10888
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10889
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10890
     clean_do_not_ripple(rtagid);
10891
     clean_advisory_ripple(rtagid);
10892
 
10893
     -- Log
10894
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
10895
   END;
10896
 
10897
/*-------------------------------------------------------------------------------------------------------*/
10898
   PROCEDURE auto_make_release (
10899
     pvid          IN   NUMBER,
10900
     rtagid        IN   NUMBER,
10901
     userid        IN   NUMBER,
10902
     vext          IN   package_versions.v_ext%TYPE,
10903
     ssv_ext       IN   package_versions.v_ext%TYPE,
10904
     clonefrompvid IN   NUMBER
10905
   )
10906
   IS
10907
     viewid        NUMBER;
10908
     envtab        NUMBER;
10909
     ispatch       CHAR (1) := NULL;
10910
     buildtype      CHAR (1) := NULL;
10911
   BEGIN
10912
     -- Check if package is patch
10913
     SELECT pv.is_patch, pv.build_type
10914
      INTO ispatch, buildtype
10915
      FROM package_versions pv
10916
      WHERE pv.pv_id = pvid;
10917
 
10918
     IF vext <> ssv_ext
10919
     THEN
10920
       -- Get ViewId
10921
       viewid := get_package_view (clonefrompvid, rtagid);
10922
       -- Remove from current area
10923
       envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
10924
     ELSE
10925
       -- Get ViewId
10926
       viewid := get_package_view (pvid, rtagid);
10927
       -- Remove from current area
10928
       envtab := pk_environment.get_package_area (pvid, rtagid);
10929
     END IF;
10930
 
10931
     -- Make sure that package was in work-in-progress or pending before makeing it release
10932
     -- Exclude patches, ripple builds
10933
     IF (envtab < 0)
10934
     THEN
10935
       -- Not found in work-in-progress or pending
10936
       IF (ispatch IS NULL) AND (buildtype = 'M')
10937
       THEN
10938
         raise_application_error (-20000,
10939
                            'This package cannot be released here.'
10940
                           );
10941
       END IF;
10942
     END IF;
10943
 
10944
     -- Log
10945
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10946
 
10947
     IF vext <> ssv_ext
10948
     THEN
10949
       IF envtab = 0
10950
       THEN
10951
         -- WORK IN PROGRESS --
10952
         pk_work_in_progress.remove_package (clonefrompvid, rtagid,
10953
                                    userid);
10954
       ELSIF envtab = 1
10955
       THEN
10956
         -- PENDING --
10957
         pk_planned.remove_package (clonefrompvid, rtagid, userid);
10958
       ELSIF envtab = 2
10959
       THEN
10960
         -- RELEASED --
10961
         pk_release.remove_package (clonefrompvid, rtagid, userid);
10962
       END IF;
10963
     ELSE
10964
       IF envtab = 0
10965
       THEN
10966
         -- WORK IN PROGRESS --
10967
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
10968
       ELSIF envtab = 1
10969
       THEN
10970
         -- PENDING --
10971
         pk_planned.remove_package (pvid, rtagid, userid);
10972
       END IF;
10973
     END IF;
10974
 
10975
     -- Change package state
10976
     pk_package.change_state (pvid, 'Y', userid);
10977
 
10978
     -- Make sure it is valid BASE VIEW
10979
     IF viewid < 1
10980
     THEN
10981
       viewid := 7;                     -- This is default base view
10982
     END IF;
10983
 
10984
     IF (ispatch IS NULL)
10985
     THEN
10986
       -- Add package to new area
10987
       pk_release.add_package (pvid, viewid, rtagid, userid);
10988
     END IF;
10989
 
10990
     -- Now do post Release Actions
10991
     pk_release.run_post_actions (pvid, rtagid);
10992
     -- Now update the Dash_Board Table (DEPRECATED)
10993
     pk_rmapi.update_dash_board (rtagid);
10994
 
10995
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10996
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10997
     clean_do_not_ripple(rtagid);
10998
     clean_advisory_ripple(rtagid);
10999
 
11000
     -- Log
11001
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
11002
   END;
11003
 
11004
/*-------------------------------------------------------------------------------------------------------*/
11005
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11006
   IS
11007
     viewid   NUMBER;
11008
     envtab   NUMBER;
11009
   BEGIN
11010
     -- Get ViewId
11011
     --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
11012
     viewid := get_package_view (pvid, rtagid);
11013
     -- Remove from current area
11014
     envtab := pk_environment.get_package_area (pvid, rtagid);
11015
     -- Log
11016
     log_action (pvid,
11017
              'action',
11018
              userid,
11019
              'Start of Make Package UnRelease...'
11020
             );
11021
 
11022
     IF envtab = 2
11023
     THEN
11024
       -- RELEASE AREA --
11025
       pk_release.remove_package (pvid, rtagid, userid);
11026
     ELSIF envtab = 1
11027
     THEN
11028
       -- PENDING --
11029
       pk_planned.remove_package (pvid, rtagid, userid);
11030
     END IF;
11031
 
11032
     -- Change package state
11033
     pk_package.change_state (pvid, 'N', userid);
11034
 
11035
     -- Make sure it is valid BASE VIEW
11036
     IF viewid < 1
11037
     THEN
11038
       viewid := 7;                     -- This is default base view
11039
     END IF;
11040
 
11041
     -- Add package to new area
11042
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11043
     -- Now do post Release Actions
11044
     pk_release.run_post_actions (pvid, rtagid);
11045
     -- Log
11046
     log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
11047
   END;
11048
 
11049
/*-------------------------------------------------------------------------------------------------------*/
11050
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11051
   IS
11052
     viewid     NUMBER;
11053
     ispatch    CHAR (1) := NULL;
11054
     buildtype  CHAR (1) := NULL;
11055
   BEGIN
11056
     -- Check if package is patch
11057
     SELECT pv.is_patch, pv.build_type
11058
      INTO ispatch, buildtype
11059
      FROM package_versions pv
11060
      WHERE pv.pv_id = pvid;
11061
 
11062
     -- Get ViewId
11063
     viewid := get_package_view (pvid, rtagid);
11064
     --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
11065
 
11066
     -- Log
11067
     log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
11068
 
11069
     IF (ispatch IS NULL)
11070
     THEN
11071
       -- Remove from current area
11072
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
11073
       -- Change package state
11074
       pk_package.change_state (pvid, 'P', userid);
11075
       -- Add package to new area
11076
       pk_planned.add_package (pvid, viewid, rtagid, userid);
11077
     END IF;
11078
 
11079
     -- Log
11080
     log_action (pvid, 'action', userid, 'End of Make Package Pending...');
11081
   END;
11082
 
11083
/*-------------------------------------------------------------------------------------------------------*/
11084
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11085
   IS
11086
   BEGIN
11087
     -- Log
11088
     log_action (pvid,
11089
                 'action',
11090
                 userid,
11091
                 'Start of Package Pending Approval...'
11092
                 );
11093
     -- Change package state
11094
     pk_package.change_state (pvid, 'A', userid);
11095
     -- Log
11096
     log_action (pvid, 'action', userid,
11097
                 'End of Package Pending Approval...');
11098
   END;
11099
 
11100
/*-------------------------------------------------------------------------------------------------------*/
11101
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11102
   IS
11103
     viewid   NUMBER;
11104
     operation CHAR;
11105
   BEGIN
11106
     -- Get ViewId
11107
     viewid := get_package_view (pvid, rtagid);
11108
     -- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
11109
 
11110
     -- DEVI-45275
11111
     -- If the package version is an official version that is to be rejected from a merge operation
11112
     -- then find out in order to prevent it being added back to work-in-progress table . This will
11113
     -- be denoted by the operation field in the planned table being A or S
11114
     operation := ' ';
11115
     SELECT
11116
     (CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operation
11117
     FROM planned pl
11118
     WHERE pl.PV_ID = pvid
11119
     AND pl.RTAG_ID = rtagid;
11120
 
11121
     -- Log
11122
     log_action (pvid, 'action', userid, 'Start of Reject Package...');
11123
     -- Remove from current area
11124
     pk_planned.remove_package (pvid, rtagid, userid);
11125
 
11126
     -- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .
11127
     IF operation <> 'A' AND operation <> 'S'
11128
     THEN
11129
     -- Change package state
11130
     pk_package.change_state (pvid, 'R', userid);
11131
     -- Add package to new area
11132
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11133
     ELSE
11134
      log_action (pvid, 'action', userid, 'Rejected Package Merge');
11135
     END IF;
11136
     -- Log
11137
     log_action (pvid, 'action', userid, 'End of Reject Package...');
11138
   END;
11139
 
11140
/*-------------------------------------------------------------------------------------------------------*/
11141
   PROCEDURE change_package_view (
11142
     pvid       IN   NUMBER,
11143
     rtagid     IN   NUMBER,
11144
     newviewid  IN   NUMBER
11145
   )
11146
   IS
11147
     envtab   NUMBER;
11148
   BEGIN
11149
     envtab := pk_environment.get_package_area (pvid, rtagid);
11150
 
11151
     IF envtab = 0
11152
     THEN
11153
       -- WORK IN PROGRESS --
11154
       pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
11155
     ELSIF envtab = 1
11156
     THEN
11157
       -- PENDING --
11158
       pk_planned.change_package_view (pvid, rtagid, newviewid);
11159
     ELSIF envtab = 2
11160
     THEN
11161
       -- RELEASED --
11162
       pk_release.change_package_view (pvid, rtagid, newviewid);
11163
     END IF;
11164
   END;
11165
 
11166
/*-------------------------------------------------------------------------------------------------------*/
11167
   PROCEDURE find_package (
11168
     skeyword     IN      VARCHAR2,
11169
     nrtagid      IN      NUMBER,
11170
     nsearcharea  IN      NUMBER,
11171
     recordset    OUT     typecur
11172
   )
11173
   IS
11174
   BEGIN
11175
     IF nsearcharea = 0
11176
     THEN
11177
       /* Search Work In Progress */
11178
       OPEN recordset FOR
11179
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11180
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11181
                pv.modified_stamp, usr.full_name, usr.user_email
11182
           FROM views vi,
11183
                work_in_progress rc,
11184
                PACKAGES pkg,
11185
                package_versions pv,
11186
                users usr
11187
          WHERE rc.view_id = vi.view_id
11188
            AND rc.pv_id = pv.pv_id
11189
            AND pkg.pkg_id = pv.pkg_id
11190
            AND pv.modifier_id = usr.user_id
11191
            AND rc.rtag_id = nrtagid
11192
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11193
       ORDER BY UPPER (pkg.pkg_name);
11194
     ELSIF nsearcharea = 1
11195
     THEN
11196
       /* Search Pending */
11197
       OPEN recordset FOR
11198
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11199
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11200
                pv.modified_stamp, usr.full_name, usr.user_email
11201
           FROM views vi,
11202
                planned rc,
11203
                PACKAGES pkg,
11204
                package_versions pv,
11205
                users usr
11206
          WHERE rc.view_id = vi.view_id
11207
            AND rc.pv_id = pv.pv_id
11208
            AND pkg.pkg_id = pv.pkg_id
11209
            AND pv.modifier_id = usr.user_id
11210
            AND rc.rtag_id = nrtagid
11211
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11212
       ORDER BY UPPER (pkg.pkg_name);
11213
     ELSIF nsearcharea = 2
11214
     THEN
11215
       /* Search Released */
11216
       OPEN recordset FOR
11217
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11218
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11219
                pv.modified_stamp, usr.full_name, usr.user_email
11220
           FROM views vi,
11221
                release_content rc,
11222
                PACKAGES pkg,
11223
                package_versions pv,
11224
                users usr
11225
          WHERE rc.base_view_id = vi.view_id
11226
            AND rc.pv_id = pv.pv_id
11227
            AND pkg.pkg_id = pv.pkg_id
11228
            AND pv.modifier_id = usr.user_id
11229
            AND rc.rtag_id = nrtagid
11230
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11231
         ORDER BY UPPER (pkg.pkg_name);
11232
     ELSIF nsearcharea = 3
11233
     THEN
11234
       /* Search ALL */
11235
       OPEN recordset FOR
11236
         SELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
11237
                pv.pv_id, pv.pkg_version, pv.comments,
11238
                pv.modified_stamp, usr.full_name, usr.user_email
11239
           FROM views vi,
11240
                environment_view rc,
11241
                PACKAGES pkg,
11242
                package_versions pv,
11243
                users usr
11244
          WHERE rc.view_id = vi.view_id
11245
            AND rc.pv_id = pv.pv_id
11246
            AND pkg.pkg_id = pv.pkg_id
11247
            AND pv.modifier_id = usr.user_id
11248
            AND rc.rtag_id = nrtagid
11249
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11250
         ORDER BY UPPER (pkg.pkg_name);
11251
     END IF;
11252
   END;
11253
 
11254
/*-------------------------------------------------------------------------------------------------------*/
11255
   PROCEDURE find_file (
11256
     skeyword     IN      VARCHAR2,
11257
     nrtagid      IN      NUMBER,
11258
     nsearcharea  IN      NUMBER,
11259
     npagesize    IN      NUMBER,
11260
     recordset    OUT     typecur
11261
   )
11262
   IS
11263
   BEGIN
11264
     IF nsearcharea = 0
11265
     THEN
11266
       /* Search Work In Progress */
11267
       OPEN recordset FOR
11268
         SELECT   qry.*
11269
            FROM (
11270
                 /* File search on Packages */
11271
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11272
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11273
                   FROM work_in_progress rc,
11274
                        PACKAGES pkg,
11275
                        package_versions pv,
11276
                        release_components art
11277
                  WHERE rc.pv_id = art.pv_id
11278
                    AND pv.pkg_id = pkg.pkg_id
11279
                    AND rc.pv_id = pv.pv_id
11280
                    AND rc.rtag_id = nrtagid
11281
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11282
                 UNION ALL
11283
                 /* File search on Products */
11284
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11285
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11286
                   FROM work_in_progress rc,
11287
                        PACKAGES pkg,
11288
                        package_versions pv,
11289
                        product_components art
11290
                  WHERE rc.pv_id = art.pv_id
11291
                    AND pv.pkg_id = pkg.pkg_id
11292
                    AND rc.pv_id = pv.pv_id
11293
                    AND rc.rtag_id = nrtagid
11294
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11295
            WHERE ROWNUM <= npagesize
11296
         ORDER BY UPPER (qry.pkg_name);
11297
     ELSIF nsearcharea = 1
11298
     THEN
11299
       /* Search Pending */
11300
       OPEN recordset FOR
11301
         SELECT   qry.*
11302
            FROM (
11303
                 /* File search on Packages */
11304
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11305
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11306
                   FROM planned rc,
11307
                        PACKAGES pkg,
11308
                        package_versions pv,
11309
                        release_components art
11310
                  WHERE rc.pv_id = art.pv_id
11311
                    AND pv.pkg_id = pkg.pkg_id
11312
                    AND rc.pv_id = pv.pv_id
11313
                    AND rc.rtag_id = nrtagid
11314
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11315
                 UNION ALL
11316
                 /* File search on Products */
11317
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11318
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11319
                   FROM planned rc,
11320
                        PACKAGES pkg,
11321
                        package_versions pv,
11322
                        product_components art
11323
                  WHERE rc.pv_id = art.pv_id
11324
                    AND pv.pkg_id = pkg.pkg_id
11325
                    AND rc.pv_id = pv.pv_id
11326
                    AND rc.rtag_id = nrtagid
11327
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11328
            WHERE ROWNUM <= npagesize
11329
         ORDER BY UPPER (qry.pkg_name);
11330
     ELSIF nsearcharea = 2
11331
     THEN
11332
       /* Search Released */
11333
       OPEN recordset FOR
11334
         SELECT   qry.*
11335
            FROM (
11336
                 /* File search on Packages */
11337
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11338
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11339
                        NULL AS patch_id
11340
                   FROM release_content rc,
11341
                        PACKAGES pkg,
11342
                        package_versions pv,
11343
                        release_components art
11344
                  WHERE rc.pv_id = art.pv_id
11345
                    AND pv.pkg_id = pkg.pkg_id
11346
                    AND rc.pv_id = pv.pv_id
11347
                    AND rc.rtag_id = nrtagid
11348
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11349
                 UNION ALL
11350
                 /* File search on Products */
11351
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11352
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11353
                        NULL AS patch_id
11354
                   FROM release_content rc,
11355
                        PACKAGES pkg,
11356
                        package_versions pv,
11357
                        product_components art
11358
                  WHERE rc.pv_id = art.pv_id
11359
                    AND pv.pkg_id = pkg.pkg_id
11360
                    AND rc.pv_id = pv.pv_id
11361
                    AND rc.rtag_id = nrtagid
11362
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11363
                 UNION ALL
11364
                 /* File search on Patches */
11365
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11366
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11367
                        DECODE (art.file_path,
11368
                                NULL, pp.patch_id,
11369
                                NULL
11370
                                ) AS patch_id
11371
                   FROM release_content rc,
11372
                        PACKAGES pkg,
11373
                        package_versions pv,
11374
                        release_components art,
11375
                        package_patches pp
11376
                  WHERE pv.pv_id = pp.pv_id
11377
                    AND pv.pkg_id = pkg.pkg_id
11378
                    AND rc.rtag_id = nrtagid
11379
                    AND art.pv_id = pp.patch_id
11380
                    AND rc.pv_id = pp.pv_id
11381
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11382
            WHERE ROWNUM <= npagesize
11383
         ORDER BY UPPER (qry.pkg_name);
11384
     ELSIF nsearcharea = 3
11385
     THEN
11386
       /* Search ALL */
11387
       OPEN recordset FOR
11388
         SELECT   qry.*
11389
            FROM (
11390
                 /* File search on Packages */
11391
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11392
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11393
                        NULL AS patch_id
11394
                   FROM environment_view rc,
11395
                        PACKAGES pkg,
11396
                        package_versions pv,
11397
                        release_components art
11398
                  WHERE rc.pv_id = art.pv_id
11399
                    AND pv.pkg_id = pkg.pkg_id
11400
                    AND rc.pv_id = pv.pv_id
11401
                    AND rc.rtag_id = nrtagid
11402
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11403
                 UNION ALL
11404
                 /* File search on Products */
11405
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11406
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11407
                        NULL AS patch_id
11408
                   FROM environment_view rc,
11409
                        PACKAGES pkg,
11410
                        package_versions pv,
11411
                        product_components art
11412
                  WHERE rc.pv_id = art.pv_id
11413
                    AND pv.pkg_id = pkg.pkg_id
11414
                    AND rc.pv_id = pv.pv_id
11415
                    AND rc.rtag_id = nrtagid
11416
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11417
                 UNION ALL
11418
                 /* File search on Patches */
11419
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11420
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11421
                        DECODE (art.file_path,
11422
                                NULL, pp.patch_id,
11423
                                NULL
11424
                               ) AS patch_id
11425
                   FROM release_content rc,
11426
                        PACKAGES pkg,
11427
                        package_versions pv,
11428
                        release_components art,
11429
                        package_patches pp
11430
                  WHERE pv.pv_id = pp.pv_id
11431
                    AND pv.pkg_id = pkg.pkg_id
11432
                    AND rc.rtag_id = nrtagid
11433
                    AND art.pv_id = pp.patch_id
11434
                    AND rc.pv_id = pp.pv_id
11435
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11436
            WHERE ROWNUM <= npagesize
11437
         ORDER BY UPPER (qry.pkg_name);
11438
     END IF;
11439
   END;
11440
 
11441
/*-------------------------------------------------------------------------------------------------------*/
11442
   PROCEDURE get_prodrelease_items (
11443
     rtagid           IN      NUMBER,
11444
     ntruerecordcount OUT     NUMBER,
11445
     recordset        OUT     typecur
11446
   )
11447
   IS
11448
   BEGIN
11449
     -- Get true record count n the number of integration products
11450
     SELECT COUNT (rc.pv_id)
11451
      INTO ntruerecordcount
11452
      FROM release_content rc
11453
      WHERE rc.rtag_id = rtagid;
11454
 
11455
     OPEN recordset FOR
11456
       SELECT vi.view_id, vi.view_name, rel.pkg_state,   --rel.pkg_state,
11457
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11458
              pv.pkg_version, pv.dlocked, pv.pv_description
11459
         FROM release_content rel,
11460
              PACKAGES pkg,
11461
              package_versions pv,
11462
              views vi
11463
        WHERE pv.pkg_id = pkg.pkg_id
11464
          AND rel.pv_id = pv.pv_id
11465
          AND rel.base_view_id = vi.view_id
11466
          AND pv.is_deployable = 'Y'
11467
          AND rtag_id = rtagid
11468
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11469
                                 FROM deployment_manager.os_contents)
11470
          AND rel.product_state IS NULL
11471
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11472
   END;
11473
 
11474
/*-------------------------------------------------------------------------------------------------------*/
11475
   PROCEDURE get_integration_items (
11476
     rtagid           IN      NUMBER,
11477
     ntruerecordcount OUT     NUMBER,
11478
     recordset        OUT     typecur
11479
   )
11480
   IS
11481
   BEGIN
11482
     -- Get true record count n the number of integration products
11483
     SELECT COUNT (rc.pv_id)
11484
      INTO ntruerecordcount
11485
      FROM release_content rc
11486
      WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
11487
 
11488
     OPEN recordset FOR
11489
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11490
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11491
              pv.pkg_version, pv.dlocked, pv.pv_description
11492
         FROM release_content rel,
11493
              PACKAGES pkg,
11494
              package_versions pv,
11495
              views vi
11496
        WHERE pv.pkg_id = pkg.pkg_id
11497
          AND rel.pv_id = pv.pv_id
11498
          AND rel.base_view_id = vi.view_id
11499
          AND pv.is_deployable = 'Y'
11500
          AND rtag_id = rtagid
11501
          AND rel.product_state IN (1, 5)
11502
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11503
   END;
11504
 
11505
/*-------------------------------------------------------------------------------------------------------*/
11506
   PROCEDURE get_test_items (
11507
     rtagid           IN      NUMBER,
11508
     ntruerecordcount OUT     NUMBER,
11509
     recordset        OUT     typecur
11510
   )
11511
   IS
11512
   BEGIN
11513
     -- Get true record count n the number of test products
11514
     SELECT COUNT (rc.pv_id)
11515
      INTO ntruerecordcount
11516
      FROM release_content rc
11517
      WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
11518
 
11519
     OPEN recordset FOR
11520
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11521
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11522
              pv.pkg_version, pv.dlocked, pv.pv_description
11523
         FROM release_content rel,
11524
              PACKAGES pkg,
11525
              package_versions pv,
11526
              views vi
11527
        WHERE pv.pkg_id = pkg.pkg_id
11528
          AND rel.pv_id = pv.pv_id
11529
          AND rel.base_view_id = vi.view_id
11530
          AND pv.is_deployable = 'Y'
11531
          AND rtag_id = rtagid
11532
          AND rel.product_state = 2
11533
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11534
   END;
11535
 
11536
/*-------------------------------------------------------------------------------------------------------*/
11537
   PROCEDURE get_deploy_items (
11538
     rtagid           IN      NUMBER,
11539
     ntruerecordcount OUT     NUMBER,
11540
     recordset        OUT     typecur
11541
   )
11542
   IS
11543
   BEGIN
11544
     -- Get true record count n the number of deploy products
11545
     SELECT COUNT (rc.pv_id)
11546
      INTO ntruerecordcount
11547
      FROM release_content rc
11548
      WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
11549
 
11550
     OPEN recordset FOR
11551
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11552
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11553
              pv.pkg_version, pv.dlocked, pv.pv_description
11554
         FROM release_content rel,
11555
              PACKAGES pkg,
11556
              package_versions pv,
11557
              views vi
11558
        WHERE pv.pkg_id = pkg.pkg_id
11559
          AND rel.pv_id = pv.pv_id
11560
          AND rel.base_view_id = vi.view_id
11561
          AND pv.is_deployable = 'Y'
11562
          AND rtag_id = rtagid
11563
          AND rel.product_state IN (3, 5)
11564
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11565
                                 FROM deployment_manager.os_contents)
11566
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11567
   END;
11568
 
11569
/*-------------------------------------------------------------------------------------------------------*/
11570
   PROCEDURE get_reject_items (
11571
     rtagid           IN      NUMBER,
11572
     ntruerecordcount OUT     NUMBER,
11573
     recordset        OUT     typecur
11574
   )
11575
   IS
11576
   BEGIN
11577
     -- Get true record count n the number of reject products
11578
     SELECT COUNT (rc.pv_id)
11579
       INTO ntruerecordcount
11580
       FROM release_content rc
11581
      WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
11582
 
11583
     OPEN recordset FOR
11584
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11585
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11586
              pv.pkg_version, pv.dlocked, pv.pv_description
11587
         FROM release_content rel,
11588
              PACKAGES pkg,
11589
              package_versions pv,
11590
              views vi
11591
        WHERE pv.pkg_id = pkg.pkg_id
11592
          AND rel.pv_id = pv.pv_id
11593
          AND rel.base_view_id = vi.view_id
11594
          AND pv.is_deployable = 'Y'
11595
          AND rtag_id = rtagid
11596
          AND rel.product_state = 4
11597
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11598
   END;
11599
/*-------------------------------------------------------------------------------------------------------*/
11600
   -- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table
11601
   -- to the release_content table.
11602
 
11603
  PROCEDURE approve_merge (
11604
   PvId    IN NUMBER,
11605
   RtagId  IN NUMBER,
11606
   UserId  IN NUMBER
11607
  )
11608
  IS
11609
   viewid        NUMBER;
11610
   envtab        NUMBER;
11611
   oper         CHAR;
11612
  BEGIN
11613
      -- Get ViewId
11614
     viewid := get_package_view (pvid, rtagid);
11615
 
11616
     -- Get the view tab
11617
     envtab := pk_environment.get_package_area (pvid, rtagid);
11618
 
11619
     -- Make sure that package was in pending before merging it to released
11620
     IF (envtab <> 1)
11621
     THEN
11622
       -- Not found in pending
11623
       raise_application_error (-20000,
11624
                          'This package cannot be released here.'
11625
                         );
11626
     END IF;
11627
 
11628
     -- Log
11629
     log_action (pvid, 'action', userid, 'Start of Package Merge...');
11630
 
11631
     -- Get the planned operation type A=Add, S=Subtract
11632
     SELECT ev.operation INTO oper
11633
       FROM environment_view ev
11634
      WHERE ev.rtag_id = RtagId
11635
        AND ev.pv_id = PvId
11636
        AND (ev.operation = 'A' OR ev.operation = 'S');
11637
 
11638
     -- Remove from Pending
11639
     pk_planned.remove_package (PvId, RtagId, UserId);
11640
 
11641
     -- Either add to the release, or remove from the release as the operation commands
11642
     IF oper = 'A'
11643
     THEN
11644
       pk_release.add_package(PvId, viewId, RtagId, UserId);
11645
 
11646
     ELSIF oper = 'S'
11647
     THEN
11648
       pk_release.remove_package(PvId, RtagId, UserId);
11649
 
11650
       -- Delete old package's pegging info
11651
       DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;
11652
 
11653
       -- Delete old package's advisory ripple info
11654
       DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;
11655
     END IF;
11656
 
11657
     touch_release(RtagId);
11658
 
11659
     -- Log
11660
     log_action (pvid, 'action', userid, 'End of Package Merge...');
11661
  END;
11662
/*-------------------------------------------------------------------------------------------------------*/
11663
END pk_environment;
1374 dpurdie 11664
/
11665
--------------------------------------------------------
11666
--  DDL for Package Body PK_WORK_IN_PROGRESS
11667
--------------------------------------------------------
1373 dpurdie 11668
 
11669
  CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS
11670
 
11671
/*
11672
------------------------------
11673
||  Last Modified:  S.Vukovic
11674
||  Modified Date:  2/May/2005
11675
||  Body Version:   1.0
11676
------------------------------
11677
*/
11678
 
11679
 
11680
/*-------------------------------------------------------------------------------------------------------*/
11681
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11682
 
11683
	oldPvId NUMBER;
11684
	ReleaseLocation VARCHAR2(4000);
11685
	sLocation VARCHAR2(4000) := NULL;
11686
 
11687
 
11688
BEGIN
11689
	/*--------------- Business Rules Here -------------------*/
11690
	/*-------------------------------------------------------*/
11691
 
11692
	BEGIN
11693
		-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
11694
		SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
11695
		  FROM WORK_IN_PROGRESS wip,
11696
		  	   RELEASE_TAGS rt,
11697
			   PROJECTS proj
11698
		 WHERE wip.PV_ID = newPvId
11699
		   AND wip.RTAG_ID = rt.RTAG_ID
11700
		   AND rt.OFFICIAL != 'Y'
11701
		   AND rt.PROJ_ID = proj.PROJ_ID;
11702
 
11703
		EXCEPTION
11704
	    	WHEN NO_DATA_FOUND THEN
11705
	       		sLocation := NULL;
11706
 
11707
	END;	   	   
11708
 
11709
 
11710
 
11711
	IF (sLocation IS NULL)  THEN
11712
 
11713
		-- Add to "Work in progress"
11714
		INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
11715
		VALUES( RtagId, newPvId, ViewId );
11716
 
11717
 
11718
	    /* LOG ACTION */
11719
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11720
		  FROM PROJECTS proj,
11721
		  	   RELEASE_TAGS rt
11722
		 WHERE rt.PROJ_ID = proj.PROJ_ID
11723
		   AND rt.RTAG_ID = RtagId;
11724
 
11725
		Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11726
 
11727
	ELSE
11728
 
11729
		RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
11730
 
11731
	END IF;
11732
 
11733
END;
11734
/*-------------------------------------------------------------------------------------------------------*/
11735
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11736
 
11737
	ReleaseLocation VARCHAR2(4000);
11738
 
11739
BEGIN
11740
 
11741
	/*--------------- Business Rules Here -------------------*/
11742
	/*-------------------------------------------------------*/
11743
 
11744
 
11745
	-- Get release location for logging pusposes
11746
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11747
	  FROM PROJECTS proj,
11748
	  	   RELEASE_TAGS rt
11749
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11750
	   AND rt.RTAG_ID = RtagId;
11751
 
11752
 
11753
	-- Delete from Work In Progress
11754
	DELETE
11755
	  FROM WORK_IN_PROGRESS wip
11756
	 WHERE wip.RTAG_ID = RtagId
11757
	   AND wip.PV_ID = PvId;
11758
 
11759
	Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );
11760
 
11761
 
11762
 
11763
 
11764
END;
11765
/*-------------------------------------------------------------------------------------------------------*/
11766
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS
11767
 
11768
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
11769
	ReleaseLocation VARCHAR2(4000);
11770
	PvId NUMBER;
11771
 
11772
BEGIN
11773
 
11774
	/*--------------- Business Rules Here -------------------*/
11775
	IF (PvIdList IS NULL)
11776
	THEN
11777
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
11778
	END IF;
11779
	/*-------------------------------------------------------*/
11780
 
11781
 
11782
	nIdCollector := IN_LIST_NUMBER ( PvIdList );
11783
 
11784
 
11785
	-- Get release location for logging pusposes
11786
	SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11787
	  FROM PROJECTS proj,
11788
	  	   RELEASE_TAGS rt
11789
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11790
	   AND rt.RTAG_ID = RtagId;
11791
 
11792
 
11793
	FOR i IN 1..nIdCollector.COUNT
11794
	LOOP
11795
		PvId := nIdCollector(i);
11796
 
11797
		-- Delete from Work In Progress
11798
		DELETE
11799
		  FROM WORK_IN_PROGRESS wip
11800
		 WHERE wip.RTAG_ID = RtagId
11801
		   AND wip.PV_ID = PvId;
11802
 
11803
		Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11804
 
11805
	END LOOP;
11806
 
11807
 
11808
END;
11809
/*-------------------------------------------------------------------------------------------------------*/
11810
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
11811
 
11812
	ReturnValue NUMBER;
11813
 
11814
BEGIN
11815
	SELECT wip.VIEW_ID INTO ReturnValue
11816
	  FROM WORK_IN_PROGRESS wip
11817
	 WHERE wip.RTAG_ID = RtagId
11818
	   AND wip.PV_ID = PvId;
11819
 
11820
	RETURN ReturnValue;
11821
END;
11822
/*-------------------------------------------------------------------------------------------------------*/
11823
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
11824
 
11825
	IsBaseView CHAR(1);
11826
 
11827
BEGIN
11828
 
11829
	-- Check if the view is BASE VIEW
11830
	SELECT vi.BASE_VIEW INTO IsBaseView
11831
	  FROM VIEWS vi
11832
	 WHERE vi.VIEW_ID = ViewId;
11833
 
11834
	IF (IsBaseView = 'Y') THEN 
11835
		-- Get Base view content
11836
		OPEN RecordSet FOR
11837
		SELECT 0 AS PKG_STATE,
11838
			   NULL AS DEPRECATED_STATE,
11839
			   pv.pv_id, 
11840
			   pkg.pkg_name, 
11841
			   pv.pkg_version, 
11842
			   pv.dlocked, 
11843
			   pv.pv_description,
11844
			   pv.BUILD_TYPE
11845
		  FROM WORK_IN_PROGRESS rel,
11846
		       packages pkg,
11847
		       package_versions pv
11848
		 WHERE pv.pkg_id = pkg.pkg_id
11849
		   AND rel.pv_id = pv.pv_id
11850
		   AND rel.VIEW_ID = ViewId
11851
		   AND rel.RTAG_ID = RtagId
11852
		 ORDER BY UPPER(pkg.PKG_NAME);
11853
 
11854
 
11855
	ELSE	 
11856
 
11857
	 	-- Get non base view content
11858
		OPEN RecordSet FOR
11859
		SELECT 0 AS PKG_STATE,
11860
			   NULL AS DEPRECATED_STATE,
11861
			   pv.pv_id, 
11862
			   pkg.pkg_name, 
11863
			   pv.pkg_version, 
11864
			   pv.dlocked, 
11865
			   pv.pv_description,
11866
			   pv.BUILD_TYPE
11867
		  FROM WORK_IN_PROGRESS rel,
11868
		       packages pkg,
11869
		       package_versions pv,
11870
			   VIEW_DEF vd
11871
		 WHERE pv.pkg_id = pkg.pkg_id
11872
		   AND rel.pv_id = pv.pv_id
11873
		   AND vd.VIEW_ID = ViewId
11874
		   AND vd.PKG_ID = pv.PKG_ID
11875
		   AND rel.RTAG_ID = RtagId
11876
		 ORDER BY UPPER(pkg.PKG_NAME);
11877
 
11878
 
11879
	END IF;	 	
11880
 
11881
 
11882
END;
11883
/*-------------------------------------------------------------------------------------------------------*/
11884
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
11885
 
11886
BEGIN
11887
 
11888
	UPDATE WORK_IN_PROGRESS wip SET
11889
	wip.VIEW_ID = NewViewId
11890
	WHERE wip.PV_ID = PvId
11891
	  AND wip.RTAG_ID = RtagId;
11892
 
11893
END;
11894
/*-------------------------------------------------------------------------------------------------------*/
11895
END PK_WORK_IN_PROGRESS;
1374 dpurdie 11896
/
11897
--------------------------------------------------------
11898
--  DDL for Package Body PK_ARCHIVE
11899
--------------------------------------------------------
1373 dpurdie 11900
 
11901
  CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE" 
11902
IS
11903
/*
11904
------------------------------
11905
||  Author:  Rupesh Solanki
11906
||  Date:    26 October 2006
11907
||  Version:   1.0
11908
------------------------------
11909
*/
11910
/*---------------------------*/
11911
PROCEDURE populate_packages_table IS
11912
 
11913
BEGIN
11914
		  INSERT INTO archive_manager.PACKAGES
11915
		  (
11916
		  select * from packages where pkg_id not in 
11917
		  		  (select pkg_id from archive_manager.packages)
11918
		  );
11919
 
11920
          INSERT INTO archive_manager.PROCESSES
11921
          (
11922
          select * from processes where proc_id not in 
11923
            (select proc_id from archive_manager.processes)
11924
          );
11925
 
11926
 
11927
 
11928
END;
11929
/*-------------------------------------------------------------------------------------------------------*/
11930
   PROCEDURE populate_archive_data_table (
11931
      nrtagid   IN   release_tags.rtag_id%TYPE
11932
   )
11933
   IS
11934
/*
11935
Reason: To populate the archive_data table with information regarding the
11936
         number of package versions that exist in other releases.
11937
*/
11938
      numcount      NUMBER;
11939
      numusedby     NUMBER;
11940
      numruntime    NUMBER;
11941
 
11942
      /* Get all the package versions in the release */
11943
      CURSOR archive_cur
11944
      IS
11945
         SELECT pv_id
11946
           FROM release_content
11947
          WHERE rtag_id = nrtagid;
11948
 
11949
      archive_rec   archive_cur%ROWTYPE;
11950
   BEGIN
11951
/*--------------- Business Rules Here -------------------*/
11952
/*-------------------------------------------------------*/
11953
      OPEN archive_cur;
11954
 
11955
      FETCH archive_cur
11956
       INTO archive_rec;
11957
 
11958
      WHILE archive_cur%FOUND
11959
      LOOP
11960
        /* How many packages depend on this package version? */
11961
         SELECT COUNT (*)
11962
           INTO numusedby
11963
           FROM package_dependencies
11964
          WHERE dpv_id = archive_rec.pv_id;
11965
 
11966
        /* How many project releases use this package version?  */
11967
         SELECT COUNT (*)
11968
           INTO numcount
11969
           FROM release_content
11970
          WHERE pv_id = archive_rec.pv_id;
11971
 
11972
        /* How many packages have this package version as runtime
11973
        dependency? */
11974
         SELECT COUNT (*)
11975
           INTO numruntime
11976
           FROM runtime_dependencies
11977
          WHERE rtd_id = archive_rec.pv_id;
11978
 
11979
        /* Insert into the archive_data table if they are not runtime dependant
11980
        and package dependant and they exist in that particular release only*/
11981
         IF numusedby = 0 AND numcount = 1 AND numruntime = 0
11982
         THEN
11983
            INSERT INTO archive_data
11984
                        (rtag_id, pv_id
11985
                        )
11986
                 VALUES (nrtagid, archive_rec.pv_id
11987
                        );
11988
         END IF;
11989
 
11990
         FETCH archive_cur
11991
          INTO archive_rec;
11992
      END LOOP;
11993
   END;
11994
 
11995
/*-------------------------------------------------------------------------------------------------------*/
11996
   PROCEDURE migrate_pv_to_archive_schema (
11997
      nrtagid   IN   release_tags.rtag_id%TYPE
11998
   )
11999
   IS
12000
   BEGIN
12001
 
12002
      /* MIGRATION - PACKAGE_VERSIONS */
12003
      INSERT INTO archive_manager.package_versions
12004
         SELECT *
12005
           FROM package_versions
12006
          WHERE pv_id IN (SELECT pv_id
12007
                            FROM archive_data);
12008
 
12009
      /* MIGRATION - PACKAGE_BUILD_ENV */
12010
      INSERT INTO archive_manager.package_build_env
12011
         SELECT *
12012
           FROM package_build_env
12013
          WHERE pv_id IN (SELECT pv_id
12014
                            FROM archive_data);
12015
 
12016
      /* PURGE DATA FROM PACKAGE_BUILD_ENV */
12017
      DELETE FROM package_build_env
12018
            WHERE pv_id IN (SELECT pv_id
12019
                              FROM archive_data);
12020
 
12021
      /* MIGRATION - PACKAGE_BUILD_INFO */
12022
      INSERT INTO archive_manager.package_build_info
12023
         SELECT *
12024
           FROM package_build_info
12025
          WHERE pv_id IN (SELECT pv_id
12026
                            FROM archive_data);
12027
 
12028
      /* PURGE DATA FROM PACKAGE_BUILD_info */
12029
      DELETE FROM package_build_info
12030
            WHERE pv_id IN (SELECT pv_id
12031
                              FROM archive_data);							  
12032
 
12033
      /* MIGRATION - UNIT_TESTS  */
12034
      INSERT INTO archive_manager.unit_tests
12035
         SELECT *
12036
           FROM unit_tests
12037
          WHERE pv_id IN (SELECT pv_id
12038
                            FROM archive_data);
12039
 
12040
      /* PURGE DATA FROM UNIT_TESTS*/
12041
      DELETE FROM unit_tests
12042
            WHERE pv_id IN (SELECT pv_id
12043
                              FROM archive_data);
12044
 
12045
      /* MIGRATION - PACKAGE_PROCESSES */
12046
      INSERT INTO archive_manager.package_processes
12047
         SELECT *
12048
           FROM package_processes
12049
          WHERE pv_id IN (SELECT pv_id
12050
                            FROM archive_data);
12051
 
12052
      /* PURGE DATA FROM PACKAGE_PROCESSES*/
12053
      DELETE FROM package_processes
12054
            WHERE pv_id IN (SELECT pv_id
12055
                              FROM archive_data);
12056
 
12057
      /* MIGRATION - PACKAGE_DEPENDENCIES */
12058
      INSERT INTO archive_manager.package_dependencies
12059
         SELECT *
12060
           FROM package_dependencies
12061
          WHERE pv_id IN (SELECT pv_id
12062
                            FROM archive_data);
12063
 
12064
      /* PURGE DATA FROM PACKAGE_DEPENDENCIES*/
12065
      DELETE FROM package_dependencies
12066
            WHERE pv_id IN (SELECT pv_id
12067
                              FROM archive_data);
12068
 
12069
      /* MIGRATION - CODE_REVIEWS */
12070
      INSERT INTO archive_manager.code_reviews
12071
         SELECT *
12072
           FROM code_reviews
12073
          WHERE pv_id IN (SELECT pv_id
12074
                            FROM archive_data);
12075
 
12076
      /* PURGE DATA FROM CODE_REVIEWS*/
12077
      DELETE FROM code_reviews
12078
            WHERE pv_id IN (SELECT pv_id
12079
                              FROM archive_data);
12080
 
12081
      /* MIGRATION - RUNTIME_DEPENDENCIES*/
12082
      INSERT INTO archive_manager.runtime_dependencies
12083
         SELECT *
12084
           FROM runtime_dependencies
12085
          WHERE pv_id IN (SELECT pv_id
12086
                            FROM archive_data);
12087
 
12088
      /* PURGE DATA FROM RUNTIME_DEPENDENCIES*/
12089
      DELETE FROM runtime_dependencies
12090
            WHERE pv_id IN (SELECT pv_id
12091
                              FROM archive_data);
12092
 
12093
      /* MIGRATION - PACKAGE_DOCUMENTS */
12094
      INSERT INTO archive_manager.package_documents
12095
         SELECT *
12096
           FROM package_documents
12097
          WHERE pv_id IN (SELECT pv_id
12098
                            FROM archive_data);
12099
 
12100
      /* PURGE DATA FROM PACKAGE_DOCUMENTS*/
12101
      DELETE FROM package_documents
12102
            WHERE pv_id IN (SELECT pv_id
12103
                              FROM archive_data);
12104
 
12105
      /* MIGRATION - PACKAGE_PATCHES */
12106
      INSERT INTO archive_manager.package_patches
12107
         SELECT *
12108
           FROM package_patches
12109
          WHERE pv_id IN (SELECT pv_id
12110
                            FROM archive_data);
12111
 
12112
      /* PURGE DATA FROM PACKAGE_PATCHES*/
12113
      DELETE FROM package_patches
12114
            WHERE pv_id IN (SELECT pv_id
12115
                              FROM archive_data);
12116
 
12117
      /* MIGRATION - CQ_ISSUES */
12118
      INSERT INTO archive_manager.cq_issues
12119
         SELECT *
12120
           FROM cq_issues
12121
          WHERE pv_id IN (SELECT pv_id
12122
                            FROM archive_data);
12123
 
12124
      /* PURGE DATA FROM CQ_ISSUES*/
12125
      DELETE FROM cq_issues
12126
            WHERE pv_id IN (SELECT pv_id
12127
                              FROM archive_data);
12128
 
12129
      /* MIGRATION - ADDITIONAL_NOTES */
12130
      INSERT INTO archive_manager.additional_notes
12131
         SELECT *
12132
           FROM additional_notes
12133
          WHERE pv_id IN (SELECT pv_id
12134
                            FROM archive_data);
12135
 
12136
      /* PURGE DATA FROM ADDITIONAL_NOTES*/
12137
      DELETE FROM additional_notes
12138
            WHERE pv_id IN (SELECT pv_id
12139
                              FROM archive_data);
12140
 
12141
      /* MIGRATION - RELEASE_COMPONENTS */
12142
      INSERT INTO archive_manager.release_components
12143
         SELECT *
12144
           FROM release_components
12145
          WHERE pv_id IN (SELECT pv_id
12146
                            FROM archive_data);
12147
 
12148
      /* PURGE DATA FROM RELEASE_COMPONENTS*/
12149
      DELETE FROM release_components
12150
            WHERE pv_id IN (SELECT pv_id
12151
                              FROM archive_data);
12152
 
12153
      /* MIGRATION - IGNORE_WARNINGS */
12154
      INSERT INTO archive_manager.ignore_warnings
12155
         SELECT *
12156
           FROM ignore_warnings
12157
          WHERE pv_id IN (SELECT pv_id
12158
                            FROM archive_data);
12159
 
12160
      /* PURGE DATA FROM IGNORE_WARNINGS*/
12161
      DELETE FROM ignore_warnings
12162
            WHERE pv_id IN (SELECT pv_id
12163
                              FROM archive_data);
12164
 
12165
      /* PURGE DATA FROM WORK_IN_PROGRESS */
12166
      DELETE FROM work_in_progress
12167
            WHERE rtag_id = nrtagid;
12168
 
12169
      /* PURGE DATA FROM PLANNED */
12170
      DELETE FROM planned
12171
            WHERE rtag_id = nrtagid;
12172
 
12173
      /* MIGRATION - JIRA_ISSUES */
12174
      INSERT INTO archive_manager.jira_issues
12175
         SELECT *
12176
           FROM jira_issues
12177
          WHERE pv_id IN (SELECT pv_id
12178
                            FROM archive_data);
12179
 
12180
      /* PURGE DATA FROM JIRA_ISSUES*/
12181
      DELETE FROM jira_issues
12182
            WHERE pv_id IN (SELECT pv_id
12183
                              FROM archive_data);
12184
 
12185
      /* MIGRATION - PRODUCT_COMPONENTS */
12186
      INSERT INTO archive_manager.product_components
12187
         SELECT *
12188
           FROM product_components
12189
          WHERE pv_id IN (SELECT pv_id
12190
                            FROM archive_data);
12191
 
12192
      /* PURGE DATA FROM PRODUCT_COMPONENTS*/
12193
      DELETE FROM product_components
12194
            WHERE pv_id IN (SELECT pv_id
12195
                              FROM archive_data);
12196
 
12197
      /* MIGRATION - ACTION_LOG */
12198
      INSERT INTO archive_manager.action_log
12199
         SELECT *
12200
           FROM action_log
12201
          WHERE pv_id IN (SELECT pv_id
12202
                            FROM archive_data);
12203
 
12204
      /* PURGE DATA FROM ACTION_LOG*/
12205
      DELETE FROM action_log
12206
            WHERE pv_id IN (SELECT pv_id
12207
                              FROM archive_data);
12208
 
12209
 
12210
   END;
12211
 
12212
/*-------------------------------------------------------------------------------------------------------*/
12213
   PROCEDURE migrate_rtag_to_archive_schema (
12214
      nrtagid   IN   release_tags.rtag_id%TYPE
12215
   )
12216
   IS
12217
   BEGIN
12218
      /* MIGRATION - DO_NOT_RIPPLE */
12219
      INSERT INTO archive_manager.do_not_ripple
12220
         SELECT *
12221
           FROM do_not_ripple dnp
12222
          WHERE rtag_id = nrtagid;
12223
 
12224
      /* PURGE DATA FROM DO_NOT_RIPPLE */
12225
      DELETE FROM do_not_ripple
12226
            WHERE rtag_id = nrtagid;
12227
 
12228
      /* MIGRATION - ADVISORY_RIPPLES*/
12229
      INSERT INTO archive_manager.advisory_ripples
12230
         SELECT *
12231
           FROM advisory_ripple dnp
12232
          WHERE rtag_id = nrtagid;
12233
 
12234
      /* PURGE DATA FROM ADVISORY_RIPPLES*/
12235
      DELETE FROM advisory_ripple
12236
            WHERE rtag_id = nrtagid;			
12237
 
12238
      /* MIGRATION - RELEASE_CONTENT */
12239
      INSERT INTO archive_manager.release_content
12240
         SELECT *
12241
           FROM release_content
12242
          WHERE rtag_id = nrtagid;
12243
 
12244
      /* PURGE DATA FROM RELEASE_CONTENT*/
12245
      DELETE FROM release_content
12246
            WHERE rtag_id = nrtagid;
12247
 
12248
      /* MIGRATION - NOTIFICATION_HISTORY */
12249
      INSERT INTO archive_manager.notification_history
12250
         SELECT *
12251
           FROM notification_history
12252
          WHERE rtag_id = nrtagid;
12253
 
12254
      /* PURGE DATA FROM NOTIFICATION_HISTORY*/
12255
      DELETE FROM notification_history
12256
            WHERE rtag_id = nrtagid;
12257
 
12258
      /* MIGRATION - BUILD_ORDER   */
12259
      INSERT INTO archive_manager.build_order
12260
         SELECT *
12261
           FROM build_order
12262
          WHERE rtag_id = nrtagid;
12263
 
12264
      /* PURGE DATA FROM BUILD_ORDER*/
12265
      DELETE FROM build_order
12266
            WHERE rtag_id = nrtagid;
12267
 
12268
      /* MIGRATION - PROJECT_ACTION_LOG */
12269
      INSERT INTO archive_manager.project_action_log
12270
         SELECT *
12271
           FROM project_action_log
12272
          WHERE rtag_id = nrtagid;
12273
 
12274
      /* PURGE DATA FROM PROJECT_ACTION_LOG */
12275
      DELETE FROM project_action_log
12276
            WHERE rtag_id = nrtagid;
12277
 
12278
      /* MIGRATION - DEPRECATED_PACKAGES */
12279
      INSERT INTO archive_manager.deprecated_packages
12280
         SELECT *
12281
           FROM deprecated_packages
12282
          WHERE rtag_id = nrtagid;
12283
 
12284
      /* PURGE DATA FROM DEPRECATED_PACKAGES */
12285
      DELETE FROM deprecated_packages
12286
            WHERE rtag_id = nrtagid;
12287
 
12288
      /* MIGRATION - RELEASE_TAGS */
12289
      INSERT INTO archive_manager.release_tags
12290
         SELECT *
12291
           FROM release_tags
12292
          WHERE rtag_id = nrtagid;
12293
 
12294
 
12295
      /* PURGE DATA FROM PACKAGE_VERSIONS*/
12296
      DELETE FROM package_versions
12297
            WHERE pv_id IN (SELECT pv_id
12298
                              FROM archive_data);
12299
 
12300
 
12301
   END;
12302
 
12303
/*-------------------------------------------------------------------------------------------------------*/
12304
   PROCEDURE clean_up_archive_data_table (
12305
      nrtagid   IN   release_tags.rtag_id%TYPE
12306
   )
12307
   IS
12308
   BEGIN
12309
      /* Cleaning Up The Archive_Data Table */
12310
      DELETE FROM archive_data
12311
            WHERE rtag_id = nrtagid;
12312
   END;
12313
 
12314
/*-------------------------------------------------------------------------------------------------------*/
12315
   PROCEDURE write_action_log (
12316
      nuserid   IN   NUMBER,
12317
      nrtagid   IN   release_tags.rtag_id%TYPE
12318
   )
12319
   IS
12320
   BEGIN
12321
      /* Write Into Archive_Action_Log Table */
12322
      INSERT INTO archive_action_log
12323
                  (user_id, date_time_stamp, rtag_id,
12324
                   description
12325
                  )
12326
           VALUES (nuserid, ora_sysdatetime, nrtagid,
12327
                   'Release has been archived to the ARCHIVE_MANAGER schema'
12328
                  );
12329
   END;
12330
/*-------------------------------------------------------------------------------------------------------*/
12331
END pk_archive; 
1374 dpurdie 12332
/
12333
--------------------------------------------------------
12334
--  DDL for Package Body PK_PACKAGE_TEST
12335
--------------------------------------------------------
1373 dpurdie 12336
 
12337
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE_TEST" 
12338
IS
12339
/*
12340
------------------------------
12341
||  Last Modified:  R. Solanki
12342
||  Modified Date:  09/03/2006
12343
||  Body Version:   1.7
12344
------------------------------
12345
*/
12346
 
12347
   /*-------------------------------------------------------------------------------------------------------*/
12348
   PROCEDURE new_version (
12349
      nlastpvid                   IN       NUMBER,
12350
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
12351
      cbuildtype                  IN       CHAR,
12352
      nsettopvid                  IN       NUMBER DEFAULT NULL,
12353
      nrtagid                     IN       NUMBER,
12354
      nuserid                     IN       NUMBER,
12355
      enumissues_state_imported   IN       NUMBER,
12356
      returnpvid                  OUT      NUMBER
12357
   )
12358
   IS
12359
      origpkg_id                   package_versions.pkg_id%TYPE;
12360
      origdlocked                  package_versions.dlocked%TYPE;
12361
      ssv_mm                       package_versions.v_mm%TYPE;
12362
      ssv_nmm                      package_versions.v_nmm%TYPE;
12363
      ssv_ext                      package_versions.v_ext%TYPE;
12364
      spackageversion              VARCHAR2 (4000);
12365
      nissuestypes                 NUMBER;
12366
      nviewid                      NUMBER;
12367
      reccount                     NUMBER;
12368
      isreleased                   package_versions.dlocked%TYPE       := 'N';
12369
      slabel                       VARCHAR2 (4000)                    := NULL;
12370
 
12371
      CURSOR package_versions_cur
12372
      IS
12373
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
12374
           FROM package_versions pv
12375
          WHERE pv.pkg_version = snewpkgversion
12376
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
12377
                                         FROM package_versions origpv
12378
                                        WHERE origpv.pv_id = nlastpvid);
12379
 
12380
      package_versions_rec         package_versions_cur%ROWTYPE;
12381
 
12382
      CURSOR clone_package_versions_cur
12383
      IS
12384
         SELECT DISTINCT pkg_id, dlocked
12385
                    FROM package_versions
12386
                   WHERE pv_id = nlastpvid;
12387
 
12388
      clone_package_versions_rec   clone_package_versions_cur%ROWTYPE;
12389
   BEGIN
12390
      spackageversion := snewpkgversion;
12391
 
12392
      IF nsettopvid IS NULL
12393
      THEN
12394
         -- SetToPv_id is not supplied, hence proceed.
12395
 
12396
         /* ---------------------------------------------------- */
12397
/* Find id package_version exists                       */
12398
/* ---------------------------------------------------- */
12399
         OPEN package_versions_cur;
12400
 
12401
         FETCH package_versions_cur
12402
          INTO package_versions_rec;
12403
 
12404
         IF package_versions_cur%NOTFOUND
12405
         THEN
12406
            ---  Create brand new package ---
12407
            SELECT seq_pv_id.NEXTVAL
12408
              INTO returnpvid
12409
              FROM DUAL;
12410
 
12411
            -- Split Version to get extention + other
12412
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
12413
 
12414
            -- Get previous package to clone from
12415
            OPEN clone_package_versions_cur;
12416
 
12417
            FETCH clone_package_versions_cur
12418
             INTO clone_package_versions_rec;
12419
 
12420
            origpkg_id := clone_package_versions_rec.pkg_id;
12421
            origdlocked := clone_package_versions_rec.dlocked;
12422
 
12423
            CLOSE clone_package_versions_cur;
12424
 
12425
            -- Automated built config
12426
            IF (cbuildtype = 'A')
12427
            THEN
12428
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
12429
                                    -- Make sure that version is still unique
12430
            END IF;
12431
 
12432
            -- Clone Package Version Details --
12433
            INSERT INTO package_versions
12434
                        (pv_id, pkg_id, pkg_version, dlocked, created_stamp,
12435
                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
12436
                         v_ext, src_path, pv_description, pv_overview,
12437
                         last_pv_id, owner_id, is_deployable,
12438
                         is_build_env_required, build_type, bs_id, is_autobuildable)
12439
               SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
12440
                      spackageversion AS pkg_version, 'N' AS dlocked,
12441
                      ora_sysdate AS created_stamp, nuserid AS creator_id,
12442
                      ora_sysdatetime AS modified_stamp,
12443
                      nuserid AS modifier_id, ssv_mm AS v_mm,
12444
                      ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
12445
                      pv.pv_description, pv.pv_overview,
12446
                      nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
12447
                      pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable
12448
                 FROM package_versions pv
12449
                WHERE pv.pv_id = nlastpvid;
12450
 
12451
            -- Set Issues Type for cloning ---
12452
            IF origdlocked = 'Y'
12453
            THEN
12454
               nissuestypes := enumissues_state_imported;
12455
            ELSE
12456
               nissuestypes := NULL;
12457
            END IF;
12458
 
12459
            -- Update Label for automated built
12460
            IF (cbuildtype = 'A')
12461
            THEN
12462
               slabel := get_automated_label (returnpvid);
12463
 
12464
               UPDATE package_versions pv
12465
                  SET pv.pkg_label = slabel
12466
                WHERE pv.pv_id = returnpvid;
12467
            END IF;
12468
 
12469
            basic_clone (nlastpvid,
12470
                         returnpvid,
12471
                         nrtagid,
12472
                         nuserid,
12473
                         origpkg_id,
12474
                         nissuestypes
12475
                        );
12476
         ELSE
12477
            --- Package already exists, hence reuse ---
12478
            returnpvid := package_versions_rec.pv_id;
12479
            isreleased := package_versions_rec.dlocked;
12480
         END IF;
12481
 
12482
         CLOSE package_versions_cur;
12483
      ELSE
12484
         returnpvid := nsettopvid;
12485
      END IF;
12486
   END new_version;
12487
 
12488
/*-------------------------------------------------------------------------------------------------------*/
12489
   PROCEDURE change_state (
12490
      pvid       IN   NUMBER,
12491
      newstate   IN   package_versions.dlocked%TYPE,
12492
      userid     IN   NUMBER
12493
   )
12494
   IS
12495
   BEGIN
12496
      -- Set package in Released mode
12497
      UPDATE package_versions pv
12498
         SET pv.dlocked = newstate,
12499
             pv.modified_stamp = ora_sysdatetime,
12500
             pv.modifier_id = userid
12501
       WHERE pv.pv_id = pvid;
12502
 
12503
      -- Log action --
12504
      IF newstate = 'Y'
12505
      THEN
12506
         -- RELEASED --
12507
         log_action (pvid,
12508
                     'makeofficial',
12509
                     userid,
12510
                     'Package state change to: Released'
12511
                    );
12512
      ELSIF newstate = 'N'
12513
      THEN
12514
         -- UNLOCKED --
12515
         log_action (pvid,
12516
                     'makeunofficial',
12517
                     userid,
12518
                     'Package state change to: Ulocked'
12519
                    );
12520
      ELSIF newstate = 'P'
12521
      THEN
12522
         -- PENDING APPROVAL --
12523
         log_action (pvid,
12524
                     'add_to_planned',
12525
                     userid,
12526
                     'Package state change to: Pending Approval'
12527
                    );
12528
      ELSIF newstate = 'R'
12529
      THEN
12530
         -- REJECTED --
12531
         log_action (pvid,
12532
                     'reject_package',
12533
                     userid,
12534
                     'Package state change to: Rejected'
12535
                    );
12536
      ELSIF newstate = 'A'
12537
      THEN
12538
         -- APPROVED --
12539
         log_action (pvid,
12540
                     'approve_package',
12541
                     userid,
12542
                     'Package state change to: Approved'
12543
                    );
12544
      END IF;
12545
   END;
12546
 
12547
/*-------------------------------------------------------------------------------------------------------*/
12548
   PROCEDURE destroy_package (
12549
      pvid               IN       NUMBER,
12550
      overridewarnings   IN       CHAR DEFAULT 'N',
12551
      problemstring      OUT      VARCHAR2
12552
   )
12553
   IS
12554
      LOCKED     CHAR;
12555
      pkgid      NUMBER;
12556
      ROWCOUNT   NUMBER;
12557
   BEGIN
12558
      /*
12559
      || This will destroy all package details from database.
12560
      || It will only be used to remove unwanted work in progress packages,
12561
      || or mestaken versions
12562
      */
12563
 
12564
      /*--------------- Business Rules Here -------------------*/
12565
      problemstring := NULL;
12566
 
12567
      IF overridewarnings = 'N'
12568
      THEN
12569
         -- Package must not be official
12570
         SELECT pv.dlocked
12571
           INTO LOCKED
12572
           FROM package_versions pv
12573
          WHERE pv.pv_id = pvid;
12574
 
12575
         IF LOCKED = 'Y'
12576
         THEN
12577
            problemstring :=
12578
                  problemstring
12579
               || '- Package is locked and released.'
12580
               || UTL_TCP.crlf;
12581
         END IF;
12582
 
12583
         -- Cannot remove if used in BOMs
12584
         SELECT COUNT (osc.prod_id)
12585
           INTO ROWCOUNT
12586
           FROM deployment_manager.os_contents osc
12587
          WHERE osc.prod_id = pvid;
12588
 
12589
         IF ROWCOUNT > 0
12590
         THEN
12591
            problemstring :=
12592
                  problemstring
12593
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
12594
               || UTL_TCP.crlf;
12595
         END IF;
12596
 
12597
         -- Cannot remove if Referenced as build dependency
12598
         SELECT COUNT (dep.pv_id)
12599
           INTO ROWCOUNT
12600
           FROM package_dependencies dep
12601
          WHERE dep.dpv_id = pvid;
12602
 
12603
         IF ROWCOUNT > 0
12604
         THEN
12605
            problemstring :=
12606
                  problemstring
12607
               || '- Package is referenced by other package as build dependency.'
12608
               || UTL_TCP.crlf;
12609
         END IF;
12610
 
12611
         -- Cannot remove if Referenced as runtime dependency
12612
         SELECT COUNT (rd.pv_id)
12613
           INTO ROWCOUNT
12614
           FROM runtime_dependencies rd
12615
          WHERE rd.rtd_id = pvid;
12616
 
12617
         IF ROWCOUNT > 0
12618
         THEN
12619
            problemstring :=
12620
                  problemstring
12621
               || '- Package is referenced by other package as runtime dependency.'
12622
               || UTL_TCP.crlf;
12623
         END IF;
12624
 
12625
         -- Cannot remove if Referenced as patch
12626
         SELECT COUNT (pp.pv_id)
12627
           INTO ROWCOUNT
12628
           FROM package_patches pp
12629
          WHERE pp.patch_id = pvid;
12630
 
12631
         IF ROWCOUNT > 0
12632
         THEN
12633
            problemstring :=
12634
                  problemstring
12635
               || '- Package is used as patch by other package.'
12636
               || UTL_TCP.crlf;
12637
         END IF;
12638
      END IF;
12639
 
12640
/*-------------------------------------------------------*/
12641
      IF (problemstring IS NULL)
12642
      THEN
12643
         --- Remove From Work in Progress
12644
         DELETE FROM work_in_progress wip
12645
               WHERE wip.pv_id = pvid;
12646
 
12647
         --- Remove From Pending
12648
         DELETE FROM planned pl
12649
               WHERE pl.pv_id = pvid;
12650
 
12651
         --- Remove From Released area
12652
         DELETE FROM release_content rc
12653
               WHERE rc.pv_id = pvid;
12654
 
12655
         ---Remove From Package Processes
12656
         DELETE FROM package_processes pp
12657
               WHERE pp.pv_id = pvid;
12658
 
12659
         --- Remove Dependencies
12660
         DELETE FROM package_dependencies dep
12661
               WHERE dep.pv_id = pvid;
12662
 
12663
         DELETE FROM package_dependencies dep
12664
               WHERE dep.dpv_id = pvid;
12665
 
12666
         --- Remove Runtime dependencies
12667
         DELETE FROM runtime_dependencies rtd
12668
               WHERE rtd.pv_id = pvid;
12669
 
12670
         DELETE FROM runtime_dependencies rtd
12671
               WHERE rtd.rtd_id = pvid;
12672
 
12673
         --- Remove components
12674
         DELETE FROM product_components pc
12675
               WHERE pc.pv_id = pvid;
12676
 
12677
         DELETE FROM release_components rc
12678
               WHERE rc.pv_id = pvid;
12679
 
12680
         --- Remove From Notification History
12681
         DELETE FROM notification_history nh
12682
               WHERE nh.pv_id = pvid;
12683
 
12684
         --- Remove From Ignore Warnings
12685
         DELETE FROM ignore_warnings iw
12686
               WHERE iw.pv_id = pvid;
12687
 
12688
         --- Remove From Additional Notes
12689
         DELETE FROM additional_notes an
12690
               WHERE an.pv_id = pvid;
12691
 
12692
         --- Remove From CQ Issues
12693
         DELETE FROM cq_issues cq
12694
               WHERE cq.pv_id = pvid;
12695
 
12696
         --- Remove from Package Patches
12697
         DELETE FROM package_patches pp
12698
               WHERE pp.pv_id = pvid;
12699
 
12700
         DELETE FROM package_patches pp
12701
               WHERE pp.patch_id = pvid;
12702
 
12703
         --- Remove From Package Documents
12704
         DELETE FROM package_documents pd
12705
               WHERE pd.pv_id = pvid;
12706
 
12707
         --- Remove from Code Review
12708
         DELETE FROM code_reviews cr
12709
               WHERE cr.pv_id = pvid;
12710
 
12711
         --- Remove from Unit Tests
12712
         DELETE FROM unit_tests ut
12713
               WHERE ut.pv_id = pvid;
12714
 
12715
         --- Remove from Package BuildEnv
12716
         DELETE FROM package_build_env pbe
12717
               WHERE pbe.pv_id = pvid;
12718
 
12719
		 --- Remove from Package Build Info
12720
		 DELETE FROM package_build_info pbi
12721
		 	   WHERE pbi.pv_id = pvid;    
12722
 
12723
 
12724
         --- Remove from Build Order
12725
         DELETE FROM build_order bo
12726
               WHERE bo.pv_id = pvid;
12727
 
12728
         --- Remove from Note Manager
12729
         DELETE FROM note_manager nm
12730
               WHERE nm.nid = pvid;
12731
 
12732
         --- Remove from Action log
12733
         DELETE FROM action_log al
12734
               WHERE al.pv_id = pvid;
12735
 
12736
		 --- Remove from Do Not Ripple 
12737
		 DELETE FROM DO_NOT_RIPPLE dnr
12738
		 	   WHERE dnr.PV_ID = pvid;
12739
 
12740
		 --- Remove from Jira Issues 
12741
		 DELETE FROM JIRA_ISSUES jira
12742
		 	   WHERE jira.PV_ID = pvid;
12743
 
12744
         --- Finally Remove From Package Versions
12745
         --- Get Package name
12746
         SELECT pv.pkg_id
12747
           INTO pkgid
12748
           FROM package_versions pv
12749
          WHERE pv.pv_id = pvid;
12750
 
12751
         DELETE FROM package_versions pv
12752
               WHERE pv.pv_id = pvid;
12753
 
12754
         --- Remove package name if not used any more
12755
         SELECT COUNT (pv.pv_id)
12756
           INTO ROWCOUNT
12757
           FROM package_versions pv
12758
          WHERE pv.pkg_id = pkgid;
12759
 
12760
         IF ROWCOUNT < 1
12761
         THEN
12762
            DELETE FROM PACKAGES pkg
12763
                  WHERE pkg.pkg_id = pkgid;
12764
         END IF;
12765
      END IF;
12766
   END;
12767
 
12768
/*-------------------------------------------------------------------------------------------------------*/
12769
   PROCEDURE new_patch (
12770
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
12771
      nparentpvid        IN       NUMBER,
12772
      spatchidlist       IN       VARCHAR2,
12773
      nuserid            IN       NUMBER,
12774
      returnpatchid      OUT      NUMBER
12775
   )
12776
   IS
12777
      patchpv_id           NUMBER;
12778
      parpkg_id            NUMBER;
12779
      lastinstallorder     NUMBER;
12780
      ispatchdlocked       package_versions.dlocked%TYPE;
12781
      ssv_mm               package_versions.v_mm%TYPE;
12782
      ssv_nmm              package_versions.v_nmm%TYPE;
12783
      ssv_ext              package_versions.v_ext%TYPE;
12784
      opatchdepcollector   relmgr_number_tab_t      := relmgr_number_tab_t
12785
                                                                          ();
12786
 
12787
      CURSOR parent_cur
12788
      IS
12789
         SELECT pv.*, pkg.pkg_name
12790
           FROM package_versions pv, PACKAGES pkg
12791
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
12792
 
12793
      parent_rec           parent_cur%ROWTYPE;
12794
 
12795
      CURSOR patch_cur
12796
      IS
12797
         SELECT pv.*, pg.pkg_name
12798
           FROM package_versions pv, PACKAGES pg
12799
          WHERE pv.pkg_id = parpkg_id
12800
            AND pv.pkg_version = snewpatchversion
12801
            AND pv.pkg_id = pg.pkg_id;
12802
 
12803
      patch_rec            patch_cur%ROWTYPE;
12804
 
12805
      CURSOR releases_cur
12806
      IS
12807
         SELECT rc.pv_id
12808
           FROM release_content rc
12809
          WHERE rc.pv_id = patch_rec.pv_id;
12810
 
12811
      releases_rec         releases_cur%ROWTYPE;
12812
   BEGIN
12813
      -- Get Last Install Order
12814
      SELECT COUNT (*)
12815
        INTO lastinstallorder
12816
        FROM package_patches pp
12817
       WHERE pp.pv_id = nparentpvid;
12818
 
12819
      -- Get parent details
12820
      OPEN parent_cur;
12821
 
12822
      FETCH parent_cur
12823
       INTO parent_rec;
12824
 
12825
      parpkg_id := parent_rec.pkg_id;
12826
 
12827
      -- Find if patch exists in database
12828
      OPEN patch_cur;
12829
 
12830
      FETCH patch_cur
12831
       INTO patch_rec;
12832
 
12833
      -- Parent must be official
12834
      IF parent_rec.dlocked = 'Y'
12835
      THEN
12836
         IF patch_cur%NOTFOUND
12837
         THEN
12838
            ispatchdlocked := 'N';
12839
 
12840
            -- Create new patch version --
12841
            SELECT seq_pv_id.NEXTVAL
12842
              INTO patchpv_id
12843
              FROM DUAL;
12844
 
12845
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
12846
 
12847
            INSERT INTO package_versions
12848
                        (pv_id, pkg_id, pkg_version,
12849
                         dlocked, created_stamp, creator_id,
12850
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
12851
                         src_path,
12852
                         pv_description,
12853
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
12854
						 is_autobuildable
12855
                        )
12856
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
12857
                         ispatchdlocked, ora_sysdate, nuserid,
12858
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
12859
                         parent_rec.src_path,
12860
                            'This is a patch to '
12861
                         || parent_rec.pkg_name
12862
                         || ' '
12863
                         || parent_rec.pkg_version,
12864
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N'
12865
                        );
12866
 
12867
            INSERT INTO package_patches
12868
                        (pv_id, patch_id, install_order)
12869
               (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12870
                       lastinstallorder + 1 AS install_order
12871
                  FROM package_versions pv
12872
                 WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12873
 
12874
            /* LOG ACTION */
12875
            log_action (patchpv_id,
12876
                        'new_version',
12877
                        nuserid,
12878
                        'Patch version created: ' || snewpatchversion
12879
                       );
12880
            log_action (nparentpvid,
12881
                        'patch_add',
12882
                        nuserid,
12883
                        'New patch created and attached: ' || snewpatchversion
12884
                       );
12885
         ELSE
12886
            patchpv_id := patch_rec.pv_id;
12887
            ispatchdlocked := patch_rec.dlocked;
12888
 
12889
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
12890
            OPEN releases_cur;
12891
 
12892
            FETCH releases_cur
12893
             INTO releases_rec;
12894
 
12895
            IF releases_cur%NOTFOUND
12896
            THEN
12897
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
12898
               UPDATE package_versions
12899
                  SET is_patch = 'Y'
12900
                WHERE pv_id = patchpv_id;
12901
 
12902
               INSERT INTO package_patches
12903
                           (pv_id, patch_id, install_order)
12904
                  (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12905
                          lastinstallorder + 1 AS install_order
12906
                     FROM package_versions pv
12907
                    WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12908
            END IF;
12909
 
12910
            CLOSE releases_cur;
12911
 
12912
            /* LOG ACTION */
12913
            log_action (nparentpvid,
12914
                        'patch_add',
12915
                        nuserid,
12916
                           'Patch version was found and attached: '
12917
                        || snewpatchversion
12918
                       );
12919
         END IF;
12920
      END IF;
12921
 
12922
      /* Create Patch Dependencies */
12923
      opatchdepcollector := in_list_number (spatchidlist);
12924
 
12925
      -- Make sure patch is unofficial before altering its dependencies
12926
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
12927
      THEN
12928
         -- Delete Existing Dependencies
12929
         DELETE FROM package_dependencies dep
12930
               WHERE dep.pv_id = patchpv_id;
12931
 
12932
         -- Insert new dependencies
12933
         INSERT INTO package_dependencies
12934
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
12935
            SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
12936
                   parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
12937
                   'L' AS build_type
12938
              FROM package_versions pv
12939
             WHERE pv.pv_id IN (
12940
                      SELECT *
12941
                        FROM TABLE
12942
                                (CAST
12943
                                    (opatchdepcollector AS relmgr_number_tab_t)
12944
                                ));
12945
      END IF;
12946
 
12947
      -- Return patch_id
12948
      returnpatchid := patchpv_id;
12949
 
12950
      CLOSE parent_cur;
12951
 
12952
      CLOSE patch_cur;
12953
   EXCEPTION
12954
      WHEN DUP_VAL_ON_INDEX
12955
      THEN
12956
         raise_application_error (-20000,
12957
                                     'Patch version '
12958
                                  || snewpatchversion
12959
                                  || ' already exist.'
12960
                                 );
12961
   END;
12962
 
12963
/*-------------------------------------------------------------------------------------------------------*/
12964
   PROCEDURE obsolete_patch (
12965
      patchid            IN   NUMBER,
12966
      isobsolete         IN   CHAR,
12967
      obsoletecomments   IN   VARCHAR2,
12968
      userid             IN   NUMBER
12969
   )
12970
   IS
12971
   BEGIN
12972
      -- Update patch
12973
      UPDATE package_versions pv
12974
         SET pv.is_obsolete = isobsolete,
12975
             pv.obsolete_comments = obsoletecomments
12976
       WHERE pv.pv_id = patchid;
12977
 
12978
      /*
12979
      -- Update patch children
12980
      UPDATE PACKAGE_VERSIONS pv SET
12981
      pv.IS_OBSOLETE = IsObsolete,
12982
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12983
      WHERE pv.PV_ID IN (
12984
                     SELECT DISTINCT dep.DPV_ID
12985
                       FROM PACKAGE_DEPENDENCIES dep
12986
                      WHERE dep.PV_ID = PatchId
12987
                     );
12988
 
12989
 
12990
      -- Update patch parent
12991
      UPDATE PACKAGE_VERSIONS pv SET
12992
      pv.IS_OBSOLETE = IsObsolete,
12993
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12994
      WHERE pv.PV_ID IN (
12995
                     SELECT DISTINCT dep.PV_ID
12996
                       FROM PACKAGE_DEPENDENCIES dep
12997
                      WHERE dep.DPV_ID = PatchId
12998
                     );
12999
 
13000
         */
13001
 
13002
      /* LOG ACTION */
13003
      IF isobsolete IS NOT NULL
13004
      THEN
13005
         log_action (patchid,
13006
                     'patch_obsolete',
13007
                     userid,
13008
                     'Obsolete patch. ' || obsoletecomments
13009
                    );
13010
      ELSE
13011
         log_action (patchid,
13012
                     'patch_obsolete',
13013
                     userid,
13014
                     'Undo patch obsolete.'
13015
                    );
13016
      END IF;
13017
   END;
13018
 
13019
/*-------------------------------------------------------------------------------------------------------*/
13020
   PROCEDURE obsolete_patches (
13021
      spatchidlist       IN   VARCHAR2,
13022
      isobsolete         IN   CHAR,
13023
      obsoletecomments   IN   VARCHAR2,
13024
      userid             IN   NUMBER
13025
   )
13026
   IS
13027
   BEGIN
13028
      /*--------------- Business Rules Here -------------------*/
13029
      IF spatchidlist IS NULL
13030
      THEN
13031
         raise_application_error (-20000,
13032
                                  'Please select one or more Patches.'
13033
                                 );
13034
      END IF;
13035
 
13036
/*-------------------------------------------------------*/
13037
 
13038
      -- Update patch
13039
      UPDATE package_versions pv
13040
         SET pv.is_obsolete = isobsolete,
13041
             pv.obsolete_comments = obsoletecomments
13042
       WHERE pv.pv_id IN (
13043
                SELECT *
13044
                  FROM THE
13045
                          (SELECT CAST
13046
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
13047
                                     )
13048
                             FROM DUAL
13049
                          ));
13050
   /*
13051
   -- Update patch children
13052
   UPDATE PACKAGE_VERSIONS pv SET
13053
   pv.IS_OBSOLETE = IsObsolete,
13054
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13055
   WHERE pv.PV_ID IN (
13056
                  SELECT DISTINCT dep.DPV_ID
13057
                    FROM PACKAGE_DEPENDENCIES dep
13058
                   WHERE dep.PV_ID = PatchId
13059
                  );
13060
 
13061
 
13062
   -- Update patch parent
13063
   UPDATE PACKAGE_VERSIONS pv SET
13064
   pv.IS_OBSOLETE = IsObsolete,
13065
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13066
   WHERE pv.PV_ID IN (
13067
                  SELECT DISTINCT dep.PV_ID
13068
                    FROM PACKAGE_DEPENDENCIES dep
13069
                   WHERE dep.DPV_ID = PatchId
13070
                  );
13071
 
13072
      */
13073
 
13074
   /* LOG ACTION
13075
   IF IsObsolete IS NOT NULL THEN
13076
         Log_Action ( PatchId, 'patch_obsolete', UserId,
13077
                  'Obsolete patch. '|| ObsoleteComments );
13078
   ELSE
13079
      Log_Action ( PatchId, 'patch_obsolete', UserId,
13080
                  'Undo patch obsolete.' );
13081
   END IF;  */
13082
   END;
13083
 
13084
/*-------------------------------------------------------------------------------------------------------*/
13085
   PROCEDURE add_process (
13086
      nprocid         IN   processes.proc_id%TYPE,
13087
      shealthtag      IN   processes.proc_name%TYPE,
13088
      sprocdesc       IN   processes.proc_description%TYPE,
13089
      scmdinterface   IN   processes.run_as%TYPE,
13090
      spkgowner       IN   processes.pkg_owner%TYPE,
13091
      sisinterface    IN   processes.is_interface%TYPE,
13092
      npvid           IN   package_processes.pv_id%TYPE,
13093
      nuserid         IN   NUMBER
13094
   )
13095
   IS
13096
      pkgname   VARCHAR2 (100);
13097
/*Rupesh Release on 17/05/2006*/
13098
   BEGIN
13099
      INSERT INTO processes
13100
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
13101
                   is_interface
13102
                  )
13103
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
13104
                   sisinterface
13105
                  );
13106
 
13107
      pk_package.add_package_process (nprocid, npvid, nuserid);
13108
   END;
13109
 
13110
/*-------------------------------------------------------------------------------------------------------*/
13111
   PROCEDURE add_package_process (
13112
      nprocidlist   IN   VARCHAR2,
13113
      npvid         IN   package_processes.pv_id%TYPE,
13114
      nuserid       IN   NUMBER
13115
   )
13116
   IS
13117
      processname   VARCHAR2 (4000);
13118
 
13119
/*Rupesh Release on 17/05/2006*/
13120
      CURSOR proc_cur
13121
      IS
13122
         SELECT prc.proc_id
13123
           FROM processes prc
13124
          WHERE prc.proc_id IN (
13125
                   SELECT *
13126
                     FROM THE
13127
                             (SELECT CAST
13128
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
13129
                                        )
13130
                                FROM DUAL
13131
                             ));
13132
 
13133
      proc_rec      proc_cur%ROWTYPE;
13134
   BEGIN
13135
      OPEN proc_cur;
13136
 
13137
      FETCH proc_cur
13138
       INTO proc_rec;
13139
 
13140
      WHILE proc_cur%FOUND
13141
      LOOP
13142
         INSERT INTO package_processes
13143
                     (proc_id, pv_id
13144
                     )
13145
              VALUES (proc_rec.proc_id, npvid
13146
                     );
13147
 
13148
         SELECT prc.proc_name
13149
           INTO processname
13150
           FROM processes prc
13151
          WHERE prc.proc_id = proc_rec.proc_id;
13152
 
13153
         -- Log Action --
13154
         log_action (npvid,
13155
                     'process_add',
13156
                     nuserid,
13157
                     'Added process with health tag ' || processname
13158
                    );
13159
 
13160
         FETCH proc_cur
13161
          INTO proc_rec;
13162
      END LOOP;
13163
   END;
13164
 
13165
/*-------------------------------------------------------------------------------------------------------*/
13166
   PROCEDURE remove_process (
13167
      nprocid   IN   package_processes.proc_id%TYPE,
13168
      npvid     IN   package_processes.pv_id%TYPE,
13169
      nuserid   IN   NUMBER
13170
   )
13171
   IS
13172
      processname   VARCHAR2 (4000);
13173
/* Rupesh Release on 17/05/2006*/
13174
   BEGIN
13175
      SELECT prc.proc_name
13176
        INTO processname
13177
        FROM processes prc
13178
       WHERE prc.proc_id = nprocid;
13179
 
13180
      DELETE FROM package_processes
13181
            WHERE proc_id = nprocid AND pv_id = npvid;
13182
 
13183
      -- Log Action --
13184
      log_action (npvid,
13185
                  'process_remove',
13186
                  nuserid,
13187
                  'Removed process with health tag ' || processname
13188
                 );
13189
   END;
13190
/*-------------------------------------------------------------------------------------------------------*/
13191
  /* 
13192
  Author: Rupesh Solanki
13193
  Purpose: To move package versions from one release to another
13194
  Release: 4th September 2006 
13195
 
13196
  */
13197
  PROCEDURE move_package (
13198
   	  npvid  			  IN package_versions.pv_id%TYPE,
13199
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
13200
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
13201
	  nuserid			  IN NUMBER	
13202
  )	
13203
  IS	
13204
 
13205
  oldrtag_name VARCHAR2(4000);
13206
  newrtag_name VARCHAR2(4000);
13207
 
13208
 
13209
 
13210
  BEGIN
13211
 
13212
 
13213
  SELECT rtag_name into oldrtag_name
13214
  FROM RELEASE_TAGS
13215
  WHERE rtag_id = nrtagid;
13216
 
13217
  SELECT rtag_name into newrtag_name
13218
  FROM RELEASE_TAGS
13219
  WHERE rtag_id = nnewrtagid;
13220
 
13221
  /* Table Work In Progress*/
13222
  	   UPDATE WORK_IN_PROGRESS
13223
	   SET RTAG_ID = nnewrtagid
13224
	   WHERE RTAG_ID = nrtagid
13225
	   AND PV_ID = npvid;
13226
 
13227
  /* Table PLANNED*/	
13228
  	   UPDATE PLANNED
13229
	   SET RTAG_ID = nnewrtagid
13230
	   WHERE RTAG_ID = nrtagid
13231
	   AND PV_ID = npvid;   
13232
 
13233
      -- Log Action --
13234
      log_action (npvid,
13235
                  'move_package_version',
13236
                  nuserid,
13237
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
13238
                 );  	   	     
13239
 
13240
 
13241
  END;
13242
 
13243
/*-------------------------------------------------------------------------------------------------------*/
13244
PROCEDURE modify_product_state (
13245
   	  npvid IN package_versions.pv_id%TYPE,
13246
	  nstateid IN product_states.state_id%TYPE,
13247
	  nuserid IN NUMBER
13248
   ) IS
13249
 
13250
   sStateName VARCHAR(4000);
13251
 
13252
  /* 
13253
  Author: Rupesh Solanki
13254
  Purpose: To modify the product state from integration to test to deployment
13255
  Release: 25th January 2006 
13256
  */   
13257
 
13258
  BEGIN
13259
 
13260
  UPDATE PACKAGE_VERSIONS
13261
  SET PRODUCT_STATE = nstateid
13262
  WHERE PV_ID = npvid;
13263
 
13264
 
13265
  SELECT STATE INTO sStateName
13266
  FROM PRODUCT_STATES 
13267
  WHERE STATE_ID = nstateid;
13268
 
13269
  -- Log Action --
13270
  log_action (npvid,
13271
              'modify_product_state',
13272
               nuserid,
13273
               sStateName
13274
              );  
13275
 
13276
 
13277
  END;			  	   	     
13278
/*-------------------------------------------------------------------------------------------------------*/   
13279
END pk_package_Test;
1374 dpurdie 13280
/
13281
--------------------------------------------------------
13282
--  DDL for Package Body PK_ENVIRONMENT_TEST
13283
--------------------------------------------------------
1373 dpurdie 13284
 
13285
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT_TEST" 
13286
IS
13287
/*
13288
------------------------------
13289
||  Last Modified:  Rupesh Solanki
13290
||  Modified Date:  29/Jan/2007
13291
||  Body Version:   1.1
13292
------------------------------
13293
*/
13294
 
13295
   /*-------------------------------------------------------------------------------------------------------*/
13296
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
13297
      RETURN NUMBER
13298
   IS
13299
   BEGIN
13300
       /*
13301
      || N - unlocked
13302
      || Y - release and locked
13303
      || P - penging approval
13304
      || A - approved package ready for auto-build
13305
      */
13306
      IF cdlock = 'N' OR cdlock = 'R'
13307
      THEN
13308
         -- WORK IN PROGRESS --
13309
         RETURN 0;
13310
      ELSIF cdlock = 'P' OR cdlock = 'A'
13311
      THEN
13312
         -- PENDING --
13313
         RETURN 1;
13314
      ELSIF cdlock = 'Y'
13315
      THEN
13316
         -- RELEASED --
13317
         RETURN 2;
13318
      ELSE
13319
         -- NOT FOUND --
13320
         raise_application_error
13321
                         (-20000,
13322
                             'Cannot decide where to place package. [cDlock='
13323
                          || cdlock
13324
                          || ']'
13325
                         );
13326
      END IF;
13327
   END;
13328
 
13329
/*-------------------------------------------------------------------------------------------------------*/
13330
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
13331
      RETURN NUMBER
13332
   IS
13333
      envtab    NUMBER            := -1;
13334
 
13335
      CURSOR curarea
13336
      IS
13337
         SELECT 2 AS envtab
13338
           FROM release_content rc
13339
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13340
         UNION
13341
         SELECT 0 AS envtab
13342
           FROM work_in_progress wip
13343
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13344
         UNION
13345
         SELECT 1 AS envtab
13346
           FROM planned pl
13347
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13348
 
13349
      recarea   curarea%ROWTYPE;
13350
   BEGIN
13351
      OPEN curarea;
13352
 
13353
      FETCH curarea
13354
       INTO recarea;
13355
 
13356
      IF curarea%FOUND
13357
      THEN
13358
         envtab := recarea.envtab;
13359
      END IF;
13360
 
13361
      CLOSE curarea;
13362
 
13363
      RETURN envtab;
13364
   END;
13365
 
13366
/*-------------------------------------------------------------------------------------------------------*/
13367
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
13368
      RETURN NUMBER
13369
   IS
13370
      ispatch   package_versions.dlocked%TYPE;
13371
      viewid    NUMBER                          := -1;
13372
 
13373
      CURSOR curview
13374
      IS
13375
         SELECT rc.base_view_id AS view_id
13376
           FROM release_content rc
13377
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13378
         UNION
13379
         SELECT wip.view_id AS view_id
13380
           FROM work_in_progress wip
13381
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13382
         UNION
13383
         SELECT pl.view_id AS view_id
13384
           FROM planned pl
13385
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13386
 
13387
      recview   curview%ROWTYPE;
13388
   BEGIN
13389
      -- Get dlock state
13390
      SELECT pv.is_patch
13391
        INTO ispatch
13392
        FROM package_versions pv
13393
       WHERE pv.pv_id = pvid;
13394
 
13395
      -- Decide which view id should package go under.
13396
      IF (ispatch != 'Y') OR (ispatch IS NULL)
13397
      THEN
13398
         -- Get VIEW ID of Package
13399
         OPEN curview;
13400
 
13401
         FETCH curview
13402
          INTO recview;
13403
 
13404
         IF curview%FOUND
13405
         THEN
13406
            viewid := recview.view_id;
13407
         ELSE
13408
            raise_application_error
13409
               (-20000,
13410
                   'Cannot find view_id to proceed. [PvId='
13411
                || pvid
13412
                || ']. The current version may not exist in the release anymore.'
13413
               );
13414
         END IF;
13415
 
13416
         CLOSE curview;
13417
      ELSE
13418
         -- Get VIEW ID of Patch (view id of parent package)
13419
         SELECT rc.base_view_id
13420
           INTO viewid
13421
           FROM release_content rc, package_patches ppv
13422
          WHERE rc.rtag_id = rtagid
13423
            AND rc.pv_id = ppv.pv_id
13424
            AND ppv.patch_id = pvid;
13425
      END IF;
13426
 
13427
      RETURN viewid;
13428
   END;
13429
 
13430
/*-------------------------------------------------------------------------------------------------------*/
13431
   PROCEDURE add_package (
13432
      pvid     IN   NUMBER,
13433
      viewid   IN   NUMBER,
13434
      rtagid   IN   NUMBER,
13435
      userid   IN   NUMBER
13436
   )
13437
   IS
13438
      dlocked   package_versions.dlocked%TYPE;
13439
      envtab    NUMBER;
13440
   BEGIN
13441
      IF can_edit_pkg_in_project (pvid, rtagid) = 1
13442
      THEN
13443
         -- Get dlock state
13444
         SELECT pv.dlocked
13445
           INTO dlocked
13446
           FROM package_versions pv
13447
          WHERE pv.pv_id = pvid;
13448
 
13449
         -- Get which area should go under
13450
         envtab := select_environment_area (dlocked);
13451
         -- Log
13452
         log_action (pvid, 'action', userid, 'Start of Package Add...');
13453
 
13454
         -- Remove Package
13455
         IF envtab = 0
13456
         THEN
13457
            -- WORK IN PROGRESS --
13458
            pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
13459
         ELSIF envtab = 1
13460
         THEN
13461
            -- PENDING --
13462
            pk_planned.add_package (pvid, viewid, rtagid, userid);
13463
         ELSIF envtab = 2
13464
         THEN
13465
            -- RELEASED --
13466
            -- NOTE: this package will be replaced with matching package
13467
            pk_release.add_package (pvid, viewid, rtagid, userid);
13468
            -- Now do post Release Actions
13469
            pk_release.run_post_actions (pvid, rtagid);
13470
         END IF;
13471
 
13472
         -- Log
13473
         log_action (pvid, 'action', userid, 'End of Package Add...');
13474
      END IF;
13475
   END;
13476
 
13477
/*-------------------------------------------------------------------------------------------------------*/
13478
   PROCEDURE add_package_bulk (
13479
      pvidlist   IN   VARCHAR2,
13480
      viewid     IN   NUMBER,
13481
      rtagid     IN   NUMBER,
13482
      userid     IN   NUMBER
13483
   )
13484
   IS
13485
      nidcollector   relmgr_number_tab_t            := relmgr_number_tab_t
13486
                                                                          ();
13487
      dlocked        package_versions.dlocked%TYPE;
13488
      pvid           NUMBER;
13489
      envtab         NUMBER;
13490
   BEGIN
13491
      /*--------------- Business Rules Here -------------------*/
13492
      IF (pvidlist IS NULL)
13493
      THEN
13494
         raise_application_error (-20000,
13495
                                  'Please select at least one package.'
13496
                                 );
13497
      END IF;
13498
 
13499
/*-------------------------------------------------------*/
13500
      nidcollector := in_list_number (pvidlist);
13501
 
13502
      FOR i IN 1 .. nidcollector.COUNT
13503
      LOOP
13504
         pvid := nidcollector (i);
13505
         add_package (pvid, viewid, rtagid, userid);
13506
      END LOOP;
13507
   END;
13508
 
13509
/*-------------------------------------------------------------------------------------------------------*/
13510
   PROCEDURE replace_package (
13511
      newpvid   IN   NUMBER,
13512
      oldpvid   IN   NUMBER,
13513
      rtagid    IN   NUMBER,
13514
      userid    IN   NUMBER
13515
   )
13516
   IS
13517
      dlocked        package_versions.dlocked%TYPE;
13518
      viewid         NUMBER;
13519
      envtab         NUMBER;
13520
      ROWCOUNT       NUMBER;
13521
      creleasemode   CHAR (1);
13522
      npkgid         NUMBER;
13523
   BEGIN
13524
      /*--------------- Business Rules Here -------------------*/
13525
      -- Check if oldPvId exists. It could have been removed
13526
      SELECT COUNT (pv.pv_id)
13527
        INTO ROWCOUNT
13528
        FROM package_versions pv
13529
       WHERE pv.pv_id = oldpvid;
13530
 
13531
/*-------------------------------------------------------*/
13532
 
13533
      /* This procedure is usually used by "History" option in Release Manager */
13534
 
13535
      -- Get dlock state
13536
      SELECT pv.dlocked
13537
        INTO dlocked
13538
        FROM package_versions pv
13539
       WHERE pv.pv_id = newpvid;
13540
 
13541
      -- Get VIEW_ID ---
13542
      IF ROWCOUNT = 1
13543
      THEN
13544
         viewid := get_view_location (oldpvid, rtagid);
13545
      ELSE
13546
         -- Set ViewID to default
13547
         viewid := 7;
13548
      END IF;
13549
 
13550
      -- Get which area should go under
13551
      envtab := select_environment_area (dlocked);
13552
      -- Log
13553
      log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
13554
 
13555
      -- Replace package
13556
      IF envtab = 0
13557
      THEN
13558
         -- WORK IN PROGRESS --
13559
 
13560
         -- Delete old package
13561
         pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
13562
         -- Add new package
13563
         pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
13564
      ELSIF envtab = 1
13565
      THEN
13566
         -- PENDING --
13567
 
13568
         -- Delete old package
13569
         pk_planned.remove_package (oldpvid, rtagid, userid);
13570
         -- Add new package
13571
         pk_planned.add_package (newpvid, viewid, rtagid, userid);
13572
      ELSIF envtab = 2
13573
      THEN
13574
         -- RELEASED --
13575
 
13576
         -- Delete old package
13577
         pk_release.remove_package (oldpvid, rtagid, userid);
13578
         -- Add new package
13579
         pk_release.add_package (newpvid, viewid, rtagid, userid);
13580
         -- Now do post Release Actions
13581
         pk_release.run_post_actions (newpvid, rtagid);
13582
      END IF;
13583
 
13584
      -- Log
13585
      log_action (oldpvid, 'action', userid, 'End of Package Replace...');
13586
   END;
13587
 
13588
/*-------------------------------------------------------------------------------------------------------*/
13589
   FUNCTION remove_package (
13590
      pvid          IN   NUMBER,
13591
      rtagid        IN   NUMBER,
13592
      userid        IN   NUMBER,
13593
      forceremove   IN   CHAR
13594
   )
13595
      RETURN NUMBER
13596
   IS
13597
      envtab        NUMBER;
13598
      isused        BOOLEAN;
13599
      recordcount   NUMBER;
13600
   BEGIN
13601
/*--------------- Business Rules Here -------------------*/
13602
/*-------------------------------------------------------*/
13603
 
13604
      -- Find location of package
13605
      envtab := get_package_area (pvid, rtagid);
13606
 
13607
      -- Remove Package
13608
      IF envtab = 0
13609
      THEN
13610
         -- WORK IN PROGRESS --
13611
         -- Delete package
13612
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
13613
         RETURN 0;
13614
      ELSIF envtab = 1
13615
      THEN
13616
         -- PENDING --
13617
         -- Delete package
13618
         pk_planned.remove_package (pvid, rtagid, userid);
13619
         RETURN 0;
13620
      ELSIF envtab = 2
13621
      THEN
13622
         -- RELEASED --
13623
 
13624
         -- Check if is used by other packages
13625
         isused := TRUE;
13626
 
13627
         IF forceremove = 'N'
13628
         THEN
13629
            SELECT COUNT (pv.pv_id)
13630
              INTO recordcount
13631
              FROM (SELECT dpv.pkg_id, dpv.v_ext
13632
                      FROM release_content rc,
13633
                           package_dependencies dep,
13634
                           package_versions dpv
13635
                     WHERE rc.rtag_id = rtagid
13636
                       AND rc.pv_id = dep.pv_id
13637
                       AND dep.dpv_id = dpv.pv_id) rdep,
13638
                   package_versions pv
13639
             WHERE pv.pkg_id = rdep.pkg_id
13640
               AND NVL (pv.v_ext, '|LINK_A_NULL|') =
13641
                                             NVL (rdep.v_ext, '|LINK_A_NULL|')
13642
               AND pv.pv_id = pvid;
13643
 
13644
            IF recordcount > 0
13645
            THEN
13646
               RETURN 1;                    -- Return 1 as package being used
13647
            ELSE
13648
               isused := FALSE;
13649
            END IF;
13650
         END IF;
13651
 
13652
         IF forceremove = 'Y' OR NOT isused
13653
         THEN
13654
            -- Delete old package
13655
            pk_release.remove_package (pvid, rtagid, userid);
13656
            -- Now do post Release Actions
13657
            pk_release.run_post_actions (pvid, rtagid);
13658
            RETURN 0;
13659
         END IF;
13660
      END IF;
13661
   END;
13662
 
13663
/*-------------------------------------------------------------------------------------------------------*/
13664
   PROCEDURE get_environment_items (
13665
      viewtype           IN       NUMBER,
13666
      userid             IN       NUMBER,
13667
      rtagid             IN       NUMBER,
13668
      sviewidshowlist    IN       VARCHAR2,
13669
      ntruerecordcount   OUT      NUMBER,
13670
      recordset          OUT      typecur
13671
   )
13672
   IS
13673
   BEGIN
13674
      -- Get true record count because views can give false count
13675
      SELECT COUNT (pl.pv_id)
13676
        INTO ntruerecordcount
13677
        FROM environment_view pl
13678
       WHERE pl.rtag_id = rtagid;
13679
 
13680
      IF viewtype = 1
13681
      THEN
13682
         /*--- GUEST VIEW ---*/
13683
         OPEN recordset FOR
13684
            SELECT   *
13685
                FROM (
13686
                      /* Base Views collapsed */
13687
                      SELECT DISTINCT vi.view_id, vi.view_name,
13688
                                      TO_NUMBER (NULL) AS pkg_state,
13689
                                      TO_NUMBER (NULL) AS deprecated_state,
13690
                                      TO_NUMBER (NULL) AS pv_id,
13691
                                      NULL AS pkg_name, NULL AS pkg_version,
13692
                                      NULL AS dlocked, NULL AS pv_description
13693
                                 FROM environment_view rel, views vi
13694
                                WHERE rel.view_id = vi.view_id
13695
                                  AND rtag_id = rtagid
13696
                                  AND rel.view_id NOT IN (
13697
                                         SELECT *
13698
                                           FROM THE
13699
                                                   (SELECT CAST
13700
                                                              (in_list_number
13701
                                                                  (sviewidshowlist
13702
                                                                  ) AS relmgr_number_tab_t
13703
                                                              )
13704
                                                      FROM DUAL
13705
                                                   ))
13706
                      UNION
13707
                      /* Base Views expanded */
13708
                      SELECT vi.view_id, vi.view_name,
13709
                             DECODE (rel.pkg_state,
13710
                                     NULL, 0,
13711
                                     rel.pkg_state
13712
                                    ) AS pkg_state,
13713
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13714
                             pv.pkg_version, pv.dlocked, pv.pv_description
13715
                        FROM environment_view rel,
13716
                             PACKAGES pkg,
13717
                             package_versions pv,
13718
                             views vi
13719
                       WHERE pv.pkg_id = pkg.pkg_id
13720
                         AND rel.pv_id = pv.pv_id
13721
                         AND rel.view_id = vi.view_id
13722
                         AND rel.view_id IN (
13723
                                SELECT *
13724
                                  FROM THE
13725
                                          (SELECT CAST
13726
                                                     (in_list_number
13727
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13728
                                                     )
13729
                                             FROM DUAL
13730
                                          ))
13731
                         AND rtag_id = rtagid) ord
13732
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13733
      ELSIF viewtype = 2
13734
      THEN
13735
         /*--- PERSONAL VIEW ---*/
13736
         OPEN recordset FOR
13737
            SELECT   *
13738
                FROM (
13739
                      /* Base Views collapsed */
13740
                      SELECT DISTINCT vi.view_id, vi.view_name,
13741
                                      TO_NUMBER (NULL) AS pkg_state,
13742
                                      TO_NUMBER (NULL) AS deprecated_state,
13743
                                      TO_NUMBER (NULL) AS pv_id,
13744
                                      NULL AS pkg_name, NULL AS pkg_version,
13745
                                      NULL AS dlocked, NULL AS pv_description
13746
                                 FROM environment_view rel,
13747
                                      view_settings vs,
13748
                                      views vi
13749
                                WHERE rel.view_id = vi.view_id
13750
                                  AND vs.view_id = rel.view_id
13751
                                  AND vs.user_id = userid
13752
                                  AND rtag_id = rtagid
13753
                                  AND rel.view_id NOT IN (
13754
                                         SELECT *
13755
                                           FROM THE
13756
                                                   (SELECT CAST
13757
                                                              (in_list_number
13758
                                                                  (sviewidshowlist
13759
                                                                  ) AS relmgr_number_tab_t
13760
                                                              )
13761
                                                      FROM DUAL
13762
                                                   ))
13763
                      UNION
13764
                      /* Base Views expanded */
13765
                      SELECT vi.view_id, vi.view_name,
13766
                             DECODE (rel.pkg_state,
13767
                                     NULL, 0,
13768
                                     rel.pkg_state
13769
                                    ) AS pkg_state,
13770
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13771
                             pv.pkg_version, pv.dlocked, pv.pv_description
13772
                        FROM environment_view rel,
13773
                             PACKAGES pkg,
13774
                             package_versions pv,
13775
                             views vi,
13776
                             view_settings vs
13777
                       WHERE pv.pkg_id = pkg.pkg_id
13778
                         AND rel.pv_id = pv.pv_id
13779
                         AND rel.view_id = vi.view_id
13780
                         AND vs.view_id = vi.view_id
13781
                         AND vs.user_id = userid
13782
                         AND rel.view_id IN (
13783
                                SELECT *
13784
                                  FROM THE
13785
                                          (SELECT CAST
13786
                                                     (in_list_number
13787
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13788
                                                     )
13789
                                             FROM DUAL
13790
                                          ))
13791
                         AND rtag_id = rtagid
13792
                      UNION
13793
                      /* Private Views collapsed */
13794
                      SELECT vi.view_id, vi.view_name,
13795
                             TO_NUMBER (NULL) AS pkg_state,
13796
                             TO_NUMBER (NULL) AS deprecated_state,
13797
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13798
                             NULL AS pkg_version, NULL AS dlocked,
13799
                             NULL AS pv_description
13800
                        FROM view_settings vs,
13801
                             view_def vd,
13802
                             views vi,
13803
                             environment_view rel,
13804
                             package_versions pv
13805
                       WHERE vs.view_id = vi.view_id
13806
                         AND rel.pv_id = pv.pv_id
13807
                         AND vd.pkg_id = pv.pkg_id
13808
                         AND vd.view_id = vi.view_id
13809
                         AND vi.base_view = 'N'
13810
                         AND rel.rtag_id = rtagid
13811
                         AND vs.user_id = userid
13812
                         AND vi.view_id NOT IN (
13813
                                SELECT *
13814
                                  FROM THE
13815
                                          (SELECT CAST
13816
                                                     (in_list_number
13817
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13818
                                                     )
13819
                                             FROM DUAL
13820
                                          ))
13821
                      UNION
13822
                      /* Private Views expanded */
13823
                      SELECT vi.view_id, vi.view_name,
13824
                             DECODE (rel.pkg_state,
13825
                                     NULL, 0,
13826
                                     rel.pkg_state
13827
                                    ) AS pkg_state,
13828
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13829
                             pv.pkg_version, pv.dlocked, pv.pv_description
13830
                        FROM users usr,
13831
                             view_settings vs,
13832
                             view_def vd,
13833
                             views vi,
13834
                             environment_view rel,
13835
                             PACKAGES pkg,
13836
                             package_versions pv
13837
                       WHERE vs.user_id = usr.user_id
13838
                         AND vs.view_id = vi.view_id
13839
                         AND vd.view_id = vi.view_id
13840
                         AND pv.pkg_id = pkg.pkg_id
13841
                         AND rel.pv_id = pv.pv_id
13842
                         AND rel.rtag_id = rtagid
13843
                         AND vd.pkg_id = pkg.pkg_id
13844
                         AND vi.base_view = 'N'
13845
                         AND vi.view_id IN (
13846
                                SELECT *
13847
                                  FROM THE
13848
                                          (SELECT CAST
13849
                                                     (in_list_number
13850
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13851
                                                     )
13852
                                             FROM DUAL
13853
                                          ))
13854
                         AND usr.user_id = userid) ord
13855
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13856
      END IF;
13857
   END;
13858
 
13859
/*-------------------------------------------------------------------------------------------------------*/
13860
   PROCEDURE get_released_items (
13861
      viewtype           IN       NUMBER,
13862
      userid             IN       NUMBER,
13863
      rtagid             IN       NUMBER,
13864
      sviewidshowlist    IN       VARCHAR2,
13865
      ntruerecordcount   OUT      NUMBER,
13866
      recordset          OUT      typecur
13867
   )
13868
   IS
13869
   BEGIN
13870
      -- Get true record count because views can give false count
13871
      SELECT COUNT (rc.pv_id)
13872
        INTO ntruerecordcount
13873
        FROM release_content rc
13874
       WHERE rc.rtag_id = rtagid;
13875
 
13876
      IF viewtype = 1
13877
      THEN
13878
         /*--- GUEST VIEW ---*/
13879
         OPEN recordset FOR
13880
            SELECT   *
13881
                FROM (
13882
                      /* Base Views collapsed */
13883
                      SELECT DISTINCT vi.view_id, vi.view_name,
13884
                                      TO_NUMBER (NULL) AS pkg_state,
13885
                                      TO_NUMBER (NULL) AS deprecated_state,
13886
                                      TO_NUMBER (NULL) AS pv_id,
13887
                                      NULL AS pkg_name, NULL AS pkg_version,
13888
                                      NULL AS dlocked, NULL AS pv_description
13889
                                 FROM release_content rel, views vi
13890
                                WHERE rel.base_view_id = vi.view_id
13891
                                  AND rtag_id = rtagid
13892
                                  AND rel.base_view_id NOT IN (
13893
                                         SELECT *
13894
                                           FROM THE
13895
                                                   (SELECT CAST
13896
                                                              (in_list_number
13897
                                                                  (sviewidshowlist
13898
                                                                  ) AS relmgr_number_tab_t
13899
                                                              )
13900
                                                      FROM DUAL
13901
                                                   ))
13902
                      UNION
13903
                      /* Base Views expanded */
13904
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13905
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13906
                             pv.pkg_version, pv.dlocked, pv.pv_description
13907
                        FROM release_content rel,
13908
                             PACKAGES pkg,
13909
                             package_versions pv,
13910
                             views vi
13911
                       WHERE pv.pkg_id = pkg.pkg_id
13912
                         AND rel.pv_id = pv.pv_id
13913
                         AND rel.base_view_id = vi.view_id
13914
                         AND rel.base_view_id IN (
13915
                                SELECT *
13916
                                  FROM THE
13917
                                          (SELECT CAST
13918
                                                     (in_list_number
13919
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13920
                                                     )
13921
                                             FROM DUAL
13922
                                          ))
13923
                         AND rtag_id = rtagid) ord
13924
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13925
      ELSIF viewtype = 2
13926
      THEN
13927
         /*--- PERSONAL VIEW ---*/
13928
         OPEN recordset FOR
13929
            SELECT   *
13930
                FROM (
13931
                      /* Base Views collapsed */
13932
                      SELECT DISTINCT vi.view_id, vi.view_name,
13933
                                      TO_NUMBER (NULL) AS pkg_state,
13934
                                      TO_NUMBER (NULL) AS deprecated_state,
13935
                                      TO_NUMBER (NULL) AS pv_id,
13936
                                      NULL AS pkg_name, NULL AS pkg_version,
13937
                                      NULL AS dlocked, NULL AS pv_description
13938
                                 FROM release_content rel,
13939
                                      view_settings vs,
13940
                                      views vi
13941
                                WHERE rel.base_view_id = vi.view_id
13942
                                  AND vs.view_id = rel.base_view_id
13943
                                  AND vs.user_id = userid
13944
                                  AND rtag_id = rtagid
13945
                                  AND rel.base_view_id NOT IN (
13946
                                         SELECT *
13947
                                           FROM THE
13948
                                                   (SELECT CAST
13949
                                                              (in_list_number
13950
                                                                  (sviewidshowlist
13951
                                                                  ) AS relmgr_number_tab_t
13952
                                                              )
13953
                                                      FROM DUAL
13954
                                                   ))
13955
                      UNION
13956
                      /* Base Views expanded */
13957
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13958
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13959
                             pv.pkg_version, pv.dlocked, pv.pv_description
13960
                        FROM release_content rel,
13961
                             PACKAGES pkg,
13962
                             package_versions pv,
13963
                             views vi,
13964
                             view_settings vs
13965
                       WHERE pv.pkg_id = pkg.pkg_id
13966
                         AND rel.pv_id = pv.pv_id
13967
                         AND rel.base_view_id = vi.view_id
13968
                         AND vs.view_id = vi.view_id
13969
                         AND vs.user_id = userid
13970
                         AND rel.base_view_id IN (
13971
                                SELECT *
13972
                                  FROM THE
13973
                                          (SELECT CAST
13974
                                                     (in_list_number
13975
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13976
                                                     )
13977
                                             FROM DUAL
13978
                                          ))
13979
                         AND rtag_id = rtagid
13980
                      UNION
13981
                      /* Private Views collapsed */
13982
                      SELECT vi.view_id, vi.view_name,
13983
                             TO_NUMBER (NULL) AS pkg_state,
13984
                             TO_NUMBER (NULL) AS deprecated_state,
13985
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13986
                             NULL AS pkg_version, NULL AS dlocked,
13987
                             NULL AS pv_description
13988
                        FROM view_settings vs,
13989
                             view_def vd,
13990
                             views vi,
13991
                             release_content rel,
13992
                             package_versions pv
13993
                       WHERE vs.view_id = vi.view_id
13994
                         AND rel.pv_id = pv.pv_id
13995
                         AND vd.pkg_id = pv.pkg_id
13996
                         AND vd.view_id = vi.view_id
13997
                         AND vi.base_view = 'N'
13998
                         AND rel.rtag_id = rtagid
13999
                         AND vs.user_id = userid
14000
                         AND vi.view_id NOT IN (
14001
                                SELECT *
14002
                                  FROM THE
14003
                                          (SELECT CAST
14004
                                                     (in_list_number
14005
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14006
                                                     )
14007
                                             FROM DUAL
14008
                                          ))
14009
                      UNION
14010
                      /* Private Views expanded */
14011
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
14012
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14013
                             pv.pkg_version, pv.dlocked, pv.pv_description
14014
                        FROM users usr,
14015
                             view_settings vs,
14016
                             view_def vd,
14017
                             views vi,
14018
                             release_content rel,
14019
                             PACKAGES pkg,
14020
                             package_versions pv
14021
                       WHERE vs.user_id = usr.user_id
14022
                         AND vs.view_id = vi.view_id
14023
                         AND vd.view_id = vi.view_id
14024
                         AND pv.pkg_id = pkg.pkg_id
14025
                         AND rel.pv_id = pv.pv_id
14026
                         AND rel.rtag_id = rtagid
14027
                         AND vd.pkg_id = pkg.pkg_id
14028
                         AND vi.base_view = 'N'
14029
                         AND vi.view_id IN (
14030
                                SELECT *
14031
                                  FROM THE
14032
                                          (SELECT CAST
14033
                                                     (in_list_number
14034
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14035
                                                     )
14036
                                             FROM DUAL
14037
                                          ))
14038
                         AND usr.user_id = userid) ord
14039
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14040
      END IF;
14041
   END;
14042
 
14043
/*-------------------------------------------------------------------------------------------------------*/
14044
   PROCEDURE get_work_in_progress_items (
14045
      viewtype           IN       NUMBER,
14046
      userid             IN       NUMBER,
14047
      rtagid             IN       NUMBER,
14048
      sviewidshowlist    IN       VARCHAR2,
14049
      ntruerecordcount   OUT      NUMBER,
14050
      recordset          OUT      typecur
14051
   )
14052
   IS
14053
   BEGIN
14054
      -- Get true record count because views can give false count
14055
      SELECT COUNT (wip.pv_id)
14056
        INTO ntruerecordcount
14057
        FROM work_in_progress wip
14058
       WHERE wip.rtag_id = rtagid;
14059
 
14060
      IF viewtype = 1
14061
      THEN
14062
         /*--- GUEST VIEW ---*/
14063
         OPEN recordset FOR
14064
            SELECT   *
14065
                FROM (
14066
                      /* Base Views collapsed */
14067
                      SELECT DISTINCT vi.view_id, vi.view_name,
14068
                                      TO_NUMBER (NULL) AS pkg_state,
14069
                                      TO_NUMBER (NULL) AS deprecated_state,
14070
                                      TO_NUMBER (NULL) AS pv_id,
14071
                                      NULL AS pkg_name, NULL AS pkg_version,
14072
                                      NULL AS dlocked, NULL AS pv_description
14073
                                 FROM work_in_progress rel, views vi
14074
                                WHERE rel.view_id = vi.view_id
14075
                                  AND rtag_id = rtagid
14076
                                  AND rel.view_id NOT IN (
14077
                                         SELECT *
14078
                                           FROM THE
14079
                                                   (SELECT CAST
14080
                                                              (in_list_number
14081
                                                                  (sviewidshowlist
14082
                                                                  ) AS relmgr_number_tab_t
14083
                                                              )
14084
                                                      FROM DUAL
14085
                                                   ))
14086
                      UNION
14087
                      /* Base Views expanded */
14088
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14089
 
14090
                             --rel.pkg_state,
14091
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14092
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14093
                             pv.pv_description
14094
                        FROM work_in_progress rel,
14095
                             PACKAGES pkg,
14096
                             package_versions pv,
14097
                             views vi
14098
                       WHERE pv.pkg_id = pkg.pkg_id
14099
                         AND rel.pv_id = pv.pv_id
14100
                         AND rel.view_id = vi.view_id
14101
                         AND rel.view_id IN (
14102
                                SELECT *
14103
                                  FROM THE
14104
                                          (SELECT CAST
14105
                                                     (in_list_number
14106
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14107
                                                     )
14108
                                             FROM DUAL
14109
                                          ))
14110
                         AND rtag_id = rtagid) ord
14111
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14112
      ELSIF viewtype = 2
14113
      THEN
14114
         /*--- PERSONAL VIEW ---*/
14115
         OPEN recordset FOR
14116
            SELECT   *
14117
                FROM (
14118
                      /* Base Views collapsed */
14119
                      SELECT DISTINCT vi.view_id, vi.view_name,
14120
                                      TO_NUMBER (NULL) AS pkg_state,
14121
                                      TO_NUMBER (NULL) AS deprecated_state,
14122
                                      TO_NUMBER (NULL) AS pv_id,
14123
                                      NULL AS pkg_name, NULL AS pkg_version,
14124
                                      NULL AS dlocked, NULL AS pv_description
14125
                                 FROM work_in_progress rel,
14126
                                      view_settings vs,
14127
                                      views vi
14128
                                WHERE rel.view_id = vi.view_id
14129
                                  AND vs.view_id = rel.view_id
14130
                                  AND vs.user_id = userid
14131
                                  AND rtag_id = rtagid
14132
                                  AND rel.view_id NOT IN (
14133
                                         SELECT *
14134
                                           FROM THE
14135
                                                   (SELECT CAST
14136
                                                              (in_list_number
14137
                                                                  (sviewidshowlist
14138
                                                                  ) AS relmgr_number_tab_t
14139
                                                              )
14140
                                                      FROM DUAL
14141
                                                   ))
14142
                      UNION
14143
                      /* Base Views expanded */
14144
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14145
 
14146
                             --rel.pkg_state,
14147
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14148
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14149
                             pv.pv_description
14150
                        FROM work_in_progress rel,
14151
                             PACKAGES pkg,
14152
                             package_versions pv,
14153
                             views vi,
14154
                             view_settings vs
14155
                       WHERE pv.pkg_id = pkg.pkg_id
14156
                         AND rel.pv_id = pv.pv_id
14157
                         AND rel.view_id = vi.view_id
14158
                         AND vs.view_id = vi.view_id
14159
                         AND vs.user_id = userid
14160
                         AND rel.view_id IN (
14161
                                SELECT *
14162
                                  FROM THE
14163
                                          (SELECT CAST
14164
                                                     (in_list_number
14165
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14166
                                                     )
14167
                                             FROM DUAL
14168
                                          ))
14169
                         AND rtag_id = rtagid
14170
                      UNION
14171
                      /* Private Views collapsed */
14172
                      SELECT vi.view_id, vi.view_name,
14173
                             TO_NUMBER (NULL) AS pkg_state,
14174
                             TO_NUMBER (NULL) AS deprecated_state,
14175
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14176
                             NULL AS pkg_version, NULL AS dlocked,
14177
                             NULL AS pv_description
14178
                        FROM view_settings vs,
14179
                             view_def vd,
14180
                             views vi,
14181
                             work_in_progress rel,
14182
                             package_versions pv
14183
                       WHERE vs.view_id = vi.view_id
14184
                         AND rel.pv_id = pv.pv_id
14185
                         AND vd.pkg_id = pv.pkg_id
14186
                         AND vd.view_id = vi.view_id
14187
                         AND vi.base_view = 'N'
14188
                         AND rel.rtag_id = rtagid
14189
                         AND vs.user_id = userid
14190
                         AND vi.view_id NOT IN (
14191
                                SELECT *
14192
                                  FROM THE
14193
                                          (SELECT CAST
14194
                                                     (in_list_number
14195
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14196
                                                     )
14197
                                             FROM DUAL
14198
                                          ))
14199
                      UNION
14200
                      /* Private Views expanded */
14201
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14202
 
14203
                             --rel.pkg_state,
14204
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14205
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14206
                             pv.pv_description
14207
                        FROM users usr,
14208
                             view_settings vs,
14209
                             view_def vd,
14210
                             views vi,
14211
                             work_in_progress rel,
14212
                             PACKAGES pkg,
14213
                             package_versions pv
14214
                       WHERE vs.user_id = usr.user_id
14215
                         AND vs.view_id = vi.view_id
14216
                         AND vd.view_id = vi.view_id
14217
                         AND pv.pkg_id = pkg.pkg_id
14218
                         AND rel.pv_id = pv.pv_id
14219
                         AND rel.rtag_id = rtagid
14220
                         AND vd.pkg_id = pkg.pkg_id
14221
                         AND vi.base_view = 'N'
14222
                         AND vi.view_id IN (
14223
                                SELECT *
14224
                                  FROM THE
14225
                                          (SELECT CAST
14226
                                                     (in_list_number
14227
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14228
                                                     )
14229
                                             FROM DUAL
14230
                                          ))
14231
                         AND usr.user_id = userid) ord
14232
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14233
      END IF;
14234
   END;
14235
 
14236
/*-------------------------------------------------------------------------------------------------------*/
14237
   PROCEDURE get_pending_items (
14238
      viewtype           IN       NUMBER,
14239
      userid             IN       NUMBER,
14240
      rtagid             IN       NUMBER,
14241
      sviewidshowlist    IN       VARCHAR2,
14242
      ntruerecordcount   OUT      NUMBER,
14243
      recordset          OUT      typecur
14244
   )
14245
   IS
14246
   BEGIN
14247
      -- Get true record count because views can give false count
14248
      SELECT COUNT (pl.pv_id)
14249
        INTO ntruerecordcount
14250
        FROM planned pl
14251
       WHERE pl.rtag_id = rtagid;
14252
 
14253
      IF viewtype = 1
14254
      THEN
14255
         /*--- GUEST VIEW ---*/
14256
         OPEN recordset FOR
14257
            SELECT   *
14258
                FROM (
14259
                      /* Base Views collapsed */
14260
                      SELECT DISTINCT vi.view_id, vi.view_name,
14261
                                      TO_NUMBER (NULL) AS pkg_state,
14262
                                      TO_NUMBER (NULL) AS deprecated_state,
14263
                                      TO_NUMBER (NULL) AS pv_id,
14264
                                      NULL AS pkg_name, NULL AS pkg_version,
14265
                                      NULL AS dlocked, NULL AS pv_description
14266
                                 FROM planned rel, views vi
14267
                                WHERE rel.view_id = vi.view_id
14268
                                  AND rtag_id = rtagid
14269
                                  AND rel.view_id NOT IN (
14270
                                         SELECT *
14271
                                           FROM THE
14272
                                                   (SELECT CAST
14273
                                                              (in_list_number
14274
                                                                  (sviewidshowlist
14275
                                                                  ) AS relmgr_number_tab_t
14276
                                                              )
14277
                                                      FROM DUAL
14278
                                                   ))
14279
                      UNION
14280
                      /* Base Views expanded */
14281
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14282
 
14283
                             --rel.pkg_state,
14284
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14285
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14286
                             pv.pv_description
14287
                        FROM planned rel,
14288
                             PACKAGES pkg,
14289
                             package_versions pv,
14290
                             views vi
14291
                       WHERE pv.pkg_id = pkg.pkg_id
14292
                         AND rel.pv_id = pv.pv_id
14293
                         AND rel.view_id = vi.view_id
14294
                         AND rel.view_id IN (
14295
                                SELECT *
14296
                                  FROM THE
14297
                                          (SELECT CAST
14298
                                                     (in_list_number
14299
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14300
                                                     )
14301
                                             FROM DUAL
14302
                                          ))
14303
                         AND rtag_id = rtagid) ord
14304
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14305
      ELSIF viewtype = 2
14306
      THEN
14307
         /*--- PERSONAL VIEW ---*/
14308
         OPEN recordset FOR
14309
            SELECT   *
14310
                FROM (
14311
                      /* Base Views collapsed */
14312
                      SELECT DISTINCT vi.view_id, vi.view_name,
14313
                                      TO_NUMBER (NULL) AS pkg_state,
14314
                                      TO_NUMBER (NULL) AS deprecated_state,
14315
                                      TO_NUMBER (NULL) AS pv_id,
14316
                                      NULL AS pkg_name, NULL AS pkg_version,
14317
                                      NULL AS dlocked, NULL AS pv_description
14318
                                 FROM planned rel, view_settings vs, views vi
14319
                                WHERE rel.view_id = vi.view_id
14320
                                  AND vs.view_id = rel.view_id
14321
                                  AND vs.user_id = userid
14322
                                  AND rtag_id = rtagid
14323
                                  AND rel.view_id NOT IN (
14324
                                         SELECT *
14325
                                           FROM THE
14326
                                                   (SELECT CAST
14327
                                                              (in_list_number
14328
                                                                  (sviewidshowlist
14329
                                                                  ) AS relmgr_number_tab_t
14330
                                                              )
14331
                                                      FROM DUAL
14332
                                                   ))
14333
                      UNION
14334
                      /* Base Views expanded */
14335
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14336
 
14337
                             --rel.pkg_state,
14338
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14339
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14340
                             pv.pv_description
14341
                        FROM planned rel,
14342
                             PACKAGES pkg,
14343
                             package_versions pv,
14344
                             views vi,
14345
                             view_settings vs
14346
                       WHERE pv.pkg_id = pkg.pkg_id
14347
                         AND rel.pv_id = pv.pv_id
14348
                         AND rel.view_id = vi.view_id
14349
                         AND vs.view_id = vi.view_id
14350
                         AND vs.user_id = userid
14351
                         AND rel.view_id IN (
14352
                                SELECT *
14353
                                  FROM THE
14354
                                          (SELECT CAST
14355
                                                     (in_list_number
14356
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14357
                                                     )
14358
                                             FROM DUAL
14359
                                          ))
14360
                         AND rtag_id = rtagid
14361
                      UNION
14362
                      /* Private Views collapsed */
14363
                      SELECT vi.view_id, vi.view_name,
14364
                             TO_NUMBER (NULL) AS pkg_state,
14365
                             TO_NUMBER (NULL) AS deprecated_state,
14366
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14367
                             NULL AS pkg_version, NULL AS dlocked,
14368
                             NULL AS pv_description
14369
                        FROM view_settings vs,
14370
                             view_def vd,
14371
                             views vi,
14372
                             planned rel,
14373
                             package_versions pv
14374
                       WHERE vs.view_id = vi.view_id
14375
                         AND rel.pv_id = pv.pv_id
14376
                         AND vd.pkg_id = pv.pkg_id
14377
                         AND vd.view_id = vi.view_id
14378
                         AND vi.base_view = 'N'
14379
                         AND rel.rtag_id = rtagid
14380
                         AND vs.user_id = userid
14381
                         AND vi.view_id NOT IN (
14382
                                SELECT *
14383
                                  FROM THE
14384
                                          (SELECT CAST
14385
                                                     (in_list_number
14386
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14387
                                                     )
14388
                                             FROM DUAL
14389
                                          ))
14390
                      UNION
14391
                      /* Private Views expanded */
14392
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14393
 
14394
                             --rel.pkg_state,
14395
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14396
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14397
                             pv.pv_description
14398
                        FROM users usr,
14399
                             view_settings vs,
14400
                             view_def vd,
14401
                             views vi,
14402
                             planned rel,
14403
                             PACKAGES pkg,
14404
                             package_versions pv
14405
                       WHERE vs.user_id = usr.user_id
14406
                         AND vs.view_id = vi.view_id
14407
                         AND vd.view_id = vi.view_id
14408
                         AND pv.pkg_id = pkg.pkg_id
14409
                         AND rel.pv_id = pv.pv_id
14410
                         AND rel.rtag_id = rtagid
14411
                         AND vd.pkg_id = pkg.pkg_id
14412
                         AND vi.base_view = 'N'
14413
                         AND vi.view_id IN (
14414
                                SELECT *
14415
                                  FROM THE
14416
                                          (SELECT CAST
14417
                                                     (in_list_number
14418
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14419
                                                     )
14420
                                             FROM DUAL
14421
                                          ))
14422
                         AND usr.user_id = userid) ord
14423
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14424
      END IF;
14425
   END;
14426
 
14427
/*-------------------------------------------------------------------------------------------------------*/
14428
   PROCEDURE get_view_content (
14429
      rtagid      IN       NUMBER,
14430
      viewid      IN       NUMBER,
14431
      recordset   OUT      typecur
14432
   )
14433
   IS
14434
      isbaseview   CHAR (1);
14435
   BEGIN
14436
      -- Check if the view is BASE VIEW
14437
      SELECT vi.base_view
14438
        INTO isbaseview
14439
        FROM views vi
14440
       WHERE vi.view_id = viewid;
14441
 
14442
      IF (isbaseview = 'Y')
14443
      THEN
14444
         -- Get Base view content
14445
         OPEN recordset FOR
14446
            SELECT   DECODE (rel.pkg_state,
14447
                             NULL, 0,
14448
                             rel.pkg_state
14449
                            ) AS pkg_state,
14450
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14451
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14452
                     pv.build_type
14453
                FROM environment_view rel, PACKAGES pkg, package_versions pv
14454
               WHERE pv.pkg_id = pkg.pkg_id
14455
                 AND rel.pv_id = pv.pv_id
14456
                 AND rel.view_id = viewid
14457
                 AND rel.rtag_id = rtagid
14458
            ORDER BY UPPER (pkg.pkg_name);
14459
      ELSE
14460
         -- Get non base view content
14461
         OPEN recordset FOR
14462
            SELECT   DECODE (rel.pkg_state,
14463
                             NULL, 0,
14464
                             rel.pkg_state
14465
                            ) AS pkg_state,
14466
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14467
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14468
                     pv.build_type
14469
                FROM environment_view rel,
14470
                     PACKAGES pkg,
14471
                     package_versions pv,
14472
                     view_def vd
14473
               WHERE pv.pkg_id = pkg.pkg_id
14474
                 AND rel.pv_id = pv.pv_id
14475
                 AND rel.rtag_id = rtagid
14476
                 AND vd.view_id = viewid
14477
                 AND vd.pkg_id = pv.pkg_id
14478
            ORDER BY UPPER (pkg.pkg_name);
14479
      END IF;
14480
   END;
14481
 
14482
/*-------------------------------------------------------------------------------------------------------*/
14483
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
14484
      RETURN NUMBER
14485
   IS
14486
      envtab             NUMBER;
14487
      returnvalue        NUMBER;
14488
      return_not_found   NUMBER := -1;
14489
   BEGIN
14490
      envtab := get_package_area (pvid, rtagid);
14491
 
14492
      IF envtab = 0
14493
      THEN
14494
         -- WORK IN PROGRESS --
14495
         returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
14496
      ELSIF envtab = 1
14497
      THEN
14498
         -- PENDING --
14499
         returnvalue := pk_planned.get_package_view (pvid, rtagid);
14500
      ELSIF envtab = 2
14501
      THEN
14502
         -- RELEASED --
14503
         returnvalue := pk_release.get_package_view (pvid, rtagid);
14504
      ELSE
14505
         -- This may be a Patch not located anywhere but unlocked
14506
         returnvalue := return_not_found;
14507
      END IF;
14508
 
14509
      RETURN returnvalue;
14510
   END;
14511
 
14512
/*-------------------------------------------------------------------------------------------------------*/
14513
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14514
   IS
14515
      viewid          NUMBER;
14516
      envtab          NUMBER;
14517
      ispatch         CHAR (1) := NULL;
14518
      buildtype       CHAR (1) := NULL;
14519
      lastversionid   NUMBER;
14520
   BEGIN
14521
      -- Check if package is patch
14522
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14523
        INTO ispatch, buildtype, lastversionid
14524
        FROM package_versions pv
14525
       WHERE pv.pv_id = pvid;
14526
 
14527
      -- Get ViewId
14528
      viewid := get_package_view (pvid, rtagid);
14529
      -- Remove from current area
14530
      envtab := pk_environment.get_package_area (pvid, rtagid);
14531
 
14532
      -- Make sure that package was in work-in-progress or pending before makeing it release
14533
      -- Exclude patches, ripple builds
14534
      IF (envtab < 0)
14535
      THEN
14536
         -- Not found in work-in-progress or pending
14537
         IF (ispatch IS NULL) AND (buildtype = 'M')
14538
         THEN
14539
            raise_application_error (-20000,
14540
                                     'This package cannot be released here.'
14541
                                    );
14542
         END IF;
14543
      END IF;
14544
 
14545
      -- Log
14546
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14547
 
14548
      IF envtab = 0
14549
      THEN
14550
         -- WORK IN PROGRESS --
14551
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14552
      ELSIF envtab = 1
14553
      THEN
14554
         -- PENDING --
14555
         pk_planned.remove_package (pvid, rtagid, userid);
14556
      END IF;
14557
 
14558
      -- Change package state
14559
      pk_package.change_state (pvid, 'Y', userid);
14560
 
14561
      -- Make sure it is valid BASE VIEW
14562
      IF viewid < 1
14563
      THEN
14564
         viewid := 7;                            -- This is default base view
14565
      END IF;
14566
 
14567
      IF (ispatch IS NULL)
14568
      THEN
14569
         -- Add package to new area
14570
         pk_release.add_package (pvid, viewid, rtagid, userid);
14571
      END IF;
14572
 
14573
      -- Now do post Release Actions
14574
      pk_release.run_post_actions (pvid, rtagid);
14575
 
14576
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14577
      DELETE FROM do_not_ripple
14578
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14579
 
14580
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14581
      DELETE FROM advisory_ripple
14582
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14583
 
14584
      -- Log
14585
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14586
   END;
14587
 
14588
/*-------------------------------------------------------------------------------------------------------*/
14589
   PROCEDURE auto_make_release (
14590
      pvid            IN   NUMBER,
14591
      rtagid          IN   NUMBER,
14592
      userid          IN   NUMBER,
14593
      vext            IN   package_versions.v_ext%TYPE,
14594
      ssv_ext         IN   package_versions.v_ext%TYPE,
14595
      clonefrompvid   IN   NUMBER
14596
   )
14597
   IS
14598
      viewid          NUMBER;
14599
      envtab          NUMBER;
14600
      ispatch         CHAR (1) := NULL;
14601
      buildtype       CHAR (1) := NULL;
14602
      lastversionid   NUMBER;
14603
   BEGIN
14604
      -- Check if package is patch
14605
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14606
        INTO ispatch, buildtype, lastversionid
14607
        FROM package_versions pv
14608
       WHERE pv.pv_id = pvid;
14609
 
14610
      IF vext <> ssv_ext
14611
      THEN
14612
         -- Get ViewId
14613
         viewid := get_package_view (clonefrompvid, rtagid);
14614
         -- Remove from current area
14615
         envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
14616
      ELSE
14617
         -- Get ViewId
14618
         viewid := get_package_view (pvid, rtagid);
14619
         -- Remove from current area
14620
         envtab := pk_environment.get_package_area (pvid, rtagid);
14621
      END IF;
14622
 
14623
      -- Make sure that package was in work-in-progress or pending before makeing it release
14624
      -- Exclude patches, ripple builds
14625
      IF (envtab < 0)
14626
      THEN
14627
         -- Not found in work-in-progress or pending
14628
         IF (ispatch IS NULL) AND (buildtype = 'M')
14629
         THEN
14630
            raise_application_error (-20000,
14631
                                     'This package cannot be released here.'
14632
                                    );
14633
         END IF;
14634
      END IF;
14635
 
14636
      -- Log
14637
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14638
 
14639
      IF vext <> ssv_ext
14640
      THEN
14641
         IF envtab = 0
14642
         THEN
14643
            -- WORK IN PROGRESS --
14644
            pk_work_in_progress.remove_package (clonefrompvid, rtagid,
14645
                                                userid);
14646
         ELSIF envtab = 1
14647
         THEN
14648
            -- PENDING --
14649
            pk_planned.remove_package (clonefrompvid, rtagid, userid);
14650
         ELSIF envtab = 2
14651
         THEN
14652
            -- RELEASED --
14653
            pk_release.remove_package (clonefrompvid, rtagid, userid);
14654
         END IF;
14655
      ELSE
14656
         IF envtab = 0
14657
         THEN
14658
            -- WORK IN PROGRESS --
14659
            pk_work_in_progress.remove_package (pvid, rtagid, userid);
14660
         ELSIF envtab = 1
14661
         THEN
14662
            -- PENDING --
14663
            pk_planned.remove_package (pvid, rtagid, userid);
14664
         END IF;
14665
      END IF;
14666
 
14667
      -- Change package state
14668
      pk_package.change_state (pvid, 'Y', userid);
14669
 
14670
      -- Make sure it is valid BASE VIEW
14671
      IF viewid < 1
14672
      THEN
14673
         viewid := 7;                            -- This is default base view
14674
      END IF;
14675
 
14676
      IF (ispatch IS NULL)
14677
      THEN
14678
         -- Add package to new area
14679
         pk_release.add_package (pvid, viewid, rtagid, userid);
14680
      END IF;
14681
 
14682
      -- Now do post Release Actions
14683
      pk_release.run_post_actions (pvid, rtagid);
14684
      -- Now update the Dash_Board Table
14685
      pk_rmapi.update_dash_board (rtagid);
14686
 
14687
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14688
      DELETE FROM do_not_ripple
14689
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14690
 
14691
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14692
      DELETE FROM advisory_ripple
14693
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14694
 
14695
      -- Log
14696
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14697
   END;
14698
 
14699
/*-------------------------------------------------------------------------------------------------------*/
14700
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14701
   IS
14702
      viewid   NUMBER;
14703
      envtab   NUMBER;
14704
   BEGIN
14705
      -- Get ViewId
14706
      --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
14707
      viewid := get_package_view (pvid, rtagid);
14708
      -- Remove from current area
14709
      envtab := pk_environment.get_package_area (pvid, rtagid);
14710
      -- Log
14711
      log_action (pvid,
14712
                  'action',
14713
                  userid,
14714
                  'Start of Make Package UnRelease...'
14715
                 );
14716
 
14717
      IF envtab = 2
14718
      THEN
14719
         -- RELEASE AREA --
14720
         pk_release.remove_package (pvid, rtagid, userid);
14721
      ELSIF envtab = 1
14722
      THEN
14723
         -- PENDING --
14724
         pk_planned.remove_package (pvid, rtagid, userid);
14725
      END IF;
14726
 
14727
      -- Change package state
14728
      pk_package.change_state (pvid, 'N', userid);
14729
 
14730
      -- Make sure it is valid BASE VIEW
14731
      IF viewid < 1
14732
      THEN
14733
         viewid := 7;                            -- This is default base view
14734
      END IF;
14735
 
14736
      -- Add package to new area
14737
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14738
      -- Now do post Release Actions
14739
      pk_release.run_post_actions (pvid, rtagid);
14740
      -- Log
14741
      log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
14742
   END;
14743
 
14744
/*-------------------------------------------------------------------------------------------------------*/
14745
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14746
   IS
14747
      viewid      NUMBER;
14748
      ispatch     CHAR (1) := NULL;
14749
      buildtype   CHAR (1) := NULL;
14750
   BEGIN
14751
      -- Check if package is patch
14752
      SELECT pv.is_patch, pv.build_type
14753
        INTO ispatch, buildtype
14754
        FROM package_versions pv
14755
       WHERE pv.pv_id = pvid;
14756
 
14757
      -- Get ViewId
14758
      viewid := get_package_view (pvid, rtagid);
14759
      --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
14760
 
14761
      -- Log
14762
      log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
14763
 
14764
      IF (ispatch IS NULL)
14765
      THEN
14766
         -- Remove from current area
14767
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14768
         -- Change package state
14769
         pk_package.change_state (pvid, 'P', userid);
14770
         -- Add package to new area
14771
         pk_planned.add_package (pvid, viewid, rtagid, userid);
14772
      END IF;
14773
 
14774
      -- Log
14775
      log_action (pvid, 'action', userid, 'End of Make Package Pending...');
14776
   END;
14777
 
14778
/*-------------------------------------------------------------------------------------------------------*/
14779
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14780
   IS
14781
   BEGIN
14782
      -- Log
14783
      log_action (pvid,
14784
                  'action',
14785
                  userid,
14786
                  'Start of Package Pending Approval...'
14787
                 );
14788
      -- Change package state
14789
      pk_package.change_state (pvid, 'A', userid);
14790
      -- Log
14791
      log_action (pvid, 'action', userid,
14792
                  'End of Package Pending Approval...');
14793
   END;
14794
 
14795
/*-------------------------------------------------------------------------------------------------------*/
14796
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14797
   IS
14798
      viewid   NUMBER;
14799
   BEGIN
14800
      -- Get ViewId
14801
      viewid := get_package_view (pvid, rtagid);
14802
-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
14803
 
14804
      -- Log
14805
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14806
      -- Remove from current area
14807
      pk_planned.remove_package (pvid, rtagid, userid);
14808
      -- Change package state
14809
      pk_package.change_state (pvid, 'R', userid);
14810
      -- Add package to new area
14811
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14812
      -- Log
14813
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14814
   END;
14815
 
14816
/*-------------------------------------------------------------------------------------------------------*/
14817
   PROCEDURE change_package_view (
14818
      pvid        IN   NUMBER,
14819
      rtagid      IN   NUMBER,
14820
      newviewid   IN   NUMBER
14821
   )
14822
   IS
14823
      envtab   NUMBER;
14824
   BEGIN
14825
      envtab := pk_environment.get_package_area (pvid, rtagid);
14826
 
14827
      IF envtab = 0
14828
      THEN
14829
         -- WORK IN PROGRESS --
14830
         pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
14831
      ELSIF envtab = 1
14832
      THEN
14833
         -- PENDING --
14834
         pk_planned.change_package_view (pvid, rtagid, newviewid);
14835
      ELSIF envtab = 2
14836
      THEN
14837
         -- RELEASED --
14838
         pk_release.change_package_view (pvid, rtagid, newviewid);
14839
      END IF;
14840
   END;
14841
 
14842
/*-------------------------------------------------------------------------------------------------------*/
14843
   PROCEDURE find_package (
14844
      skeyword      IN       VARCHAR2,
14845
      nrtagid       IN       NUMBER,
14846
      nsearcharea   IN       NUMBER,
14847
      recordset     OUT      typecur
14848
   )
14849
   IS
14850
   BEGIN
14851
      IF nsearcharea = 0
14852
      THEN
14853
         /* Search Work In Progress */
14854
         OPEN recordset FOR
14855
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14856
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14857
                     pv.modified_stamp, usr.full_name, usr.user_email
14858
                FROM views vi,
14859
                     work_in_progress rc,
14860
                     PACKAGES pkg,
14861
                     package_versions pv,
14862
                     users usr
14863
               WHERE rc.view_id = vi.view_id
14864
                 AND rc.pv_id = pv.pv_id
14865
                 AND pkg.pkg_id = pv.pkg_id
14866
                 AND pv.modifier_id = usr.user_id
14867
                 AND rc.rtag_id = nrtagid
14868
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14869
            ORDER BY UPPER (pkg.pkg_name);
14870
      ELSIF nsearcharea = 1
14871
      THEN
14872
         /* Search Pending */
14873
         OPEN recordset FOR
14874
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14875
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14876
                     pv.modified_stamp, usr.full_name, usr.user_email
14877
                FROM views vi,
14878
                     planned rc,
14879
                     PACKAGES pkg,
14880
                     package_versions pv,
14881
                     users usr
14882
               WHERE rc.view_id = vi.view_id
14883
                 AND rc.pv_id = pv.pv_id
14884
                 AND pkg.pkg_id = pv.pkg_id
14885
                 AND pv.modifier_id = usr.user_id
14886
                 AND rc.rtag_id = nrtagid
14887
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14888
            ORDER BY UPPER (pkg.pkg_name);
14889
      ELSIF nsearcharea = 2
14890
      THEN
14891
         /* Search Released */
14892
         OPEN recordset FOR
14893
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14894
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14895
                     pv.modified_stamp, usr.full_name, usr.user_email
14896
                FROM views vi,
14897
                     release_content rc,
14898
                     PACKAGES pkg,
14899
                     package_versions pv,
14900
                     users usr
14901
               WHERE rc.base_view_id = vi.view_id
14902
                 AND rc.pv_id = pv.pv_id
14903
                 AND pkg.pkg_id = pv.pkg_id
14904
                 AND pv.modifier_id = usr.user_id
14905
                 AND rc.rtag_id = nrtagid
14906
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14907
            ORDER BY UPPER (pkg.pkg_name);
14908
      ELSIF nsearcharea = 3
14909
      THEN
14910
         /* Search ALL */
14911
         OPEN recordset FOR
14912
            SELECT   rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
14913
                     pv.pv_id, pv.pkg_version, pv.comments,
14914
                     pv.modified_stamp, usr.full_name, usr.user_email
14915
                FROM views vi,
14916
                     environment_view rc,
14917
                     PACKAGES pkg,
14918
                     package_versions pv,
14919
                     users usr
14920
               WHERE rc.view_id = vi.view_id
14921
                 AND rc.pv_id = pv.pv_id
14922
                 AND pkg.pkg_id = pv.pkg_id
14923
                 AND pv.modifier_id = usr.user_id
14924
                 AND rc.rtag_id = nrtagid
14925
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14926
            ORDER BY UPPER (pkg.pkg_name);
14927
      END IF;
14928
   END;
14929
 
14930
/*-------------------------------------------------------------------------------------------------------*/
14931
   PROCEDURE find_file (
14932
      skeyword      IN       VARCHAR2,
14933
      nrtagid       IN       NUMBER,
14934
      nsearcharea   IN       NUMBER,
14935
      npagesize     IN       NUMBER,
14936
      recordset     OUT      typecur
14937
   )
14938
   IS
14939
   BEGIN
14940
      IF nsearcharea = 0
14941
      THEN
14942
         /* Search Work In Progress */
14943
         OPEN recordset FOR
14944
            SELECT   qry.*
14945
                FROM (
14946
                      /* File search on Packages */
14947
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14948
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14949
                        FROM work_in_progress rc,
14950
                             PACKAGES pkg,
14951
                             package_versions pv,
14952
                             release_components art
14953
                       WHERE rc.pv_id = art.pv_id
14954
                         AND pv.pkg_id = pkg.pkg_id
14955
                         AND rc.pv_id = pv.pv_id
14956
                         AND rc.rtag_id = nrtagid
14957
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14958
                      UNION ALL
14959
                      /* File search on Products */
14960
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14961
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14962
                        FROM work_in_progress rc,
14963
                             PACKAGES pkg,
14964
                             package_versions pv,
14965
                             product_components art
14966
                       WHERE rc.pv_id = art.pv_id
14967
                         AND pv.pkg_id = pkg.pkg_id
14968
                         AND rc.pv_id = pv.pv_id
14969
                         AND rc.rtag_id = nrtagid
14970
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
14971
               WHERE ROWNUM <= npagesize
14972
            ORDER BY UPPER (qry.pkg_name);
14973
      ELSIF nsearcharea = 1
14974
      THEN
14975
         /* Search Pending */
14976
         OPEN recordset FOR
14977
            SELECT   qry.*
14978
                FROM (
14979
                      /* File search on Packages */
14980
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14981
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14982
                        FROM planned rc,
14983
                             PACKAGES pkg,
14984
                             package_versions pv,
14985
                             release_components art
14986
                       WHERE rc.pv_id = art.pv_id
14987
                         AND pv.pkg_id = pkg.pkg_id
14988
                         AND rc.pv_id = pv.pv_id
14989
                         AND rc.rtag_id = nrtagid
14990
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14991
                      UNION ALL
14992
                      /* File search on Products */
14993
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14994
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14995
                        FROM planned rc,
14996
                             PACKAGES pkg,
14997
                             package_versions pv,
14998
                             product_components art
14999
                       WHERE rc.pv_id = art.pv_id
15000
                         AND pv.pkg_id = pkg.pkg_id
15001
                         AND rc.pv_id = pv.pv_id
15002
                         AND rc.rtag_id = nrtagid
15003
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15004
               WHERE ROWNUM <= npagesize
15005
            ORDER BY UPPER (qry.pkg_name);
15006
      ELSIF nsearcharea = 2
15007
      THEN
15008
         /* Search Released */
15009
         OPEN recordset FOR
15010
            SELECT   qry.*
15011
                FROM (
15012
                      /* File search on Packages */
15013
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15014
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15015
                             NULL AS patch_id
15016
                        FROM release_content rc,
15017
                             PACKAGES pkg,
15018
                             package_versions pv,
15019
                             release_components art
15020
                       WHERE rc.pv_id = art.pv_id
15021
                         AND pv.pkg_id = pkg.pkg_id
15022
                         AND rc.pv_id = pv.pv_id
15023
                         AND rc.rtag_id = nrtagid
15024
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15025
                      UNION ALL
15026
                      /* File search on Products */
15027
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15028
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15029
                             NULL AS patch_id
15030
                        FROM release_content rc,
15031
                             PACKAGES pkg,
15032
                             package_versions pv,
15033
                             product_components art
15034
                       WHERE rc.pv_id = art.pv_id
15035
                         AND pv.pkg_id = pkg.pkg_id
15036
                         AND rc.pv_id = pv.pv_id
15037
                         AND rc.rtag_id = nrtagid
15038
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15039
                      UNION ALL
15040
                      /* File search on Patches */
15041
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15042
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15043
                             DECODE (art.file_path,
15044
                                     NULL, pp.patch_id,
15045
                                     NULL
15046
                                    ) AS patch_id
15047
                        FROM release_content rc,
15048
                             PACKAGES pkg,
15049
                             package_versions pv,
15050
                             release_components art,
15051
                             package_patches pp
15052
                       WHERE pv.pv_id = pp.pv_id
15053
                         AND pv.pkg_id = pkg.pkg_id
15054
                         AND rc.rtag_id = nrtagid
15055
                         AND art.pv_id = pp.patch_id
15056
                         AND rc.pv_id = pp.pv_id
15057
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15058
               WHERE ROWNUM <= npagesize
15059
            ORDER BY UPPER (qry.pkg_name);
15060
      ELSIF nsearcharea = 3
15061
      THEN
15062
         /* Search ALL */
15063
         OPEN recordset FOR
15064
            SELECT   qry.*
15065
                FROM (
15066
                      /* File search on Packages */
15067
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15068
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15069
                             NULL AS patch_id
15070
                        FROM environment_view rc,
15071
                             PACKAGES pkg,
15072
                             package_versions pv,
15073
                             release_components art
15074
                       WHERE rc.pv_id = art.pv_id
15075
                         AND pv.pkg_id = pkg.pkg_id
15076
                         AND rc.pv_id = pv.pv_id
15077
                         AND rc.rtag_id = nrtagid
15078
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15079
                      UNION ALL
15080
                      /* File search on Products */
15081
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15082
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15083
                             NULL AS patch_id
15084
                        FROM environment_view rc,
15085
                             PACKAGES pkg,
15086
                             package_versions pv,
15087
                             product_components art
15088
                       WHERE rc.pv_id = art.pv_id
15089
                         AND pv.pkg_id = pkg.pkg_id
15090
                         AND rc.pv_id = pv.pv_id
15091
                         AND rc.rtag_id = nrtagid
15092
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15093
                      UNION ALL
15094
                      /* File search on Patches */
15095
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15096
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15097
                             DECODE (art.file_path,
15098
                                     NULL, pp.patch_id,
15099
                                     NULL
15100
                                    ) AS patch_id
15101
                        FROM release_content rc,
15102
                             PACKAGES pkg,
15103
                             package_versions pv,
15104
                             release_components art,
15105
                             package_patches pp
15106
                       WHERE pv.pv_id = pp.pv_id
15107
                         AND pv.pkg_id = pkg.pkg_id
15108
                         AND rc.rtag_id = nrtagid
15109
                         AND art.pv_id = pp.patch_id
15110
                         AND rc.pv_id = pp.pv_id
15111
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15112
               WHERE ROWNUM <= npagesize
15113
            ORDER BY UPPER (qry.pkg_name);
15114
      END IF;
15115
   END;
15116
 
15117
/*-------------------------------------------------------------------------------------------------------*/
15118
   PROCEDURE get_prodrelease_items (
15119
      rtagid             IN       NUMBER,
15120
      ntruerecordcount   OUT      NUMBER,
15121
      recordset          OUT      typecur
15122
   )
15123
   IS
15124
   BEGIN
15125
      -- Get true record count n the number of integration products
15126
      SELECT COUNT (rc.pv_id)
15127
        INTO ntruerecordcount
15128
        FROM release_content rc
15129
       WHERE rc.rtag_id = rtagid;
15130
 
15131
      OPEN recordset FOR
15132
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,    --rel.pkg_state,
15133
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15134
                  pv.pkg_version, pv.dlocked, pv.pv_description
15135
             FROM release_content rel,
15136
                  PACKAGES pkg,
15137
                  package_versions pv,
15138
                  views vi
15139
            WHERE pv.pkg_id = pkg.pkg_id
15140
              AND rel.pv_id = pv.pv_id
15141
              AND rel.base_view_id = vi.view_id
15142
              AND pv.is_deployable = 'Y'
15143
              AND rtag_id = rtagid
15144
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15145
                                              FROM deployment_manager.os_contents)
15146
              AND rel.product_state IS NULL
15147
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15148
   END;
15149
 
15150
/*-------------------------------------------------------------------------------------------------------*/
15151
   PROCEDURE get_integration_items (
15152
      rtagid             IN       NUMBER,
15153
      ntruerecordcount   OUT      NUMBER,
15154
      recordset          OUT      typecur
15155
   )
15156
   IS
15157
   BEGIN
15158
      -- Get true record count n the number of integration products
15159
      SELECT COUNT (rc.pv_id)
15160
        INTO ntruerecordcount
15161
        FROM release_content rc
15162
       WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
15163
 
15164
      OPEN recordset FOR
15165
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15166
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15167
                  pv.pkg_version, pv.dlocked, pv.pv_description
15168
             FROM release_content rel,
15169
                  PACKAGES pkg,
15170
                  package_versions pv,
15171
                  views vi
15172
            WHERE pv.pkg_id = pkg.pkg_id
15173
              AND rel.pv_id = pv.pv_id
15174
              AND rel.base_view_id = vi.view_id
15175
              AND pv.is_deployable = 'Y'
15176
              AND rtag_id = rtagid
15177
              AND rel.product_state IN (1, 5)
15178
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15179
   END;
15180
 
15181
/*-------------------------------------------------------------------------------------------------------*/
15182
   PROCEDURE get_test_items (
15183
      rtagid             IN       NUMBER,
15184
      ntruerecordcount   OUT      NUMBER,
15185
      recordset          OUT      typecur
15186
   )
15187
   IS
15188
   BEGIN
15189
      -- Get true record count n the number of test products
15190
      SELECT COUNT (rc.pv_id)
15191
        INTO ntruerecordcount
15192
        FROM release_content rc
15193
       WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
15194
 
15195
      OPEN recordset FOR
15196
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15197
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15198
                  pv.pkg_version, pv.dlocked, pv.pv_description
15199
             FROM release_content rel,
15200
                  PACKAGES pkg,
15201
                  package_versions pv,
15202
                  views vi
15203
            WHERE pv.pkg_id = pkg.pkg_id
15204
              AND rel.pv_id = pv.pv_id
15205
              AND rel.base_view_id = vi.view_id
15206
              AND pv.is_deployable = 'Y'
15207
              AND rtag_id = rtagid
15208
              AND rel.product_state = 2
15209
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15210
   END;
15211
 
15212
/*-------------------------------------------------------------------------------------------------------*/
15213
   PROCEDURE get_deploy_items (
15214
      rtagid             IN       NUMBER,
15215
      ntruerecordcount   OUT      NUMBER,
15216
      recordset          OUT      typecur
15217
   )
15218
   IS
15219
   BEGIN
15220
      -- Get true record count n the number of deploy products
15221
      SELECT COUNT (rc.pv_id)
15222
        INTO ntruerecordcount
15223
        FROM release_content rc
15224
       WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
15225
 
15226
      OPEN recordset FOR
15227
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15228
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15229
                  pv.pkg_version, pv.dlocked, pv.pv_description
15230
             FROM release_content rel,
15231
                  PACKAGES pkg,
15232
                  package_versions pv,
15233
                  views vi
15234
            WHERE pv.pkg_id = pkg.pkg_id
15235
              AND rel.pv_id = pv.pv_id
15236
              AND rel.base_view_id = vi.view_id
15237
              AND pv.is_deployable = 'Y'
15238
              AND rtag_id = rtagid
15239
              AND rel.product_state IN (3, 5)
15240
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15241
                                              FROM deployment_manager.os_contents)
15242
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15243
   END;
15244
 
15245
/*-------------------------------------------------------------------------------------------------------*/
15246
   PROCEDURE get_reject_items (
15247
      rtagid             IN       NUMBER,
15248
      ntruerecordcount   OUT      NUMBER,
15249
      recordset          OUT      typecur
15250
   )
15251
   IS
15252
   BEGIN
15253
      -- Get true record count n the number of reject products
15254
      SELECT COUNT (rc.pv_id)
15255
        INTO ntruerecordcount
15256
        FROM release_content rc
15257
       WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
15258
 
15259
      OPEN recordset FOR
15260
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15261
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15262
                  pv.pkg_version, pv.dlocked, pv.pv_description
15263
             FROM release_content rel,
15264
                  PACKAGES pkg,
15265
                  package_versions pv,
15266
                  views vi
15267
            WHERE pv.pkg_id = pkg.pkg_id
15268
              AND rel.pv_id = pv.pv_id
15269
              AND rel.base_view_id = vi.view_id
15270
              AND pv.is_deployable = 'Y'
15271
              AND rtag_id = rtagid
15272
              AND rel.product_state = 4
15273
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15274
   END;
15275
/*-------------------------------------------------------------------------------------------------------*/
15276
END pk_environment_test;
1374 dpurdie 15277
/
15278
--------------------------------------------------------
15279
--  DDL for Package Body PK_BUILDAPI_TEST
15280
--------------------------------------------------------
1373 dpurdie 15281
 
15282
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI_TEST" IS
15283
 
15284
/*
15285
------------------------------
15286
||  Last Modified:  S.Vukovic
15287
||  Modified Date:  30/Mar/2005
15288
||  Body Version:   1.0
15289
------------------------------
15290
*/
15291
 
15292
 
15293
/*-------------------------------------------------------------------------------------------------------*/
15294
PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
15295
								  sOsName IN VARCHAR2,
15296
								  sOrigFilePath IN VARCHAR2,
15297
								  sFileName IN VARCHAR2,
15298
								  sDestFilePath IN VARCHAR2,
15299
								  nByteSize IN NUMBER,
15300
								  sCRCcksum IN VARCHAR2 ) IS
15301
 
15302
	nOsId NUMBER;
15303
 
15304
BEGIN
15305
	/*--------------- Business Rules Here -------------------*/
15306
	-- OS Name Requirements --
15307
	IF (sOsName IS NULL) THEN
15308
		RAISE_APPLICATION_ERROR (-20000, 'OsName cannot be NULL.');
15309
	END IF;
15310
 
15311
 
15312
	-- File Requirements --
15313
	IF (NOT sFileName IS NULL) THEN
15314
 
15315
		IF (nByteSize IS NULL) THEN
15316
			RAISE_APPLICATION_ERROR (-20000, 'Byte Size cannot be NULL.');
15317
 
15318
		ELSIF (sCRCcksum IS NULL) THEN
15319
			RAISE_APPLICATION_ERROR (-20000, 'CRC CKSUM cannot be NULL.');
15320
 
15321
		END IF;
15322
 
15323
	END IF;
15324
 
15325
 
15326
	-- Folder Requirements --
15327
	-- No requirements for now.
15328
 
15329
	/*-------------------------------------------------------*/
15330
 
15331
	-- Get OsId
15332
	nOsId := Get_OsId ( sOsName );
15333
 
15334
 
15335
	-- Insert component entry
15336
	INSERT INTO PRODUCT_COMPONENTS ( PV_ID, OS_ID, FILE_PATH, FILE_NAME, DESTINATION_PATH, BYTE_SIZE, CRC_CKSUM )
15337
    VALUES (
15338
			  nPvId,
15339
			  nOsId,
15340
			  sOrigFilePath,
15341
			  sFileName,
15342
			  sDestFilePath,
15343
			  nByteSize,
15344
			  sCRCcksum
15345
			);
15346
 
15347
 
15348
	EXCEPTION
15349
    WHEN DUP_VAL_ON_INDEX
15350
	THEN
15351
		RAISE_APPLICATION_ERROR (-20000, 'Cannot have duplicate product components.');
15352
 
15353
END;
15354
/*-------------------------------------------------------------------------------------------------------*/
15355
PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 ) IS
15356
 
15357
	nOsId NUMBER;
15358
 
15359
BEGIN
15360
	/*--------------- Business Rules Here -------------------*/
15361
	/*-------------------------------------------------------*/
15362
 
15363
	-- Get OsId
15364
	nOsId := Get_OsId ( sOsName );
15365
 
15366
 
15367
	-- Delete component entry
15368
	DELETE
15369
	  FROM PRODUCT_COMPONENTS pc
15370
	 WHERE pc.PV_ID = nPvId
15371
	   AND pc.OS_ID = nOsId;
15372
 
15373
 
15374
END;
15375
/*-------------------------------------------------------------------------------------------------------*/
15376
FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER IS
15377
	Code NUMBER;
15378
 
15379
BEGIN
15380
 
15381
	-- Get Platform Code --
15382
	SELECT pf.CODE INTO Code
15383
	  FROM PLATFORMS pf
15384
	 WHERE UPPER( pf.NAME ) = UPPER( sOsName );
15385
 
15386
 
15387
	RETURN Code;	   
15388
 
15389
	EXCEPTION
15390
    	WHEN NO_DATA_FOUND THEN
15391
       		RAISE_APPLICATION_ERROR (-20000, 'Platform '|| sOsName ||' is not valid. It needs to be added to PLATFORMS table in Release Manager.' );
15392
   	RAISE;
15393
END;
15394
/*-------------------------------------------------------------------------------------------------------*/
15395
PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
15396
			  					 sWebServer IN VARCHAR2,
15397
								 sMailServer IN VARCHAR2,
15398
								 sMailSender IN VARCHAR2) IS
15399
 
15400
BEGIN
15401
 
15402
 
15403
	 UPDATE BUILD_SERVICE_CONFIG
15404
	 SET CONFIG = sDatabaseServer
15405
	 WHERE SERVICE = 'DATABASE SERVER'; 
15406
 
15407
	 UPDATE BUILD_SERVICE_CONFIG
15408
	 SET CONFIG = sWebServer
15409
	 WHERE SERVICE = 'WEB SERVER'; 
15410
 
15411
	 UPDATE BUILD_SERVICE_CONFIG
15412
	 SET CONFIG = sMailServer
15413
	 WHERE SERVICE = 'MAIL SERVER'; 
15414
 
15415
	 UPDATE BUILD_SERVICE_CONFIG
15416
	 SET CONFIG = sMailSender
15417
	 WHERE SERVICE = 'BUILD FAILURE MAIL SENDER'; 	 	 									 
15418
 
15419
 
15420
 
15421
END;
15422
/*-------------------------------------------------------------------------------------------------------*/
15423
PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue in VARCHAR2 ) IS
15424
 
15425
GBE_ID NUMBER;
15426
 
15427
BEGIN
15428
 
15429
	-- Get GBE_ID
15430
	SELECT SEQ_GBE_ID.NEXTVAL INTO GBE_ID FROM DUAL;
15431
 
15432
	INSERT INTO GBE_MACHTYPE (GBE_ID, GBE_VALUE)
15433
	VALUES( GBE_ID, sGBEValue);
15434
 
15435
 
15436
END;
15437
/*-------------------------------------------------------------------------------------------------------*/
15438
PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER ) IS
15439
 
15440
BEGIN
15441
 
15442
	 DELETE FROM GBE_MACHTYPE WHERE GBE_ID = nGBE_ID;
15443
 
15444
END;
15445
/*-------------------------------------------------------------------------------------------------------*/
15446
PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 ) IS
15447
 
15448
BEGIN
15449
 
15450
	 UPDATE GBE_MACHTYPE
15451
	 SET GBE_VALUE = sGBEValue 
15452
	 WHERE GBE_ID = nGBE_ID;
15453
 
15454
 
15455
END;
15456
/*-------------------------------------------------------------------------------------------------------*/
15457
PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER ) IS
15458
 
15459
nRecordNumber NUMBER;
15460
nRconId NUMBER;
15461
BEGIN
15462
	-- Get RCON_ID
15463
	SELECT SEQ_RCON_ID.NEXTVAL INTO nRconId FROM DUAL; 
15464
 
15465
        SELECT count(*) INTO nRecordNumber 
15466
        FROM RELEASE_CONFIG
15467
        WHERE RTAG_ID = nRtagId;
15468
 
15469
        IF nRecordNumber = 0 THEN
15470
       	   INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15471
           VALUES (nRconId, nRtagId, sDaemonHostname, 'M', nGbeId);
15472
        ELSE
15473
        	INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15474
        	VALUES (nRconId, nRtagId, sDaemonHostname, 'S', nGbeId);
15475
        END IF;
15476
 
15477
 
15478
 
15479
END;
15480
/*-------------------------------------------------------------------------------------------------------*/        
15481
END PK_BUILDAPI_TEST;
1374 dpurdie 15482
/
15483
--------------------------------------------------------
15484
--  DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO
15485
--------------------------------------------------------
1373 dpurdie 15486
 
15487
  CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (
15488
   nprojid     IN   NUMBER,
15489
   nviewid     IN   NUMBER,
15490
   suserlist   IN   VARCHAR2
15491
)
15492
IS
15493
   groupid   NUMBER;
15494
/******************************************************************************
15495
   NAME:       ADD_AUTOBUILD_FAILURE
15496
   PURPOSE:
15497
 
15498
   REVISIONS:
15499
   Ver        Date        Author           Description
15500
   ---------  ----------  ---------------  ------------------------------------
15501
   1.0        11/04/2006   Rupesh Solanki Created this procedure.
15502
 
15503
   NOTES:
15504
 
15505
   Automatically available Auto Replace Keywords:
15506
      Object Name:     ADD_AUTOBUILD_FAILURE
15507
      Sysdate:         11/04/2006
15508
      Date and Time:   11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AM
15509
      Username:         (set in TOAD Options, Procedure Editor)
15510
      Table Name:       (set in the "New PL/SQL Object" dialog)
15511
 
15512
******************************************************************************/
15513
BEGIN
15514
   BEGIN
15515
      SELECT group_email_id
15516
        INTO groupid
15517
        FROM autobuild_failure
15518
       WHERE proj_id = nprojid AND view_id = nviewid;
15519
   EXCEPTION
15520
      WHEN NO_DATA_FOUND
15521
      THEN
15522
         --  Create Next Sequence Id ---
15523
         SELECT seq_group_email_id.NEXTVAL
15524
           INTO groupid
15525
           FROM DUAL;
15526
 
15527
         INSERT INTO autobuild_failure
15528
                     (group_email_id, proj_id, view_id
15529
                     )
15530
              VALUES (groupid, nprojid, nviewid
15531
                     );
15532
   END;
15533
 
15534
   add_view_members (groupid, suserlist);
15535
END add_autobuild_failure_info;
1374 dpurdie 15536
/
15537
--------------------------------------------------------
15538
--  DDL for Procedure DEPRECATE_PACKAGE
15539
--------------------------------------------------------
1373 dpurdie 15540
 
15541
  CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
15542
	   	  		  							   nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
15543
	   	  		  							   nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
15544
											   sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,
15545
											   nUserId IN NUMBER) IS
15546
ext VARCHAR2(50);
15547
 
15548
 
15549
 
15550
 
15551
BEGIN
15552
 
15553
	--Extract the package version extension
15554
	SELECT V_EXT into ext
15555
	FROM PACKAGE_VERSIONS
15556
	WHERE PV_ID = nPvId; 
15557
 
15558
    -- Deprecate Package
15559
    INSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)
15560
	VALUES (nRtagId, nPkgId, sComments, ext);
15561
 
15562
	IF ext IS NOT NULL THEN
15563
	   UPDATE RELEASE_CONTENT 
15564
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15565
	   WHERE RTAG_ID = nRtagId
15566
	   AND PV_ID IN (SELECT PV.PV_ID 
15567
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15568
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15569
				  	AND PV.V_EXT = ext
15570
				  	AND PKG.PKG_ID = nPkgId
15571
				 	);						
15572
	ELSE
15573
	   UPDATE RELEASE_CONTENT 
15574
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15575
	   WHERE RTAG_ID = nRtagId
15576
	   AND PV_ID IN (SELECT PV.PV_ID 
15577
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15578
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15579
				  	AND PV.V_EXT IS NULL
15580
				  	AND PKG.PKG_ID = nPkgId
15581
				 	);
15582
	END IF;
15583
 
15584
	UPDATE RELEASE_CONTENT
15585
	SET PKG_ID = nPkgId, DEPRECATED_STATE = 7
15586
	WHERE RTAG_ID = nRtagId
15587
	AND PV_ID IN (		   SELECT DISTINCT
15588
 	 		  	 		   qry.PV_ID
15589
						        FROM (
15590
								 	  SELECT dep.*,
15591
									  LEVEL AS LEVEL_NUM
15592
									  FROM PACKAGE_DEPENDENCIES dep 
15593
 								START WITH dep.DPV_ID IN ( nPvId ) 
15594
								CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
15595
 								) qry,
15596
								PACKAGES pkg,
15597
								PACKAGE_VERSIONS pv,
15598
								RELEASE_CONTENT rc
15599
						 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
15600
							 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
15601
							 AND rc.DEPRECATED_STATE IS NULL
15602
				 );			 
15603
 
15604
    /* LOG ACTION */
15605
   	/*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/
15606
 
15607
 
15608
END Deprecate_Package;
1374 dpurdie 15609
/
15610
--------------------------------------------------------
15611
--  DDL for Procedure LOG_PROJECT_ACTION
15612
--------------------------------------------------------
1373 dpurdie 15613
 
15614
  CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,
15615
												 enumActionTypeName IN VARCHAR2,
15616
		                                         nUserId IN NUMBER,
15617
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL,
15618
												 nRtagId IN NUMBER  ) IS
15619
/* ---------------------------------------------------------------------------
15620
    Version: 3.0
15621
   --------------------------------------------------------------------------- */
15622
 
15623
    ActionTypeId NUMBER;
15624
 
15625
BEGIN
15626
 
15627
    -- Get Action Type FK
15628
    SELECT act.ACTTYPE_ID INTO ActionTypeId
15629
      FROM ACTION_TYPE act
15630
     WHERE act.NAME = enumActionTypeName;
15631
 
15632
 
15633
    INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)
15634
    VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);
15635
 
15636
 
15637
END Log_Project_Action;
1374 dpurdie 15638
/
15639
--------------------------------------------------------
15640
--  DDL for Procedure RIPPLE_PACKAGE
15641
--------------------------------------------------------
1373 dpurdie 15642
 
15643
  CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (
15644
        sPvIdList IN VARCHAR2,
15645
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
15646
        nUserId IN NUMBER
15647
    ) IS
15648
/* ---------------------------------------------------------------------------
15649
    Version: 4.1
15650
   --------------------------------------------------------------------------- */
15651
 
15652
BEGIN
15653
 
15654
    IF (sPvIdList IS NULL) THEN
15655
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
15656
    END IF;
15657
 
15658
    -- Ripple Package
15659
    DELETE FROM DO_NOT_RIPPLE
15660
    WHERE RTAG_ID = nRtagId
15661
    AND PV_ID IN (
15662
        SELECT *
15663
        FROM THE (
15664
            SELECT CAST( IN_LIST_NUMBER( sPvIdList )
15665
            AS RELMGR_NUMBER_TAB_t )
15666
            FROM DUAL
15667
        )
15668
    );
15669
 
15670
    /* LOG ACTION */
15671
    Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );
15672
 
15673
END Ripple_Package;
1374 dpurdie 15674
/
15675
--------------------------------------------------------
15676
--  DDL for Procedure DT_SETPROPERTYBYID
15677
--------------------------------------------------------
1373 dpurdie 15678
 
15679
  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;
1374 dpurdie 15680
/
15681
--------------------------------------------------------
15682
--  DDL for Procedure BASIC_CLONE
15683
--------------------------------------------------------
1373 dpurdie 15684
 
15685
  CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,
15686
                        nTOpv_id IN NUMBER,
15687
                        nRtag_id IN NUMBER,
15688
                        nUser_id IN NUMBER,
15689
                        nTOpkg_id IN NUMBER DEFAULT NULL,
15690
                        enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) IS
15691
 
15692
   FromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
15693
   major NUMBER;
15694
   minor NUMBER;
15695
   patch NUMBER;
15696
   buildn NUMBER;
15697
   from_vcs_type_id NUMBER;
15698
BEGIN
15699
------------------------------ Version Control System ------------------------------------------
15700
   SELECT vcs_type_id
15701
      INTO from_vcs_type_id
15702
      FROM package_versions WHERE pv_id = nFROMpv_id;
15703
 
15704
   UPDATE package_versions
15705
      SET vcs_type_id = from_vcs_type_id
15706
      WHERE pv_id = nTOpv_id;
15707
------------------------------------- Limits ---------------------------------------------------
15708
   select major_limit, minor_limit, patch_limit, build_number_limit
15709
   into major, minor, patch, buildn
15710
   from package_versions where pv_id=nFROMpv_id;
15711
    UPDATE package_versions SET
15712
           major_limit = major,
15713
           minor_limit = minor,
15714
           patch_limit = patch,
15715
           build_number_limit = buildn
15716
     WHERE PV_ID = nTOpv_id;
15717
------------------------------------- Clone Dependencies ---------------------------------------------------
15718
   IF NOT nRtag_id IS NULL
15719
   THEN
15720
      -- Auto Update Dependencies --
15721
      INSERT INTO PACKAGE_DEPENDENCIES
15722
           SELECT nTOpv_id AS pv_id,
15723
                  DECODE(nUser_id,
15724
                         frc.modifier_id,
15725
                         frc.pv_id,
15726
                         DECODE(frc.dlocked,
15727
                                'Y',
15728
                                frc.pv_id,
15729
                                dep.dpv_id)
15730
                         ) AS dpv_id,
15731
                  nTOpkg_id AS pkg_id,
15732
                  dep.dpkg_id,
15733
                  dep.build_type,
15734
                  dep.display_order
15735
             FROM PACKAGE_DEPENDENCIES dep,
15736
                  PACKAGE_VERSIONS pv,
15737
                  (
15738
                  /* Full Release Contents used for reference*/
15739
                  SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlocked
15740
                  FROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpv
15741
                  WHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id
15742
                  ) frc
15743
            WHERE dep.pv_id = nFROMpv_id
15744
              AND dep.dpv_id = pv.pv_id
15745
              AND pv.pkg_id = frc.pkg_id(+)
15746
              AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);
15747
   ELSE
15748
      -- Clone Dependencies --
15749
      INSERT INTO PACKAGE_DEPENDENCIES
15750
           SELECT nTOpv_id         AS pv_id,
15751
                  dep.dpv_id,
15752
                  nTOpkg_id        AS pkg_id,
15753
                  dep.dpkg_id,
15754
                  dep.build_type,
15755
                  dep.display_order
15756
             FROM PACKAGE_DEPENDENCIES dep
15757
            WHERE dep.pv_id = nFROMpv_id;
15758
 
15759
   END IF;
15760
 
15761
----------------------------------------- Clone Issues -------------------------------------------------------
15762
   IF enumISSUES_STATE_IMPORTED IS NULL
15763
   THEN
15764
        /* All Issues */
15765
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15766
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15767
              FROM CQ_ISSUES
15768
             WHERE pv_id = nFROMpv_id;
15769
   ELSE
15770
       /* Outstanding Issues Only */
15771
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15772
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15773
              FROM CQ_ISSUES
15774
             WHERE pv_id = nFROMpv_id
15775
               AND iss_state = enumISSUES_STATE_IMPORTED;
15776
   END IF;
15777
 
15778
------------------------------------ Clone Runtime Dependencies -----------------------------------------------
15779
   INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)
15780
       SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user
15781
       FROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;
15782
 
15783
--------------------------------------- Clone Additional Notes ------------------------------------------------
15784
   INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )
15785
        SELECT an.NOTE_ID,
15786
               nTOpv_id AS PV_ID,
15787
               an.NOTE_TITLE,
15788
               an.NOTE_BODY,
15789
               an.MOD_DATE,
15790
               an.MOD_USER
15791
          FROM ADDITIONAL_NOTES an
15792
         WHERE an.PV_ID = nFROMpv_id;
15793
 
15794
-------------------------------------------- Clone Unit Tests -------------------------------------------------
15795
   -- Clone only Automatic unit tests --
15796
   INSERT INTO UNIT_TESTS (
15797
                           TEST_ID,
15798
                           PV_ID,
15799
                           TEST_TYPES_FK,
15800
                           TEST_SUMMARY,
15801
                           COMPLETION_DATE,
15802
                           COMPLETED_BY,
15803
                           RESULTS_URL,
15804
                           RESULTS_ATTACHMENT_NAME,
15805
                           NUMOF_TEST
15806
                          )
15807
        SELECT ut.TEST_ID,
15808
               nTOpv_id AS PV_ID,
15809
               ut.TEST_TYPES_FK,
15810
               ut.TEST_SUMMARY,
15811
               Ora_Sysdate AS COMPLETION_DATE,
15812
               nUser_id AS COMPLETED_BY,
15813
               ut.RESULTS_URL,
15814
               ut.RESULTS_ATTACHMENT_NAME,
15815
               ut.NUMOF_TEST
15816
          FROM UNIT_TESTS ut
15817
         WHERE ut.PV_ID = nFROMpv_id
15818
           AND ut.TEST_TYPES_FK IN ( 5, 7 );
15819
 
15820
    -- Clone only Interactive Unit Tests --
15821
    INSERT INTO UNIT_TESTS (
15822
                            TEST_ID,
15823
                            PV_ID,
15824
                            TEST_TYPES_FK,
15825
                            TEST_SUMMARY
15826
                           )
15827
       SELECT ut.TEST_ID,
15828
              nTOpv_id AS PV_ID,
15829
              ut.TEST_TYPES_FK,
15830
              ut.TEST_SUMMARY
15831
         FROM UNIT_TESTS ut
15832
        WHERE ut.PV_ID = nFROMpv_id
15833
          AND ut.TEST_TYPES_FK IN (6);
15834
 
15835
-------------------------------------------- Clone Package Documents ------------------------------------------
15836
   INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )
15837
        SELECT nTOpv_id AS PV_ID,
15838
               pd.test_id,
15839
               pd.doc_num,
15840
               pd.doc_id,
15841
               pd.IS_LATEST
15842
          FROM PACKAGE_DOCUMENTS pd
15843
         WHERE pd.PV_ID = nFROMpv_id;
15844
 
15845
-------------------------------------------- Clone Build Environments -----------------------------------------
15846
    INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )
15847
    SELECT nTOpv_id AS PV_ID,
15848
           pkgbe.BE_ID,
15849
           pkgbe.BUILD_TYPE
15850
      FROM PACKAGE_BUILD_ENV pkgbe
15851
     WHERE pkgbe.PV_ID = nFROMpv_id;
15852
---------------------------------------------Clone Package Build Info------------------------------------------
15853
    INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)
15854
    SELECT nTOpv_id AS PV_ID,
15855
           pkgbinfo.BM_ID,
15856
           pkgbinfo.BSA_ID
15857
      FROM PACKAGE_BUILD_INFO pkgbinfo
15858
     WHERE pkgbinfo.PV_ID = nFROMpv_id;
15859
---------------------------------------------Clone Package Version Processes-----------------------------------
15860
    INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )
15861
    SELECT nTOpv_id AS PV_ID,
15862
           pp.PROC_ID
15863
      FROM PACKAGE_PROCESSES pp
15864
     WHERE pp.PV_ID = nFROMpv_id;
15865
---------------------------------------------Clone Licencing Associations-----------------------------------
15866
    PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);
15867
---------------------------------------------------------------------------------------------------------------
15868
 
15869
    /* LOG ACTION */
15870
    SELECT pv.PKG_VERSION INTO FromVersion
15871
      FROM PACKAGE_VERSIONS pv
15872
     WHERE pv.PV_ID = nFROMpv_id;
15873
 
15874
    Log_Action ( nTOpv_id, 'clone_from', nUser_id,
15875
                 'Details cloned from: '|| FromVersion );
15876
 
15877
---------------------------------------------------------------------------------------------------------------
15878
 
15879
END Basic_Clone;
1374 dpurdie 15880
/
15881
--------------------------------------------------------
15882
--  DDL for Procedure UPDATE_UNIT_TEST
15883
--------------------------------------------------------
1373 dpurdie 15884
 
15885
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,
15886
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
15887
											   nPv_id IN NUMBER,
15888
											   nUserId IN NUMBER,
15889
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
15890
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
15891
	                                           sCompletion_date IN VARCHAR2,
15892
											   sDpkg_path IN VARCHAR2,
15893
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
15894
											   sResults IN VARCHAR2,
15895
											   outFileName OUT VARCHAR2
15896
                                              ) IS
15897
/* ---------------------------------------------------------------------------
15898
    Version: 3.1.0
15899
   --------------------------------------------------------------------------- */
15900
 
15901
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
15902
 
15903
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
15904
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
15905
 
15906
 
15907
BEGIN
15908
 
15909
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
15910
       	ResultsURL := sResults;
15911
       ELSE
15912
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
15913
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
15914
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
15915
           END IF;
15916
       END IF;
15917
 
15918
	--- Update Unit Test ---
15919
    UPDATE UNIT_TESTS SET
15920
           TEST_SUMMARY = sTest_summary,
15921
		   NUMOF_TEST = sNumof_test,
15922
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
15923
		   COMPLETED_BY = nUserId,
15924
		   RESULTS_URL = ResultsURL,
15925
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
15926
     WHERE TEST_ID = nTest_id
15927
       AND PV_ID = nPv_id;
15928
 
15929
END Update_Unit_Test;
1374 dpurdie 15930
/
15931
--------------------------------------------------------
15932
--  DDL for Procedure SET_TO_AUTOBUILDABLE
15933
--------------------------------------------------------
1373 dpurdie 15934
 
15935
  CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (
15936
   nrtagid     IN   NUMBER,
15937
   spvidlist   IN   VARCHAR2
15938
)
15939
IS
15940
/******************************************************************************
15941
   NAME:       SET_TO_AUTOBUILDABLE
15942
   PURPOSE:
15943
 
15944
   REVISIONS:
15945
   Ver        Date        Author           Description
15946
   ---------  ----------  ---------------  ------------------------------------
15947
   1.0        15/12/2006   Rupesh Solanki       1. Created this procedure.
15948
 
15949
   NOTES:
15950
 
15951
   Automatically available Auto Replace Keywords:
15952
      Object Name:     SET_TO_AUTOBUILDABLE
15953
      Sysdate:         15/12/2006
15954
      Date and Time:   15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AM
15955
      Username:         (set in TOAD Options, Procedure Editor)
15956
      Table Name:       (set in the "New PL/SQL Object" dialog)
15957
 
15958
******************************************************************************/
15959
   npvidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
15960
   PvId NUMBER;
15961
BEGIN
15962
 
15963
   npvidcollector := in_list_number2 (spvidlist);
15964
 
15965
   UPDATE package_versions
15966
      SET is_autobuildable = 'N'
15967
    WHERE pv_id IN (SELECT pv_id
15968
                      FROM release_content
15969
                     WHERE rtag_id = nrtagid);
15970
 
15971
 
15972
 
15973
   	FOR i IN 1..npvidcollector.COUNT
15974
	LOOP
15975
		PvId := npvidcollector(i);
15976
 
15977
		UPDATE package_versions
15978
		set is_autobuildable = 'Y'
15979
		where pv_id = PvId;
15980
 
15981
	END LOOP;
15982
 
15983
 
15984
END set_to_autobuildable;
1374 dpurdie 15985
/
15986
--------------------------------------------------------
15987
--  DDL for Procedure LEVEL_N_CONFLICTS
15988
--------------------------------------------------------
1373 dpurdie 15989
 
15990
  CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (
15991
   nnrtag_id       IN       NUMBER,
15992
   nnsession_num   IN       NUMBER,
15993
   nnrowcnt        OUT      NUMBER,
15994
   nniteration     IN       NUMBER
15995
)
15996
IS
15997
/* ---------------------------------------------------------------------------
15998
    Version: 3.0.1
15999
   --------------------------------------------------------------------------- */
16000
   previteration   NUMBER := nniteration - 1;
16001
BEGIN
16002
   /* ---------  LEVEL 1 CONFILCTS -----------
16003
   || Following states are used:
16004
   || 0 -> NOT FOUND
16005
   || 1 -> MAJOR
16006
   || 2 -> MINOR MINOR
16007
   */
16008
   INSERT INTO temp_env_states
16009
      SELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,
16010
                      pv.pv_id, pv.pkg_id, pv.v_ext,
16011
                      DECODE (tes.tes_state, 2, 2, 1) AS MESSAGE
16012
                 FROM package_dependencies dep,
16013
                      package_versions dpv,
16014
                      package_versions pv,
16015
                      release_content rel,
16016
                      temp_env_states tes
16017
                WHERE rel.pv_id = dep.pv_id
16018
                  AND rel.rtag_id = nnrtag_id
16019
                  AND dep.pv_id = pv.pv_id
16020
                  AND dep.dpv_id = dpv.pv_id
16021
                  AND dpv.pkg_id = tes.pkg_id
16022
                  AND NVL (dpv.v_ext, '|LINK_A_NULL|') =
16023
                                              NVL (tes.v_ext, '|LINK_A_NULL|')
16024
                  AND tes.session_num = nnsession_num
16025
                  AND tes.level_num = previteration
16026
                  AND (dep.pv_id, dep.dpv_id) IN 
16027
                                                   /* Remove packages listed in IGNORE_WARNINGS table and
16028
                                                 || packages already stored in Temp Table.
16029
                                                 */
16030
                      (
16031
                         SELECT pd.pv_id, pd.dpv_id
16032
                           FROM package_dependencies pd, release_content rc
16033
                          WHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id
16034
                         --AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )
16035
                         MINUS
16036
                         SELECT igw.pv_id, igw.dpv_id
16037
                           FROM ignore_warnings igw
16038
                          WHERE igw.rtag_id = nnrtag_id);
16039
 
16040
   nnrowcnt := SQL%ROWCOUNT;
16041
END level_n_conflicts;
1374 dpurdie 16042
/
16043
--------------------------------------------------------
16044
--  DDL for Procedure REMOVE_COMPONENTS
16045
--------------------------------------------------------
1373 dpurdie 16046
 
16047
  CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS
16048
/* ---------------------------------------------------------------------------
16049
    Version: 3.0.0
16050
   --------------------------------------------------------------------------- */
16051
 
16052
 
16053
BEGIN
16054
 
16055
	 --- Delete From RELEASE_COMPONENTS
16056
	 DELETE FROM RELEASE_COMPONENTS
16057
	 WHERE PV_ID = nPvId;
16058
 
16059
END Remove_Components;
1374 dpurdie 16060
/
16061
--------------------------------------------------------
16062
--  DDL for Procedure ADD_COMPONENT
16063
--------------------------------------------------------
1373 dpurdie 16064
 
16065
  CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,
16066
	   	  		  						  	sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,
16067
											sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,
16068
											nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,
16069
											sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,
16070
											sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL
16071
                                           ) IS
16072
/* ---------------------------------------------------------------------------
16073
    Version: 3.0.0
16074
   --------------------------------------------------------------------------- */
16075
 
16076
 
16077
BEGIN
16078
 
16079
	 --- Insert into RELEASE_COMPONENTS
16080
	 INSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )
16081
	 VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc  );
16082
 
16083
 
16084
 
16085
 
16086
END Add_Component;
1374 dpurdie 16087
/
16088
--------------------------------------------------------
16089
--  DDL for Procedure ADD_PACKAGE_INTEREST
16090
--------------------------------------------------------
1373 dpurdie 16091
 
16092
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
16093
	   	  		  								  nPkgIdList IN VARCHAR2,
16094
												  nUserId IN NUMBER
16095
	   	  		  								  ) IS
16096
 
16097
/******************************************************************************
16098
   NAME:       ADD_PACKAGE_INTEREST
16099
   PURPOSE:    
16100
 
16101
   REVISIONS:
16102
   Ver        Date        Author           Description
16103
   ---------  ----------  ---------------  ------------------------------------
16104
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
16105
 
16106
   NOTES:
16107
 
16108
   Automatically available Auto Replace Keywords:
16109
      Object Name:     ADD_PACKAGE_INTEREST
16110
      Sysdate:         12/05/2006
16111
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
16112
      Username:         (set in TOAD Options, Procedure Editor)
16113
      Table Name:       (set in the "New PL/SQL Object" dialog)
16114
 
16115
******************************************************************************/
16116
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
16117
   nPkgId NUMBER;
16118
BEGIN
16119
 
16120
	 npkgidcollector := in_list_number2 (nPkgIdList);
16121
 
16122
	FOR i IN 1..npkgidcollector.COUNT
16123
	LOOP
16124
		nPkgId := npkgidcollector(i);
16125
 
16126
	 --- Insert into PACKAGE_INTEREST TABLE
16127
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
16128
	 VALUES(nProjId, nPkgId, nUserId);
16129
	END LOOP;	 
16130
 
16131
 
16132
END ADD_PACKAGE_INTEREST;
1374 dpurdie 16133
/
16134
--------------------------------------------------------
16135
--  DDL for Procedure UNLOCK_PACKAGE
16136
--------------------------------------------------------
1373 dpurdie 16137
 
16138
  CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16139
											 nUserId IN NUMBER ) IS
16140
/* ---------------------------------------------------------------------------
16141
    Author: Rupesh Solanki
16142
 
16143
	Version: 4.0
16144
   --------------------------------------------------------------------------- */
16145
   STATE CHAR;
16146
 
16147
BEGIN
16148
 
16149
	SELECT DLOCKED INTO STATE
16150
	FROM PACKAGE_VERSIONS
16151
	WHERE PV_ID = nPvId; 
16152
 
16153
	IF STATE = 'A' THEN --It was made official for autobuilds
16154
		-- Unlock Package
16155
		UPDATE PACKAGE_VERSIONS pv SET
16156
		pv.DLOCKED = 'P'
16157
		WHERE pv.PV_ID = nPvId;	
16158
	ELSE
16159
		-- Unlock Package
16160
		UPDATE PACKAGE_VERSIONS pv SET
16161
		pv.DLOCKED = 'N'
16162
		WHERE pv.PV_ID = nPvId;	
16163
 
16164
	END IF;	   
16165
 
16166
    /* LOG ACTION */
16167
   	Log_Action ( nPvId, 'unlock_package', nUserId );
16168
 
16169
END Unlock_Package;
1374 dpurdie 16170
/
16171
--------------------------------------------------------
16172
--  DDL for Procedure REMOVE_PROJECT_VIEW_OWNER
16173
--------------------------------------------------------
1373 dpurdie 16174
 
16175
  CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,
16176
	   	  		  						 			  nViewId IN NUMBER,
16177
										 			  sUserIdList IN VARCHAR2,
16178
										 			  nUserId IN NUMBER ) IS
16179
 
16180
GroupId NUMBER;													  
16181
 
16182
 
16183
 
16184
/******************************************************************************
16185
   NAME:       UPDATE_VIEW
16186
   PURPOSE:    
16187
 
16188
   REVISIONS:
16189
   Ver        Date        Author           		Description
16190
   ---------  ----------  ---------------  ------------------------------------
16191
   1.0        10/04/2006     Rupesh Solanki     1. Created this procedure.
16192
 
16193
   NOTES:
16194
 
16195
   Automatically available Auto Replace Keywords:
16196
      Object Name:     UPDATE_VIEW
16197
      Sysdate:         10/04/2006
16198
      Date and Time:   10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PM
16199
      Username:         (set in TOAD Options, Procedure Editor)
16200
      Table Name:       (set in the "New PL/SQL Object" dialog)
16201
 
16202
******************************************************************************/
16203
 
16204
BEGIN
16205
	 SELECT GROUP_EMAIL_ID into GroupId
16206
	 FROM AUTOBUILD_FAILURE
16207
	 WHERE PROJ_ID = nProjId
16208
	 AND VIEW_ID = nViewId;
16209
 
16210
	 DELETE FROM MEMBERS_GROUP
16211
	 WHERE GROUP_EMAIL_ID = GroupId
16212
	 AND USER_ID IN (
16213
	 SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
16214
	 );
16215
 
16216
 
16217
 
16218
END REMOVE_PROJECT_VIEW_OWNER;
1374 dpurdie 16219
/
16220
--------------------------------------------------------
16221
--  DDL for Procedure DEPLOY_TO_RELEASE
16222
--------------------------------------------------------
1373 dpurdie 16223
 
16224
  CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS
16225
 
16226
/******************************************************************************
16227
 
16228
 
16229
******************************************************************************/
16230
 
16231
	CURSOR curInfo IS
16232
    SELECT DISTINCT
16233
        qry.DPV_ID
16234
     FROM (
16235
             SELECT dep.*,
16236
                    LEVEL AS LEVEL_NUM
16237
               FROM PACKAGE_DEPENDENCIES dep
16238
             START WITH dep.PV_ID IN ( 
16239
 
16240
                        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
16241
 
16242
                        ) 
16243
 			CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID
16244
 		) qry,
16245
 		PACKAGES pkg,
16246
		PACKAGE_VERSIONS pv
16247
 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
16248
         and (pv.is_patch is null or pv.is_patch = 'N');
16249
    recInfo curInfo%ROWTYPE;
16250
 
16251
 
16252
BEGIN
16253
 
16254
	OPEN curInfo;
16255
    FETCH curInfo INTO recInfo;
16256
 
16257
	WHILE curInfo%FOUND
16258
	LOOP
16259
 
16260
	insert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
16261
    VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);
16262
 
16263
    FETCH curInfo INTO recInfo;
16264
 
16265
	END LOOP;
16266
 
16267
	CLOSE curInfo;
16268
 
16269
 
16270
 
16271
 
16272
END DEPLOY_TO_RELEASE; 
1374 dpurdie 16273
/
16274
--------------------------------------------------------
16275
--  DDL for Procedure TOUCH_RELEASE
16276
--------------------------------------------------------
1373 dpurdie 16277
 
16278
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
16279
/* ---------------------------------------------------------------------------
16280
    The purpose of this procedure is to flag in the database that the specified
16281
    release has changed to an extent that the procedure Rebuild_Environment
16282
    should be called at the next opportunity in order that the package state
16283
    icons are all re-evaluated.
16284
    The package state icons are controlled using the pkg_state column in the
16285
    release_content table, and Rebuild_Environment updates that column.
16286
    It will be through user action in the website that Rebuild_Environment will
16287
    be called, for example:
16288
      a) when setting/clearing ignore warnings checkboxes
16289
      b) when someone opens a page upon a rtag/pvid and rebuild_en flag is set
16290
      c) when someone opens the build order report form
16291
      d) when someone modifies dependencies of a package
16292
      + other scenarios (?)
16293
   --------------------------------------------------------------------------- */
16294
BEGIN
16295
   -- Touch Release for Rebuild
16296
   UPDATE RELEASE_TAGS rt SET
16297
          rt.REBUILD_ENV = 'Y',
16298
          rt.REBUILD_STAMP = 0
16299
    WHERE rt.RTAG_ID = nRtagId;
16300
 
16301
END Touch_Release;
1374 dpurdie 16302
/
16303
--------------------------------------------------------
16304
--  DDL for Procedure UNRIPPLE_PACKAGE
16305
--------------------------------------------------------
1373 dpurdie 16306
 
16307
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (
16308
        sPvIdList IN VARCHAR2,
16309
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
16310
        nUserId IN NUMBER
16311
    ) IS
16312
/* ---------------------------------------------------------------------------
16313
    Version: 4.1
16314
   --------------------------------------------------------------------------- */
16315
 
16316
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
16317
 
16318
BEGIN
16319
 
16320
    IF (sPvIdList IS NULL) THEN
16321
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
16322
    END IF;
16323
 
16324
    oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
16325
 
16326
    -- UnRipple Package
16327
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )
16328
    SELECT nRtagId, pv.PV_ID
16329
    FROM PACKAGE_VERSIONS pv
16330
    WHERE pv.PV_ID IN (
16331
        SELECT *
16332
        FROM TABLE (
16333
            CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )
16334
        )
16335
    );
16336
 
16337
    /* LOG ACTION */
16338
    Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );
16339
 
16340
END UnRipple_Package;
1374 dpurdie 16341
/
16342
--------------------------------------------------------
16343
--  DDL for Procedure DT_DROPUSEROBJECTBYID
16344
--------------------------------------------------------
1373 dpurdie 16345
 
16346
  CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;
1374 dpurdie 16347
/
16348
--------------------------------------------------------
16349
--  DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT
16350
--------------------------------------------------------
1373 dpurdie 16351
 
16352
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (
16353
        nPvId IN NUMBER,
16354
        nRtagId IN NUMBER,
16355
        nUserId IN NUMBER,
16356
        nrootCausePvId IN NUMBER,
16357
        srootCause IN VARCHAR2,
16358
        srootFile IN VARCHAR2
16359
    ) IS
16360
    ReleaseLocation VARCHAR2(4000);
16361
BEGIN
16362
 
16363
    -- UnRipple Package
16364
    delete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;
16365
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);
16366
 
16367
    /* LOG ACTION */
16368
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16369
              FROM PROJECTS proj,
16370
                   RELEASE_TAGS rt
16371
             WHERE rt.RTAG_ID = nRtagId
16372
               AND rt.PROJ_ID = proj.PROJ_ID;
16373
 
16374
    /* LOG ACTION */
16375
    Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );
16376
 
16377
END UnRipple_Package_Indirect;
1374 dpurdie 16378
/
16379
--------------------------------------------------------
16380
--  DDL for Procedure TO_INSERT_VTREE_ID
16381
--------------------------------------------------------
1373 dpurdie 16382
 
16383
  CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS
16384
 
16385
/******************************************************************************
16386
   NAME:       TO_INSERT_VTREE_ID
16387
   PURPOSE:    
16388
 
16389
   REVISIONS:
16390
   Ver        Date        Author           Description
16391
   ---------  ----------  ---------------  ------------------------------------
16392
   1.0        2/02/2007          1. Created this procedure.
16393
 
16394
   NOTES:
16395
 
16396
   Automatically available Auto Replace Keywords:
16397
      Object Name:     TO_INSERT_VTREE_ID
16398
      Sysdate:         2/02/2007
16399
      Date and Time:   2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AM
16400
      Username:         (set in TOAD Options, Procedure Editor)
16401
      Table Name:       (set in the "New PL/SQL Object" dialog)
16402
 
16403
******************************************************************************/
16404
VTreeId NUMBER;																			  																	   
16405
 
16406
 
16407
	CURSOR curInfo IS
16408
    SELECT RTAG_ID
16409
	FROM RELEASE_TAGS
16410
	WHERE VTREE_ID IS NULL;
16411
    recInfo curInfo%ROWTYPE;
16412
 
16413
 
16414
BEGIN
16415
 
16416
	OPEN curInfo;
16417
    FETCH curInfo INTO recInfo;
16418
 
16419
	WHILE curInfo%FOUND
16420
	LOOP
16421
		SELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;
16422
 
16423
		UPDATE RELEASE_TAGS
16424
		SET VTREE_ID = VTreeId
16425
		WHERE RTAG_ID = recInfo.RTAG_ID;
16426
 
16427
		FETCH curInfo INTO recInfo;
16428
	END LOOP;
16429
 
16430
	CLOSE curInfo;
16431
 
16432
END TO_INSERT_VTREE_ID;
1374 dpurdie 16433
/
16434
--------------------------------------------------------
16435
--  DDL for Procedure CHANGE_RELEASE_MODE
16436
--------------------------------------------------------
1373 dpurdie 16437
 
16438
  CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS
16439
/* ---------------------------------------------------------------------------
16440
    Version: 3.0.0
16441
   --------------------------------------------------------------------------- */
16442
 
16443
	cMode CHAR(1) := NULL;  
16444
	nProjId NUMBER; 
16445
 
16446
BEGIN
16447
 
16448
 
16449
	/*
16450
	Author: Rupesh Solanki
16451
	Modified: 24th October 2006
16452
	Reason: Added the archive mode state into Release Manager 
16453
	||	1 - Open Mode
16454
	||	2 - Restrictive Mode
16455
	||	3 - Closed Mode
16456
	||	4 - CCB Mode
16457
	||	5 - Archive Mode
16458
	*/	
16459
	-- Get project Id
16460
	SELECT rt.PROJ_ID INTO nProjId
16461
	  FROM RELEASE_TAGS rt
16462
	 WHERE rt.RTAG_ID = nRtagId; 
16463
 
16464
	IF nModeCode = 1 THEN
16465
		-- Open Mode
16466
		cMode := 'N';
16467
 
16468
		/* LOG ACTION */
16469
   		Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );
16470
 
16471
	ELSIF nModeCode = 2 THEN
16472
		-- Restrictive Mode
16473
		cMode := 'R';
16474
 
16475
		/* LOG ACTION */
16476
   		Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );
16477
 
16478
	ELSIF nModeCode = 3 THEN
16479
		-- Closed Mode
16480
		cMode := 'Y';
16481
 
16482
		/* LOG ACTION */
16483
   		Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId  );
16484
 
16485
	ELSIF nModeCode = 4 THEN
16486
		-- CCB Mode
16487
		cMode := 'C';
16488
 
16489
		/* LOG ACTION */
16490
   		Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId  );
16491
 
16492
	ELSIF nModeCode = 5 THEN
16493
		-- Archive Mode
16494
		cMode := 'A';
16495
 
16496
		/* LOG ACTION */
16497
   		Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId  );	
16498
 
16499
 
16500
	END IF;
16501
 
16502
 
16503
 
16504
	-- Now update table
16505
	IF NOT cMode IS NULL THEN
16506
		UPDATE RELEASE_TAGS rt SET
16507
		rt.OFFICIAL = cMode
16508
		WHERE rt.RTAG_ID = nRtagId;
16509
 
16510
	END IF;
16511
 
16512
 
16513
END CHANGE_RELEASE_MODE;
1374 dpurdie 16514
/
16515
--------------------------------------------------------
16516
--  DDL for Procedure UPDATE_UNIT_TEST_TEST
16517
--------------------------------------------------------
1373 dpurdie 16518
 
16519
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,
16520
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
16521
											   nPv_id IN NUMBER,
16522
											   nUserId IN NUMBER,
16523
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
16524
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
16525
	                                           sCompletion_date IN VARCHAR2,
16526
											   sDpkg_path IN VARCHAR2,
16527
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
16528
											   sResults IN VARCHAR2,
16529
											   outFileName OUT VARCHAR2
16530
                                              ) IS
16531
/* ---------------------------------------------------------------------------
16532
    Version: 3.1.0
16533
   --------------------------------------------------------------------------- */
16534
 
16535
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
16536
 
16537
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
16538
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
16539
 
16540
 
16541
BEGIN
16542
 
16543
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
16544
       	ResultsURL := sResults;
16545
       ELSE
16546
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16547
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
16548
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
16549
           END IF;
16550
       END IF;
16551
 
16552
       /*	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16553
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
16554
    		sResults_url:= 'doc' || '/' || 
16555
			;
16556
        END IF;*/
16557
	--- Update Unit Test ---
16558
    UPDATE UNIT_TESTS SET
16559
           TEST_SUMMARY = sTest_summary,
16560
		   NUMOF_TEST = sNumof_test,
16561
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
16562
		   COMPLETED_BY = nUserId,
16563
		   RESULTS_URL = ResultsURL,
16564
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
16565
     WHERE TEST_ID = nTest_id
16566
       AND PV_ID = nPv_id;
16567
 
16568
END Update_Unit_Test_Test;
1374 dpurdie 16569
/
16570
--------------------------------------------------------
16571
--  DDL for Procedure NEW_VERSION
16572
--------------------------------------------------------
1373 dpurdie 16573
 
16574
  CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,
16575
                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,
16576
                                          NNsetto_pv_id IN NUMBER DEFAULT NULL,
16577
                                          NNrtag_id IN NUMBER,
16578
                                          NNuser_id IN NUMBER,
16579
                                          enumISSUES_STATE_IMPORTED IN NUMBER,
16580
                                          retPv_id OUT NUMBER ) IS
16581
 
16582
 
16583
  TO BE REMOVED   !!!										  
16584
 
16585
 
16586
 
16587
 
16588
/* ---------------------------------------------------------------------------
16589
    Version: 3.3
16590
   --------------------------------------------------------------------------- */
16591
 
16592
    ReleaseLocation VARCHAR2(4000);
16593
    origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;
16594
    origDlocked PACKAGE_VERSIONS.dlocked%TYPE;
16595
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
16596
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
16597
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
16598
    nIssuesTypes NUMBER;
16599
 
16600
    CURSOR package_versions_cur IS
16601
        SELECT pv.pv_id, pv.is_patch
16602
          FROM PACKAGE_VERSIONS pv
16603
         WHERE pv.pkg_version = SSpkg_version
16604
           AND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );
16605
    package_versions_rec package_versions_cur%ROWTYPE;
16606
 
16607
    CURSOR clone_package_versions_cur IS
16608
        SELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;
16609
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
16610
 
16611
BEGIN
16612
	IF NNsetto_pv_id IS NULL
16613
    THEN
16614
		-- SetToPv_id is not supplied, hence proceed.
16615
 
16616
	    /* ---------------------------------------------------- */
16617
	    /* Find id package_version exists                       */
16618
	    /* ---------------------------------------------------- */
16619
 
16620
	    OPEN package_versions_cur;
16621
	    FETCH package_versions_cur INTO package_versions_rec;
16622
 
16623
	    IF package_versions_cur%NOTFOUND
16624
	    THEN
16625
	        SELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;
16626
	        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
16627
 
16628
	        OPEN clone_package_versions_cur;
16629
	        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
16630
	        origPkg_id := clone_package_versions_rec.pkg_id;
16631
	        origDlocked := clone_package_versions_rec.dlocked;
16632
	        CLOSE clone_package_versions_cur;
16633
 
16634
	        -- Clone Package Version Details --
16635
	        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,
16636
	                                       src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )
16637
	            SELECT retPv_id         AS pv_id,
16638
	                   origPkg_id       AS pkg_id,
16639
	                   SSpkg_version    AS pkg_version,
16640
	                   'N'              AS dlocked,
16641
	                   Ora_Sysdate      AS created_stamp,
16642
	                   NNuser_id        AS creator_id,
16643
	                   Ora_Sysdatetime  AS modified_stamp,
16644
	                   NNuser_id        AS modifier_id,
16645
	                   SSV_MM           AS V_MM,
16646
	                   SSV_NMM          AS V_NMM,
16647
	                   SSV_EXT          AS V_EXT,
16648
	                   pv.src_path,
16649
	                   pv.pv_description,
16650
                       pv.PV_OVERVIEW,
16651
                       NNorig_pv_id 	AS LAST_PV_ID,
16652
	                   pv.owner_id,
16653
					   pv.IS_DEPLOYABLE,
16654
					   pv.IS_BUILD_ENV_REQUIRED
16655
	              FROM PACKAGE_VERSIONS pv
16656
	             WHERE pv.pv_id = NNorig_pv_id;
16657
 
16658
 
16659
	        -- Set Issues Type for cloning ---
16660
	        IF origDlocked = 'Y'
16661
	        THEN
16662
            	nIssuesTypes := enumISSUES_STATE_IMPORTED;
16663
	        ELSE
16664
            	nIssuesTypes := NULL;
16665
	        END IF;
16666
 
16667
			Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );
16668
 
16669
 
16670
 
16671
	    ELSE
16672
	        retPv_id := package_versions_rec.pv_id;
16673
 
16674
	    END IF;
16675
 
16676
        CLOSE package_versions_cur;
16677
 
16678
	ELSE
16679
    	retPv_id := NNsetto_pv_id;
16680
    END IF;
16681
 
16682
 
16683
    /* ---------------------------------------------------- */
16684
    /* Insert into Release Contents (EXCLUDE PATCHES)       */
16685
    /* ---------------------------------------------------- */
16686
	IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THEN
16687
	    UPDATE RELEASE_CONTENT
16688
	       SET pv_id = retPv_id,
16689
	           insert_stamp = Ora_Sysdate,
16690
	           insertor_id = NNuser_id
16691
	     WHERE rtag_id = NNrtag_id
16692
	       AND pv_id = NNorig_pv_id;
16693
 
16694
        /* LOG ACTION */
16695
        SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16696
		  FROM PROJECTS proj,
16697
		  	   VTREES vt,
16698
		       RELEASE_TAGS rt
16699
		 WHERE rt.VTREE_ID = vt.VTREE_ID
16700
		   AND vt.PROJ_ID = proj.PROJ_ID
16701
		   AND rt.RTAG_ID = NNrtag_id;
16702
 
16703
        Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );
16704
   		Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );
16705
 
16706
	END IF;
16707
 
16708
 
16709
END New_Version;
1374 dpurdie 16710
/
16711
--------------------------------------------------------
16712
--  DDL for Procedure ADD_RUNTIME_DEPENDENCY
16713
--------------------------------------------------------
1373 dpurdie 16714
 
16715
  CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,
16716
                                                     SSrtd_name IN PACKAGES.pkg_name%TYPE,
16717
                                                     SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
16718
                                                     NNuser_id IN NUMBER
16719
                                                    ) IS
16720
/* ---------------------------------------------------------------------------
16721
    Version: 3.1
16722
   --------------------------------------------------------------------------- */
16723
 
16724
    retRTD_ID NUMBER;
16725
 
16726
	CURSOR rtd_cur IS
16727
        SELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;
16728
    rtd_rec rtd_cur%ROWTYPE;
16729
 
16730
BEGIN
16731
    --- Seed database with package_name and version if required ---
16732
    Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );
16733
 
16734
	OPEN rtd_cur;
16735
    FETCH rtd_cur INTO rtd_rec;
16736
 
16737
    IF rtd_cur%NOTFOUND
16738
    THEN
16739
		/* Make sure it does not exists already as runtime dependency */
16740
 
16741
		--- Add new Runtime Dependency ---
16742
	    INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )
16743
	    VALUES (  NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );
16744
 
16745
    	/* LOG ACTION */
16746
        Log_Action ( NNpv_id, 'runtime_add', NNuser_id,
16747
    			     'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );
16748
 
16749
	END IF;
16750
 
16751
 
16752
END Add_Runtime_Dependency;
1374 dpurdie 16753
/
16754
--------------------------------------------------------
16755
--  DDL for Procedure LEVEL_ONE_CONFLICTS
16756
--------------------------------------------------------
1373 dpurdie 16757
 
16758
  CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (
16759
   nnrtag_id       IN   NUMBER,
16760
   nnsession_num   IN   NUMBER
16761
)
16762
IS
16763
BEGIN
16764
   /* ---------  LEVEL 1 CONFILCTS -----------
16765
   || Following states are used:
16766
   || 0 -> NOT FOUND
16767
   || 1 -> MAJOR
16768
   || 2 -> MINOR MINOR
16769
   */
16770
   INSERT INTO temp_env_states
16771
      SELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,
16772
                      err.pv_id, errpkg.pkg_id, errpkg.v_ext,
16773
                      DECODE (frc.v_nmm,
16774
                              NULL, 0,
16775
                              errpv.v_nmm, DECODE (frc.v_mm,
16776
                                                   errpv.v_mm, NULL,
16777
                                                   2
16778
                                                  ),
16779
                              1
16780
                             ) AS MESSAGE
16781
                 FROM (
16782
                       /* Full Release Contents used for reference*/
16783
                        SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,
16784
                                NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,
16785
                                rpv.pkg_version, rpv.v_nmm, rpv.v_mm,
16786
                                (SELECT COUNT(*)
16787
                                   FROM ADVISORY_RIPPLE avr
16788
                                  WHERE avr.rtag_id = rel.rtag_id
16789
                                    AND avr.pv_id = rel.pv_id
16790
                                ) AS IsAvr
16791
                          FROM release_content rel,
16792
                                package_versions rpv
16793
                          WHERE rel.pv_id = rpv.pv_id
16794
                             AND rtag_id = nnrtag_id
16795
                      ) frc,
16796
 
16797
                      (
16798
                       /* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will not
16799
                          necessarily be satisfied in the release) */
16800
                       SELECT dep.pv_id, dep.dpv_id AS err_dpv
16801
                         FROM package_dependencies dep,
16802
                              package_versions dep_dpv
16803
                        WHERE dep.dpv_id = dep_dpv.pv_id
16804
                          AND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16805
                          AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)
16806
                          AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16807
                       MINUS
16808
                       /* MINUS Dependencies to be ignored */
16809
                       SELECT igw.pv_id, igw.dpv_id AS err_dpv
16810
                         FROM ignore_warnings igw,
16811
                              package_versions igw_dpv
16812
                        WHERE igw.dpv_id = igw_dpv.pv_id
16813
                          AND igw.rtag_id = nnrtag_id
16814
                      ) err,
16815
                      package_versions errpkg,
16816
                      package_versions errpv
16817
                WHERE err.err_dpv = errpv.pv_id
16818
                  AND errpv.pkg_id = frc.pkg_id(+)
16819
                  AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
16820
                  AND err.pv_id = errpkg.pv_id
16821
                  AND frc.IsAvr = 0;
16822
END level_one_conflicts;
1374 dpurdie 16823
/
16824
--------------------------------------------------------
16825
--  DDL for Procedure OLE
16826
--------------------------------------------------------
1373 dpurdie 16827
 
16828
  CREATE OR REPLACE PROCEDURE "OLE" 
16829
IS retval VARCHAR2(40);   
16830
BEGIN   retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 ) 
16831
DBMS_OUTPUT.PUT_LINE(retval);
1374 dpurdie 16832
/
16833
--------------------------------------------------------
16834
--  DDL for Procedure SYNC_PROJECTS_NEW_VERSION
16835
--------------------------------------------------------
1373 dpurdie 16836
 
16837
  CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id 				IN NUMBER,
16838
														  sSyncRtagsInList		IN VARCHAR2,
16839
				                                          nUser_id 				IN NUMBER ) IS
16840
/* ---------------------------------------------------------------------------
16841
    Version: 3.0.0
16842
   --------------------------------------------------------------------------- */
16843
 
16844
	CURSOR sync_rtags_cur IS
16845
        SELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_id
16846
		  FROM release_content rc,
16847
		  	   package_versions pv,
16848
		       package_versions opv
16849
		 WHERE rc.pv_id = pv.pv_id
16850
		   AND opv.pkg_id = pv.pkg_id
16851
		   AND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')
16852
		   AND opv.pv_id = nPv_id
16853
		   AND rtag_id IN ( SELECT *
16854
		   	   		   	      FROM THE (
16855
					   	   		   	    SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )
16856
					       		   	    FROM dual
16857
									   )
16858
						  );
16859
    sync_rtags_rec sync_rtags_cur%ROWTYPE;
16860
 
16861
BEGIN
16862
 
16863
	OPEN sync_rtags_cur;
16864
	FETCH sync_rtags_cur INTO sync_rtags_rec;
16865
 
16866
	WHILE sync_rtags_cur%FOUND
16867
	LOOP
16868
		DELETE FROM RELEASE_CONTENT
16869
		 WHERE rtag_id = sync_rtags_rec.rtag_id
16870
	       AND pv_id = sync_rtags_rec.pv_id;
16871
 
16872
		INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
16873
	   		   VALUES ( sync_rtags_rec.rtag_id,
16874
		       		  	nPv_id,
16875
						sync_rtags_rec.BASE_VIEW_ID,
16876
	           			Ora_Sysdate,
16877
	           			nUser_id,
16878
 
16879
	      	   		   );
16880
 
16881
-- 		UPDATE RELEASE_CONTENT
16882
-- 	       SET pv_id = nPv_id,
16883
-- 	           insert_stamp = Ora_Sysdate,
16884
-- 	           insertor_id = nUser_id
16885
-- 	     WHERE rtag_id = sync_rtags_rec.rtag_id
16886
-- 	       AND pv_id = sync_rtags_rec.pv_id;
16887
 
16888
		FETCH sync_rtags_cur INTO sync_rtags_rec;
16889
	END LOOP;
16890
 
16891
	CLOSE sync_rtags_cur;
16892
 
16893
END Sync_Projects_New_Version;
1374 dpurdie 16894
/
16895
--------------------------------------------------------
16896
--  DDL for Procedure LOCK_PACKAGE
16897
--------------------------------------------------------
1373 dpurdie 16898
 
16899
  CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16900
											 nUserId IN NUMBER ) IS
16901
/* ---------------------------------------------------------------------------
16902
    Version: 4.0
16903
   --------------------------------------------------------------------------- */
16904
 
16905
BEGIN
16906
 
16907
    -- Lock Package
16908
    UPDATE PACKAGE_VERSIONS pv SET
16909
    	pv.DLOCKED = 'Y'
16910
    WHERE pv.PV_ID = nPvId;
16911
 
16912
    /* LOG ACTION */
16913
   	Log_Action ( nPvId, 'lock_package', nUserId );
16914
 
16915
END Lock_Package;
1374 dpurdie 16916
/
16917
--------------------------------------------------------
16918
--  DDL for Procedure UPDATE_PACKAGE_STATES
16919
--------------------------------------------------------
1373 dpurdie 16920
 
16921
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,
16922
                                                    NNsession_num IN NUMBER ) IS
16923
/* =============  STATE RULES =================== */
16924
/*
16925
   MNR   MRR   MN   MR    |   pkg_state
16926
   ------------------------------------
16927
 
16928
 
16929
 
16930
 
16931
   ------------------------------------
16932
 
16933
 
16934
 
16935
 
16936
   ------------------------------------
16937
    1     0     0     0   |      MINOR_READY
16938
    1     0     0     1   |      MAJOR
16939
    1     0     1     0   |      MINOR
16940
    1     0     1     1   |      MAJOR
16941
   ------------------------------------
16942
    1     1     0     0   |      MAJOR_READY
16943
    1     1     0     1   |      MAJOR
16944
    1     1     1     0   |      MAJOR
16945
    1     1     1     1   |      MAJOR
16946
   ------------------------------------
16947
*/
16948
BEGIN
16949
    /*----------------------------------------------
16950
    ||              MINOR READY
16951
    */----------------------------------------------
16952
 
16953
    UPDATE release_content
16954
       SET pkg_state = 4
16955
     WHERE rtag_id = NNrtag_id
16956
       AND pv_id IN
16957
           (
16958
           SELECT DISTINCT pv_id
16959
           FROM temp_env_states
16960
           WHERE session_num = NNsession_num
16961
             AND level_num = 1
16962
             AND tes_state = 2
16963
           );
16964
 
16965
    /*----------------------------------------------
16966
    ||              MAJOR READY
16967
    */----------------------------------------------
16968
    UPDATE release_content
16969
       SET pkg_state = 3
16970
     WHERE rtag_id = NNrtag_id
16971
       AND pv_id IN
16972
           (
16973
           SELECT DISTINCT pv_id
16974
           FROM temp_env_states
16975
           WHERE session_num = NNsession_num
16976
             AND level_num = 1
16977
             AND tes_state IN (0,1)
16978
           );
16979
 
16980
    /*----------------------------------------------
16981
    ||                MINOR
16982
    */----------------------------------------------
16983
    UPDATE release_content
16984
       SET pkg_state = 2
16985
     WHERE rtag_id = NNrtag_id
16986
       AND pv_id IN
16987
           (
16988
           SELECT DISTINCT pv_id
16989
            FROM temp_env_states
16990
            WHERE session_num = NNsession_num
16991
              AND level_num >= 2
16992
              AND tes_state = 2
16993
            MINUS
16994
           SELECT pv_id
16995
             FROM release_content
16996
            WHERE rtag_id = NNrtag_id
16997
              AND pkg_state = 3
16998
           );
16999
 
17000
    /*----------------------------------------------
17001
    ||                MAJOR
17002
    */----------------------------------------------
17003
    UPDATE release_content
17004
       SET pkg_state = 1
17005
     WHERE rtag_id = NNrtag_id
17006
       AND pv_id IN
17007
           (
17008
           SELECT DISTINCT pv_id
17009
           FROM temp_env_states
17010
           WHERE session_num = NNsession_num
17011
             AND level_num >= 2
17012
             AND tes_state IN (0,1)
17013
           /* MAJOR EXCEPTION - When package has Major Ready and Minor */
17014
           UNION
17015
           SELECT DISTINCT tes.pv_id
17016
           FROM temp_env_states tes,
17017
                release_content rc
17018
           WHERE tes.session_num = NNsession_num
17019
             AND tes.level_num >= 2
17020
             AND tes.tes_state = 2
17021
             AND rtag_id = NNrtag_id
17022
             AND rc.pv_id = tes.pv_id
17023
             AND rc.pkg_state = 3
17024
           );
17025
 
17026
    /*----------------------------------------------
17027
    ||                 OK
17028
    */----------------------------------------------
17029
    UPDATE release_content
17030
       SET pkg_state = 0
17031
     WHERE rtag_id = NNrtag_id
17032
       AND pv_id IN
17033
           (
17034
           SELECT rc.pv_id
17035
             FROM release_content rc
17036
            WHERE rc.rtag_id = NNrtag_id
17037
              AND NOT rc.pv_id IN
17038
                    (
17039
                     SELECT DISTINCT pv_id
17040
                     FROM temp_env_states WHERE session_num = NNsession_num
17041
                    )
17042
           );
17043
 
17044
      Update_Deprecation_State (NNrtag_id);
17045
 
17046
    /*----------------------------------------------
17047
    ||              PEGGED VERSIONS DEPENDENT
17048
    */----------------------------------------------
17049
    UPDATE release_content
17050
       SET pkg_state = 10
17051
     WHERE rtag_id = NNrtag_id
17052
       AND pv_id IN
17053
           (
17054
           SELECT DISTINCT pv_id
17055
           FROM pegged_versions pegv
17056
           WHERE pegv.rtag_id = NNrtag_id
17057
           );
17058
 
17059
    /*----------------------------------------------
17060
    ||              ADVISORY RIPPLE
17061
    */----------------------------------------------
17062
    UPDATE release_content
17063
       SET pkg_state = 8
17064
     WHERE rtag_id = NNrtag_id
17065
       AND pv_id IN
17066
           (
17067
           SELECT DISTINCT pv_id
17068
           FROM advisory_ripple ar
17069
           WHERE ar.rtag_id = NNrtag_id
17070
           )
17071
       AND pv_id IN
17072
           (
17073
           SELECT DISTINCT pv_id
17074
           FROM release_content rc
17075
           WHERE rc.rtag_id = NNrtag_id
17076
           );
17077
 
17078
END Update_Package_States;
1374 dpurdie 17079
/
17080
--------------------------------------------------------
17081
--  DDL for Procedure REMOVE_DOCUMENT
17082
--------------------------------------------------------
1373 dpurdie 17083
 
17084
  CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
17085
											  nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,
17086
                                              nUserId IN NUMBER ) IS
17087
/* ---------------------------------------------------------------------------
17088
    Version: 3.0
17089
   --------------------------------------------------------------------------- */
17090
 
17091
   DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;
17092
 
17093
BEGIN
17094
 
17095
	-- Get Doc Num
17096
    SELECT pd.DOC_NUM INTO DocNumber
17097
      FROM PACKAGE_DOCUMENTS pd
17098
     WHERE pd.PV_ID = nPvId
17099
       AND pd.DOC_ID = nDocId;
17100
 
17101
 
17102
	-- Delete Document
17103
    DELETE
17104
      FROM PACKAGE_DOCUMENTS pd
17105
     WHERE pd.PV_ID = nPvId
17106
       AND pd.DOC_ID = nDocId;
17107
 
17108
 
17109
    /* LOG ACTION */
17110
   	Log_Action ( nPvId, 'document_remove', nUserId,
17111
   			     'Document number: '|| DocNumber );
17112
 
17113
 
17114
END Remove_Document;
1374 dpurdie 17115
/
17116
--------------------------------------------------------
17117
--  DDL for Procedure SPLIT_VERSION
17118
--------------------------------------------------------
1373 dpurdie 17119
 
17120
  CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17121
                                            SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,
17122
                                            SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,
17123
                                            SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE  ) IS
17124
/* ---------------------------------------------------------------------------
17125
    Version: 3.0.0
17126
   --------------------------------------------------------------------------- */
17127
 
17128
    TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)
17129
        INDEX BY BINARY_INTEGER;
17130
 
17131
    version_components VERSION_COMPONENTS_TYPE;
17132
    lastDot NUMBER := 0;
17133
    currDot NUMBER := 0;
17134
 
17135
BEGIN
17136
    currDot := INSTR ( SSpkg_version, '.', -1 );      -- Find 1st dot from the right
17137
 
17138
    IF ( currDot > 0 )
17139
    THEN
17140
        -- YES dot separator found --
17141
        SSV_EXT := GET_V_EXT( SSpkg_version );
17142
 
17143
        IF NOT SSV_EXT IS NULL
17144
        THEN
17145
            lastDot := currDot;
17146
            currDot := INSTR ( SSpkg_version, '.', -1, 2 );   -- Find 2nd dot from the right
17147
 
17148
            IF ( currDot > 0 )
17149
            THEN
17150
                -- XXXX.M.E
17151
                SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);
17152
                SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;
17153
            ELSE
17154
                -- XXXX.E
17155
                SSV_MM := NULL;
17156
                SSV_NMM := SSpkg_version;
17157
            END IF;
17158
 
17159
        ELSE
17160
            -- XXXX.M
17161
            SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );
17162
            SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );
17163
 
17164
        END IF;
17165
 
17166
    ELSE
17167
        -- NO dot separator found --
17168
        -- XXXXXX
17169
        SSV_MM  := NULL;
17170
        SSV_NMM := SSpkg_version;
17171
        SSV_EXT := NULL;
17172
 
17173
    END IF;
17174
 
17175
END Split_Version;
1374 dpurdie 17176
/
17177
--------------------------------------------------------
17178
--  DDL for Procedure ADD_PACKAGE_INTEREST_TEST
17179
--------------------------------------------------------
1373 dpurdie 17180
 
17181
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
17182
	   	  		  								  nPkgIdList IN VARCHAR2,
17183
												  nUserId IN NUMBER
17184
	   	  		  								  ) IS
17185
 
17186
/******************************************************************************
17187
   NAME:       ADD_PACKAGE_INTEREST
17188
   PURPOSE:    
17189
 
17190
   REVISIONS:
17191
   Ver        Date        Author           Description
17192
   ---------  ----------  ---------------  ------------------------------------
17193
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
17194
 
17195
   NOTES:
17196
 
17197
   Automatically available Auto Replace Keywords:
17198
      Object Name:     ADD_PACKAGE_INTEREST
17199
      Sysdate:         12/05/2006
17200
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
17201
      Username:         (set in TOAD Options, Procedure Editor)
17202
      Table Name:       (set in the "New PL/SQL Object" dialog)
17203
 
17204
******************************************************************************/
17205
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
17206
   nPkgId NUMBER;
17207
BEGIN
17208
 
17209
	 npkgidcollector := in_list_number2 (nPkgIdList);
17210
 
17211
	FOR i IN 1..npkgidcollector.COUNT
17212
	LOOP
17213
		nPkgId := npkgidcollector(i);
17214
 
17215
	 --- Insert into PACKAGE_INTEREST TABLE
17216
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
17217
	 VALUES(nProjId, nPkgId, nUserId);
17218
	END LOOP;	 
17219
 
17220
 
17221
END ADD_PACKAGE_INTEREST_TEST;
1374 dpurdie 17222
/
17223
--------------------------------------------------------
17224
--  DDL for Procedure CLONED_PROCESSES
17225
--------------------------------------------------------
1373 dpurdie 17226
 
17227
  CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES" 
17228
IS
17229
 
17230
proc_id NUMBER;
17231
/******************************************************************************
17232
   NAME:       DELETE_DO_NOT_RIPPLE
17233
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
17234
               IS RELEASED
17235
 
17236
   REVISIONS:
17237
   Ver        Date        Author           Description
17238
   ---------  ----------  ---------------  ------------------------------------
17239
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
17240
 
17241
   NOTES:
17242
 
17243
   Automatically available Auto Replace Keywords:
17244
      Object Name:     DELETE_DO_NOT_RIPPLE
17245
      Sysdate:         21/04/2006
17246
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
17247
      Username:         (set in TOAD Options, Procedure Editor)
17248
      Table Name:       (set in the "New PL/SQL Object" dialog)
17249
 
17250
******************************************************************************/
17251
   CURSOR ripple_cur
17252
   IS
17253
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
17254
 
17255
   ripple_rec   ripple_cur%ROWTYPE;
17256
BEGIN
17257
   OPEN ripple_cur;
17258
 
17259
   FETCH ripple_cur
17260
    INTO ripple_rec;
17261
 
17262
   WHILE ripple_cur%FOUND
17263
   LOOP
17264
 
17265
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
17266
 
17267
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
17268
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
17269
 
17270
      FETCH ripple_cur
17271
       INTO ripple_rec;
17272
   END LOOP;
17273
END CLONED_PROCESSES;
1374 dpurdie 17274
/
17275
--------------------------------------------------------
17276
--  DDL for Procedure ADD_VIEW_MEMBERS
17277
--------------------------------------------------------
1373 dpurdie 17278
 
17279
  CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS
17280
 
17281
/******************************************************************************
17282
   NAME:       ADD_VIEW_MEMBERS
17283
   PURPOSE:    
17284
 
17285
   REVISIONS:
17286
   Ver        Date        Author           Description
17287
   ---------  ----------  ---------------  ------------------------------------
17288
   1.0        11/04/2006          1. Created this procedure.
17289
 
17290
   NOTES:
17291
 
17292
   Automatically available Auto Replace Keywords:
17293
      Object Name:     ADD_VIEW_MEMBERS
17294
      Sysdate:         11/04/2006
17295
      Date and Time:   11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AM
17296
      Username:         (set in TOAD Options, Procedure Editor)
17297
      Table Name:       (set in the "New PL/SQL Object" dialog)
17298
 
17299
******************************************************************************/
17300
CURSOR user_cur IS
17301
	SELECT u.USER_ID
17302
	  FROM USERS u
17303
	 WHERE u.USER_ID IN (
17304
	 	   			   	SELECT * 
17305
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
17306
						);
17307
user_rec user_cur%ROWTYPE;
17308
 
17309
 
17310
BEGIN
17311
 
17312
	 OPEN user_cur;
17313
	 FETCH user_cur INTO user_rec;
17314
 
17315
	 WHILE user_cur%FOUND
17316
	 LOOP
17317
	 	 INSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)
17318
	 	 VALUES ( nGroupId, user_rec.USER_ID);
17319
 
17320
	 	 FETCH user_cur INTO user_rec;	 
17321
	 END LOOP;	 
17322
 
17323
 
17324
 
17325
END ADD_VIEW_MEMBERS;
1374 dpurdie 17326
/
17327
--------------------------------------------------------
17328
--  DDL for Procedure RESET_IGNORE_WARNINGS
17329
--------------------------------------------------------
1373 dpurdie 17330
 
17331
  CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,
17332
                                                    nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
17333
/* ---------------------------------------------------------------------------
17334
    Version: 5.0
17335
   --------------------------------------------------------------------------- */
17336
 
17337
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17338
 
17339
BEGIN
17340
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
17341
 
17342
    -- Remove Ignore Warnings
17343
     DELETE
17344
       FROM ignore_warnings
17345
	  WHERE (rtag_id, pv_id, dpv_id) IN
17346
	     (
17347
	      SELECT igw.rtag_id, igw.pv_id, igw.dpv_id
17348
	        FROM ignore_warnings igw,
17349
	             package_versions dpv,
17350
	             package_versions pv
17351
	       WHERE igw.dpv_id = dpv.pv_id
17352
	         AND igw.rtag_id = nRTagId
17353
	         AND dpv.pkg_id = pv.pkg_id
17354
	         AND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')
17355
	         AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
17356
         );
17357
 
17358
END Reset_Ignore_Warnings;
1374 dpurdie 17359
/
17360
--------------------------------------------------------
17361
--  DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO
17362
--------------------------------------------------------
1373 dpurdie 17363
 
17364
  CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS
17365
 
17366
/******************************************************************************
17367
   NAME:       INSERT_INTO_PACKAGE_BUILD_INFO
17368
   PURPOSE:    
17369
 
17370
   REVISIONS:
17371
   Ver        Date        Author           Description
17372
   ---------  ----------  ---------------  ------------------------------------
17373
   1.0        6/12/2006          1. Created this procedure.
17374
 
17375
   NOTES:
17376
 
17377
   Automatically available Auto Replace Keywords:
17378
      Object Name:     INSERT_INTO_PACKAGE_BUILD_INFO
17379
      Sysdate:         6/12/2006
17380
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
17381
      Username:         (set in TOAD Options, Procedure Editor)
17382
      Table Name:       (set in the "New PL/SQL Object" dialog)
17383
 
17384
******************************************************************************/
17385
 
17386
	CURSOR curInfo IS
17387
    SELECT PV_ID
17388
	FROM PACKAGE_BUILD_ENV
17389
	WHERE BE_ID IN (11, 12);
17390
    recInfo curInfo%ROWTYPE;
17391
 
17392
 
17393
BEGIN
17394
 
17395
	OPEN curInfo;
17396
    FETCH curInfo INTO recInfo;
17397
 
17398
	WHILE curInfo%FOUND
17399
	LOOP
17400
 
17401
		INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )
17402
		VALUES( recInfo.PV_ID, 2, 5);
17403
 
17404
		UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;
17405
 
17406
		FETCH curInfo INTO recInfo;
17407
 
17408
	END LOOP;
17409
 
17410
	CLOSE curInfo;
17411
 
17412
 
17413
 
17414
 
17415
END INSERT_INTO_PACKAGE_BUILD_INFO;
1374 dpurdie 17416
/
17417
--------------------------------------------------------
17418
--  DDL for Procedure UPDATE_ADDITIONAL_NOTE
17419
--------------------------------------------------------
1373 dpurdie 17420
 
17421
  CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,
17422
													 pnPv_id IN NUMBER,
17423
                                                     psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
17424
                                                     psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
17425
                                                     pnUser_id IN NUMBER,
17426
                                                     outErrCode OUT NUMBER
17427
                                                    ) IS
17428
/* ---------------------------------------------------------------------------
17429
    Version: 3.0.1
17430
   --------------------------------------------------------------------------- */
17431
 
17432
    newID NUMBER;
17433
 
17434
    /* Disallow duplicate Note Titles */
17435
	CURSOR an_duplicate_cur IS
17436
        SELECT COUNT(*) AS cnt_note
17437
          FROM ADDITIONAL_NOTES
17438
         WHERE pv_id = pnPv_id
17439
           AND note_id != pnNote_id
17440
           AND note_title = psNote_title;
17441
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
17442
 
17443
BEGIN
17444
	outErrCode := -1;		-- Set default return error code to ERROR state
17445
 
17446
	OPEN an_duplicate_cur;
17447
    FETCH an_duplicate_cur INTO an_duplicate_rec;
17448
 
17449
    IF an_duplicate_rec.cnt_note < 1
17450
    THEN
17451
		--- Update Additional Note ---
17452
	    UPDATE ADDITIONAL_NOTES SET
17453
		       note_title = psNote_title,
17454
		       note_body = psNote_body,
17455
		       mod_date = Ora_Sysdate,
17456
		       mod_user = pnUser_id
17457
         WHERE note_id = pnNote_id
17458
           AND pv_id = pnPv_id;
17459
		outErrCode := 0;		-- Set return to SUCCESS
17460
	END IF;
17461
 
17462
	CLOSE an_duplicate_cur;
17463
END Update_Additional_Note;
1374 dpurdie 17464
/
17465
--------------------------------------------------------
17466
--  DDL for Procedure NEW_UNIT_TEST
17467
--------------------------------------------------------
1373 dpurdie 17468
 
17469
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
17470
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
17471
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
17472
                                            sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,
17473
                                            sDpkg_path IN VARCHAR2,
17474
                                            sResults IN VARCHAR2,
17475
                                            sCompletion_date IN VARCHAR2,
17476
                                            nCompleted_by IN NUMBER,
17477
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
17478
											enumTEST_TYPE_NOT_DONE IN NUMBER,
17479
											outFileName OUT VARCHAR2
17480
                                           ) IS
17481
/* ---------------------------------------------------------------------------
17482
    Version: 3.2.0
17483
   --------------------------------------------------------------------------- */
17484
 
17485
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
17486
 
17487
    newID NUMBER;
17488
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
17489
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
17490
 
17491
BEGIN
17492
 
17493
	-- Get new ID --
17494
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
17495
 
17496
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
17497
       	ResultsURL := sResults;
17498
       ELSE
17499
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
17500
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
17501
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
17502
           END IF;
17503
       END IF;
17504
 
17505
	-- Remove NOT_DONE entry if exists
17506
	DELETE FROM UNIT_TESTS
17507
	 WHERE pv_id = nPv_id
17508
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
17509
 
17510
	--- Add Additional Note ---
17511
    INSERT INTO UNIT_TESTS ( TEST_ID,
17512
								PV_ID,
17513
								TEST_TYPES_FK,
17514
								TEST_SUMMARY,
17515
								COMPLETION_DATE,
17516
								COMPLETED_BY,
17517
								RESULTS_URL,
17518
								RESULTS_ATTACHMENT_NAME,
17519
								NUMOF_TEST )
17520
    VALUES (
17521
       	newID,
17522
           nPv_id,
17523
           nTestTypeId,
17524
           sTest_summary,
17525
           TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
17526
           nCompleted_by,
17527
           ResultsURL,
17528
           ResultsAttachment,
17529
		   sNumOfTest );
17530
 
17531
END New_Unit_Test;
1374 dpurdie 17532
/
17533
--------------------------------------------------------
17534
--  DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE
17535
--------------------------------------------------------
1373 dpurdie 17536
 
17537
  CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)IS
17538
Auto CHAR;
17539
/******************************************************************************
17540
   NAME:       SWITCH_REPRODUCIBLE_PACKAGE
17541
   PURPOSE:    
17542
 
17543
   REVISIONS:
17544
   Ver        Date        Author           Description
17545
   ---------  ----------  ---------------  ------------------------------------
17546
   1.0        14/12/2006   Rupesh Solanki       1. Created this procedure.
17547
 
17548
   NOTES:
17549
 
17550
   Automatically available Auto Replace Keywords:
17551
      Object Name:     SWITCH_REPRODUCIBLE_PACKAGE
17552
      Sysdate:         14/12/2006
17553
      Date and Time:   14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AM
17554
      Username:         (set in TOAD Options, Procedure Editor)
17555
      Table Name:       (set in the "New PL/SQL Object" dialog)
17556
 
17557
******************************************************************************/
17558
BEGIN
17559
 
17560
	 SELECT IS_AUTOBUILDABLE into Auto
17561
	 FROM PACKAGE_VERSIONS 
17562
	 WHERE PV_ID = nPvId;
17563
 
17564
	 IF Auto = 'N' Then
17565
 
17566
	 	UPDATE PACKAGE_VERSIONS
17567
	 	SET IS_AUTOBUILDABLE = 'Y'
17568
	 	WHERE PV_ID = nPvId;
17569
 
17570
 
17571
	 	/* LOG ACTION */
17572
   		Log_Action ( nPvId, 'reproducible_package', nUserId );	 
17573
 
17574
	 Else
17575
 
17576
		 UPDATE PACKAGE_VERSIONS
17577
		 SET IS_AUTOBUILDABLE = 'N'
17578
		 WHERE PV_ID = nPvId;
17579
 
17580
 
17581
	 	 /* LOG ACTION */
17582
   	 	 Log_Action ( nPvId, 'unreproducible_package', nUserId );	 
17583
 
17584
	 End If;
17585
 
17586
 
17587
 
17588
 
17589
 
17590
 
17591
 
17592
 
17593
END SWITCH_REPRODUCIBLE_PACKAGE;
1374 dpurdie 17594
/
17595
--------------------------------------------------------
17596
--  DDL for Procedure LOG_DAEMON_ACTION
17597
--------------------------------------------------------
1373 dpurdie 17598
 
17599
  CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,
17600
												 enumActionTypeName IN VARCHAR2,
17601
		                                         nUserId IN NUMBER,
17602
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL  ) IS
17603
/* ---------------------------------------------------------------------------
17604
    Version: 3.0
17605
   --------------------------------------------------------------------------- */
17606
 
17607
    ActionTypeId NUMBER;
17608
 
17609
BEGIN
17610
 
17611
    -- Get Action Type FK
17612
    SELECT act.ACTTYPE_ID INTO ActionTypeId
17613
      FROM ACTION_TYPE act
17614
     WHERE act.NAME = enumActionTypeName;
17615
 
17616
 
17617
    INSERT INTO DAEMON_ACTION_LOG
17618
    VALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );
17619
 
17620
 
17621
END Log_Daemon_Action;
1374 dpurdie 17622
/
17623
--------------------------------------------------------
17624
--  DDL for Procedure UPDATE_MISC_VIEW
17625
--------------------------------------------------------
1373 dpurdie 17626
 
17627
  CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS
17628
/******************************************************************************
17629
   NAME:       UPDATE_MISC_VIEW
17630
   PURPOSE:    
17631
 
17632
   REVISIONS:
17633
   Ver        Date        Author           Description
17634
   ---------  ----------  ---------------  ------------------------------------
17635
   1.0        16/03/2007          1. Created this procedure.
17636
 
17637
   NOTES:
17638
 
17639
   Automatically available Auto Replace Keywords:
17640
      Object Name:     UPDATE_MISC_VIEW
17641
      Sysdate:         16/03/2007
17642
      Date and Time:   16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AM
17643
      Username:         (set in TOAD Options, Procedure Editor)
17644
      Table Name:       (set in the "New PL/SQL Object" dialog)
17645
 
17646
******************************************************************************/
17647
   CURSOR view_cur /*Create a record set to store the ripple data*/
17648
   IS
17649
   	 SELECT pkg.pkg_id, rc.base_view_id 
17650
	 FROM package_versions pv, packages pkg, release_content rc
17651
	 where rc.rtag_id = 2362
17652
	 and rc.pv_id = pv.pv_id
17653
	 and pv.pkg_id = pkg.pkg_id;
17654
   view_rec   view_cur%ROWTYPE;
17655
 
17656
 
17657
 
17658
BEGIN
17659
   OPEN view_cur;
17660
 
17661
   FETCH view_cur
17662
    INTO view_rec;
17663
 
17664
   WHILE view_cur%FOUND
17665
   LOOP
17666
 
17667
 
17668
	   update release_content
17669
	   set base_view_id = view_rec.base_view_id
17670
	   where rtag_id = 8027
17671
	   and pv_id IN 
17672
	   (
17673
	   	select pv.pv_id from release_content rc, package_versions pv
17674
		where rc.rtag_id = 8027
17675
		and pv.pv_id = rc.pv_id
17676
		and pv.pkg_id = view_rec.pkg_id 
17677
 
17678
	   );
17679
 
17680
 
17681
 
17682
 
17683
 
17684
 
17685
 
17686
 
17687
 
17688
   FETCH view_cur
17689
   		 INTO view_rec;
17690
   END LOOP;	 
17691
 
17692
 
17693
 
17694
 
17695
 
17696
END UPDATE_MISC_VIEW; 
1374 dpurdie 17697
/
17698
--------------------------------------------------------
17699
--  DDL for Procedure CHECK_NEW_PATCHES
17700
--------------------------------------------------------
1373 dpurdie 17701
 
17702
  CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (
17703
   nrtagid   IN   release_content.rtag_id%TYPE
17704
)
17705
IS
17706
/* ---------------------------------------------------------------------------
17707
    Version: 3.0
17708
   --------------------------------------------------------------------------- */
17709
BEGIN
17710
   /*--------------- Business Rules Here -------------------*/
17711
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
17712
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
17713
   END IF
17714
 
17715
   /*-------------------------------------------------------*/
17716
   UPDATE release_content rc
17717
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
17718
    WHERE rc.pv_id IN (
17719
             SELECT prod.pv_id
17720
               FROM (SELECT   pp.pv_id AS orig_parent_id,
17721
                              COUNT (*) AS num_of_patches
17722
                         FROM release_content rc, package_patches pp
17723
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17724
                     GROUP BY pp.pv_id) orig,
17725
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
17726
                              COUNT (*) AS num_of_patches
17727
                         FROM release_content rc,
17728
                              package_patches pp,
17729
                              package_dependencies dep,
17730
                              package_versions pv,
17731
                              package_patches prodpp
17732
                        WHERE rc.pv_id = pp.pv_id
17733
                          AND rc.rtag_id = nrtagid
17734
                          AND pp.patch_id = dep.dpv_id
17735
                          AND dep.pv_id = pv.pv_id
17736
                          AND pv.is_patch = 'Y'
17737
                          AND pv.dlocked = 'Y'
17738
                          AND prodpp.patch_id = dep.pv_id
17739
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
17740
                    release_content rc
17741
              WHERE orig.orig_parent_id = prod.pv_id
17742
                AND orig.num_of_patches != prod.num_of_patches
17743
                AND rc.rtag_id = nrtagid
17744
                AND rc.pv_id = prod.pv_id
17745
                AND rc.pkg_state = 0
17746
             UNION
17747
             SELECT   prodpp.pv_id
17748
                 FROM release_content rc,
17749
                      package_patches pp,
17750
                      package_dependencies dep,
17751
                      package_versions pv,
17752
                      package_patches prodpp
17753
                WHERE rc.pv_id = pp.pv_id
17754
                  AND rc.rtag_id = nrtagid
17755
                  AND pp.patch_id = dep.dpv_id
17756
                  AND dep.pv_id = pv.pv_id
17757
                  AND pv.is_patch = 'Y'
17758
                  AND pv.dlocked = 'Y'
17759
                  AND prodpp.patch_id = dep.pv_id
17760
             GROUP BY prodpp.pv_id, pp.pv_id
17761
             MINUS
17762
             SELECT   pp.pv_id
17763
                 FROM release_content rc, package_patches pp
17764
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17765
             GROUP BY pp.pv_id);
17766
END check_new_patches;
1374 dpurdie 17767
/
17768
--------------------------------------------------------
17769
--  DDL for Procedure CLEAN_ADVISORY_RIPPLE
17770
--------------------------------------------------------
1373 dpurdie 17771
 
17772
  CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)
17773
IS
17774
/******************************************************************************
17775
   NAME:       clean_advisory_ripple
17776
 
17777
   PURPOSE:    To delete entries from the advisory_ripple table based upon
17778
               an RTAG_ID only
17779
 
17780
               This is a tidy-up operation performed against the advisory_ripple
17781
               table, ensuring that the table does not have rtag_id/pv_id
17782
               combinations that cannot be found in the release's wip/pending/release
17783
               tabs.
17784
 
17785
******************************************************************************/
17786
BEGIN
17787
   -- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.
17788
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
17789
   -- work_in_progress, planned, or release_content table.
17790
   -- NOTE: Planned operations that represent pending additive/subtractive merge
17791
   -- operations are ignored because they have not been approved yet and so
17792
   -- cannot be said to be "in the release".
17793
   DELETE FROM advisory_ripple
17794
         WHERE rtag_id = nrtagid
17795
           AND pv_id not in
17796
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
17797
                 UNION
17798
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
17799
                 UNION
17800
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
17801
               );
17802
END clean_advisory_ripple;
1374 dpurdie 17803
/
17804
--------------------------------------------------------
17805
--  DDL for Procedure NEW_PATCH
17806
--------------------------------------------------------
1373 dpurdie 17807
 
17808
  CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17809
 	   	  		  					  	NNparent_id IN NUMBER,
17810
                                        sPatchIdList IN VARCHAR2,
17811
										NNuser_id IN NUMBER ) IS
17812
/* ---------------------------------------------------------------------------
17813
    Version: 3.5
17814
   --------------------------------------------------------------------------- */
17815
 
17816
    patchPv_id    NUMBER;
17817
	parPkg_id	  NUMBER;
17818
    LastInstallOrder NUMBER;
17819
    isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
17820
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
17821
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
17822
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
17823
	oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17824
 
17825
	CURSOR parent_cur IS
17826
        SELECT pv.*, pkg.pkg_name
17827
          FROM package_versions pv,
17828
		       packages pkg
17829
         WHERE pv.pv_id = NNparent_id
17830
		   AND pv.pkg_id = pkg.pkg_id;
17831
    parent_rec parent_cur%ROWTYPE;
17832
 
17833
    CURSOR patch_cur IS
17834
        SELECT pv.*, pg.pkg_name
17835
          FROM package_versions pv,
17836
		       packages pg
17837
         WHERE pv.pkg_id = parPkg_id
17838
		   AND pv.pkg_version = SSpatch_version
17839
		   AND pv.pkg_id = pg.pkg_id;
17840
    patch_rec patch_cur%ROWTYPE;
17841
 
17842
	CURSOR releases_cur IS
17843
        SELECT rc.pv_id
17844
		  FROM release_content rc
17845
		 WHERE rc.pv_id = patch_rec.pv_id;
17846
    releases_rec releases_cur%ROWTYPE;
17847
 
17848
 
17849
BEGIN
17850
 
17851
	-- Get Last Install Order
17852
    SELECT Count(*) INTO LastInstallOrder
17853
	  FROM PACKAGE_PATCHES pp
17854
	 WHERE pp.PV_ID = NNparent_id;
17855
 
17856
 
17857
    -- Get parent details
17858
	OPEN parent_cur;
17859
    FETCH parent_cur INTO parent_rec;
17860
	parPkg_id := parent_rec.pkg_id;
17861
 
17862
 
17863
	-- Find if patch exists in database
17864
    OPEN patch_cur;
17865
    FETCH patch_cur INTO patch_rec;
17866
 
17867
 
17868
    -- Parent must be official
17869
    IF parent_rec.dlocked = 'Y' THEN
17870
 
17871
	    IF patch_cur%NOTFOUND
17872
	    THEN
17873
        	isPatchDlocked := 'N';
17874
 
17875
	        -- Create new patch version --
17876
	        SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
17877
 
17878
 
17879
	        Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
17880
 
17881
	        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 )
17882
				   VALUES (
17883
						   patchPv_id,
17884
	                       parPkg_id,
17885
	                       SSpatch_version,
17886
	                       isPatchDlocked,
17887
	                       ORA_SYSDATE,
17888
	                       NNuser_id,
17889
	                       ORA_SYSDATETIME,
17890
	                       NNuser_id,
17891
	                       SSV_MM,
17892
	                       SSV_NMM,
17893
	                       SSV_EXT,
17894
	                       parent_rec.src_path,
17895
	                       'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
17896
	                       NNuser_id,
17897
						   'Y',
17898
                           patchPv_id,
17899
						   parent_rec.bs_id,
17900
						   parent_rec.is_autobuildable,
17901
						   parent_rec.ripple_field
17902
 
17903
						   );
17904
 
17905
			INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17906
		    	   ( SELECT NNparent_id AS pv_id,
17907
				            pv.pv_id AS patch_id,
17908
	                        LastInstallOrder + 1 AS INSTALL_ORDER
17909
				       FROM package_versions pv
17910
					  WHERE pv.pv_id = patchPv_id
17911
					    AND pv.is_patch = 'Y' );
17912
 
17913
	        /* LOG ACTION */
17914
            Log_Action ( patchPv_id, 'new_version', NNuser_id,
17915
        			     'Patch version created: '|| SSpatch_version );
17916
 
17917
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17918
        			     'New patch created and attached: '|| SSpatch_version );
17919
 
17920
 
17921
	    ELSE
17922
 
17923
		    patchPv_id := patch_rec.pv_id;
17924
	    	isPatchDlocked := patch_rec.dlocked;
17925
 
17926
			-- Find if pv_id exists in release content (i.e. it cannot be a patch)
17927
		    OPEN releases_cur;
17928
		    FETCH releases_cur INTO releases_rec;
17929
 
17930
			IF releases_cur%NOTFOUND
17931
	   		THEN
17932
				-- This pv_id is trully a patch, hence add Y to column IS_PATCH
17933
				UPDATE package_versions SET
17934
					   is_patch = 'Y'
17935
					   WHERE pv_id = patchPv_id;
17936
 
17937
				INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17938
			    	   ( SELECT NNparent_id AS pv_id,
17939
					            pv.pv_id AS patch_id,
17940
	                            LastInstallOrder + 1 AS INSTALL_ORDER
17941
					       FROM package_versions pv
17942
						  WHERE pv.pv_id = patchPv_id
17943
						    AND pv.is_patch = 'Y' );
17944
 
17945
			END IF;
17946
 
17947
			CLOSE releases_cur;
17948
 
17949
            /* LOG ACTION */
17950
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17951
        			     'Patch version was found and attached: '|| SSpatch_version );
17952
 
17953
	    END IF;
17954
 
17955
 
17956
 
17957
 
17958
    END IF;
17959
 
17960
 
17961
 
17962
    /* Create Patch Dependencies */
17963
    oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
17964
 
17965
 
17966
    -- Make sure patch is unofficial before altering its dependencies
17967
    IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
17968
    	-- Delete Existing Dependencies
17969
        DELETE
17970
          FROM PACKAGE_DEPENDENCIES dep
17971
         WHERE dep.PV_ID = patchPv_id;
17972
 
17973
 
17974
        -- Insert new dependencies
17975
        INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
17976
        SELECT patchPv_id AS PV_ID,
17977
        	   pv.PV_ID AS DPV_ID,
17978
               parPkg_id AS PKG_ID,
17979
               pv.PKG_ID AS DPKG_ID,
17980
               'L' AS BUILD_TYPE
17981
          FROM PACKAGE_VERSIONS pv
17982
         WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
17983
 
17984
 
17985
    END IF;
17986
 
17987
 
17988
    CLOSE parent_cur;
17989
    CLOSE patch_cur;
17990
END New_Patch;
1374 dpurdie 17991
/
17992
--------------------------------------------------------
17993
--  DDL for Procedure UPDATE_PROCESSES
17994
--------------------------------------------------------
1373 dpurdie 17995
 
17996
  CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES" 
17997
IS
17998
 
17999
proc_id NUMBER;
18000
/******************************************************************************
18001
   NAME:       DELETE_DO_NOT_RIPPLE
18002
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18003
               IS RELEASED
18004
 
18005
   REVISIONS:
18006
   Ver        Date        Author           Description
18007
   ---------  ----------  ---------------  ------------------------------------
18008
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18009
 
18010
   NOTES:
18011
 
18012
   Automatically available Auto Replace Keywords:
18013
      Object Name:     DELETE_DO_NOT_RIPPLE
18014
      Sysdate:         21/04/2006
18015
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18016
      Username:         (set in TOAD Options, Procedure Editor)
18017
      Table Name:       (set in the "New PL/SQL Object" dialog)
18018
 
18019
******************************************************************************/
18020
   CURSOR ripple_cur
18021
   IS
18022
      select proc_id,  proc_name, run_as, pkg_owner, is_interface from processes;
18023
 
18024
   ripple_rec   ripple_cur%ROWTYPE;
18025
BEGIN
18026
   OPEN ripple_cur;
18027
 
18028
   FETCH ripple_cur
18029
    INTO ripple_rec;
18030
 
18031
   WHILE ripple_cur%FOUND
18032
   LOOP
18033
 
18034
 
18035
update deployment_manager.processes_config 
18036
set proc_id = ripple_rec.proc_id
18037
where pkg_health_tag = ripple_rec.proc_name
18038
and cmd_interface IS NULL
18039
and pkg_owner IS NULL
18040
and is_interface IS NULL; 
18041
 
18042
 
18043
      FETCH ripple_cur
18044
       INTO ripple_rec;
18045
   END LOOP;
18046
END UPDATE_PROCESSES;
1374 dpurdie 18047
/
18048
--------------------------------------------------------
18049
--  DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO
18050
--------------------------------------------------------
1373 dpurdie 18051
 
18052
  CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO" 
18053
IS
18054
/******************************************************************************
18055
   NAME:       DELETE_AUTOBUILD_FAILURE_INFO
18056
   PURPOSE:
18057
 
18058
   REVISIONS:
18059
   Ver        Date        Author           Description
18060
   ---------  ----------  ---------------  ------------------------------------
18061
   1.0        2/06/2006    Rupesh Solanki      1. Created this procedure.
18062
 
18063
   NOTES:
18064
 
18065
   Automatically available Auto Replace Keywords:
18066
      Object Name:     DELETE_AUTOBUILD_FAILURE_INFO
18067
      Sysdate:         2/06/2006
18068
      Date and Time:   2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AM
18069
      Username:         (set in TOAD Options, Procedure Editor)
18070
      Table Name:       (set in the "New PL/SQL Object" dialog)
18071
 
18072
******************************************************************************/
18073
BEGIN
18074
   DELETE FROM autobuild_failure
18075
         WHERE group_email_id NOT IN (SELECT group_email_id
18076
                                        FROM members_group);
18077
END delete_autobuild_failure_info;
1374 dpurdie 18078
/
18079
--------------------------------------------------------
18080
--  DDL for Procedure TEST
18081
--------------------------------------------------------
1373 dpurdie 18082
 
18083
  CREATE OR REPLACE PROCEDURE "TEST" 
18084
IS
18085
 
18086
proc_id NUMBER;
18087
/******************************************************************************
18088
   NAME:       DELETE_DO_NOT_RIPPLE
18089
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18090
               IS RELEASED
18091
 
18092
   REVISIONS:
18093
   Ver        Date        Author           Description
18094
   ---------  ----------  ---------------  ------------------------------------
18095
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18096
 
18097
   NOTES:
18098
 
18099
   Automatically available Auto Replace Keywords:
18100
      Object Name:     DELETE_DO_NOT_RIPPLE
18101
      Sysdate:         21/04/2006
18102
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18103
      Username:         (set in TOAD Options, Procedure Editor)
18104
      Table Name:       (set in the "New PL/SQL Object" dialog)
18105
 
18106
******************************************************************************/
18107
   CURSOR ripple_cur
18108
   IS
18109
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
18110
 
18111
   ripple_rec   ripple_cur%ROWTYPE;
18112
BEGIN
18113
   OPEN ripple_cur;
18114
 
18115
   FETCH ripple_cur
18116
    INTO ripple_rec;
18117
 
18118
   WHILE ripple_cur%FOUND
18119
   LOOP
18120
 
18121
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
18122
 
18123
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
18124
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
18125
 
18126
      FETCH ripple_cur
18127
       INTO ripple_rec;
18128
   END LOOP;
18129
END test;
1374 dpurdie 18130
/
18131
--------------------------------------------------------
18132
--  DDL for Procedure CLEAN_DO_NOT_RIPPLE
18133
--------------------------------------------------------
1373 dpurdie 18134
 
18135
  CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)
18136
IS
18137
/******************************************************************************
18138
   NAME:       clean_do_not_ripple
18139
 
18140
   PURPOSE:    To delete entries from the do_not_ripple table based upon
18141
               an RTAG_ID only
18142
 
18143
               This is a tidy-up operation performed against the do_not_ripple
18144
               table, ensuring that the table does not have rtag_id/pv_id
18145
               combinations that cannot be found in the release's wip/pending/release
18146
               tabs.
18147
 
18148
******************************************************************************/
18149
BEGIN
18150
   -- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.
18151
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
18152
   -- work_in_progress, planned, or release_content table.
18153
   -- NOTE: Planned operations that represent pending additive/subtractive merge
18154
   -- operations are ignored because they have not been approved yet and so
18155
   -- cannot be said to be "in the release".
18156
   DELETE FROM do_not_ripple
18157
         WHERE rtag_id = nrtagid
18158
           AND pv_id not in
18159
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
18160
                 UNION
18161
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
18162
                 UNION
18163
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
18164
               );
18165
END clean_do_not_ripple;
1374 dpurdie 18166
/
18167
--------------------------------------------------------
18168
--  DDL for Procedure REBUILD_ENVIRONMENT
18169
--------------------------------------------------------
1373 dpurdie 18170
 
18171
  CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS
18172
 
18173
/* ---------------------------------------------------------------------------
18174
    Version: 3.3
18175
   --------------------------------------------------------------------------- */
18176
    rowCnt NUMBER := 0;
18177
    iteration NUMBER := 2;          -- Iterations counter
18178
    maxIterations NUMBER := 50;    -- Maximum number of iterations allowed.
18179
                                    -- This will prevent infinite loops if cyrcular dependencies are found
18180
    sessionNum NUMBER;
18181
BEGIN
18182
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18183
 
18184
 
18185
    -- Redo Patch Ignore warnings
18186
    Ignore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );
18187
 
18188
 
18189
    Level_One_Conflicts ( NNrtag_id, sessionNum );
18190
 
18191
    LOOP
18192
        Level_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );
18193
        iteration := iteration + 1;
18194
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18195
    END LOOP;
18196
 
18197
    Update_Package_States ( NNrtag_id, sessionNum );
18198
 
18199
    DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;
18200
 
18201
    -- Flag Packages with New Patches Available
18202
    Check_New_Patches ( NNrtag_id );
18203
 
18204
	Clean_Do_Not_Ripple( NNrtag_id );
18205
 
18206
 
18207
	/* Circular Dependency Flag */
18208
    /*
18209
	IF iteration > maxIterations
18210
	THEN
18211
		UPDATE release_tags SET
18212
		   	   circular_dependency = 'Y'
18213
		 WHERE rtag_id = NNrtag_id;
18214
	ELSE
18215
		UPDATE release_tags SET
18216
		   	   circular_dependency = NULL
18217
		 WHERE rtag_id = NNrtag_id;
18218
	END IF;
18219
    */
18220
END Rebuild_Environment;
1374 dpurdie 18221
/
18222
--------------------------------------------------------
18223
--  DDL for Procedure TEST_MARCO
18224
--------------------------------------------------------
1373 dpurdie 18225
 
18226
  CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS
18227
/******************************************************************************
18228
   NAME:       TEST_MARCO
18229
   PURPOSE:    
18230
 
18231
   REVISIONS:
18232
   Ver        Date        Author           Description
18233
   ---------  ----------  ---------------  ------------------------------------
18234
   1.0        2/03/2007          1. Created this procedure.
18235
 
18236
   NOTES:
18237
 
18238
   Automatically available Auto Replace Keywords:
18239
      Object Name:     TEST_MARCO
18240
      Sysdate:         2/03/2007
18241
      Date and Time:   2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PM
18242
      Username:         (set in TOAD Options, Procedure Editor)
18243
      Table Name:       (set in the "New PL/SQL Object" dialog)
18244
 
18245
******************************************************************************/
18246
 
18247
parPv_id    NUMBER;
18248
parPkg_id   NUMBER;
18249
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18250
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18251
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18252
BEGIN
18253
 
18254
SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18255
 
18256
        /* LOG ACTION */
18257
        Log_Action ( parPv_id, 'new_version', 3764,
18258
        			 'New package version: '|| parPv_id || '.' );
18259
 
18260
        Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );
18261
 
18262
     -- Clone Package Version Details --
18263
            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,
18264
                                           src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )
18265
                SELECT parPv_id         AS pv_id,
18266
                       pv.pkg_id        AS pkg_id,
18267
                       parPv_id || '.'    AS pkg_version,
18268
                       'N'              AS dlocked,
18269
                       Ora_Sysdate      AS created_stamp,
18270
                       3764        AS creator_id,
18271
                       Ora_Sysdatetime  AS modified_stamp,
18272
                       3764        AS modifier_id,
18273
                       SSV_MM          AS V_MM,
18274
                       SSV_NMM         AS V_NMM,
18275
                       SSV_EXT          AS V_EXT,
18276
                       pv.src_path,
18277
                       pv.pv_description,
18278
                       pv.PV_OVERVIEW,
18279
                       112982 	AS LAST_PV_ID,
18280
                       pv.owner_id,
18281
					   pv.BUILD_TYPE,
18282
					   pv.IS_BUILD_ENV_REQUIRED,
18283
					   pv.bs_id,
18284
					   pv.is_autobuildable,
18285
					   pv.IS_DEPLOYABLE
18286
                  FROM PACKAGE_VERSIONS pv
18287
                 WHERE pv.pv_id = 112982;		
18288
 
18289
Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );
18290
 
18291
 
18292
END TEST_MARCO;
1374 dpurdie 18293
/
18294
--------------------------------------------------------
18295
--  DDL for Procedure LOG_ACTION_BULK
18296
--------------------------------------------------------
1373 dpurdie 18297
 
18298
  CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,
18299
										 	  enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18300
                                         	  nUserId IN ACTION_LOG.USER_ID%TYPE,
18301
										 	  sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18302
/* ---------------------------------------------------------------------------
18303
    Version: 3.0
18304
   --------------------------------------------------------------------------- */
18305
 
18306
    ActionTypeId NUMBER;
18307
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18308
 
18309
BEGIN
18310
 
18311
    oPvIdCollector := IN_LIST_NUMBER ( nPvIdList );
18312
 
18313
    -- Get Action Type FK
18314
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18315
      FROM ACTION_TYPE act
18316
     WHERE act.NAME = enumActionTypeName;
18317
 
18318
    -- Log Action
18319
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18320
    SELECT nUserId,
18321
    	   ORA_SYSDATETIME,
18322
           pv.PV_ID,
18323
           sAdditionalComments,
18324
           ActionTypeId
18325
      FROM PACKAGE_VERSIONS pv
18326
     WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18327
 
18328
 
18329
END Log_Action_Bulk;
1374 dpurdie 18330
/
18331
--------------------------------------------------------
18332
--  DDL for Procedure CLONED_PACKAGE_PROCESSES
18333
--------------------------------------------------------
1373 dpurdie 18334
 
18335
  CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES" 
18336
IS
18337
 
18338
proc_id NUMBER;
18339
/******************************************************************************
18340
   NAME:       DELETE_DO_NOT_RIPPLE
18341
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18342
               IS RELEASED
18343
 
18344
   REVISIONS:
18345
   Ver        Date        Author           Description
18346
   ---------  ----------  ---------------  ------------------------------------
18347
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18348
 
18349
   NOTES:
18350
 
18351
   Automatically available Auto Replace Keywords:
18352
      Object Name:     DELETE_DO_NOT_RIPPLE
18353
      Sysdate:         21/04/2006
18354
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18355
      Username:         (set in TOAD Options, Procedure Editor)
18356
      Table Name:       (set in the "New PL/SQL Object" dialog)
18357
 
18358
******************************************************************************/
18359
   CURSOR ripple_cur
18360
   IS
18361
      select distinct proc_id, prod_id from deployment_manager.processes_config;
18362
 
18363
   ripple_rec   ripple_cur%ROWTYPE;
18364
BEGIN
18365
   OPEN ripple_cur;
18366
 
18367
   FETCH ripple_cur
18368
    INTO ripple_rec;
18369
 
18370
   WHILE ripple_cur%FOUND
18371
   LOOP
18372
 
18373
 
18374
 
18375
insert into package_processes (PROC_ID, PV_ID) 
18376
values( ripple_rec.proc_id, ripple_rec.prod_id);
18377
 
18378
      FETCH ripple_cur
18379
       INTO ripple_rec;
18380
   END LOOP;
18381
END CLONED_PACKAGE_PROCESSES;
1374 dpurdie 18382
/
18383
--------------------------------------------------------
18384
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2
18385
--------------------------------------------------------
1373 dpurdie 18386
 
18387
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
18388
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18389
                                                          NNuser_id IN NUMBER,
18390
                                                          retPV_ID OUT NUMBER,
18391
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
18392
/* ---------------------------------------------------------------------------
18393
    Version: 4.0
18394
   --------------------------------------------------------------------------- */
18395
 
18396
    parPkg_id   NUMBER;
18397
    parPv_id    NUMBER;
18398
    cloneFrom_pv_id NUMBER;
18399
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18400
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18401
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18402
 
18403
    CURSOR packages_cur IS
18404
        SELECT pkg_id FROM PACKAGES
18405
        WHERE pkg_name = SSpkg_name;
18406
    packages_rec packages_cur%ROWTYPE;
18407
 
18408
    CURSOR package_versions_cur IS
18409
        SELECT pv_id FROM PACKAGE_VERSIONS
18410
        WHERE pkg_id = parPkg_id
18411
        AND pkg_version = SSpkg_version;
18412
    package_versions_rec package_versions_cur%ROWTYPE;
18413
 
18414
    CURSOR clone_package_versions_cur IS
18415
        SELECT MAX(pv_id) AS pv_id
18416
          FROM PACKAGE_VERSIONS
18417
         WHERE pkg_id = parPkg_id
18418
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
18419
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
18420
 
18421
BEGIN
18422
    /* -------------------------------------------- */
18423
    /* Find if pkg_name exists and seed if required */
18424
    /* -------------------------------------------- */
18425
    OPEN packages_cur;
18426
    FETCH packages_cur INTO packages_rec;
18427
 
18428
    IF packages_cur%NOTFOUND
18429
    THEN
18430
        /* INSERT into packages table */
18431
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
18432
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
18433
 
18434
    ELSE
18435
        parPkg_id := packages_rec.pkg_id;
18436
 
18437
    END IF;
18438
 
18439
    CLOSE packages_cur;
18440
 
18441
 
18442
 
18443
    /* ---------------------------------------------------- */
18444
    /* Find if package_version exists and seed if required  */
18445
    /* ---------------------------------------------------- */
18446
    OPEN package_versions_cur;
18447
    FETCH package_versions_cur INTO package_versions_rec;
18448
 
18449
    IF package_versions_cur%NOTFOUND
18450
    THEN
18451
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18452
 
18453
        /* LOG ACTION */
18454
        Log_Action ( parPv_id, 'new_version', NNuser_id,
18455
        			 'New package version: '|| SSpkg_version );
18456
 
18457
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
18458
 
18459
 
18460
 
18461
 
18462
 
18463
            /* CLONE details from similar version  OR  from nCloneFromPvId */
18464
			IF ( NOT nCloneFromPvId IS NULL) THEN
18465
            	cloneFrom_pv_id := nCloneFromPvId;
18466
			ELSE
18467
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
18468
			END IF;
18469
 
18470
            -- Clone Package Version Details --
18471
            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,
18472
                                           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 )
18473
                SELECT parPv_id         AS pv_id,
18474
                       parPkg_id        AS pkg_id,
18475
                       SSpkg_version    AS pkg_version,
18476
                       'N'              AS dlocked,
18477
                       Ora_Sysdate      AS created_stamp,
18478
                       NNuser_id        AS creator_id,
18479
                       Ora_Sysdatetime  AS modified_stamp,
18480
                       NNuser_id        AS modifier_id,
18481
                       SSV_MM           AS V_MM,
18482
                       SSV_NMM          AS V_NMM,
18483
                       SSV_EXT          AS V_EXT,
18484
                       pv.src_path,
18485
                       pv.pv_description,
18486
                       pv.PV_OVERVIEW,
18487
                       cloneFrom_pv_id 	AS LAST_PV_ID,
18488
                       pv.owner_id,
18489
					   pv.BUILD_TYPE,
18490
					   pv.IS_BUILD_ENV_REQUIRED,
18491
					   pv.bs_id,
18492
					   pv.is_autobuildable,
18493
					   pv.IS_DEPLOYABLE,
18494
					   pv.ripple_field
18495
                  FROM PACKAGE_VERSIONS pv
18496
                 WHERE pv.pv_id = cloneFrom_pv_id;
18497
 
18498
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
18499
 
18500
        retPV_ID := parPv_id;
18501
 
18502
    ELSE
18503
        retPV_ID := package_versions_rec.pv_id;
18504
 
18505
    END IF;
18506
 
18507
    CLOSE package_versions_cur;
18508
 
18509
 
18510
 
18511
 
18512
END Seed_Package_Names_Versions2;
1374 dpurdie 18513
/
18514
--------------------------------------------------------
18515
--  DDL for Procedure BUILD_TREE
18516
--------------------------------------------------------
1373 dpurdie 18517
 
18518
  CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,
18519
	   	  		  					     retSessionNum OUT NUMBER ) IS
18520
 
18521
/* ---------------------------------------------------------------------------
18522
    Version: 3.0.0
18523
   --------------------------------------------------------------------------- */
18524
    rowCnt 			NUMBER := 0;						-- Iterations counter
18525
    iteration 		NUMBER := 1;                  -- Maximum number of iterations allowed.
18526
    maxIterations 	NUMBER := 50;      	  	-- This will prevent infinite loops if cyrcular dependencies are found
18527
	UP_THE_TREE 	CONSTANT NUMBER DEFAULT 1;
18528
	DOWN_THE_TREE 	CONSTANT NUMBER DEFAULT -1;
18529
    sessionNum 		NUMBER;
18530
	levelNum		NUMBER;
18531
 
18532
BEGIN
18533
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18534
 
18535
	/*
18536
	||	   Start UP THE TREE
18537
	*/
18538
 
18539
 
18540
	/* Packages with no dependencies */    
18541
    INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18542
		SELECT sessionNum AS SESSION_NUM,
18543
			   iteration AS LEVEL_NUM,
18544
			   UP_THE_TREE AS DIRECTION,
18545
			   rc.pv_id, pv.pkg_id, pv.v_ext
18546
		  FROM release_content rc,
18547
		  	   package_versions pv
18548
		 WHERE rc.rtag_id = nRtag_id
18549
		   AND rc.pv_id = pv.pv_id
18550
		 MINUS
18551
		SELECT sessionNum AS SESSION_NUM, 
18552
			   iteration AS LEVEL_NUM,
18553
			   UP_THE_TREE AS DIRECTION,
18554
			   dep.pv_id, pv.pkg_id, pv.v_ext
18555
		  FROM package_dependencies dep,
18556
		  	   package_versions pv
18557
		 WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )
18558
		   AND dep.pv_id = pv.pv_id;
18559
 
18560
 
18561
	/* Browse UP the build tree */	   
18562
	iteration := iteration + 1;
18563
    LOOP
18564
 
18565
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18566
			SELECT DISTINCT 
18567
			       sessionNum AS SESSION_NUM,
18568
			       iteration AS LEVEL_NUM,
18569
				   UP_THE_TREE AS DIRECTION, 
18570
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18571
			  FROM (  
18572
			        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
18573
			          FROM package_dependencies dep,
18574
			               release_content rc,
18575
						   package_versions pv,
18576
						   package_versions dpv
18577
			         WHERE dep.pv_id = rc.pv_id
18578
			           AND rc.rtag_id = nRtag_id
18579
					   AND dep.pv_id = pv.pv_id
18580
					   AND dep.dpv_id = dpv.pv_id
18581
					) rdep,
18582
					temp_tree_browse ttb
18583
			 WHERE rdep.dpkg_id  = ttb.pkg_id
18584
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')
18585
			   AND ttb.SESSION_NUM = sessionNum
18586
			   AND ttb.LEVEL_NUM = iteration - 1	
18587
			MINUS
18588
			/* Packages with all depencencies NOT matched */  
18589
			SELECT DISTINCT 
18590
			       sessionNum AS SESSION_NUM,
18591
			       iteration AS LEVEL_NUM, 
18592
				   UP_THE_TREE AS DIRECTION,
18593
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18594
			  FROM (  
18595
			        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
18596
			          FROM package_dependencies dep,
18597
			               release_content rc,
18598
						   package_versions pv,
18599
						   package_versions dpv
18600
			         WHERE dep.pv_id = rc.pv_id
18601
			           AND rc.rtag_id = nRtag_id
18602
					   AND dep.pv_id = pv.pv_id
18603
					   AND dep.dpv_id = dpv.pv_id
18604
					) rdep,
18605
					(
18606
					 SELECT tb.*
18607
					   FROM temp_tree_browse tb
18608
					  WHERE tb.SESSION_NUM = sessionNum
18609
					) ttb
18610
			 WHERE rdep.dpkg_id  = ttb.pkg_id (+)
18611
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')
18612
			   AND ttb.SESSION_NUM IS NULL;
18613
 
18614
		rowCnt := SQL%ROWCOUNT;
18615
		IF rowCnt > 0 THEN
18616
           iteration := iteration + 1;
18617
		END IF;
18618
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18619
    END LOOP;
18620
 
18621
	/*---------------------------------------------------------------------------------------------------------------------*/
18622
 
18623
	/*     Check for unresolved dependencies
18624
	||  
18625
	*/
18626
	/* UNRESOLVED */
18627
	 SELECT COUNT(*) INTO rowCnt
18628
	   FROM (
18629
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18630
			  FROM release_content rc,
18631
			  	   package_versions pv
18632
			 WHERE rc.rtag_id = nRtag_id
18633
			   AND rc.pv_id = pv.pv_id	   
18634
			MINUS
18635
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18636
			  FROM temp_tree_browse ttb
18637
			 WHERE ttb.session_num = sessionNum
18638
			);
18639
 
18640
 
18641
 
18642
	 IF rowCnt > 0 
18643
	 THEN
18644
	 	 /*     Circular dependencies detected.
18645
		 ||     Try to resolve build order from the top now.
18646
		 ||		Start DOWN THE TREE
18647
		 */
18648
 
18649
		iteration := 0; 
18650
		 /* Top Level packages */	
18651
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )	   
18652
			SELECT sessionNum AS SESSION_NUM,
18653
			       iteration AS LEVEL_NUM,
18654
				   DOWN_THE_TREE AS DIRECTION,
18655
				   pv.pv_id, pv.pkg_id, pv.v_ext
18656
			  FROM (		   
18657
					/* Packages no one depends on ( Top level packages )*/
18658
					( 
18659
					/* All parents*/ 
18660
					SELECT pv.pkg_id, pv.v_ext
18661
			          FROM package_dependencies dep,
18662
			               release_content rc,
18663
						   package_versions pv
18664
			         WHERE dep.pv_id = rc.pv_id
18665
			           AND rc.rtag_id = nRtag_id
18666
					   AND dep.pv_id = pv.pv_id
18667
					 MINUS
18668
					 /* All children */
18669
					SELECT dpv.pkg_id, dpv.v_ext
18670
			          FROM package_dependencies dep,
18671
			               release_content rc,
18672
						   package_versions dpv
18673
			         WHERE dep.pv_id = rc.pv_id
18674
			           AND rc.rtag_id = nRtag_id
18675
					   AND dep.dpv_id = dpv.pv_id
18676
					 ) 
18677
					 MINUS
18678
					/* Packages with resolved dependencies from UP THE TREE */ 
18679
					SELECT ttb.pkg_id, ttb.v_ext
18680
					  FROM temp_tree_browse ttb
18681
					 WHERE ttb.session_num = sessionNum
18682
				  ) tpkg,
18683
				  package_versions pv,
18684
				  release_content rc
18685
			WHERE rc.rtag_id = nRtag_id
18686
			  AND rc.pv_id = pv.pv_id
18687
			  AND tpkg.pkg_id = pv.pkg_id
18688
			  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18689
 
18690
 
18691
		 /* Keep taking packages which no one depende on */			  
18692
		 iteration := iteration - 1;  
18693
		 LOOP	  
18694
			   INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18695
					SELECT sessionNum AS SESSION_NUM,
18696
					       iteration AS LEVEL_NUM,
18697
					       DOWN_THE_TREE AS DIRECTION,
18698
					       pv.pv_id, pv.pkg_id, pv.v_ext
18699
					  FROM (		   
18700
					 	/* All Unresolved */
18701
					 	(
18702
					 	SELECT pv.pkg_id, pv.v_ext
18703
					 	  FROM release_content rc,
18704
					 	  	   package_versions pv
18705
					 	 WHERE rc.rtag_id = nRtag_id
18706
					 	   AND rc.pv_id = pv.pv_id	   
18707
					 	MINUS
18708
					 	SELECT ttb.pkg_id, ttb.v_ext
18709
					 	  FROM temp_tree_browse ttb
18710
					 	 WHERE ttb.session_num = sessionNum
18711
					 	)
18712
					 	 MINUS
18713
					 	(  
18714
					 	 /* Children of Unresolved */  
18715
					 	SELECT dpv.pkg_id, dpv.V_EXT
18716
					 	  FROM (
18717
					 			SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18718
					 			  FROM release_content rc,
18719
					 			  	   package_versions pv
18720
					 			 WHERE rc.rtag_id = nRtag_id
18721
					 			   AND rc.pv_id = pv.pv_id	   
18722
					 			MINUS
18723
					 			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18724
					 			  FROM temp_tree_browse ttb
18725
					 			 WHERE ttb.session_num = sessionNum
18726
					 		   ) unr,
18727
					 		   package_dependencies dep,
18728
					 		   package_versions dpv
18729
					 	 WHERE unr.pv_id = dep.pv_id
18730
					 	   AND dep.dpv_id = dpv.pv_id
18731
					 	 )  
18732
					   ) tpkg,
18733
					   package_versions pv,
18734
					   release_content rc
18735
					WHERE rc.rtag_id = nRtag_id
18736
					  AND rc.pv_id = pv.pv_id
18737
					  AND tpkg.pkg_id = pv.pkg_id
18738
					  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18739
 
18740
            rowCnt := SQL%ROWCOUNT;
18741
        	IF rowCnt > 0 THEN
18742
	           iteration := iteration - 1;
18743
			END IF;
18744
            EXIT WHEN (rowCnt < 1);
18745
     	END LOOP;
18746
 
18747
	 END IF;
18748
 
18749
 
18750
	/*---------------------------------------------------------------------------------------------------------------------*/
18751
 
18752
	/* 
18753
	|| 	 Save results from temp table
18754
	*/	
18755
	/* Clean up build_order table */
18756
	DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;
18757
 
18758
	/* Save UP THE TREE */
18759
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18760
		SELECT nRtag_id AS rtag_id,
18761
			   ttb.level_num AS step_num, 
18762
			   ttb.PV_ID
18763
		  FROM temp_tree_browse ttb
18764
		 WHERE ttb.session_num = sessionNum
18765
		   AND ttb.direction = UP_THE_TREE;	
18766
 
18767
	/*Get last step_num */
18768
	SELECT MAX(ttb.level_num) + 1 INTO levelNum
18769
	FROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;
18770
 
18771
	/* UNRESOLVED */
18772
	 SELECT COUNT(*) INTO rowCnt
18773
	   FROM (
18774
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18775
			  FROM release_content rc,
18776
			  	   package_versions pv
18777
			 WHERE rc.rtag_id = nRtag_id
18778
			   AND rc.pv_id = pv.pv_id	   
18779
			MINUS
18780
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18781
			  FROM temp_tree_browse ttb
18782
			 WHERE ttb.session_num = sessionNum
18783
			);
18784
 
18785
 
18786
	IF rowCnt > 0
18787
	THEN
18788
		/* Save unresolved packages */
18789
 		INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )
18790
		    SELECT  nRtag_id AS rtag_id,
18791
				    levelNum AS step_num, 
18792
				    upv.PV_ID,
18793
					'Y' AS UNRESOLVED
18794
			   FROM (
18795
					 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18796
					  FROM release_content rc,
18797
					  	   package_versions pv
18798
					 WHERE rc.rtag_id = nRtag_id
18799
					   AND rc.pv_id = pv.pv_id	   
18800
					MINUS
18801
					SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18802
					  FROM temp_tree_browse ttb
18803
					 WHERE ttb.session_num = sessionNum
18804
					) upv;
18805
	END IF;	
18806
 
18807
	/* Save DOWN THE TREE */
18808
	levelNum := 1000;
18809
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18810
		SELECT nRtag_id AS rtag_id,
18811
			   levelNum + ttb.level_num  AS step_num, 
18812
			   ttb.PV_ID
18813
		  FROM temp_tree_browse ttb
18814
		 WHERE ttb.session_num = sessionNum
18815
		   AND ttb.direction = DOWN_THE_TREE;
18816
 
18817
 
18818
	/*---------------------------------------------------------------------------------------------------------------------*/
18819
 
18820
	/* Clean up temp table */
18821
	DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;
18822
 
18823
	retSessionNum := sessionNum;
18824
END Build_Tree;
1374 dpurdie 18825
/
18826
--------------------------------------------------------
18827
--  DDL for Procedure CLEAR_ADVISORY_RIPPLE
18828
--------------------------------------------------------
1373 dpurdie 18829
 
18830
  CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18831
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
18832
											 nUserId IN NUMBER ) IS
18833
/* ---------------------------------------------------------------------------
18834
    Version: 4.0
18835
   --------------------------------------------------------------------------- */
18836
 
18837
BEGIN
18838
 
18839
    -- Clear Advisory Ripple Package
18840
    DELETE FROM ADVISORY_RIPPLE
18841
	WHERE PV_ID = nPvId
18842
	AND RTAG_ID = nRtagId;
18843
 
18844
    /* LOG ACTION */
18845
   	Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );
18846
 
18847
	/*Rebuild_Environment(nRtagId);*/
18848
 
18849
END Clear_Advisory_Ripple;
1374 dpurdie 18850
/
18851
--------------------------------------------------------
18852
--  DDL for Procedure REMOVE_RELEASE_CONTENT
18853
--------------------------------------------------------
1373 dpurdie 18854
 
18855
  CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,
18856
													 sNotPvIdList IN VARCHAR2,
18857
                                                     nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
18858
/* ---------------------------------------------------------------------------
18859
    Version: 3.0
18860
   --------------------------------------------------------------------------- */
18861
 
18862
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18863
oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18864
 
18865
BEGIN
18866
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
18867
    oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );
18868
 
18869
    -- Delete From Release Content
18870
    DELETE
18871
      FROM RELEASE_CONTENT
18872
	 WHERE rtag_id = nRTagId
18873
	   AND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
18874
	   AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18875
 
18876
 
18877
 
18878
END Remove_Release_Content;
1374 dpurdie 18879
/
18880
--------------------------------------------------------
18881
--  DDL for Procedure UPDATE_PACKAGE_DEPENDENCY
18882
--------------------------------------------------------
1373 dpurdie 18883
 
18884
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,
18885
                                                        SSdep_name IN PACKAGES.pkg_name%TYPE,
18886
                                                        SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18887
                                                        CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,
18888
                                                        NNuser_id IN NUMBER,
18889
                                                        NNdelete_old_dependency IN NUMBER
18890
                                                       ) IS
18891
/* ---------------------------------------------------------------------------
18892
    Version: 3.3
18893
   --------------------------------------------------------------------------- */
18894
 
18895
    retPV_ID NUMBER;
18896
    SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;
18897
	DepIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18898
    PvIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18899
    NNpkg_id NUMBER;
18900
    NNdpkg_id NUMBER;
18901
 
18902
BEGIN
18903
    --- Seed database with package_name and version if required ---
18904
    Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );
18905
 
18906
    -- get v_ext,pkg_id of current dependency
18907
    SELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatch
18908
      FROM PACKAGE_VERSIONS
18909
     WHERE pv_id = retPV_ID;
18910
 
18911
    -- get pkg_id of parent package
18912
    SELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatch
18913
      FROM PACKAGE_VERSIONS
18914
     WHERE pv_id = NNpv_id;
18915
 
18916
 
18917
	IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR
18918
    	( (PvIsPatch IS NOT NULL) )THEN
18919
 
18920
	    IF NNdelete_old_dependency = 1 THEN
18921
	        /* Used for CUSTOM dependency add/edit */
18922
 
18923
	        --- Remove old dependency ---
18924
            IF (PvIsPatch IS NULL) THEN
18925
            	-- Do it for Packages
18926
		        DELETE FROM PACKAGE_DEPENDENCIES
18927
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18928
		            (
18929
		            SELECT dep.*
18930
		              FROM PACKAGE_DEPENDENCIES dep,
18931
		                   PACKAGE_VERSIONS dpv,
18932
		                   PACKAGE_VERSIONS pv
18933
		             WHERE dep.dpv_id = dpv.pv_id
18934
		               AND dep.pv_id = NNpv_id
18935
		               AND pv.pv_id = retPV_ID
18936
		               AND dpv.pkg_id = pv.pkg_id
18937
		               AND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|')
18938
		            );
18939
            ELSE
18940
            	-- Do it for Patches
18941
                DELETE FROM PACKAGE_DEPENDENCIES
18942
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18943
		            (
18944
		            SELECT dep.*
18945
		              FROM PACKAGE_DEPENDENCIES dep
18946
		             WHERE dep.dpv_id = retPV_ID
18947
		               AND dep.pv_id = NNpv_id
18948
		            );
18949
			END IF;
18950
 
18951
	    END IF;
18952
 
18953
	    /* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */
18954
 
18955
	    --- Add new dependency ---
18956
	    INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )
18957
	    VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );
18958
 
18959
	END IF;
18960
 
18961
END Update_Package_Dependency;
1374 dpurdie 18962
/
18963
--------------------------------------------------------
18964
--  DDL for Procedure LOG_ACTION
18965
--------------------------------------------------------
1373 dpurdie 18966
 
18967
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18968
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18969
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
18970
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18971
/* ---------------------------------------------------------------------------
18972
    Version: 3.0
18973
   --------------------------------------------------------------------------- */
18974
 
18975
    ActionTypeId NUMBER;
18976
 
18977
BEGIN
18978
 
18979
    -- Get Action Type FK
18980
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18981
      FROM ACTION_TYPE act
18982
     WHERE act.NAME = enumActionTypeName;
18983
 
18984
 
18985
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18986
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
18987
 
18988
 
18989
END Log_Action;
1374 dpurdie 18990
/
18991
--------------------------------------------------------
18992
--  DDL for Procedure REMOVE_PATCH
18993
--------------------------------------------------------
1373 dpurdie 18994
 
18995
  CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
18996
										   nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
18997
                                           nUserId IN NUMBER ) IS
18998
/* ---------------------------------------------------------------------------
18999
    Version: 4.0
19000
   --------------------------------------------------------------------------- */
19001
 
19002
PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19003
 
19004
CURSOR curPatch IS
19005
	SELECT pp.PV_ID,
19006
		   pp.PATCH_ID,
19007
	       ROWNUM AS NEW_INSTALL_ORDER
19008
	  FROM PACKAGE_PATCHES pp
19009
	 WHERE pp.PV_ID = nPvId
19010
	ORDER BY pp.INSTALL_ORDER;
19011
recPatch curPatch%ROWTYPE;
19012
 
19013
BEGIN
19014
 
19015
	 -- Delete Patch
19016
     DELETE
19017
       FROM PACKAGE_PATCHES pp
19018
      WHERE pp.PV_ID = nPvId
19019
        AND pp.PATCH_ID = nPatchId;
19020
 
19021
 
19022
	-- Redo Install Order
19023
    OPEN curPatch;
19024
	FETCH curPatch INTO recPatch;
19025
 
19026
	WHILE curPatch%FOUND
19027
	LOOP
19028
 
19029
		UPDATE PACKAGE_PATCHES pp SET
19030
			pp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDER
19031
		WHERE pp.PV_ID = nPvId
19032
		  AND pp.PATCH_ID = recPatch.PATCH_ID;
19033
 
19034
		FETCH curPatch INTO recPatch;
19035
	END LOOP;
19036
 
19037
	CLOSE curPatch;
19038
 
19039
 
19040
 
19041
 
19042
    /* LOG ACTION */
19043
    SELECT pv.PKG_VERSION INTO PatchVersion
19044
      FROM PACKAGE_VERSIONS pv
19045
     WHERE pv.PV_ID = nPatchId;
19046
 
19047
   	Log_Action ( nPvId, 'patch_remove', nUserId,
19048
   			     'Version: '|| PatchVersion );
19049
 
19050
END Remove_Patch;
1374 dpurdie 19051
/
19052
--------------------------------------------------------
19053
--  DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP
19054
--------------------------------------------------------
1373 dpurdie 19055
 
19056
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
19057
	   	  		  								  	   	 sBuildEnvIdList IN VARCHAR2,
19058
														 nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE 
19059
														 ) IS
19060
/* ---------------------------------------------------------------------------
19061
    Last Modified: Rupesh Solanki
19062
	Version: 3.0.1
19063
   --------------------------------------------------------------------------- */
19064
 
19065
   nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();   
19066
   BsId NUMBER;
19067
   HackBsId NUMBER;
19068
 
19069
 
19070
BEGIN
19071
 
19072
   nBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );
19073
 
19074
   -- Delete Current Build Env settings
19075
   DELETE FROM PACKAGE_BUILD_ENV
19076
   WHERE pv_id = nPvId;
19077
 
19078
   -- Delet Current Package Build Info Settings
19079
   DELETE FROM PACKAGE_BUILD_INFO
19080
   WHERE pv_id = nPvId;
19081
 
19082
   -- Reset flag to N
19083
   UPDATE PACKAGE_VERSIONS SET
19084
	   IS_BUILD_ENV_REQUIRED = 'N'
19085
   WHERE PV_ID = nPvId;
19086
 
19087
 
19088
   -- Set new Build Env
19089
   IF NOT sBuildEnvIdList IS NULL THEN
19090
	FOR i IN 1..nBsCollector.COUNT
19091
	LOOP   
19092
 
19093
	BsId := nBsCollector(i);
19094
 
19095
	IF nBuildStandard = 2 THEN
19096
	   IF BsId = 1 THEN
19097
	   	  HackBsId := 11;
19098
	   ELSE
19099
	   	  HackBsId := 12;
19100
	   END IF;
19101
 
19102
   	  -- Insert into PACKAGE_BUILD_ENV
19103
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19104
	  SELECT nPvId AS PV_ID,
19105
	  		 be.BE_ID
19106
	    FROM BUILD_ENVIRONMENTS be
19107
	   WHERE be.BE_ID IN ( HackBsId );
19108
 
19109
   	  -- Insert into PACKAGE_BUILD_INFO
19110
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19111
	  SELECT nPvId AS PV_ID,
19112
	  		 be.BM_ID
19113
	    FROM BUILD_MACHINES be
19114
	   WHERE be.BM_ID IN ( BsId );						 
19115
 
19116
	   -- Set flag to Y
19117
	   UPDATE PACKAGE_VERSIONS SET
19118
		   IS_BUILD_ENV_REQUIRED = 'Y'
19119
	   WHERE PV_ID = nPvId;	
19120
 
19121
 
19122
	ELSE
19123
 
19124
   	  -- Insert into PACKAGE_BUILD_ENV
19125
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19126
	  SELECT nPvId AS PV_ID,
19127
	  		 be.BE_ID
19128
	    FROM BUILD_ENVIRONMENTS be
19129
	   WHERE be.BE_ID IN ( BsId );
19130
 
19131
   	  -- Insert into PACKAGE_BUILD_INFO
19132
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19133
	  SELECT nPvId AS PV_ID,
19134
	  		 be.BM_ID
19135
	    FROM BUILD_MACHINES be
19136
	   WHERE be.BM_ID IN ( BsId );						 
19137
 
19138
	   -- Set flag to Y
19139
	   UPDATE PACKAGE_VERSIONS SET
19140
		   IS_BUILD_ENV_REQUIRED = 'Y'
19141
	   WHERE PV_ID = nPvId;
19142
 
19143
	END IF;  
19144
 
19145
 
19146
	END LOOP;	   
19147
 
19148
   END IF;
19149
 
19150
 
19151
END Set_Package_Build_Env_Temp;
1374 dpurdie 19152
/
19153
--------------------------------------------------------
19154
--  DDL for Procedure UPDATE_RUNTIME_DEPENDENCY
19155
--------------------------------------------------------
1373 dpurdie 19156
 
19157
  CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,
19158
				   	  		  						    NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,
19159
				   	  		  						    SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19160
													    SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,
19161
													    SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,
19162
													    NNuser_id IN NUMBER ) IS
19163
/* ---------------------------------------------------------------------------
19164
    Version: 3.0.1
19165
   --------------------------------------------------------------------------- */
19166
 
19167
    retRTD_ID	NUMBER;
19168
	CURSOR rtd_cur IS
19169
	    SELECT pv.pkg_version, pkg.pkg_name
19170
		  FROM runtime_dependencies rtd,
19171
		       package_versions pv,
19172
			   packages pkg
19173
		 WHERE rtd.rtd_id = pv.pv_id
19174
		   AND pv.pkg_id = pkg.pkg_id
19175
		   AND rtd.pv_id = NNpv_id
19176
		   AND rtd.rtd_id = NNrtd_id;
19177
	   rtd_rec rtd_cur%ROWTYPE;
19178
 
19179
	CURSOR old_rtd_cur IS
19180
	    SELECT pv.pv_id
19181
		  FROM package_versions pv
19182
		 WHERE pv.pkg_id IN ( SELECT rtdpv.pkg_id
19183
		 	   			 	    FROM package_versions rtdpv
19184
							   WHERE rtdpv.pv_id = NNrtd_id )
19185
		   AND pv.pkg_version = SSrtd_version;
19186
	old_rtd_rec old_rtd_cur%ROWTYPE;
19187
 
19188
 
19189
BEGIN
19190
 
19191
    -- Get current runtime dependency details
19192
	OPEN rtd_cur;
19193
    FETCH rtd_cur INTO rtd_rec;
19194
 
19195
 
19196
 
19197
 
19198
	IF rtd_rec.pkg_version != SSrtd_version THEN
19199
           -- Version has changed, hence create new runtime dependency --
19200
	    /* NOTE: You must create new version as updating just a version will affect
19201
		        all packages using this runtime dependency and user does not expect that.
19202
		        It is safer to create new version */
19203
		OPEN old_rtd_cur;
19204
		FETCH old_rtd_cur INTO old_rtd_rec;
19205
 
19206
 
19207
		IF old_rtd_cur%NOTFOUND
19208
		THEN
19209
			-- Version not found, hence Create New version --
19210
    		Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );
19211
 
19212
			-- Update runtime dependency table --
19213
			UPDATE runtime_dependencies SET
19214
				   rtd_id = retRTD_ID,
19215
				   rtd_url = SSrtd_url,
19216
				   rtd_comments = SSrtd_comments
19217
			 WHERE pv_id = NNpv_id
19218
			   AND rtd_id = NNrtd_id;
19219
 
19220
		ELSE
19221
			-- Update runtime dependency table --
19222
			UPDATE runtime_dependencies SET
19223
				   rtd_id = old_rtd_rec.pv_id,
19224
				   rtd_url = SSrtd_url,
19225
				   rtd_comments = SSrtd_comments
19226
			 WHERE pv_id = NNpv_id
19227
			   AND rtd_id = NNrtd_id;
19228
 
19229
		END IF;
19230
 
19231
 
19232
		CLOSE old_rtd_cur;
19233
 
19234
	ELSE
19235
		--  Version has not changed, hence update everithing except	version --
19236
		UPDATE runtime_dependencies SET
19237
			   rtd_url = SSrtd_url,
19238
			   rtd_comments = SSrtd_comments
19239
		 WHERE pv_id = NNpv_id
19240
		   AND rtd_id = NNrtd_id;
19241
 
19242
 
19243
 
19244
	END IF;
19245
 
19246
 
19247
	CLOSE rtd_cur;
19248
 
19249
END Update_Runtime_Dependency;
1374 dpurdie 19250
/
19251
--------------------------------------------------------
19252
--  DDL for Procedure SET_ADVISORY_RIPPLE
19253
--------------------------------------------------------
1373 dpurdie 19254
 
19255
  CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19256
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
19257
											 nUserId IN NUMBER ) IS
19258
/* ---------------------------------------------------------------------------
19259
    Version: 4.0
19260
   --------------------------------------------------------------------------- */
19261
 
19262
BEGIN
19263
 
19264
    -- Set Advisory Ripple Package
19265
    INSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)
19266
	VALUES (nRtagId, nPvId);
19267
 
19268
    /* LOG ACTION */
19269
   	Log_Action ( nPvId, 'set_advisory_ripple', nUserId );
19270
 
19271
	/*Rebuild_Environment(nRtagId);*/
19272
 
19273
END Set_Advisory_Ripple;
1374 dpurdie 19274
/
19275
--------------------------------------------------------
19276
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS
19277
--------------------------------------------------------
1373 dpurdie 19278
 
19279
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
19280
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19281
                                                          NNuser_id IN NUMBER,
19282
                                                          retPV_ID OUT NUMBER,
19283
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
19284
/* ---------------------------------------------------------------------------
19285
    Version: 4.0
19286
   --------------------------------------------------------------------------- */
19287
 
19288
    parPkg_id   NUMBER;
19289
    parPv_id    NUMBER;
19290
    cloneFrom_pv_id NUMBER;
19291
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19292
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19293
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19294
 
19295
    CURSOR packages_cur IS
19296
        SELECT pkg_id FROM PACKAGES
19297
        WHERE pkg_name = SSpkg_name;
19298
    packages_rec packages_cur%ROWTYPE;
19299
 
19300
    CURSOR package_versions_cur IS
19301
        SELECT pv_id FROM PACKAGE_VERSIONS
19302
        WHERE pkg_id = parPkg_id
19303
        AND pkg_version = SSpkg_version;
19304
    package_versions_rec package_versions_cur%ROWTYPE;
19305
 
19306
    CURSOR clone_package_versions_cur IS
19307
        SELECT MAX(pv_id) AS pv_id
19308
          FROM PACKAGE_VERSIONS
19309
         WHERE pkg_id = parPkg_id
19310
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
19311
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
19312
 
19313
BEGIN
19314
    /* -------------------------------------------- */
19315
    /* Find if pkg_name exists and seed if required */
19316
    /* -------------------------------------------- */
19317
    OPEN packages_cur;
19318
    FETCH packages_cur INTO packages_rec;
19319
 
19320
    IF packages_cur%NOTFOUND
19321
    THEN
19322
        /* INSERT into packages table */
19323
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
19324
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
19325
 
19326
    ELSE
19327
        parPkg_id := packages_rec.pkg_id;
19328
 
19329
    END IF;
19330
 
19331
    CLOSE packages_cur;
19332
 
19333
 
19334
 
19335
    /* ---------------------------------------------------- */
19336
    /* Find if package_version exists and seed if required  */
19337
    /* ---------------------------------------------------- */
19338
    OPEN package_versions_cur;
19339
    FETCH package_versions_cur INTO package_versions_rec;
19340
 
19341
    IF package_versions_cur%NOTFOUND
19342
    THEN
19343
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
19344
 
19345
        /* LOG ACTION */
19346
        Log_Action ( parPv_id, 'new_version', NNuser_id,
19347
        			 'New package version: '|| SSpkg_version );
19348
 
19349
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19350
 
19351
        /* Find similar pkg_name + ext to clone from */
19352
        OPEN clone_package_versions_cur;
19353
        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
19354
 
19355
 
19356
        IF NOT clone_package_versions_rec.pv_id IS NULL
19357
        THEN
19358
            /* CLONE details from similar version  OR  from nCloneFromPvId */
19359
			IF ( NOT nCloneFromPvId IS NULL) THEN
19360
            	cloneFrom_pv_id := nCloneFromPvId;
19361
			ELSE
19362
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
19363
			END IF;
19364
 
19365
            -- Clone Package Version Details --
19366
            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,
19367
                                           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  )
19368
                SELECT parPv_id         AS pv_id,
19369
                       parPkg_id        AS pkg_id,
19370
                       SSpkg_version    AS pkg_version,
19371
                       'N'              AS dlocked,
19372
                       Ora_Sysdate      AS created_stamp,
19373
                       NNuser_id        AS creator_id,
19374
                       Ora_Sysdatetime  AS modified_stamp,
19375
                       NNuser_id        AS modifier_id,
19376
                       SSV_MM           AS V_MM,
19377
                       SSV_NMM          AS V_NMM,
19378
                       SSV_EXT          AS V_EXT,
19379
                       pv.src_path,
19380
                       pv.pv_description,
19381
                       pv.PV_OVERVIEW,
19382
                       cloneFrom_pv_id 	AS LAST_PV_ID,
19383
                       pv.owner_id,
19384
					   pv.BUILD_TYPE,
19385
					   pv.IS_BUILD_ENV_REQUIRED,
19386
					   pv.BS_ID,
19387
					   pv.is_autobuildable,
19388
					   pv.IS_DEPLOYABLE, 
19389
					   pv.ripple_field
19390
                  FROM PACKAGE_VERSIONS pv
19391
                 WHERE pv.pv_id = cloneFrom_pv_id;
19392
 
19393
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
19394
 
19395
        ELSE
19396
            /* BRAND NEW version + ext */
19397
            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 )
19398
        	VALUES (
19399
                    parPv_id,
19400
                    parPkg_id,
19401
                    SSpkg_version,
19402
                    'N',
19403
                    Ora_Sysdate,
19404
                    NNuser_id,
19405
                    Ora_Sysdatetime,
19406
                    NNuser_id,
19407
                    SSV_MM,
19408
                    SSV_NMM,
19409
                    SSV_EXT,
19410
                    NNuser_id,
19411
                    parPv_id,
19412
					'M',
19413
					'b'
19414
                   );
19415
 
19416
        END IF;
19417
 
19418
        CLOSE clone_package_versions_cur;
19419
        retPV_ID := parPv_id;
19420
 
19421
    ELSE
19422
        retPV_ID := package_versions_rec.pv_id;
19423
 
19424
    END IF;
19425
 
19426
    CLOSE package_versions_cur;
19427
 
19428
 
19429
 
19430
 
19431
END Seed_Package_Names_Versions;
1374 dpurdie 19432
/
19433
--------------------------------------------------------
19434
--  DDL for Procedure RENAME_PACKAGE_VERSION
19435
--------------------------------------------------------
1373 dpurdie 19436
 
19437
  CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,
19438
                                                     SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19439
													 cBuildType IN CHAR,
19440
                                                     NNuser_id IN NUMBER,
19441
                                                     errMessage OUT VARCHAR2 ) IS
19442
/* ---------------------------------------------------------------------------
19443
    Version: 3.2
19444
   --------------------------------------------------------------------------- */
19445
 
19446
    sPackageVersion VARCHAR2(4000);
19447
	sLabel VARCHAR2(4000) := NULL;
19448
    OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19449
 
19450
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19451
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19452
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19453
 
19454
    CURSOR package_versions_cur IS
19455
        SELECT pv_id
19456
     	  FROM package_versions
19457
     	 WHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )
19458
     	   AND pkg_version = SSpkg_version;
19459
    package_versions_rec package_versions_cur%ROWTYPE;
19460
 
19461
 
19462
BEGIN
19463
 
19464
    /* ---------------------------------------------------- */
19465
    /* Find if package_version exists                       */
19466
    /* ---------------------------------------------------- */
19467
 
19468
	errMessage := NULL;
19469
 
19470
 
19471
	-- Get previous version
19472
	SELECT pv.PKG_VERSION INTO OldPkgVersion
19473
      FROM PACKAGE_VERSIONS pv
19474
     WHERE pv.PV_ID = NNpv_id;
19475
 
19476
 
19477
	sPackageVersion := SSpkg_version;
19478
 
19479
 
19480
	IF OldPkgVersion != sPackageVersion THEN
19481
 
19482
	    OPEN package_versions_cur;
19483
	    FETCH package_versions_cur INTO package_versions_rec;
19484
 
19485
	    IF package_versions_cur%NOTFOUND
19486
	    THEN
19487
 
19488
			-- Split current version in parts
19489
	    	Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19490
 
19491
 
19492
		    -- Automated built config
19493
			IF (cBuildType = 'A') THEN
19494
				sPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT;	-- Make sure that version is still unique
19495
			END IF;
19496
 
19497
 
19498
	        -- Packge version not found, hence rename it.
19499
	        UPDATE package_versions
19500
	           SET pkg_version = sPackageVersion,
19501
	               v_mm = SSV_MM,
19502
	               v_nmm = SSV_NMM,
19503
	               v_ext = SSV_EXT,
19504
	               modified_stamp = ORA_SYSDATETIME,
19505
	               modifier_id = NNuser_id,
19506
				   build_type = cBuildType,
19507
				   pkg_label = NULL
19508
	         WHERE pv_id = NNpv_id;
19509
 
19510
 
19511
			IF (cBuildType = 'A') THEN
19512
				sLabel := GET_AUTOMATED_LABEL( NNpv_id );
19513
				UPDATE PACKAGE_VERSIONS pv SET
19514
					pv.PKG_LABEL = sLabel
19515
		         WHERE pv_id = NNpv_id;
19516
			END IF;
19517
 
19518
			/* LOG ACTION */
19519
	      	Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );
19520
 
19521
	    ELSE
19522
	        -- Package version exists. Cannot proceed.
19523
	        errMessage := 'enum_MSG_VERSION_EXISTS';
19524
 
19525
	    END IF;
19526
 
19527
	    CLOSE package_versions_cur;
19528
 
19529
	END IF;
19530
 
19531
 
19532
 
19533
 
19534
END Rename_Package_Version;
1374 dpurdie 19535
/
19536
--------------------------------------------------------
19537
--  DDL for Procedure PAOLO_BUILD_TREE
19538
--------------------------------------------------------
1373 dpurdie 19539
 
19540
  CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) IS
19541
 
19542
    sessionNumber NUMBER := 0;
19543
    iteration NUMBER := 1; 
19544
    rowCnt NUMBER := 0;
19545
    maxIterations 	NUMBER := 50;
19546
 
19547
BEGIN
19548
 
19549
 
19550
    INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19551
    SELECT sessionNumber, iteration, rc.PV_ID
19552
      FROM RELEASE_CONTENT rc
19553
     WHERE rc.RTAG_ID = nRtag_id;
19554
 
19555
    iteration := iteration + 1;
19556
    LOOP
19557
 
19558
        INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19559
		SELECT sessionNumber,     
19560
               iteration,
19561
               dep.DPV_ID
19562
          FROM TEMP_TREE_BROWSE ttb,
19563
               PACKAGE_DEPENDENCIES dep
19564
         WHERE dep.PV_ID = ttb.PV_ID 
19565
           AND ttb.LEVEL_NUM = iteration - 1 
19566
 
19567
         MINUS  
19568
 
19569
        SELECT sessionNumber, iteration, ttb.PV_ID
19570
          FROM TEMP_TREE_BROWSE ttb;   
19571
 
19572
 
19573
 
19574
 
19575
		rowCnt := SQL%ROWCOUNT;
19576
		IF rowCnt > 0 THEN
19577
           iteration := iteration + 1;
19578
		END IF;
19579
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
19580
    END LOOP; 
19581
 
19582
END PAOLO_Build_Tree;
1374 dpurdie 19583
/
19584
--------------------------------------------------------
19585
--  DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE
19586
--------------------------------------------------------
1373 dpurdie 19587
 
19588
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,
19589
														  pnPv_id IN NUMBER,
19590
					                                      sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,
19591
														  sAcceptanceDate IN VARCHAR2,
19592
														  sAcceptedBy IN NUMBER,
19593
					                                      sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,
19594
														  cUpdateAcceptedStateOnly IN CHAR
19595
					                                     ) IS
19596
/* ---------------------------------------------------------------------------
19597
    Version: 3.0.0
19598
   --------------------------------------------------------------------------- */
19599
 
19600
 
19601
 
19602
BEGIN
19603
	IF cUpdateAcceptedStateOnly = 'Y'
19604
	THEN
19605
		--- Update Accepted State Only ---
19606
		IF ( sAccepted IS NULL )
19607
		THEN
19608
			-- Clear alleptance
19609
			UPDATE UNIT_TESTS SET
19610
		           TEST_ACCEPTED = NULL,
19611
		           ACCEPTANCE_DATE = NULL,
19612
				   ACCEPTED_BY = NULL,
19613
				   REVIEW_COMMENTS = NULL
19614
		     WHERE TEST_ID = pnTest_id
19615
		       AND PV_ID = pnPv_id;
19616
 
19617
	    ELSE
19618
			UPDATE UNIT_TESTS SET
19619
		           TEST_ACCEPTED = sAccepted,
19620
		           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19621
				   ACCEPTED_BY = sAcceptedBy
19622
		     WHERE TEST_ID = pnTest_id
19623
		       AND PV_ID = pnPv_id;
19624
 
19625
		END IF;
19626
 
19627
 
19628
	ELSE
19629
		--- Update Unit Test Acceptance ---
19630
	    UPDATE UNIT_TESTS SET
19631
	           TEST_ACCEPTED = sAccepted,
19632
			   REVIEW_COMMENTS = sReviewComments,
19633
	           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19634
			   ACCEPTED_BY = sAcceptedBy
19635
	     WHERE TEST_ID = pnTest_id
19636
	       AND PV_ID = pnPv_id;
19637
 
19638
	END IF;
19639
 
19640
END Update_Unit_Test_Acceptance;
1374 dpurdie 19641
/
19642
--------------------------------------------------------
19643
--  DDL for Procedure NEW_ADDITIONAL_NOTE
19644
--------------------------------------------------------
1373 dpurdie 19645
 
19646
  CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,
19647
                                                  psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
19648
                                                  psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
19649
                                                  pnUser_id IN NUMBER,
19650
                                                  outErrCode OUT NUMBER
19651
                                                 ) IS
19652
/* ---------------------------------------------------------------------------
19653
    Version: 3.0.0
19654
   --------------------------------------------------------------------------- */
19655
 
19656
    newID NUMBER;
19657
 
19658
	CURSOR an_duplicate_cur IS
19659
        SELECT note_id
19660
          FROM ADDITIONAL_NOTES
19661
         WHERE pv_id = pnPv_id
19662
           AND note_title = psNote_title;
19663
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
19664
 
19665
BEGIN
19666
	outErrCode := -1;		-- Set default return error code to ERROR state
19667
 
19668
	OPEN an_duplicate_cur;
19669
    FETCH an_duplicate_cur INTO an_duplicate_rec;
19670
 
19671
    IF an_duplicate_cur%NOTFOUND
19672
    THEN
19673
		/* No duplicate titles */
19674
		-- Get new ID --
19675
    	SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;
19676
 
19677
		--- Add Additional Note ---
19678
	    INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user  )
19679
	    VALUES (  newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );
19680
		outErrCode := 0;		-- Set return to SUCCESS
19681
	END IF;
19682
 
19683
	CLOSE an_duplicate_cur;
19684
END New_Additional_Note;
1374 dpurdie 19685
/
19686
--------------------------------------------------------
19687
--  DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES
19688
--------------------------------------------------------
1373 dpurdie 19689
 
19690
  CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS
19691
 
19692
/******************************************************************************
19693
   NAME:       INSERT_MULTIPLE_STICKY_NOTES
19694
   PURPOSE:    
19695
 
19696
   REVISIONS:
19697
   Ver        Date        Author           Description
19698
   ---------  ----------  ---------------  ------------------------------------
19699
   1.0        6/12/2006          1. Created this procedure.
19700
 
19701
   NOTES:
19702
 
19703
   Automatically available Auto Replace Keywords:
19704
      Object Name:     INSERT_MULTIPLE_STICKY_NOTES
19705
      Sysdate:         6/12/2006
19706
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
19707
      Username:         (set in TOAD Options, Procedure Editor)
19708
      Table Name:       (set in the "New PL/SQL Object" dialog)
19709
 
19710
******************************************************************************/
19711
 
19712
	CURSOR curInfo IS
19713
    SELECT PV_ID
19714
	FROM PACKAGE_BUILD_ENV
19715
	WHERE BE_ID IN (11, 12);
19716
    recInfo curInfo%ROWTYPE;
19717
 
19718
 
19719
BEGIN
19720
 
19721
	OPEN curInfo;
19722
    FETCH curInfo INTO recInfo;
19723
 
19724
	WHILE curInfo%FOUND
19725
	LOOP
19726
 
19727
		INSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )
19728
		VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );
19729
 
19730
		FETCH curInfo INTO recInfo;
19731
 
19732
	END LOOP;
19733
 
19734
	CLOSE curInfo;
19735
 
19736
 
19737
 
19738
 
19739
END INSERT_MULTIPLE_STICKY_NOTES;
1374 dpurdie 19740
/
19741
--------------------------------------------------------
19742
--  DDL for Procedure TOUCH_RELEASE_BULK
19743
--------------------------------------------------------
1373 dpurdie 19744
 
19745
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS
19746
/* ---------------------------------------------------------------------------
19747
    Version: 3.0
19748
   --------------------------------------------------------------------------- */
19749
 
19750
oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19751
 
19752
BEGIN
19753
	 oRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );
19754
 
19755
	 -- Touch Release for Rebuild
19756
     UPDATE RELEASE_TAGS rt SET
19757
     	rt.REBUILD_ENV = 'Y',
19758
        rt.REBUILD_STAMP = 0
19759
      WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19760
 
19761
 
19762
END Touch_Release_Bulk;
1374 dpurdie 19763
/
19764
--------------------------------------------------------
19765
--  DDL for Procedure UPDATE_DEPRECATION_STATE
19766
--------------------------------------------------------
1373 dpurdie 19767
 
19768
  CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) AS
19769
 
19770
recno NUMBER;
19771
 
19772
CURSOR deprecate_cur IS
19773
 
19774
SELECT rc.pv_id
19775
FROM release_content rc
19776
WHERE rtag_id = nnrtag_id
19777
 AND deprecated_state IN(7);
19778
 
19779
deprecate_rec deprecate_cur % rowtype;
19780
 
19781
BEGIN
19782
 
19783
  OPEN deprecate_cur;
19784
 
19785
  FETCH deprecate_cur
19786
  INTO deprecate_rec;
19787
 
19788
  WHILE deprecate_cur % FOUND
19789
  LOOP
19790
 
19791
    SELECT COUNT(*)
19792
    INTO recno
19793
    FROM package_dependencies pd,
19794
      release_content rc
19795
    WHERE pd.pv_id = deprecate_rec.pv_id
19796
     AND rc.pv_id = pd.dpv_id
19797
     AND rc.rtag_id = nnrtag_id
19798
     AND rc.deprecated_state IN(6,   7);
19799
 
19800
    IF recno = 0 THEN
19801
 
19802
      UPDATE release_content
19803
      SET pkg_id = NULL, deprecated_state = NULL
19804
      WHERE pv_id = deprecate_rec.pv_id
19805
       AND rtag_id = nnrtag_id;
19806
 
19807
    END IF;
19808
 
19809
    FETCH deprecate_cur
19810
    INTO deprecate_rec;
19811
  END LOOP;
19812
 
19813
END;
1374 dpurdie 19814
/
19815
--------------------------------------------------------
19816
--  DDL for Procedure IGNORE_DEPENDENCY_WARNINGS
19817
--------------------------------------------------------
1373 dpurdie 19818
 
19819
  CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,
19820
                                                         nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,
19821
                                                         sIgnoreIdList IN VARCHAR2,
19822
                                                         bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,
19823
                                                         nUserId IN NUMBER DEFAULT NULL ) IS
19824
/* ---------------------------------------------------------------------------
19825
    Updates the ignore warnings table - this is really two functions in one.
19826
 
19827
    1) One function updates the table based on a list of dependent PV_IDs and a parent PV_ID
19828
       and is called from the RM website's SetIgnoreWarnings() function after a user changes
19829
       the ignore warnings checkboxes and submits the form.
19830
       This can (at time of writing this) only be done within releases that are not build
19831
       daemon enabled. The ignore warnings feature is a feature we would like to see the end
19832
       of in an ideal world.
19833
       The SetIgnoreWarnings() website function now calls Touch_Release so there is no need to
19834
       do so in this stored procedure, thereby making this stored procedure much more precise in
19835
       that it only updates the ignore_warnings table (action log table too although that is just
19836
       a log and doesn't affect any subsequent business rules behaviour) and it cares nothing
19837
       about website presentation layer states, etc.
19838
 
19839
    2) The other function updates the table for out of sync dependencies that have in fact
19840
       been satisfied by patches made to some other product in the release.
19841
       This seems to be a seldom used feature in current projects.
19842
       It is probably the most often taken path through this function given that it occurs when
19843
       this function is called from Rebuild_Environment, and that is called in many circumstances
19844
       from the RM website whenever the seems to be a possibility that the state of a package
19845
       in a release might have changed and therefore affects the state of other packages in
19846
       that same release.
19847
 
19848
    Parameter Usage:
19849
                        when called from    | when called from
19850
                        Rebuild_Environment | SetIgnoreWarnings()
19851
                        stored procedure.   | in the Website
19852
      --------------------------------------+----------------------------
19853
      nRtagId           RTAG_ID             | RTAG_ID
19854
      nPvId             NULL                | PV_ID
19855
      sIgnoreIdList     NULL                | list of dependent PV_ID's
19856
      bDoPatchIgnore    TRUE                | FALSE
19857
      nUserId           NULL                | current user ID
19858
   --------------------------------------------------------------------------- */
19859
 
19860
oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19861
ReleaseLocation VARCHAR2(4000);
19862
ActionTypeId NUMBER;
19863
 
19864
BEGIN
19865
 
19866
   IF (NOT bDoPatchIgnore) THEN
19867
      /* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website
19868
      */
19869
      oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );
19870
 
19871
 
19872
      /* Log Action */
19873
      -- Get Release Location
19874
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
19875
        FROM PROJECTS proj,
19876
             RELEASE_TAGS rt
19877
       WHERE rt.PROJ_ID = proj.PROJ_ID
19878
         AND rt.RTAG_ID = nRtagId;
19879
 
19880
      -- Get Action Type Id for IGNORE_ON
19881
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19882
        FROM ACTION_TYPE act
19883
       WHERE act.NAME = 'ignore_on';
19884
 
19885
      -- Get Ignored (Current MINUS Old)
19886
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19887
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19888
        FROM (
19889
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19890
                FROM PACKAGE_VERSIONS pv
19891
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19892
              MINUS
19893
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19894
                FROM IGNORE_WARNINGS igw
19895
               WHERE igw.RTAG_ID = nRtagId
19896
                 AND igw.PV_ID = nPvId
19897
             ) qry,
19898
             PACKAGE_VERSIONS pv,
19899
             PACKAGES pkg,
19900
             RELEASE_CONTENT rc,
19901
             PACKAGE_VERSIONS rpv
19902
       WHERE pv.PKG_ID = pkg.PKG_ID
19903
         AND rc.RTAG_ID = nRtagId
19904
         AND rc.PV_ID = rpv.PV_ID
19905
         AND rpv.PKG_ID = pv.PKG_ID
19906
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19907
         AND qry.DPV_ID = pv.PV_ID;
19908
 
19909
 
19910
      -- Get Action Type Id for IGNORE_OFF
19911
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19912
        FROM ACTION_TYPE act
19913
       WHERE act.NAME = 'ignore_off';
19914
 
19915
      -- Get UnIgnored (Old MINUS Current)
19916
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19917
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19918
        FROM (
19919
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19920
                FROM IGNORE_WARNINGS igw
19921
               WHERE igw.RTAG_ID = nRtagId
19922
                 AND igw.PV_ID = nPvId
19923
              MINUS
19924
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19925
                FROM PACKAGE_VERSIONS pv
19926
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19927
             ) qry,
19928
             PACKAGE_VERSIONS pv,
19929
             PACKAGES pkg,
19930
             RELEASE_CONTENT rc,
19931
             PACKAGE_VERSIONS rpv
19932
       WHERE pv.PKG_ID = pkg.PKG_ID
19933
         AND rc.RTAG_ID = nRtagId
19934
         AND rc.PV_ID = rpv.PV_ID
19935
         AND rpv.PKG_ID = pv.PKG_ID
19936
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19937
         AND qry.DPV_ID = pv.PV_ID;
19938
 
19939
 
19940
      -- Delete Current Ignore Warnings
19941
      DELETE
19942
        FROM IGNORE_WARNINGS igw
19943
       WHERE igw.RTAG_ID = nRtagId
19944
         AND igw.PV_ID = nPvId
19945
         AND igw.IS_PATCH_IGNORE IS NULL;
19946
 
19947
 
19948
      IF (oIgnoreIdCollector.COUNT > 0) THEN
19949
         -- Insert Ignore Warnings
19950
         INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )
19951
         SELECT nRtagId,
19952
                nPvId,
19953
                pv.PV_ID AS DPV_ID
19954
           FROM PACKAGE_VERSIONS pv
19955
          WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19956
      END IF;
19957
 
19958
   ELSE
19959
      /* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */
19960
 
19961
      -- Delete Current Patch Ignore Warnings
19962
      DELETE
19963
        FROM IGNORE_WARNINGS igw
19964
       WHERE igw.RTAG_ID = nRtagId
19965
         AND igw.IS_PATCH_IGNORE = 'Y';
19966
 
19967
 
19968
      -- Delete Manual Ignores that need to be Patch Ignores
19969
      DELETE
19970
        FROM IGNORE_WARNINGS igw
19971
       WHERE ( RTAG_ID, PV_ID, DPV_ID ) IN
19972
             (
19973
              SELECT DISTINCT
19974
                     nRtagId,
19975
                     err.PV_ID,
19976
                     err.ERR_DPV AS DPV_ID
19977
               FROM  (
19978
                      /* Full Release Contents used for reference*/
19979
                      SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
19980
                        FROM release_content rel, package_versions rpv
19981
                       WHERE rel.pv_id = rpv.pv_id
19982
                         AND rtag_id = nRtagId
19983
                     ) frc,
19984
                     (
19985
                      /* DPV_IDs not fount in release*/
19986
                      SELECT dep.pv_id, dep.dpv_id AS err_dpv
19987
                        FROM package_dependencies dep
19988
                       WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19989
                         AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19990
                     ) err,
19991
                     (
19992
                      SELECT DISTINCT pp.PV_ID, dep.DPV_ID
19993
                        FROM PACKAGE_PATCHES pp,
19994
                             PACKAGE_DEPENDENCIES dep,
19995
                             RELEASE_CONTENT rc
19996
                       WHERE rc.RTAG_ID = nRtagId
19997
                         AND rc.PV_ID = pp.PV_ID
19998
                         AND dep.PV_ID = pp.PATCH_ID
19999
                     ) pp,
20000
                     package_versions errpkg,
20001
                     package_versions errpv
20002
               WHERE err.err_dpv = errpv.pv_id
20003
                 AND errpv.pkg_id = frc.pkg_id(+)
20004
                 AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20005
                 AND err.pv_id = errpkg.pv_id
20006
                 AND err.PV_ID = pp.PV_ID
20007
                 AND frc.PV_ID = pp.DPV_ID
20008
             );
20009
 
20010
      /*
20011
      ---------------------------------------------------
20012
      --  Make sure that select statement above and below are same
20013
      ---------------------------------------------------
20014
      */
20015
 
20016
      -- Insert Patch Ignores
20017
      INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )
20018
      SELECT DISTINCT
20019
             nRtagId,
20020
             err.PV_ID,
20021
             err.ERR_DPV AS DPV_ID,
20022
             'Y'
20023
        FROM (
20024
              /* Full Release Contents used for reference*/
20025
              SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
20026
                FROM release_content rel, package_versions rpv
20027
               WHERE rel.pv_id = rpv.pv_id
20028
                 AND rtag_id = nRtagId
20029
             ) frc,
20030
             (
20031
               /* DPV_IDs not fount in release*/
20032
               SELECT dep.pv_id, dep.dpv_id AS err_dpv
20033
                 FROM package_dependencies dep
20034
                WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20035
                  AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20036
             ) err,
20037
             (
20038
              SELECT DISTINCT pp.PV_ID, dep.DPV_ID
20039
                FROM PACKAGE_PATCHES pp,
20040
                     PACKAGE_DEPENDENCIES dep,
20041
                     RELEASE_CONTENT rc
20042
               WHERE rc.RTAG_ID = nRtagId
20043
                 AND rc.PV_ID = pp.PV_ID
20044
                 AND dep.PV_ID = pp.PATCH_ID
20045
             ) pp,
20046
             package_versions errpkg,
20047
             package_versions errpv
20048
       WHERE err.err_dpv = errpv.pv_id
20049
         AND errpv.pkg_id = frc.pkg_id(+)
20050
         AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20051
         AND err.pv_id = errpkg.pv_id
20052
         AND err.PV_ID = pp.PV_ID
20053
         AND frc.PV_ID = pp.DPV_ID;
20054
 
20055
    END IF;
20056
 
20057
END Ignore_Dependency_Warnings;
1374 dpurdie 20058
/
20059
--------------------------------------------------------
20060
--  DDL for Procedure UNDEPRECATE_PACKAGE
20061
--------------------------------------------------------
1373 dpurdie 20062
 
20063
  CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20064
	   	  		  								 nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
20065
	   	  		  							   	 nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
20066
											   	 nUserId IN NUMBER) IS
20067
 
20068
ext VARCHAR2(50);
20069
PvIdList VARCHAR2(32767);
20070
nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
20071
PvId NUMBER;
20072
sComments VARCHAR2(32767);
20073
 
20074
BEGIN
20075
 
20076
 
20077
 
20078
	--Extract the package extension
20079
	SELECT V_EXT into ext 
20080
	FROM PACKAGE_VERSIONS 
20081
	WHERE PV_ID = nPvId;
20082
 
20083
	--SELECT COMMENTS into sComments 
20084
	--FROM DEPRECATED_PACKAGES
20085
	--WHERE RTAG_ID = nRtagId
20086
	--AND V_EXT = ext
20087
	--AND PKG_ID = nPkgId;
20088
 
20089
	--SELECT PV_ID into PvIdList FROM
20090
	--RELEASE_CONTENT WHERE RTAG_ID = nRtagId
20091
	--AND PKG_STATE = 6
20092
	--AND PV_ID NOT IN nPvId;
20093
 
20094
 
20095
	IF ext IS NOT NULL THEN
20096
       -- Undeprecate Package
20097
       DELETE FROM DEPRECATED_PACKAGES 
20098
	   WHERE RTAG_ID = nRtagId 
20099
	   AND PKG_ID = nPkgId
20100
	   AND V_EXT = ext;	
20101
 
20102
		UPDATE RELEASE_CONTENT 
20103
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20104
		WHERE RTAG_ID = nRtagId
20105
		AND PV_ID IN (SELECT PV.PV_ID 
20106
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20107
					  WHERE PKG.PKG_ID = PV.PKG_ID
20108
					  AND PKG.PKG_ID = nPkgId
20109
					  AND PV.V_EXT = ext
20110
					  UNION
20111
					  SELECT DISTINCT
20112
	 	 		  	 		   qry.PV_ID
20113
							        FROM (
20114
									 	  SELECT dep.*,
20115
										  LEVEL AS LEVEL_NUM
20116
										  FROM PACKAGE_DEPENDENCIES dep
20117
	 								START WITH dep.DPV_ID IN ( nPvId )
20118
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20119
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20120
	 								) qry,
20121
									PACKAGES pkg,
20122
									PACKAGE_VERSIONS pv,
20123
									RELEASE_CONTENT rc
20124
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20125
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20126
 
20127
					 );	 
20128
 
20129
	ELSE
20130
       -- Undeprecate Package
20131
       DELETE FROM DEPRECATED_PACKAGES 
20132
	   WHERE RTAG_ID = nRtagId 
20133
	   AND PKG_ID = nPkgId
20134
	   AND V_EXT IS NULL;	
20135
 
20136
		UPDATE RELEASE_CONTENT 
20137
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20138
		WHERE RTAG_ID = nRtagId
20139
		AND PV_ID IN (SELECT PV.PV_ID 
20140
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20141
					  WHERE PKG.PKG_ID = PV.PKG_ID
20142
					  AND PKG.PKG_ID = nPkgId
20143
					  AND PV.V_EXT IS NULL
20144
					  UNION
20145
					  SELECT DISTINCT
20146
	 	 		  	 		   qry.PV_ID
20147
							        FROM (
20148
									 	  SELECT dep.*,
20149
										  LEVEL AS LEVEL_NUM
20150
										  FROM PACKAGE_DEPENDENCIES dep
20151
	 								START WITH dep.DPV_ID IN ( nPvId )
20152
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20153
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20154
	 								) qry,
20155
									PACKAGES pkg,
20156
									PACKAGE_VERSIONS pv,
20157
									RELEASE_CONTENT rc
20158
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20159
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20160
 
20161
					 );	 	   
20162
 
20163
	END IF;
20164
 
20165
	--IF PvIdList IS NOT NULL THEN
20166
 
20167
	 --  nIdCollector := IN_LIST_NUMBER ( PvIdList );
20168
 
20169
	 --  FOR i IN 1..nIdCollector.COUNT
20170
	 --  LOOP
20171
	--	   PvId := nIdCollector(i);
20172
 
20173
 
20174
 
20175
	--		Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );
20176
	--		END LOOP;
20177
	--END IF;
20178
 
20179
	Rebuild_environment(nRtagId);			 
20180
 
20181
 
20182
 
20183
END Undeprecate_Package;
1374 dpurdie 20184
/
20185
--------------------------------------------------------
20186
--  DDL for Procedure REMOVE_PACKAGE_INTEREST
20187
--------------------------------------------------------
1373 dpurdie 20188
 
20189
  CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
20190
	   	  		  								  	nPkgId IN PACKAGES.PKG_ID%TYPE,
20191
												  	nUserId IN NUMBER
20192
	   	  		  									) IS
20193
 
20194
/******************************************************************************
20195
   NAME:       REMOVE_PACKAGE_INTEREST
20196
   PURPOSE:    To remove interest in a given package per project
20197
 
20198
   REVISIONS:
20199
   Ver        Date        Author           Description
20200
   ---------  ----------  ---------------  ------------------------------------
20201
   1.0        12/05/2006  Rupesh Solanki      1. Created this procedure.
20202
 
20203
   NOTES:
20204
 
20205
   Automatically available Auto Replace Keywords:
20206
      Object Name:     REMOVE_PACKAGE_INTEREST
20207
      Sysdate:         12/05/2006
20208
      Date and Time:   12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AM
20209
      Username:         (set in TOAD Options, Procedure Editor)
20210
      Table Name:       (set in the "New PL/SQL Object" dialog)
20211
 
20212
******************************************************************************/
20213
BEGIN
20214
 
20215
	 --Delete from PACKAGE_INTEREST
20216
	 DELETE FROM PACKAGE_INTEREST
20217
	 WHERE PROJ_ID = nProjId
20218
	 AND PKG_ID = nPkgId
20219
	 AND USER_ID = nUserId;
20220
 
20221
END REMOVE_PACKAGE_INTEREST;
1374 dpurdie 20222
/
20223
--------------------------------------------------------
20224
--  DDL for Procedure RELEASE_MANAGER_MAILOUT
20225
--------------------------------------------------------
1373 dpurdie 20226
 
20227
  CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (
20228
  sender      IN VARCHAR2,
20229
  recipient   IN VARCHAR2,
20230
  ccrecipient IN VARCHAR2,
20231
  subject     IN VARCHAR2,
20232
  message     IN VARCHAR2
20233
  ) IS
20234
 
20235
  crlf VARCHAR2(2):= UTL_TCP.CRLF;
20236
  connection utl_smtp.connection;
20237
  mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';
20238
  header VARCHAR2(1000);
20239
 
20240
BEGIN
20241
 
20242
  --
20243
  -- Start the connection.
20244
  --
20245
  connection := utl_smtp.open_connection(mailhost,25);
20246
 
20247
  header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
20248
     'From: '||sender||''||crlf||
20249
  'Subject: '||subject||crlf||
20250
       'To: '||recipient||crlf||
20251
       'CC: '||ccrecipient;
20252
 
20253
  --
20254
  -- Handshake with the SMTP server
20255
  --
20256
  utl_smtp.helo(connection, mailhost);
20257
  utl_smtp.mail(connection, sender);
20258
  utl_smtp.rcpt(connection, recipient);
20259
  utl_smtp.rcpt(connection, ccrecipient);
20260
  utl_smtp.open_data(connection);
20261
  --
20262
  -- Write the header
20263
  --
20264
  utl_smtp.write_data(connection, header);
20265
  --
20266
  -- The crlf is required to distinguish that what comes next is not simply part of the header..
20267
  --
20268
  utl_smtp.write_data(connection, crlf ||message);
20269
  utl_smtp.close_data(connection);
20270
  utl_smtp.quit(connection);
20271
 
20272
EXCEPTION
20273
  WHEN UTL_SMTP.INVALID_OPERATION THEN
20274
    dbms_output.put_line(' Invalid Operation in SMTP transaction.');
20275
  WHEN UTL_SMTP.TRANSIENT_ERROR THEN
20276
    dbms_output.put_line(' Temporary problems with sending email - try again later.');
20277
  WHEN UTL_SMTP.PERMANENT_ERROR THEN
20278
    dbms_output.put_line(' Errors in code for SMTP transaction.');
20279
 
20280
END RELEASE_MANAGER_MAILOUT;
1374 dpurdie 20281
/
20282
--------------------------------------------------------
20283
--  DDL for Procedure SET_PACKAGE_BUILD_ENV
20284
--------------------------------------------------------
1373 dpurdie 20285
 
20286
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
20287
	   	  		  								  	sBuildEnvIdList IN VARCHAR2 ) IS
20288
/* ---------------------------------------------------------------------------
20289
    Last Modified: Rupesh Solanki
20290
	Version: 3.0.1
20291
   --------------------------------------------------------------------------- */
20292
 
20293
 
20294
BEGIN
20295
 
20296
   -- Delete Current Build Env settings
20297
   DELETE FROM PACKAGE_BUILD_ENV
20298
   WHERE pv_id = nPvId;
20299
 
20300
   -- Delet Current Package Build Info Settings
20301
   DELETE FROM PACKAGE_BUILD_INFO
20302
   WHERE pv_id = nPvId;
20303
 
20304
   -- Reset flag to N
20305
   UPDATE PACKAGE_VERSIONS SET
20306
	   IS_BUILD_ENV_REQUIRED = 'N'
20307
   WHERE PV_ID = nPvId;
20308
 
20309
 
20310
   -- Set new Build Env
20311
   IF NOT sBuildEnvIdList IS NULL THEN
20312
   	  -- Insert into PACKAGE_BUILD_ENV
20313
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
20314
	  SELECT nPvId AS PV_ID,
20315
	  		 be.BE_ID
20316
	    FROM BUILD_ENVIRONMENTS be
20317
	   WHERE be.BE_ID IN (
20318
	   		 		  	   SELECT *
20319
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20320
	   		 		  	 );
20321
 
20322
   	  -- Insert into PACKAGE_BUILD_INFO
20323
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
20324
	  SELECT nPvId AS PV_ID,
20325
	  		 be.BM_ID
20326
	    FROM BUILD_MACHINES be
20327
	   WHERE be.BM_ID IN (
20328
	   		 		  	   SELECT *
20329
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20330
	   		 		  	 );						 
20331
 
20332
	   -- Set flag to Y
20333
	   UPDATE PACKAGE_VERSIONS SET
20334
		   IS_BUILD_ENV_REQUIRED = 'Y'
20335
	   WHERE PV_ID = nPvId;
20336
 
20337
   END IF;
20338
 
20339
 
20340
END Set_Package_Build_Env;
1374 dpurdie 20341
/
20342
--------------------------------------------------------
20343
--  DDL for Procedure SHIFT_INSTALL_ORDER
20344
--------------------------------------------------------
1373 dpurdie 20345
 
20346
  CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
20347
												  nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
20348
                                                  nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS
20349
/* ---------------------------------------------------------------------------
20350
    Version: 3.0
20351
   --------------------------------------------------------------------------- */
20352
 
20353
currInstallOrder NUMBER;
20354
FromInstallOrder NUMBER;
20355
 
20356
BEGIN
20357
 
20358
	 -- Get Current Install Order
20359
     SELECT pp.INSTALL_ORDER INTO currInstallOrder
20360
       FROM PACKAGE_PATCHES pp
20361
      WHERE pp.PV_ID = nPvId
20362
        AND pp.PATCH_ID = nPatchId;
20363
 
20364
 
20365
	 IF currInstallOrder > nToInstallOrder
20366
	 THEN
20367
 
20368
		FromInstallOrder := nToInstallOrder;
20369
 
20370
	    -- Shift others Up
20371
		UPDATE PACKAGE_PATCHES pp SET
20372
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER + 1
20373
		 WHERE pp.PV_ID = nPvId
20374
           AND pp.PATCH_ID != nPatchId
20375
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  currInstallOrder - 1;
20376
 
20377
 
20378
	 ELSIF currInstallOrder < nToInstallOrder
20379
	 THEN
20380
 
20381
		FromInstallOrder := currInstallOrder + 1;
20382
 
20383
		-- Shift others Down
20384
        UPDATE PACKAGE_PATCHES pp SET
20385
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER - 1
20386
		 WHERE pp.PV_ID = nPvId
20387
           AND pp.PATCH_ID != nPatchId
20388
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  nToInstallOrder;
20389
 
20390
	 END IF;
20391
 
20392
 
20393
	 -- Move Patch to new install order
20394
     UPDATE PACKAGE_PATCHES pp SET
20395
		    pp.INSTALL_ORDER = nToInstallOrder
20396
	  WHERE pp.PV_ID = nPvId
20397
	    AND pp.PATCH_ID = nPatchId;
20398
 
20399
 
20400
END Shift_Install_Order;
1374 dpurdie 20401
/
20402
--------------------------------------------------------
20403
--  DDL for Procedure NEW_PACKAGE_NAME
20404
--------------------------------------------------------
1373 dpurdie 20405
 
20406
  CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
20407
                                               retPKG_ID OUT NUMBER ) IS
20408
/* ---------------------------------------------------------------------------
20409
    Version: 3.0.0
20410
   --------------------------------------------------------------------------- */
20411
 
20412
    CURSOR packages_cur IS
20413
        SELECT pkg.pkg_id
20414
          FROM packages pkg
20415
         WHERE pkg.pkg_name = SSpkg_name;
20416
    packages_rec packages_cur%ROWTYPE;
20417
 
20418
 
20419
BEGIN
20420
 
20421
    /* ---------------------------------------------------- */
20422
    /* Find if package name exists                          */
20423
    /* ---------------------------------------------------- */
20424
 
20425
    OPEN packages_cur;
20426
    FETCH packages_cur INTO packages_rec;
20427
 
20428
    IF packages_cur%NOTFOUND
20429
    THEN
20430
        -- Create new pkg_name --
20431
        SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;
20432
 
20433
        INSERT INTO packages ( pkg_id, pkg_name )
20434
        VALUES ( retPKG_ID, SSpkg_name );
20435
 
20436
    ELSE
20437
        retPKG_ID := packages_rec.pkg_id;
20438
 
20439
    END IF;
20440
 
20441
 
20442
    CLOSE packages_cur;
20443
 
20444
END New_Package_Name;
1374 dpurdie 20445
/
20446
--------------------------------------------------------
20447
--  DDL for Procedure REMOVE_RUNTIME
20448
--------------------------------------------------------
1373 dpurdie 20449
 
20450
  CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20451
											 nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,
20452
                                             nUserId IN NUMBER ) IS
20453
/* ---------------------------------------------------------------------------
20454
    Version: 3.0
20455
   --------------------------------------------------------------------------- */
20456
 
20457
   RuntimeDependency VARCHAR2(4000);
20458
 
20459
BEGIN
20460
 
20461
	-- Get Runtime dependency
20462
    SELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION  INTO RuntimeDependency
20463
	  FROM RUNTIME_DEPENDENCIES rtd,
20464
	  	   PACKAGES pkg,
20465
	       PACKAGE_VERSIONS pv
20466
	 WHERE rtd.PV_ID = nPvId
20467
	   AND pv.PKG_ID = pkg.PKG_ID
20468
	   AND rtd.RTD_ID = pv.PV_ID
20469
	   AND rtd.RTD_ID = nRuntimeId;
20470
 
20471
 
20472
	-- Delete Document
20473
    DELETE
20474
      FROM RUNTIME_DEPENDENCIES rtd
20475
     WHERE rtd.PV_ID = nPvId
20476
       AND rtd.RTD_ID = nRuntimeId;
20477
 
20478
 
20479
    /* LOG ACTION */
20480
   	Log_Action ( nPvId, 'runtime_remove', nUserId,
20481
   			     'Runtime package: '|| RuntimeDependency );
20482
 
20483
 
20484
END Remove_Runtime;
1374 dpurdie 20485
/
20486
--------------------------------------------------------
20487
--  DDL for Procedure CHANGE_PACKAGE_STATE
20488
--------------------------------------------------------
1373 dpurdie 20489
 
20490
  CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20491
											 nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
20492
/* ---------------------------------------------------------------------------
20493
    Version: 4.0
20494
   --------------------------------------------------------------------------- */
20495
 
20496
BEGIN
20497
 
20498
    -- Unlock Package
20499
    UPDATE RELEASE_CONTENT rc SET
20500
    	rc.PKG_STATE = 0
20501
    WHERE rc.PV_ID = nPvId
20502
	AND rc.RTAG_ID = nRtagId;
20503
 
20504
    /* LOG ACTION */
20505
   /*	Log_Action ( nPvId, 'unlock_package', nUserId );*/
20506
 
20507
END Change_Package_State;
20508
/