Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1374 dpurdie 1
--------------------------------------------------------
2365 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
 
2365 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;
1844
 
1845
      x_vcstypeid                     NUMBER;
1846
      x_tag                           VARCHAR2(32);
1847
      x_label                         VARCHAR2(60);
1848
      x_srcpath                       VARCHAR2(2000);
1374 dpurdie 1849
      p_srcpath                       VARCHAR2(2000);
1373 dpurdie 1850
 
1851
      -- Regular expression constituents
1852
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
1853
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
1854
      BOL           VARCHAR2(4)  := '^';
1855
      Anything      VARCHAR2(4)  := '.*';
1856
      ReplaceToken1 VARCHAR2(4)  := '\1';
1857
      ReplaceToken2 VARCHAR2(4)  := '\2';
1858
      ReplaceToken3 VARCHAR2(4)  := '\3';
1859
      iprev_modifier_id               NUMBER;
1860
 
1861
   BEGIN
1862
      /*--------------- Business Rules Here -------------------*/
1863
      IF (rtagid IS NULL)
1864
      THEN
1865
         raise_application_error (-20000, 'RtagId must be supplied.');
1866
      END IF;
1867
 
1868
      IF (pkgname IS NULL)
1869
      THEN
1870
         raise_application_error (-20000, 'PkgName must be supplied.');
1871
      END IF;
1872
 
1873
      IF (newpkgversion IS NULL)
1874
      THEN
1875
         raise_application_error (-20000, 'PkgVersion must be supplied.');
1876
      END IF;
1877
 
1878
      IF (vcstag IS NULL)
1879
      THEN
1880
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
1881
      END IF;
1882
 
1883
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
1884
      THEN
1885
         raise_application_error
1886
            (-20000,
1887
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
1888
            );
1889
      END IF;
1890
 
1891
      IF (username IS NULL)
1892
      THEN
1893
         raise_application_error (-20000, 'UserName must be supplied.');
1894
      END IF;
1895
 
1896
      -- Parse the PkgVcsTag
1897
      -- Sets up
1898
      --   x_tag, x_label, x_srcpath
1899
 
1900
       BEGIN
1901
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
1902
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
1903
 
1904
          -- Decode the short tag
1905
          CASE x_tag
1906
             WHEN 'CC' THEN
1907
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
1908
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1909
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1910
 
1911
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1912
                -- check for that error as well as the obvious zero-length string conditions.
1913
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1914
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1915
                END IF;
2365 dpurdie 1916
 
1917
                IF isSVNbyName(pkgname) > 0 THEN
1918
                    raise_application_error (-20000, 'Package has been migrated to SVN. Cannot release versions from ClearCase');
1919
                END IF;
1373 dpurdie 1920
 
1921
             WHEN 'SVN' THEN
1922
                -- extract the 2nd token, that being the subversion tag
1374 dpurdie 1923
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1924
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1373 dpurdie 1925
 
1926
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1927
                -- check for that error as well as the obvious zero-length string conditions.
1374 dpurdie 1928
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1373 dpurdie 1929
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1930
                END IF;
1931
 
1932
             WHEN 'UC' THEN
1933
                -- nothing to extract, just assign defaults
1374 dpurdie 1934
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1373 dpurdie 1935
                x_label   := 'N/A';
1936
             ELSE
1937
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
1938
          END CASE;
1939
       END;
1940
 
1941
      -- Get the VCS_TYPE_ID for the version control system.
1942
      BEGIN
1943
         SELECT vt.vcs_type_id
1944
         INTO x_vcstypeid
1945
         FROM VCS_TYPE vt
1946
         WHERE vt.tag = x_tag;
1947
         EXCEPTION
1948
            WHEN NO_DATA_FOUND THEN
1949
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
1950
      END;
1951
 
1952
 
1953
      -- Get user_id
1954
      BEGIN
1955
         SELECT usr.user_id
1956
           INTO userid
1957
           FROM users usr
1958
          WHERE UPPER (usr.user_name) = UPPER (username)
1959
            AND usr.is_disabled IS NULL;
1960
      EXCEPTION
1961
         WHEN NO_DATA_FOUND
1962
         THEN
1963
            raise_application_error (-20000,
1964
                                        'UserName '
1965
                                     || username
1966
                                     || ' is not valid or disabled.'
1967
                                    );
1968
      END;
1969
 
1970
/*-------------------------------------------------------*/
1971
 
1972
      -- Create package if necessary
1973
      IF isrippled = 1
1974
      THEN
1975
         /* Ripple Build */
1976
         BEGIN
1977
            -- Make sure that package does not exist
1978
            SELECT pv.pv_id
1979
              INTO pvid
1980
              FROM package_versions pv, PACKAGES pkg
1981
             WHERE pv.pkg_id = pkg.pkg_id
1982
               AND pkg.pkg_name = pkgname
1983
               AND pv.pkg_version = newpkgversion;
1984
         EXCEPTION
1985
            WHEN NO_DATA_FOUND
1986
            THEN
1987
               pvid := 0;
1988
         END;
1989
 
1990
         IF (pvid = 0)
1991
         THEN
1992
            -- Split current version in parts
1993
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
1994
 
1995
            BEGIN
1374 dpurdie 1996
               -- Find package to be replaced with the ripple package
1373 dpurdie 1997
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
1998
               THEN
1374 dpurdie 1999
                  SELECT pv.pv_id, pv.src_path
2000
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2001
                    FROM PACKAGES pkg, package_versions pv,
2002
                         release_content rc
2003
                   WHERE rc.pv_id = pv.pv_id
2004
                     AND pv.pkg_id = pkg.pkg_id
2005
                     AND rc.rtag_id = rtagid
2006
                     AND pkg.pkg_name = pkgname
2007
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
2008
               ELSE
1374 dpurdie 2009
                  SELECT pv.pv_id, pv.src_path
2010
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2011
                    FROM PACKAGES pkg, package_versions pv,
2012
                         release_content rc
2013
                   WHERE rc.pv_id = pv.pv_id
2014
                     AND pv.pkg_id = pkg.pkg_id
2015
                     AND rc.rtag_id = rtagid
2016
                     AND pkg.pkg_name = pkgname
2017
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2018
               END IF;
2019
            EXCEPTION
2020
               WHEN NO_DATA_FOUND
2021
               THEN
2022
                  raise_application_error
2023
                                        (-20000,
2024
                                            'Cannot get CloneFromPvId. VExt='
2025
                                         || vext
2026
                                         || ', RtagId='
2027
                                         || rtagid
2028
                                         || ', PkgName='
2029
                                         || pkgname
2030
                                         || ', SSV_EXT='
2031
                                         || ssv_ext
2032
                                        );
2033
            END;
2034
 
2035
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2036
            THEN
2037
               -- Create package
2038
               seed_package_names_versions (pkgname,
2039
                                            newpkgversion,
2040
                                            userid,
2041
                                            pvid,
2042
                                            clonefrompvid
2043
                                           );
2044
            ELSE
2045
               -- Create package
2046
               seed_package_names_versions2 (pkgname,
2047
                                             newpkgversion,
2048
                                             userid,
2049
                                             pvid,
2050
                                             clonefrompvid
2051
                                            );
2052
            END IF;
2053
 
2054
            -- Update Package reason for release
2055
            UPDATE package_versions pv
2056
               SET pv.comments = 'Rippled Build.',
2057
                   pv.build_type = 'Y'
2058
             WHERE pv.pv_id = pvid;
2059
         ELSE
2060
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
2061
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
2062
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
2063
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
2064
            UPDATE package_versions pv
2065
               SET pv.release_notes_info = null,
2066
                   pv.modified_stamp = ora_sysdatetime
2067
             WHERE pv.pv_id = pvid;
2068
 
2069
            --DEVI-066151
2070
            log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');
2071
 
2072
            RETURN return_package_already_exists;
2073
         END IF;
2074
      ELSE
2075
         /* Auto build from Pending area */
2076
 
2077
         -- Find package in pending area
2078
         BEGIN
1374 dpurdie 2079
            SELECT pv.pv_id, pv.dlocked, pv.src_path
2080
              INTO pvid, dlocked, p_srcpath
1373 dpurdie 2081
              FROM planned pl, package_versions pv, PACKAGES pkg
2082
             WHERE pl.pv_id = pv.pv_id
2083
               AND pv.pkg_id = pkg.pkg_id
2084
               AND pl.rtag_id = rtagid
2085
               AND pkg.pkg_name = pkgname
2086
               AND pv.dlocked = 'A'
2087
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
2088
               AND rownum = 1
2089
             ORDER BY pv.modified_stamp;
2090
         EXCEPTION
2091
            WHEN NO_DATA_FOUND
2092
            THEN
2093
               pvid := 0;
2094
         END;
2095
 
2096
         IF (pvid = 0)
2097
         THEN
2098
            -- Package does not exist in pending area, hence report it
2099
            RETURN return_package_not_found;
2100
         ELSIF (dlocked != 'A')
2101
         THEN
2102
            -- Package is not approved for autobuild
2103
            RETURN return_not_approved;
2104
         END IF;
1374 dpurdie 2105
 
1373 dpurdie 2106
      END IF;
2107
 
1374 dpurdie 2108
      -- Ensure Source Path does not change
2109
      -- Do not expect the SVN development branch to change
2110
      -- From the previous package
2111
      IF ( x_tag = 'SVN' AND p_srcpath != x_srcpath )
2112
      THEN
2113
        raise_application_error (-20000, 'Source Path does not match (' || p_srcpath || ','|| x_srcpath || ')' );
2114
      END IF;
2115
 
1373 dpurdie 2116
      BEGIN
2117
         -- Import Dependencies
2118
         import_dependencies (pvid, dependenciesimportlist, userid);
2119
      END;
2120
 
2121
 
2122
      BEGIN
2123
         -- Split current version in parts
2124
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2125
 
2126
         -- Update Package Details
2127
         UPDATE package_versions pv
2128
            SET pv.pkg_version = newpkgversion,
2129
                pv.v_ext = ssv_ext,
2130
                pv.v_mm = ssv_mm,
2131
                pv.v_nmm = ssv_nmm,
2132
                pv.src_path = x_srcpath,
2133
                pv.pkg_label = x_label,
2134
                pv.vcs_type_id = x_vcstypeid
2135
          WHERE pv.pv_id = pvid;
2136
      EXCEPTION
2137
         WHEN DUP_VAL_ON_INDEX
2138
         THEN
2139
            -- Package already exists, hence cannot be used for ripple build
2140
            RETURN return_package_already_exists;
2141
      END;
2142
 
2143
      -- Update the is_autobuildable
2144
      UPDATE package_versions
2145
         SET is_autobuildable = 'Y'
2146
       WHERE pv_id = pvid;
2147
 
2148
      -- DEVI-063601
2149
      -- For planned builds the modifier_id shouldn't be set to buildadm.
2150
      -- To ensure this the modifier_id is obtained so it can be restored after
2151
      -- the function pk_environment.auto_make_release is called.
2152
      -- This function calls, change_state, which sets the modifier_id to the
2153
      -- specified userid, which for auto builds is buildadm.
2154
      SELECT pv.modifier_id INTO iprev_modifier_id
2155
      FROM package_versions pv WHERE pv.pv_id = pvid;
2156
 
2157
      -- Now release package
2158
      pk_environment.auto_make_release (pvid,
2159
                                        rtagid,
2160
                                        userid,
2161
                                        vext,
2162
                                        ssv_ext,
2163
                                        clonefrompvid
2164
                                       );
2165
 
2166
      -- DEVI-063601
2167
      -- if it is a planned build then restore the modifier_id to the previous modifier
2168
      UPDATE package_versions pv SET pv.modifier_id = iprev_modifier_id
2169
      WHERE pv.pv_id = pvid;
2170
 
2171
      --Now clean the PLANNED_VERSIONS table
2172
      SELECT pkg_id
2173
        INTO pkgid
2174
        FROM PACKAGES
2175
       WHERE pkg_name = pkgname;
2176
 
2177
      DELETE FROM planned_versions
2178
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
2179
 
2180
      RETURN pvid;
2181
   END;
2182
 
2183
/*-------------------------------------------------------------------------------------------------------*/
2184
   PROCEDURE import_dependencies (
2185
      pvid                     IN   NUMBER,
2186
      dependenciesimportlist   IN   VARCHAR2,
2187
      userid                   IN   NUMBER
2188
   )
2189
   IS
2190
/*
2191
|| DependenciesImportList Format:
2192
|| "pkgA","1.0.0";"pkgB","2.0.0";
2193
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
2194
*/
2195
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
2196
         INDEX BY VARCHAR2 (4000);
2197
 
2198
      seperator         VARCHAR2 (2)           := '||';
2199
      pkgname           VARCHAR2 (4000);
2200
      pkgversion        VARCHAR2 (4000);
2201
      buildtype         VARCHAR2 (50);
2202
      pkgid             NUMBER;
2203
      vext              VARCHAR2 (4000);
2204
      dpvid             NUMBER;
2205
      slist             VARCHAR2 (4000);
2206
      cbuildtypes       tdictionary;
2207
      dependencyrow     NUMBER;
2208
      sdependency       VARCHAR2 (4000);
2209
      first_pos         VARCHAR2 (4000);
2210
      second_pos        VARCHAR2 (4000);
2211
      third_pos         VARCHAR2 (4000);
2212
      forth_pos         VARCHAR2 (4000);
2213
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2214
 
2215
      CURSOR curbuildtype
2216
      IS
2217
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
2218
                dep.build_type
2219
           FROM package_dependencies dep, package_versions dpv
2220
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
2221
 
2222
      recbuildtype      curbuildtype%ROWTYPE;
2223
   BEGIN
2224
      slist := dependenciesimportlist;
2225
 
2226
      -- Preformat String
2227
      IF NOT slist IS NULL
2228
      THEN
2229
         slist := REPLACE (slist, ' ');                      -- Remove spaces
2230
         slist := REPLACE (slist, UTL_TCP.crlf);
2231
         -- Remove new line and carriage-return characters
2232
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
2233
      END IF;
2234
 
2235
      -- Get Current Dependencies
2236
      OPEN curbuildtype;
2237
 
2238
      FETCH curbuildtype
2239
       INTO recbuildtype;
2240
 
2241
      WHILE curbuildtype%FOUND
2242
      LOOP
2243
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
2244
 
2245
         FETCH curbuildtype
2246
          INTO recbuildtype;
2247
      END LOOP;
2248
 
2249
      CLOSE curbuildtype;
2250
 
2251
      -- Separate dependencies with ; separator
2252
      citemcollection := in_list_varchar2 (slist, ';');
2253
 
2254
      BEGIN
2255
         -- Remove old dependencies
2256
         DELETE FROM package_dependencies dep
2257
               WHERE dep.pv_id = pvid;
2258
 
2259
         -- Loop through dependencies
2260
         FOR dependencyrow IN 1 .. citemcollection.COUNT
2261
         LOOP
2262
            -- Extract pkg_name and pkg_version
2263
            sdependency := citemcollection (dependencyrow);
2264
            first_pos := INSTR (sdependency, '"', 1, 1);
2265
            second_pos := INSTR (sdependency, '"', 1, 2);
2266
            third_pos := INSTR (sdependency, '"', 1, 3);
2267
            forth_pos := INSTR (sdependency, '"', 1, 4);
2268
            pkgname :=
2269
               SUBSTR (sdependency,
2270
                       (first_pos + 1),
2271
                       (second_pos - first_pos - 1)
2272
                      );
2273
            pkgversion :=
2274
               SUBSTR (sdependency,
2275
                       (third_pos + 1),
2276
                       (forth_pos - third_pos - 1)
2277
                      );
2278
 
2279
            -- Dependency must exits to be linked against
2280
            BEGIN
2281
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
2282
                 INTO dpvid, pkgid, vext
2283
                 FROM package_versions pv, PACKAGES pkg
2284
                WHERE pv.pkg_id = pkg.pkg_id
2285
                  AND pkg.pkg_name = pkgname
2286
                  AND pv.pkg_version = pkgversion;
2287
            EXCEPTION
2288
               WHEN NO_DATA_FOUND
2289
               THEN
2290
                  raise_application_error
2291
                                  (-20000,
2292
                                      'Dependency ['
2293
                                   || pkgname
2294
                                   || ' '
2295
                                   || pkgversion
2296
                                   || '] does not exist yet and cannot be used!'
2297
                                  );
2298
            END;
2299
 
2300
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
2301
            BEGIN
2302
               buildtype := cbuildtypes (pkgid || seperator || vext);
2303
 
2304
               IF buildtype IS NULL
2305
               THEN
2306
                  -- Set build type to LinkPackageArchive by default
2307
                  buildtype := 'L';
2308
               END IF;
2309
            EXCEPTION
2310
               WHEN NO_DATA_FOUND
2311
               THEN
2312
                  buildtype := 'L';
2313
            END;
2314
 
2315
            -- Insert Dependencies
2316
            update_package_dependency (pvid,
2317
                                       pkgname,
2318
                                       pkgversion,
2319
                                       buildtype,
2320
                                       userid,
2321
 
2322
                                      );
2323
         END LOOP;
2324
      END;
2325
   END;
2326
 
2327
/*-------------------------------------------------------------------------------------------------------*/
2328
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
2329
      RETURN VARCHAR2
2330
   IS
2331
      pkgversion   VARCHAR2 (4000);
2332
   BEGIN
2333
      BEGIN
2334
         SELECT pv.pkg_version
2335
           INTO pkgversion
2336
           FROM PACKAGES pkg, release_content rc, package_versions pv
2337
          WHERE pv.pv_id = rc.pv_id
2338
            AND pkg.pkg_id = pv.pkg_id
2339
            AND pkg.pkg_name = pkgname
2340
            AND rc.rtag_id = rtagid;
2341
 
2342
         RETURN pkgversion;
2343
      END;
2344
   END;
2345
 
2346
/*-------------------------------------------------------------------------------------------------------*/
2347
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
2348
      RETURN VARCHAR2
2349
   IS
2350
      pkgversion   VARCHAR2 (4000);
2351
   BEGIN
2352
      BEGIN
2353
         SELECT pv.pkg_version
2354
           INTO pkgversion
2355
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
2356
          WHERE pv.pv_id = wip.pv_id
2357
            AND pkg.pkg_id = pv.pkg_id
2358
            AND pkg.pkg_name = pkgname
2359
            AND wip.rtag_id = rtagid;
2360
 
2361
         IF pkgversion IS NULL
2362
         THEN
2363
            SELECT pv.pkg_version
2364
              INTO pkgversion
2365
              FROM PACKAGES pkg, planned pl, package_versions pv
2366
             WHERE pv.pv_id = pl.pv_id
2367
               AND pkg.pkg_id = pv.pkg_id
2368
               AND pkg.pkg_name = pkgname
2369
               AND pl.rtag_id = rtagid;
2370
         END IF;
2371
 
2372
         RETURN pkgversion;
2373
      END;
2374
   END;
2375
 
2376
/*-------------------------------------------------------------------------------------------------------*/
2377
   PROCEDURE update_dash_board (rtagid IN NUMBER)
2378
   IS
2379
      projid       NUMBER;
2380
      projiddb     NUMBER;
2381
      total        NUMBER;
2382
      auto_total   NUMBER;
2383
      rtagiddb     NUMBER;
2384
   BEGIN
2385
      SELECT COUNT (*)
2386
        INTO total
2387
        FROM release_content rc, package_versions pv
2388
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
2389
 
2390
      SELECT COUNT (*)
2391
        INTO auto_total
2392
        FROM release_content rc, package_versions pv
2393
       WHERE pv.pv_id = rc.pv_id
2394
         AND pv.is_autobuildable = 'Y'
2395
         AND rc.rtag_id = rtagid;
2396
 
2397
      BEGIN
2398
         SELECT rtag_id
2399
           INTO rtagiddb
2400
           FROM dash_board
2401
          WHERE rtag_id = rtagid;
2402
 
2403
         SELECT proj_id
2404
           INTO projiddb
2405
           FROM dash_board
2406
          WHERE rtag_id = rtagid;
2407
      EXCEPTION
2408
         WHEN NO_DATA_FOUND
2409
         THEN
2410
            rtagiddb := '';
2411
      END;
2412
 
2413
      IF rtagiddb IS NULL
2414
      THEN
2415
         SELECT proj_id
2416
           INTO projid
2417
           FROM release_tags
2418
          WHERE rtag_id = rtagid;
2419
 
2420
         INSERT INTO dash_board
2421
                     (proj_id, rtag_id, last_build_time, automated_packages,
2422
                      total_packages
2423
                     )
2424
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
2425
                      total
2426
                     );
2427
      ELSE
2428
         UPDATE dash_board
2429
            SET last_build_time = ora_sysdatetime,
2430
                automated_packages = auto_total,
2431
                total_packages = total
2432
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
2433
      END IF;
2434
   END;
2435
 
2436
/*-------------------------------------------------------------------------------------------------------*/
2437
   FUNCTION exclude_from_build (
2438
      pvid          IN   NUMBER,
2439
      spkgversion   IN   VARCHAR2,
2440
      rtagid        IN   NUMBER,
2441
      username      IN   VARCHAR2
2442
   )
2443
      RETURN NUMBER
2444
   IS
2445
      userid              NUMBER;
2446
      outerrcode          NUMBER;
2447
      pkgid               NUMBER;
2448
 
2449
      CURSOR dnr_duplicate_cur
2450
      IS
2451
         SELECT *
2452
           FROM do_not_ripple
2453
          WHERE pv_id = pvid AND rtag_id = rtagid;
2454
 
2455
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2456
   BEGIN
2457
      outerrcode := -1;       -- Set default return error code to ERROR state
2458
 
2459
      /*--------------- Business Rules Here -------------------*/
2460
      IF (rtagid IS NULL)
2461
      THEN
2462
         RETURN outerrcode;
2463
--         raise_application_error (-20000, 'RtagId must be supplied.');
2464
      END IF;
2465
 
2466
      IF (pvid IS NULL)
2467
      THEN
2468
         RETURN outerrcode;
2469
--         raise_application_error (-20000, 'PvId must be supplied.');
2470
      END IF;
2471
 
2472
      IF (username IS NULL)
2473
      THEN
2474
         RETURN outerrcode;
2475
--         raise_application_error (-20000, 'UserName must be supplied.');
2476
      END IF;
2477
 
2478
      -- Get user_id
2479
      BEGIN
2480
         SELECT usr.user_id
2481
           INTO userid
2482
           FROM users usr
2483
          WHERE UPPER (usr.user_name) = UPPER (username)
2484
            AND usr.is_disabled IS NULL;
2485
      EXCEPTION
2486
         WHEN NO_DATA_FOUND
2487
         THEN
2488
            RETURN outerrcode;
2489
--            raise_application_error (-20000,
2490
--                                        'UserName '
2491
--                                     || username
2492
--                                     || ' is not valid or disabled.'
2493
--                                    );
2494
      END;
2495
 
2496
      OPEN dnr_duplicate_cur;
2497
 
2498
      FETCH dnr_duplicate_cur
2499
       INTO dnr_duplicate_rec;
2500
 
2501
      IF dnr_duplicate_cur%FOUND
2502
      THEN
2503
         outerrcode := 0;
2504
      END IF;
2505
 
2506
      IF dnr_duplicate_cur%NOTFOUND
2507
      THEN
2508
         /* No duplicate recordset */
2509
         unripple_package (pvid, rtagid, userid);
2510
         outerrcode := 0;                            -- Set return to SUCCESS
2511
      END IF;
2512
 
2513
      CLOSE dnr_duplicate_cur;
2514
 
2515
      SELECT pkg_id
2516
        INTO pkgid
2517
        FROM package_versions
2518
       WHERE pv_id = pvid;
2519
 
2520
      DELETE FROM planned_versions
2521
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2522
 
2523
      RETURN outerrcode;
2524
   END;
2525
 
2526
/*-------------------------------------------------------------------------------------------------------*/
2527
   FUNCTION exclude_indirect_from_build (
2528
      pvid          IN   NUMBER,
2529
      spkgversion   IN   VARCHAR2,
2530
      rtagid        IN   NUMBER,
2531
      username      IN   VARCHAR2,
2532
      rootpvid      IN   NUMBER,
2533
      rootcause     IN   VARCHAR2,
2534
      rootfile      IN   VARCHAR2
2535
   )
2536
      RETURN NUMBER
2537
   IS
2538
      userid              NUMBER;
2539
      outerrcode          NUMBER;
2540
      pkgid               NUMBER;
2541
 
2542
      CURSOR dnr_duplicate_cur
2543
      IS
2544
         SELECT *
2545
           FROM do_not_ripple
2546
          WHERE pv_id = pvid AND rtag_id = rtagid;
2547
 
2548
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2549
   BEGIN
2550
      outerrcode := -1;       -- Set default return error code to ERROR state
2551
 
2552
      /*--------------- Business Rules Here -------------------*/
2553
      IF (rtagid IS NULL)
2554
      THEN
2555
         RETURN outerrcode;
2556
--         raise_application_error (-20000, 'RtagId must be supplied.');
2557
      END IF;
2558
 
2559
      IF (pvid IS NULL)
2560
      THEN
2561
         RETURN outerrcode;
2562
--         raise_application_error (-20000, 'PvId must be supplied.');
2563
      END IF;
2564
 
2565
      IF (username IS NULL)
2566
      THEN
2567
         RETURN outerrcode;
2568
--         raise_application_error (-20000, 'UserName must be supplied.');
2569
      END IF;
2570
 
2571
      -- Get user_id
2572
      BEGIN
2573
         SELECT usr.user_id
2574
           INTO userid
2575
           FROM users usr
2576
          WHERE UPPER (usr.user_name) = UPPER (username)
2577
            AND usr.is_disabled IS NULL;
2578
      EXCEPTION
2579
         WHEN NO_DATA_FOUND
2580
         THEN
2581
            RETURN outerrcode;
2582
--            raise_application_error (-20000,
2583
--                                        'UserName '
2584
--                                     || username
2585
--                                     || ' is not valid or disabled.'
2586
--                                    );
2587
      END;
2588
 
2589
     /* No duplicate recordset */
2590
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
2591
     outerrcode := 0;                            -- Set return to SUCCESS
2592
 
2593
      SELECT pkg_id
2594
        INTO pkgid
2595
        FROM package_versions
2596
       WHERE pv_id = pvid;
2597
 
2598
      DELETE FROM planned_versions
2599
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2600
 
2601
      RETURN outerrcode;
2602
   END;
2603
/*-------------------------------------------------------------------------------------------------------*/
2604
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
2605
   IS
2606
   BEGIN
2607
      INSERT INTO abt_action_log
2608
                  (rcon_id, action_datetime, action
2609
                  )
2610
           VALUES (rconid, ora_sysdatetime, action
2611
                  );
2612
   END;
2613
 
2614
/*-------------------------------------------------------------------------------------------------------*/
2615
   FUNCTION insert_package_metrics (
2616
      rtagid                   IN   NUMBER,
2617
      pkgname                  IN   VARCHAR2,
2618
      vext                     IN   VARCHAR2,
2619
      metricstring             IN   VARCHAR2
2620
   )
2621
      RETURN NUMBER
2622
   IS
2623
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2624
      lv_pvid                  NUMBER                 := 0;
2625
      rownumber                NUMBER;
2626
      rowcontent               VARCHAR2(4000);
2627
      metricname               VARCHAR2(1000);
2628
      metricvalue              VARCHAR2(4000);
2629
      return_insert_error      NUMBER                 := -1;
2630
      return_insert_success    NUMBER                 := 0;
2631
 
2632
      /* Metrics */
2633
      lv_branches                 NUMBER;
2634
      lv_branchlist               VARCHAR2(4000);
2635
      lv_codefiles                NUMBER;
2636
      lv_ignoredfiles             NUMBER;
2637
      lv_directories              NUMBER;
2638
      lv_directorydepth           NUMBER;
2639
      lv_totalfiles               NUMBER;
2640
      lv_makefiles                NUMBER;
2641
      lv_blanklines               NUMBER;
2642
      lv_codelines                NUMBER;
2643
      lv_commentlines             NUMBER;
2644
 
2645
   BEGIN
2646
      /*--------------- Business Rules Here -------------------*/
2647
      IF (rtagid IS NULL)
2648
      THEN
2649
         RETURN return_insert_error;
2650
      END IF;
2651
 
2652
      IF (pkgname IS NULL)
2653
      THEN
2654
         RETURN return_insert_error;
2655
      END IF;
2656
 
2657
      IF (metricstring IS NULL)
2658
      THEN
2659
         RETURN return_insert_error;
2660
      END IF;
2661
 
2662
      BEGIN
2663
         SELECT pv.pv_id
2664
           INTO lv_pvid
2665
           FROM package_versions pv, packages pkg, release_content rc
2666
          WHERE pv.pkg_id = pkg.pkg_id
2667
            AND rc.rtag_id = rtagid
2668
            AND pv.pv_id = rc.pv_id
2669
            AND pkg.pkg_name = pkgname
2670
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2671
      EXCEPTION
2672
           WHEN NO_DATA_FOUND
2673
           THEN
2674
                lv_pvid := 0;
2675
      END;
2676
 
2677
      citemcollection := in_list_varchar2 (metricstring, ';');
2678
 
2679
      FOR rownumber IN 1 .. citemcollection.COUNT
2680
      LOOP
2681
         rowcontent := citemcollection(rownumber);
2682
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
2683
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
2684
 
2685
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
2686
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
2687
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
2688
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
2689
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
2690
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
2691
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
2692
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
2693
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
2694
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
2695
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
2696
         END IF;
2697
      END LOOP;
2698
 
2699
      IF (lv_pvid > 0)
2700
      THEN
2701
         -- Delete any existing entries for this package version to makes sure our data is untainted
2702
         DELETE FROM package_metrics pm
2703
         WHERE pm.pv_id = lv_pvid;
2704
 
2705
         -- Insert the new data into the metrics table
2706
         INSERT INTO package_metrics
2707
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
2708
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
2709
                     )
2710
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
2711
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
2712
                     );
2713
 
2714
         -- Now update the Release_Metrics Table
2715
         update_release_metrics(rtagid);
2716
 
2717
         RETURN return_insert_success;
2718
      ELSE
2719
         RETURN return_insert_error;
2720
      END IF;
2721
   END;
2722
 
2723
/*-------------------------------------------------------------------------------------------------------*/
2724
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
2725
   IS
2726
      lv_totalpackages       NUMBER;
2727
      lv_autobuilt           NUMBER;
2728
      lv_linesofcode         NUMBER;
2729
      lv_unittested          NUMBER;
2730
      lv_autotested          NUMBER;
2731
      lv_numOfbranches       NUMBER;
2732
      lv_lastbuildtime       DATE;
2733
   BEGIN
2734
      IF (rtagid > 0)
2735
      THEN
2736
         -- Get the total number of packages in this release and the number of
2737
         -- those that are autobuilt
2738
         SELECT COUNT (DISTINCT rc.pv_id),
2739
                COUNT (DISTINCT autobuilt_qry.pv_id)
2740
           INTO lv_totalpackages, lv_autobuilt
2741
           FROM release_content rc,
2742
                package_versions pv,
2743
                (
2744
                 SELECT rc.pv_id
2745
                   FROM release_content rc,
2746
                        package_versions pv
2747
                  WHERE pv.is_autobuildable = 'Y'
2748
                    AND pv.pv_id = rc.pv_id
2749
                    AND rc.rtag_id = rtagid
2750
                ) autobuilt_qry
2751
          WHERE pv.pv_id = rc.pv_id
2752
            AND rc.rtag_id = rtagid
2753
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
2754
 
2755
         -- Get the build time of the last package built in this release and the
2756
         -- total number of lines of code
2757
         SELECT MAX(pm.created_stamp),
2758
                SUM(pm.code_lines)
2759
           INTO lv_lastbuildtime, lv_linesofcode
2760
           FROM package_metrics pm, release_content rc
2761
          WHERE pm.pv_id = rc.pv_id
2762
            AND rc.rtag_id = rtagid;
2763
 
2764
         -- Get the number of packages with unit tests in this release and the
2765
         -- number of those that are autotested
2766
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
2767
           FROM unit_tests ut,
2768
                release_content rc
2769
          WHERE ut.pv_id = rc.pv_id
2770
            AND rc.rtag_id = rtagid
2771
        AND ut.test_types_fk != 1;
2772
 
2773
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
2774
          FROM unit_tests ut,
2775
               release_content rc
2776
         WHERE ut.pv_id = rc.pv_id
2777
           AND rc.rtag_id = rtagid
2778
           AND ut.test_types_fk = 7;
2779
 
2780
 
2781
         -- Count the number of unique branches in the packages in this release.
2782
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
2783
--           FROM (
2784
--                SELECT pv_id,
2785
--                       regexp_substr(str, '[^,]+', 1, level) branch,
2786
--                       level lv,
2787
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
2788
--                  FROM (
2789
--                       SELECT pm.pv_id,
2790
--                              ','||pm.branch_list str
2791
--                         FROM package_metrics pm,
2792
--                              release_content rc
2793
--                        WHERE pm.pv_id = rc.pv_id
2794
--                          AND rc.rtag_id = rtagid
2795
--                       )
2796
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
2797
--                )
2798
--          WHERE lv != lg;
2799
 
2800
         UPDATE release_metrics rm
2801
            SET rm.total_packages = lv_totalpackages,
2802
                rm.autobuilt = lv_autobuilt,
2803
                rm.lines_of_code = lv_linesofcode,
2804
                rm.unit_tested = lv_unittested,
2805
                rm.autotested = lv_autotested,
2806
--                rm.branches = lv_numOfbranches,
2807
                rm.last_build_time = lv_lastbuildtime
2808
          WHERE rtag_id = rtagid;
2809
 
2810
         IF (SQL%ROWCOUNT = 0)
2811
         THEN
2812
            INSERT INTO release_metrics
2813
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2814
                         autotested, last_build_time
2815
                        )
2816
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2817
                         lv_autotested, lv_lastbuildtime
2818
                        );
2819
         END IF;
2820
--         IF (SQL%ROWCOUNT = 0)
2821
--         THEN
2822
--            INSERT INTO release_metrics
2823
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2824
--                         autotested, branches, last_build_time
2825
--                        )
2826
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2827
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
2828
--                        );
2829
--         END IF;
2830
--      ELSE
2831
--         raise_application_error (-20000, 'RtagId must be supplied.');
2832
      END IF;
2833
   END;
2834
/*-------------------------------------------------------------------------------------------------------*/
2835
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
2836
   IS
2837
      vcstypeid    NUMBER;
2838
      vcstag       VARCHAR2(32);
2839
      label        VARCHAR2(60);
2840
      srcpath      VARCHAR2(2000);
2841
      vcstypeid_cc NUMBER;
2842
      vcstypeid_uc NUMBER;
2843
   BEGIN
2844
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
2845
      -- what the primary key value is for the ClearCase VCS entry.
2846
      BEGIN
2847
         SELECT vt.vcs_type_id
2848
         INTO vcstypeid_cc
2849
         FROM VCS_TYPE vt
2850
         WHERE vt.tag = 'CC';
2851
         EXCEPTION
2852
            WHEN NO_DATA_FOUND THEN
2853
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
2854
      END;
2855
 
2856
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
2857
      -- what the primary key value is for the Uncontrolled VCS entry.
2858
      BEGIN
2859
         SELECT vt.vcs_type_id
2860
         INTO vcstypeid_uc
2861
         FROM VCS_TYPE vt
2862
         WHERE vt.tag = 'UC';
2863
         EXCEPTION
2864
            WHEN NO_DATA_FOUND THEN
2865
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
2866
      END;
2867
 
2868
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
2869
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
2870
      BEGIN
2871
         SELECT pv.pkg_label, pv.src_path,
2872
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
2873
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
2874
                 ELSE pv.vcs_type_id END) AS vcs_type_id
2875
         INTO label, srcpath, vcstypeid
2876
         FROM PACKAGE_VERSIONS pv
2877
         WHERE pv.pv_id = pvid;
2878
         EXCEPTION
2879
            WHEN NO_DATA_FOUND THEN
2880
               raise_application_error (-20000, 'Package Version Not Found!');
2881
      END;
2882
 
2883
      -- Get the VCS TAG for the VCS_TYPE_ID.
2884
      BEGIN
2885
         SELECT vt.tag
2886
         INTO vcstag
2887
         FROM VCS_TYPE vt
2888
         WHERE vt.vcs_type_id = vcstypeid;
2889
         EXCEPTION
2890
            WHEN NO_DATA_FOUND THEN
2891
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
2892
      END;
2893
 
2894
      -- Return value depending upon which VCS Tag is being used.
2895
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
2896
      CASE vcstag
2897
         WHEN 'CC' THEN
2898
            RETURN vcstag || '::' || srcpath || '::' || label;
2899
         WHEN 'SVN' THEN
1374 dpurdie 2900
            RETURN vcstag || '::' || srcpath || '::' || label;
1373 dpurdie 2901
         ELSE
2902
            RETURN vcstag || '::';
2903
      END CASE;
2904
 
2905
   END;
2906
/*-------------------------------------------------------------------------------------------------------*/
2907
 
1374 dpurdie 2908
/*-------------------------------------------------------------------------------------------------------
2909
Name:        update_vcs_details
2910
Description: Updates the Version Control System (vcs) details specified in the vcstag
2911
             parameter for the specified package version.
2912
             The specified package vcstag is parsed and split into 3 fields:
2913
                vcs type, src path, label
2914
             These fields are then stored for the specified pv_id in the package_versions, table.
2915
             An action is recorded in the action log and provides information for tracking and
2916
             for restoring the previous vcs settings if a recovery is required.
2917
Paramters:
2918
             ipv_id:     Package version identifier
2919
             vcstag:     Full version control tag.
2920
                         Examples:
2921
                             "SVN::AUPERASVN01/DPG_SWBase/tools/trunk::daf_tools_25.1.7027.cr@1234"
2922
                            "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2923
             user_id:    Identifier of the user that is performing this function.
2924
*/
2925
PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)
2926
   IS
2927
      ivcs_type_id   NUMBER;
2928
      svcs_type      VARCHAR2(128);
2929
      ssrc_path      VARCHAR2(512);
2930
      spkg_label     VARCHAR2(512);
2931
      spattern       VARCHAR2(64);
2932
      saction_desc   VARCHAR2(2048);
2933
      old_vcs_type   VARCHAR2(128);
2934
      old_src_path   VARCHAR2(512);
2935
      old_pkg_label  VARCHAR2(512);
2936
      old_pkg_vcstag VARCHAR2(1024);
2937
      i              NUMBER;
2938
      vcount         NUMBER;
2939
   BEGIN
2940
     -- Split vcs tag into fields: vcs type, src path, label
2941
     -- Fields are separated by '::'
2942
     -- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2943
     -- The below regular expression pattern has groups to achieve this.
2944
 
2945
     spattern:= '^([^:]*)::([^:]*)(::(.*))?$';
2946
 
2947
     --As Oracle 10g does not allow REGEXP_SUBSTR to return a group,
2948
     --REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).
2949
     SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type  FROM DUAL;
2950
     SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path  FROM DUAL;
2951
     SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;
2952
 
2953
     -- Validate vcs type
2954
     BEGIN
2955
       SELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);
2956
     EXCEPTION
2957
       WHEN NO_DATA_FOUND THEN
2958
         raise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2959
       --RAISE;
2365 dpurdie 2960
     END;
1374 dpurdie 2961
 
2365 dpurdie 2962
     -- If Clearcase
1374 dpurdie 2963
     IF (ivcs_type_id = 2) THEN
2964
       -- Validate source path
2965
       IF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THEN
2966
         raise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2967
       END IF;
2365 dpurdie 2968
 
1374 dpurdie 2969
       -- Validate label
2970
       -- For clearcase the label must be specified. For subversion it is not required.
2971
       IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THEN
2972
         raise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2973
       END IF;
2974
 
2975
     -- if Subversion
2976
     ELSIF (ivcs_type_id = 23) THEN
2977
       -- general validity
2978
       -- Not as picky as the RM Data entry
2979
       IF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))+$','i') THEN
2980
         raise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2981
       END IF;
2982
 
2983
       -- Validate Tag
2984
       -- May be a Peg or a Label
2985
       IF NOT REGEXP_LIKE(spkg_label,'^@?[0-9]+$','i') THEN
2986
           IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+($|@[0-9]+)','i') THEN
2987
             raise_application_error (-20000, 'Invalid SVN tag:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2988
           END IF;
2989
       END IF;
2990
 
2991
        -- Check for suitable ending
2992
        IF NOT REGEXP_LIKE(ssrc_path,'(\/tags$)|(\/branches\/)|(\/trunk$)','i') THEN
2993
            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 || '"');
2994
        END IF;
2995
 
2996
       -- Check for combined use of tags, branches, trunk or repeats of each
2997
       -- Count occurrences of /tags or /branches/ or /trunk
2998
       vcount:=0;
2999
       i:=1;
3000
       WHILE i > 0 LOOP
3001
         i:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk(\/|$))',i,1,1,'i');
3002
         IF i > 0 THEN
3003
           -- if found then increment count
3004
           vcount:=vcount+1;
3005
           i:=i-1;  -- move index back to "/"
3006
         END IF;
3007
       END LOOP;
3008
 
3009
       IF vcount = 0  THEN
3010
         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 || '"');
3011
       END IF;
3012
 
3013
       IF vcount > 1  THEN
3014
         raise_application_error (-20000, 'Combined use of /trunk, /tags, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
3015
       END IF;
2365 dpurdie 3016
 
3017
 
1374 dpurdie 3018
     END IF;
3019
 
3020
     BEGIN
3021
       -- Get current vcs tag for specified package version
3022
       SELECT pv.src_path, pv.pkg_label, vc.tag as vcs_type
3023
       INTO old_src_path, old_pkg_label, old_vcs_type
3024
       FROM package_versions pv, vcs_type vc
3025
       WHERE pv.pv_id = ipv_id
3026
       AND pv.vcs_type_id = vc.vcs_type_id (+);
3027
 
3028
     EXCEPTION
3029
       WHEN NO_DATA_FOUND THEN
3030
         raise_application_error (-20000, 'Package version not found: ' || ipv_id);
2365 dpurdie 3031
     END;
1374 dpurdie 3032
 
3033
     old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;
3034
     IF (old_pkg_label IS NOT NULL) THEN
3035
       old_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;
3036
     END IF;
3037
 
3038
     -- Create action description
3039
     -- This description will contain the old and new tags.
3040
     -- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.
3041
     -- An example of the action description is below:
3042
     --   OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr
3043
     saction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;
3044
 
3045
     -- Store new vcs details
3046
     UPDATE package_versions SET
3047
       src_path = ssrc_path,
3048
       pkg_label = spkg_label,
3049
       vcs_type_id = ivcs_type_id
3050
     WHERE
3051
       pv_id = ipv_id;
3052
 
3053
     -- Store action in action log so that we can back track and also restore vcs settings if required.
3054
     log_action (ipv_id,'VcsConversion',user_id,saction_desc);
3055
 
3056
   END update_vcs_details;
3057
 
2365 dpurdie 3058
/*-------------------------------------------------------------------------------------------------------
3059
Name:        isSVN
3060
Description: Determine if any of the packages versions are controlled under SVN
3061
			 Intended to be used to prevent users from releasing a package
3062
			 that has been migrated to SVN
3063
 
3064
Paramters:	pkgid:     Package ID
3065
 
3066
Returns:	Number of versions under SVN version control
3067
*/
3068
 
3069
FUNCTION isSVN( pkgid IN NUMBER )
3070
    RETURN NUMBER
3071
    IS
3072
    svncount   NUMBER  := 0;
3073
   BEGIN
3074
        SELECT COUNT(*) INTO svncount FROM PACKAGE_VERSIONS pv WHERE pv.PKG_ID = pkgid AND pv.VCS_TYPE_ID = 23;
3075
        RETURN (svncount);
3076
   END;
3077
 
3078
/*-------------------------------------------------------------------------------------------------------
3079
Name:        isSVNbyName
3080
Description: Determine if any of the packages versions are controlled under SVN
3081
			 Intended to be used to prevent users from releasing a package
3082
			 that has been migrated to SVN
3083
 
3084
Paramters:	pkgname:	Package Name
3085
 
3086
Returns:	Number of versions under SVN version control
3087
*/
3088
 
3089
FUNCTION isSVNbyName( pkgname IN VARCHAR2 )
3090
    RETURN NUMBER
3091
IS
3092
   svncount   NUMBER  := 0;
3093
   BEGIN
3094
        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;
3095
        RETURN (svncount);
3096
   END;
3097
 
3098
   END;
1374 dpurdie 3099
/
3100
--------------------------------------------------------
3101
--  DDL for Package Body PK_BUILDAPI
3102
--------------------------------------------------------
1373 dpurdie 3103
 
3104
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI" 
3105
IS
3106
   /*-------------------------------------------------------------------------------------------------------*/
3107
   PROCEDURE add_product_component (
3108
      npvid           IN   NUMBER,
3109
      sosname         IN   VARCHAR2,
3110
      sorigfilepath   IN   VARCHAR2,
3111
      sfilename       IN   VARCHAR2,
3112
      sdestfilepath   IN   VARCHAR2,
3113
      nbytesize       IN   NUMBER,
3114
      scrccksum       IN   VARCHAR2
3115
   )
3116
   IS
3117
      nosid   NUMBER;
3118
   BEGIN
3119
      /*--------------- Business Rules Here -------------------*/
3120
      -- OS Name Requirements --
3121
      IF (sosname IS NULL)
3122
      THEN
3123
         raise_application_error (-20000, 'OsName cannot be NULL.');
3124
      END IF;
3125
 
3126
      -- File Requirements --
3127
      IF (NOT sfilename IS NULL)
3128
      THEN
3129
         IF (nbytesize IS NULL)
3130
         THEN
3131
            raise_application_error (-20000, 'Byte Size cannot be NULL.');
3132
         ELSIF (scrccksum IS NULL)
3133
         THEN
3134
            raise_application_error (-20000, 'CRC CKSUM cannot be NULL.');
3135
         END IF;
3136
      END IF;
3137
 
3138
      -- Folder Requirements --
3139
      -- No requirements for now.
3140
 
3141
      /*-------------------------------------------------------*/
3142
 
3143
      -- Get OsId
3144
      nosid := get_osid (sosname);
3145
 
3146
      -- Insert component entry
3147
      INSERT INTO product_components
3148
                  (pv_id, os_id, file_path, file_name, destination_path,
3149
                  byte_size, crc_cksum
3150
                  )
3151
         VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,
3152
                  nbytesize, scrccksum
3153
                  );
3154
   EXCEPTION
3155
      WHEN DUP_VAL_ON_INDEX
3156
      THEN
3157
         raise_application_error (-20000,
3158
                                 'Cannot have duplicate product components.'
3159
                                 );
3160
   END;
3161
 
3162
/*-------------------------------------------------------------------------------------------------------*/
3163
   PROCEDURE remove_all_product_components (
3164
      npvid     IN   NUMBER,
3165
      sosname   IN   VARCHAR2
3166
   )
3167
   IS
3168
      nosid   NUMBER;
3169
   BEGIN
3170
/*--------------- Business Rules Here -------------------*/
3171
/*-------------------------------------------------------*/
3172
 
3173
      -- Get OsId
3174
      nosid := get_osid (sosname);
3175
 
3176
      -- Delete component entry
3177
      DELETE FROM product_components pc
3178
            WHERE pc.pv_id = npvid AND pc.os_id = nosid;
3179
   END;
3180
 
3181
/*-------------------------------------------------------------------------------------------------------*/
3182
   FUNCTION get_osid (sosname IN VARCHAR2)
3183
      RETURN NUMBER
3184
   IS
3185
      code   NUMBER;
3186
   BEGIN
3187
      -- Get Platform Code --
3188
      SELECT pf.code
3189
      INTO code
3190
      FROM platforms pf
3191
      WHERE UPPER (pf.NAME) = UPPER (sosname);
3192
 
3193
      RETURN code;
3194
   EXCEPTION
3195
      WHEN NO_DATA_FOUND
3196
      THEN
3197
         raise_application_error
3198
            (-20000,
3199
               'Platform '
3200
            || sosname
3201
            || ' is not valid. It needs to be added to PLATFORMS table in Release Manager.'
3202
            );
3203
         RAISE;
3204
   END;
3205
 
3206
/*-------------------------------------------------------------------------------------------------------
3207
Obsolete - Superseded by update_build_service_info
3208
*/
3209
 
3210
   PROCEDURE update_build_service (
3211
      sdatabaseserver   IN   VARCHAR2,
3212
      swebserver        IN   VARCHAR2,
3213
      smailserver       IN   VARCHAR2,
3214
      smailsender       IN   VARCHAR2,
3215
      sdiskspace        IN   VARCHAR2,
3216
      ssbommanagement   IN   VARCHAR2
3217
   )
3218
   IS
3219
   BEGIN
3220
      UPDATE build_service_config
3221
         SET config = sdatabaseserver
3222
      WHERE service = 'DATABASE SERVER';
3223
 
3224
      UPDATE build_service_config
3225
         SET config = swebserver
3226
      WHERE service = 'WEB SERVER';
3227
 
3228
      UPDATE build_service_config
3229
         SET config = smailserver
3230
      WHERE service = 'MAIL SERVER';
3231
 
3232
      UPDATE build_service_config
3233
         SET config = smailsender
3234
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3235
 
3236
      UPDATE build_service_config
3237
         SET config = sdiskspace
3238
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3239
 
3240
      UPDATE build_service_config
3241
         SET config = ssbommanagement
3242
      WHERE service = 'SBOM MANAGEMENT';
3243
   END;
3244
 
3245
/*-------------------------------------------------------------------------------------------------------*/
3246
   PROCEDURE update_build_service_info (
3247
      sdatabaseserver   IN   VARCHAR2,
3248
      sarchiveserver    IN   VARCHAR2,
3249
      smailserver       IN   VARCHAR2,
3250
      smailsender       IN   VARCHAR2,
3251
      sdiskspace        IN   VARCHAR2,
3252
      ssbommanagement   IN   VARCHAR2
3253
   )
3254
   IS
3255
   BEGIN
3256
      UPDATE build_service_config
3257
         SET config = sdatabaseserver
3258
      WHERE service = 'DATABASE SERVER';
3259
 
3260
      UPDATE build_service_config
3261
         SET config = sarchiveserver
3262
      WHERE service = 'ARCHIVE SERVER';
3263
 
3264
      UPDATE build_service_config
3265
         SET config = smailserver
3266
      WHERE service = 'MAIL SERVER';
3267
 
3268
      UPDATE build_service_config
3269
         SET config = smailsender
3270
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3271
 
3272
      UPDATE build_service_config
3273
         SET config = sdiskspace
3274
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3275
 
3276
      UPDATE build_service_config
3277
         SET config = ssbommanagement
3278
      WHERE service = 'SBOM MANAGEMENT';
3279
   END;
3280
 
3281
 
3282
/*-------------------------------------------------------------------------------------------------------*/
3283
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)
3284
   IS
3285
      gbe_id   NUMBER;
3286
   BEGIN
3287
      -- Get GBE_ID
3288
      SELECT seq_gbe_id.NEXTVAL
3289
      INTO gbe_id
3290
      FROM DUAL;
3291
 
3292
      INSERT INTO gbe_machtype
3293
                  (gbe_id, gbe_value
3294
                  )
3295
         VALUES (gbe_id, sgbevalue
3296
                  );
3297
   END;
3298
 
3299
/*-------------------------------------------------------------------------------------------------------*/
3300
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)
3301
   IS
3302
   BEGIN
3303
      DELETE FROM gbe_machtype
3304
            WHERE gbe_id = ngbe_id;
3305
   END;
3306
 
3307
/*-------------------------------------------------------------------------------------------------------*/
3308
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)
3309
   IS
3310
   BEGIN
3311
      UPDATE gbe_machtype
3312
         SET gbe_value = sgbevalue
3313
      WHERE gbe_id = ngbe_id;
3314
   END;
3315
 
3316
/*-------------------------------------------------------------------------------------------------------*/
3317
  --This function is obsolete.  It was replaced by add_daemon_config. Done for DEVI-046806
3318
   PROCEDURE add_daemon (
3319
      sdaemonhostname   IN   VARCHAR2,
3320
      nrtagid           IN   NUMBER,
3321
      ngbeid            IN   NUMBER,
3322
      sgbebuildfilter   IN   VARCHAR2
3323
   )
3324
   IS
3325
      nrecordnumber   NUMBER;
3326
      nrconid         NUMBER;
3327
   BEGIN
3328
      -- Get RCON_ID
3329
      SELECT seq_rcon_id.NEXTVAL
3330
      INTO nrconid
3331
      FROM DUAL;
3332
 
3333
      SELECT COUNT (*)
3334
      INTO nrecordnumber
3335
      FROM release_config
3336
      WHERE rtag_id = nrtagid;
3337
 
3338
      IF nrecordnumber = 0
3339
      THEN
3340
         INSERT INTO release_config
3341
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3342
                     gbe_id, gbe_buildfilter
3343
                     )
3344
            VALUES (nrconid, nrtagid, sdaemonhostname, 'M',
3345
                     ngbeid, sgbebuildfilter
3346
                     );
3347
      ELSE
3348
         INSERT INTO release_config
3349
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3350
                     gbe_id, gbe_buildfilter
3351
                     )
3352
            VALUES (nrconid, nrtagid, sdaemonhostname, 'S',
3353
                     ngbeid, sgbebuildfilter
3354
                     );
3355
      END IF;
3356
 
3357
      -- A newly configured daemon should initially be paused (DEVI-047277)
3358
      INSERT INTO run_level
3359
                  (rcon_id, pause)
3360
           VALUES (nrconid, 1);
3361
   END;
3362
 
3363
/*-------------------------------------------------------------------------------------------------------*/
3364
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2)
3365
   IS
3366
   BEGIN
3367
      -- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.
3368
      DELETE FROM daemon_action_log
3369
            WHERE rcon_id IN (
3370
                     SELECT *
3371
                     FROM THE
3372
                              (SELECT CAST
3373
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3374
                                          )
3375
                                 FROM DUAL
3376
                              ));
3377
 
3378
      DELETE FROM run_level
3379
            WHERE rcon_id IN (
3380
                     SELECT *
3381
                     FROM THE
3382
                              (SELECT CAST
3383
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3384
                                          )
3385
                                 FROM DUAL
3386
                              ));
3387
 
3388
      DELETE FROM abt_action_log
3389
            WHERE rcon_id IN (
3390
                     SELECT *
3391
                     FROM THE
3392
                              (SELECT CAST
3393
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3394
                                          )
3395
                                 FROM DUAL
3396
                              ));
3397
 
3398
      -- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.
3399
      DELETE FROM release_config
3400
            WHERE rcon_id IN (
3401
                     SELECT *
3402
                     FROM THE
3403
                              (SELECT CAST
3404
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3405
                                          )
3406
                                 FROM DUAL
3407
                              ));
3408
   END;
3409
 
3410
/*-------------------------------------------------------------------------------------------------------*/
3411
  --This function is obsolete.  It was replaced by update_daemon_config for DEVI-046806
3412
   PROCEDURE update_daemon (
3413
      sdaemonhostname   IN   VARCHAR2,
3414
      nrconid           IN   NUMBER,
3415
      ngbeid            IN   NUMBER,
3416
      sgbebuildfilter   IN   VARCHAR2
3417
   )
3418
   IS
3419
   BEGIN
3420
      UPDATE release_config
3421
         SET daemon_hostname = sdaemonhostname,
3422
            gbe_id = ngbeid,
3423
            gbe_buildfilter = sgbebuildfilter
3424
      WHERE rcon_id = nrconid;
3425
   END;
3426
 
3427
/*-------------------------------------------------------------------------------------------------------*/
3428
   PROCEDURE insert_schedule_info (
3429
      dschedulepause     IN   DATE,
3430
      dscheduleresume    IN   DATE,
3431
      crepeat            IN   VARCHAR2,
3432
      cindefinitepause   IN   VARCHAR2
3433
   )
3434
   IS
3435
      nscheduledid   NUMBER;
3436
   BEGIN
3437
      -- Get Next Available Scheduled Id
3438
      SELECT seq_scheduled_id.NEXTVAL
3439
      INTO nscheduledid
3440
      FROM DUAL;
3441
 
3442
      INSERT INTO run_level_schedule
3443
         VALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,
3444
                  cindefinitepause);
3445
   END;
3446
 
3447
/*-------------------------------------------------------------------------------------------------------*/
3448
   PROCEDURE delete_schedule (nscheduleid IN NUMBER)
3449
   IS
3450
   BEGIN
3451
      DELETE FROM run_level_schedule
3452
            WHERE scheduled_id = nscheduleid;
3453
   END;
3454
 
3455
/*-------------------------------------------------------------------------------------------------------*/
3456
   PROCEDURE set_infinite_pause
3457
   IS
3458
      nscheduledid   NUMBER;
3459
   BEGIN
3460
      -- Get Next Available Scheduled Id
3461
      SELECT seq_scheduled_id.NEXTVAL
3462
      INTO nscheduledid
3463
      FROM DUAL;
3464
 
3465
      INSERT INTO run_level_schedule
3466
         VALUES (nscheduledid, NULL, NULL, NULL, 'P');
3467
   END;
3468
 
3469
/*-------------------------------------------------------------------------------------------------------*/
3470
   PROCEDURE set_resume
3471
   IS
3472
   BEGIN
3473
      DELETE FROM run_level_schedule
3474
            WHERE indefinite_pause = 'P';
3475
   END;
3476
 
3477
/*-------------------------------------------------------------------------------------------------------*/
3478
   PROCEDURE delete_out_of_date_schedule
3479
   IS
3480
   BEGIN
3481
      DELETE FROM run_level_schedule
3482
            WHERE scheduled_resume < ora_sysdatetime AND repeat = 0;
3483
   END;
3484
 
3485
/*-------------------------------------------------------------------------------------------------------*/
3486
   PROCEDURE set_daemon_resume (nrconid IN NUMBER)
3487
   IS
3488
   BEGIN
3489
      UPDATE run_level
3490
         SET PAUSE = NULL
3491
      WHERE rcon_id = nrconid;
3492
   END;
3493
 
3494
/*-------------------------------------------------------------------------------------------------------*/
3495
   PROCEDURE set_daemon_pause (nrconid IN NUMBER)
3496
   IS
3497
   BEGIN
3498
      UPDATE run_level
3499
         SET PAUSE = 1
3500
      WHERE rcon_id = nrconid;
3501
   END;
3502
/*-------------------------------------------------------------------------------------------------------*/
3503
   PROCEDURE set_daemon_disable (nrconid NUMBER)
3504
   IS
3505
   BEGIN
3506
      UPDATE run_level
3507
         SET PAUSE = 2
3508
      WHERE rcon_id = nrconid;
3509
   END;
3510
 
3511
/*-------------------------------------------------------------------------------------------------------*/
3512
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)
3513
   IS
3514
   BEGIN
3515
     UPDATE run_level
3516
     SET pause = nstate
3517
     WHERE rcon_id IN
3518
     (SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);
3519
   END;
3520
 
3521
/*-------------------------------------------------------------------------------------------------------*/
3522
   -- inserts a new daemon instruction
3523
   -- This is for use by the Release Manager Website code.
3524
   --
3525
   PROCEDURE insert_daemon_inst
3526
   ( nOp_code IN NUMBER
3527
   , nRtag_id IN NUMBER
3528
   , nPv_id IN NUMBER
3529
   , nSchedDate IN DATE
3530
   , nRepeatSecs IN NUMBER
3531
   , nAddedDate IN DATE
3532
   , nUser_id IN NUMBER
3533
   ) IS
3534
      nInstId   NUMBER;
3535
   BEGIN
3536
      -- Get Next Available Scheduled Id
3537
      SELECT seq_daemon_instruction_id.NEXTVAL
3538
      INTO nInstId
3539
      FROM DUAL;
3540
 
3541
      INSERT INTO Daemon_Instructions
3542
         VALUES (nInstId, nOp_code, nRtag_id,
3543
                  nPv_id, nSchedDate, nRepeatSecs,
3544
                  nAddedDate, nUser_id, '0');
3545
   EXCEPTION
3546
      WHEN DUP_VAL_ON_INDEX
3547
      THEN
3548
         raise_application_error (-20000,
3549
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3550
                                 );
3551
      WHEN OTHERS
3552
      THEN
3553
         raise;
3554
   END insert_daemon_inst;
3555
 
3556
/*-------------------------------------------------------------------------------------------------------*/
3557
   -- Deletes a daemon instruction matching the specified instruction ID
3558
   --
3559
   PROCEDURE del_daemon_inst
3560
   ( nInstId IN NUMBER
3561
   ) IS
3562
 
3563
   BEGIN
3564
      DELETE FROM Daemon_Instructions
3565
      WHERE DAEMON_INSTRUCTIONS_ID = nInstId;
3566
 
3567
   END del_daemon_inst;
3568
 
3569
/*-------------------------------------------------------------------------------------------------------*/
3570
   -- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id
3571
   --
3572
   PROCEDURE del_daemon_inst_by_rtag_pvid(
3573
      nOp_code IN NUMBER,
3574
      nRtag_id IN NUMBER,
3575
      nPv_id IN NUMBER
3576
   ) IS
3577
   BEGIN
3578
      DELETE FROM Daemon_Instructions
3579
      WHERE OP_CODE = nOp_code
3580
      AND RTAG_ID = nRtag_id
3581
      AND PV_ID   = nPv_id;
3582
 
3583
   END del_daemon_inst_by_rtag_pvid;
3584
 
3585
/*-------------------------------------------------------------------------------------------------------*/
3586
   -- Updates a daemon instruction
3587
   -- This is for use by the Release Manager Website code.
3588
   --
3589
   PROCEDURE update_daemon_inst
3590
   ( nInstId IN NUMBER
3591
   , nOp_code IN NUMBER
3592
   , nRtag_id IN NUMBER
3593
   , nPv_id IN NUMBER
3594
   , nSchedDate IN DATE
3595
   , nRepeatSecs IN NUMBER
3596
   , nAddedDate IN DATE
3597
   , nUser_id IN NUMBER
3598
   ) IS
3599
      CURSOR daemon_inst_cur IS
3600
         SELECT *
3601
         FROM daemon_instructions di
3602
         WHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;
3603
 
3604
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3605
 
3606
      exc_inst_removed EXCEPTION;
3607
   BEGIN
3608
      OPEN daemon_inst_cur;
3609
 
3610
      FETCH daemon_inst_cur
3611
      INTO daemon_inst_rec;
3612
 
3613
      IF daemon_inst_cur%FOUND THEN
3614
 
3615
         UPDATE Daemon_Instructions
3616
         SET op_code = nOp_code,
3617
            rtag_id = nRtag_id,
3618
            pv_id   = nPv_id,
3619
            scheduled_datetime = nSchedDate,
3620
            repeat_secs = nRepeatSecs,
3621
            added_datetime = nAddedDate,
3622
            user_id = nUser_id,
3623
            in_progress = '0'
3624
         WHERE daemon_instructions_id = nInstId;
3625
      ELSE
3626
         raise exc_inst_removed;
3627
      END IF;
3628
 
3629
      CLOSE daemon_inst_cur;
3630
   EXCEPTION
3631
      WHEN DUP_VAL_ON_INDEX
3632
      THEN
3633
         raise_application_error (-20000,
3634
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3635
                                 );
3636
      WHEN exc_inst_removed
3637
      THEN
3638
         raise_application_error (-20000,
3639
                                 'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.'
3640
                                 );
3641
      WHEN OTHERS
3642
      THEN
3643
         raise;
3644
   END update_daemon_inst;
3645
 
3646
/*-------------------------------------------------------------------------------------------------------*/
3647
   -- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination
3648
   -- This is for use by the Release Manager Website code.
3649
   --
3650
   FUNCTION daemon_ops_for_rtag_pvid(
3651
      nRtag_id IN NUMBER,
3652
      nPv_id IN NUMBER
3653
   ) RETURN VARCHAR2
3654
   IS
3655
      CURSOR daemon_inst_cur IS
3656
         SELECT di.OP_CODE
3657
         FROM daemon_instructions di
3658
         WHERE di.RTAG_ID = nRtag_id
3659
            AND di.PV_ID = nPv_id;
3660
 
3661
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3662
 
3663
      sRetList VARCHAR2(4000) := '';
3664
 
3665
   BEGIN
3666
      OPEN daemon_inst_cur;
3667
 
3668
      FETCH daemon_inst_cur
3669
      INTO daemon_inst_rec;
3670
 
3671
      WHILE daemon_inst_cur%FOUND
3672
      LOOP
3673
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3674
 
3675
         FETCH daemon_inst_cur
3676
         INTO daemon_inst_rec;
3677
      END LOOP;
3678
 
3679
      CLOSE daemon_inst_cur;
3680
 
3681
      RETURN sRetList;
3682
   END daemon_ops_for_rtag_pvid;
3683
/*-------------------------------------------------------------------------------------------------------*/
3684
   -- Returns a comma-separated list of operation codes found for a given rtag
3685
   -- This is for use by the Release Manager Website code.
3686
   --
3687
   FUNCTION daemon_ops_for_rtag(
3688
      nRtag_id IN NUMBER
3689
   ) RETURN VARCHAR2
3690
   IS
3691
      CURSOR daemon_inst_cur IS
3692
         SELECT di.OP_CODE
3693
         FROM daemon_instructions di
3694
         WHERE di.RTAG_ID = nRtag_id;
3695
 
3696
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3697
 
3698
      sRetList VARCHAR2(4000) := '';
3699
 
3700
   BEGIN
3701
      OPEN daemon_inst_cur;
3702
 
3703
      FETCH daemon_inst_cur
3704
      INTO daemon_inst_rec;
3705
 
3706
      WHILE daemon_inst_cur%FOUND
3707
      LOOP
3708
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3709
 
3710
         FETCH daemon_inst_cur
3711
         INTO daemon_inst_rec;
3712
      END LOOP;
3713
 
3714
      CLOSE daemon_inst_cur;
3715
 
3716
      RETURN sRetList;
3717
   END daemon_ops_for_rtag;
3718
/*-------------------------------------------------------------------------------------------------------*/
3719
   -- Gets a record from the daemon instruction table that can be carried out now and returns the fields
3720
   -- in the record a daemon will need
3721
   -- The Buildtool should use this to find a job to do for a particular release. It should then call
3722
   -- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call
3723
   -- mark_daemon_inst_completed(inst_id) to signal its completion.
3724
   -- Can be called repeatedly to get a full list of all instructions for a release, by passing back in
3725
   -- the instruction ID obtained from the previous call (the 1st call should use 0)
3726
   -- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,
3727
   -- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)
3728
   -- Returns 1 if a record was found, else 0.
3729
   --
3730
   FUNCTION get_daemon_inst(
3731
      nRtag_id IN NUMBER,
3732
      nInst_id IN OUT NUMBER,
3733
      nOp_code IN OUT NUMBER,
3734
      nPv_id OUT NUMBER,
3735
      nUser_id OUT NUMBER,
3736
      nInProgress OUT NUMBER
3737
   ) RETURN NUMBER
3738
   IS
3739
      CURSOR daemon_inst_cur IS
3740
         SELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progress
3741
           FROM daemon_instructions di
3742
          WHERE di.rtag_id = nRtag_id
3743
            AND di.daemon_instructions_id > nInst_id
3744
            AND di.scheduled_datetime <= ora_sysdatetime
3745
            AND ((nOp_code = -1) OR (nOp_code = di.op_code))
3746
            AND rownum <= 1
3747
       ORDER BY di.daemon_instructions_id;
3748
 
3749
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3750
   BEGIN
3751
      OPEN daemon_inst_cur;
3752
 
3753
      FETCH daemon_inst_cur
3754
      INTO daemon_inst_rec;
3755
 
3756
      -- If we found a record, return it.
3757
      IF daemon_inst_cur%FOUND THEN
3758
         nInst_id := daemon_inst_rec.daemon_instructions_id;
3759
         nOp_code := daemon_inst_rec.op_code;
3760
         nPv_id   := daemon_inst_rec.pv_id;
3761
         nUser_id := daemon_inst_rec.user_id;
3762
         IF daemon_inst_rec.in_progress = '1' THEN
3763
            nInProgress := 1;
3764
         ELSE
3765
            nInProgress := 0;
3766
         END IF;
3767
         CLOSE daemon_inst_cur;
3768
         RETURN 1;
3769
      END IF;
3770
 
3771
      CLOSE daemon_inst_cur;
3772
      RETURN 0;
3773
 
3774
   END get_daemon_inst;
3775
/*-------------------------------------------------------------------------------------------------------*/
3776
   -- Marks a daemon instruction as being processed by a daemon
3777
   -- The Buildtool should use this before it embarks on the work the instruction commands
3778
   --
3779
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )
3780
   IS
3781
   BEGIN
3782
      UPDATE Daemon_Instructions
3783
      SET in_progress = '1'
3784
      WHERE daemon_instructions_id = nInstId;
3785
 
3786
   END mark_daemon_inst_in_progress;
3787
 
3788
/*-------------------------------------------------------------------------------------------------------*/
3789
   -- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored
3790
   -- procedure in order to either delete the instruction or update it in the case where it is a repeating
3791
   -- instruction.
3792
   --
3793
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )
3794
   IS
3795
      repSecs NUMBER;
3796
      schedDate  DATE;
3797
 
3798
      CURSOR daemon_inst_cur IS
3799
         SELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDate
3800
         FROM daemon_instructions di
3801
         WHERE di.daemon_instructions_id = nInstId;
3802
 
3803
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3804
   BEGIN
3805
      OPEN daemon_inst_cur;
3806
 
3807
      FETCH daemon_inst_cur
3808
      INTO daemon_inst_rec;
3809
 
3810
      IF daemon_inst_cur%FOUND THEN
3811
 
3812
         -- if instruction repeats daily, add 1 day to the scheduled time and update the record
3813
         IF daemon_inst_rec.repSecs = 86400 THEN
3814
            UPDATE Daemon_Instructions
3815
               SET scheduled_datetime = daemon_inst_rec.schedDate + 1,
3816
                  in_progress = '0'
3817
            WHERE daemon_instructions_id = nInstId;
3818
         ELSE
3819
            -- Delete the daemon instruction, we are done with it
3820
            del_daemon_inst(nInstId);
3821
         END IF;
3822
      END IF;
3823
 
3824
      CLOSE daemon_inst_cur;
3825
 
3826
   EXCEPTION
3827
      WHEN OTHERS
3828
      THEN
3829
         raise;
3830
 
3831
   END mark_daemon_inst_completed;
3832
/*-------------------------------------------------------------------------------------------------------*/
3833
   -- This function deletes any old daemon instruction that appears stranded due to a problem that might
3834
   -- have occured during buildtool operation such as might occur if the buildtool or the machine it was
3835
   -- hosted on came down whilst it was processing a daemon instruction.
3836
   PROCEDURE cleanup_stranded_daemon_insts
3837
   IS
3838
   BEGIN
3839
      -- delete records at least two days old
3840
      DELETE FROM daemon_instructions di
3841
      WHERE  (di.scheduled_datetime + 5) <= ora_sysdatetime;
3842
 
3843
   END cleanup_stranded_daemon_insts;
3844
/*-------------------------------------------------------------------------------------------------------*/
3845
  --This function supersedes function, add_daemon. Done for DEVI-046806
3846
   PROCEDURE add_daemon_config (
3847
      nrtagid           IN   NUMBER,
3848
      nbmcon_id         IN   NUMBER,
3849
      sdaemon_mode      IN   VARCHAR2,
3850
      sgbebuildfilter   IN   VARCHAR2
3851
   )
3852
   IS
3853
      nrecordnumber   NUMBER;
3854
      nrconid         NUMBER;
3855
      sdaemonhostname VARCHAR2(50);
3856
      ngbeid         NUMBER;
3857
   BEGIN
3858
      -- Get RCON_ID
3859
      SELECT seq_rcon_id.NEXTVAL
3860
      INTO nrconid
3861
      FROM DUAL;
3862
 
3863
      SELECT COUNT (*)
3864
      INTO nrecordnumber
3865
      FROM release_config
3866
      WHERE rtag_id = nrtagid;
3867
 
3868
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3869
      FROM build_machine_config
3870
      WHERE bmcon_id = nbmcon_id;
3871
 
3872
      INSERT INTO release_config
3873
             (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3874
                gbe_id, gbe_buildfilter)
3875
      VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,
3876
                ngbeid, sgbebuildfilter);
3877
 
3878
      -- A newly configured daemon should initially be paused (DEVI-047277)
3879
      INSERT INTO run_level
3880
                  (rcon_id, pause)
3881
           VALUES (nrconid, 2);
3882
 
3883
   END;
3884
 
3885
/*-------------------------------------------------------------------------------------------------------*/
3886
  --This function supersedes function, update_daemon. Done for DEVI-046806
3887
   PROCEDURE update_daemon_config (
3888
      nrconid           IN   NUMBER,
3889
      nbmcon_id         IN   NUMBER,
3890
      sdaemon_mode      IN   VARCHAR2,
3891
      sgbebuildfilter   IN   VARCHAR2
3892
   )
3893
   IS
3894
      sdaemonhostname VARCHAR2(50);
3895
      ngbeid         NUMBER;
3896
   BEGIN
3897
 
3898
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3899
      FROM build_machine_config
3900
      WHERE bmcon_id = nbmcon_id;
3901
 
3902
      UPDATE release_config
3903
         SET daemon_hostname = sdaemonhostname,
3904
            gbe_id = ngbeid,
3905
            daemon_mode = sdaemon_mode,
3906
            gbe_buildfilter = sgbebuildfilter
3907
      WHERE rcon_id = nrconid;
3908
   END;
3909
 
3910
 
3911
/*-------------------------------------------------------------------------------------------------------*/
3912
   PROCEDURE add_build_machine (
3913
      sdisplay_name          IN   VARCHAR2,
3914
      smachine_hostname      IN   VARCHAR2,
3915
      ngbeid                 IN   NUMBER,
3916
      sdescription           IN   VARCHAR2
3917
   )
3918
   IS
3919
      nrecordnumber   NUMBER;
3920
      nbmcon_id       NUMBER;
3921
   BEGIN
3922
      -- Get BMCON_ID
3923
      SELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;
3924
 
3925
      INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)
3926
            VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);
3927
 
3928
   EXCEPTION
3929
      WHEN DUP_VAL_ON_INDEX
3930
      THEN
3931
         raise_application_error (-20000,
3932
                                 'Cannot have duplicate machines.'
3933
                                 );
3934
 
3935
   END;
3936
 
3937
/*-------------------------------------------------------------------------------------------------------*/
3938
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)
3939
   IS
3940
   BEGIN
3941
      DELETE FROM build_machine_config
3942
            WHERE bmcon_id IN (
3943
                     SELECT * FROM THE
3944
                              (SELECT CAST
3945
                                          (in_list_number (sbmcon_id_list) AS relmgr_number_tab_t
3946
                                          )
3947
                                 FROM DUAL
3948
                              ));
3949
   END;
3950
 
3951
 
3952
/*-------------------------------------------------------------------------------------------------------*/
3953
   PROCEDURE update_build_machine (
3954
      nbmcon_id              IN   NUMBER,
3955
      sdisplay_name          IN   VARCHAR2,
3956
      smachine_hostname      IN   VARCHAR2,
3957
      ngbeid                 IN   NUMBER,
3958
      sdescription           IN   VARCHAR2
3959
   )
3960
   IS
3961
   BEGIN
3962
      UPDATE build_machine_config
3963
         SET display_name = sdisplay_name,
3964
             machine_hostname = smachine_hostname,
3965
             gbe_id = ngbeid,
3966
             description = sdescription
3967
      WHERE bmcon_id = nbmcon_id;
3968
   EXCEPTION
3969
      WHEN DUP_VAL_ON_INDEX
3970
      THEN
3971
         raise_application_error (-20000,
3972
                                 'Cannot have duplicate machines.'
3973
                                 );
3974
   END;
3975
END pk_buildapi;
1374 dpurdie 3976
/
3977
--------------------------------------------------------
3978
--  DDL for Package Body PK_PACKAGE
3979
--------------------------------------------------------
1373 dpurdie 3980
 
3981
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE" 
3982
IS
3983
   /*-------------------------------------------------------------------------------------------------------*/
3984
   PROCEDURE new_version (
3985
      nlastpvid                   IN       NUMBER,
3986
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
3987
      cbuildtype                  IN       CHAR,
3988
      nsettopvid                  IN       NUMBER DEFAULT NULL,
3989
      nrtagid                     IN       NUMBER,
3990
      nuserid                     IN       NUMBER,
3991
      enumissues_state_imported   IN       NUMBER,
3992
      returnpvid                  OUT      NUMBER
3993
   )
3994
   IS
3995
      origpkg_id                  package_versions.pkg_id%TYPE;
3996
      origdlocked                 package_versions.dlocked%TYPE;
3997
      ssv_mm                      package_versions.v_mm%TYPE;
3998
      ssv_nmm                     package_versions.v_nmm%TYPE;
3999
      ssv_ext                     package_versions.v_ext%TYPE;
4000
      spackageversion             VARCHAR2 (4000);
4001
      nissuestypes                NUMBER;
4002
      nviewid                     NUMBER;
4003
      reccount                    NUMBER;
4004
      isreleased                  package_versions.dlocked%TYPE := 'N';
4005
      slabel                      VARCHAR2 (4000)               := NULL;
4006
 
4007
      CURSOR package_versions_cur
4008
      IS
4009
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
4010
           FROM package_versions pv
4011
          WHERE pv.pkg_version = snewpkgversion
4012
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
4013
                                         FROM package_versions origpv
4014
                                        WHERE origpv.pv_id = nlastpvid);
4015
 
4016
      package_versions_rec package_versions_cur%ROWTYPE;
4017
 
4018
      CURSOR clone_package_versions_cur
4019
      IS
4020
         SELECT DISTINCT pkg_id, dlocked
4021
                    FROM package_versions
4022
                   WHERE pv_id = nlastpvid;
4023
 
4024
      clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
4025
   BEGIN
4026
      spackageversion := snewpkgversion;
4027
 
4028
      IF nsettopvid IS NULL
4029
      THEN
4030
         -- SetToPv_id is not supplied, hence proceed.
4031
 
4032
         /* ---------------------------------------------------- */
4033
         /* Find id package_version exists                       */
4034
         /* ---------------------------------------------------- */
4035
         OPEN package_versions_cur;
4036
 
4037
         FETCH package_versions_cur
4038
          INTO package_versions_rec;
4039
 
4040
         IF package_versions_cur%NOTFOUND
4041
         THEN
4042
            ---  Create brand new package ---
4043
            SELECT seq_pv_id.NEXTVAL
4044
              INTO returnpvid
4045
              FROM DUAL;
4046
 
4047
            -- Split Version to get extention + other
4048
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
4049
 
4050
            -- Get previous package to clone from
4051
            OPEN clone_package_versions_cur;
4052
 
4053
            FETCH clone_package_versions_cur
4054
             INTO clone_package_versions_rec;
4055
 
4056
            origpkg_id := clone_package_versions_rec.pkg_id;
4057
            origdlocked := clone_package_versions_rec.dlocked;
4058
 
4059
            CLOSE clone_package_versions_cur;
4060
 
4061
            -- Automated built config
4062
            IF (cbuildtype = 'A')
4063
            THEN
4064
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
4065
               -- Make sure that version is still unique
4066
            END IF;
4067
 
4068
            -- Clone Package Version Details --
4069
            INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,
4070
                                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
4071
                                         v_ext, src_path, pv_description, pv_overview,
4072
                                         last_pv_id, owner_id, is_deployable,
4073
                                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
4074
                 SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
4075
                        spackageversion AS pkg_version, 'N' AS dlocked,
4076
                        ora_sysdate AS created_stamp, nuserid AS creator_id,
4077
                        ora_sysdatetime AS modified_stamp,
4078
                        nuserid AS modifier_id, ssv_mm AS v_mm,
4079
                        ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
4080
                        pv.pv_description, pv.pv_overview,
4081
                        nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
4082
                        pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
4083
                   FROM package_versions pv
4084
                  WHERE pv.pv_id = nlastpvid;
4085
 
4086
            -- Set Issues Type for cloning ---
4087
            IF origdlocked = 'Y'
4088
            THEN
4089
               nissuestypes := enumissues_state_imported;
4090
            ELSE
4091
               nissuestypes := NULL;
4092
            END IF;
4093
 
4094
            -- Update Label for automated built
4095
            IF (cbuildtype = 'A')
4096
            THEN
4097
               slabel := get_automated_label (returnpvid);
4098
 
4099
               UPDATE package_versions pv
4100
                  SET pv.pkg_label = slabel
4101
                WHERE pv.pv_id = returnpvid;
4102
            END IF;
4103
 
4104
            basic_clone (nlastpvid,
4105
                         returnpvid,
4106
                         nrtagid,
4107
                         nuserid,
4108
                         origpkg_id,
4109
                         nissuestypes
4110
                        );
4111
         ELSE
4112
            --- Package already exists, hence reuse ---
4113
            returnpvid := package_versions_rec.pv_id;
4114
            isreleased := package_versions_rec.dlocked;
4115
         END IF;
4116
 
4117
         CLOSE package_versions_cur;
4118
      ELSE
4119
         returnpvid := nsettopvid;
4120
      END IF;
4121
   END new_version;
4122
 
4123
/*-------------------------------------------------------------------------------------------------------*/
4124
   PROCEDURE change_state (
4125
      pvid       IN   NUMBER,
4126
      newstate   IN   package_versions.dlocked%TYPE,
4127
      userid     IN   NUMBER
4128
   )
4129
   IS
4130
   BEGIN
4131
      -- Set package in Released mode
4132
      UPDATE package_versions pv
4133
         SET pv.dlocked = newstate,
4134
             pv.modified_stamp = ora_sysdatetime,
4135
             pv.modifier_id = userid
4136
       WHERE pv.pv_id = pvid;
4137
 
4138
      -- Log action --
4139
      IF newstate = 'Y'
4140
      THEN
4141
         -- RELEASED --
4142
         log_action (pvid,
4143
                     'makeofficial',
4144
                     userid,
4145
                     'Package state change to: Released'
4146
                    );
4147
      ELSIF newstate = 'N'
4148
      THEN
4149
         -- UNLOCKED --
4150
         log_action (pvid,
4151
                     'makeunofficial',
4152
                     userid,
4153
                     'Package state change to: Ulocked'
4154
                    );
4155
      ELSIF newstate = 'P'
4156
      THEN
4157
         -- PENDING APPROVAL --
4158
         log_action (pvid,
4159
                     'add_to_planned',
4160
                     userid,
4161
                     'Package state change to: Pending Approval'
4162
                    );
4163
      ELSIF newstate = 'R'
4164
      THEN
4165
         -- REJECTED --
4166
         log_action (pvid,
4167
                     'reject_package',
4168
                     userid,
4169
                     'Package state change to: Rejected'
4170
                    );
4171
      ELSIF newstate = 'A'
4172
      THEN
4173
         -- APPROVED --
4174
         log_action (pvid,
4175
                     'approve_package',
4176
                     userid,
4177
                     'Package state change to: Approved'
4178
                    );
4179
      END IF;
4180
   END;
4181
 
4182
/*-------------------------------------------------------------------------------------------------------*/
4183
   PROCEDURE destroy_package (
4184
      pvid               IN       NUMBER,
4185
      overridewarnings   IN       CHAR DEFAULT 'N',
4186
      problemstring      OUT      VARCHAR2
4187
   )
4188
   IS
4189
      LOCKED     CHAR;
4190
      pkgid      NUMBER;
4191
      ROWCOUNT   NUMBER;
4192
   BEGIN
4193
      /*
4194
      || This will destroy all package details from database.
4195
      || It will only be used to remove unwanted work in progress packages,
4196
      || or mestaken versions
4197
      */
4198
 
4199
      /*--------------- Business Rules Here -------------------*/
4200
      problemstring := NULL;
4201
 
4202
      IF overridewarnings = 'N'
4203
      THEN
4204
         -- Package must not be official
4205
         SELECT pv.dlocked
4206
           INTO LOCKED
4207
           FROM package_versions pv
4208
          WHERE pv.pv_id = pvid;
4209
 
4210
         IF LOCKED = 'Y'
4211
         THEN
4212
            problemstring :=
4213
                  problemstring
4214
               || '- Package is locked and released.'
4215
               || UTL_TCP.crlf;
4216
         END IF;
4217
 
4218
         -- Cannot remove if used in BOMs
4219
         SELECT COUNT (osc.prod_id)
4220
           INTO ROWCOUNT
4221
           FROM deployment_manager.os_contents osc
4222
          WHERE osc.prod_id = pvid;
4223
 
4224
         IF ROWCOUNT > 0
4225
         THEN
4226
            problemstring :=
4227
                  problemstring
4228
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
4229
               || UTL_TCP.crlf;
4230
         END IF;
4231
 
4232
         -- Cannot remove if Referenced as build dependency
4233
         SELECT COUNT (dep.pv_id)
4234
           INTO ROWCOUNT
4235
           FROM package_dependencies dep
4236
          WHERE dep.dpv_id = pvid;
4237
 
4238
         IF ROWCOUNT > 0
4239
         THEN
4240
            problemstring :=
4241
                  problemstring
4242
               || '- Package is referenced by other package as build dependency.'
4243
               || UTL_TCP.crlf;
4244
         END IF;
4245
 
4246
         -- Cannot remove if Referenced as runtime dependency
4247
         SELECT COUNT (rd.pv_id)
4248
           INTO ROWCOUNT
4249
           FROM runtime_dependencies rd
4250
          WHERE rd.rtd_id = pvid;
4251
 
4252
         IF ROWCOUNT > 0
4253
         THEN
4254
            problemstring :=
4255
                  problemstring
4256
               || '- Package is referenced by other package as runtime dependency.'
4257
               || UTL_TCP.crlf;
4258
         END IF;
4259
 
4260
         -- Cannot remove if Referenced as patch
4261
         SELECT COUNT (pp.pv_id)
4262
           INTO ROWCOUNT
4263
           FROM package_patches pp
4264
          WHERE pp.patch_id = pvid;
4265
 
4266
         IF ROWCOUNT > 0
4267
         THEN
4268
            problemstring :=
4269
                  problemstring
4270
               || '- Package is used as patch by other package.'
4271
               || UTL_TCP.crlf;
4272
         END IF;
4273
      END IF;
4274
 
4275
/*-------------------------------------------------------*/
4276
      IF (problemstring IS NULL)
4277
      THEN
4278
         --- Remove From Work in Progress
4279
         DELETE FROM work_in_progress wip
4280
               WHERE wip.pv_id = pvid;
4281
 
4282
         --- Remove From Pending
4283
         DELETE FROM planned pl
4284
               WHERE pl.pv_id = pvid;
4285
 
4286
         --- Remove From Released area
4287
         DELETE FROM release_content rc
4288
               WHERE rc.pv_id = pvid;
4289
 
4290
         ---Remove From Package Processes
4291
         DELETE FROM package_processes pp
4292
               WHERE pp.pv_id = pvid;
4293
 
4294
         --- Remove Dependencies
4295
         DELETE FROM package_dependencies dep
4296
               WHERE dep.pv_id = pvid;
4297
 
4298
         DELETE FROM package_dependencies dep
4299
               WHERE dep.dpv_id = pvid;
4300
 
4301
         --- Remove Runtime dependencies
4302
         DELETE FROM runtime_dependencies rtd
4303
               WHERE rtd.pv_id = pvid;
4304
 
4305
         DELETE FROM runtime_dependencies rtd
4306
               WHERE rtd.rtd_id = pvid;
4307
 
4308
         --- Remove components
4309
         DELETE FROM product_components pc
4310
               WHERE pc.pv_id = pvid;
4311
 
4312
         DELETE FROM release_components rc
4313
               WHERE rc.pv_id = pvid;
4314
 
4315
         --- Remove From Notification History
4316
         DELETE FROM notification_history nh
4317
               WHERE nh.pv_id = pvid;
4318
 
4319
         --- Remove From Ignore Warnings
4320
         DELETE FROM ignore_warnings iw
4321
               WHERE iw.pv_id = pvid;
4322
 
4323
         --- Remove From Additional Notes
4324
         DELETE FROM additional_notes an
4325
               WHERE an.pv_id = pvid;
4326
 
4327
         --- Remove From CQ Issues
4328
         DELETE FROM cq_issues cq
4329
               WHERE cq.pv_id = pvid;
4330
 
4331
         --- Remove from Package Patches
4332
         DELETE FROM package_patches pp
4333
               WHERE pp.pv_id = pvid;
4334
 
4335
         DELETE FROM package_patches pp
4336
               WHERE pp.patch_id = pvid;
4337
 
4338
         --- Remove From Package Documents
4339
         DELETE FROM package_documents pd
4340
               WHERE pd.pv_id = pvid;
4341
 
4342
         --- Remove from Code Review
4343
         DELETE FROM code_reviews cr
4344
               WHERE cr.pv_id = pvid;
4345
 
4346
         --- Remove from Code Review URL
4347
         DELETE FROM code_review_url cru
4348
               WHERE cru.pv_id = pvid;
4349
 
4350
         --- Remove from Unit Tests
4351
         DELETE FROM unit_tests ut
4352
               WHERE ut.pv_id = pvid;
4353
 
4354
         --- Remove from Package BuildEnv
4355
         DELETE FROM package_build_env pbe
4356
               WHERE pbe.pv_id = pvid;
4357
 
4358
         --- Remove from Package Build Info
4359
         DELETE FROM package_build_info pbi
4360
               WHERE pbi.pv_id = pvid;
4361
 
4362
         --- Remove from Build Order
4363
         DELETE FROM build_order bo
4364
               WHERE bo.pv_id = pvid;
4365
 
4366
         --- Remove from Licencing
4367
         PK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );
4368
 
4369
         --- Remove from Note Manager
4370
         DELETE FROM note_manager nm
4371
               WHERE nm.nid = pvid;
4372
 
4373
         --- Remove from Action log
4374
         DELETE FROM action_log al
4375
               WHERE al.pv_id = pvid;
4376
 
4377
         --- Remove from Do Not Ripple
4378
         DELETE FROM DO_NOT_RIPPLE dnr
4379
               WHERE dnr.PV_ID = pvid;
4380
 
4381
         --- Remove from Advisory Ripple
4382
         DELETE FROM ADVISORY_RIPPLE ar
4383
               WHERE ar.PV_ID = pvid;
4384
 
4385
         --- Remove from Jira Issues
4386
         DELETE FROM JIRA_ISSUES jira
4387
               WHERE jira.PV_ID = pvid;
4388
 
4389
         --- Remove from Package Metrics
4390
         DELETE FROM package_metrics pm
4391
              WHERE pm.pv_id = pvid;
4392
 
4393
         -- Delete from Pegged Versions
4394
         DELETE FROM pegged_versions pegv
4395
              WHERE pegv.pv_id = pvid;
4396
 
4397
         --- Finally Remove From Package Versions
4398
         --- Get Package name
4399
         SELECT pv.pkg_id
4400
           INTO pkgid
4401
           FROM package_versions pv
4402
          WHERE pv.pv_id = pvid;
4403
 
4404
         DELETE FROM package_versions pv
4405
               WHERE pv.pv_id = pvid;
4406
 
4407
         --- Remove package name if not used any more
4408
         SELECT COUNT (pv.pv_id)
4409
           INTO ROWCOUNT
4410
           FROM package_versions pv
4411
          WHERE pv.pkg_id = pkgid;
4412
 
4413
         IF ROWCOUNT < 1
4414
         THEN
4415
            DELETE FROM PACKAGES pkg
4416
                  WHERE pkg.pkg_id = pkgid;
4417
         END IF;
4418
      END IF;
4419
   END;
4420
 
4421
/*-------------------------------------------------------------------------------------------------------*/
4422
   PROCEDURE new_patch (
4423
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
4424
      nparentpvid        IN       NUMBER,
4425
      spatchidlist       IN       VARCHAR2,
4426
      nuserid            IN       NUMBER,
4427
      returnpatchid      OUT      NUMBER
4428
   )
4429
   IS
4430
      patchpv_id           NUMBER;
4431
      parpkg_id            NUMBER;
4432
      lastinstallorder     NUMBER;
4433
      ispatchdlocked       package_versions.dlocked%TYPE;
4434
      ssv_mm               package_versions.v_mm%TYPE;
4435
      ssv_nmm              package_versions.v_nmm%TYPE;
4436
      ssv_ext              package_versions.v_ext%TYPE;
4437
      opatchdepcollector   relmgr_number_tab_t  := relmgr_number_tab_t ();
4438
 
4439
      CURSOR parent_cur
4440
      IS
4441
         SELECT pv.*, pkg.pkg_name
4442
           FROM package_versions pv, PACKAGES pkg
4443
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
4444
 
4445
      parent_rec parent_cur%ROWTYPE;
4446
 
4447
      CURSOR patch_cur
4448
      IS
4449
         SELECT pv.*, pg.pkg_name
4450
           FROM package_versions pv, PACKAGES pg
4451
          WHERE pv.pkg_id = parpkg_id
4452
            AND pv.pkg_version = snewpatchversion
4453
            AND pv.pkg_id = pg.pkg_id;
4454
 
4455
      patch_rec  patch_cur%ROWTYPE;
4456
 
4457
      CURSOR releases_cur
4458
      IS
4459
         SELECT rc.pv_id
4460
           FROM release_content rc
4461
          WHERE rc.pv_id = patch_rec.pv_id;
4462
 
4463
      releases_rec releases_cur%ROWTYPE;
4464
   BEGIN
4465
      -- Get Last Install Order
4466
      SELECT COUNT (*)
4467
        INTO lastinstallorder
4468
        FROM package_patches pp
4469
       WHERE pp.pv_id = nparentpvid;
4470
 
4471
      -- Get parent details
4472
      OPEN parent_cur;
4473
 
4474
      FETCH parent_cur
4475
       INTO parent_rec;
4476
 
4477
      parpkg_id := parent_rec.pkg_id;
4478
 
4479
      -- Find if patch exists in database
4480
      OPEN patch_cur;
4481
 
4482
      FETCH patch_cur
4483
       INTO patch_rec;
4484
 
4485
      -- Parent must be official
4486
      IF parent_rec.dlocked = 'Y'
4487
      THEN
4488
         IF patch_cur%NOTFOUND
4489
         THEN
4490
            ispatchdlocked := 'N';
4491
 
4492
            -- Create new patch version --
4493
            SELECT seq_pv_id.NEXTVAL
4494
              INTO patchpv_id
4495
              FROM DUAL;
4496
 
4497
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
4498
 
4499
            INSERT INTO package_versions
4500
                        (pv_id, pkg_id, pkg_version,
4501
                         dlocked, created_stamp, creator_id,
4502
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
4503
                         src_path,
4504
                         pv_description,
4505
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
4506
                         is_autobuildable, ripple_field
4507
                        )
4508
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
4509
                         ispatchdlocked, ora_sysdate, nuserid,
4510
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
4511
                         parent_rec.src_path,
4512
                            'This is a patch to '
4513
                         || parent_rec.pkg_name
4514
                         || ' '
4515
                         || parent_rec.pkg_version,
4516
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
4517
                        );
4518
 
4519
            INSERT INTO package_patches
4520
                        (pv_id, patch_id, install_order)
4521
                (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4522
                        lastinstallorder + 1 AS install_order
4523
                   FROM package_versions pv
4524
                  WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4525
 
4526
            /* LOG ACTION */
4527
            log_action (patchpv_id,
4528
                        'new_version',
4529
                        nuserid,
4530
                        'Patch version created: ' || snewpatchversion
4531
                       );
4532
            log_action (nparentpvid,
4533
                        'patch_add',
4534
                        nuserid,
4535
                        'New patch created and attached: ' || snewpatchversion
4536
                       );
4537
         ELSE
4538
            patchpv_id := patch_rec.pv_id;
4539
            ispatchdlocked := patch_rec.dlocked;
4540
 
4541
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
4542
            OPEN releases_cur;
4543
 
4544
            FETCH releases_cur
4545
             INTO releases_rec;
4546
 
4547
            IF releases_cur%NOTFOUND
4548
            THEN
4549
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
4550
               UPDATE package_versions
4551
                  SET is_patch = 'Y'
4552
                WHERE pv_id = patchpv_id;
4553
 
4554
               INSERT INTO package_patches
4555
                           (pv_id, patch_id, install_order)
4556
                   (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4557
                           lastinstallorder + 1 AS install_order
4558
                      FROM package_versions pv
4559
                     WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4560
            END IF;
4561
 
4562
            CLOSE releases_cur;
4563
 
4564
            /* LOG ACTION */
4565
            log_action (nparentpvid,
4566
                        'patch_add',
4567
                        nuserid,
4568
                           'Patch version was found and attached: '
4569
                        || snewpatchversion
4570
                       );
4571
         END IF;
4572
      END IF;
4573
 
4574
      /* Create Patch Dependencies */
4575
      opatchdepcollector := in_list_number (spatchidlist);
4576
 
4577
      -- Make sure patch is unofficial before altering its dependencies
4578
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
4579
      THEN
4580
         -- Delete Existing Dependencies
4581
         DELETE FROM package_dependencies dep
4582
               WHERE dep.pv_id = patchpv_id;
4583
 
4584
         -- Insert new dependencies
4585
         INSERT INTO package_dependencies
4586
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
4587
              SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
4588
                     parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
4589
                     'L' AS build_type
4590
                FROM package_versions pv
4591
               WHERE pv.pv_id IN (
4592
                      SELECT *
4593
                        FROM TABLE
4594
                                (CAST
4595
                                    (opatchdepcollector AS relmgr_number_tab_t)
4596
                                ));
4597
      END IF;
4598
 
4599
      -- Return patch_id
4600
      returnpatchid := patchpv_id;
4601
 
4602
      CLOSE parent_cur;
4603
 
4604
      CLOSE patch_cur;
4605
   EXCEPTION
4606
      WHEN DUP_VAL_ON_INDEX
4607
      THEN
4608
         raise_application_error (-20000,
4609
                                     'Patch version '
4610
                                  || snewpatchversion
4611
                                  || ' already exist.'
4612
                                 );
4613
   END;
4614
 
4615
/*-------------------------------------------------------------------------------------------------------*/
4616
   PROCEDURE obsolete_patch (
4617
      patchid            IN   NUMBER,
4618
      isobsolete         IN   CHAR,
4619
      obsoletecomments   IN   VARCHAR2,
4620
      userid             IN   NUMBER
4621
   )
4622
   IS
4623
   BEGIN
4624
      -- Update patch
4625
      UPDATE package_versions pv
4626
         SET pv.is_obsolete = isobsolete,
4627
             pv.obsolete_comments = obsoletecomments
4628
       WHERE pv.pv_id = patchid;
4629
 
4630
      /*
4631
      -- Update patch children
4632
      UPDATE PACKAGE_VERSIONS pv SET
4633
      pv.IS_OBSOLETE = IsObsolete,
4634
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4635
      WHERE pv.PV_ID IN (
4636
                     SELECT DISTINCT dep.DPV_ID
4637
                       FROM PACKAGE_DEPENDENCIES dep
4638
                      WHERE dep.PV_ID = PatchId
4639
                     );
4640
 
4641
 
4642
      -- Update patch parent
4643
      UPDATE PACKAGE_VERSIONS pv SET
4644
      pv.IS_OBSOLETE = IsObsolete,
4645
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4646
      WHERE pv.PV_ID IN (
4647
                     SELECT DISTINCT dep.PV_ID
4648
                       FROM PACKAGE_DEPENDENCIES dep
4649
                      WHERE dep.DPV_ID = PatchId
4650
                     );
4651
 
4652
      */
4653
 
4654
      /* LOG ACTION */
4655
      IF isobsolete IS NOT NULL
4656
      THEN
4657
         log_action (patchid,
4658
                     'patch_obsolete',
4659
                     userid,
4660
                     'Obsolete patch. ' || obsoletecomments
4661
                    );
4662
      ELSE
4663
         log_action (patchid,
4664
                     'patch_obsolete',
4665
                     userid,
4666
                     'Undo patch obsolete.'
4667
                    );
4668
      END IF;
4669
   END;
4670
 
4671
/*-------------------------------------------------------------------------------------------------------*/
4672
   PROCEDURE obsolete_patches (
4673
      spatchidlist       IN   VARCHAR2,
4674
      isobsolete         IN   CHAR,
4675
      obsoletecomments   IN   VARCHAR2,
4676
      userid             IN   NUMBER
4677
   )
4678
   IS
4679
   BEGIN
4680
      /*--------------- Business Rules Here -------------------*/
4681
      IF spatchidlist IS NULL
4682
      THEN
4683
         raise_application_error (-20000,
4684
                                  'Please select one or more Patches.'
4685
                                 );
4686
      END IF;
4687
 
4688
/*-------------------------------------------------------*/
4689
 
4690
      -- Update patch
4691
      UPDATE package_versions pv
4692
         SET pv.is_obsolete = isobsolete,
4693
             pv.obsolete_comments = obsoletecomments
4694
       WHERE pv.pv_id IN (
4695
                SELECT *
4696
                  FROM THE
4697
                          (SELECT CAST
4698
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
4699
                                     )
4700
                             FROM DUAL
4701
                          ));
4702
      /*
4703
      -- Update patch children
4704
      UPDATE PACKAGE_VERSIONS pv SET
4705
      pv.IS_OBSOLETE = IsObsolete,
4706
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4707
      WHERE pv.PV_ID IN (
4708
                     SELECT DISTINCT dep.DPV_ID
4709
                       FROM PACKAGE_DEPENDENCIES dep
4710
                      WHERE dep.PV_ID = PatchId
4711
                     );
4712
 
4713
 
4714
      -- Update patch parent
4715
      UPDATE PACKAGE_VERSIONS pv SET
4716
      pv.IS_OBSOLETE = IsObsolete,
4717
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4718
      WHERE pv.PV_ID IN (
4719
                     SELECT DISTINCT dep.PV_ID
4720
                       FROM PACKAGE_DEPENDENCIES dep
4721
                      WHERE dep.DPV_ID = PatchId
4722
                     );
4723
 
4724
      */
4725
 
4726
      /* LOG ACTION
4727
      IF IsObsolete IS NOT NULL THEN
4728
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4729
                     'Obsolete patch. '|| ObsoleteComments );
4730
      ELSE
4731
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4732
                     'Undo patch obsolete.' );
4733
      END IF;  */
4734
   END;
4735
 
4736
/*-------------------------------------------------------------------------------------------------------*/
4737
   PROCEDURE add_process (
4738
      nprocid         IN   processes.proc_id%TYPE,
4739
      shealthtag      IN   processes.proc_name%TYPE,
4740
      sprocdesc       IN   processes.proc_description%TYPE,
4741
      scmdinterface   IN   processes.run_as%TYPE,
4742
      spkgowner       IN   processes.pkg_owner%TYPE,
4743
      sisinterface    IN   processes.is_interface%TYPE,
4744
      npvid           IN   package_processes.pv_id%TYPE,
4745
      nuserid         IN   NUMBER
4746
   )
4747
   IS
4748
      pkgname   VARCHAR2 (100);
4749
 
4750
   BEGIN
4751
      INSERT INTO processes
4752
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
4753
                   is_interface
4754
                  )
4755
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
4756
                   sisinterface
4757
                  );
4758
 
4759
      pk_package.add_package_process (nprocid, npvid, nuserid);
4760
   END;
4761
 
4762
/*-------------------------------------------------------------------------------------------------------*/
4763
   PROCEDURE add_package_process (
4764
      nprocidlist   IN   VARCHAR2,
4765
      npvid         IN   package_processes.pv_id%TYPE,
4766
      nuserid       IN   NUMBER
4767
   )
4768
   IS
4769
      processname   VARCHAR2 (4000);
4770
 
4771
      CURSOR proc_cur
4772
      IS
4773
         SELECT prc.proc_id
4774
           FROM processes prc
4775
          WHERE prc.proc_id IN (
4776
                   SELECT *
4777
                     FROM THE
4778
                             (SELECT CAST
4779
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
4780
                                        )
4781
                                FROM DUAL
4782
                             ));
4783
 
4784
      proc_rec  proc_cur%ROWTYPE;
4785
   BEGIN
4786
      OPEN proc_cur;
4787
 
4788
      FETCH proc_cur
4789
       INTO proc_rec;
4790
 
4791
      WHILE proc_cur%FOUND
4792
      LOOP
4793
         INSERT INTO package_processes (proc_id, pv_id)
4794
              VALUES (proc_rec.proc_id, npvid);
4795
 
4796
         SELECT prc.proc_name
4797
           INTO processname
4798
           FROM processes prc
4799
          WHERE prc.proc_id = proc_rec.proc_id;
4800
 
4801
         -- Log Action --
4802
         log_action (npvid,
4803
                     'process_add',
4804
                     nuserid,
4805
                     'Added process with health tag ' || processname
4806
                    );
4807
 
4808
         FETCH proc_cur
4809
          INTO proc_rec;
4810
      END LOOP;
4811
 
4812
      CLOSE proc_cur;
4813
   END;
4814
 
4815
/*-------------------------------------------------------------------------------------------------------*/
4816
   PROCEDURE remove_process (
4817
      nprocid   IN   package_processes.proc_id%TYPE,
4818
      npvid     IN   package_processes.pv_id%TYPE,
4819
      nuserid   IN   NUMBER
4820
   )
4821
   IS
4822
      processname   VARCHAR2 (4000);
4823
   BEGIN
4824
      SELECT prc.proc_name
4825
        INTO processname
4826
        FROM processes prc
4827
       WHERE prc.proc_id = nprocid;
4828
 
4829
      DELETE FROM package_processes
4830
            WHERE proc_id = nprocid AND pv_id = npvid;
4831
 
4832
      -- Log Action --
4833
      log_action (npvid,
4834
                  'process_remove',
4835
                  nuserid,
4836
                  'Removed process with health tag ' || processname
4837
                 );
4838
   END;
4839
/*-------------------------------------------------------------------------------------------------------*/
4840
   /*
4841
   ** Author: Rupesh Solanki
4842
   ** Purpose: To move package versions from one release to another
4843
   ** Release: 4th September 2006
4844
   */
4845
   PROCEDURE move_package (
4846
      npvid        IN package_versions.pv_id%TYPE,
4847
      nrtagid      IN release_tags.rtag_id%TYPE,
4848
      nnewrtagid   IN release_tags.rtag_id%TYPE,
4849
      nuserid      IN NUMBER
4850
   )
4851
   IS
4852
 
4853
      oldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);
4854
 
4855
   BEGIN
4856
      SELECT rtag_name into oldrtag_name
4857
      FROM RELEASE_TAGS
4858
      WHERE rtag_id = nrtagid;
4859
 
4860
      SELECT rtag_name into newrtag_name
4861
      FROM RELEASE_TAGS
4862
      WHERE rtag_id = nnewrtagid;
4863
 
4864
      /* Table Work In Progress*/
4865
      UPDATE WORK_IN_PROGRESS
4866
      SET RTAG_ID = nnewrtagid
4867
      WHERE RTAG_ID = nrtagid
4868
      AND PV_ID = npvid;
4869
 
4870
      /* Table PLANNED*/
4871
      UPDATE PLANNED
4872
      SET RTAG_ID = nnewrtagid
4873
      WHERE RTAG_ID = nrtagid
4874
      AND PV_ID = npvid;
4875
 
4876
      /* Table PEGGED_VERSIONS */
4877
      DELETE FROM PEGGED_VERSIONS pegv
4878
      WHERE pegv.RTAG_ID = nrtagid
4879
      AND pegv.PV_ID = npvid;
4880
 
4881
      /* Table ADVISORY_RIPPLE*/
4882
      DELETE FROM ADVISORY_RIPPLE
4883
      WHERE RTAG_ID = nrtagid
4884
      AND PV_ID = npvid;
4885
 
4886
 
4887
      -- Log Action --
4888
      log_action (npvid,
4889
                  'move_package_version',
4890
                  nuserid,
4891
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
4892
                 );
4893
   END;
4894
 
4895
/*-------------------------------------------------------------------------------------------------------*/
4896
   /*
4897
   ** Author: Rupesh Solanki
4898
   ** Purpose: To modify the product state from integration to test to deployment
4899
   ** Release: 25th January 2006
4900
   */
4901
   PROCEDURE modify_product_state (
4902
      npvid    IN package_versions.pv_id%TYPE,
4903
      nrtagid  IN release_tags.rtag_id%TYPE,
4904
      nstateid IN product_states.state_id%TYPE,
4905
      nuserid  IN NUMBER
4906
   ) IS
4907
 
4908
      sStateName VARCHAR2(4000);
4909
      sRtagName VARCHAR2(4000);
4910
 
4911
   BEGIN
4912
 
4913
      UPDATE RELEASE_CONTENT
4914
      SET PRODUCT_STATE = nstateid
4915
      WHERE PV_ID = npvid
4916
      AND RTAG_ID = nrtagid;
4917
 
4918
 
4919
      SELECT STATE INTO sStateName
4920
      FROM PRODUCT_STATES
4921
      WHERE STATE_ID = nstateid;
4922
 
4923
      SELECT RTAG_NAME into sRtagName
4924
      FROM RELEASE_TAGS
4925
      WHERE RTAG_ID = nrtagid;
4926
 
4927
 
4928
      -- Log Action --
4929
      log_action (npvid,
4930
                  'modify_product_state',
4931
                     nuserid,
4932
                     sStateName || ' in '|| sRtagName
4933
                  );
4934
   END;
4935
/*-------------------------------------------------------------------------------------------------------*/
4936
   /*
4937
   ** Author: Jeremy Tweddle
4938
   ** Date: 24/Aug/2007
4939
   */
4940
   PROCEDURE add_code_review_url (
4941
      npvid           IN    NUMBER,
4942
      nprojid         IN    NUMBER,
4943
      surl            IN    VARCHAR2,
4944
      sreason         IN    VARCHAR2,
4945
      ddateofreview   IN    DATE
4946
   ) IS
4947
 
4948
      ncrid NUMBER;
4949
 
4950
   BEGIN
4951
 
4952
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
4953
 
4954
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
4955
                                    last_modified )
4956
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
4957
 
4958
   END;
4959
/*-------------------------------------------------------------------------------------------------------*/
4960
   /*
4961
   ** Author: Jeremy Tweddle
4962
   ** Date: 22/Aug/2007
4963
   */
4964
   PROCEDURE update_code_review_url (
4965
      ncrid           IN    NUMBER,
4966
      nprojid         IN    NUMBER,
4967
      surl            IN    VARCHAR2,
4968
      sreason         IN    VARCHAR2
4969
   ) IS
4970
 
4971
   BEGIN
4972
 
4973
      UPDATE code_review_url
4974
      SET url = surl,
4975
          proj_id = nprojid,
4976
          reason = sreason,
4977
          last_modified = ora_sysdate
4978
      WHERE cr_id = ncrid;
4979
 
4980
   END;
4981
/*-------------------------------------------------------------------------------------------------------*/
4982
   /*
4983
   ** Author: Jeremy Tweddle
4984
   ** Date: 22/Aug/2007
4985
   */
4986
   PROCEDURE remove_code_review_url (
4987
      ncrid  IN    NUMBER
4988
   ) IS
4989
 
4990
   BEGIN
4991
      DELETE FROM code_review_url
4992
      WHERE cr_id = ncrid;
4993
   END;
4994
/*-------------------------------------------------------------------------------------------------------*/
4995
END pk_package;
1374 dpurdie 4996
/
4997
--------------------------------------------------------
4998
--  DDL for Package Body PK_RMAPI_TEST
4999
--------------------------------------------------------
1373 dpurdie 5000
 
5001
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI_TEST" 
5002
IS
5003
 
5004
   /*-------------------------------------------------------------------------------------------------------*/
5005
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
5006
      RETURN typecur
5007
   IS
5008
      npvid     NUMBER  := 0;
5009
      RECORDS   typecur;
5010
   BEGIN
5011
      BEGIN
5012
         -- Get PV_ID --
5013
         SELECT pv.pv_id
5014
           INTO npvid
5015
           FROM PACKAGES pkg, package_versions pv
5016
          WHERE pv.pkg_id = pkg.pkg_id
5017
            AND pkg.pkg_name = pkgname
5018
            AND pv.pkg_version = pkgversion;
5019
      EXCEPTION
5020
         WHEN NO_DATA_FOUND
5021
         THEN
5022
            raise_application_error (-20000, 'Package Not Found!');
5023
            --WHEN OTHERS THEN
5024
                  -- Consider logging the error and then re-raise
5025
            RAISE;
5026
      END;
5027
 
5028
      -- Finally get package dependencies --
5029
      OPEN RECORDS FOR
5030
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
5031
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
5032
          WHERE dep.pv_id = npvid
5033
            AND dpv.pkg_id = dpkg.pkg_id
5034
            AND dpv.pv_id = dep.dpv_id;
5035
 
5036
      RETURN RECORDS;
5037
   END;
5038
 
5039
/*-------------------------------------------------------------------------------------------------------*/
5040
   FUNCTION wip_iteration_package (
5041
      projname        VARCHAR2,
5042
      iterationname   VARCHAR2,
5043
      pkgname         VARCHAR2
5044
   )
5045
      RETURN typecur
5046
   IS
5047
      nrtagid   NUMBER  := 0;
5048
      RECORDS   typecur;
5049
   BEGIN
5050
      BEGIN
5051
         -- Get latest rtag_id --
5052
         SELECT rt.rtag_id
5053
           INTO nrtagid
5054
           FROM projects proj, release_tags rt
5055
          WHERE rt.proj_id = proj.proj_id
5056
            AND UPPER (proj.proj_name) = UPPER (projname)
5057
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
5058
 
5059
         IF (nrtagid IS NULL)
5060
         THEN
5061
            raise_application_error (-20000,
5062
                                     'Work In Progress is Not Found!');
5063
         END IF;
5064
      EXCEPTION
5065
         WHEN NO_DATA_FOUND
5066
         THEN
5067
            raise_application_error (-20000,
5068
                                     'Work In Progress is Not Found!');
5069
            RAISE;
5070
      END;
5071
 
5072
      -- Finally get package dependencies --
5073
      OPEN RECORDS FOR
5074
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
5075
                pv.src_path
5076
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
5077
          WHERE pv.pkg_id = pkg.pkg_id
5078
            AND wip.pv_id = pv.pv_id
5079
            AND wip.rtag_id = nrtagid
5080
            AND pkg.pkg_name = pkgname;
5081
 
5082
      RETURN RECORDS;
5083
   END;
5084
 
5085
/*-------------------------------------------------------------------------------------------------------*/
5086
   FUNCTION auto_make_release (
5087
      rtagid                   IN   NUMBER,
5088
      pkgname                  IN   VARCHAR2,
5089
      vext                     IN   VARCHAR2,
5090
      newpkgversion            IN   VARCHAR2,
5091
      label                    IN   VARCHAR2,
5092
      dependenciesimportlist   IN   VARCHAR2,
5093
      isrippled                IN   NUMBER,
5094
      username                 IN   VARCHAR2
5095
   )
5096
      RETURN NUMBER
5097
   IS
5098
      pkgid                           NUMBER;
5099
      pvid                            NUMBER                        := 0;
5100
      userid                          NUMBER;
5101
      dlocked                         VARCHAR2 (20)                 := NULL;
5102
      clonefrompvid                   NUMBER;
5103
      ssv_mm                          package_versions.v_mm%TYPE;
5104
      ssv_nmm                         package_versions.v_nmm%TYPE;
5105
      ssv_ext                         package_versions.v_ext%TYPE;
5106
      return_package_not_found        NUMBER                        := -1;
5107
      return_package_already_exists   NUMBER                        := -2;
5108
      return_not_approved             NUMBER                        := -3;
5109
   BEGIN
5110
      /*--------------- Business Rules Here -------------------*/
5111
      IF (rtagid IS NULL)
5112
      THEN
5113
         raise_application_error (-20000, 'RtagId must be supplied.');
5114
      END IF;
5115
 
5116
      IF (pkgname IS NULL)
5117
      THEN
5118
         raise_application_error (-20000, 'PkgName must be supplied.');
5119
      END IF;
5120
 
5121
      IF (newpkgversion IS NULL)
5122
      THEN
5123
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5124
      END IF;
5125
 
5126
      IF (label IS NULL)
5127
      THEN
5128
         raise_application_error (-20000, 'Label must be supplied.');
5129
      END IF;
5130
 
5131
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5132
      THEN
5133
         raise_application_error
5134
            (-20000,
5135
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5136
            );
5137
      END IF;
5138
 
5139
      IF (username IS NULL)
5140
      THEN
5141
         raise_application_error (-20000, 'UserName must be supplied.');
5142
      END IF;
5143
 
5144
      -- Get user_id
5145
      BEGIN
5146
         SELECT usr.user_id
5147
           INTO userid
5148
           FROM users usr
5149
          WHERE UPPER (usr.user_name) = UPPER (username)
5150
            AND usr.is_disabled IS NULL;
5151
      EXCEPTION
5152
         WHEN NO_DATA_FOUND
5153
         THEN
5154
            raise_application_error (-20000,
5155
                                        'UserName '
5156
                                     || username
5157
                                     || ' is not valid or disabled.'
5158
                                    );
5159
      END;
5160
 
5161
/*-------------------------------------------------------*/
5162
 
5163
      -- Create package if necessary
5164
      IF isrippled = 1
5165
      THEN
5166
         /* Ripple Build */
5167
         BEGIN
5168
            -- Make sure that package does not exist
5169
            SELECT pv.pv_id
5170
              INTO pvid
5171
              FROM package_versions pv, PACKAGES pkg
5172
             WHERE pv.pkg_id = pkg.pkg_id
5173
               AND pkg.pkg_name = pkgname
5174
               AND pv.pkg_version = newpkgversion;
5175
         EXCEPTION
5176
            WHEN NO_DATA_FOUND
5177
            THEN
5178
               pvid := 0;
5179
         END;
5180
 
5181
         IF (pvid = 0)
5182
         THEN
5183
            -- Split current version in parts
5184
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5185
 
5186
            BEGIN
5187
               -- Find package to be replaced with thie ripple package
5188
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5189
               THEN
5190
                  SELECT pv.pv_id
5191
                    INTO clonefrompvid
5192
                    FROM PACKAGES pkg, package_versions pv,
5193
                         release_content rc
5194
                   WHERE rc.pv_id = pv.pv_id
5195
                     AND pv.pkg_id = pkg.pkg_id
5196
                     AND rc.rtag_id = rtagid
5197
                     AND pkg.pkg_name = pkgname
5198
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5199
               ELSE
5200
                  SELECT pv.pv_id
5201
                    INTO clonefrompvid
5202
                    FROM PACKAGES pkg, package_versions pv,
5203
                         release_content rc
5204
                   WHERE rc.pv_id = pv.pv_id
5205
                     AND pv.pkg_id = pkg.pkg_id
5206
                     AND rc.rtag_id = rtagid
5207
                     AND pkg.pkg_name = pkgname
5208
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5209
               END IF;
5210
            EXCEPTION
5211
               WHEN NO_DATA_FOUND
5212
               THEN
5213
                  raise_application_error
5214
                                        (-20000,
5215
                                            'Cannot get CloneFromPvId. VExt='
5216
                                         || vext
5217
                                         || ', RtagId='
5218
                                         || rtagid
5219
                                         || ', PkgName='
5220
                                         || pkgname
5221
                                         || ', SSV_EXT='
5222
                                         || ssv_ext
5223
                                        );
5224
            END;
5225
 
5226
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5227
            THEN
5228
               -- Create package
5229
               seed_package_names_versions (pkgname,
5230
                                            newpkgversion,
5231
                                            userid,
5232
                                            pvid,
5233
                                            clonefrompvid
5234
                                           );
5235
            ELSE
5236
               -- Create package
5237
               seed_package_names_versions2 (pkgname,
5238
                                             newpkgversion,
5239
                                             userid,
5240
                                             pvid,
5241
                                             clonefrompvid
5242
                                            );
5243
            END IF;
5244
 
5245
            -- Update Package reason for release
5246
            UPDATE package_versions pv
5247
               SET pv.comments = 'Rippled Build.',
5248
                   pv.build_type = 'Y'
5249
             WHERE pv.pv_id = pvid;
5250
         ELSE
5251
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5252
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5253
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5254
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5255
            UPDATE package_versions pv
5256
               SET pv.release_notes_info = null,
5257
                   pv.modified_stamp = ora_sysdatetime
5258
             WHERE pv.pv_id = pvid;
5259
 
5260
            RETURN return_package_already_exists;
5261
         END IF;
5262
      ELSE
5263
         /* Auto build from Pending area */
5264
 
5265
         -- Find package in pending area
5266
         BEGIN
5267
            SELECT pv.pv_id, pv.dlocked
5268
              INTO pvid, dlocked
5269
              FROM planned pl, package_versions pv, PACKAGES pkg
5270
             WHERE pl.pv_id = pv.pv_id
5271
               AND pv.pkg_id = pkg.pkg_id
5272
               AND pl.rtag_id = rtagid
5273
               AND pkg.pkg_name = pkgname
5274
               AND pv.dlocked = 'A'
5275
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5276
               AND rownum = 1
5277
             ORDER BY pv.modified_stamp;
5278
         EXCEPTION
5279
            WHEN NO_DATA_FOUND
5280
            THEN
5281
               pvid := 0;
5282
         END;
5283
 
5284
         IF (pvid = 0)
5285
         THEN
5286
            -- Package does not exist in pending area, hence report it
5287
            RETURN return_package_not_found;
5288
         ELSIF (dlocked != 'A')
5289
         THEN
5290
            -- Package is not approved for autobuild
5291
            RETURN return_not_approved;
5292
         END IF;
5293
      END IF;
5294
 
5295
      BEGIN
5296
         -- Import Dependencies
5297
         import_dependencies (pvid, dependenciesimportlist, userid);
5298
      END;
5299
 
5300
      BEGIN
5301
         -- Split current version in parts
5302
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5303
 
5304
         -- Update Package Details
5305
         UPDATE package_versions pv
5306
            SET pv.pkg_version = newpkgversion,
5307
                pv.v_ext = ssv_ext,
5308
                pv.v_mm = ssv_mm,
5309
                pv.v_nmm = ssv_nmm,
5310
                pv.pkg_label = label
5311
          WHERE pv.pv_id = pvid;
5312
      EXCEPTION
5313
         WHEN DUP_VAL_ON_INDEX
5314
         THEN
5315
            -- Package already exists, hence cannot be used for ripple build
5316
            RETURN return_package_already_exists;
5317
      END;
5318
 
5319
      -- Update the is_autobuildable
5320
      UPDATE package_versions
5321
         SET is_autobuildable = 'Y'
5322
       WHERE pv_id = pvid;
5323
 
5324
      -- Now release package
5325
      pk_environment.auto_make_release (pvid,
5326
                                        rtagid,
5327
                                        userid,
5328
                                        vext,
5329
                                        ssv_ext,
5330
                                        clonefrompvid
5331
                                       );
5332
 
5333
      --Now clean the PLANNED_VERSIONS table
5334
      SELECT pkg_id
5335
        INTO pkgid
5336
        FROM PACKAGES
5337
       WHERE pkg_name = pkgname;
5338
 
5339
      DELETE FROM planned_versions
5340
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5341
 
5342
      RETURN pvid;
5343
   END;
5344
 
5345
/*-------------------------------------------------------------------------------------------------------*/
5346
   FUNCTION auto_make_vcsrelease (
5347
      rtagid                   IN   NUMBER,
5348
      pkgname                  IN   VARCHAR2,
5349
      vext                     IN   VARCHAR2,
5350
      newpkgversion            IN   VARCHAR2,
5351
      vcstag             IN   VARCHAR2,
5352
      dependenciesimportlist   IN   VARCHAR2,
5353
      isrippled                IN   NUMBER,
5354
      username                 IN   VARCHAR2
5355
   )
5356
      RETURN NUMBER
5357
   IS
5358
      pkgid                           NUMBER;
5359
      pvid                            NUMBER                        := 0;
5360
      userid                          NUMBER;
5361
      dlocked                         VARCHAR2 (20)                 := NULL;
5362
      clonefrompvid                   NUMBER;
5363
      ssv_mm                          package_versions.v_mm%TYPE;
5364
      ssv_nmm                         package_versions.v_nmm%TYPE;
5365
      ssv_ext                         package_versions.v_ext%TYPE;
5366
      return_package_not_found        NUMBER                        := -1;
5367
      return_package_already_exists   NUMBER                        := -2;
5368
      return_not_approved             NUMBER                        := -3;
5369
 
5370
      x_vcstypeid                     NUMBER;
5371
      x_tag                           VARCHAR2(32);
5372
      x_label                         VARCHAR2(60);
5373
      x_srcpath                       VARCHAR2(2000);
5374
 
5375
      -- Regular expression constituents
5376
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
5377
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
5378
      BOL           VARCHAR2(4)  := '^';
5379
      Anything      VARCHAR2(4)  := '.*';
5380
      ReplaceToken1 VARCHAR2(4)  := '\1';
5381
      ReplaceToken2 VARCHAR2(4)  := '\2';
5382
      ReplaceToken3 VARCHAR2(4)  := '\3';
5383
 
5384
 
5385
   BEGIN
5386
      /*--------------- Business Rules Here -------------------*/
5387
      IF (rtagid IS NULL)
5388
      THEN
5389
         raise_application_error (-20000, 'RtagId must be supplied.');
5390
      END IF;
5391
 
5392
      IF (pkgname IS NULL)
5393
      THEN
5394
         raise_application_error (-20000, 'PkgName must be supplied.');
5395
      END IF;
5396
 
5397
      IF (newpkgversion IS NULL)
5398
      THEN
5399
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5400
      END IF;
5401
 
5402
      IF (vcstag IS NULL)
5403
      THEN
5404
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
5405
      END IF;
5406
 
5407
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5408
      THEN
5409
         raise_application_error
5410
            (-20000,
5411
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5412
            );
5413
      END IF;
5414
 
5415
      IF (username IS NULL)
5416
      THEN
5417
         raise_application_error (-20000, 'UserName must be supplied.');
5418
      END IF;
5419
 
5420
      -- Parse the PkgVcsTag
5421
      -- Sets up
5422
      --   x_tag, x_label, x_srcpath
5423
 
5424
       BEGIN
5425
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
5426
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
5427
 
5428
          -- Decode the short tag
5429
          CASE x_tag
5430
             WHEN 'CC' THEN
5431
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
5432
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
5433
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
5434
 
5435
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5436
                -- check for that error as well as the obvious zero-length string conditions.
5437
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
5438
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5439
                END IF;
5440
 
5441
             WHEN 'SVN' THEN
5442
                -- extract the 2nd token, that being the subversion tag
5443
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);
5444
                x_label   := 'N/A';
5445
 
5446
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5447
                -- check for that error as well as the obvious zero-length string conditions.
5448
                IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THEN
5449
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5450
                END IF;
5451
 
5452
             WHEN 'UC' THEN
5453
                -- nothing to extract, just assign defaults
5454
                x_srcpath := '';
5455
                x_label   := 'N/A';
5456
             ELSE
5457
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
5458
          END CASE;
5459
       END;
5460
 
5461
      -- Get the VCS_TYPE_ID for the version control system.
5462
      BEGIN
5463
         SELECT vt.vcs_type_id
5464
         INTO x_vcstypeid
5465
         FROM VCS_TYPE vt
5466
         WHERE vt.tag = x_tag;
5467
         EXCEPTION
5468
            WHEN NO_DATA_FOUND THEN
5469
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
5470
      END;
5471
 
5472
 
5473
      -- Get user_id
5474
      BEGIN
5475
         SELECT usr.user_id
5476
           INTO userid
5477
           FROM users usr
5478
          WHERE UPPER (usr.user_name) = UPPER (username)
5479
            AND usr.is_disabled IS NULL;
5480
      EXCEPTION
5481
         WHEN NO_DATA_FOUND
5482
         THEN
5483
            raise_application_error (-20000,
5484
                                        'UserName '
5485
                                     || username
5486
                                     || ' is not valid or disabled.'
5487
                                    );
5488
      END;
5489
 
5490
/*-------------------------------------------------------*/
5491
 
5492
      -- Create package if necessary
5493
      IF isrippled = 1
5494
      THEN
5495
         /* Ripple Build */
5496
         BEGIN
5497
            -- Make sure that package does not exist
5498
            SELECT pv.pv_id
5499
              INTO pvid
5500
              FROM package_versions pv, PACKAGES pkg
5501
             WHERE pv.pkg_id = pkg.pkg_id
5502
               AND pkg.pkg_name = pkgname
5503
               AND pv.pkg_version = newpkgversion;
5504
         EXCEPTION
5505
            WHEN NO_DATA_FOUND
5506
            THEN
5507
               pvid := 0;
5508
         END;
5509
 
5510
         IF (pvid = 0)
5511
         THEN
5512
            -- Split current version in parts
5513
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5514
 
5515
            BEGIN
5516
               -- Find package to be replaced with thie ripple package
5517
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5518
               THEN
5519
                  SELECT pv.pv_id
5520
                    INTO clonefrompvid
5521
                    FROM PACKAGES pkg, package_versions pv,
5522
                         release_content rc
5523
                   WHERE rc.pv_id = pv.pv_id
5524
                     AND pv.pkg_id = pkg.pkg_id
5525
                     AND rc.rtag_id = rtagid
5526
                     AND pkg.pkg_name = pkgname
5527
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5528
               ELSE
5529
                  SELECT pv.pv_id
5530
                    INTO clonefrompvid
5531
                    FROM PACKAGES pkg, package_versions pv,
5532
                         release_content rc
5533
                   WHERE rc.pv_id = pv.pv_id
5534
                     AND pv.pkg_id = pkg.pkg_id
5535
                     AND rc.rtag_id = rtagid
5536
                     AND pkg.pkg_name = pkgname
5537
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5538
               END IF;
5539
            EXCEPTION
5540
               WHEN NO_DATA_FOUND
5541
               THEN
5542
                  raise_application_error
5543
                                        (-20000,
5544
                                            'Cannot get CloneFromPvId. VExt='
5545
                                         || vext
5546
                                         || ', RtagId='
5547
                                         || rtagid
5548
                                         || ', PkgName='
5549
                                         || pkgname
5550
                                         || ', SSV_EXT='
5551
                                         || ssv_ext
5552
                                        );
5553
            END;
5554
 
5555
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5556
            THEN
5557
               -- Create package
5558
               seed_package_names_versions (pkgname,
5559
                                            newpkgversion,
5560
                                            userid,
5561
                                            pvid,
5562
                                            clonefrompvid
5563
                                           );
5564
            ELSE
5565
               -- Create package
5566
               seed_package_names_versions2 (pkgname,
5567
                                             newpkgversion,
5568
                                             userid,
5569
                                             pvid,
5570
                                             clonefrompvid
5571
                                            );
5572
            END IF;
5573
 
5574
            -- Update Package reason for release
5575
            UPDATE package_versions pv
5576
               SET pv.comments = 'Rippled Build.',
5577
                   pv.build_type = 'Y'
5578
             WHERE pv.pv_id = pvid;
5579
         ELSE
5580
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5581
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5582
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5583
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5584
            UPDATE package_versions pv
5585
               SET pv.release_notes_info = null,
5586
                   pv.modified_stamp = ora_sysdatetime
5587
             WHERE pv.pv_id = pvid;
5588
 
5589
            RETURN return_package_already_exists;
5590
         END IF;
5591
      ELSE
5592
         /* Auto build from Pending area */
5593
 
5594
         -- Find package in pending area
5595
         BEGIN
5596
            SELECT pv.pv_id, pv.dlocked
5597
              INTO pvid, dlocked
5598
              FROM planned pl, package_versions pv, PACKAGES pkg
5599
             WHERE pl.pv_id = pv.pv_id
5600
               AND pv.pkg_id = pkg.pkg_id
5601
               AND pl.rtag_id = rtagid
5602
               AND pkg.pkg_name = pkgname
5603
               AND pv.dlocked = 'A'
5604
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5605
               AND rownum = 1
5606
             ORDER BY pv.modified_stamp;
5607
         EXCEPTION
5608
            WHEN NO_DATA_FOUND
5609
            THEN
5610
               pvid := 0;
5611
         END;
5612
 
5613
         IF (pvid = 0)
5614
         THEN
5615
            -- Package does not exist in pending area, hence report it
5616
            RETURN return_package_not_found;
5617
         ELSIF (dlocked != 'A')
5618
         THEN
5619
            -- Package is not approved for autobuild
5620
            RETURN return_not_approved;
5621
         END IF;
5622
      END IF;
5623
 
5624
      BEGIN
5625
         -- Import Dependencies
5626
         import_dependencies (pvid, dependenciesimportlist, userid);
5627
      END;
5628
 
5629
      BEGIN
5630
         -- Split current version in parts
5631
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5632
 
5633
         -- Update Package Details
5634
         UPDATE package_versions pv
5635
            SET pv.pkg_version = newpkgversion,
5636
                pv.v_ext = ssv_ext,
5637
                pv.v_mm = ssv_mm,
5638
                pv.v_nmm = ssv_nmm,
5639
                pv.src_path = x_srcpath,
5640
                pv.pkg_label = x_label,
5641
                pv.vcs_type_id = x_vcstypeid
5642
          WHERE pv.pv_id = pvid;
5643
      EXCEPTION
5644
         WHEN DUP_VAL_ON_INDEX
5645
         THEN
5646
            -- Package already exists, hence cannot be used for ripple build
5647
            RETURN return_package_already_exists;
5648
      END;
5649
 
5650
      -- Update the is_autobuildable
5651
      UPDATE package_versions
5652
         SET is_autobuildable = 'Y'
5653
       WHERE pv_id = pvid;
5654
 
5655
      -- Now release package
5656
      pk_environment.auto_make_release (pvid,
5657
                                        rtagid,
5658
                                        userid,
5659
                                        vext,
5660
                                        ssv_ext,
5661
                                        clonefrompvid
5662
                                       );
5663
 
5664
      --Now clean the PLANNED_VERSIONS table
5665
      SELECT pkg_id
5666
        INTO pkgid
5667
        FROM PACKAGES
5668
       WHERE pkg_name = pkgname;
5669
 
5670
      DELETE FROM planned_versions
5671
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5672
 
5673
      RETURN pvid;
5674
   END;
5675
 
5676
/*-------------------------------------------------------------------------------------------------------*/
5677
   PROCEDURE import_dependencies (
5678
      pvid                     IN   NUMBER,
5679
      dependenciesimportlist   IN   VARCHAR2,
5680
      userid                   IN   NUMBER
5681
   )
5682
   IS
5683
/*
5684
|| DependenciesImportList Format:
5685
|| "pkgA","1.0.0";"pkgB","2.0.0";
5686
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
5687
*/
5688
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
5689
         INDEX BY VARCHAR2 (4000);
5690
 
5691
      seperator         VARCHAR2 (2)           := '||';
5692
      pkgname           VARCHAR2 (4000);
5693
      pkgversion        VARCHAR2 (4000);
5694
      buildtype         VARCHAR2 (50);
5695
      pkgid             NUMBER;
5696
      vext              VARCHAR2 (4000);
5697
      dpvid             NUMBER;
5698
      slist             VARCHAR2 (4000);
5699
      cbuildtypes       tdictionary;
5700
      dependencyrow     NUMBER;
5701
      sdependency       VARCHAR2 (4000);
5702
      first_pos         VARCHAR2 (4000);
5703
      second_pos        VARCHAR2 (4000);
5704
      third_pos         VARCHAR2 (4000);
5705
      forth_pos         VARCHAR2 (4000);
5706
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
5707
 
5708
      CURSOR curbuildtype
5709
      IS
5710
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
5711
                dep.build_type
5712
           FROM package_dependencies dep, package_versions dpv
5713
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
5714
 
5715
      recbuildtype      curbuildtype%ROWTYPE;
5716
   BEGIN
5717
      slist := dependenciesimportlist;
5718
 
5719
      -- Preformat String
5720
      IF NOT slist IS NULL
5721
      THEN
5722
         slist := REPLACE (slist, ' ');                      -- Remove spaces
5723
         slist := REPLACE (slist, UTL_TCP.crlf);
5724
         -- Remove new line and carriage-return characters
5725
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
5726
      END IF;
5727
 
5728
      -- Get Current Dependencies
5729
      OPEN curbuildtype;
5730
 
5731
      FETCH curbuildtype
5732
       INTO recbuildtype;
5733
 
5734
      WHILE curbuildtype%FOUND
5735
      LOOP
5736
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
5737
 
5738
         FETCH curbuildtype
5739
          INTO recbuildtype;
5740
      END LOOP;
5741
 
5742
      CLOSE curbuildtype;
5743
 
5744
      -- Separate dependencies with ; separator
5745
      citemcollection := in_list_varchar2 (slist, ';');
5746
 
5747
      BEGIN
5748
         -- Remove old dependencies
5749
         DELETE FROM package_dependencies dep
5750
               WHERE dep.pv_id = pvid;
5751
 
5752
         -- Loop through dependencies
5753
         FOR dependencyrow IN 1 .. citemcollection.COUNT
5754
         LOOP
5755
            -- Extract pkg_name and pkg_version
5756
            sdependency := citemcollection (dependencyrow);
5757
            first_pos := INSTR (sdependency, '"', 1, 1);
5758
            second_pos := INSTR (sdependency, '"', 1, 2);
5759
            third_pos := INSTR (sdependency, '"', 1, 3);
5760
            forth_pos := INSTR (sdependency, '"', 1, 4);
5761
            pkgname :=
5762
               SUBSTR (sdependency,
5763
                       (first_pos + 1),
5764
                       (second_pos - first_pos - 1)
5765
                      );
5766
            pkgversion :=
5767
               SUBSTR (sdependency,
5768
                       (third_pos + 1),
5769
                       (forth_pos - third_pos - 1)
5770
                      );
5771
 
5772
            -- Dependency must exits to be linked against
5773
            BEGIN
5774
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
5775
                 INTO dpvid, pkgid, vext
5776
                 FROM package_versions pv, PACKAGES pkg
5777
                WHERE pv.pkg_id = pkg.pkg_id
5778
                  AND pkg.pkg_name = pkgname
5779
                  AND pv.pkg_version = pkgversion;
5780
            EXCEPTION
5781
               WHEN NO_DATA_FOUND
5782
               THEN
5783
                  raise_application_error
5784
                                  (-20000,
5785
                                      'Dependency ['
5786
                                   || pkgname
5787
                                   || ' '
5788
                                   || pkgversion
5789
                                   || '] does not exist yet and cannot be used!'
5790
                                  );
5791
            END;
5792
 
5793
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
5794
            BEGIN
5795
               buildtype := cbuildtypes (pkgid || seperator || vext);
5796
 
5797
               IF buildtype IS NULL
5798
               THEN
5799
                  -- Set build type to LinkPackageArchive by default
5800
                  buildtype := 'L';
5801
               END IF;
5802
            EXCEPTION
5803
               WHEN NO_DATA_FOUND
5804
               THEN
5805
                  buildtype := 'L';
5806
            END;
5807
 
5808
            -- Insert Dependencies
5809
            update_package_dependency (pvid,
5810
                                       pkgname,
5811
                                       pkgversion,
5812
                                       buildtype,
5813
                                       userid,
5814
 
5815
                                      );
5816
         END LOOP;
5817
      END;
5818
   END;
5819
 
5820
/*-------------------------------------------------------------------------------------------------------*/
5821
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
5822
      RETURN VARCHAR2
5823
   IS
5824
      pkgversion   VARCHAR2 (4000);
5825
   BEGIN
5826
      BEGIN
5827
         SELECT pv.pkg_version
5828
           INTO pkgversion
5829
           FROM PACKAGES pkg, release_content rc, package_versions pv
5830
          WHERE pv.pv_id = rc.pv_id
5831
            AND pkg.pkg_id = pv.pkg_id
5832
            AND pkg.pkg_name = pkgname
5833
            AND rc.rtag_id = rtagid;
5834
 
5835
         RETURN pkgversion;
5836
      END;
5837
   END;
5838
 
5839
/*-------------------------------------------------------------------------------------------------------*/
5840
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
5841
      RETURN VARCHAR2
5842
   IS
5843
      pkgversion   VARCHAR2 (4000);
5844
   BEGIN
5845
      BEGIN
5846
         SELECT pv.pkg_version
5847
           INTO pkgversion
5848
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
5849
          WHERE pv.pv_id = wip.pv_id
5850
            AND pkg.pkg_id = pv.pkg_id
5851
            AND pkg.pkg_name = pkgname
5852
            AND wip.rtag_id = rtagid;
5853
 
5854
         IF pkgversion IS NULL
5855
         THEN
5856
            SELECT pv.pkg_version
5857
              INTO pkgversion
5858
              FROM PACKAGES pkg, planned pl, package_versions pv
5859
             WHERE pv.pv_id = pl.pv_id
5860
               AND pkg.pkg_id = pv.pkg_id
5861
               AND pkg.pkg_name = pkgname
5862
               AND pl.rtag_id = rtagid;
5863
         END IF;
5864
 
5865
         RETURN pkgversion;
5866
      END;
5867
   END;
5868
 
5869
/*-------------------------------------------------------------------------------------------------------*/
5870
   PROCEDURE update_dash_board (rtagid IN NUMBER)
5871
   IS
5872
      projid       NUMBER;
5873
      projiddb     NUMBER;
5874
      total        NUMBER;
5875
      auto_total   NUMBER;
5876
      rtagiddb     NUMBER;
5877
   BEGIN
5878
      SELECT COUNT (*)
5879
        INTO total
5880
        FROM release_content rc, package_versions pv
5881
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
5882
 
5883
      SELECT COUNT (*)
5884
        INTO auto_total
5885
        FROM release_content rc, package_versions pv
5886
       WHERE pv.pv_id = rc.pv_id
5887
         AND pv.is_autobuildable = 'Y'
5888
         AND rc.rtag_id = rtagid;
5889
 
5890
      BEGIN
5891
         SELECT rtag_id
5892
           INTO rtagiddb
5893
           FROM dash_board
5894
          WHERE rtag_id = rtagid;
5895
 
5896
         SELECT proj_id
5897
           INTO projiddb
5898
           FROM dash_board
5899
          WHERE rtag_id = rtagid;
5900
      EXCEPTION
5901
         WHEN NO_DATA_FOUND
5902
         THEN
5903
            rtagiddb := '';
5904
      END;
5905
 
5906
      IF rtagiddb IS NULL
5907
      THEN
5908
         SELECT proj_id
5909
           INTO projid
5910
           FROM release_tags
5911
          WHERE rtag_id = rtagid;
5912
 
5913
         INSERT INTO dash_board
5914
                     (proj_id, rtag_id, last_build_time, automated_packages,
5915
                      total_packages
5916
                     )
5917
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
5918
                      total
5919
                     );
5920
      ELSE
5921
         UPDATE dash_board
5922
            SET last_build_time = ora_sysdatetime,
5923
                automated_packages = auto_total,
5924
                total_packages = total
5925
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
5926
      END IF;
5927
   END;
5928
 
5929
/*-------------------------------------------------------------------------------------------------------*/
5930
   FUNCTION exclude_from_build (
5931
      pvid          IN   NUMBER,
5932
      spkgversion   IN   VARCHAR2,
5933
      rtagid        IN   NUMBER,
5934
      username      IN   VARCHAR2
5935
   )
5936
      RETURN NUMBER
5937
   IS
5938
      userid              NUMBER;
5939
      outerrcode          NUMBER;
5940
      pkgid               NUMBER;
5941
 
5942
      CURSOR dnr_duplicate_cur
5943
      IS
5944
         SELECT *
5945
           FROM do_not_ripple
5946
          WHERE pv_id = pvid AND rtag_id = rtagid;
5947
 
5948
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
5949
   BEGIN
5950
      outerrcode := -1;       -- Set default return error code to ERROR state
5951
 
5952
      /*--------------- Business Rules Here -------------------*/
5953
      IF (rtagid IS NULL)
5954
      THEN
5955
         RETURN outerrcode;
5956
--         raise_application_error (-20000, 'RtagId must be supplied.');
5957
      END IF;
5958
 
5959
      IF (pvid IS NULL)
5960
      THEN
5961
         RETURN outerrcode;
5962
--         raise_application_error (-20000, 'PvId must be supplied.');
5963
      END IF;
5964
 
5965
      IF (username IS NULL)
5966
      THEN
5967
         RETURN outerrcode;
5968
--         raise_application_error (-20000, 'UserName must be supplied.');
5969
      END IF;
5970
 
5971
      -- Get user_id
5972
      BEGIN
5973
         SELECT usr.user_id
5974
           INTO userid
5975
           FROM users usr
5976
          WHERE UPPER (usr.user_name) = UPPER (username)
5977
            AND usr.is_disabled IS NULL;
5978
      EXCEPTION
5979
         WHEN NO_DATA_FOUND
5980
         THEN
5981
            RETURN outerrcode;
5982
--            raise_application_error (-20000,
5983
--                                        'UserName '
5984
--                                     || username
5985
--                                     || ' is not valid or disabled.'
5986
--                                    );
5987
      END;
5988
 
5989
      OPEN dnr_duplicate_cur;
5990
 
5991
      FETCH dnr_duplicate_cur
5992
       INTO dnr_duplicate_rec;
5993
 
5994
      IF dnr_duplicate_cur%FOUND
5995
      THEN
5996
         outerrcode := 0;
5997
      END IF;
5998
 
5999
      IF dnr_duplicate_cur%NOTFOUND
6000
      THEN
6001
         /* No duplicate recordset */
6002
         unripple_package (pvid, rtagid, userid);
6003
         outerrcode := 0;                            -- Set return to SUCCESS
6004
      END IF;
6005
 
6006
      CLOSE dnr_duplicate_cur;
6007
 
6008
      SELECT pkg_id
6009
        INTO pkgid
6010
        FROM package_versions
6011
       WHERE pv_id = pvid;
6012
 
6013
      DELETE FROM planned_versions
6014
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6015
 
6016
      RETURN outerrcode;
6017
   END;
6018
 
6019
/*-------------------------------------------------------------------------------------------------------*/
6020
   FUNCTION exclude_indirect_from_build (
6021
      pvid          IN   NUMBER,
6022
      spkgversion   IN   VARCHAR2,
6023
      rtagid        IN   NUMBER,
6024
      username      IN   VARCHAR2,
6025
      rootpvid      IN   NUMBER,
6026
      rootcause     IN   VARCHAR2,
6027
      rootfile      IN   VARCHAR2
6028
   )
6029
      RETURN NUMBER
6030
   IS
6031
      userid              NUMBER;
6032
      outerrcode          NUMBER;
6033
      pkgid               NUMBER;
6034
 
6035
      CURSOR dnr_duplicate_cur
6036
      IS
6037
         SELECT *
6038
           FROM do_not_ripple
6039
          WHERE pv_id = pvid AND rtag_id = rtagid;
6040
 
6041
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
6042
   BEGIN
6043
      outerrcode := -1;       -- Set default return error code to ERROR state
6044
 
6045
      /*--------------- Business Rules Here -------------------*/
6046
      IF (rtagid IS NULL)
6047
      THEN
6048
         RETURN outerrcode;
6049
--         raise_application_error (-20000, 'RtagId must be supplied.');
6050
      END IF;
6051
 
6052
      IF (pvid IS NULL)
6053
      THEN
6054
         RETURN outerrcode;
6055
--         raise_application_error (-20000, 'PvId must be supplied.');
6056
      END IF;
6057
 
6058
      IF (username IS NULL)
6059
      THEN
6060
         RETURN outerrcode;
6061
--         raise_application_error (-20000, 'UserName must be supplied.');
6062
      END IF;
6063
 
6064
      -- Get user_id
6065
      BEGIN
6066
         SELECT usr.user_id
6067
           INTO userid
6068
           FROM users usr
6069
          WHERE UPPER (usr.user_name) = UPPER (username)
6070
            AND usr.is_disabled IS NULL;
6071
      EXCEPTION
6072
         WHEN NO_DATA_FOUND
6073
         THEN
6074
            RETURN outerrcode;
6075
--            raise_application_error (-20000,
6076
--                                        'UserName '
6077
--                                     || username
6078
--                                     || ' is not valid or disabled.'
6079
--                                    );
6080
      END;
6081
 
6082
     /* No duplicate recordset */
6083
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
6084
     outerrcode := 0;                            -- Set return to SUCCESS
6085
 
6086
      SELECT pkg_id
6087
        INTO pkgid
6088
        FROM package_versions
6089
       WHERE pv_id = pvid;
6090
 
6091
      DELETE FROM planned_versions
6092
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6093
 
6094
      RETURN outerrcode;
6095
   END;
6096
/*-------------------------------------------------------------------------------------------------------*/
6097
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
6098
   IS
6099
   BEGIN
6100
      INSERT INTO abt_action_log
6101
                  (rcon_id, action_datetime, action
6102
                  )
6103
           VALUES (rconid, ora_sysdatetime, action
6104
                  );
6105
   END;
6106
 
6107
/*-------------------------------------------------------------------------------------------------------*/
6108
   FUNCTION insert_package_metrics (
6109
      rtagid                   IN   NUMBER,
6110
      pkgname                  IN   VARCHAR2,
6111
      vext                     IN   VARCHAR2,
6112
      metricstring             IN   VARCHAR2
6113
   )
6114
      RETURN NUMBER
6115
   IS
6116
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
6117
      lv_pvid                  NUMBER                 := 0;
6118
      rownumber                NUMBER;
6119
      rowcontent               VARCHAR2(4000);
6120
      metricname               VARCHAR2(1000);
6121
      metricvalue              VARCHAR2(4000);
6122
      return_insert_error      NUMBER                 := -1;
6123
      return_insert_success    NUMBER                 := 0;
6124
 
6125
      /* Metrics */
6126
      lv_branches                 NUMBER;
6127
      lv_branchlist               VARCHAR2(4000);
6128
      lv_codefiles                NUMBER;
6129
      lv_ignoredfiles             NUMBER;
6130
      lv_directories              NUMBER;
6131
      lv_directorydepth           NUMBER;
6132
      lv_totalfiles               NUMBER;
6133
      lv_makefiles                NUMBER;
6134
      lv_blanklines               NUMBER;
6135
      lv_codelines                NUMBER;
6136
      lv_commentlines             NUMBER;
6137
 
6138
   BEGIN
6139
      /*--------------- Business Rules Here -------------------*/
6140
      IF (rtagid IS NULL)
6141
      THEN
6142
         RETURN return_insert_error;
6143
      END IF;
6144
 
6145
      IF (pkgname IS NULL)
6146
      THEN
6147
         RETURN return_insert_error;
6148
      END IF;
6149
 
6150
      IF (metricstring IS NULL)
6151
      THEN
6152
         RETURN return_insert_error;
6153
      END IF;
6154
 
6155
      BEGIN
6156
         SELECT pv.pv_id
6157
           INTO lv_pvid
6158
           FROM package_versions pv, packages pkg, release_content rc
6159
          WHERE pv.pkg_id = pkg.pkg_id
6160
            AND rc.rtag_id = rtagid
6161
            AND pv.pv_id = rc.pv_id
6162
            AND pkg.pkg_name = pkgname
6163
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
6164
      EXCEPTION
6165
           WHEN NO_DATA_FOUND
6166
           THEN
6167
                lv_pvid := 0;
6168
      END;
6169
 
6170
      citemcollection := in_list_varchar2 (metricstring, ';');
6171
 
6172
      FOR rownumber IN 1 .. citemcollection.COUNT
6173
      LOOP
6174
         rowcontent := citemcollection(rownumber);
6175
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
6176
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
6177
 
6178
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
6179
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
6180
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
6181
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
6182
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
6183
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
6184
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
6185
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
6186
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
6187
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
6188
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
6189
         END IF;
6190
      END LOOP;
6191
 
6192
      IF (lv_pvid > 0)
6193
      THEN
6194
         -- Delete any existing entries for this package version to makes sure our data is untainted
6195
         DELETE FROM package_metrics pm
6196
         WHERE pm.pv_id = lv_pvid;
6197
 
6198
         -- Insert the new data into the metrics table
6199
         INSERT INTO package_metrics
6200
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
6201
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
6202
                     )
6203
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
6204
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
6205
                     );
6206
 
6207
         -- Now update the Release_Metrics Table
6208
         update_release_metrics(rtagid);
6209
 
6210
         RETURN return_insert_success;
6211
      ELSE
6212
         RETURN return_insert_error;
6213
      END IF;
6214
   END;
6215
 
6216
/*-------------------------------------------------------------------------------------------------------*/
6217
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
6218
   IS
6219
      lv_totalpackages       NUMBER;
6220
      lv_autobuilt           NUMBER;
6221
      lv_linesofcode         NUMBER;
6222
      lv_unittested          NUMBER;
6223
      lv_autotested          NUMBER;
6224
      lv_numOfbranches       NUMBER;
6225
      lv_lastbuildtime       DATE;
6226
   BEGIN
6227
      IF (rtagid > 0)
6228
      THEN
6229
         -- Get the total number of packages in this release and the number of
6230
         -- those that are autobuilt
6231
         SELECT COUNT (DISTINCT rc.pv_id),
6232
                COUNT (DISTINCT autobuilt_qry.pv_id)
6233
           INTO lv_totalpackages, lv_autobuilt
6234
           FROM release_content rc,
6235
                package_versions pv,
6236
                (
6237
                 SELECT rc.pv_id
6238
                   FROM release_content rc,
6239
                        package_versions pv
6240
                  WHERE pv.is_autobuildable = 'Y'
6241
                    AND pv.pv_id = rc.pv_id
6242
                    AND rc.rtag_id = rtagid
6243
                ) autobuilt_qry
6244
          WHERE pv.pv_id = rc.pv_id
6245
            AND rc.rtag_id = rtagid
6246
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
6247
 
6248
         -- Get the build time of the last package built in this release and the
6249
         -- total number of lines of code
6250
         SELECT MAX(pm.created_stamp),
6251
                SUM(pm.code_lines)
6252
           INTO lv_lastbuildtime, lv_linesofcode
6253
           FROM package_metrics pm, release_content rc
6254
          WHERE pm.pv_id = rc.pv_id
6255
            AND rc.rtag_id = rtagid;
6256
 
6257
         -- Get the number of packages with unit tests in this release and the
6258
         -- number of those that are autotested
6259
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
6260
           FROM unit_tests ut,
6261
                release_content rc
6262
          WHERE ut.pv_id = rc.pv_id
6263
            AND rc.rtag_id = rtagid
6264
        AND ut.test_types_fk != 1;
6265
 
6266
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
6267
          FROM unit_tests ut,
6268
               release_content rc
6269
         WHERE ut.pv_id = rc.pv_id
6270
           AND rc.rtag_id = rtagid
6271
           AND ut.test_types_fk = 7;
6272
 
6273
 
6274
         -- Count the number of unique branches in the packages in this release.
6275
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
6276
--           FROM (
6277
--                SELECT pv_id,
6278
--                       regexp_substr(str, '[^,]+', 1, level) branch,
6279
--                       level lv,
6280
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
6281
--                  FROM (
6282
--                       SELECT pm.pv_id,
6283
--                              ','||pm.branch_list str
6284
--                         FROM package_metrics pm,
6285
--                              release_content rc
6286
--                        WHERE pm.pv_id = rc.pv_id
6287
--                          AND rc.rtag_id = rtagid
6288
--                       )
6289
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
6290
--                )
6291
--          WHERE lv != lg;
6292
 
6293
         UPDATE release_metrics rm
6294
            SET rm.total_packages = lv_totalpackages,
6295
                rm.autobuilt = lv_autobuilt,
6296
                rm.lines_of_code = lv_linesofcode,
6297
                rm.unit_tested = lv_unittested,
6298
                rm.autotested = lv_autotested,
6299
--                rm.branches = lv_numOfbranches,
6300
                rm.last_build_time = lv_lastbuildtime
6301
          WHERE rtag_id = rtagid;
6302
 
6303
         IF (SQL%ROWCOUNT = 0)
6304
         THEN
6305
            INSERT INTO release_metrics
6306
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6307
                         autotested, last_build_time
6308
                        )
6309
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6310
                         lv_autotested, lv_lastbuildtime
6311
                        );
6312
         END IF;
6313
--         IF (SQL%ROWCOUNT = 0)
6314
--         THEN
6315
--            INSERT INTO release_metrics
6316
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6317
--                         autotested, branches, last_build_time
6318
--                        )
6319
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6320
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
6321
--                        );
6322
--         END IF;
6323
--      ELSE
6324
--         raise_application_error (-20000, 'RtagId must be supplied.');
6325
      END IF;
6326
   END;
6327
/*-------------------------------------------------------------------------------------------------------*/
6328
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
6329
   IS
6330
      vcstypeid    NUMBER;
6331
      vcstag       VARCHAR2(32);
6332
      label        VARCHAR2(60);
6333
      srcpath      VARCHAR2(2000);
6334
      vcstypeid_cc NUMBER;
6335
      vcstypeid_uc NUMBER;
6336
   BEGIN
6337
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
6338
      -- what the primary key value is for the ClearCase VCS entry.
6339
      BEGIN
6340
         SELECT vt.vcs_type_id
6341
         INTO vcstypeid_cc
6342
         FROM VCS_TYPE vt
6343
         WHERE vt.tag = 'CC';
6344
         EXCEPTION
6345
            WHEN NO_DATA_FOUND THEN
6346
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
6347
      END;
6348
 
6349
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
6350
      -- what the primary key value is for the Uncontrolled VCS entry.
6351
      BEGIN
6352
         SELECT vt.vcs_type_id
6353
         INTO vcstypeid_uc
6354
         FROM VCS_TYPE vt
6355
         WHERE vt.tag = 'UC';
6356
         EXCEPTION
6357
            WHEN NO_DATA_FOUND THEN
6358
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
6359
      END;
6360
 
6361
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
6362
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
6363
      BEGIN
6364
         SELECT pv.pkg_label, pv.src_path,
6365
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
6366
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
6367
                 ELSE pv.vcs_type_id END) AS vcs_type_id
6368
         INTO label, srcpath, vcstypeid
6369
         FROM PACKAGE_VERSIONS pv
6370
         WHERE pv.pv_id = pvid;
6371
         EXCEPTION
6372
            WHEN NO_DATA_FOUND THEN
6373
               raise_application_error (-20000, 'Package Version Not Found!');
6374
      END;
6375
 
6376
      -- Get the VCS TAG for the VCS_TYPE_ID.
6377
      BEGIN
6378
         SELECT vt.tag
6379
         INTO vcstag
6380
         FROM VCS_TYPE vt
6381
         WHERE vt.vcs_type_id = vcstypeid;
6382
         EXCEPTION
6383
            WHEN NO_DATA_FOUND THEN
6384
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
6385
      END;
6386
 
6387
      -- Return value depending upon which VCS Tag is being used.
6388
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
6389
      CASE vcstag
6390
         WHEN 'CC' THEN
6391
            RETURN vcstag || '::' || srcpath || '::' || label;
6392
         WHEN 'SVN' THEN
6393
            RETURN vcstag || '::' || srcpath;
6394
         ELSE
6395
            RETURN vcstag || '::';
6396
      END CASE;
6397
 
6398
   END;
6399
/*-------------------------------------------------------------------------------------------------------*/
6400
 
6401
END pk_rmapi_test;
1374 dpurdie 6402
/
6403
--------------------------------------------------------
6404
--  DDL for Package Body PK_LICENCING
6405
--------------------------------------------------------
1373 dpurdie 6406
 
6407
  CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS
6408
 
6409
/*
6410
------------------------------
6411
||  Last Modified:  G.Huddy
6412
||  Modified Date:  19/Aug/2008
6413
||  Body Version:   1.0
6414
------------------------------
6415
*/
6416
 
6417
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6418
   BEGIN
6419
      IF IS_LICENCED(PvId, licenceId) = 0 THEN
6420
         -- Add entry to licencing table
6421
         INSERT INTO licencing (pv_id, licence)
6422
         VALUES (PvId, licenceId);
6423
 
6424
         -- log action
6425
         -- TODO
6426
      END IF;
6427
 
6428
   END;
6429
 
6430
/*-------------------------------------------------------------------------------------------------------*/
6431
 
6432
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6433
   BEGIN
6434
      IF NOT IS_LICENCED(PvId, licenceId) = 0 THEN
6435
         -- Delete entry from licencing table
6436
         DELETE FROM licencing
6437
         WHERE pv_id = PvId
6438
         AND licence = licenceId;
6439
 
6440
         -- log action
6441
         -- TODO
6442
      END IF;
6443
   END;
6444
 
6445
/*-------------------------------------------------------------------------------------------------------*/
6446
 
6447
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) IS
6448
 
6449
      CURSOR licencing_cur
6450
      IS
6451
         SELECT *
6452
         FROM licencing
6453
         WHERE pv_id = fromPvId;
6454
 
6455
      licencing_rec licencing_cur%ROWTYPE;
6456
 
6457
   BEGIN
6458
      -- For each licence association that the Last PV_ID had, create a similar
6459
      -- arrangement for the new PV_ID
6460
      -- NOTE that any additional licencing associations the new PV_ID has that the old one
6461
      -- does not have, are retained. The assumption is that the user has made those and so we do not
6462
      -- have any right to destroy them without asking them.
6463
      OPEN licencing_cur;
6464
 
6465
      FETCH licencing_cur
6466
      INTO licencing_rec;
6467
 
6468
      WHILE licencing_cur%FOUND
6469
      LOOP
6470
         ADD_LICENCE ( toPvId, licencing_rec.licence, UserId );
6471
 
6472
         FETCH licencing_cur
6473
         INTO licencing_rec;
6474
      END LOOP;
6475
   END;
6476
 
6477
/*-------------------------------------------------------------------------------------------------------*/
6478
 
6479
   FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER IS
6480
      found NUMBER;
6481
   BEGIN
6482
 
6483
      SELECT COUNT(*) INTO found
6484
      FROM licencing
6485
      WHERE pv_id = PvId
6486
      AND licence = LicenceId;
6487
 
6488
      RETURN found;
6489
   END;
6490
 
6491
/*-------------------------------------------------------------------------------------------------------*/
6492
 
6493
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) IS
6494
 
6495
      CURSOR licencing_cur
6496
      IS
6497
         SELECT *
6498
         FROM licencing
6499
         WHERE pv_id = PvId;
6500
 
6501
      licencing_rec licencing_cur%ROWTYPE;
6502
   BEGIN
6503
      -- For each licence association that the PV_ID had, remove it
6504
      OPEN licencing_cur;
6505
 
6506
      FETCH licencing_cur
6507
      INTO licencing_rec;
6508
 
6509
      WHILE licencing_cur%FOUND
6510
      LOOP
6511
         REMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );
6512
 
6513
         FETCH licencing_cur
6514
         INTO licencing_rec;
6515
      END LOOP;
6516
   END;
6517
 
6518
/*-------------------------------------------------------------------------------------------------------*/
6519
END PK_LICENCING;
1374 dpurdie 6520
/
6521
--------------------------------------------------------
6522
--  DDL for Package Body RM_ISSUES
6523
--------------------------------------------------------
1373 dpurdie 6524
 
6525
  CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS
6526
 
6527
-- Private Implementation -----------------------------------------------------
6528
 
6529
 
6530
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6531
	AS
6532
 
6533
	BEGIN
6534
		-- start boundary case
6535
		IF ( XXstart < XX ) THEN
6536
			RETURN 1;
6537
 
6538
		ELSIF ( XXstart = XX ) THEN
6539
 
6540
			-- need to consider YY
6541
			IF ( YYstart < YY ) THEN
6542
				RETURN 1;
6543
 
6544
			ELSIF ( YYstart = YY ) THEN
6545
 
6546
					-- need to consider ZZ
6547
					IF ( ZZstart <= ZZ ) THEN
6548
						RETURN 1;
6549
 
6550
					ELSE
6551
						RETURN 0;
6552
					END IF;
6553
 
6554
			ELSE
6555
				RETURN 0;
6556
			END IF;
6557
		ELSE
6558
			RETURN 0;
6559
		END IF;
6560
	EXCEPTION
6561
		WHEN OTHERS THEN
6562
			RETURN -1;
6563
	END;
6564
 
6565
 
6566
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6567
	AS
6568
 
6569
	BEGIN
6570
		-- end boundary case
6571
		IF ( XX < XXend ) THEN
6572
			RETURN 1;
6573
 
6574
		ELSIF ( XX = XXend ) THEN
6575
 
6576
			-- need to consider YY
6577
			IF ( YY < YYend ) THEN
6578
				RETURN 1;
6579
 
6580
			ELSIF ( YY = YYend ) THEN
6581
 
6582
					-- need to consider ZZ
6583
					IF ( ZZ <= ZZend ) THEN
6584
						RETURN 1;
6585
 
6586
					ELSE
6587
						RETURN 0;
6588
					END IF;
6589
			ELSE
6590
 
6591
				RETURN 0;
6592
			END IF;
6593
		ELSE
6594
			RETURN 0;
6595
		END IF;
6596
	EXCEPTION
6597
		WHEN OTHERS THEN
6598
			RETURN -1;
6599
	END;
6600
 
6601
	/*
6602
	-	version format:		XX.YY.ZZ.abc
6603
	*/
6604
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER
6605
	AS
6606
		XXstart		NUMBER	:=	0;
6607
		XXend		NUMBER	:=	0;
6608
		XX			NUMBER	:=	0;
6609
		YYstart		NUMBER	:=	0;
6610
		YYend		NUMBER	:=	0;
6611
		YY			NUMBER	:=	0;
6612
		ZZstart		NUMBER	:=	0;
6613
		ZZend		NUMBER	:=	0;
6614
		ZZ			NUMBER	:=	0;
6615
		first_dot	NUMBER	:=	0;
6616
		second_dot	NUMBER	:=	0;
6617
		third_dot	NUMBER	:=	0;
6618
 
6619
		ProjExtstart	VARCHAR2(10);
6620
		ProjExtend		VARCHAR2(10);
6621
		ProjExt			VARCHAR2(10);
6622
 
6623
	BEGIN
6624
		-- strip the version number
6625
		first_dot :=  INSTR(version_start, '.', 1, 1);
6626
		second_dot :=  INSTR(version_start, '.', 1, 2);
6627
		third_dot :=  INSTR(version_start, '.', 1, 3);
6628
 
6629
		XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );
6630
		YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6631
		ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6632
		ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );
6633
 
6634
		first_dot :=  INSTR(version_end, '.', 1, 1);
6635
		second_dot :=  INSTR(version_end, '.', 1, 2);
6636
		third_dot :=  INSTR(version_end, '.', 1, 3);
6637
 
6638
		XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );
6639
		YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6640
		ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6641
		ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );
6642
 
6643
		first_dot :=  INSTR(version, '.', 1, 1);
6644
		second_dot :=  INSTR(version, '.', 1, 2);
6645
		third_dot :=  INSTR(version, '.', 1, 3);
6646
 
6647
		XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );
6648
		YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6649
		ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6650
		ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );
6651
 
6652
		-- only include versions if all project extensions are the same
6653
		IF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THEN
6654
 
6655
			IF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THEN
6656
				RETURN 1;
6657
			ELSE
6658
				RETURN 0;
6659
			END IF;
6660
		ELSE
6661
			RETURN 0;
6662
		END IF;
6663
 
6664
	EXCEPTION
6665
		WHEN OTHERS THEN
6666
			RETURN -1;
6667
	END;
6668
 
6669
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER
6670
	AS
6671
	    pkg_id NUMBER;
6672
	BEGIN
6673
		SELECT
6674
			p.PKG_ID
6675
		INTO
6676
			pkg_id
6677
		FROM
6678
			PACKAGES p
6679
		WHERE
6680
			p.PKG_NAME = pkgName;
6681
 
6682
		RETURN pkg_id;
6683
	EXCEPTION
6684
	    WHEN OTHERS THEN
6685
			dbms_output.put_line('GetPkgId exception: ' || SQLERRM );
6686
			RETURN -1;
6687
	END;
6688
 
6689
 
6690
-- Public Implementation ------------------------------------------------------
6691
 
6692
	/*
6693
	-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep
6694
	--
6695
	-- INPUT PARAMETERS:
6696
	--
6697
	--		pkg_name  	-  	The name of the top level package to get issues for
6698
	--		version_start	-	The start version for the comparison
6699
	--		version_end	-	The end version for the comparison
6700
	*/
6701
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6702
	AS
6703
		pkgId	NUMBER;
6704
	BEGIN
6705
		-- get pkg_id of the input package:
6706
		pkgId := GetPkgId( pkg_name );
6707
 
6708
		OPEN vCursor FOR
6709
		SELECT
6710
			  pv.PKG_ID,
6711
			  pv.PKG_VERSION,
6712
			  pv.PV_ID,
6713
			  i_pkg.ISS_ID,
6714
			  ( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,
6715
			  pd.DPKG_ID,
6716
			  ( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,
6717
			  pd.DPV_ID,
6718
			  i_dpkg.ISS_ID AS ISSUE_ID
6719
		FROM
6720
			 PACKAGE_VERSIONS pv
6721
							  LEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_ID
6722
							  LEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_ID
6723
							  LEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_ID
6724
		WHERE
6725
   			 pv.PKG_ID = pkgId
6726
		AND
6727
			VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1
6728
		AND
6729
			 ( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )
6730
		ORDER BY
6731
			 pv.PKG_ID,
6732
			 pv.PV_ID,
6733
			 pd.DPKG_ID,
6734
			 pd.DPV_ID;
6735
	EXCEPTION
6736
		WHEN OTHERS THEN
6737
			dbms_output.put_line('AllIssues exception: ' || SQLERRM );
6738
	END;
6739
 
6740
 
6741
	-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok
6742
 
6743
	/*
6744
	-- Proc: LoadIssuesTable
6745
	--
6746
	-- Populates Package_Issues table with details of issues from all dependent packages.
6747
	-- This will be for all package versions of the input pkg_name between the
6748
	-- version_start and version_end.
6749
	--
6750
	-- INPUT PARAMETERS:
6751
	--
6752
	--		pkg_name  	-  	The name of the top level package to get issues for
6753
	--		version_start	-	The start version for the comparison
6754
	--		version_end	-	The end version for the comparison
6755
	*/
6756
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6757
	AS
6758
		pkgId	NUMBER;
6759
 
6760
		CURSOR pack_vers_cur IS
6761
			SELECT
6762
				pv.PV_ID,
6763
				pv.PKG_VERSION,
6764
				pv.PKG_ID,
6765
				p.PKG_NAME
6766
			FROM
6767
				PACKAGE_VERSIONS pv
6768
					JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6769
			WHERE
6770
   				 pv.PKG_ID = pkgId
6771
			AND
6772
				VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;
6773
 
6774
	BEGIN
6775
		DELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6776
 
6777
		-- get the pkg_id we are finding issues for
6778
		pkgId := GetPkgId( pkg_name );
6779
 
6780
		-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.
6781
		FOR pack_ver_rec IN  pack_vers_cur
6782
		LOOP
6783
			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 );
6784
			COMMIT;
6785
		END LOOP;
6786
 
6787
		-- The output cursor - shows the individual versions of the top level package then were reported on
6788
		OPEN vCursor FOR
6789
		SELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6790
/*removed
6791
		SELECT
6792
			PKG_VERSION
6793
		FROM
6794
			RELEASE_MANAGER.RM_PACKAGE_ISSUES;
6795
*/
6796
 
6797
 
6798
	EXCEPTION
6799
		WHEN OTHERS THEN
6800
			dbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );
6801
	END;
6802
 
6803
 
6804
	/*
6805
	-- Proc: InsertIssuesForDepends
6806
	--
6807
	-- Used by LoadIssuesTable to recursively find issues for all dependent packages
6808
	--
6809
	-- INPUT PARAMETERS:
6810
	--
6811
	--		pvID  		-  	The package version id of the package to get issues for
6812
	--		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)
6813
	--		top_pkgName -  	The package name of the top level package
6814
	--		top_pvID  	-  	The package version id of the top level package
6815
	--		top_pkgVer  -  	The package version description of the top level package
6816
	*/
6817
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )
6818
	AS
6819
		pkgId		NUMBER;
6820
		issCnt		NUMBER := 0;
6821
		pkgCheck	NUMBER := 0;
6822
		depCheck	NUMBER := 0;
6823
 
6824
		dpkgName	VARCHAR(50);
6825
		dpkgVersion	VARCHAR(50);
6826
 
6827
		CURSOR dep_packs_cur IS
6828
			SELECT
6829
				DPV_ID
6830
			FROM
6831
				PACKAGE_DEPENDENCIES
6832
			WHERE
6833
				PV_ID = pvID;
6834
 
6835
	BEGIN
6836
 
6837
		-- check to see if the package has been processed previously
6838
		SELECT
6839
			COUNT(*)
6840
		INTO
6841
			pkgCheck
6842
		FROM
6843
			RM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6844
		WHERE
6845
			DPV_ID = pvID;
6846
 
6847
		dbms_output.put_line('pkgCheck: ' || pkgCheck );
6848
 
6849
		-- Package not already processed (no cyclic dependency) - process it
6850
		IF ( pkgCheck = 0 ) THEN
6851
 
6852
			-- check to see if this package version has any issues assigned to it
6853
			SELECT
6854
				COUNT(*)
6855
			INTO
6856
				issCnt
6857
			FROM
6858
				CQ_ISSUES i
6859
			WHERE
6860
				i.PV_ID = pvID;
6861
 
6862
			dbms_output.put_line('issCnt: ' || issCnt );
6863
 
6864
			-- Always enter a marker row into the table even if there are no issues for the package.
6865
			-- This allows us to pick up any cyclic dependencies.
6866
			IF ( issCnt > 0 ) THEN
6867
				-- get issues and insert into RM_PACKAGE_ISSUES
6868
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6869
 
6870
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6871
					SELECT DISTINCT
6872
						top_pkgID		AS PKG_ID,
6873
						top_pkgName		AS PKG_NAME,
6874
						top_pvID		AS PV_ID,
6875
						top_pkgVer		AS PKG_VERSION,
6876
						pv.PV_ID		AS DPV_ID,
6877
						p.PKG_NAME		AS DPKG_NAME,
6878
						pv.PKG_VERSION	AS DPKG_VERSION,
6879
						ci.ISS_DB,
6880
						ci.ISS_ID
6881
					FROM
6882
						PACKAGE_VERSIONS pv
6883
							JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6884
							JOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_ID
6885
					WHERE
6886
						pv.PV_ID = pvID;
6887
 
6888
			ELSE
6889
				-- get the dpkg details - there will always be a row returned here
6890
				SELECT
6891
					p.PKG_NAME
6892
				INTO
6893
					dpkgName
6894
				FROM
6895
					PACKAGE_VERSIONS pv
6896
						JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6897
				WHERE
6898
	   				 pv.PV_ID = pvID;
6899
 
6900
				SELECT
6901
					pv.PKG_VERSION
6902
				INTO
6903
					dpkgVersion
6904
				FROM
6905
					PACKAGE_VERSIONS pv
6906
				WHERE
6907
	   				 pv.PV_ID = pvID;
6908
 
6909
				-- enter a marker row
6910
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6911
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6912
				VALUES (
6913
					top_pkgID,
6914
					top_pkgName,
6915
					top_pvID,
6916
					top_pkgVer,
6917
					pvID,
6918
					dpkgName,
6919
					dpkgVersion,
6920
					NULL,
6921
					NULL );
6922
 
6923
			END IF;
6924
 
6925
			-- If this package version has dependencies then recurse
6926
			SELECT
6927
				COUNT(*)
6928
			INTO
6929
				depCheck
6930
			FROM
6931
				PACKAGE_DEPENDENCIES
6932
			WHERE
6933
				PV_ID = pvID;
6934
 
6935
			IF ( depCheck > 0 ) THEN
6936
				-- get dependencies and call this function recursively for each one
6937
				FOR dep_rec IN  dep_packs_cur
6938
				LOOP
6939
					InsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );
6940
				END LOOP;
6941
 
6942
			END IF;
6943
 
6944
		END IF;
6945
 
6946
	/*EXCEPTION
6947
		WHEN OTHERS THEN
6948
			no exception handling required
6949
	*/
6950
	END;
6951
 
6952
END Rm_Issues;
1374 dpurdie 6953
/
6954
--------------------------------------------------------
6955
--  DDL for Package Body PK_RELEASE_TEST
6956
--------------------------------------------------------
1373 dpurdie 6957
 
6958
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE_TEST" IS
6959
 
6960
 
6961
/*
6962
------------------------------
6963
||  Last Modified:  S.Vukovic
6964
||  Modified Date:  12/Sep/2005
6965
||  Body Version:   3.0
6966
------------------------------
6967
*/
6968
 
6969
 
6970
/*-------------------------------------------------------------------------------------------------------*/
6971
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
6972
 
6973
RtagId NUMBER;
6974
ParentRtagId NUMBER;
6975
RecCount NUMBER := 0;
6976
 
6977
 
6978
BEGIN
6979
	/*--------------- Business Rules Here -------------------*/
6980
	-- Check for missing parameters
6981
	IF (sReleaseName IS NULL) OR (nUserId IS NULL)
6982
	THEN
6983
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
6984
 
6985
	END IF;
6986
 
6987
 
6988
	-- Check for duplicate Release Names
6989
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
6990
	  FROM RELEASE_TAGS rt
6991
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
6992
	   AND rt.PROJ_ID = nProjId;
6993
 
6994
	IF (RecCount > 0) THEN
6995
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
6996
	END IF;
6997
	/*-------------------------------------------------------*/
6998
 
6999
 
7000
	-- Get rtag_id
7001
	SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
7002
 
7003
 
7004
 
7005
	-- Get Parent RtagId
7006
	ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
7007
 
7008
 
7009
	-- Create new release
7010
	INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID, 
7011
							   OFFICIAL, REBUILD_ENV, REBUILD_STAMP, 
7012
							   PARENT_RTAG_ID, PROJ_ID )
7013
	VALUES ( RtagId, 
7014
			 sReleaseName, 
7015
			 sReleaseComments,
7016
			 ORA_SYSDATE,
7017
			 nUserId,
7018
			 'N',
7019
			 'N',
7020
			 0,
7021
			 ParentRtagId,
7022
			 nProjId );
7023
 
7024
	-- Update display Order
7025
	UPDATE_DISPLAY_ORDER ( nProjId );
7026
 
7027
	/* Log Project Action */
7028
	Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
7029
 
7030
 
7031
	-- Import Release Contents
7032
	IF (NOT nSourceRtagId IS NULL) THEN
7033
		Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
7034
 
7035
	END IF;
7036
 
7037
 
7038
 
7039
END;
7040
/*-------------------------------------------------------------------------------------------------------*/
7041
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
7042
 
7043
 
7044
BEGIN
7045
 
7046
 
7047
	/*--------------- Business Rules Here -------------------*/
7048
	/*-------------------------------------------------------*/
7049
 
7050
	UPDATE RELEASE_TAGS urt SET
7051
	urt.DISPLAY_ORDER = (
7052
						SELECT qry.REC_NUM
7053
						  FROM (	
7054
								SELECT rel.*, ROWNUM AS REC_NUM
7055
								  FROM (
7056
 
7057
								  		SELECT rt.RTAG_ID, 
7058
											   rt.DISPLAY_ORDER,
7059
										       DECODE( rt.PARENT_RTAG_ID, 
7060
											   		   rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
7061
										  FROM RELEASE_TAGS rt
7062
										 WHERE rt.PROJ_ID = nProjId 
7063
 
7064
								  		) rel
7065
								START WITH rel.PARENT_RTAG_ID = 0
7066
								CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID   
7067
								ORDER SIBLINGS BY rel.DISPLAY_ORDER
7068
								) qry
7069
					      WHERE qry.RTAG_ID = urt.RTAG_ID 								
7070
						)
7071
	WHERE urt.PROJ_ID = nProjId;
7072
 
7073
END;
7074
/*-------------------------------------------------------------------------------------------------------*/
7075
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
7076
 
7077
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();						 
7078
	SeqNum NUMBER;
7079
 
7080
BEGIN
7081
 
7082
 
7083
	/*--------------- Business Rules Here -------------------*/
7084
	/*-------------------------------------------------------*/
7085
 
7086
	nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
7087
 
7088
	-- Set start sequence number
7089
	SeqNum := 1;
7090
 
7091
	FOR i IN 1..nIdCollector.COUNT
7092
	LOOP
7093
 
7094
		-- Update new display order
7095
		UPDATE RELEASE_TAGS rt SET
7096
			rt.DISPLAY_ORDER = SeqNum
7097
		 WHERE rt.PROJ_ID = nProjId
7098
		   AND rt.RTAG_ID = nIdCollector(i);
7099
 
7100
		SeqNum := SeqNum + 1;
7101
 
7102
	END LOOP;
7103
 
7104
END;
7105
/*-------------------------------------------------------------------------------------------------------*/
7106
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
7107
 
7108
RecCount NUMBER := 0;
7109
ProjId NUMBER;
7110
 
7111
BEGIN
7112
 
7113
 
7114
	/*--------------- Business Rules Here -------------------*/
7115
	-- Check for missing parameters
7116
	IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
7117
	THEN
7118
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
7119
 
7120
	END IF;
7121
 
7122
 
7123
	-- Check for duplicate Release Names
7124
	SELECT rt.PROJ_ID INTO ProjId
7125
	  FROM RELEASE_TAGS rt
7126
	 WHERE rt.RTAG_ID = nRtagId;
7127
 
7128
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
7129
	  FROM RELEASE_TAGS rt
7130
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
7131
	   AND rt.RTAG_ID != nRtagId
7132
	   AND rt.PROJ_ID = ProjId;
7133
 
7134
 
7135
	IF (RecCount > 0) THEN
7136
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7137
	END IF;
7138
	/*-------------------------------------------------------*/
7139
 
7140
 
7141
 
7142
	-- Update release details
7143
	UPDATE RELEASE_TAGS rt SET
7144
	rt.RTAG_NAME = sReleaseName,
7145
	rt.DESCRIPTION = sReleaseComments,
7146
	rt.PARENT_RTAG_ID = nParentRtagId,
7147
	rt.ASSOC_MASS_REF = nMASSRtagId,
7148
	rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch
7149
	WHERE rt.RTAG_ID = nRtagId; 
7150
 
7151
	-- Update display Order
7152
	UPDATE_DISPLAY_ORDER ( ProjId );
7153
 
7154
	/* Log Project Action */
7155
	Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
7156
 
7157
 
7158
 
7159
 
7160
END;
7161
/*-------------------------------------------------------------------------------------------------------*/
7162
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7163
 
7164
	RecCount NUMBER := 0;
7165
	sReleaseId VARCHAR2(4000);
7166
	ProjId NUMBER;
7167
 
7168
BEGIN
7169
	/*--------------- Business Rules Here -------------------*/
7170
	IF (nRtagId IS NULL) 
7171
	THEN
7172
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7173
	END IF;
7174
 
7175
 
7176
 
7177
	-- Check for any kids
7178
	SELECT COUNT( rt.RTAG_ID ) INTO RecCount
7179
	  FROM RELEASE_TAGS rt
7180
	 WHERE rt.PARENT_RTAG_ID = nRtagId
7181
	   AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
7182
 
7183
	IF (RecCount > 0) THEN
7184
		RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
7185
	END IF; 
7186
	/*-------------------------------------------------------*/
7187
 
7188
	-- Clear the release contents
7189
	Clean_Release_Contents ( nRtagId, nUserId );
7190
 
7191
	/* Log Project Action */
7192
	SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
7193
	  FROM RELEASE_TAGS rt
7194
	 WHERE rt.RTAG_ID = nRtagId;
7195
 
7196
	Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
7197
 
7198
 
7199
	-- Remove Release
7200
	DELETE 
7201
	  FROM RELEASE_TAGS rt
7202
	 WHERE rt.RTAG_ID = nRtagId;
7203
 
7204
 
7205
 
7206
END;
7207
/*-------------------------------------------------------------------------------------------------------*/
7208
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
7209
 
7210
	sSourceLocation VARCHAR2(4000);
7211
	sTargetLocation VARCHAR2(4000);
7212
	ProjId NUMBER;
7213
	cReleaseMode CHAR(1);
7214
 
7215
 
7216
BEGIN
7217
	/*--------------- Business Rules Here -------------------*/
7218
	IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
7219
	THEN
7220
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
7221
	END IF;
7222
 
7223
	IF (nSourceRtagId = nTargetRtagId) THEN
7224
		RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
7225
	END IF;
7226
 
7227
 
7228
	-- Check if Target release is in OPEN mode
7229
	SELECT rt.OFFICIAL  INTO  cReleaseMode
7230
	  FROM RELEASE_TAGS rt
7231
	 WHERE rt.RTAG_ID = nTargetRtagId;
7232
 
7233
	IF (cReleaseMode != 'N') THEN
7234
		RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
7235
	END IF;	 
7236
 
7237
	/*-------------------------------------------------------*/
7238
 
7239
	-- Clean target contents
7240
	Clean_Release_Contents ( nTargetRtagId, nUserId );
7241
 
7242
 
7243
	-- Import Released Area Contents
7244
	INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE ) 
7245
	SELECT nTargetRtagId AS RTAG_ID, 
7246
		   rc.PV_ID, 
7247
		   rc.BASE_VIEW_ID, 
7248
		   rc.INSERT_STAMP, 
7249
		   rc.INSERTOR_ID, 
7250
		   rc.PKG_STATE
7251
	  FROM RELEASE_CONTENT rc
7252
	 WHERE rc.RTAG_ID = nSourceRtagId;
7253
 
7254
 
7255
	-- Import Ignore Warning states
7256
	INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
7257
	SELECT nTargetRtagId AS RTAG_ID,
7258
	       igw.PV_ID,
7259
	       igw.DPV_ID
7260
	  FROM IGNORE_WARNINGS igw
7261
	 WHERE igw.rtag_id = nSourceRtagId;
7262
 
7263
 
7264
	/* Log Project Action */
7265
	-- Get Source Location
7266
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
7267
	  FROM RELEASE_TAGS rt,
7268
	  	   PROJECTS pr
7269
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7270
	   AND rt.RTAG_ID = nSourceRtagId;
7271
 
7272
	-- Get Target Location
7273
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
7274
	  FROM RELEASE_TAGS rt,
7275
	  	   PROJECTS pr
7276
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7277
	   AND rt.RTAG_ID = nTargetRtagId;	   
7278
 
7279
	-- Get project id   
7280
	SELECT rt.PROJ_ID  INTO  ProjId
7281
	  FROM RELEASE_TAGS rt
7282
	 WHERE rt.RTAG_ID = nTargetRtagId;   
7283
 
7284
	Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );	
7285
 
7286
 
7287
END;
7288
/*-------------------------------------------------------------------------------------------------------*/
7289
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7290
 
7291
	RecCount NUMBER;
7292
 
7293
BEGIN
7294
	/*--------------- Business Rules Here -------------------*/
7295
	IF (nRtagId IS NULL) 
7296
	THEN
7297
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7298
	END IF;
7299
 
7300
 
7301
	-- Check if other release references this release
7302
	SELECT COUNT( rl.RTAG_ID ) INTO RecCount
7303
	  FROM RELEASE_LINKS rl
7304
	 WHERE rl.REF_RTAG_ID = nRtagId;
7305
 
7306
	IF (RecCount > 0) THEN
7307
		RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
7308
	END IF; 	
7309
	/*-------------------------------------------------------*/
7310
 
7311
	-- Delete Release links
7312
	DELETE 
7313
	  FROM RELEASE_LINKS rl
7314
	 WHERE rl.RTAG_ID = nRtagId;
7315
 
7316
	-- Delete ignore warning
7317
	DELETE 
7318
	  FROM IGNORE_WARNINGS iw
7319
	 WHERE iw.RTAG_ID = nRtagId;
7320
 
7321
 
7322
	-- Delete Build Order cached calculations	  
7323
	DELETE
7324
	  FROM BUILD_ORDER bo
7325
	 WHERE bo.RTAG_ID = nRtagId;
7326
 
7327
 
7328
	-- Delete Notification History
7329
	DELETE
7330
	  FROM NOTIFICATION_HISTORY nh
7331
	 WHERE nh.RTAG_ID = nRtagId;
7332
 
7333
 
7334
	-- Delete Released Area Contents
7335
	DELETE
7336
	  FROM RELEASE_CONTENT rc
7337
	 WHERE rc.RTAG_ID = nRtagId;
7338
 
7339
 
7340
	-- Delete Work In Progress Area Contents
7341
	DELETE
7342
	  FROM WORK_IN_PROGRESS wip
7343
	 WHERE wip.RTAG_ID = nRtagId;
7344
 
7345
 
7346
	-- Delete Pending Area Contents
7347
	DELETE 
7348
	  FROM PLANNED pl
7349
	 WHERE pl.RTAG_ID = nRtagId;
7350
 
7351
 
7352
END;
7353
/*-------------------------------------------------------------------------------------------------------*/
7354
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
7355
 
7356
	nSourceParentRtagId NUMBER;
7357
 
7358
BEGIN
7359
	/*--------------- Business Rules Here -------------------*/
7360
	IF (nRtagId IS NULL) OR (cIsBranch IS NULL)  
7361
	THEN
7362
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
7363
	END IF;
7364
	/*-------------------------------------------------------*/
7365
 
7366
 
7367
	IF ( nSourceRtagId IS NULL ) THEN
7368
		-- Create new on main branch
7369
		RETURN nRtagId;
7370
 
7371
	ELSE
7372
		-- Create from source rtag_id
7373
 
7374
		-- Find parent of Source RtagId
7375
		SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
7376
		  FROM RELEASE_TAGS rt
7377
		 WHERE rt.RTAG_ID = nSourceRtagId;
7378
 
7379
		IF (UPPER(cIsBranch) = 'Y') THEN
7380
			RETURN nSourceRtagId;
7381
		ELSE
7382
			IF (nSourceRtagId = nSourceParentRtagId) THEN
7383
				RETURN nRtagId;
7384
			ELSE
7385
				RETURN nSourceParentRtagId;
7386
			END IF;
7387
		END IF;	
7388
 
7389
 
7390
	END IF;
7391
 
7392
 
7393
END;
7394
/*-------------------------------------------------------------------------------------------------------*/
7395
 
7396
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
7397
-- 							 sNextVersion OUT VARCHAR2,
7398
-- 							 nNextLifeCycle OUT NUMBER,
7399
-- 							 nParentRtagId OUT NUMBER,
7400
-- 							 nProjId IN NUMBER ) IS
7401
-- 							
7402
-- SourceBranchCount NUMBER;
7403
-- ProjRootVersion VARCHAR2(4000);
7404
-- LastLifeCycle NUMBER;
7405
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
7406
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
7407
-- 
7408
-- SourceProjId NUMBER; 
7409
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
7410
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
7411
-- 
7412
-- BEGIN
7413
-- 	/*--------------- Business Rules Here -------------------*/
7414
-- 	/*-------------------------------------------------------*/
7415
-- 	
7416
-- 	   
7417
-- 	BEGIN
7418
-- 		-- Get Project root version
7419
-- 		SELECT rt.RTAG_VERSION INTO ProjRootVersion
7420
-- 		  FROM RELEASE_TAGS rt
7421
-- 		 WHERE rt.PROJ_ID = nProjId
7422
-- 		   AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
7423
-- 	   
7424
-- 		EXCEPTION
7425
-- 		WHEN NO_DATA_FOUND THEN
7426
-- 		ProjRootVersion := ROOT_VERSION_NOT_FOUND;
7427
-- 	END;		   
7428
-- 	
7429
-- 	
7430
-- 	
7431
-- 	 
7432
-- 	BEGIN
7433
-- 		-- Get info for source rtagid
7434
-- 		SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
7435
-- 		  FROM RELEASE_TAGS rt
7436
-- 		 WHERE rt.RTAG_ID = nSourceRtagId;	
7437
-- 	   
7438
-- 		EXCEPTION
7439
-- 		WHEN NO_DATA_FOUND THEN
7440
-- 		SourceProjId := NULL;
7441
-- 		SourceVersion := NULL;
7442
-- 		SourceLifeCycle := NULL;
7443
-- 	END;	  
7444
-- 	
7445
-- 	
7446
-- 	IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
7447
-- 	
7448
-- 		/* Blank Release Required  OR  Release imported from other project */
7449
-- 		
7450
-- 		IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
7451
-- 			/* No Releases found in the project, hence calculate next version available.  */
7452
-- 			
7453
-- 			-- Set parent rtag
7454
-- 			nParentRtagId := SET_PARENT_AS_YOURSELF;
7455
-- 			
7456
-- 			
7457
-- 			BEGIN
7458
-- 				-- Get Next Available Global Root Version 
7459
-- 				SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
7460
-- 				  FROM RELEASE_TAGS rt
7461
-- 				 WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
7462
-- 				
7463
-- 				-- Set Next Rtag Version
7464
-- 				sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
7465
-- 				
7466
-- 				-- Restart Lifecycle
7467
-- 				nNextLifeCycle := 0;
7468
-- 				
7469
-- 				
7470
-- 				EXCEPTION
7471
-- 				WHEN NO_DATA_FOUND THEN
7472
-- 				-- Release Manager has no releases, hence start from 1
7473
-- 				sNextVersion := '1';
7474
-- 				nNextLifeCycle := 0;
7475
-- 				
7476
-- 			END;
7477
-- 			
7478
-- 			
7479
-- 					
7480
-- 		ELSE
7481
-- 			/* Releases found in this project. */
7482
-- 							   
7483
-- 			SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
7484
-- 			  FROM (
7485
-- 					SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
7486
-- 					  FROM RELEASE_TAGS rt
7487
-- 					 WHERE rt.PROJ_ID = nProjId
7488
-- 					   AND rt.RTAG_VERSION = ProjRootVersion 
7489
-- 					 ORDER BY rt.RTAG_LIFE_CYCLE DESC
7490
-- 			  		) qry
7491
-- 			 WHERE ROWNUM = 1;		
7492
-- 
7493
-- 			
7494
-- 			-- Set same Rtag Version
7495
-- 			sNextVersion := ProjRootVersion;
7496
-- 			
7497
-- 			-- Increase Lifecycle
7498
-- 			nNextLifeCycle := LastLifeCycle + 1;
7499
-- 		
7500
-- 		END IF;
7501
-- 				
7502
-- 	
7503
-- 		
7504
-- 	ELSE
7505
-- 		/* Create Release From other release within this project */
7506
-- 		
7507
-- 		-- Set parent id
7508
-- 		nParentRtagId := nSourceRtagId;
7509
-- 		
7510
-- 		
7511
-- 		-- Get number of source branches
7512
-- 		SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
7513
-- 		  FROM RELEASE_TAGS rt
7514
-- 		 WHERE rt.PROJ_ID = nProjId
7515
-- 		   AND rt.PARENT_RTAG_ID = nSourceRtagId;		   
7516
-- 		   
7517
-- 		   
7518
-- 		IF SourceBranchCount = 0 THEN
7519
-- 			/* Release is Head (i.e. Tip on its branch ) */
7520
-- 			
7521
-- 			-- Set Next Rtag Version
7522
-- 			sNextVersion := SourceVersion;
7523
-- 			
7524
-- 			-- Increase Lifecycle
7525
-- 			nNextLifeCycle := SourceLifeCycle + 1;
7526
-- 			
7527
-- 			
7528
-- 		ELSIF SourceBranchCount = 1 THEN
7529
-- 			/* Release IS NOT Head, but can be branched */
7530
-- 			
7531
-- 			-- Set Next Rtag Version
7532
-- 			sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
7533
-- 			
7534
-- 			-- Reset Lifecycle to 1
7535
-- 			nNextLifeCycle := 1;
7536
-- 			
7537
-- 			
7538
-- 		ELSE	
7539
-- 			-- Limit of two branches is reached
7540
-- 			RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');		
7541
-- 			
7542
-- 		END IF;	
7543
-- 			
7544
-- 			
7545
-- 		
7546
-- 		
7547
-- 		
7548
-- 	
7549
-- 	END IF;
7550
-- 	
7551
-- 		
7552
-- END;
7553
 
7554
/*-------------------------------------------------------------------------------------------------------*/
7555
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
7556
 
7557
	IsBaseView CHAR(1);
7558
 
7559
BEGIN
7560
 
7561
	-- Check if the view is BASE VIEW
7562
	SELECT vi.BASE_VIEW INTO IsBaseView
7563
	  FROM VIEWS vi
7564
	 WHERE vi.VIEW_ID = ViewId;
7565
 
7566
	IF (IsBaseView = 'Y') THEN 
7567
		-- Get Base view content
7568
		OPEN RecordSet FOR
7569
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7570
			   pv.pv_id, 
7571
			   pkg.pkg_name, 
7572
			   pv.pkg_version, 
7573
			   pv.dlocked, 
7574
			   pv.pv_description,
7575
			   pv.BUILD_TYPE
7576
		  FROM release_content rel,
7577
		       packages pkg,
7578
		       package_versions pv
7579
		 WHERE pv.pkg_id = pkg.pkg_id
7580
		   AND rel.pv_id = pv.pv_id
7581
		   AND rel.BASE_VIEW_ID = ViewId
7582
		   AND rel.RTAG_ID = RtagId
7583
		 ORDER BY UPPER(pkg.PKG_NAME);
7584
 
7585
	ELSE	 
7586
 
7587
	 	-- Get non base view content
7588
		OPEN RecordSet FOR
7589
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7590
			   pv.pv_id, 
7591
			   pkg.pkg_name, 
7592
			   pv.pkg_version, 
7593
			   pv.dlocked, 
7594
			   pv.pv_description,
7595
			   pv.BUILD_TYPE
7596
		  FROM release_content rel,
7597
		       packages pkg,
7598
		       package_versions pv,
7599
			   VIEW_DEF vd
7600
		 WHERE pv.pkg_id = pkg.pkg_id
7601
		   AND rel.pv_id = pv.pv_id
7602
		   AND vd.VIEW_ID = ViewId
7603
		   AND vd.PKG_ID = pv.PKG_ID
7604
		   AND rel.RTAG_ID = RtagId
7605
		 ORDER BY UPPER(pkg.PKG_NAME);		 
7606
 
7607
	END IF;	 	 
7608
 
7609
 
7610
 
7611
 
7612
END;
7613
/*-------------------------------------------------------------------------------------------------------*/
7614
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7615
 
7616
	ReleaseLocation VARCHAR2(4000);
7617
	sPkgVersion VARCHAR2(4000);
7618
	nPkgId NUMBER;
7619
	sVExt VARCHAR2(4000);
7620
	IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
7621
 
7622
	-- Find package for replacement
7623
	CURSOR curReplacePkg IS
7624
    SELECT pv.PV_ID
7625
	  FROM RELEASE_CONTENT rc,
7626
	  	   PACKAGE_VERSIONS pv
7627
	 WHERE rc.PV_ID = pv.PV_ID
7628
	   AND rc.RTAG_ID = RtagId
7629
	   AND pv.PKG_ID = nPkgId
7630
	   AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
7631
    recReplacePkg curReplacePkg%ROWTYPE;
7632
 
7633
BEGIN
7634
 
7635
	-- Get is_patch, pkg_id and v_ext
7636
	SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
7637
	  FROM PACKAGE_VERSIONS pv
7638
	 WHERE pv.PV_ID = newPvId;
7639
 
7640
 
7641
	-- Never put patch in relesed area
7642
	IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
7643
 
7644
		-- Try to get a package to be replaced with this new one.
7645
		-- Use unique constraint of PKG_ID and V_EXT
7646
		OPEN curReplacePkg;
7647
	    FETCH curReplacePkg INTO recReplacePkg;
7648
 
7649
	    IF curReplacePkg%FOUND THEN
7650
			-- Replace package
7651
			REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
7652
 
7653
		ELSE
7654
			-- Add new package
7655
			INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
7656
			VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
7657
 
7658
 
7659
		    /* LOG ACTION */
7660
			SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7661
			  FROM PROJECTS proj,
7662
			  	   RELEASE_TAGS rt
7663
			 WHERE rt.PROJ_ID = proj.PROJ_ID
7664
			   AND rt.RTAG_ID = RtagId;
7665
 
7666
			SELECT pv.PKG_VERSION INTO sPkgVersion
7667
			  FROM PACKAGE_VERSIONS pv
7668
			 WHERE pv.PV_ID = newPvId;
7669
 
7670
			Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7671
 
7672
 
7673
		END IF;
7674
 
7675
		CLOSE curReplacePkg;
7676
 
7677
	END IF;
7678
 
7679
END;
7680
/*-------------------------------------------------------------------------------------------------------*/
7681
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7682
 
7683
	ReleaseLocation VARCHAR2(4000);
7684
	sPkgVersion VARCHAR2(4000);
7685
 
7686
BEGIN
7687
 
7688
	-- Replace Package
7689
    UPDATE RELEASE_CONTENT
7690
       SET pv_id = newPvId,
7691
           insert_stamp = Ora_Sysdate,
7692
           insertor_id = UserId
7693
     WHERE rtag_id = RtagId
7694
       AND pv_id = oldPvId;
7695
 
7696
 
7697
    /* LOG ACTION */
7698
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7699
	  FROM PROJECTS proj,
7700
	  	   RELEASE_TAGS rt
7701
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7702
	   AND rt.RTAG_ID = RtagId;
7703
 
7704
	SELECT pv.PKG_VERSION INTO sPkgVersion
7705
	  FROM PACKAGE_VERSIONS pv
7706
	 WHERE pv.PV_ID = newPvId;
7707
 
7708
	Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
7709
	Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7710
 
7711
END;
7712
/*-------------------------------------------------------------------------------------------------------*/
7713
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7714
	ReleaseLocation VARCHAR2(4000);
7715
 
7716
BEGIN
7717
 
7718
 
7719
	-- Delete old package
7720
	DELETE
7721
	  FROM RELEASE_CONTENT rc
7722
	 WHERE rc.PV_ID = PvId
7723
	   AND rc.RTAG_ID = RtagId;
7724
 
7725
 
7726
	/* LOG ACTION */
7727
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7728
	  FROM PROJECTS proj,
7729
	       RELEASE_TAGS rt
7730
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7731
	   AND rt.RTAG_ID = RtagId;
7732
 
7733
	Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7734
 
7735
 
7736
END;
7737
/*-------------------------------------------------------------------------------------------------------*/
7738
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7739
	ReleaseLocation VARCHAR2(4000);
7740
 
7741
	CURSOR curMatchingPackage IS
7742
    SELECT mpv.PV_ID
7743
	  FROM RELEASE_CONTENT rc,
7744
	  	   PACKAGE_VERSIONS mpv,
7745
		   PACKAGE_VERSIONS pv
7746
	 WHERE rc.PV_ID = mpv.PV_ID
7747
	   AND rc.RTAG_ID = RtagId
7748
	   AND pv.PV_ID = PvId
7749
	   AND pv.PKG_ID = mpv.PKG_ID
7750
	   AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
7751
    recMatchingPackage curMatchingPackage%ROWTYPE;
7752
 
7753
BEGIN
7754
 
7755
	OPEN curMatchingPackage;
7756
    FETCH curMatchingPackage INTO recMatchingPackage;
7757
 
7758
    IF curMatchingPackage%FOUND THEN
7759
		-- Delete old package
7760
		DELETE
7761
		  FROM RELEASE_CONTENT rc
7762
		 WHERE rc.PV_ID = recMatchingPackage.PV_ID
7763
		   AND rc.RTAG_ID = RtagId;
7764
 
7765
 
7766
		/* LOG ACTION */
7767
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7768
		  FROM PROJECTS proj,
7769
		  	   RELEASE_TAGS rt
7770
		 WHERE rt.PROJ_ID = proj.PROJ_ID
7771
		   AND rt.RTAG_ID = RtagId;
7772
 
7773
		Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7774
 
7775
	END IF;
7776
 
7777
 
7778
	CLOSE curMatchingPackage;
7779
 
7780
 
7781
 
7782
 
7783
END;
7784
/*-------------------------------------------------------------------------------------------------------*/
7785
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
7786
 
7787
	ReturnValue NUMBER;
7788
 
7789
BEGIN
7790
	SELECT rc.BASE_VIEW_ID INTO ReturnValue
7791
	  FROM RELEASE_CONTENT rc
7792
	 WHERE rc.RTAG_ID = RtagId
7793
	   AND rc.PV_ID = PvId;
7794
 
7795
	RETURN ReturnValue;
7796
END;
7797
/*-------------------------------------------------------------------------------------------------------*/
7798
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
7799
 
7800
BEGIN
7801
	-- Reset Ignore warnings up-the-tree
7802
	RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
7803
 
7804
	-- Refresh Package states
7805
	TOUCH_RELEASE ( RtagId );
7806
 
7807
END;
7808
/*-------------------------------------------------------------------------------------------------------*/
7809
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
7810
	CURSOR curReleases IS
7811
    SELECT rc.RTAG_ID
7812
	  FROM RELEASE_CONTENT rc
7813
	 WHERE rc.PV_ID = PvId;
7814
    recReleases curReleases%ROWTYPE;
7815
 
7816
BEGIN
7817
 
7818
	OPEN curReleases;
7819
    FETCH curReleases INTO recReleases;
7820
 
7821
	WHILE curReleases%FOUND
7822
	LOOP
7823
 
7824
		RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
7825
 
7826
		FETCH curReleases INTO recReleases;
7827
	END LOOP;
7828
 
7829
	CLOSE curReleases;	
7830
 
7831
END;
7832
/*-------------------------------------------------------------------------------------------------------*/
7833
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
7834
 
7835
BEGIN
7836
 
7837
	UPDATE RELEASE_CONTENT rc SET
7838
	rc.BASE_VIEW_ID = NewViewId
7839
	WHERE rc.PV_ID = PvId
7840
	  AND rc.RTAG_ID = RtagId;
7841
 
7842
END;
7843
/*-------------------------------------------------------------------------------------------------------*/
7844
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
7845
 
7846
	RowCount NUMBER;
7847
 
7848
 
7849
	CURSOR curPackageClash IS
7850
	SELECT pkg.PKG_NAME,
7851
		   er.*
7852
	  FROM (
7853
 
7854
	  		/* Get existing referenced packages */
7855
			SELECT pv.PKG_ID,
7856
			       pv.V_EXT
7857
			  FROM RELEASE_LINKS rl,
7858
			  	   RELEASE_CONTENT rc,
7859
			  	   PACKAGE_VERSIONS pv
7860
			 WHERE rl.RTAG_ID = nRtagId
7861
			   AND rl.REF_RTAG_ID = rc.RTAG_ID
7862
			   AND rc.PV_ID = pv.PV_ID
7863
 
7864
	  	    ) er,
7865
			(
7866
 
7867
			/* Get current reference packages */
7868
			SELECT pv.PKG_ID,
7869
			       pv.V_EXT
7870
			  FROM RELEASE_CONTENT rc,
7871
			  	   PACKAGE_VERSIONS pv
7872
			 WHERE rc.RTAG_ID = nRefRtagId
7873
			   AND rc.PV_ID = pv.PV_ID    
7874
 
7875
			) cr,
7876
			PACKAGES PKG
7877
	 WHERE er.PKG_ID = cr.PKG_ID
7878
	   AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7879
	   AND er.PKG_ID = pkg.PKG_ID;
7880
 
7881
	recPackageClash curPackageClash%ROWTYPE;	   
7882
 
7883
BEGIN
7884
	/*--------------- Business Rules Here -------------------*/
7885
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7886
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7887
	END IF;
7888
 
7889
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7890
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7891
	END IF;
7892
	/*-------------------------------------------------------*/
7893
	ProblemString := NULL;
7894
 
7895
 
7896
	-- Check if release already has references
7897
	SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
7898
	  FROM RELEASE_LINKS rl
7899
	 WHERE rl.RTAG_ID = nRtagId;	
7900
 
7901
 
7902
	IF RowCount > 0 THEN
7903
		-- Found existing references
7904
 
7905
		-- Make sure there is no package clashes
7906
		OPEN curPackageClash;
7907
	    FETCH curPackageClash INTO recPackageClash;
7908
 
7909
		IF curPackageClash%FOUND THEN
7910
 
7911
			ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
7912
 
7913
			WHILE curPackageClash%FOUND
7914
			LOOP
7915
				EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;	-- Do not allow variable overflow 
7916
 
7917
				ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
7918
 
7919
				FETCH curPackageClash INTO recPackageClash;
7920
			END LOOP;
7921
 
7922
		END IF;
7923
 
7924
		CLOSE curPackageClash;
7925
 
7926
 
7927
	ELSE
7928
		-- No references found, hence reference a release
7929
 
7930
 
7931
		-- Remove exising package from this release to be referenced
7932
		REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);	
7933
 
7934
 
7935
		-- Add new linked packages to release
7936
		INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
7937
		SELECT nRtagId,
7938
			   rc.PV_ID,
7939
			   rc.BASE_VIEW_ID, 
7940
			   rc.INSERT_STAMP, 
7941
			   rc.INSERTOR_ID, 
7942
			   rc.PKG_STATE
7943
		  FROM RELEASE_CONTENT rc
7944
		 WHERE rc.RTAG_ID = nRefRtagId;
7945
 
7946
 
7947
 
7948
		-- Copy ignore warnings for referenced packages
7949
		INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
7950
		SELECT nRtagId, 
7951
			   iw.PV_ID, 
7952
			   iw.DPV_ID, 
7953
			   iw.IS_PATCH_IGNORE
7954
		  FROM IGNORE_WARNINGS iw,
7955
		  	   RELEASE_CONTENT rc
7956
		 WHERE iw.RTAG_ID = rc.RTAG_ID 
7957
		   AND iw.PV_ID = rc.PV_ID
7958
		   AND rc.RTAG_ID = nRefRtagId;	 
7959
 
7960
 
7961
 
7962
		-- Reference release 
7963
		INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
7964
		VALUES ( nRtagId, nRefRtagId );		 
7965
 
7966
 
7967
		-- Refresh Package states
7968
		TOUCH_RELEASE ( nRtagId );
7969
 
7970
	END IF;	 
7971
 
7972
 
7973
END;
7974
/*-------------------------------------------------------------------------------------------------------*/
7975
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
7976
 
7977
 
7978
BEGIN
7979
	/*--------------- Business Rules Here -------------------*/
7980
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7981
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7982
	END IF;
7983
 
7984
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7985
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7986
	END IF;
7987
 
7988
	/*-------------------------------------------------------*/
7989
 
7990
 
7991
	-- Remove ignore warnings for those packages who use referenced packages
7992
	DELETE FROM IGNORE_WARNINGS iw
7993
	 WHERE iw.RTAG_ID = nRtagId
7994
	   AND iw.DPV_ID IN (
7995
	   						SELECT dep.DPV_ID
7996
							  FROM (
7997
 
7998
									/* Get referenced packages */
7999
									SELECT pv.PKG_ID,
8000
									       pv.V_EXT
8001
									  FROM RELEASE_CONTENT rc,
8002
									  	   PACKAGE_VERSIONS pv
8003
									 WHERE rc.RTAG_ID = nRefRtagId
8004
									   AND rc.PV_ID = pv.PV_ID    
8005
 
8006
									) cr,
8007
									(
8008
 
8009
									/* Get all dependencies for current release */
8010
									SELECT DISTINCT 
8011
										   pv.PKG_ID,
8012
										   pv.V_EXT,
8013
										   dep.DPV_ID
8014
									  FROM RELEASE_CONTENT rc,
8015
										   PACKAGE_DEPENDENCIES dep,
8016
										   PACKAGE_VERSIONS pv
8017
									 WHERE rc.RTAG_ID = nRtagId
8018
									   AND rc.PV_ID = dep.PV_ID		
8019
									   AND dep.PV_ID = pv.PV_ID	   
8020
 
8021
									) dep
8022
							 WHERE dep.PKG_ID = cr.PKG_ID
8023
							   AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8024
	   					);  
8025
 
8026
 
8027
 
8028
 
8029
	-- Remove ignore warnings for those package which are going to be replaced with the reference
8030
	DELETE FROM IGNORE_WARNINGS iw
8031
	 WHERE iw.RTAG_ID = nRtagId
8032
	   AND iw.PV_ID IN (
8033
						SELECT pv.PV_ID
8034
						  FROM (
8035
 
8036
								/* Get referenced packages */
8037
								SELECT pv.PKG_ID,
8038
								       pv.V_EXT
8039
								  FROM RELEASE_CONTENT rc,
8040
								  	   PACKAGE_VERSIONS pv
8041
								 WHERE rc.RTAG_ID = nRefRtagId
8042
								   AND rc.PV_ID = pv.PV_ID    
8043
 
8044
								) cr,
8045
								RELEASE_CONTENT rc,
8046
								PACKAGE_VERSIONS pv
8047
						 WHERE pv.PKG_ID = cr.PKG_ID
8048
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8049
						   AND rc.RTAG_ID = nRtagId
8050
						   AND rc.PV_ID = pv.PV_ID
8051
						);			
8052
 
8053
 
8054
 
8055
 
8056
 
8057
	-- Remove matching packages from release
8058
	DELETE FROM RELEASE_CONTENT rc
8059
	 WHERE rc.RTAG_ID = nRtagId
8060
	   AND rc.PV_ID IN (
8061
						SELECT pv.PV_ID
8062
						  FROM (
8063
 
8064
								/* Get referenced packages */
8065
								SELECT pv.PKG_ID,
8066
								       pv.V_EXT
8067
								  FROM RELEASE_CONTENT rc,
8068
								  	   PACKAGE_VERSIONS pv
8069
								 WHERE rc.RTAG_ID = nRefRtagId
8070
								   AND rc.PV_ID = pv.PV_ID    
8071
 
8072
								) cr,
8073
								RELEASE_CONTENT rc,
8074
								PACKAGE_VERSIONS pv
8075
						 WHERE pv.PKG_ID = cr.PKG_ID
8076
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8077
						   AND rc.RTAG_ID = nRtagId
8078
						   AND rc.PV_ID = pv.PV_ID
8079
						);	
8080
 
8081
 
8082
 
8083
 
8084
 
8085
	-- Remove Reference release 
8086
	DELETE 
8087
	  FROM RELEASE_LINKS rl
8088
	 WHERE rl.RTAG_ID = nRtagId
8089
	   AND rl.REF_RTAG_ID = nRefRtagId;
8090
 
8091
 
8092
	-- Refresh Package states
8093
	TOUCH_RELEASE ( nRtagId );
8094
 
8095
 
8096
END;
8097
/*-------------------------------------------------------------------------------------------------------*/
8098
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
8099
 
8100
	cReleaseMode CHAR(1);
8101
	cPvMode CHAR(1);
8102
 
8103
BEGIN
8104
 
8105
	-- Get Release Mode
8106
	SELECT rt.OFFICIAL INTO cReleaseMode
8107
	  FROM RELEASE_TAGS rt
8108
	 WHERE rt.RTAG_ID = RtagId;
8109
 
8110
 
8111
	-- Get Package Mode
8112
	SELECT pv.DLOCKED INTO cPvMode
8113
	  FROM PACKAGE_VERSIONS pv
8114
	 WHERE pv.PV_ID = PvId;	 
8115
 
8116
	-- Only check if package is locked 
8117
	IF (cPvMode = 'Y') THEN
8118
 
8119
		IF (cReleaseMode != 'N') AND (Permission != 'Y')
8120
		THEN
8121
			RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
8122
 
8123
		END IF;
8124
 
8125
	END IF;	
8126
 
8127
 
8128
END;
8129
/*-------------------------------------------------------------------------------------------------------*/
8130
END PK_RELEASE_TEST;
1374 dpurdie 8131
/
8132
--------------------------------------------------------
8133
--  DDL for Package Body PK_APP_UTILS
8134
--------------------------------------------------------
1373 dpurdie 8135
 
8136
  CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS
8137
 
8138
/*
8139
------------------------------
8140
||  Last Modified:  S.Vukovic
8141
||  Modified Date:  26/Apr/2005
8142
||  Body Version:   1.0
8143
------------------------------
8144
*/
8145
 
8146
 
8147
/*-------------------------------------------------------------------------------------------------------*/
8148
PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur)   IS
8149
 
8150
 
8151
BEGIN
8152
 
8153
 
8154
	IF (NOT RtagId IS NULL) THEN
8155
		-- Case with RTAG_ID present
8156
		OPEN records FOR
8157
		SELECT rt.PROJ_ID,
8158
			   rt.RTAG_ID AS RTAG_ID
8159
		  FROM RELEASE_TAGS rt
8160
		 WHERE rt.RTAG_ID = TO_NUMBER(RtagId);
8161
 
8162
	ELSIF (NOT ProjId IS NULL) THEN
8163
		-- Case with PROJ_ID present
8164
		OPEN records FOR
8165
		SELECT TO_NUMBER(ProjId) AS PROJ_ID,
8166
			   -1 AS RTAG_ID
8167
		  FROM DUAL;
8168
 
8169
	ELSE
8170
		-- Case with none present
8171
		OPEN records FOR
8172
		SELECT -1 AS PROJ_ID,
8173
			   -1 AS RTAG_ID
8174
		  FROM DUAL;
8175
 
8176
	END IF;
8177
 
8178
 
8179
 
8180
 
8181
   	--RETURN records;
8182
 
8183
END;
8184
/*-------------------------------------------------------------------------------------------------------*/
8185
END PK_APP_UTILS;
1374 dpurdie 8186
/
8187
--------------------------------------------------------
8188
--  DDL for Package Body PK_RELEASE
8189
--------------------------------------------------------
1373 dpurdie 8190
 
8191
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS
8192
 
8193
/*-------------------------------------------------------------------------------------------------------*/
8194
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
8195
 
8196
RtagId NUMBER;
8197
ParentRtagId NUMBER;
8198
RecCount NUMBER := 0;
8199
VtreeId NUMBER;
8200
 
8201
BEGIN
8202
   /*--------------- Business Rules Here -------------------*/
8203
   -- Check for missing parameters
8204
   IF (sReleaseName IS NULL) OR (nUserId IS NULL)
8205
   THEN
8206
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
8207
 
8208
   END IF;
8209
 
8210
 
8211
   -- Check for duplicate Release Names
8212
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8213
     FROM RELEASE_TAGS rt
8214
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8215
      AND rt.PROJ_ID = nProjId;
8216
 
8217
   IF (RecCount > 0) THEN
8218
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8219
   END IF;
8220
   /*-------------------------------------------------------*/
8221
 
8222
 
8223
   -- Get rtag_id
8224
   SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
8225
 
8226
   SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;
8227
 
8228
 
8229
 
8230
   -- Get Parent RtagId
8231
   ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
8232
 
8233
   -- If the parent RTAG is NOT in this project then we cannot use it.
8234
   -- We must re-assign the parent to be the new release's RTAG_ID instead
8235
   -- else it will not show up in the projects release tree (DEVI-55480)
8236
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8237
     FROM RELEASE_TAGS rt
8238
    WHERE rt.RTAG_ID = ParentRtagId
8239
      AND rt.PROJ_ID = nProjId;
8240
 
8241
   IF (RecCount = 0) THEN
8242
     ParentRtagId := RtagId;
8243
   END IF;
8244
 
8245
   -- Create new release
8246
   INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,
8247
                        OFFICIAL, REBUILD_ENV, REBUILD_STAMP,
8248
                        PARENT_RTAG_ID, PROJ_ID, VTREE_ID )
8249
   VALUES ( RtagId,
8250
          sReleaseName,
8251
          sReleaseComments,
8252
          ORA_SYSDATE,
8253
          nUserId,
8254
          'N',
8255
          'N',
8256
          0,
8257
          ParentRtagId,
8258
          nProjId,
8259
          VtreeId );
8260
 
8261
   -- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)
8262
   IF (NOT nSourceRtagId IS NULL)
8263
   THEN
8264
      UPDATE RELEASE_TAGS rtd
8265
      SET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)
8266
      WHERE rtd.RTAG_ID = RtagId;
8267
   END IF;
8268
 
8269
   -- Update display Order
8270
   UPDATE_DISPLAY_ORDER ( nProjId );
8271
 
8272
   /* Log Project Action */
8273
   Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
8274
 
8275
 
8276
   -- Import Release Contents
8277
   IF (NOT nSourceRtagId IS NULL) THEN
8278
      Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
8279
   END IF;
8280
 
8281
END;
8282
/*-------------------------------------------------------------------------------------------------------*/
8283
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
8284
 
8285
 
8286
BEGIN
8287
 
8288
 
8289
   /*--------------- Business Rules Here -------------------*/
8290
   /*-------------------------------------------------------*/
8291
 
8292
   UPDATE RELEASE_TAGS urt SET
8293
   urt.DISPLAY_ORDER = (
8294
                  SELECT qry.REC_NUM
8295
                    FROM (
8296
                        SELECT rel.*, ROWNUM AS REC_NUM
8297
                          FROM (
8298
 
8299
                                SELECT rt.RTAG_ID,
8300
                                    rt.DISPLAY_ORDER,
8301
                                     DECODE( rt.PARENT_RTAG_ID,
8302
                                             rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
8303
                                FROM RELEASE_TAGS rt
8304
                               WHERE rt.PROJ_ID = nProjId
8305
 
8306
                                ) rel
8307
                        START WITH rel.PARENT_RTAG_ID = 0
8308
                        CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID
8309
                        ORDER SIBLINGS BY rel.DISPLAY_ORDER
8310
                        ) qry
8311
                     WHERE qry.RTAG_ID = urt.RTAG_ID
8312
                  )
8313
   WHERE urt.PROJ_ID = nProjId;
8314
 
8315
END;
8316
/*-------------------------------------------------------------------------------------------------------*/
8317
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
8318
 
8319
   nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
8320
   SeqNum NUMBER;
8321
 
8322
BEGIN
8323
 
8324
 
8325
   /*--------------- Business Rules Here -------------------*/
8326
   /*-------------------------------------------------------*/
8327
 
8328
   nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
8329
 
8330
   -- Set start sequence number
8331
   SeqNum := 1;
8332
 
8333
   FOR i IN 1..nIdCollector.COUNT
8334
   LOOP
8335
 
8336
      -- Update new display order
8337
      UPDATE RELEASE_TAGS rt SET
8338
         rt.DISPLAY_ORDER = SeqNum
8339
       WHERE rt.PROJ_ID = nProjId
8340
         AND rt.RTAG_ID = nIdCollector(i);
8341
 
8342
      SeqNum := SeqNum + 1;
8343
 
8344
   END LOOP;
8345
 
8346
END;
8347
/*-------------------------------------------------------------------------------------------------------*/
8348
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
8349
 
8350
RecCount NUMBER := 0;
8351
ProjId NUMBER;
8352
 
8353
BEGIN
8354
 
8355
 
8356
   /*--------------- Business Rules Here -------------------*/
8357
   -- Check for missing parameters
8358
   IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
8359
   THEN
8360
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
8361
 
8362
   END IF;
8363
 
8364
 
8365
   -- Check for duplicate Release Names
8366
   SELECT rt.PROJ_ID INTO ProjId
8367
     FROM RELEASE_TAGS rt
8368
    WHERE rt.RTAG_ID = nRtagId;
8369
 
8370
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8371
     FROM RELEASE_TAGS rt
8372
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8373
      AND rt.RTAG_ID != nRtagId
8374
      AND rt.PROJ_ID = ProjId;
8375
 
8376
 
8377
   IF (RecCount > 0) THEN
8378
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8379
   END IF;
8380
   /*-------------------------------------------------------*/
8381
 
8382
 
8383
 
8384
   -- Update release details
8385
   UPDATE RELEASE_TAGS rt SET
8386
   rt.RTAG_NAME = sReleaseName,
8387
   rt.DESCRIPTION = sReleaseComments,
8388
   rt.PARENT_RTAG_ID = nParentRtagId,
8389
   rt.ASSOC_MASS_REF = nMASSRtagId,
8390
   rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,
8391
   rt.OWNER_EMAIL = sOwnerEmail,
8392
   rt.PRODUCT_STATE_USED = cState
8393
   WHERE rt.RTAG_ID = nRtagId;
8394
 
8395
   -- Update display Order
8396
   UPDATE_DISPLAY_ORDER ( ProjId );
8397
 
8398
   /* Log Project Action */
8399
   Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
8400
 
8401
 
8402
 
8403
 
8404
END;
8405
/*-------------------------------------------------------------------------------------------------------*/
8406
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8407
 
8408
   RecCount NUMBER := 0;
8409
   sReleaseId VARCHAR2(4000);
8410
   ProjId NUMBER;
8411
 
8412
BEGIN
8413
   /*--------------- Business Rules Here -------------------*/
8414
   IF (nRtagId IS NULL)
8415
   THEN
8416
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8417
   END IF;
8418
 
8419
 
8420
 
8421
   -- Check for any kids
8422
   SELECT COUNT( rt.RTAG_ID ) INTO RecCount
8423
     FROM RELEASE_TAGS rt
8424
    WHERE rt.PARENT_RTAG_ID = nRtagId
8425
      AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
8426
 
8427
   IF (RecCount > 0) THEN
8428
      RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
8429
   END IF;
8430
   /*-------------------------------------------------------*/
8431
 
8432
   -- Clear the release contents
8433
   Clean_Release_Contents ( nRtagId, nUserId );
8434
 
8435
   /* Log Project Action */
8436
   SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
8437
     FROM RELEASE_TAGS rt
8438
    WHERE rt.RTAG_ID = nRtagId;
8439
 
8440
   Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
8441
 
8442
 
8443
   -- Remove Release
8444
   DELETE
8445
     FROM RELEASE_TAGS rt
8446
    WHERE rt.RTAG_ID = nRtagId;
8447
 
8448
 
8449
 
8450
END;
8451
/*-------------------------------------------------------------------------------------------------------*/
8452
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
8453
 
8454
   sSourceLocation VARCHAR2(4000);
8455
   sTargetLocation VARCHAR2(4000);
8456
   ProjId NUMBER;
8457
   cReleaseMode CHAR(1);
8458
   RconId NUMBER;
8459
 
8460
   -- this cursor gets the source release daemon configurations, ensuring that the
8461
   -- first record will be the master daemon, and subsequent records will be the slaves.
8462
   CURSOR curSrcReleaseConfigs IS
8463
    SELECT daemon_hostname, gbe_id, gbe_buildfilter
8464
     FROM RELEASE_CONFIG rc
8465
    WHERE rc.RTAG_ID = nSourceRtagId
8466
    ORDER BY rc.daemon_mode;
8467
    recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;
8468
 
8469
    -- this cursor looks for target release daemons
8470
   CURSOR curTgtReleaseConfigs IS
8471
    SELECT rcon_id
8472
     FROM RELEASE_CONFIG rc
8473
    WHERE rc.RTAG_ID = nTargetRtagId;
8474
    recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;
8475
 
8476
    -- this cursor looks for target release daemon run level entries
8477
   CURSOR curTgtReleaseConfigRunLevel IS
8478
    SELECT current_run_level
8479
     FROM RUN_LEVEL rl
8480
    WHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;
8481
    recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;
8482
 
8483
BEGIN
8484
   /*--------------- Business Rules Here -------------------*/
8485
   IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
8486
   THEN
8487
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
8488
   END IF;
8489
 
8490
   IF (nSourceRtagId = nTargetRtagId) THEN
8491
      RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
8492
   END IF;
8493
 
8494
 
8495
   -- Check if Target release is in OPEN mode
8496
   SELECT rt.OFFICIAL  INTO  cReleaseMode
8497
     FROM RELEASE_TAGS rt
8498
    WHERE rt.RTAG_ID = nTargetRtagId;
8499
 
8500
   IF (cReleaseMode != 'N') THEN
8501
      RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
8502
   END IF;
8503
 
8504
   -- check that the target release's daemons are all paused before we allow an import operation
8505
   OPEN curTgtReleaseConfigs;
8506
   FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;
8507
 
8508
   WHILE curTgtReleaseConfigs%FOUND
8509
   LOOP
8510
      OPEN curTgtReleaseConfigRunLevel;
8511
      FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;
8512
      IF curTgtReleaseConfigRunLevel%FOUND THEN
8513
         IF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR
8514
            (recTgtReleaseConfigRunLevel.current_run_level <> 2) THEN
8515
            RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8516
         END IF;
8517
      ELSE
8518
         -- we don't know what the daemon run level is so err on the side of caution
8519
         RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8520
      END IF;
8521
      CLOSE curTgtReleaseConfigRunLevel;
8522
 
8523
      FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;
8524
   END LOOP;
8525
 
8526
   CLOSE curTgtReleaseConfigs;
8527
 
8528
 
8529
   /*-------------------------------------------------------*/
8530
 
8531
   -- Clean target contents
8532
   Clean_Release_Contents ( nTargetRtagId, nUserId );
8533
 
8534
 
8535
   -- Import Released Area Contents
8536
   INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )
8537
   SELECT nTargetRtagId AS RTAG_ID,
8538
         rc.PV_ID,
8539
         rc.BASE_VIEW_ID,
8540
         rc.INSERT_STAMP,
8541
         rc.INSERTOR_ID,
8542
         rc.PKG_STATE,
8543
         rc.PKG_ID,
8544
         rc.DEPRECATED_STATE
8545
     FROM RELEASE_CONTENT rc
8546
    WHERE rc.RTAG_ID = nSourceRtagId;
8547
 
8548
 
8549
   -- Import any Pegged Version settings from the source release
8550
   INSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )
8551
   SELECT nTargetRtagId AS RTAG_ID,
8552
          pegv.PV_ID
8553
     FROM PEGGED_VERSIONS pegv
8554
    WHERE pegv.RTAG_ID = nSourceRtagId;
8555
 
8556
   -- Import any Advisory Ripple settings from the source release
8557
   INSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )
8558
   SELECT nTargetRtagId AS RTAG_ID,
8559
          avr.PV_ID
8560
     FROM ADVISORY_RIPPLE avr
8561
    WHERE avr.RTAG_ID = nSourceRtagId;
8562
 
8563
 
8564
   --Import Release Configuration Information
8565
   OPEN curSrcReleaseConfigs;
8566
   FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8567
 
8568
   WHILE curSrcReleaseConfigs%FOUND
8569
   LOOP
8570
      -- add a daemon to the target release
8571
      PK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );
8572
 
8573
      FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8574
   END LOOP;
8575
 
8576
   CLOSE curSrcReleaseConfigs;
8577
 
8578
 
8579
 
8580
   -- Import Ignore Warning states
8581
   INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
8582
   SELECT nTargetRtagId AS RTAG_ID,
8583
          igw.PV_ID,
8584
          igw.DPV_ID
8585
     FROM IGNORE_WARNINGS igw
8586
    WHERE igw.rtag_id = nSourceRtagId;
8587
 
8588
 
8589
   /* Log Project Action */
8590
   -- Get Source Location
8591
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
8592
     FROM RELEASE_TAGS rt,
8593
           PROJECTS pr
8594
    WHERE rt.PROJ_ID = pr.PROJ_ID
8595
      AND rt.RTAG_ID = nSourceRtagId;
8596
 
8597
   -- Get Target Location
8598
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
8599
     FROM RELEASE_TAGS rt,
8600
           PROJECTS pr
8601
    WHERE rt.PROJ_ID = pr.PROJ_ID
8602
      AND rt.RTAG_ID = nTargetRtagId;
8603
 
8604
   -- Get project id
8605
   SELECT rt.PROJ_ID  INTO  ProjId
8606
     FROM RELEASE_TAGS rt
8607
    WHERE rt.RTAG_ID = nTargetRtagId;
8608
 
8609
   Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );
8610
END;
8611
 
8612
 
8613
 
8614
/*-------------------------------------------------------------------------------------------------------*/
8615
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8616
 
8617
   RecCount NUMBER;
8618
        rconIdList VARCHAR2(4000);
8619
 
8620
BEGIN
8621
   /*--------------- Business Rules Here -------------------*/
8622
   IF (nRtagId IS NULL)
8623
   THEN
8624
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8625
   END IF;
8626
 
8627
 
8628
   -- Check if other release references this release
8629
   SELECT COUNT( rl.RTAG_ID ) INTO RecCount
8630
     FROM RELEASE_LINKS rl
8631
    WHERE rl.REF_RTAG_ID = nRtagId;
8632
 
8633
   IF (RecCount > 0) THEN
8634
      RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
8635
   END IF;
8636
   /*-------------------------------------------------------*/
8637
 
8638
   -- Delete Release links
8639
   DELETE
8640
     FROM RELEASE_LINKS rl
8641
    WHERE rl.RTAG_ID = nRtagId;
8642
 
8643
   -- Delete ignore warning
8644
   DELETE
8645
     FROM IGNORE_WARNINGS iw
8646
    WHERE iw.RTAG_ID = nRtagId;
8647
 
8648
 
8649
   -- Delete Build Order cached calculations
8650
   DELETE
8651
     FROM BUILD_ORDER bo
8652
    WHERE bo.RTAG_ID = nRtagId;
8653
 
8654
 
8655
   -- Delete Notification History
8656
   DELETE
8657
     FROM NOTIFICATION_HISTORY nh
8658
    WHERE nh.RTAG_ID = nRtagId;
8659
 
8660
 
8661
   -- Delete Released Area Contents
8662
   DELETE
8663
     FROM RELEASE_CONTENT rc
8664
    WHERE rc.RTAG_ID = nRtagId;
8665
 
8666
 
8667
   -- Delete Work In Progress Area Contents
8668
   DELETE
8669
     FROM WORK_IN_PROGRESS wip
8670
    WHERE wip.RTAG_ID = nRtagId;
8671
 
8672
 
8673
   -- Delete Pending Area Contents
8674
   DELETE
8675
     FROM PLANNED pl
8676
    WHERE pl.RTAG_ID = nRtagId;
8677
 
8678
   -- Delete Deprecated Packages
8679
   DELETE
8680
     FROM DEPRECATED_PACKAGES dp
8681
    WHERE dp.RTAG_ID = nRtagId;
8682
 
8683
   -- Delete Project Action Log
8684
   DELETE
8685
     FROM PROJECT_ACTION_LOG pal
8686
    WHERE pal.RTAG_ID = nRtagId;
8687
 
8688
   -- Delete Do Not Ripple Contents
8689
   DELETE
8690
     FROM DO_NOT_RIPPLE dnr
8691
    WHERE dnr.RTAG_ID = nRtagId;
8692
 
8693
   -- Delete Dash Board Contents
8694
   DELETE
8695
     FROM DASH_BOARD db
8696
    WHERE db.RTAG_ID = nRtagId;
8697
 
8698
   -- Delete Advisory Ripple Contents
8699
   DELETE
8700
     FROM ADVISORY_RIPPLE adr
8701
    WHERE adr.RTAG_ID = nRtagId;
8702
 
8703
   -- Delete Archive Action Log
8704
   DELETE
8705
     FROM ARCHIVE_ACTION_LOG aal
8706
    WHERE aal.RTAG_ID = nRtagId;
8707
 
8708
   -- Delete Daemons For This Release
8709
   FOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )
8710
   LOOP
8711
      rconIdList := rconIdList || rcon.RCON_ID || ',';
8712
   END LOOP;
8713
 
8714
   pk_buildapi.DELETE_DAEMON(rconIdList);
8715
 
8716
   -- Delete Release Metrics Contents
8717
   DELETE
8718
     FROM RELEASE_METRICS rm
8719
    WHERE rm.RTAG_ID = nRtagId;
8720
 
8721
   -- Delete Release Configuration Contents
8722
   DELETE
8723
     FROM RELEASE_CONFIG rc
8724
    WHERE rc.RTAG_ID = nRtagId;
8725
 
8726
   -- Delete Pegged Version Contents
8727
   DELETE
8728
     FROM PEGGED_VERSIONS pegv
8729
    WHERE pegv.RTAG_ID = nRtagId;
8730
 
8731
END;
8732
/*-------------------------------------------------------------------------------------------------------*/
8733
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
8734
 
8735
   nSourceParentRtagId NUMBER;
8736
 
8737
BEGIN
8738
   /*--------------- Business Rules Here -------------------*/
8739
   IF (nRtagId IS NULL) OR (cIsBranch IS NULL)
8740
   THEN
8741
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
8742
   END IF;
8743
   /*-------------------------------------------------------*/
8744
 
8745
 
8746
   IF ( nSourceRtagId IS NULL ) THEN
8747
      -- Create new on main branch
8748
      RETURN nRtagId;
8749
 
8750
   ELSE
8751
      -- Create from source rtag_id
8752
 
8753
      -- Find parent of Source RtagId
8754
      SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
8755
        FROM RELEASE_TAGS rt
8756
       WHERE rt.RTAG_ID = nSourceRtagId;
8757
 
8758
      IF (UPPER(cIsBranch) = 'Y') THEN
8759
         RETURN nSourceRtagId;
8760
      ELSE
8761
         IF (nSourceRtagId = nSourceParentRtagId) THEN
8762
            RETURN nRtagId;
8763
         ELSE
8764
            RETURN nSourceParentRtagId;
8765
         END IF;
8766
      END IF;
8767
 
8768
 
8769
   END IF;
8770
 
8771
 
8772
END;
8773
/*-------------------------------------------------------------------------------------------------------*/
8774
 
8775
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
8776
--                       sNextVersion OUT VARCHAR2,
8777
--                       nNextLifeCycle OUT NUMBER,
8778
--                       nParentRtagId OUT NUMBER,
8779
--                       nProjId IN NUMBER ) IS
8780
--
8781
-- SourceBranchCount NUMBER;
8782
-- ProjRootVersion VARCHAR2(4000);
8783
-- LastLifeCycle NUMBER;
8784
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
8785
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
8786
--
8787
-- SourceProjId NUMBER;
8788
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
8789
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
8790
--
8791
-- BEGIN
8792
--    /*--------------- Business Rules Here -------------------*/
8793
--    /*-------------------------------------------------------*/
8794
--
8795
--
8796
--    BEGIN
8797
--       -- Get Project root version
8798
--       SELECT rt.RTAG_VERSION INTO ProjRootVersion
8799
--         FROM RELEASE_TAGS rt
8800
--        WHERE rt.PROJ_ID = nProjId
8801
--          AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
8802
--
8803
--       EXCEPTION
8804
--       WHEN NO_DATA_FOUND THEN
8805
--       ProjRootVersion := ROOT_VERSION_NOT_FOUND;
8806
--    END;
8807
--
8808
--
8809
--
8810
--
8811
--    BEGIN
8812
--       -- Get info for source rtagid
8813
--       SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
8814
--         FROM RELEASE_TAGS rt
8815
--        WHERE rt.RTAG_ID = nSourceRtagId;
8816
--
8817
--       EXCEPTION
8818
--       WHEN NO_DATA_FOUND THEN
8819
--       SourceProjId := NULL;
8820
--       SourceVersion := NULL;
8821
--       SourceLifeCycle := NULL;
8822
--    END;
8823
--
8824
--
8825
--    IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
8826
--
8827
--       /* Blank Release Required  OR  Release imported from other project */
8828
--
8829
--       IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
8830
--          /* No Releases found in the project, hence calculate next version available.  */
8831
--
8832
--          -- Set parent rtag
8833
--          nParentRtagId := SET_PARENT_AS_YOURSELF;
8834
--
8835
--
8836
--          BEGIN
8837
--             -- Get Next Available Global Root Version
8838
--             SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
8839
--               FROM RELEASE_TAGS rt
8840
--              WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
8841
--
8842
--             -- Set Next Rtag Version
8843
--             sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
8844
--
8845
--             -- Restart Lifecycle
8846
--             nNextLifeCycle := 0;
8847
--
8848
--
8849
--             EXCEPTION
8850
--             WHEN NO_DATA_FOUND THEN
8851
--             -- Release Manager has no releases, hence start from 1
8852
--             sNextVersion := '1';
8853
--             nNextLifeCycle := 0;
8854
--
8855
--          END;
8856
--
8857
--
8858
--
8859
--       ELSE
8860
--          /* Releases found in this project. */
8861
--
8862
--          SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
8863
--            FROM (
8864
--                SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
8865
--                  FROM RELEASE_TAGS rt
8866
--                 WHERE rt.PROJ_ID = nProjId
8867
--                   AND rt.RTAG_VERSION = ProjRootVersion
8868
--                 ORDER BY rt.RTAG_LIFE_CYCLE DESC
8869
--                  ) qry
8870
--           WHERE ROWNUM = 1;
8871
--
8872
--
8873
--          -- Set same Rtag Version
8874
--          sNextVersion := ProjRootVersion;
8875
--
8876
--          -- Increase Lifecycle
8877
--          nNextLifeCycle := LastLifeCycle + 1;
8878
--
8879
--       END IF;
8880
--
8881
--
8882
--
8883
--    ELSE
8884
--       /* Create Release From other release within this project */
8885
--
8886
--       -- Set parent id
8887
--       nParentRtagId := nSourceRtagId;
8888
--
8889
--
8890
--       -- Get number of source branches
8891
--       SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
8892
--         FROM RELEASE_TAGS rt
8893
--        WHERE rt.PROJ_ID = nProjId
8894
--          AND rt.PARENT_RTAG_ID = nSourceRtagId;
8895
--
8896
--
8897
--       IF SourceBranchCount = 0 THEN
8898
--          /* Release is Head (i.e. Tip on its branch ) */
8899
--
8900
--          -- Set Next Rtag Version
8901
--          sNextVersion := SourceVersion;
8902
--
8903
--          -- Increase Lifecycle
8904
--          nNextLifeCycle := SourceLifeCycle + 1;
8905
--
8906
--
8907
--       ELSIF SourceBranchCount = 1 THEN
8908
--          /* Release IS NOT Head, but can be branched */
8909
--
8910
--          -- Set Next Rtag Version
8911
--          sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
8912
--
8913
--          -- Reset Lifecycle to 1
8914
--          nNextLifeCycle := 1;
8915
--
8916
--
8917
--       ELSE
8918
--          -- Limit of two branches is reached
8919
--          RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');
8920
--
8921
--       END IF;
8922
--
8923
--
8924
--
8925
--
8926
--
8927
--
8928
--    END IF;
8929
--
8930
--
8931
-- END;
8932
 
8933
/*-------------------------------------------------------------------------------------------------------*/
8934
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
8935
 
8936
   IsBaseView CHAR(1);
8937
 
8938
BEGIN
8939
 
8940
   -- Check if the view is BASE VIEW
8941
   SELECT vi.BASE_VIEW INTO IsBaseView
8942
     FROM VIEWS vi
8943
    WHERE vi.VIEW_ID = ViewId;
8944
 
8945
   IF (IsBaseView = 'Y') THEN
8946
      -- Get Base view content
8947
      OPEN RecordSet FOR
8948
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8949
            rel.deprecated_state,
8950
            pv.pv_id,
8951
            pkg.pkg_name,
8952
            pv.pkg_version,
8953
            pv.dlocked,
8954
            pv.pv_description,
8955
            pv.BUILD_TYPE
8956
        FROM release_content rel,
8957
             packages pkg,
8958
             package_versions pv
8959
       WHERE pv.pkg_id = pkg.pkg_id
8960
         AND rel.pv_id = pv.pv_id
8961
         AND rel.BASE_VIEW_ID = ViewId
8962
         AND rel.RTAG_ID = RtagId
8963
       ORDER BY UPPER(pkg.PKG_NAME);
8964
 
8965
   ELSE
8966
 
8967
       -- Get non base view content
8968
      OPEN RecordSet FOR
8969
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8970
            rel.deprecated_state,
8971
            pv.pv_id,
8972
            pkg.pkg_name,
8973
            pv.pkg_version,
8974
            pv.dlocked,
8975
            pv.pv_description,
8976
            pv.BUILD_TYPE
8977
        FROM release_content rel,
8978
             packages pkg,
8979
             package_versions pv,
8980
            VIEW_DEF vd
8981
       WHERE pv.pkg_id = pkg.pkg_id
8982
         AND rel.pv_id = pv.pv_id
8983
         AND vd.VIEW_ID = ViewId
8984
         AND vd.PKG_ID = pv.PKG_ID
8985
         AND rel.RTAG_ID = RtagId
8986
       ORDER BY UPPER(pkg.PKG_NAME);
8987
 
8988
   END IF;
8989
 
8990
 
8991
 
8992
 
8993
END;
8994
/*-------------------------------------------------------------------------------------------------------*/
8995
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
8996
 
8997
   ReleaseLocation VARCHAR2(4000);
8998
   sPkgVersion VARCHAR2(4000);
8999
   nPkgId NUMBER;
9000
   sVExt VARCHAR2(4000);
9001
   IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
9002
 
9003
   -- Find package for replacement
9004
   CURSOR curReplacePkg IS
9005
    SELECT pv.PV_ID
9006
     FROM RELEASE_CONTENT rc,
9007
           PACKAGE_VERSIONS pv
9008
    WHERE rc.PV_ID = pv.PV_ID
9009
      AND rc.RTAG_ID = RtagId
9010
      AND pv.PKG_ID = nPkgId
9011
      AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
9012
    recReplacePkg curReplacePkg%ROWTYPE;
9013
 
9014
BEGIN
9015
 
9016
   -- Get is_patch, pkg_id and v_ext
9017
   SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
9018
     FROM PACKAGE_VERSIONS pv
9019
    WHERE pv.PV_ID = newPvId;
9020
 
9021
 
9022
   -- Never put patch in relesed area
9023
   IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
9024
 
9025
      -- Try to get a package to be replaced with this new one.
9026
      -- Use unique constraint of PKG_ID and V_EXT
9027
      OPEN curReplacePkg;
9028
       FETCH curReplacePkg INTO recReplacePkg;
9029
 
9030
       IF curReplacePkg%FOUND THEN
9031
         -- Replace package
9032
         REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
9033
 
9034
      ELSE
9035
         -- Add new package
9036
         INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
9037
         VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
9038
 
9039
 
9040
          /* LOG ACTION */
9041
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9042
           FROM PROJECTS proj,
9043
                 RELEASE_TAGS rt
9044
          WHERE rt.PROJ_ID = proj.PROJ_ID
9045
            AND rt.RTAG_ID = RtagId;
9046
 
9047
         SELECT pv.PKG_VERSION INTO sPkgVersion
9048
           FROM PACKAGE_VERSIONS pv
9049
          WHERE pv.PV_ID = newPvId;
9050
 
9051
         Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9052
 
9053
 
9054
      END IF;
9055
 
9056
      CLOSE curReplacePkg;
9057
 
9058
   END IF;
9059
 
9060
END;
9061
/*-------------------------------------------------------------------------------------------------------*/
9062
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9063
 
9064
   ReleaseLocation VARCHAR2(4000);
9065
   sPkgVersion VARCHAR2(4000);
9066
 
9067
BEGIN
9068
 
9069
   -- Replace Package
9070
    UPDATE RELEASE_CONTENT
9071
       SET pv_id = newPvId,
9072
           insert_stamp = Ora_Sysdate,
9073
           insertor_id = UserId,
9074
         product_state = NULL
9075
     WHERE rtag_id = RtagId
9076
       AND pv_id = oldPvId;
9077
 
9078
   -- update the pegging table
9079
   UPDATE PEGGED_VERSIONS
9080
      SET pv_id = newPvId
9081
     WHERE rtag_id = RtagId
9082
       AND pv_id = oldPvId;
9083
 
9084
   -- update the advisory_ripple table
9085
   UPDATE ADVISORY_RIPPLE
9086
      SET pv_id = newPvId
9087
     WHERE rtag_id = RtagId
9088
       AND pv_id = oldPvId;
9089
 
9090
    /* LOG ACTION */
9091
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9092
     FROM PROJECTS proj,
9093
           RELEASE_TAGS rt
9094
    WHERE rt.PROJ_ID = proj.PROJ_ID
9095
      AND rt.RTAG_ID = RtagId;
9096
 
9097
   SELECT pv.PKG_VERSION INTO sPkgVersion
9098
     FROM PACKAGE_VERSIONS pv
9099
    WHERE pv.PV_ID = newPvId;
9100
 
9101
   Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
9102
   Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9103
 
9104
END;
9105
/*-------------------------------------------------------------------------------------------------------*/
9106
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9107
   ReleaseLocation VARCHAR2(4000);
9108
 
9109
BEGIN
9110
 
9111
 
9112
   -- Delete old package
9113
   DELETE
9114
     FROM RELEASE_CONTENT rc
9115
    WHERE rc.PV_ID = PvId
9116
      AND rc.RTAG_ID = RtagId;
9117
 
9118
 
9119
   /* LOG ACTION */
9120
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9121
     FROM PROJECTS proj,
9122
          RELEASE_TAGS rt
9123
    WHERE rt.PROJ_ID = proj.PROJ_ID
9124
      AND rt.RTAG_ID = RtagId;
9125
 
9126
   Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9127
 
9128
 
9129
END;
9130
/*-------------------------------------------------------------------------------------------------------*/
9131
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9132
   ReleaseLocation VARCHAR2(4000);
9133
 
9134
   CURSOR curMatchingPackage IS
9135
    SELECT mpv.PV_ID
9136
     FROM RELEASE_CONTENT rc,
9137
           PACKAGE_VERSIONS mpv,
9138
         PACKAGE_VERSIONS pv
9139
    WHERE rc.PV_ID = mpv.PV_ID
9140
      AND rc.RTAG_ID = RtagId
9141
      AND pv.PV_ID = PvId
9142
      AND pv.PKG_ID = mpv.PKG_ID
9143
      AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
9144
    recMatchingPackage curMatchingPackage%ROWTYPE;
9145
 
9146
BEGIN
9147
 
9148
   OPEN curMatchingPackage;
9149
    FETCH curMatchingPackage INTO recMatchingPackage;
9150
 
9151
    IF curMatchingPackage%FOUND THEN
9152
      -- Delete old package
9153
      DELETE
9154
        FROM RELEASE_CONTENT rc
9155
       WHERE rc.PV_ID = recMatchingPackage.PV_ID
9156
         AND rc.RTAG_ID = RtagId;
9157
 
9158
 
9159
      /* LOG ACTION */
9160
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9161
        FROM PROJECTS proj,
9162
              RELEASE_TAGS rt
9163
       WHERE rt.PROJ_ID = proj.PROJ_ID
9164
         AND rt.RTAG_ID = RtagId;
9165
 
9166
      Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9167
 
9168
   END IF;
9169
 
9170
 
9171
   CLOSE curMatchingPackage;
9172
 
9173
 
9174
 
9175
 
9176
END;
9177
/*-------------------------------------------------------------------------------------------------------*/
9178
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
9179
 
9180
   ReturnValue NUMBER;
9181
 
9182
BEGIN
9183
   SELECT rc.BASE_VIEW_ID INTO ReturnValue
9184
     FROM RELEASE_CONTENT rc
9185
    WHERE rc.RTAG_ID = RtagId
9186
      AND rc.PV_ID = PvId;
9187
 
9188
   RETURN ReturnValue;
9189
END;
9190
/*-------------------------------------------------------------------------------------------------------*/
9191
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
9192
 
9193
BEGIN
9194
   -- Reset Ignore warnings up-the-tree
9195
   RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
9196
 
9197
   -- Refresh Package states
9198
   TOUCH_RELEASE ( RtagId );
9199
 
9200
END;
9201
/*-------------------------------------------------------------------------------------------------------*/
9202
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
9203
   CURSOR curReleases IS
9204
    SELECT rc.RTAG_ID
9205
     FROM RELEASE_CONTENT rc
9206
    WHERE rc.PV_ID = PvId;
9207
    recReleases curReleases%ROWTYPE;
9208
 
9209
BEGIN
9210
 
9211
   OPEN curReleases;
9212
    FETCH curReleases INTO recReleases;
9213
 
9214
   WHILE curReleases%FOUND
9215
   LOOP
9216
 
9217
      RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
9218
 
9219
      FETCH curReleases INTO recReleases;
9220
   END LOOP;
9221
 
9222
   CLOSE curReleases;
9223
 
9224
END;
9225
/*-------------------------------------------------------------------------------------------------------*/
9226
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
9227
 
9228
BEGIN
9229
 
9230
   UPDATE RELEASE_CONTENT rc SET
9231
   rc.BASE_VIEW_ID = NewViewId
9232
   WHERE rc.PV_ID = PvId
9233
     AND rc.RTAG_ID = RtagId;
9234
 
9235
END;
9236
/*-------------------------------------------------------------------------------------------------------*/
9237
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
9238
 
9239
   RowCount NUMBER;
9240
 
9241
 
9242
   CURSOR curPackageClash IS
9243
   SELECT pkg.PKG_NAME,
9244
         er.*
9245
     FROM (
9246
 
9247
           /* Get existing referenced packages */
9248
         SELECT pv.PKG_ID,
9249
                pv.V_EXT
9250
           FROM RELEASE_LINKS rl,
9251
                 RELEASE_CONTENT rc,
9252
                 PACKAGE_VERSIONS pv
9253
          WHERE rl.RTAG_ID = nRtagId
9254
            AND rl.REF_RTAG_ID = rc.RTAG_ID
9255
            AND rc.PV_ID = pv.PV_ID
9256
 
9257
            ) er,
9258
         (
9259
 
9260
         /* Get current reference packages */
9261
         SELECT pv.PKG_ID,
9262
                pv.V_EXT
9263
           FROM RELEASE_CONTENT rc,
9264
                 PACKAGE_VERSIONS pv
9265
          WHERE rc.RTAG_ID = nRefRtagId
9266
            AND rc.PV_ID = pv.PV_ID
9267
 
9268
         ) cr,
9269
         PACKAGES PKG
9270
    WHERE er.PKG_ID = cr.PKG_ID
9271
      AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9272
      AND er.PKG_ID = pkg.PKG_ID;
9273
 
9274
   recPackageClash curPackageClash%ROWTYPE;
9275
 
9276
BEGIN
9277
   /*--------------- Business Rules Here -------------------*/
9278
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9279
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9280
   END IF;
9281
 
9282
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9283
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9284
   END IF;
9285
   /*-------------------------------------------------------*/
9286
   ProblemString := NULL;
9287
 
9288
 
9289
   -- Check if release already has references
9290
   SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
9291
     FROM RELEASE_LINKS rl
9292
    WHERE rl.RTAG_ID = nRtagId;
9293
 
9294
 
9295
   IF RowCount > 0 THEN
9296
      -- Found existing references
9297
 
9298
      -- Make sure there is no package clashes
9299
      OPEN curPackageClash;
9300
       FETCH curPackageClash INTO recPackageClash;
9301
 
9302
      IF curPackageClash%FOUND THEN
9303
 
9304
         ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
9305
 
9306
         WHILE curPackageClash%FOUND
9307
         LOOP
9308
            EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;   -- Do not allow variable overflow
9309
 
9310
            ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
9311
 
9312
            FETCH curPackageClash INTO recPackageClash;
9313
         END LOOP;
9314
 
9315
      END IF;
9316
 
9317
      CLOSE curPackageClash;
9318
 
9319
 
9320
   ELSE
9321
      -- No references found, hence reference a release
9322
 
9323
 
9324
      -- Remove exising package from this release to be referenced
9325
      REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);
9326
 
9327
 
9328
      -- Add new linked packages to release
9329
      INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
9330
      SELECT nRtagId,
9331
            rc.PV_ID,
9332
            rc.BASE_VIEW_ID,
9333
            rc.INSERT_STAMP,
9334
            rc.INSERTOR_ID,
9335
            rc.PKG_STATE
9336
        FROM RELEASE_CONTENT rc
9337
       WHERE rc.RTAG_ID = nRefRtagId;
9338
 
9339
 
9340
 
9341
      -- Copy ignore warnings for referenced packages
9342
      INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
9343
      SELECT nRtagId,
9344
            iw.PV_ID,
9345
            iw.DPV_ID,
9346
            iw.IS_PATCH_IGNORE
9347
        FROM IGNORE_WARNINGS iw,
9348
              RELEASE_CONTENT rc
9349
       WHERE iw.RTAG_ID = rc.RTAG_ID
9350
         AND iw.PV_ID = rc.PV_ID
9351
         AND rc.RTAG_ID = nRefRtagId;
9352
 
9353
 
9354
 
9355
      -- Reference release
9356
      INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
9357
      VALUES ( nRtagId, nRefRtagId );
9358
 
9359
 
9360
      -- Refresh Package states
9361
      TOUCH_RELEASE ( nRtagId );
9362
 
9363
   END IF;
9364
 
9365
 
9366
END;
9367
/*-------------------------------------------------------------------------------------------------------*/
9368
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
9369
 
9370
 
9371
BEGIN
9372
   /*--------------- Business Rules Here -------------------*/
9373
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9374
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9375
   END IF;
9376
 
9377
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9378
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9379
   END IF;
9380
 
9381
   /*-------------------------------------------------------*/
9382
 
9383
 
9384
   -- Remove ignore warnings for those packages who use referenced packages
9385
   DELETE FROM IGNORE_WARNINGS iw
9386
    WHERE iw.RTAG_ID = nRtagId
9387
      AND iw.DPV_ID IN (
9388
                        SELECT dep.DPV_ID
9389
                       FROM (
9390
 
9391
                           /* Get referenced packages */
9392
                           SELECT pv.PKG_ID,
9393
                                  pv.V_EXT
9394
                             FROM RELEASE_CONTENT rc,
9395
                                   PACKAGE_VERSIONS pv
9396
                            WHERE rc.RTAG_ID = nRefRtagId
9397
                              AND rc.PV_ID = pv.PV_ID
9398
 
9399
                           ) cr,
9400
                           (
9401
 
9402
                           /* Get all dependencies for current release */
9403
                           SELECT DISTINCT
9404
                                 pv.PKG_ID,
9405
                                 pv.V_EXT,
9406
                                 dep.DPV_ID
9407
                             FROM RELEASE_CONTENT rc,
9408
                                 PACKAGE_DEPENDENCIES dep,
9409
                                 PACKAGE_VERSIONS pv
9410
                            WHERE rc.RTAG_ID = nRtagId
9411
                              AND rc.PV_ID = dep.PV_ID
9412
                              AND dep.PV_ID = pv.PV_ID
9413
 
9414
                           ) dep
9415
                      WHERE dep.PKG_ID = cr.PKG_ID
9416
                        AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9417
                     );
9418
 
9419
 
9420
 
9421
 
9422
   -- Remove ignore warnings for those package which are going to be replaced with the reference
9423
   DELETE FROM IGNORE_WARNINGS iw
9424
    WHERE iw.RTAG_ID = nRtagId
9425
      AND iw.PV_ID IN (
9426
                  SELECT pv.PV_ID
9427
                    FROM (
9428
 
9429
                        /* Get referenced packages */
9430
                        SELECT pv.PKG_ID,
9431
                               pv.V_EXT
9432
                          FROM RELEASE_CONTENT rc,
9433
                                PACKAGE_VERSIONS pv
9434
                         WHERE rc.RTAG_ID = nRefRtagId
9435
                           AND rc.PV_ID = pv.PV_ID
9436
 
9437
                        ) cr,
9438
                        RELEASE_CONTENT rc,
9439
                        PACKAGE_VERSIONS pv
9440
                   WHERE pv.PKG_ID = cr.PKG_ID
9441
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9442
                     AND rc.RTAG_ID = nRtagId
9443
                     AND rc.PV_ID = pv.PV_ID
9444
                  );
9445
 
9446
 
9447
 
9448
 
9449
 
9450
   -- Remove matching packages from release
9451
   DELETE FROM RELEASE_CONTENT rc
9452
    WHERE rc.RTAG_ID = nRtagId
9453
      AND rc.PV_ID IN (
9454
                  SELECT pv.PV_ID
9455
                    FROM (
9456
 
9457
                        /* Get referenced packages */
9458
                        SELECT pv.PKG_ID,
9459
                               pv.V_EXT
9460
                          FROM RELEASE_CONTENT rc,
9461
                                PACKAGE_VERSIONS pv
9462
                         WHERE rc.RTAG_ID = nRefRtagId
9463
                           AND rc.PV_ID = pv.PV_ID
9464
 
9465
                        ) cr,
9466
                        RELEASE_CONTENT rc,
9467
                        PACKAGE_VERSIONS pv
9468
                   WHERE pv.PKG_ID = cr.PKG_ID
9469
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9470
                     AND rc.RTAG_ID = nRtagId
9471
                     AND rc.PV_ID = pv.PV_ID
9472
                  );
9473
 
9474
 
9475
 
9476
 
9477
 
9478
   -- Remove Reference release
9479
   DELETE
9480
     FROM RELEASE_LINKS rl
9481
    WHERE rl.RTAG_ID = nRtagId
9482
      AND rl.REF_RTAG_ID = nRefRtagId;
9483
 
9484
 
9485
   -- Refresh Package states
9486
   TOUCH_RELEASE ( nRtagId );
9487
 
9488
 
9489
END;
9490
/*-------------------------------------------------------------------------------------------------------*/
9491
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
9492
 
9493
   cReleaseMode CHAR(1);
9494
   cPvMode CHAR(1);
9495
 
9496
BEGIN
9497
 
9498
   -- Get Release Mode
9499
   SELECT rt.OFFICIAL INTO cReleaseMode
9500
     FROM RELEASE_TAGS rt
9501
    WHERE rt.RTAG_ID = RtagId;
9502
 
9503
 
9504
   -- Get Package Mode
9505
   SELECT pv.DLOCKED INTO cPvMode
9506
     FROM PACKAGE_VERSIONS pv
9507
    WHERE pv.PV_ID = PvId;
9508
 
9509
   -- Only check if package is locked
9510
   IF (cPvMode = 'Y') THEN
9511
 
9512
      IF (cReleaseMode != 'N') AND (Permission != 'Y')
9513
      THEN
9514
         RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
9515
 
9516
      END IF;
9517
 
9518
   END IF;
9519
 
9520
 
9521
END;
9522
 
9523
/*-------------------------------------------------------------------------------------------------------*/
9524
END PK_RELEASE;
1374 dpurdie 9525
/
9526
--------------------------------------------------------
9527
--  DDL for Package Body PK_PROJECT
9528
--------------------------------------------------------
1373 dpurdie 9529
 
9530
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS
9531
 
9532
    /*------------------------------------------------------------------------*/
9533
    PROCEDURE update_base_url (
9534
    nprojid   IN  projects.proj_id%TYPE,
9535
    sbaseurl  IN  VARCHAR2
9536
    ) IS
9537
    BEGIN
9538
 
9539
    UPDATE projects
9540
    SET base_url = sbaseurl
9541
    WHERE proj_id = nprojid;
9542
 
9543
    END update_base_url;
9544
 
9545
/*------------------------------------------------------------------------*/
9546
    PROCEDURE update_project_config (
9547
    nprojid   IN  projects.proj_id%TYPE,
9548
    sbaseurl  IN  VARCHAR2,
9549
    sjirakey  IN  VARCHAR2
9550
    ) IS
9551
    BEGIN
9552
 
9553
    UPDATE projects
9554
    SET base_url = sbaseurl,
9555
        jira_key = sjirakey
9556
    WHERE proj_id = nprojid;
9557
 
9558
    END update_project_config;
9559
    /*------------------------------------------------------------------------*/
9560
 
9561
    END pk_project;
1374 dpurdie 9562
/
9563
--------------------------------------------------------
9564
--  DDL for Package Body PK_ENVIRONMENT
9565
--------------------------------------------------------
1373 dpurdie 9566
 
9567
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT" 
9568
IS
9569
 
9570
   /*-------------------------------------------------------------------------------------------------------*/
9571
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
9572
     RETURN NUMBER
9573
   IS
9574
   BEGIN
9575
      /*
9576
     || N - unlocked
9577
     || Y - release and locked
9578
     || P - penging approval
9579
     || A - approved package ready for auto-build
9580
     */
9581
     IF cdlock = 'N' OR cdlock = 'R'
9582
     THEN
9583
       -- WORK IN PROGRESS --
9584
       RETURN 0;
9585
     ELSIF cdlock = 'P' OR cdlock = 'A'
9586
     THEN
9587
       -- PENDING --
9588
       RETURN 1;
9589
     ELSIF cdlock = 'Y'
9590
     THEN
9591
       -- RELEASED --
9592
       RETURN 2;
9593
     ELSE
9594
       -- NOT FOUND --
9595
       raise_application_error
9596
                   (-20000,
9597
                      'Cannot decide where to place package. [cDlock='
9598
                    || cdlock
9599
                    || ']'
9600
                   );
9601
     END IF;
9602
   END;
9603
 
9604
/*-------------------------------------------------------------------------------------------------------*/
9605
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
9606
     RETURN NUMBER
9607
   IS
9608
     envtab   NUMBER         := -1;
9609
 
9610
     CURSOR curarea
9611
     IS
9612
       SELECT 2 AS envtab
9613
         FROM release_content rc
9614
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9615
       UNION
9616
       SELECT 0 AS envtab
9617
         FROM work_in_progress wip
9618
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9619
       UNION
9620
       SELECT 1 AS envtab
9621
         FROM planned pl
9622
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9623
 
9624
     recarea   curarea%ROWTYPE;
9625
   BEGIN
9626
     OPEN curarea;
9627
 
9628
     FETCH curarea
9629
      INTO recarea;
9630
 
9631
     IF curarea%FOUND
9632
     THEN
9633
       envtab := recarea.envtab;
9634
     END IF;
9635
 
9636
     CLOSE curarea;
9637
 
9638
     RETURN envtab;
9639
   END;
9640
 
9641
/*-------------------------------------------------------------------------------------------------------*/
9642
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
9643
     RETURN NUMBER
9644
   IS
9645
     ispatch   package_versions.dlocked%TYPE;
9646
     viewid   NUMBER                    := -1;
9647
 
9648
     CURSOR curview
9649
     IS
9650
       SELECT rc.base_view_id AS view_id
9651
         FROM release_content rc
9652
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9653
       UNION
9654
       SELECT wip.view_id AS view_id
9655
         FROM work_in_progress wip
9656
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9657
       UNION
9658
       SELECT pl.view_id AS view_id
9659
         FROM planned pl
9660
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9661
 
9662
     recview   curview%ROWTYPE;
9663
   BEGIN
9664
     -- Get dlock state
9665
     SELECT pv.is_patch
9666
      INTO ispatch
9667
      FROM package_versions pv
9668
      WHERE pv.pv_id = pvid;
9669
 
9670
     -- Decide which view id should package go under.
9671
     IF (ispatch != 'Y') OR (ispatch IS NULL)
9672
     THEN
9673
       -- Get VIEW ID of Package
9674
       OPEN curview;
9675
 
9676
       FETCH curview
9677
        INTO recview;
9678
 
9679
       IF curview%FOUND
9680
       THEN
9681
         viewid := recview.view_id;
9682
       ELSE
9683
         raise_application_error
9684
            (-20000,
9685
               'Cannot find view_id to proceed. [PvId='
9686
            || pvid
9687
            || ']. The current version may not exist in the release anymore.'
9688
            );
9689
       END IF;
9690
 
9691
       CLOSE curview;
9692
     ELSE
9693
       -- Get VIEW ID of Patch (view id of parent package)
9694
       SELECT rc.base_view_id
9695
         INTO viewid
9696
         FROM release_content rc, package_patches ppv
9697
        WHERE rc.rtag_id = rtagid
9698
         AND rc.pv_id = ppv.pv_id
9699
         AND ppv.patch_id = pvid;
9700
     END IF;
9701
 
9702
     RETURN viewid;
9703
   END;
9704
 
9705
/*-------------------------------------------------------------------------------------------------------*/
9706
   PROCEDURE add_package (
9707
     pvid    IN   NUMBER,
9708
     viewid   IN   NUMBER,
9709
     rtagid   IN   NUMBER,
9710
     userid   IN   NUMBER
9711
   )
9712
   IS
9713
     dlocked   package_versions.dlocked%TYPE;
9714
     envtab   NUMBER;
9715
   BEGIN
9716
     IF can_edit_pkg_in_project (pvid, rtagid) = 1
9717
     THEN
9718
       -- Get dlock state
9719
       SELECT pv.dlocked
9720
         INTO dlocked
9721
         FROM package_versions pv
9722
        WHERE pv.pv_id = pvid;
9723
 
9724
       -- Get which area should go under
9725
       envtab := select_environment_area (dlocked);
9726
       -- Log
9727
       log_action (pvid, 'action', userid, 'Start of Package Add...');
9728
 
9729
       -- Remove Package
9730
       IF envtab = 0
9731
       THEN
9732
         -- WORK IN PROGRESS --
9733
         pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
9734
       ELSIF envtab = 1
9735
       THEN
9736
         -- PENDING --
9737
         pk_planned.add_package (pvid, viewid, rtagid, userid);
9738
       ELSIF envtab = 2
9739
       THEN
9740
         -- RELEASED --
9741
         -- NOTE: this package will be replaced with matching package
9742
         pk_release.add_package (pvid, viewid, rtagid, userid);
9743
         -- Now do post Release Actions
9744
         pk_release.run_post_actions (pvid, rtagid);
9745
       END IF;
9746
 
9747
       -- Log
9748
       log_action (pvid, 'action', userid, 'End of Package Add...');
9749
     END IF;
9750
   END;
9751
 
9752
/*-------------------------------------------------------------------------------------------------------*/
9753
   PROCEDURE add_package_bulk (
9754
     pvidlist   IN   VARCHAR2,
9755
     viewid    IN   NUMBER,
9756
     rtagid    IN   NUMBER,
9757
     userid    IN   NUMBER
9758
   )
9759
   IS
9760
     nidcollector   relmgr_number_tab_t         := relmgr_number_tab_t
9761
                                                        ();
9762
     dlocked      package_versions.dlocked%TYPE;
9763
     pvid         NUMBER;
9764
     envtab       NUMBER;
9765
   BEGIN
9766
     /*--------------- Business Rules Here -------------------*/
9767
     IF (pvidlist IS NULL)
9768
     THEN
9769
       raise_application_error (-20000,
9770
                          'Please select at least one package.'
9771
                         );
9772
     END IF;
9773
 
9774
/*-------------------------------------------------------*/
9775
     nidcollector := in_list_number (pvidlist);
9776
 
9777
     FOR i IN 1 .. nidcollector.COUNT
9778
     LOOP
9779
       pvid := nidcollector (i);
9780
       add_package (pvid, viewid, rtagid, userid);
9781
     END LOOP;
9782
   END;
9783
 
9784
/*-------------------------------------------------------------------------------------------------------*/
9785
   PROCEDURE replace_package (
9786
     newpvid  IN   NUMBER,
9787
     oldpvid  IN   NUMBER,
9788
     rtagid   IN   NUMBER,
9789
     userid   IN   NUMBER
9790
   )
9791
   IS
9792
     dlocked      package_versions.dlocked%TYPE;
9793
     viewid       NUMBER;
9794
     envtab       NUMBER;
9795
     ROWCOUNT     NUMBER;
9796
     creleasemode CHAR (1);
9797
     npkgid       NUMBER;
9798
   BEGIN
9799
     /*--------------- Business Rules Here -------------------*/
9800
     -- Check if oldPvId exists. It could have been removed
9801
     SELECT COUNT (pv.pv_id)
9802
       INTO ROWCOUNT
9803
       FROM package_versions pv
9804
      WHERE pv.pv_id = oldpvid;
9805
 
9806
/*-------------------------------------------------------*/
9807
 
9808
     /* This procedure is usually used by "History" option in Release Manager */
9809
 
9810
     -- Get dlock state
9811
     SELECT pv.dlocked
9812
       INTO dlocked
9813
       FROM package_versions pv
9814
      WHERE pv.pv_id = newpvid;
9815
 
9816
     -- Get VIEW_ID ---
9817
     IF ROWCOUNT = 1
9818
     THEN
9819
       viewid := get_view_location (oldpvid, rtagid);
9820
     ELSE
9821
       -- Set ViewID to default
9822
       viewid := 7;
9823
     END IF;
9824
 
9825
     -- Get which area should go under
9826
     envtab := select_environment_area (dlocked);
9827
     -- Log
9828
     log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
9829
 
9830
     -- Replace package
9831
     IF envtab = 0
9832
     THEN
9833
       -- WORK IN PROGRESS --
9834
 
9835
       -- Delete old package
9836
       pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
9837
 
9838
       -- Add new package
9839
       pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
9840
     ELSIF envtab = 1
9841
     THEN
9842
       -- PENDING --
9843
 
9844
       -- Delete old package
9845
       pk_planned.remove_package (oldpvid, rtagid, userid);
9846
 
9847
       -- Add new package
9848
       pk_planned.add_package (newpvid, viewid, rtagid, userid);
9849
     ELSIF envtab = 2
9850
     THEN
9851
       -- RELEASED --
9852
 
9853
       -- Delete old package
9854
       pk_release.remove_package (oldpvid, rtagid, userid);
9855
       -- Add new package
9856
       pk_release.add_package (newpvid, viewid, rtagid, userid);
9857
 
9858
       -- update the pegging table
9859
       UPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9860
 
9861
       -- update the advisory ripple table
9862
       UPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9863
 
9864
       -- Now do post Release Actions
9865
       pk_release.run_post_actions (newpvid, rtagid);
9866
     END IF;
9867
 
9868
     -- Log
9869
     log_action (oldpvid, 'action', userid, 'End of Package Replace...');
9870
   END;
9871
 
9872
/*-------------------------------------------------------------------------------------------------------*/
9873
   FUNCTION remove_package (
9874
     pvid        IN   NUMBER,
9875
     rtagid      IN   NUMBER,
9876
     userid      IN   NUMBER,
9877
     forceremove IN   CHAR
9878
   )
9879
     RETURN NUMBER
9880
   IS
9881
     envtab      NUMBER;
9882
     isused      BOOLEAN;
9883
     recordcount   NUMBER;
9884
   BEGIN
9885
/*--------------- Business Rules Here -------------------*/
9886
/*-------------------------------------------------------*/
9887
 
9888
     -- Find location of package
9889
     envtab := get_package_area (pvid, rtagid);
9890
 
9891
     -- Remove Package
9892
     IF envtab = 0
9893
     THEN
9894
       -- WORK IN PROGRESS --
9895
       -- Delete package
9896
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
9897
 
9898
       RETURN 0;
9899
     ELSIF envtab = 1
9900
     THEN
9901
       -- PENDING --
9902
       -- Delete package
9903
       pk_planned.remove_package (pvid, rtagid, userid);
9904
 
9905
       RETURN 0;
9906
     ELSIF envtab = 2
9907
     THEN
9908
       -- RELEASED --
9909
 
9910
       -- Check if is used by other packages
9911
       isused := TRUE;
9912
 
9913
       IF forceremove = 'N'
9914
       THEN
9915
         SELECT COUNT (pv.pv_id)
9916
           INTO recordcount
9917
           FROM (SELECT dpv.pkg_id, dpv.v_ext
9918
                 FROM release_content rc,
9919
                     package_dependencies dep,
9920
                     package_versions dpv
9921
                WHERE rc.rtag_id = rtagid
9922
                  AND rc.pv_id = dep.pv_id
9923
                  AND dep.dpv_id = dpv.pv_id) rdep,
9924
               package_versions pv
9925
          WHERE pv.pkg_id = rdep.pkg_id
9926
            AND NVL (pv.v_ext, '|LINK_A_NULL|') =
9927
                                  NVL (rdep.v_ext, '|LINK_A_NULL|')
9928
            AND pv.pv_id = pvid;
9929
 
9930
         IF recordcount > 0
9931
         THEN
9932
            RETURN 1;               -- Return 1 as package being used
9933
         ELSE
9934
            isused := FALSE;
9935
         END IF;
9936
       END IF;
9937
 
9938
       IF forceremove = 'Y' OR NOT isused
9939
       THEN
9940
         -- Delete old package
9941
         pk_release.remove_package (pvid, rtagid, userid);
9942
 
9943
         -- Delete old package's pegging info
9944
         DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;
9945
 
9946
         -- Delete old package's advisory ripple info
9947
         DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;
9948
 
9949
         -- Now do post Release Actions
9950
         pk_release.run_post_actions (pvid, rtagid);
9951
         RETURN 0;
9952
       END IF;
9953
     END IF;
9954
   END;
9955
 
9956
/*-------------------------------------------------------------------------------------------------------*/
9957
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
9958
 
9959
   PROCEDURE get_environment_items (
9960
     viewtype         IN      NUMBER,
9961
     userid           IN      NUMBER,
9962
     rtagid           IN      NUMBER,
9963
     sviewidshowlist  IN      VARCHAR2,
9964
     ntruerecordcount OUT     NUMBER,
9965
     recordset        OUT     typecur
9966
   )
9967
   IS
9968
   BEGIN
9969
     -- Get true record count because views can give false count
9970
     SELECT COUNT (pl.pv_id)
9971
      INTO ntruerecordcount
9972
      FROM environment_view pl
9973
      WHERE pl.rtag_id = rtagid;
9974
 
9975
     IF viewtype = 1
9976
     THEN
9977
       /*--- GUEST VIEW ---*/
9978
       OPEN recordset FOR
9979
         SELECT   *
9980
            FROM (
9981
                 /* Base Views collapsed */
9982
                 SELECT DISTINCT vi.view_id, vi.view_name,
9983
                             TO_NUMBER (NULL) AS pkg_state,
9984
                             TO_NUMBER (NULL) AS deprecated_state,
9985
                             TO_NUMBER (NULL) AS pv_id,
9986
                             NULL AS pkg_name, NULL AS pkg_version,
9987
                             NULL AS dlocked, NULL AS pv_description,
9988
                             rel.operation
9989
                         FROM environment_view rel, views vi
9990
                        WHERE rel.view_id = vi.view_id
9991
                          AND rtag_id = rtagid
9992
                          AND rel.view_id NOT IN (
9993
                               SELECT *
9994
                                 FROM THE
9995
                                       (SELECT CAST
9996
                                               (in_list_number
9997
                                                  (sviewidshowlist
9998
                                                  ) AS relmgr_number_tab_t
9999
                                               )
10000
                                         FROM DUAL
10001
                                       ))
10002
                 UNION
10003
                 /* Base Views expanded */
10004
                 SELECT vi.view_id, vi.view_name,
10005
                      DECODE (rel.pkg_state,
10006
                            NULL, 0,
10007
                            rel.pkg_state
10008
                           ) AS pkg_state,
10009
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10010
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10011
                      rel.operation
10012
                  FROM environment_view rel,
10013
                      PACKAGES pkg,
10014
                      package_versions pv,
10015
                      views vi
10016
                  WHERE pv.pkg_id = pkg.pkg_id
10017
                   AND rel.pv_id = pv.pv_id
10018
                   AND rel.view_id = vi.view_id
10019
                   AND rel.view_id IN (
10020
                        SELECT *
10021
                          FROM THE
10022
                                (SELECT CAST
10023
                                        (in_list_number
10024
                                               (sviewidshowlist) AS relmgr_number_tab_t
10025
                                        )
10026
                                  FROM DUAL
10027
                                ))
10028
                   AND rtag_id = rtagid) ord
10029
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10030
     ELSIF viewtype = 2
10031
     THEN
10032
       /*--- PERSONAL VIEW ---*/
10033
       OPEN recordset FOR
10034
         SELECT   *
10035
            FROM (
10036
                 /* Base Views collapsed */
10037
                 SELECT DISTINCT vi.view_id, vi.view_name,
10038
                             TO_NUMBER (NULL) AS pkg_state,
10039
                             TO_NUMBER (NULL) AS deprecated_state,
10040
                             TO_NUMBER (NULL) AS pv_id,
10041
                             NULL AS pkg_name, NULL AS pkg_version,
10042
                             NULL AS dlocked, NULL AS pv_description,
10043
                             rel.operation
10044
                         FROM environment_view rel,
10045
                             view_settings vs,
10046
                             views vi
10047
                        WHERE rel.view_id = vi.view_id
10048
                          AND vs.view_id = rel.view_id
10049
                          AND vs.user_id = userid
10050
                          AND rtag_id = rtagid
10051
                          AND rel.view_id NOT IN (
10052
                               SELECT *
10053
                                 FROM THE
10054
                                       (SELECT CAST
10055
                                               (in_list_number
10056
                                                  (sviewidshowlist
10057
                                                  ) AS relmgr_number_tab_t
10058
                                               )
10059
                                         FROM DUAL
10060
                                       ))
10061
                 UNION
10062
                 /* Base Views expanded */
10063
                 SELECT vi.view_id, vi.view_name,
10064
                      DECODE (rel.pkg_state,
10065
                            NULL, 0,
10066
                            rel.pkg_state
10067
                           ) AS pkg_state,
10068
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10069
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10070
                      rel.operation
10071
                  FROM environment_view rel,
10072
                      PACKAGES pkg,
10073
                      package_versions pv,
10074
                      views vi,
10075
                      view_settings vs
10076
                  WHERE pv.pkg_id = pkg.pkg_id
10077
                   AND rel.pv_id = pv.pv_id
10078
                   AND rel.view_id = vi.view_id
10079
                   AND vs.view_id = vi.view_id
10080
                   AND vs.user_id = userid
10081
                   AND rel.view_id IN (
10082
                        SELECT *
10083
                          FROM THE
10084
                                (SELECT CAST
10085
                                        (in_list_number
10086
                                               (sviewidshowlist) AS relmgr_number_tab_t
10087
                                        )
10088
                                  FROM DUAL
10089
                                ))
10090
                   AND rtag_id = rtagid
10091
                 UNION
10092
                 /* Private Views collapsed */
10093
                 SELECT vi.view_id, vi.view_name,
10094
                      TO_NUMBER (NULL) AS pkg_state,
10095
                      TO_NUMBER (NULL) AS deprecated_state,
10096
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10097
                      NULL AS pkg_version, NULL AS dlocked,
10098
                      NULL AS pv_description,
10099
                      rel.operation
10100
                  FROM view_settings vs,
10101
                      view_def vd,
10102
                      views vi,
10103
                      environment_view rel,
10104
                      package_versions pv
10105
                  WHERE vs.view_id = vi.view_id
10106
                   AND rel.pv_id = pv.pv_id
10107
                   AND vd.pkg_id = pv.pkg_id
10108
                   AND vd.view_id = vi.view_id
10109
                   AND vi.base_view = 'N'
10110
                   AND rel.rtag_id = rtagid
10111
                   AND vs.user_id = userid
10112
                   AND vi.view_id NOT IN (
10113
                        SELECT *
10114
                          FROM THE
10115
                                (SELECT CAST
10116
                                        (in_list_number
10117
                                               (sviewidshowlist) AS relmgr_number_tab_t
10118
                                        )
10119
                                  FROM DUAL
10120
                                ))
10121
                 UNION
10122
                 /* Private Views expanded */
10123
                 SELECT vi.view_id, vi.view_name,
10124
                      DECODE (rel.pkg_state,
10125
                            NULL, 0,
10126
                            rel.pkg_state
10127
                           ) AS pkg_state,
10128
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10129
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10130
                      rel.operation
10131
                  FROM users usr,
10132
                      view_settings vs,
10133
                      view_def vd,
10134
                      views vi,
10135
                      environment_view rel,
10136
                      PACKAGES pkg,
10137
                      package_versions pv
10138
                  WHERE vs.user_id = usr.user_id
10139
                   AND vs.view_id = vi.view_id
10140
                   AND vd.view_id = vi.view_id
10141
                   AND pv.pkg_id = pkg.pkg_id
10142
                   AND rel.pv_id = pv.pv_id
10143
                   AND rel.rtag_id = rtagid
10144
                   AND vd.pkg_id = pkg.pkg_id
10145
                   AND vi.base_view = 'N'
10146
                   AND vi.view_id IN (
10147
                        SELECT *
10148
                          FROM THE
10149
                                (SELECT CAST
10150
                                        (in_list_number
10151
                                               (sviewidshowlist) AS relmgr_number_tab_t
10152
                                        )
10153
                                  FROM DUAL
10154
                                ))
10155
                   AND usr.user_id = userid) ord
10156
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10157
     END IF;
10158
   END;
10159
 
10160
/*-------------------------------------------------------------------------------------------------------*/
10161
   PROCEDURE get_released_items (
10162
     viewtype         IN      NUMBER,
10163
     userid           IN      NUMBER,
10164
     rtagid           IN      NUMBER,
10165
     sviewidshowlist  IN      VARCHAR2,
10166
     ntruerecordcount OUT     NUMBER,
10167
     recordset        OUT     typecur
10168
   )
10169
   IS
10170
   BEGIN
10171
     -- Get true record count because views can give false count
10172
     SELECT COUNT (rc.pv_id)
10173
      INTO ntruerecordcount
10174
      FROM release_content rc
10175
      WHERE rc.rtag_id = rtagid;
10176
 
10177
     IF viewtype = 1
10178
     THEN
10179
       /*--- GUEST VIEW ---*/
10180
       OPEN recordset FOR
10181
         SELECT   *
10182
            FROM (
10183
                 /* Base Views collapsed */
10184
                 SELECT DISTINCT vi.view_id, vi.view_name,
10185
                             TO_NUMBER (NULL) AS pkg_state,
10186
                             TO_NUMBER (NULL) AS deprecated_state,
10187
                             TO_NUMBER (NULL) AS pv_id,
10188
                             NULL AS pkg_name, NULL AS pkg_version,
10189
                             NULL AS dlocked, NULL AS pv_description
10190
                         FROM release_content rel, views vi
10191
                        WHERE rel.base_view_id = vi.view_id
10192
                          AND rtag_id = rtagid
10193
                          AND rel.base_view_id NOT IN (
10194
                               SELECT *
10195
                                 FROM THE
10196
                                       (SELECT CAST
10197
                                               (in_list_number
10198
                                                  (sviewidshowlist
10199
                                                  ) AS relmgr_number_tab_t
10200
                                               )
10201
                                         FROM DUAL
10202
                                       ))
10203
                 UNION
10204
                 /* Base Views expanded */
10205
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10206
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10207
                      pv.pkg_version, pv.dlocked, pv.pv_description
10208
                  FROM release_content rel,
10209
                      PACKAGES pkg,
10210
                      package_versions pv,
10211
                      views vi
10212
                  WHERE pv.pkg_id = pkg.pkg_id
10213
                   AND rel.pv_id = pv.pv_id
10214
                   AND rel.base_view_id = vi.view_id
10215
                   AND rel.base_view_id IN (
10216
                        SELECT *
10217
                          FROM THE
10218
                                (SELECT CAST
10219
                                        (in_list_number
10220
                                               (sviewidshowlist) AS relmgr_number_tab_t
10221
                                        )
10222
                                  FROM DUAL
10223
                                ))
10224
                   AND rtag_id = rtagid) ord
10225
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10226
     ELSIF viewtype = 2
10227
     THEN
10228
       /*--- PERSONAL VIEW ---*/
10229
       OPEN recordset FOR
10230
         SELECT   *
10231
            FROM (
10232
                 /* Base Views collapsed */
10233
                 SELECT DISTINCT vi.view_id, vi.view_name,
10234
                             TO_NUMBER (NULL) AS pkg_state,
10235
                             TO_NUMBER (NULL) AS deprecated_state,
10236
                             TO_NUMBER (NULL) AS pv_id,
10237
                             NULL AS pkg_name, NULL AS pkg_version,
10238
                             NULL AS dlocked, NULL AS pv_description
10239
                         FROM release_content rel,
10240
                             view_settings vs,
10241
                             views vi
10242
                        WHERE rel.base_view_id = vi.view_id
10243
                          AND vs.view_id = rel.base_view_id
10244
                          AND vs.user_id = userid
10245
                          AND rtag_id = rtagid
10246
                          AND rel.base_view_id NOT IN (
10247
                               SELECT *
10248
                                 FROM THE
10249
                                       (SELECT CAST
10250
                                               (in_list_number
10251
                                                  (sviewidshowlist
10252
                                                  ) AS relmgr_number_tab_t
10253
                                               )
10254
                                         FROM DUAL
10255
                                       ))
10256
                 UNION
10257
                 /* Base Views expanded */
10258
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10259
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10260
                      pv.pkg_version, pv.dlocked, pv.pv_description
10261
                  FROM release_content rel,
10262
                      PACKAGES pkg,
10263
                      package_versions pv,
10264
                      views vi,
10265
                      view_settings vs
10266
                  WHERE pv.pkg_id = pkg.pkg_id
10267
                   AND rel.pv_id = pv.pv_id
10268
                   AND rel.base_view_id = vi.view_id
10269
                   AND vs.view_id = vi.view_id
10270
                   AND vs.user_id = userid
10271
                   AND rel.base_view_id IN (
10272
                        SELECT *
10273
                          FROM THE
10274
                                (SELECT CAST
10275
                                        (in_list_number
10276
                                               (sviewidshowlist) AS relmgr_number_tab_t
10277
                                        )
10278
                                  FROM DUAL
10279
                                ))
10280
                   AND rtag_id = rtagid
10281
                 UNION
10282
                 /* Private Views collapsed */
10283
                 SELECT vi.view_id, vi.view_name,
10284
                      TO_NUMBER (NULL) AS pkg_state,
10285
                      TO_NUMBER (NULL) AS deprecated_state,
10286
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10287
                      NULL AS pkg_version, NULL AS dlocked,
10288
                      NULL AS pv_description
10289
                  FROM view_settings vs,
10290
                      view_def vd,
10291
                      views vi,
10292
                      release_content rel,
10293
                      package_versions pv
10294
                  WHERE vs.view_id = vi.view_id
10295
                   AND rel.pv_id = pv.pv_id
10296
                   AND vd.pkg_id = pv.pkg_id
10297
                   AND vd.view_id = vi.view_id
10298
                   AND vi.base_view = 'N'
10299
                   AND rel.rtag_id = rtagid
10300
                   AND vs.user_id = userid
10301
                   AND vi.view_id NOT IN (
10302
                        SELECT *
10303
                          FROM THE
10304
                                (SELECT CAST
10305
                                        (in_list_number
10306
                                               (sviewidshowlist) AS relmgr_number_tab_t
10307
                                        )
10308
                                  FROM DUAL
10309
                                ))
10310
                 UNION
10311
                 /* Private Views expanded */
10312
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10313
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10314
                      pv.pkg_version, pv.dlocked, pv.pv_description
10315
                  FROM users usr,
10316
                      view_settings vs,
10317
                      view_def vd,
10318
                      views vi,
10319
                      release_content rel,
10320
                      PACKAGES pkg,
10321
                      package_versions pv
10322
                  WHERE vs.user_id = usr.user_id
10323
                   AND vs.view_id = vi.view_id
10324
                   AND vd.view_id = vi.view_id
10325
                   AND pv.pkg_id = pkg.pkg_id
10326
                   AND rel.pv_id = pv.pv_id
10327
                   AND rel.rtag_id = rtagid
10328
                   AND vd.pkg_id = pkg.pkg_id
10329
                   AND vi.base_view = 'N'
10330
                   AND vi.view_id IN (
10331
                        SELECT *
10332
                          FROM THE
10333
                                (SELECT CAST
10334
                                        (in_list_number
10335
                                               (sviewidshowlist) AS relmgr_number_tab_t
10336
                                        )
10337
                                  FROM DUAL
10338
                                ))
10339
                   AND usr.user_id = userid) ord
10340
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10341
     END IF;
10342
   END;
10343
 
10344
/*-------------------------------------------------------------------------------------------------------*/
10345
   PROCEDURE get_work_in_progress_items (
10346
     viewtype         IN      NUMBER,
10347
     userid           IN      NUMBER,
10348
     rtagid           IN      NUMBER,
10349
     sviewidshowlist  IN      VARCHAR2,
10350
     ntruerecordcount OUT     NUMBER,
10351
     recordset        OUT     typecur
10352
   )
10353
   IS
10354
   BEGIN
10355
     -- Get true record count because views can give false count
10356
     SELECT COUNT (wip.pv_id)
10357
      INTO ntruerecordcount
10358
      FROM work_in_progress wip
10359
      WHERE wip.rtag_id = rtagid;
10360
 
10361
     IF viewtype = 1
10362
     THEN
10363
       /*--- GUEST VIEW ---*/
10364
       OPEN recordset FOR
10365
         SELECT   *
10366
            FROM (
10367
                 /* Base Views collapsed */
10368
                 SELECT DISTINCT vi.view_id, vi.view_name,
10369
                             TO_NUMBER (NULL) AS pkg_state,
10370
                             TO_NUMBER (NULL) AS deprecated_state,
10371
                             TO_NUMBER (NULL) AS pv_id,
10372
                             NULL AS pkg_name, NULL AS pkg_version,
10373
                             NULL AS dlocked, NULL AS pv_description
10374
                         FROM work_in_progress rel, views vi
10375
                        WHERE rel.view_id = vi.view_id
10376
                          AND rtag_id = rtagid
10377
                          AND rel.view_id NOT IN (
10378
                               SELECT *
10379
                                 FROM THE
10380
                                       (SELECT CAST
10381
                                               (in_list_number
10382
                                                  (sviewidshowlist
10383
                                                  ) AS relmgr_number_tab_t
10384
                                               )
10385
                                         FROM DUAL
10386
                                       ))
10387
                 UNION
10388
                 /* Base Views expanded */
10389
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10390
 
10391
                      --rel.pkg_state,
10392
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10393
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10394
                      pv.pv_description
10395
                  FROM work_in_progress rel,
10396
                      PACKAGES pkg,
10397
                      package_versions pv,
10398
                      views vi
10399
                  WHERE pv.pkg_id = pkg.pkg_id
10400
                   AND rel.pv_id = pv.pv_id
10401
                   AND rel.view_id = vi.view_id
10402
                   AND rel.view_id IN (
10403
                        SELECT *
10404
                          FROM THE
10405
                                (SELECT CAST
10406
                                        (in_list_number
10407
                                               (sviewidshowlist) AS relmgr_number_tab_t
10408
                                        )
10409
                                  FROM DUAL
10410
                                ))
10411
                   AND rtag_id = rtagid) ord
10412
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10413
     ELSIF viewtype = 2
10414
     THEN
10415
       /*--- PERSONAL VIEW ---*/
10416
       OPEN recordset FOR
10417
         SELECT   *
10418
            FROM (
10419
                 /* Base Views collapsed */
10420
                 SELECT DISTINCT vi.view_id, vi.view_name,
10421
                             TO_NUMBER (NULL) AS pkg_state,
10422
                             TO_NUMBER (NULL) AS deprecated_state,
10423
                             TO_NUMBER (NULL) AS pv_id,
10424
                             NULL AS pkg_name, NULL AS pkg_version,
10425
                             NULL AS dlocked, NULL AS pv_description
10426
                         FROM work_in_progress rel,
10427
                             view_settings vs,
10428
                             views vi
10429
                        WHERE rel.view_id = vi.view_id
10430
                          AND vs.view_id = rel.view_id
10431
                          AND vs.user_id = userid
10432
                          AND rtag_id = rtagid
10433
                          AND rel.view_id NOT IN (
10434
                               SELECT *
10435
                                 FROM THE
10436
                                       (SELECT CAST
10437
                                               (in_list_number
10438
                                                  (sviewidshowlist
10439
                                                  ) AS relmgr_number_tab_t
10440
                                               )
10441
                                         FROM DUAL
10442
                                       ))
10443
                 UNION
10444
                 /* Base Views expanded */
10445
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10446
 
10447
                      --rel.pkg_state,
10448
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10449
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10450
                      pv.pv_description
10451
                  FROM work_in_progress rel,
10452
                      PACKAGES pkg,
10453
                      package_versions pv,
10454
                      views vi,
10455
                      view_settings vs
10456
                  WHERE pv.pkg_id = pkg.pkg_id
10457
                   AND rel.pv_id = pv.pv_id
10458
                   AND rel.view_id = vi.view_id
10459
                   AND vs.view_id = vi.view_id
10460
                   AND vs.user_id = userid
10461
                   AND rel.view_id IN (
10462
                        SELECT *
10463
                          FROM THE
10464
                                (SELECT CAST
10465
                                        (in_list_number
10466
                                               (sviewidshowlist) AS relmgr_number_tab_t
10467
                                        )
10468
                                  FROM DUAL
10469
                                ))
10470
                   AND rtag_id = rtagid
10471
                 UNION
10472
                 /* Private Views collapsed */
10473
                 SELECT vi.view_id, vi.view_name,
10474
                      TO_NUMBER (NULL) AS pkg_state,
10475
                      TO_NUMBER (NULL) AS deprecated_state,
10476
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10477
                      NULL AS pkg_version, NULL AS dlocked,
10478
                      NULL AS pv_description
10479
                  FROM view_settings vs,
10480
                      view_def vd,
10481
                      views vi,
10482
                      work_in_progress rel,
10483
                      package_versions pv
10484
                  WHERE vs.view_id = vi.view_id
10485
                   AND rel.pv_id = pv.pv_id
10486
                   AND vd.pkg_id = pv.pkg_id
10487
                   AND vd.view_id = vi.view_id
10488
                   AND vi.base_view = 'N'
10489
                   AND rel.rtag_id = rtagid
10490
                   AND vs.user_id = userid
10491
                   AND vi.view_id NOT IN (
10492
                        SELECT *
10493
                          FROM THE
10494
                                (SELECT CAST
10495
                                        (in_list_number
10496
                                               (sviewidshowlist) AS relmgr_number_tab_t
10497
                                        )
10498
                                  FROM DUAL
10499
                                ))
10500
                 UNION
10501
                 /* Private Views expanded */
10502
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10503
 
10504
                      --rel.pkg_state,
10505
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10506
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10507
                      pv.pv_description
10508
                  FROM users usr,
10509
                      view_settings vs,
10510
                      view_def vd,
10511
                      views vi,
10512
                      work_in_progress rel,
10513
                      PACKAGES pkg,
10514
                      package_versions pv
10515
                  WHERE vs.user_id = usr.user_id
10516
                   AND vs.view_id = vi.view_id
10517
                   AND vd.view_id = vi.view_id
10518
                   AND pv.pkg_id = pkg.pkg_id
10519
                   AND rel.pv_id = pv.pv_id
10520
                   AND rel.rtag_id = rtagid
10521
                   AND vd.pkg_id = pkg.pkg_id
10522
                   AND vi.base_view = 'N'
10523
                   AND vi.view_id IN (
10524
                        SELECT *
10525
                          FROM THE
10526
                                (SELECT CAST
10527
                                        (in_list_number
10528
                                               (sviewidshowlist) AS relmgr_number_tab_t
10529
                                        )
10530
                                  FROM DUAL
10531
                                ))
10532
                   AND usr.user_id = userid) ord
10533
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10534
     END IF;
10535
   END;
10536
 
10537
/*-------------------------------------------------------------------------------------------------------*/
10538
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
10539
 
10540
   PROCEDURE get_pending_items (
10541
     viewtype         IN      NUMBER,
10542
     userid           IN      NUMBER,
10543
     rtagid           IN      NUMBER,
10544
     sviewidshowlist  IN      VARCHAR2,
10545
     ntruerecordcount OUT     NUMBER,
10546
     recordset        OUT     typecur
10547
   )
10548
   IS
10549
   BEGIN
10550
     -- Get true record count because views can give false count
10551
     SELECT COUNT (pl.pv_id)
10552
      INTO ntruerecordcount
10553
      FROM planned pl
10554
      WHERE pl.rtag_id = rtagid;
10555
 
10556
     IF viewtype = 1
10557
     THEN
10558
       /*--- GUEST VIEW ---*/
10559
       OPEN recordset FOR
10560
         SELECT   *
10561
            FROM (
10562
                 /* Base Views collapsed */
10563
                 SELECT DISTINCT vi.view_id, vi.view_name,
10564
                             TO_NUMBER (NULL) AS pkg_state,
10565
                             TO_NUMBER (NULL) AS deprecated_state,
10566
                             TO_NUMBER (NULL) AS pv_id,
10567
                             NULL AS pkg_name, NULL AS pkg_version,
10568
                             NULL AS dlocked, NULL AS pv_description,
10569
                             rel.operation
10570
                         FROM planned rel, views vi
10571
                        WHERE rel.view_id = vi.view_id
10572
                          AND rtag_id = rtagid
10573
                          AND rel.view_id NOT IN (
10574
                               SELECT *
10575
                                 FROM THE
10576
                                       (SELECT CAST
10577
                                               (in_list_number
10578
                                                  (sviewidshowlist
10579
                                                  ) AS relmgr_number_tab_t
10580
                                               )
10581
                                         FROM DUAL
10582
                                       ))
10583
                 UNION
10584
                 /* Base Views expanded */
10585
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10586
 
10587
                      --rel.pkg_state,
10588
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10589
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10590
                      pv.pv_description,
10591
                      rel.operation
10592
                  FROM planned rel,
10593
                      PACKAGES pkg,
10594
                      package_versions pv,
10595
                      views vi
10596
                  WHERE pv.pkg_id = pkg.pkg_id
10597
                   AND rel.pv_id = pv.pv_id
10598
                   AND rel.view_id = vi.view_id
10599
                   AND rel.view_id IN (
10600
                        SELECT *
10601
                          FROM THE
10602
                                (SELECT CAST
10603
                                        (in_list_number
10604
                                               (sviewidshowlist) AS relmgr_number_tab_t
10605
                                        )
10606
                                  FROM DUAL
10607
                                ))
10608
                   AND rtag_id = rtagid) ord
10609
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10610
     ELSIF viewtype = 2
10611
     THEN
10612
       /*--- PERSONAL VIEW ---*/
10613
       OPEN recordset FOR
10614
         SELECT   *
10615
            FROM (
10616
                 /* Base Views collapsed */
10617
                 SELECT DISTINCT vi.view_id, vi.view_name,
10618
                             TO_NUMBER (NULL) AS pkg_state,
10619
                             TO_NUMBER (NULL) AS deprecated_state,
10620
                             TO_NUMBER (NULL) AS pv_id,
10621
                             NULL AS pkg_name, NULL AS pkg_version,
10622
                             NULL AS dlocked, NULL AS pv_description,
10623
                             rel.operation
10624
                         FROM planned rel, view_settings vs, views vi
10625
                        WHERE rel.view_id = vi.view_id
10626
                          AND vs.view_id = rel.view_id
10627
                          AND vs.user_id = userid
10628
                          AND rtag_id = rtagid
10629
                          AND rel.view_id NOT IN (
10630
                               SELECT *
10631
                                 FROM THE
10632
                                       (SELECT CAST
10633
                                               (in_list_number
10634
                                                  (sviewidshowlist
10635
                                                  ) AS relmgr_number_tab_t
10636
                                               )
10637
                                         FROM DUAL
10638
                                       ))
10639
                 UNION
10640
                 /* Base Views expanded */
10641
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10642
 
10643
                      --rel.pkg_state,
10644
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10645
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10646
                      pv.pv_description,
10647
                      rel.operation
10648
                  FROM planned rel,
10649
                      PACKAGES pkg,
10650
                      package_versions pv,
10651
                      views vi,
10652
                      view_settings vs
10653
                  WHERE pv.pkg_id = pkg.pkg_id
10654
                   AND rel.pv_id = pv.pv_id
10655
                   AND rel.view_id = vi.view_id
10656
                   AND vs.view_id = vi.view_id
10657
                   AND vs.user_id = userid
10658
                   AND rel.view_id IN (
10659
                        SELECT *
10660
                          FROM THE
10661
                                (SELECT CAST
10662
                                        (in_list_number
10663
                                               (sviewidshowlist) AS relmgr_number_tab_t
10664
                                        )
10665
                                  FROM DUAL
10666
                                ))
10667
                   AND rtag_id = rtagid
10668
                 UNION
10669
                 /* Private Views collapsed */
10670
                 SELECT vi.view_id, vi.view_name,
10671
                      TO_NUMBER (NULL) AS pkg_state,
10672
                      TO_NUMBER (NULL) AS deprecated_state,
10673
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10674
                      NULL AS pkg_version, NULL AS dlocked,
10675
                      NULL AS pv_description,
10676
                      rel.operation
10677
                  FROM view_settings vs,
10678
                      view_def vd,
10679
                      views vi,
10680
                      planned rel,
10681
                      package_versions pv
10682
                  WHERE vs.view_id = vi.view_id
10683
                   AND rel.pv_id = pv.pv_id
10684
                   AND vd.pkg_id = pv.pkg_id
10685
                   AND vd.view_id = vi.view_id
10686
                   AND vi.base_view = 'N'
10687
                   AND rel.rtag_id = rtagid
10688
                   AND vs.user_id = userid
10689
                   AND vi.view_id NOT IN (
10690
                        SELECT *
10691
                          FROM THE
10692
                                (SELECT CAST
10693
                                        (in_list_number
10694
                                               (sviewidshowlist) AS relmgr_number_tab_t
10695
                                        )
10696
                                  FROM DUAL
10697
                                ))
10698
                 UNION
10699
                 /* Private Views expanded */
10700
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10701
 
10702
                      --rel.pkg_state,
10703
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10704
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10705
                      pv.pv_description,
10706
                      rel.operation
10707
                  FROM users usr,
10708
                      view_settings vs,
10709
                      view_def vd,
10710
                      views vi,
10711
                      planned rel,
10712
                      PACKAGES pkg,
10713
                      package_versions pv
10714
                  WHERE vs.user_id = usr.user_id
10715
                   AND vs.view_id = vi.view_id
10716
                   AND vd.view_id = vi.view_id
10717
                   AND pv.pkg_id = pkg.pkg_id
10718
                   AND rel.pv_id = pv.pv_id
10719
                   AND rel.rtag_id = rtagid
10720
                   AND vd.pkg_id = pkg.pkg_id
10721
                   AND vi.base_view = 'N'
10722
                   AND vi.view_id IN (
10723
                        SELECT *
10724
                          FROM THE
10725
                                (SELECT CAST
10726
                                        (in_list_number
10727
                                               (sviewidshowlist) AS relmgr_number_tab_t
10728
                                        )
10729
                                  FROM DUAL
10730
                                ))
10731
                   AND usr.user_id = userid) ord
10732
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10733
     END IF;
10734
   END;
10735
 
10736
/*-------------------------------------------------------------------------------------------------------*/
10737
   PROCEDURE get_view_content (
10738
     rtagid     IN      NUMBER,
10739
     viewid     IN      NUMBER,
10740
     recordset OUT     typecur
10741
   )
10742
   IS
10743
     isbaseview   CHAR (1);
10744
   BEGIN
10745
     -- Check if the view is BASE VIEW
10746
     SELECT vi.base_view
10747
      INTO isbaseview
10748
      FROM views vi
10749
      WHERE vi.view_id = viewid;
10750
 
10751
     IF (isbaseview = 'Y')
10752
     THEN
10753
       -- Get Base view content
10754
       OPEN recordset FOR
10755
         SELECT   DECODE (rel.pkg_state,
10756
                      NULL, 0,
10757
                      rel.pkg_state
10758
                     ) AS pkg_state,
10759
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10760
                pv.pkg_version, pv.dlocked, pv.pv_description,
10761
                pv.build_type,
10762
                rel.operation
10763
            FROM environment_view rel, PACKAGES pkg, package_versions pv
10764
            WHERE pv.pkg_id = pkg.pkg_id
10765
             AND rel.pv_id = pv.pv_id
10766
             AND rel.view_id = viewid
10767
             AND rel.rtag_id = rtagid
10768
         ORDER BY UPPER (pkg.pkg_name);
10769
     ELSE
10770
       -- Get non base view content
10771
       OPEN recordset FOR
10772
         SELECT   DECODE (rel.pkg_state,
10773
                      NULL, 0,
10774
                      rel.pkg_state
10775
                     ) AS pkg_state,
10776
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10777
                pv.pkg_version, pv.dlocked, pv.pv_description,
10778
                pv.build_type,
10779
                rel.operation
10780
            FROM environment_view rel,
10781
                PACKAGES pkg,
10782
                package_versions pv,
10783
                view_def vd
10784
            WHERE pv.pkg_id = pkg.pkg_id
10785
             AND rel.pv_id = pv.pv_id
10786
             AND rel.rtag_id = rtagid
10787
             AND vd.view_id = viewid
10788
             AND vd.pkg_id = pv.pkg_id
10789
         ORDER BY UPPER (pkg.pkg_name);
10790
     END IF;
10791
   END;
10792
 
10793
/*-------------------------------------------------------------------------------------------------------*/
10794
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
10795
     RETURN NUMBER
10796
   IS
10797
     envtab           NUMBER;
10798
     returnvalue      NUMBER;
10799
     return_not_found NUMBER := -1;
10800
   BEGIN
10801
     envtab := get_package_area (pvid, rtagid);
10802
 
10803
     IF envtab = 0
10804
     THEN
10805
       -- WORK IN PROGRESS --
10806
       returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
10807
     ELSIF envtab = 1
10808
     THEN
10809
       -- PENDING --
10810
       returnvalue := pk_planned.get_package_view (pvid, rtagid);
10811
     ELSIF envtab = 2
10812
     THEN
10813
       -- RELEASED --
10814
       returnvalue := pk_release.get_package_view (pvid, rtagid);
10815
     ELSE
10816
       -- This may be a Patch not located anywhere but unlocked
10817
       returnvalue := return_not_found;
10818
     END IF;
10819
 
10820
     RETURN returnvalue;
10821
   END;
10822
 
10823
/*-------------------------------------------------------------------------------------------------------*/
10824
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
10825
   IS
10826
     viewid        NUMBER;
10827
     envtab        NUMBER;
10828
     ispatch       CHAR (1) := NULL;
10829
     buildtype     CHAR (1) := NULL;
10830
   BEGIN
10831
     -- Check if package is patch
10832
     SELECT pv.is_patch, pv.build_type
10833
      INTO ispatch, buildtype
10834
      FROM package_versions pv
10835
      WHERE pv.pv_id = pvid;
10836
 
10837
     -- Get ViewId
10838
     viewid := get_package_view (pvid, rtagid);
10839
     -- Remove from current area
10840
     envtab := pk_environment.get_package_area (pvid, rtagid);
10841
 
10842
     -- Make sure that package was in work-in-progress or pending before makeing it release
10843
     -- Exclude patches, ripple builds
10844
     IF (envtab < 0)
10845
     THEN
10846
       -- Not found in work-in-progress or pending
10847
       IF (ispatch IS NULL) AND (buildtype = 'M')
10848
       THEN
10849
         raise_application_error (-20000,
10850
                            'This package cannot be released here.'
10851
                           );
10852
       END IF;
10853
     END IF;
10854
 
10855
     -- Log
10856
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10857
 
10858
     IF envtab = 0
10859
     THEN
10860
       -- WORK IN PROGRESS --
10861
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
10862
     ELSIF envtab = 1
10863
     THEN
10864
       -- PENDING --
10865
       pk_planned.remove_package (pvid, rtagid, userid);
10866
     END IF;
10867
 
10868
     -- Change package state
10869
     pk_package.change_state (pvid, 'Y', userid);
10870
 
10871
     -- Make sure it is valid BASE VIEW
10872
     IF viewid < 1
10873
     THEN
10874
       viewid := 7;                     -- This is default base view
10875
     END IF;
10876
 
10877
     IF (ispatch IS NULL)
10878
     THEN
10879
       -- Add package to new area
10880
       pk_release.add_package (pvid, viewid, rtagid, userid);
10881
     END IF;
10882
 
10883
     -- Now do post Release Actions
10884
     pk_release.run_post_actions (pvid, rtagid);
10885
 
10886
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10887
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10888
     clean_do_not_ripple(rtagid);
10889
     clean_advisory_ripple(rtagid);
10890
 
10891
     -- Log
10892
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
10893
   END;
10894
 
10895
/*-------------------------------------------------------------------------------------------------------*/
10896
   PROCEDURE auto_make_release (
10897
     pvid          IN   NUMBER,
10898
     rtagid        IN   NUMBER,
10899
     userid        IN   NUMBER,
10900
     vext          IN   package_versions.v_ext%TYPE,
10901
     ssv_ext       IN   package_versions.v_ext%TYPE,
10902
     clonefrompvid IN   NUMBER
10903
   )
10904
   IS
10905
     viewid        NUMBER;
10906
     envtab        NUMBER;
10907
     ispatch       CHAR (1) := NULL;
10908
     buildtype      CHAR (1) := NULL;
10909
   BEGIN
10910
     -- Check if package is patch
10911
     SELECT pv.is_patch, pv.build_type
10912
      INTO ispatch, buildtype
10913
      FROM package_versions pv
10914
      WHERE pv.pv_id = pvid;
10915
 
10916
     IF vext <> ssv_ext
10917
     THEN
10918
       -- Get ViewId
10919
       viewid := get_package_view (clonefrompvid, rtagid);
10920
       -- Remove from current area
10921
       envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
10922
     ELSE
10923
       -- Get ViewId
10924
       viewid := get_package_view (pvid, rtagid);
10925
       -- Remove from current area
10926
       envtab := pk_environment.get_package_area (pvid, rtagid);
10927
     END IF;
10928
 
10929
     -- Make sure that package was in work-in-progress or pending before makeing it release
10930
     -- Exclude patches, ripple builds
10931
     IF (envtab < 0)
10932
     THEN
10933
       -- Not found in work-in-progress or pending
10934
       IF (ispatch IS NULL) AND (buildtype = 'M')
10935
       THEN
10936
         raise_application_error (-20000,
10937
                            'This package cannot be released here.'
10938
                           );
10939
       END IF;
10940
     END IF;
10941
 
10942
     -- Log
10943
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10944
 
10945
     IF vext <> ssv_ext
10946
     THEN
10947
       IF envtab = 0
10948
       THEN
10949
         -- WORK IN PROGRESS --
10950
         pk_work_in_progress.remove_package (clonefrompvid, rtagid,
10951
                                    userid);
10952
       ELSIF envtab = 1
10953
       THEN
10954
         -- PENDING --
10955
         pk_planned.remove_package (clonefrompvid, rtagid, userid);
10956
       ELSIF envtab = 2
10957
       THEN
10958
         -- RELEASED --
10959
         pk_release.remove_package (clonefrompvid, rtagid, userid);
10960
       END IF;
10961
     ELSE
10962
       IF envtab = 0
10963
       THEN
10964
         -- WORK IN PROGRESS --
10965
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
10966
       ELSIF envtab = 1
10967
       THEN
10968
         -- PENDING --
10969
         pk_planned.remove_package (pvid, rtagid, userid);
10970
       END IF;
10971
     END IF;
10972
 
10973
     -- Change package state
10974
     pk_package.change_state (pvid, 'Y', userid);
10975
 
10976
     -- Make sure it is valid BASE VIEW
10977
     IF viewid < 1
10978
     THEN
10979
       viewid := 7;                     -- This is default base view
10980
     END IF;
10981
 
10982
     IF (ispatch IS NULL)
10983
     THEN
10984
       -- Add package to new area
10985
       pk_release.add_package (pvid, viewid, rtagid, userid);
10986
     END IF;
10987
 
10988
     -- Now do post Release Actions
10989
     pk_release.run_post_actions (pvid, rtagid);
10990
     -- Now update the Dash_Board Table (DEPRECATED)
10991
     pk_rmapi.update_dash_board (rtagid);
10992
 
10993
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10994
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10995
     clean_do_not_ripple(rtagid);
10996
     clean_advisory_ripple(rtagid);
10997
 
10998
     -- Log
10999
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
11000
   END;
11001
 
11002
/*-------------------------------------------------------------------------------------------------------*/
11003
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11004
   IS
11005
     viewid   NUMBER;
11006
     envtab   NUMBER;
11007
   BEGIN
11008
     -- Get ViewId
11009
     --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
11010
     viewid := get_package_view (pvid, rtagid);
11011
     -- Remove from current area
11012
     envtab := pk_environment.get_package_area (pvid, rtagid);
11013
     -- Log
11014
     log_action (pvid,
11015
              'action',
11016
              userid,
11017
              'Start of Make Package UnRelease...'
11018
             );
11019
 
11020
     IF envtab = 2
11021
     THEN
11022
       -- RELEASE AREA --
11023
       pk_release.remove_package (pvid, rtagid, userid);
11024
     ELSIF envtab = 1
11025
     THEN
11026
       -- PENDING --
11027
       pk_planned.remove_package (pvid, rtagid, userid);
11028
     END IF;
11029
 
11030
     -- Change package state
11031
     pk_package.change_state (pvid, 'N', userid);
11032
 
11033
     -- Make sure it is valid BASE VIEW
11034
     IF viewid < 1
11035
     THEN
11036
       viewid := 7;                     -- This is default base view
11037
     END IF;
11038
 
11039
     -- Add package to new area
11040
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11041
     -- Now do post Release Actions
11042
     pk_release.run_post_actions (pvid, rtagid);
11043
     -- Log
11044
     log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
11045
   END;
11046
 
11047
/*-------------------------------------------------------------------------------------------------------*/
11048
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11049
   IS
11050
     viewid     NUMBER;
11051
     ispatch    CHAR (1) := NULL;
11052
     buildtype  CHAR (1) := NULL;
11053
   BEGIN
11054
     -- Check if package is patch
11055
     SELECT pv.is_patch, pv.build_type
11056
      INTO ispatch, buildtype
11057
      FROM package_versions pv
11058
      WHERE pv.pv_id = pvid;
11059
 
11060
     -- Get ViewId
11061
     viewid := get_package_view (pvid, rtagid);
11062
     --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
11063
 
11064
     -- Log
11065
     log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
11066
 
11067
     IF (ispatch IS NULL)
11068
     THEN
11069
       -- Remove from current area
11070
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
11071
       -- Change package state
11072
       pk_package.change_state (pvid, 'P', userid);
11073
       -- Add package to new area
11074
       pk_planned.add_package (pvid, viewid, rtagid, userid);
11075
     END IF;
11076
 
11077
     -- Log
11078
     log_action (pvid, 'action', userid, 'End of Make Package Pending...');
11079
   END;
11080
 
11081
/*-------------------------------------------------------------------------------------------------------*/
11082
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11083
   IS
11084
   BEGIN
11085
     -- Log
11086
     log_action (pvid,
11087
                 'action',
11088
                 userid,
11089
                 'Start of Package Pending Approval...'
11090
                 );
11091
     -- Change package state
11092
     pk_package.change_state (pvid, 'A', userid);
11093
     -- Log
11094
     log_action (pvid, 'action', userid,
11095
                 'End of Package Pending Approval...');
11096
   END;
11097
 
11098
/*-------------------------------------------------------------------------------------------------------*/
11099
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11100
   IS
11101
     viewid   NUMBER;
11102
     operation CHAR;
11103
   BEGIN
11104
     -- Get ViewId
11105
     viewid := get_package_view (pvid, rtagid);
11106
     -- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
11107
 
11108
     -- DEVI-45275
11109
     -- If the package version is an official version that is to be rejected from a merge operation
11110
     -- then find out in order to prevent it being added back to work-in-progress table . This will
11111
     -- be denoted by the operation field in the planned table being A or S
11112
     operation := ' ';
11113
     SELECT
11114
     (CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operation
11115
     FROM planned pl
11116
     WHERE pl.PV_ID = pvid
11117
     AND pl.RTAG_ID = rtagid;
11118
 
11119
     -- Log
11120
     log_action (pvid, 'action', userid, 'Start of Reject Package...');
11121
     -- Remove from current area
11122
     pk_planned.remove_package (pvid, rtagid, userid);
11123
 
11124
     -- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .
11125
     IF operation <> 'A' AND operation <> 'S'
11126
     THEN
11127
     -- Change package state
11128
     pk_package.change_state (pvid, 'R', userid);
11129
     -- Add package to new area
11130
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11131
     ELSE
11132
      log_action (pvid, 'action', userid, 'Rejected Package Merge');
11133
     END IF;
11134
     -- Log
11135
     log_action (pvid, 'action', userid, 'End of Reject Package...');
11136
   END;
11137
 
11138
/*-------------------------------------------------------------------------------------------------------*/
11139
   PROCEDURE change_package_view (
11140
     pvid       IN   NUMBER,
11141
     rtagid     IN   NUMBER,
11142
     newviewid  IN   NUMBER
11143
   )
11144
   IS
11145
     envtab   NUMBER;
11146
   BEGIN
11147
     envtab := pk_environment.get_package_area (pvid, rtagid);
11148
 
11149
     IF envtab = 0
11150
     THEN
11151
       -- WORK IN PROGRESS --
11152
       pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
11153
     ELSIF envtab = 1
11154
     THEN
11155
       -- PENDING --
11156
       pk_planned.change_package_view (pvid, rtagid, newviewid);
11157
     ELSIF envtab = 2
11158
     THEN
11159
       -- RELEASED --
11160
       pk_release.change_package_view (pvid, rtagid, newviewid);
11161
     END IF;
11162
   END;
11163
 
11164
/*-------------------------------------------------------------------------------------------------------*/
11165
   PROCEDURE find_package (
11166
     skeyword     IN      VARCHAR2,
11167
     nrtagid      IN      NUMBER,
11168
     nsearcharea  IN      NUMBER,
11169
     recordset    OUT     typecur
11170
   )
11171
   IS
11172
   BEGIN
11173
     IF nsearcharea = 0
11174
     THEN
11175
       /* Search Work In Progress */
11176
       OPEN recordset FOR
11177
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11178
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11179
                pv.modified_stamp, usr.full_name, usr.user_email
11180
           FROM views vi,
11181
                work_in_progress rc,
11182
                PACKAGES pkg,
11183
                package_versions pv,
11184
                users usr
11185
          WHERE rc.view_id = vi.view_id
11186
            AND rc.pv_id = pv.pv_id
11187
            AND pkg.pkg_id = pv.pkg_id
11188
            AND pv.modifier_id = usr.user_id
11189
            AND rc.rtag_id = nrtagid
11190
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11191
       ORDER BY UPPER (pkg.pkg_name);
11192
     ELSIF nsearcharea = 1
11193
     THEN
11194
       /* Search Pending */
11195
       OPEN recordset FOR
11196
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11197
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11198
                pv.modified_stamp, usr.full_name, usr.user_email
11199
           FROM views vi,
11200
                planned rc,
11201
                PACKAGES pkg,
11202
                package_versions pv,
11203
                users usr
11204
          WHERE rc.view_id = vi.view_id
11205
            AND rc.pv_id = pv.pv_id
11206
            AND pkg.pkg_id = pv.pkg_id
11207
            AND pv.modifier_id = usr.user_id
11208
            AND rc.rtag_id = nrtagid
11209
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11210
       ORDER BY UPPER (pkg.pkg_name);
11211
     ELSIF nsearcharea = 2
11212
     THEN
11213
       /* Search Released */
11214
       OPEN recordset FOR
11215
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11216
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11217
                pv.modified_stamp, usr.full_name, usr.user_email
11218
           FROM views vi,
11219
                release_content rc,
11220
                PACKAGES pkg,
11221
                package_versions pv,
11222
                users usr
11223
          WHERE rc.base_view_id = vi.view_id
11224
            AND rc.pv_id = pv.pv_id
11225
            AND pkg.pkg_id = pv.pkg_id
11226
            AND pv.modifier_id = usr.user_id
11227
            AND rc.rtag_id = nrtagid
11228
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11229
         ORDER BY UPPER (pkg.pkg_name);
11230
     ELSIF nsearcharea = 3
11231
     THEN
11232
       /* Search ALL */
11233
       OPEN recordset FOR
11234
         SELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
11235
                pv.pv_id, pv.pkg_version, pv.comments,
11236
                pv.modified_stamp, usr.full_name, usr.user_email
11237
           FROM views vi,
11238
                environment_view rc,
11239
                PACKAGES pkg,
11240
                package_versions pv,
11241
                users usr
11242
          WHERE rc.view_id = vi.view_id
11243
            AND rc.pv_id = pv.pv_id
11244
            AND pkg.pkg_id = pv.pkg_id
11245
            AND pv.modifier_id = usr.user_id
11246
            AND rc.rtag_id = nrtagid
11247
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11248
         ORDER BY UPPER (pkg.pkg_name);
11249
     END IF;
11250
   END;
11251
 
11252
/*-------------------------------------------------------------------------------------------------------*/
11253
   PROCEDURE find_file (
11254
     skeyword     IN      VARCHAR2,
11255
     nrtagid      IN      NUMBER,
11256
     nsearcharea  IN      NUMBER,
11257
     npagesize    IN      NUMBER,
11258
     recordset    OUT     typecur
11259
   )
11260
   IS
11261
   BEGIN
11262
     IF nsearcharea = 0
11263
     THEN
11264
       /* Search Work In Progress */
11265
       OPEN recordset FOR
11266
         SELECT   qry.*
11267
            FROM (
11268
                 /* File search on Packages */
11269
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11270
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11271
                   FROM work_in_progress rc,
11272
                        PACKAGES pkg,
11273
                        package_versions pv,
11274
                        release_components art
11275
                  WHERE rc.pv_id = art.pv_id
11276
                    AND pv.pkg_id = pkg.pkg_id
11277
                    AND rc.pv_id = pv.pv_id
11278
                    AND rc.rtag_id = nrtagid
11279
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11280
                 UNION ALL
11281
                 /* File search on Products */
11282
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11283
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11284
                   FROM work_in_progress rc,
11285
                        PACKAGES pkg,
11286
                        package_versions pv,
11287
                        product_components art
11288
                  WHERE rc.pv_id = art.pv_id
11289
                    AND pv.pkg_id = pkg.pkg_id
11290
                    AND rc.pv_id = pv.pv_id
11291
                    AND rc.rtag_id = nrtagid
11292
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11293
            WHERE ROWNUM <= npagesize
11294
         ORDER BY UPPER (qry.pkg_name);
11295
     ELSIF nsearcharea = 1
11296
     THEN
11297
       /* Search Pending */
11298
       OPEN recordset FOR
11299
         SELECT   qry.*
11300
            FROM (
11301
                 /* File search on Packages */
11302
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11303
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11304
                   FROM planned rc,
11305
                        PACKAGES pkg,
11306
                        package_versions pv,
11307
                        release_components art
11308
                  WHERE rc.pv_id = art.pv_id
11309
                    AND pv.pkg_id = pkg.pkg_id
11310
                    AND rc.pv_id = pv.pv_id
11311
                    AND rc.rtag_id = nrtagid
11312
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11313
                 UNION ALL
11314
                 /* File search on Products */
11315
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11316
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11317
                   FROM planned rc,
11318
                        PACKAGES pkg,
11319
                        package_versions pv,
11320
                        product_components art
11321
                  WHERE rc.pv_id = art.pv_id
11322
                    AND pv.pkg_id = pkg.pkg_id
11323
                    AND rc.pv_id = pv.pv_id
11324
                    AND rc.rtag_id = nrtagid
11325
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11326
            WHERE ROWNUM <= npagesize
11327
         ORDER BY UPPER (qry.pkg_name);
11328
     ELSIF nsearcharea = 2
11329
     THEN
11330
       /* Search Released */
11331
       OPEN recordset FOR
11332
         SELECT   qry.*
11333
            FROM (
11334
                 /* File search on Packages */
11335
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11336
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11337
                        NULL AS patch_id
11338
                   FROM release_content rc,
11339
                        PACKAGES pkg,
11340
                        package_versions pv,
11341
                        release_components art
11342
                  WHERE rc.pv_id = art.pv_id
11343
                    AND pv.pkg_id = pkg.pkg_id
11344
                    AND rc.pv_id = pv.pv_id
11345
                    AND rc.rtag_id = nrtagid
11346
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11347
                 UNION ALL
11348
                 /* File search on Products */
11349
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11350
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11351
                        NULL AS patch_id
11352
                   FROM release_content rc,
11353
                        PACKAGES pkg,
11354
                        package_versions pv,
11355
                        product_components art
11356
                  WHERE rc.pv_id = art.pv_id
11357
                    AND pv.pkg_id = pkg.pkg_id
11358
                    AND rc.pv_id = pv.pv_id
11359
                    AND rc.rtag_id = nrtagid
11360
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11361
                 UNION ALL
11362
                 /* File search on Patches */
11363
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11364
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11365
                        DECODE (art.file_path,
11366
                                NULL, pp.patch_id,
11367
                                NULL
11368
                                ) AS patch_id
11369
                   FROM release_content rc,
11370
                        PACKAGES pkg,
11371
                        package_versions pv,
11372
                        release_components art,
11373
                        package_patches pp
11374
                  WHERE pv.pv_id = pp.pv_id
11375
                    AND pv.pkg_id = pkg.pkg_id
11376
                    AND rc.rtag_id = nrtagid
11377
                    AND art.pv_id = pp.patch_id
11378
                    AND rc.pv_id = pp.pv_id
11379
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11380
            WHERE ROWNUM <= npagesize
11381
         ORDER BY UPPER (qry.pkg_name);
11382
     ELSIF nsearcharea = 3
11383
     THEN
11384
       /* Search ALL */
11385
       OPEN recordset FOR
11386
         SELECT   qry.*
11387
            FROM (
11388
                 /* File search on Packages */
11389
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11390
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11391
                        NULL AS patch_id
11392
                   FROM environment_view rc,
11393
                        PACKAGES pkg,
11394
                        package_versions pv,
11395
                        release_components art
11396
                  WHERE rc.pv_id = art.pv_id
11397
                    AND pv.pkg_id = pkg.pkg_id
11398
                    AND rc.pv_id = pv.pv_id
11399
                    AND rc.rtag_id = nrtagid
11400
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11401
                 UNION ALL
11402
                 /* File search on Products */
11403
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11404
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11405
                        NULL AS patch_id
11406
                   FROM environment_view rc,
11407
                        PACKAGES pkg,
11408
                        package_versions pv,
11409
                        product_components art
11410
                  WHERE rc.pv_id = art.pv_id
11411
                    AND pv.pkg_id = pkg.pkg_id
11412
                    AND rc.pv_id = pv.pv_id
11413
                    AND rc.rtag_id = nrtagid
11414
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11415
                 UNION ALL
11416
                 /* File search on Patches */
11417
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11418
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11419
                        DECODE (art.file_path,
11420
                                NULL, pp.patch_id,
11421
                                NULL
11422
                               ) AS patch_id
11423
                   FROM release_content rc,
11424
                        PACKAGES pkg,
11425
                        package_versions pv,
11426
                        release_components art,
11427
                        package_patches pp
11428
                  WHERE pv.pv_id = pp.pv_id
11429
                    AND pv.pkg_id = pkg.pkg_id
11430
                    AND rc.rtag_id = nrtagid
11431
                    AND art.pv_id = pp.patch_id
11432
                    AND rc.pv_id = pp.pv_id
11433
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11434
            WHERE ROWNUM <= npagesize
11435
         ORDER BY UPPER (qry.pkg_name);
11436
     END IF;
11437
   END;
11438
 
11439
/*-------------------------------------------------------------------------------------------------------*/
11440
   PROCEDURE get_prodrelease_items (
11441
     rtagid           IN      NUMBER,
11442
     ntruerecordcount OUT     NUMBER,
11443
     recordset        OUT     typecur
11444
   )
11445
   IS
11446
   BEGIN
11447
     -- Get true record count n the number of integration products
11448
     SELECT COUNT (rc.pv_id)
11449
      INTO ntruerecordcount
11450
      FROM release_content rc
11451
      WHERE rc.rtag_id = rtagid;
11452
 
11453
     OPEN recordset FOR
11454
       SELECT vi.view_id, vi.view_name, rel.pkg_state,   --rel.pkg_state,
11455
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11456
              pv.pkg_version, pv.dlocked, pv.pv_description
11457
         FROM release_content rel,
11458
              PACKAGES pkg,
11459
              package_versions pv,
11460
              views vi
11461
        WHERE pv.pkg_id = pkg.pkg_id
11462
          AND rel.pv_id = pv.pv_id
11463
          AND rel.base_view_id = vi.view_id
11464
          AND pv.is_deployable = 'Y'
11465
          AND rtag_id = rtagid
11466
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11467
                                 FROM deployment_manager.os_contents)
11468
          AND rel.product_state IS NULL
11469
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11470
   END;
11471
 
11472
/*-------------------------------------------------------------------------------------------------------*/
11473
   PROCEDURE get_integration_items (
11474
     rtagid           IN      NUMBER,
11475
     ntruerecordcount OUT     NUMBER,
11476
     recordset        OUT     typecur
11477
   )
11478
   IS
11479
   BEGIN
11480
     -- Get true record count n the number of integration products
11481
     SELECT COUNT (rc.pv_id)
11482
      INTO ntruerecordcount
11483
      FROM release_content rc
11484
      WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
11485
 
11486
     OPEN recordset FOR
11487
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11488
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11489
              pv.pkg_version, pv.dlocked, pv.pv_description
11490
         FROM release_content rel,
11491
              PACKAGES pkg,
11492
              package_versions pv,
11493
              views vi
11494
        WHERE pv.pkg_id = pkg.pkg_id
11495
          AND rel.pv_id = pv.pv_id
11496
          AND rel.base_view_id = vi.view_id
11497
          AND pv.is_deployable = 'Y'
11498
          AND rtag_id = rtagid
11499
          AND rel.product_state IN (1, 5)
11500
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11501
   END;
11502
 
11503
/*-------------------------------------------------------------------------------------------------------*/
11504
   PROCEDURE get_test_items (
11505
     rtagid           IN      NUMBER,
11506
     ntruerecordcount OUT     NUMBER,
11507
     recordset        OUT     typecur
11508
   )
11509
   IS
11510
   BEGIN
11511
     -- Get true record count n the number of test products
11512
     SELECT COUNT (rc.pv_id)
11513
      INTO ntruerecordcount
11514
      FROM release_content rc
11515
      WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
11516
 
11517
     OPEN recordset FOR
11518
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11519
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11520
              pv.pkg_version, pv.dlocked, pv.pv_description
11521
         FROM release_content rel,
11522
              PACKAGES pkg,
11523
              package_versions pv,
11524
              views vi
11525
        WHERE pv.pkg_id = pkg.pkg_id
11526
          AND rel.pv_id = pv.pv_id
11527
          AND rel.base_view_id = vi.view_id
11528
          AND pv.is_deployable = 'Y'
11529
          AND rtag_id = rtagid
11530
          AND rel.product_state = 2
11531
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11532
   END;
11533
 
11534
/*-------------------------------------------------------------------------------------------------------*/
11535
   PROCEDURE get_deploy_items (
11536
     rtagid           IN      NUMBER,
11537
     ntruerecordcount OUT     NUMBER,
11538
     recordset        OUT     typecur
11539
   )
11540
   IS
11541
   BEGIN
11542
     -- Get true record count n the number of deploy products
11543
     SELECT COUNT (rc.pv_id)
11544
      INTO ntruerecordcount
11545
      FROM release_content rc
11546
      WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
11547
 
11548
     OPEN recordset FOR
11549
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11550
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11551
              pv.pkg_version, pv.dlocked, pv.pv_description
11552
         FROM release_content rel,
11553
              PACKAGES pkg,
11554
              package_versions pv,
11555
              views vi
11556
        WHERE pv.pkg_id = pkg.pkg_id
11557
          AND rel.pv_id = pv.pv_id
11558
          AND rel.base_view_id = vi.view_id
11559
          AND pv.is_deployable = 'Y'
11560
          AND rtag_id = rtagid
11561
          AND rel.product_state IN (3, 5)
11562
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11563
                                 FROM deployment_manager.os_contents)
11564
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11565
   END;
11566
 
11567
/*-------------------------------------------------------------------------------------------------------*/
11568
   PROCEDURE get_reject_items (
11569
     rtagid           IN      NUMBER,
11570
     ntruerecordcount OUT     NUMBER,
11571
     recordset        OUT     typecur
11572
   )
11573
   IS
11574
   BEGIN
11575
     -- Get true record count n the number of reject products
11576
     SELECT COUNT (rc.pv_id)
11577
       INTO ntruerecordcount
11578
       FROM release_content rc
11579
      WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
11580
 
11581
     OPEN recordset FOR
11582
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11583
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11584
              pv.pkg_version, pv.dlocked, pv.pv_description
11585
         FROM release_content rel,
11586
              PACKAGES pkg,
11587
              package_versions pv,
11588
              views vi
11589
        WHERE pv.pkg_id = pkg.pkg_id
11590
          AND rel.pv_id = pv.pv_id
11591
          AND rel.base_view_id = vi.view_id
11592
          AND pv.is_deployable = 'Y'
11593
          AND rtag_id = rtagid
11594
          AND rel.product_state = 4
11595
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11596
   END;
11597
/*-------------------------------------------------------------------------------------------------------*/
11598
   -- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table
11599
   -- to the release_content table.
11600
 
11601
  PROCEDURE approve_merge (
11602
   PvId    IN NUMBER,
11603
   RtagId  IN NUMBER,
11604
   UserId  IN NUMBER
11605
  )
11606
  IS
11607
   viewid        NUMBER;
11608
   envtab        NUMBER;
11609
   oper         CHAR;
11610
  BEGIN
11611
      -- Get ViewId
11612
     viewid := get_package_view (pvid, rtagid);
11613
 
11614
     -- Get the view tab
11615
     envtab := pk_environment.get_package_area (pvid, rtagid);
11616
 
11617
     -- Make sure that package was in pending before merging it to released
11618
     IF (envtab <> 1)
11619
     THEN
11620
       -- Not found in pending
11621
       raise_application_error (-20000,
11622
                          'This package cannot be released here.'
11623
                         );
11624
     END IF;
11625
 
11626
     -- Log
11627
     log_action (pvid, 'action', userid, 'Start of Package Merge...');
11628
 
11629
     -- Get the planned operation type A=Add, S=Subtract
11630
     SELECT ev.operation INTO oper
11631
       FROM environment_view ev
11632
      WHERE ev.rtag_id = RtagId
11633
        AND ev.pv_id = PvId
11634
        AND (ev.operation = 'A' OR ev.operation = 'S');
11635
 
11636
     -- Remove from Pending
11637
     pk_planned.remove_package (PvId, RtagId, UserId);
11638
 
11639
     -- Either add to the release, or remove from the release as the operation commands
11640
     IF oper = 'A'
11641
     THEN
11642
       pk_release.add_package(PvId, viewId, RtagId, UserId);
11643
 
11644
     ELSIF oper = 'S'
11645
     THEN
11646
       pk_release.remove_package(PvId, RtagId, UserId);
11647
 
11648
       -- Delete old package's pegging info
11649
       DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;
11650
 
11651
       -- Delete old package's advisory ripple info
11652
       DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;
11653
     END IF;
11654
 
11655
     touch_release(RtagId);
11656
 
11657
     -- Log
11658
     log_action (pvid, 'action', userid, 'End of Package Merge...');
11659
  END;
11660
/*-------------------------------------------------------------------------------------------------------*/
11661
END pk_environment;
1374 dpurdie 11662
/
11663
--------------------------------------------------------
11664
--  DDL for Package Body PK_WORK_IN_PROGRESS
11665
--------------------------------------------------------
1373 dpurdie 11666
 
11667
  CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS
11668
 
11669
/*
11670
------------------------------
11671
||  Last Modified:  S.Vukovic
11672
||  Modified Date:  2/May/2005
11673
||  Body Version:   1.0
11674
------------------------------
11675
*/
11676
 
11677
 
11678
/*-------------------------------------------------------------------------------------------------------*/
11679
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11680
 
11681
	oldPvId NUMBER;
11682
	ReleaseLocation VARCHAR2(4000);
11683
	sLocation VARCHAR2(4000) := NULL;
11684
 
11685
 
11686
BEGIN
11687
	/*--------------- Business Rules Here -------------------*/
11688
	/*-------------------------------------------------------*/
11689
 
11690
	BEGIN
11691
		-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
11692
		SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
11693
		  FROM WORK_IN_PROGRESS wip,
11694
		  	   RELEASE_TAGS rt,
11695
			   PROJECTS proj
11696
		 WHERE wip.PV_ID = newPvId
11697
		   AND wip.RTAG_ID = rt.RTAG_ID
11698
		   AND rt.OFFICIAL != 'Y'
11699
		   AND rt.PROJ_ID = proj.PROJ_ID;
11700
 
11701
		EXCEPTION
11702
	    	WHEN NO_DATA_FOUND THEN
11703
	       		sLocation := NULL;
11704
 
11705
	END;	   	   
11706
 
11707
 
11708
 
11709
	IF (sLocation IS NULL)  THEN
11710
 
11711
		-- Add to "Work in progress"
11712
		INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
11713
		VALUES( RtagId, newPvId, ViewId );
11714
 
11715
 
11716
	    /* LOG ACTION */
11717
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11718
		  FROM PROJECTS proj,
11719
		  	   RELEASE_TAGS rt
11720
		 WHERE rt.PROJ_ID = proj.PROJ_ID
11721
		   AND rt.RTAG_ID = RtagId;
11722
 
11723
		Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11724
 
11725
	ELSE
11726
 
11727
		RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
11728
 
11729
	END IF;
11730
 
11731
END;
11732
/*-------------------------------------------------------------------------------------------------------*/
11733
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11734
 
11735
	ReleaseLocation VARCHAR2(4000);
11736
 
11737
BEGIN
11738
 
11739
	/*--------------- Business Rules Here -------------------*/
11740
	/*-------------------------------------------------------*/
11741
 
11742
 
11743
	-- Get release location for logging pusposes
11744
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11745
	  FROM PROJECTS proj,
11746
	  	   RELEASE_TAGS rt
11747
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11748
	   AND rt.RTAG_ID = RtagId;
11749
 
11750
 
11751
	-- Delete from Work In Progress
11752
	DELETE
11753
	  FROM WORK_IN_PROGRESS wip
11754
	 WHERE wip.RTAG_ID = RtagId
11755
	   AND wip.PV_ID = PvId;
11756
 
11757
	Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );
11758
 
11759
 
11760
 
11761
 
11762
END;
11763
/*-------------------------------------------------------------------------------------------------------*/
11764
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS
11765
 
11766
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
11767
	ReleaseLocation VARCHAR2(4000);
11768
	PvId NUMBER;
11769
 
11770
BEGIN
11771
 
11772
	/*--------------- Business Rules Here -------------------*/
11773
	IF (PvIdList IS NULL)
11774
	THEN
11775
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
11776
	END IF;
11777
	/*-------------------------------------------------------*/
11778
 
11779
 
11780
	nIdCollector := IN_LIST_NUMBER ( PvIdList );
11781
 
11782
 
11783
	-- Get release location for logging pusposes
11784
	SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11785
	  FROM PROJECTS proj,
11786
	  	   RELEASE_TAGS rt
11787
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11788
	   AND rt.RTAG_ID = RtagId;
11789
 
11790
 
11791
	FOR i IN 1..nIdCollector.COUNT
11792
	LOOP
11793
		PvId := nIdCollector(i);
11794
 
11795
		-- Delete from Work In Progress
11796
		DELETE
11797
		  FROM WORK_IN_PROGRESS wip
11798
		 WHERE wip.RTAG_ID = RtagId
11799
		   AND wip.PV_ID = PvId;
11800
 
11801
		Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11802
 
11803
	END LOOP;
11804
 
11805
 
11806
END;
11807
/*-------------------------------------------------------------------------------------------------------*/
11808
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
11809
 
11810
	ReturnValue NUMBER;
11811
 
11812
BEGIN
11813
	SELECT wip.VIEW_ID INTO ReturnValue
11814
	  FROM WORK_IN_PROGRESS wip
11815
	 WHERE wip.RTAG_ID = RtagId
11816
	   AND wip.PV_ID = PvId;
11817
 
11818
	RETURN ReturnValue;
11819
END;
11820
/*-------------------------------------------------------------------------------------------------------*/
11821
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
11822
 
11823
	IsBaseView CHAR(1);
11824
 
11825
BEGIN
11826
 
11827
	-- Check if the view is BASE VIEW
11828
	SELECT vi.BASE_VIEW INTO IsBaseView
11829
	  FROM VIEWS vi
11830
	 WHERE vi.VIEW_ID = ViewId;
11831
 
11832
	IF (IsBaseView = 'Y') THEN 
11833
		-- Get Base view content
11834
		OPEN RecordSet FOR
11835
		SELECT 0 AS PKG_STATE,
11836
			   NULL AS DEPRECATED_STATE,
11837
			   pv.pv_id, 
11838
			   pkg.pkg_name, 
11839
			   pv.pkg_version, 
11840
			   pv.dlocked, 
11841
			   pv.pv_description,
11842
			   pv.BUILD_TYPE
11843
		  FROM WORK_IN_PROGRESS rel,
11844
		       packages pkg,
11845
		       package_versions pv
11846
		 WHERE pv.pkg_id = pkg.pkg_id
11847
		   AND rel.pv_id = pv.pv_id
11848
		   AND rel.VIEW_ID = ViewId
11849
		   AND rel.RTAG_ID = RtagId
11850
		 ORDER BY UPPER(pkg.PKG_NAME);
11851
 
11852
 
11853
	ELSE	 
11854
 
11855
	 	-- Get non base view content
11856
		OPEN RecordSet FOR
11857
		SELECT 0 AS PKG_STATE,
11858
			   NULL AS DEPRECATED_STATE,
11859
			   pv.pv_id, 
11860
			   pkg.pkg_name, 
11861
			   pv.pkg_version, 
11862
			   pv.dlocked, 
11863
			   pv.pv_description,
11864
			   pv.BUILD_TYPE
11865
		  FROM WORK_IN_PROGRESS rel,
11866
		       packages pkg,
11867
		       package_versions pv,
11868
			   VIEW_DEF vd
11869
		 WHERE pv.pkg_id = pkg.pkg_id
11870
		   AND rel.pv_id = pv.pv_id
11871
		   AND vd.VIEW_ID = ViewId
11872
		   AND vd.PKG_ID = pv.PKG_ID
11873
		   AND rel.RTAG_ID = RtagId
11874
		 ORDER BY UPPER(pkg.PKG_NAME);
11875
 
11876
 
11877
	END IF;	 	
11878
 
11879
 
11880
END;
11881
/*-------------------------------------------------------------------------------------------------------*/
11882
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
11883
 
11884
BEGIN
11885
 
11886
	UPDATE WORK_IN_PROGRESS wip SET
11887
	wip.VIEW_ID = NewViewId
11888
	WHERE wip.PV_ID = PvId
11889
	  AND wip.RTAG_ID = RtagId;
11890
 
11891
END;
11892
/*-------------------------------------------------------------------------------------------------------*/
11893
END PK_WORK_IN_PROGRESS;
1374 dpurdie 11894
/
11895
--------------------------------------------------------
11896
--  DDL for Package Body PK_ARCHIVE
11897
--------------------------------------------------------
1373 dpurdie 11898
 
11899
  CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE" 
11900
IS
11901
/*
11902
------------------------------
11903
||  Author:  Rupesh Solanki
11904
||  Date:    26 October 2006
11905
||  Version:   1.0
11906
------------------------------
11907
*/
11908
/*---------------------------*/
11909
PROCEDURE populate_packages_table IS
11910
 
11911
BEGIN
11912
		  INSERT INTO archive_manager.PACKAGES
11913
		  (
11914
		  select * from packages where pkg_id not in 
11915
		  		  (select pkg_id from archive_manager.packages)
11916
		  );
11917
 
11918
          INSERT INTO archive_manager.PROCESSES
11919
          (
11920
          select * from processes where proc_id not in 
11921
            (select proc_id from archive_manager.processes)
11922
          );
11923
 
11924
 
11925
 
11926
END;
11927
/*-------------------------------------------------------------------------------------------------------*/
11928
   PROCEDURE populate_archive_data_table (
11929
      nrtagid   IN   release_tags.rtag_id%TYPE
11930
   )
11931
   IS
11932
/*
11933
Reason: To populate the archive_data table with information regarding the
11934
         number of package versions that exist in other releases.
11935
*/
11936
      numcount      NUMBER;
11937
      numusedby     NUMBER;
11938
      numruntime    NUMBER;
11939
 
11940
      /* Get all the package versions in the release */
11941
      CURSOR archive_cur
11942
      IS
11943
         SELECT pv_id
11944
           FROM release_content
11945
          WHERE rtag_id = nrtagid;
11946
 
11947
      archive_rec   archive_cur%ROWTYPE;
11948
   BEGIN
11949
/*--------------- Business Rules Here -------------------*/
11950
/*-------------------------------------------------------*/
11951
      OPEN archive_cur;
11952
 
11953
      FETCH archive_cur
11954
       INTO archive_rec;
11955
 
11956
      WHILE archive_cur%FOUND
11957
      LOOP
11958
        /* How many packages depend on this package version? */
11959
         SELECT COUNT (*)
11960
           INTO numusedby
11961
           FROM package_dependencies
11962
          WHERE dpv_id = archive_rec.pv_id;
11963
 
11964
        /* How many project releases use this package version?  */
11965
         SELECT COUNT (*)
11966
           INTO numcount
11967
           FROM release_content
11968
          WHERE pv_id = archive_rec.pv_id;
11969
 
11970
        /* How many packages have this package version as runtime
11971
        dependency? */
11972
         SELECT COUNT (*)
11973
           INTO numruntime
11974
           FROM runtime_dependencies
11975
          WHERE rtd_id = archive_rec.pv_id;
11976
 
11977
        /* Insert into the archive_data table if they are not runtime dependant
11978
        and package dependant and they exist in that particular release only*/
11979
         IF numusedby = 0 AND numcount = 1 AND numruntime = 0
11980
         THEN
11981
            INSERT INTO archive_data
11982
                        (rtag_id, pv_id
11983
                        )
11984
                 VALUES (nrtagid, archive_rec.pv_id
11985
                        );
11986
         END IF;
11987
 
11988
         FETCH archive_cur
11989
          INTO archive_rec;
11990
      END LOOP;
11991
   END;
11992
 
11993
/*-------------------------------------------------------------------------------------------------------*/
11994
   PROCEDURE migrate_pv_to_archive_schema (
11995
      nrtagid   IN   release_tags.rtag_id%TYPE
11996
   )
11997
   IS
11998
   BEGIN
11999
 
12000
      /* MIGRATION - PACKAGE_VERSIONS */
12001
      INSERT INTO archive_manager.package_versions
12002
         SELECT *
12003
           FROM package_versions
12004
          WHERE pv_id IN (SELECT pv_id
12005
                            FROM archive_data);
12006
 
12007
      /* MIGRATION - PACKAGE_BUILD_ENV */
12008
      INSERT INTO archive_manager.package_build_env
12009
         SELECT *
12010
           FROM package_build_env
12011
          WHERE pv_id IN (SELECT pv_id
12012
                            FROM archive_data);
12013
 
12014
      /* PURGE DATA FROM PACKAGE_BUILD_ENV */
12015
      DELETE FROM package_build_env
12016
            WHERE pv_id IN (SELECT pv_id
12017
                              FROM archive_data);
12018
 
12019
      /* MIGRATION - PACKAGE_BUILD_INFO */
12020
      INSERT INTO archive_manager.package_build_info
12021
         SELECT *
12022
           FROM package_build_info
12023
          WHERE pv_id IN (SELECT pv_id
12024
                            FROM archive_data);
12025
 
12026
      /* PURGE DATA FROM PACKAGE_BUILD_info */
12027
      DELETE FROM package_build_info
12028
            WHERE pv_id IN (SELECT pv_id
12029
                              FROM archive_data);							  
12030
 
12031
      /* MIGRATION - UNIT_TESTS  */
12032
      INSERT INTO archive_manager.unit_tests
12033
         SELECT *
12034
           FROM unit_tests
12035
          WHERE pv_id IN (SELECT pv_id
12036
                            FROM archive_data);
12037
 
12038
      /* PURGE DATA FROM UNIT_TESTS*/
12039
      DELETE FROM unit_tests
12040
            WHERE pv_id IN (SELECT pv_id
12041
                              FROM archive_data);
12042
 
12043
      /* MIGRATION - PACKAGE_PROCESSES */
12044
      INSERT INTO archive_manager.package_processes
12045
         SELECT *
12046
           FROM package_processes
12047
          WHERE pv_id IN (SELECT pv_id
12048
                            FROM archive_data);
12049
 
12050
      /* PURGE DATA FROM PACKAGE_PROCESSES*/
12051
      DELETE FROM package_processes
12052
            WHERE pv_id IN (SELECT pv_id
12053
                              FROM archive_data);
12054
 
12055
      /* MIGRATION - PACKAGE_DEPENDENCIES */
12056
      INSERT INTO archive_manager.package_dependencies
12057
         SELECT *
12058
           FROM package_dependencies
12059
          WHERE pv_id IN (SELECT pv_id
12060
                            FROM archive_data);
12061
 
12062
      /* PURGE DATA FROM PACKAGE_DEPENDENCIES*/
12063
      DELETE FROM package_dependencies
12064
            WHERE pv_id IN (SELECT pv_id
12065
                              FROM archive_data);
12066
 
12067
      /* MIGRATION - CODE_REVIEWS */
12068
      INSERT INTO archive_manager.code_reviews
12069
         SELECT *
12070
           FROM code_reviews
12071
          WHERE pv_id IN (SELECT pv_id
12072
                            FROM archive_data);
12073
 
12074
      /* PURGE DATA FROM CODE_REVIEWS*/
12075
      DELETE FROM code_reviews
12076
            WHERE pv_id IN (SELECT pv_id
12077
                              FROM archive_data);
12078
 
12079
      /* MIGRATION - RUNTIME_DEPENDENCIES*/
12080
      INSERT INTO archive_manager.runtime_dependencies
12081
         SELECT *
12082
           FROM runtime_dependencies
12083
          WHERE pv_id IN (SELECT pv_id
12084
                            FROM archive_data);
12085
 
12086
      /* PURGE DATA FROM RUNTIME_DEPENDENCIES*/
12087
      DELETE FROM runtime_dependencies
12088
            WHERE pv_id IN (SELECT pv_id
12089
                              FROM archive_data);
12090
 
12091
      /* MIGRATION - PACKAGE_DOCUMENTS */
12092
      INSERT INTO archive_manager.package_documents
12093
         SELECT *
12094
           FROM package_documents
12095
          WHERE pv_id IN (SELECT pv_id
12096
                            FROM archive_data);
12097
 
12098
      /* PURGE DATA FROM PACKAGE_DOCUMENTS*/
12099
      DELETE FROM package_documents
12100
            WHERE pv_id IN (SELECT pv_id
12101
                              FROM archive_data);
12102
 
12103
      /* MIGRATION - PACKAGE_PATCHES */
12104
      INSERT INTO archive_manager.package_patches
12105
         SELECT *
12106
           FROM package_patches
12107
          WHERE pv_id IN (SELECT pv_id
12108
                            FROM archive_data);
12109
 
12110
      /* PURGE DATA FROM PACKAGE_PATCHES*/
12111
      DELETE FROM package_patches
12112
            WHERE pv_id IN (SELECT pv_id
12113
                              FROM archive_data);
12114
 
12115
      /* MIGRATION - CQ_ISSUES */
12116
      INSERT INTO archive_manager.cq_issues
12117
         SELECT *
12118
           FROM cq_issues
12119
          WHERE pv_id IN (SELECT pv_id
12120
                            FROM archive_data);
12121
 
12122
      /* PURGE DATA FROM CQ_ISSUES*/
12123
      DELETE FROM cq_issues
12124
            WHERE pv_id IN (SELECT pv_id
12125
                              FROM archive_data);
12126
 
12127
      /* MIGRATION - ADDITIONAL_NOTES */
12128
      INSERT INTO archive_manager.additional_notes
12129
         SELECT *
12130
           FROM additional_notes
12131
          WHERE pv_id IN (SELECT pv_id
12132
                            FROM archive_data);
12133
 
12134
      /* PURGE DATA FROM ADDITIONAL_NOTES*/
12135
      DELETE FROM additional_notes
12136
            WHERE pv_id IN (SELECT pv_id
12137
                              FROM archive_data);
12138
 
12139
      /* MIGRATION - RELEASE_COMPONENTS */
12140
      INSERT INTO archive_manager.release_components
12141
         SELECT *
12142
           FROM release_components
12143
          WHERE pv_id IN (SELECT pv_id
12144
                            FROM archive_data);
12145
 
12146
      /* PURGE DATA FROM RELEASE_COMPONENTS*/
12147
      DELETE FROM release_components
12148
            WHERE pv_id IN (SELECT pv_id
12149
                              FROM archive_data);
12150
 
12151
      /* MIGRATION - IGNORE_WARNINGS */
12152
      INSERT INTO archive_manager.ignore_warnings
12153
         SELECT *
12154
           FROM ignore_warnings
12155
          WHERE pv_id IN (SELECT pv_id
12156
                            FROM archive_data);
12157
 
12158
      /* PURGE DATA FROM IGNORE_WARNINGS*/
12159
      DELETE FROM ignore_warnings
12160
            WHERE pv_id IN (SELECT pv_id
12161
                              FROM archive_data);
12162
 
12163
      /* PURGE DATA FROM WORK_IN_PROGRESS */
12164
      DELETE FROM work_in_progress
12165
            WHERE rtag_id = nrtagid;
12166
 
12167
      /* PURGE DATA FROM PLANNED */
12168
      DELETE FROM planned
12169
            WHERE rtag_id = nrtagid;
12170
 
12171
      /* MIGRATION - JIRA_ISSUES */
12172
      INSERT INTO archive_manager.jira_issues
12173
         SELECT *
12174
           FROM jira_issues
12175
          WHERE pv_id IN (SELECT pv_id
12176
                            FROM archive_data);
12177
 
12178
      /* PURGE DATA FROM JIRA_ISSUES*/
12179
      DELETE FROM jira_issues
12180
            WHERE pv_id IN (SELECT pv_id
12181
                              FROM archive_data);
12182
 
12183
      /* MIGRATION - PRODUCT_COMPONENTS */
12184
      INSERT INTO archive_manager.product_components
12185
         SELECT *
12186
           FROM product_components
12187
          WHERE pv_id IN (SELECT pv_id
12188
                            FROM archive_data);
12189
 
12190
      /* PURGE DATA FROM PRODUCT_COMPONENTS*/
12191
      DELETE FROM product_components
12192
            WHERE pv_id IN (SELECT pv_id
12193
                              FROM archive_data);
12194
 
12195
      /* MIGRATION - ACTION_LOG */
12196
      INSERT INTO archive_manager.action_log
12197
         SELECT *
12198
           FROM action_log
12199
          WHERE pv_id IN (SELECT pv_id
12200
                            FROM archive_data);
12201
 
12202
      /* PURGE DATA FROM ACTION_LOG*/
12203
      DELETE FROM action_log
12204
            WHERE pv_id IN (SELECT pv_id
12205
                              FROM archive_data);
12206
 
12207
 
12208
   END;
12209
 
12210
/*-------------------------------------------------------------------------------------------------------*/
12211
   PROCEDURE migrate_rtag_to_archive_schema (
12212
      nrtagid   IN   release_tags.rtag_id%TYPE
12213
   )
12214
   IS
12215
   BEGIN
12216
      /* MIGRATION - DO_NOT_RIPPLE */
12217
      INSERT INTO archive_manager.do_not_ripple
12218
         SELECT *
12219
           FROM do_not_ripple dnp
12220
          WHERE rtag_id = nrtagid;
12221
 
12222
      /* PURGE DATA FROM DO_NOT_RIPPLE */
12223
      DELETE FROM do_not_ripple
12224
            WHERE rtag_id = nrtagid;
12225
 
12226
      /* MIGRATION - ADVISORY_RIPPLES*/
12227
      INSERT INTO archive_manager.advisory_ripples
12228
         SELECT *
12229
           FROM advisory_ripple dnp
12230
          WHERE rtag_id = nrtagid;
12231
 
12232
      /* PURGE DATA FROM ADVISORY_RIPPLES*/
12233
      DELETE FROM advisory_ripple
12234
            WHERE rtag_id = nrtagid;			
12235
 
12236
      /* MIGRATION - RELEASE_CONTENT */
12237
      INSERT INTO archive_manager.release_content
12238
         SELECT *
12239
           FROM release_content
12240
          WHERE rtag_id = nrtagid;
12241
 
12242
      /* PURGE DATA FROM RELEASE_CONTENT*/
12243
      DELETE FROM release_content
12244
            WHERE rtag_id = nrtagid;
12245
 
12246
      /* MIGRATION - NOTIFICATION_HISTORY */
12247
      INSERT INTO archive_manager.notification_history
12248
         SELECT *
12249
           FROM notification_history
12250
          WHERE rtag_id = nrtagid;
12251
 
12252
      /* PURGE DATA FROM NOTIFICATION_HISTORY*/
12253
      DELETE FROM notification_history
12254
            WHERE rtag_id = nrtagid;
12255
 
12256
      /* MIGRATION - BUILD_ORDER   */
12257
      INSERT INTO archive_manager.build_order
12258
         SELECT *
12259
           FROM build_order
12260
          WHERE rtag_id = nrtagid;
12261
 
12262
      /* PURGE DATA FROM BUILD_ORDER*/
12263
      DELETE FROM build_order
12264
            WHERE rtag_id = nrtagid;
12265
 
12266
      /* MIGRATION - PROJECT_ACTION_LOG */
12267
      INSERT INTO archive_manager.project_action_log
12268
         SELECT *
12269
           FROM project_action_log
12270
          WHERE rtag_id = nrtagid;
12271
 
12272
      /* PURGE DATA FROM PROJECT_ACTION_LOG */
12273
      DELETE FROM project_action_log
12274
            WHERE rtag_id = nrtagid;
12275
 
12276
      /* MIGRATION - DEPRECATED_PACKAGES */
12277
      INSERT INTO archive_manager.deprecated_packages
12278
         SELECT *
12279
           FROM deprecated_packages
12280
          WHERE rtag_id = nrtagid;
12281
 
12282
      /* PURGE DATA FROM DEPRECATED_PACKAGES */
12283
      DELETE FROM deprecated_packages
12284
            WHERE rtag_id = nrtagid;
12285
 
12286
      /* MIGRATION - RELEASE_TAGS */
12287
      INSERT INTO archive_manager.release_tags
12288
         SELECT *
12289
           FROM release_tags
12290
          WHERE rtag_id = nrtagid;
12291
 
12292
 
12293
      /* PURGE DATA FROM PACKAGE_VERSIONS*/
12294
      DELETE FROM package_versions
12295
            WHERE pv_id IN (SELECT pv_id
12296
                              FROM archive_data);
12297
 
12298
 
12299
   END;
12300
 
12301
/*-------------------------------------------------------------------------------------------------------*/
12302
   PROCEDURE clean_up_archive_data_table (
12303
      nrtagid   IN   release_tags.rtag_id%TYPE
12304
   )
12305
   IS
12306
   BEGIN
12307
      /* Cleaning Up The Archive_Data Table */
12308
      DELETE FROM archive_data
12309
            WHERE rtag_id = nrtagid;
12310
   END;
12311
 
12312
/*-------------------------------------------------------------------------------------------------------*/
12313
   PROCEDURE write_action_log (
12314
      nuserid   IN   NUMBER,
12315
      nrtagid   IN   release_tags.rtag_id%TYPE
12316
   )
12317
   IS
12318
   BEGIN
12319
      /* Write Into Archive_Action_Log Table */
12320
      INSERT INTO archive_action_log
12321
                  (user_id, date_time_stamp, rtag_id,
12322
                   description
12323
                  )
12324
           VALUES (nuserid, ora_sysdatetime, nrtagid,
12325
                   'Release has been archived to the ARCHIVE_MANAGER schema'
12326
                  );
12327
   END;
12328
/*-------------------------------------------------------------------------------------------------------*/
12329
END pk_archive; 
1374 dpurdie 12330
/
12331
--------------------------------------------------------
12332
--  DDL for Package Body PK_PACKAGE_TEST
12333
--------------------------------------------------------
1373 dpurdie 12334
 
12335
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE_TEST" 
12336
IS
12337
/*
12338
------------------------------
12339
||  Last Modified:  R. Solanki
12340
||  Modified Date:  09/03/2006
12341
||  Body Version:   1.7
12342
------------------------------
12343
*/
12344
 
12345
   /*-------------------------------------------------------------------------------------------------------*/
12346
   PROCEDURE new_version (
12347
      nlastpvid                   IN       NUMBER,
12348
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
12349
      cbuildtype                  IN       CHAR,
12350
      nsettopvid                  IN       NUMBER DEFAULT NULL,
12351
      nrtagid                     IN       NUMBER,
12352
      nuserid                     IN       NUMBER,
12353
      enumissues_state_imported   IN       NUMBER,
12354
      returnpvid                  OUT      NUMBER
12355
   )
12356
   IS
12357
      origpkg_id                   package_versions.pkg_id%TYPE;
12358
      origdlocked                  package_versions.dlocked%TYPE;
12359
      ssv_mm                       package_versions.v_mm%TYPE;
12360
      ssv_nmm                      package_versions.v_nmm%TYPE;
12361
      ssv_ext                      package_versions.v_ext%TYPE;
12362
      spackageversion              VARCHAR2 (4000);
12363
      nissuestypes                 NUMBER;
12364
      nviewid                      NUMBER;
12365
      reccount                     NUMBER;
12366
      isreleased                   package_versions.dlocked%TYPE       := 'N';
12367
      slabel                       VARCHAR2 (4000)                    := NULL;
12368
 
12369
      CURSOR package_versions_cur
12370
      IS
12371
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
12372
           FROM package_versions pv
12373
          WHERE pv.pkg_version = snewpkgversion
12374
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
12375
                                         FROM package_versions origpv
12376
                                        WHERE origpv.pv_id = nlastpvid);
12377
 
12378
      package_versions_rec         package_versions_cur%ROWTYPE;
12379
 
12380
      CURSOR clone_package_versions_cur
12381
      IS
12382
         SELECT DISTINCT pkg_id, dlocked
12383
                    FROM package_versions
12384
                   WHERE pv_id = nlastpvid;
12385
 
12386
      clone_package_versions_rec   clone_package_versions_cur%ROWTYPE;
12387
   BEGIN
12388
      spackageversion := snewpkgversion;
12389
 
12390
      IF nsettopvid IS NULL
12391
      THEN
12392
         -- SetToPv_id is not supplied, hence proceed.
12393
 
12394
         /* ---------------------------------------------------- */
12395
/* Find id package_version exists                       */
12396
/* ---------------------------------------------------- */
12397
         OPEN package_versions_cur;
12398
 
12399
         FETCH package_versions_cur
12400
          INTO package_versions_rec;
12401
 
12402
         IF package_versions_cur%NOTFOUND
12403
         THEN
12404
            ---  Create brand new package ---
12405
            SELECT seq_pv_id.NEXTVAL
12406
              INTO returnpvid
12407
              FROM DUAL;
12408
 
12409
            -- Split Version to get extention + other
12410
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
12411
 
12412
            -- Get previous package to clone from
12413
            OPEN clone_package_versions_cur;
12414
 
12415
            FETCH clone_package_versions_cur
12416
             INTO clone_package_versions_rec;
12417
 
12418
            origpkg_id := clone_package_versions_rec.pkg_id;
12419
            origdlocked := clone_package_versions_rec.dlocked;
12420
 
12421
            CLOSE clone_package_versions_cur;
12422
 
12423
            -- Automated built config
12424
            IF (cbuildtype = 'A')
12425
            THEN
12426
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
12427
                                    -- Make sure that version is still unique
12428
            END IF;
12429
 
12430
            -- Clone Package Version Details --
12431
            INSERT INTO package_versions
12432
                        (pv_id, pkg_id, pkg_version, dlocked, created_stamp,
12433
                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
12434
                         v_ext, src_path, pv_description, pv_overview,
12435
                         last_pv_id, owner_id, is_deployable,
12436
                         is_build_env_required, build_type, bs_id, is_autobuildable)
12437
               SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
12438
                      spackageversion AS pkg_version, 'N' AS dlocked,
12439
                      ora_sysdate AS created_stamp, nuserid AS creator_id,
12440
                      ora_sysdatetime AS modified_stamp,
12441
                      nuserid AS modifier_id, ssv_mm AS v_mm,
12442
                      ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
12443
                      pv.pv_description, pv.pv_overview,
12444
                      nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
12445
                      pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable
12446
                 FROM package_versions pv
12447
                WHERE pv.pv_id = nlastpvid;
12448
 
12449
            -- Set Issues Type for cloning ---
12450
            IF origdlocked = 'Y'
12451
            THEN
12452
               nissuestypes := enumissues_state_imported;
12453
            ELSE
12454
               nissuestypes := NULL;
12455
            END IF;
12456
 
12457
            -- Update Label for automated built
12458
            IF (cbuildtype = 'A')
12459
            THEN
12460
               slabel := get_automated_label (returnpvid);
12461
 
12462
               UPDATE package_versions pv
12463
                  SET pv.pkg_label = slabel
12464
                WHERE pv.pv_id = returnpvid;
12465
            END IF;
12466
 
12467
            basic_clone (nlastpvid,
12468
                         returnpvid,
12469
                         nrtagid,
12470
                         nuserid,
12471
                         origpkg_id,
12472
                         nissuestypes
12473
                        );
12474
         ELSE
12475
            --- Package already exists, hence reuse ---
12476
            returnpvid := package_versions_rec.pv_id;
12477
            isreleased := package_versions_rec.dlocked;
12478
         END IF;
12479
 
12480
         CLOSE package_versions_cur;
12481
      ELSE
12482
         returnpvid := nsettopvid;
12483
      END IF;
12484
   END new_version;
12485
 
12486
/*-------------------------------------------------------------------------------------------------------*/
12487
   PROCEDURE change_state (
12488
      pvid       IN   NUMBER,
12489
      newstate   IN   package_versions.dlocked%TYPE,
12490
      userid     IN   NUMBER
12491
   )
12492
   IS
12493
   BEGIN
12494
      -- Set package in Released mode
12495
      UPDATE package_versions pv
12496
         SET pv.dlocked = newstate,
12497
             pv.modified_stamp = ora_sysdatetime,
12498
             pv.modifier_id = userid
12499
       WHERE pv.pv_id = pvid;
12500
 
12501
      -- Log action --
12502
      IF newstate = 'Y'
12503
      THEN
12504
         -- RELEASED --
12505
         log_action (pvid,
12506
                     'makeofficial',
12507
                     userid,
12508
                     'Package state change to: Released'
12509
                    );
12510
      ELSIF newstate = 'N'
12511
      THEN
12512
         -- UNLOCKED --
12513
         log_action (pvid,
12514
                     'makeunofficial',
12515
                     userid,
12516
                     'Package state change to: Ulocked'
12517
                    );
12518
      ELSIF newstate = 'P'
12519
      THEN
12520
         -- PENDING APPROVAL --
12521
         log_action (pvid,
12522
                     'add_to_planned',
12523
                     userid,
12524
                     'Package state change to: Pending Approval'
12525
                    );
12526
      ELSIF newstate = 'R'
12527
      THEN
12528
         -- REJECTED --
12529
         log_action (pvid,
12530
                     'reject_package',
12531
                     userid,
12532
                     'Package state change to: Rejected'
12533
                    );
12534
      ELSIF newstate = 'A'
12535
      THEN
12536
         -- APPROVED --
12537
         log_action (pvid,
12538
                     'approve_package',
12539
                     userid,
12540
                     'Package state change to: Approved'
12541
                    );
12542
      END IF;
12543
   END;
12544
 
12545
/*-------------------------------------------------------------------------------------------------------*/
12546
   PROCEDURE destroy_package (
12547
      pvid               IN       NUMBER,
12548
      overridewarnings   IN       CHAR DEFAULT 'N',
12549
      problemstring      OUT      VARCHAR2
12550
   )
12551
   IS
12552
      LOCKED     CHAR;
12553
      pkgid      NUMBER;
12554
      ROWCOUNT   NUMBER;
12555
   BEGIN
12556
      /*
12557
      || This will destroy all package details from database.
12558
      || It will only be used to remove unwanted work in progress packages,
12559
      || or mestaken versions
12560
      */
12561
 
12562
      /*--------------- Business Rules Here -------------------*/
12563
      problemstring := NULL;
12564
 
12565
      IF overridewarnings = 'N'
12566
      THEN
12567
         -- Package must not be official
12568
         SELECT pv.dlocked
12569
           INTO LOCKED
12570
           FROM package_versions pv
12571
          WHERE pv.pv_id = pvid;
12572
 
12573
         IF LOCKED = 'Y'
12574
         THEN
12575
            problemstring :=
12576
                  problemstring
12577
               || '- Package is locked and released.'
12578
               || UTL_TCP.crlf;
12579
         END IF;
12580
 
12581
         -- Cannot remove if used in BOMs
12582
         SELECT COUNT (osc.prod_id)
12583
           INTO ROWCOUNT
12584
           FROM deployment_manager.os_contents osc
12585
          WHERE osc.prod_id = pvid;
12586
 
12587
         IF ROWCOUNT > 0
12588
         THEN
12589
            problemstring :=
12590
                  problemstring
12591
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
12592
               || UTL_TCP.crlf;
12593
         END IF;
12594
 
12595
         -- Cannot remove if Referenced as build dependency
12596
         SELECT COUNT (dep.pv_id)
12597
           INTO ROWCOUNT
12598
           FROM package_dependencies dep
12599
          WHERE dep.dpv_id = pvid;
12600
 
12601
         IF ROWCOUNT > 0
12602
         THEN
12603
            problemstring :=
12604
                  problemstring
12605
               || '- Package is referenced by other package as build dependency.'
12606
               || UTL_TCP.crlf;
12607
         END IF;
12608
 
12609
         -- Cannot remove if Referenced as runtime dependency
12610
         SELECT COUNT (rd.pv_id)
12611
           INTO ROWCOUNT
12612
           FROM runtime_dependencies rd
12613
          WHERE rd.rtd_id = pvid;
12614
 
12615
         IF ROWCOUNT > 0
12616
         THEN
12617
            problemstring :=
12618
                  problemstring
12619
               || '- Package is referenced by other package as runtime dependency.'
12620
               || UTL_TCP.crlf;
12621
         END IF;
12622
 
12623
         -- Cannot remove if Referenced as patch
12624
         SELECT COUNT (pp.pv_id)
12625
           INTO ROWCOUNT
12626
           FROM package_patches pp
12627
          WHERE pp.patch_id = pvid;
12628
 
12629
         IF ROWCOUNT > 0
12630
         THEN
12631
            problemstring :=
12632
                  problemstring
12633
               || '- Package is used as patch by other package.'
12634
               || UTL_TCP.crlf;
12635
         END IF;
12636
      END IF;
12637
 
12638
/*-------------------------------------------------------*/
12639
      IF (problemstring IS NULL)
12640
      THEN
12641
         --- Remove From Work in Progress
12642
         DELETE FROM work_in_progress wip
12643
               WHERE wip.pv_id = pvid;
12644
 
12645
         --- Remove From Pending
12646
         DELETE FROM planned pl
12647
               WHERE pl.pv_id = pvid;
12648
 
12649
         --- Remove From Released area
12650
         DELETE FROM release_content rc
12651
               WHERE rc.pv_id = pvid;
12652
 
12653
         ---Remove From Package Processes
12654
         DELETE FROM package_processes pp
12655
               WHERE pp.pv_id = pvid;
12656
 
12657
         --- Remove Dependencies
12658
         DELETE FROM package_dependencies dep
12659
               WHERE dep.pv_id = pvid;
12660
 
12661
         DELETE FROM package_dependencies dep
12662
               WHERE dep.dpv_id = pvid;
12663
 
12664
         --- Remove Runtime dependencies
12665
         DELETE FROM runtime_dependencies rtd
12666
               WHERE rtd.pv_id = pvid;
12667
 
12668
         DELETE FROM runtime_dependencies rtd
12669
               WHERE rtd.rtd_id = pvid;
12670
 
12671
         --- Remove components
12672
         DELETE FROM product_components pc
12673
               WHERE pc.pv_id = pvid;
12674
 
12675
         DELETE FROM release_components rc
12676
               WHERE rc.pv_id = pvid;
12677
 
12678
         --- Remove From Notification History
12679
         DELETE FROM notification_history nh
12680
               WHERE nh.pv_id = pvid;
12681
 
12682
         --- Remove From Ignore Warnings
12683
         DELETE FROM ignore_warnings iw
12684
               WHERE iw.pv_id = pvid;
12685
 
12686
         --- Remove From Additional Notes
12687
         DELETE FROM additional_notes an
12688
               WHERE an.pv_id = pvid;
12689
 
12690
         --- Remove From CQ Issues
12691
         DELETE FROM cq_issues cq
12692
               WHERE cq.pv_id = pvid;
12693
 
12694
         --- Remove from Package Patches
12695
         DELETE FROM package_patches pp
12696
               WHERE pp.pv_id = pvid;
12697
 
12698
         DELETE FROM package_patches pp
12699
               WHERE pp.patch_id = pvid;
12700
 
12701
         --- Remove From Package Documents
12702
         DELETE FROM package_documents pd
12703
               WHERE pd.pv_id = pvid;
12704
 
12705
         --- Remove from Code Review
12706
         DELETE FROM code_reviews cr
12707
               WHERE cr.pv_id = pvid;
12708
 
12709
         --- Remove from Unit Tests
12710
         DELETE FROM unit_tests ut
12711
               WHERE ut.pv_id = pvid;
12712
 
12713
         --- Remove from Package BuildEnv
12714
         DELETE FROM package_build_env pbe
12715
               WHERE pbe.pv_id = pvid;
12716
 
12717
		 --- Remove from Package Build Info
12718
		 DELETE FROM package_build_info pbi
12719
		 	   WHERE pbi.pv_id = pvid;    
12720
 
12721
 
12722
         --- Remove from Build Order
12723
         DELETE FROM build_order bo
12724
               WHERE bo.pv_id = pvid;
12725
 
12726
         --- Remove from Note Manager
12727
         DELETE FROM note_manager nm
12728
               WHERE nm.nid = pvid;
12729
 
12730
         --- Remove from Action log
12731
         DELETE FROM action_log al
12732
               WHERE al.pv_id = pvid;
12733
 
12734
		 --- Remove from Do Not Ripple 
12735
		 DELETE FROM DO_NOT_RIPPLE dnr
12736
		 	   WHERE dnr.PV_ID = pvid;
12737
 
12738
		 --- Remove from Jira Issues 
12739
		 DELETE FROM JIRA_ISSUES jira
12740
		 	   WHERE jira.PV_ID = pvid;
12741
 
12742
         --- Finally Remove From Package Versions
12743
         --- Get Package name
12744
         SELECT pv.pkg_id
12745
           INTO pkgid
12746
           FROM package_versions pv
12747
          WHERE pv.pv_id = pvid;
12748
 
12749
         DELETE FROM package_versions pv
12750
               WHERE pv.pv_id = pvid;
12751
 
12752
         --- Remove package name if not used any more
12753
         SELECT COUNT (pv.pv_id)
12754
           INTO ROWCOUNT
12755
           FROM package_versions pv
12756
          WHERE pv.pkg_id = pkgid;
12757
 
12758
         IF ROWCOUNT < 1
12759
         THEN
12760
            DELETE FROM PACKAGES pkg
12761
                  WHERE pkg.pkg_id = pkgid;
12762
         END IF;
12763
      END IF;
12764
   END;
12765
 
12766
/*-------------------------------------------------------------------------------------------------------*/
12767
   PROCEDURE new_patch (
12768
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
12769
      nparentpvid        IN       NUMBER,
12770
      spatchidlist       IN       VARCHAR2,
12771
      nuserid            IN       NUMBER,
12772
      returnpatchid      OUT      NUMBER
12773
   )
12774
   IS
12775
      patchpv_id           NUMBER;
12776
      parpkg_id            NUMBER;
12777
      lastinstallorder     NUMBER;
12778
      ispatchdlocked       package_versions.dlocked%TYPE;
12779
      ssv_mm               package_versions.v_mm%TYPE;
12780
      ssv_nmm              package_versions.v_nmm%TYPE;
12781
      ssv_ext              package_versions.v_ext%TYPE;
12782
      opatchdepcollector   relmgr_number_tab_t      := relmgr_number_tab_t
12783
                                                                          ();
12784
 
12785
      CURSOR parent_cur
12786
      IS
12787
         SELECT pv.*, pkg.pkg_name
12788
           FROM package_versions pv, PACKAGES pkg
12789
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
12790
 
12791
      parent_rec           parent_cur%ROWTYPE;
12792
 
12793
      CURSOR patch_cur
12794
      IS
12795
         SELECT pv.*, pg.pkg_name
12796
           FROM package_versions pv, PACKAGES pg
12797
          WHERE pv.pkg_id = parpkg_id
12798
            AND pv.pkg_version = snewpatchversion
12799
            AND pv.pkg_id = pg.pkg_id;
12800
 
12801
      patch_rec            patch_cur%ROWTYPE;
12802
 
12803
      CURSOR releases_cur
12804
      IS
12805
         SELECT rc.pv_id
12806
           FROM release_content rc
12807
          WHERE rc.pv_id = patch_rec.pv_id;
12808
 
12809
      releases_rec         releases_cur%ROWTYPE;
12810
   BEGIN
12811
      -- Get Last Install Order
12812
      SELECT COUNT (*)
12813
        INTO lastinstallorder
12814
        FROM package_patches pp
12815
       WHERE pp.pv_id = nparentpvid;
12816
 
12817
      -- Get parent details
12818
      OPEN parent_cur;
12819
 
12820
      FETCH parent_cur
12821
       INTO parent_rec;
12822
 
12823
      parpkg_id := parent_rec.pkg_id;
12824
 
12825
      -- Find if patch exists in database
12826
      OPEN patch_cur;
12827
 
12828
      FETCH patch_cur
12829
       INTO patch_rec;
12830
 
12831
      -- Parent must be official
12832
      IF parent_rec.dlocked = 'Y'
12833
      THEN
12834
         IF patch_cur%NOTFOUND
12835
         THEN
12836
            ispatchdlocked := 'N';
12837
 
12838
            -- Create new patch version --
12839
            SELECT seq_pv_id.NEXTVAL
12840
              INTO patchpv_id
12841
              FROM DUAL;
12842
 
12843
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
12844
 
12845
            INSERT INTO package_versions
12846
                        (pv_id, pkg_id, pkg_version,
12847
                         dlocked, created_stamp, creator_id,
12848
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
12849
                         src_path,
12850
                         pv_description,
12851
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
12852
						 is_autobuildable
12853
                        )
12854
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
12855
                         ispatchdlocked, ora_sysdate, nuserid,
12856
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
12857
                         parent_rec.src_path,
12858
                            'This is a patch to '
12859
                         || parent_rec.pkg_name
12860
                         || ' '
12861
                         || parent_rec.pkg_version,
12862
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N'
12863
                        );
12864
 
12865
            INSERT INTO package_patches
12866
                        (pv_id, patch_id, install_order)
12867
               (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12868
                       lastinstallorder + 1 AS install_order
12869
                  FROM package_versions pv
12870
                 WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12871
 
12872
            /* LOG ACTION */
12873
            log_action (patchpv_id,
12874
                        'new_version',
12875
                        nuserid,
12876
                        'Patch version created: ' || snewpatchversion
12877
                       );
12878
            log_action (nparentpvid,
12879
                        'patch_add',
12880
                        nuserid,
12881
                        'New patch created and attached: ' || snewpatchversion
12882
                       );
12883
         ELSE
12884
            patchpv_id := patch_rec.pv_id;
12885
            ispatchdlocked := patch_rec.dlocked;
12886
 
12887
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
12888
            OPEN releases_cur;
12889
 
12890
            FETCH releases_cur
12891
             INTO releases_rec;
12892
 
12893
            IF releases_cur%NOTFOUND
12894
            THEN
12895
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
12896
               UPDATE package_versions
12897
                  SET is_patch = 'Y'
12898
                WHERE pv_id = patchpv_id;
12899
 
12900
               INSERT INTO package_patches
12901
                           (pv_id, patch_id, install_order)
12902
                  (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12903
                          lastinstallorder + 1 AS install_order
12904
                     FROM package_versions pv
12905
                    WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12906
            END IF;
12907
 
12908
            CLOSE releases_cur;
12909
 
12910
            /* LOG ACTION */
12911
            log_action (nparentpvid,
12912
                        'patch_add',
12913
                        nuserid,
12914
                           'Patch version was found and attached: '
12915
                        || snewpatchversion
12916
                       );
12917
         END IF;
12918
      END IF;
12919
 
12920
      /* Create Patch Dependencies */
12921
      opatchdepcollector := in_list_number (spatchidlist);
12922
 
12923
      -- Make sure patch is unofficial before altering its dependencies
12924
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
12925
      THEN
12926
         -- Delete Existing Dependencies
12927
         DELETE FROM package_dependencies dep
12928
               WHERE dep.pv_id = patchpv_id;
12929
 
12930
         -- Insert new dependencies
12931
         INSERT INTO package_dependencies
12932
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
12933
            SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
12934
                   parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
12935
                   'L' AS build_type
12936
              FROM package_versions pv
12937
             WHERE pv.pv_id IN (
12938
                      SELECT *
12939
                        FROM TABLE
12940
                                (CAST
12941
                                    (opatchdepcollector AS relmgr_number_tab_t)
12942
                                ));
12943
      END IF;
12944
 
12945
      -- Return patch_id
12946
      returnpatchid := patchpv_id;
12947
 
12948
      CLOSE parent_cur;
12949
 
12950
      CLOSE patch_cur;
12951
   EXCEPTION
12952
      WHEN DUP_VAL_ON_INDEX
12953
      THEN
12954
         raise_application_error (-20000,
12955
                                     'Patch version '
12956
                                  || snewpatchversion
12957
                                  || ' already exist.'
12958
                                 );
12959
   END;
12960
 
12961
/*-------------------------------------------------------------------------------------------------------*/
12962
   PROCEDURE obsolete_patch (
12963
      patchid            IN   NUMBER,
12964
      isobsolete         IN   CHAR,
12965
      obsoletecomments   IN   VARCHAR2,
12966
      userid             IN   NUMBER
12967
   )
12968
   IS
12969
   BEGIN
12970
      -- Update patch
12971
      UPDATE package_versions pv
12972
         SET pv.is_obsolete = isobsolete,
12973
             pv.obsolete_comments = obsoletecomments
12974
       WHERE pv.pv_id = patchid;
12975
 
12976
      /*
12977
      -- Update patch children
12978
      UPDATE PACKAGE_VERSIONS pv SET
12979
      pv.IS_OBSOLETE = IsObsolete,
12980
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12981
      WHERE pv.PV_ID IN (
12982
                     SELECT DISTINCT dep.DPV_ID
12983
                       FROM PACKAGE_DEPENDENCIES dep
12984
                      WHERE dep.PV_ID = PatchId
12985
                     );
12986
 
12987
 
12988
      -- Update patch parent
12989
      UPDATE PACKAGE_VERSIONS pv SET
12990
      pv.IS_OBSOLETE = IsObsolete,
12991
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12992
      WHERE pv.PV_ID IN (
12993
                     SELECT DISTINCT dep.PV_ID
12994
                       FROM PACKAGE_DEPENDENCIES dep
12995
                      WHERE dep.DPV_ID = PatchId
12996
                     );
12997
 
12998
         */
12999
 
13000
      /* LOG ACTION */
13001
      IF isobsolete IS NOT NULL
13002
      THEN
13003
         log_action (patchid,
13004
                     'patch_obsolete',
13005
                     userid,
13006
                     'Obsolete patch. ' || obsoletecomments
13007
                    );
13008
      ELSE
13009
         log_action (patchid,
13010
                     'patch_obsolete',
13011
                     userid,
13012
                     'Undo patch obsolete.'
13013
                    );
13014
      END IF;
13015
   END;
13016
 
13017
/*-------------------------------------------------------------------------------------------------------*/
13018
   PROCEDURE obsolete_patches (
13019
      spatchidlist       IN   VARCHAR2,
13020
      isobsolete         IN   CHAR,
13021
      obsoletecomments   IN   VARCHAR2,
13022
      userid             IN   NUMBER
13023
   )
13024
   IS
13025
   BEGIN
13026
      /*--------------- Business Rules Here -------------------*/
13027
      IF spatchidlist IS NULL
13028
      THEN
13029
         raise_application_error (-20000,
13030
                                  'Please select one or more Patches.'
13031
                                 );
13032
      END IF;
13033
 
13034
/*-------------------------------------------------------*/
13035
 
13036
      -- Update patch
13037
      UPDATE package_versions pv
13038
         SET pv.is_obsolete = isobsolete,
13039
             pv.obsolete_comments = obsoletecomments
13040
       WHERE pv.pv_id IN (
13041
                SELECT *
13042
                  FROM THE
13043
                          (SELECT CAST
13044
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
13045
                                     )
13046
                             FROM DUAL
13047
                          ));
13048
   /*
13049
   -- Update patch children
13050
   UPDATE PACKAGE_VERSIONS pv SET
13051
   pv.IS_OBSOLETE = IsObsolete,
13052
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13053
   WHERE pv.PV_ID IN (
13054
                  SELECT DISTINCT dep.DPV_ID
13055
                    FROM PACKAGE_DEPENDENCIES dep
13056
                   WHERE dep.PV_ID = PatchId
13057
                  );
13058
 
13059
 
13060
   -- Update patch parent
13061
   UPDATE PACKAGE_VERSIONS pv SET
13062
   pv.IS_OBSOLETE = IsObsolete,
13063
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13064
   WHERE pv.PV_ID IN (
13065
                  SELECT DISTINCT dep.PV_ID
13066
                    FROM PACKAGE_DEPENDENCIES dep
13067
                   WHERE dep.DPV_ID = PatchId
13068
                  );
13069
 
13070
      */
13071
 
13072
   /* LOG ACTION
13073
   IF IsObsolete IS NOT NULL THEN
13074
         Log_Action ( PatchId, 'patch_obsolete', UserId,
13075
                  'Obsolete patch. '|| ObsoleteComments );
13076
   ELSE
13077
      Log_Action ( PatchId, 'patch_obsolete', UserId,
13078
                  'Undo patch obsolete.' );
13079
   END IF;  */
13080
   END;
13081
 
13082
/*-------------------------------------------------------------------------------------------------------*/
13083
   PROCEDURE add_process (
13084
      nprocid         IN   processes.proc_id%TYPE,
13085
      shealthtag      IN   processes.proc_name%TYPE,
13086
      sprocdesc       IN   processes.proc_description%TYPE,
13087
      scmdinterface   IN   processes.run_as%TYPE,
13088
      spkgowner       IN   processes.pkg_owner%TYPE,
13089
      sisinterface    IN   processes.is_interface%TYPE,
13090
      npvid           IN   package_processes.pv_id%TYPE,
13091
      nuserid         IN   NUMBER
13092
   )
13093
   IS
13094
      pkgname   VARCHAR2 (100);
13095
/*Rupesh Release on 17/05/2006*/
13096
   BEGIN
13097
      INSERT INTO processes
13098
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
13099
                   is_interface
13100
                  )
13101
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
13102
                   sisinterface
13103
                  );
13104
 
13105
      pk_package.add_package_process (nprocid, npvid, nuserid);
13106
   END;
13107
 
13108
/*-------------------------------------------------------------------------------------------------------*/
13109
   PROCEDURE add_package_process (
13110
      nprocidlist   IN   VARCHAR2,
13111
      npvid         IN   package_processes.pv_id%TYPE,
13112
      nuserid       IN   NUMBER
13113
   )
13114
   IS
13115
      processname   VARCHAR2 (4000);
13116
 
13117
/*Rupesh Release on 17/05/2006*/
13118
      CURSOR proc_cur
13119
      IS
13120
         SELECT prc.proc_id
13121
           FROM processes prc
13122
          WHERE prc.proc_id IN (
13123
                   SELECT *
13124
                     FROM THE
13125
                             (SELECT CAST
13126
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
13127
                                        )
13128
                                FROM DUAL
13129
                             ));
13130
 
13131
      proc_rec      proc_cur%ROWTYPE;
13132
   BEGIN
13133
      OPEN proc_cur;
13134
 
13135
      FETCH proc_cur
13136
       INTO proc_rec;
13137
 
13138
      WHILE proc_cur%FOUND
13139
      LOOP
13140
         INSERT INTO package_processes
13141
                     (proc_id, pv_id
13142
                     )
13143
              VALUES (proc_rec.proc_id, npvid
13144
                     );
13145
 
13146
         SELECT prc.proc_name
13147
           INTO processname
13148
           FROM processes prc
13149
          WHERE prc.proc_id = proc_rec.proc_id;
13150
 
13151
         -- Log Action --
13152
         log_action (npvid,
13153
                     'process_add',
13154
                     nuserid,
13155
                     'Added process with health tag ' || processname
13156
                    );
13157
 
13158
         FETCH proc_cur
13159
          INTO proc_rec;
13160
      END LOOP;
13161
   END;
13162
 
13163
/*-------------------------------------------------------------------------------------------------------*/
13164
   PROCEDURE remove_process (
13165
      nprocid   IN   package_processes.proc_id%TYPE,
13166
      npvid     IN   package_processes.pv_id%TYPE,
13167
      nuserid   IN   NUMBER
13168
   )
13169
   IS
13170
      processname   VARCHAR2 (4000);
13171
/* Rupesh Release on 17/05/2006*/
13172
   BEGIN
13173
      SELECT prc.proc_name
13174
        INTO processname
13175
        FROM processes prc
13176
       WHERE prc.proc_id = nprocid;
13177
 
13178
      DELETE FROM package_processes
13179
            WHERE proc_id = nprocid AND pv_id = npvid;
13180
 
13181
      -- Log Action --
13182
      log_action (npvid,
13183
                  'process_remove',
13184
                  nuserid,
13185
                  'Removed process with health tag ' || processname
13186
                 );
13187
   END;
13188
/*-------------------------------------------------------------------------------------------------------*/
13189
  /* 
13190
  Author: Rupesh Solanki
13191
  Purpose: To move package versions from one release to another
13192
  Release: 4th September 2006 
13193
 
13194
  */
13195
  PROCEDURE move_package (
13196
   	  npvid  			  IN package_versions.pv_id%TYPE,
13197
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
13198
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
13199
	  nuserid			  IN NUMBER	
13200
  )	
13201
  IS	
13202
 
13203
  oldrtag_name VARCHAR2(4000);
13204
  newrtag_name VARCHAR2(4000);
13205
 
13206
 
13207
 
13208
  BEGIN
13209
 
13210
 
13211
  SELECT rtag_name into oldrtag_name
13212
  FROM RELEASE_TAGS
13213
  WHERE rtag_id = nrtagid;
13214
 
13215
  SELECT rtag_name into newrtag_name
13216
  FROM RELEASE_TAGS
13217
  WHERE rtag_id = nnewrtagid;
13218
 
13219
  /* Table Work In Progress*/
13220
  	   UPDATE WORK_IN_PROGRESS
13221
	   SET RTAG_ID = nnewrtagid
13222
	   WHERE RTAG_ID = nrtagid
13223
	   AND PV_ID = npvid;
13224
 
13225
  /* Table PLANNED*/	
13226
  	   UPDATE PLANNED
13227
	   SET RTAG_ID = nnewrtagid
13228
	   WHERE RTAG_ID = nrtagid
13229
	   AND PV_ID = npvid;   
13230
 
13231
      -- Log Action --
13232
      log_action (npvid,
13233
                  'move_package_version',
13234
                  nuserid,
13235
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
13236
                 );  	   	     
13237
 
13238
 
13239
  END;
13240
 
13241
/*-------------------------------------------------------------------------------------------------------*/
13242
PROCEDURE modify_product_state (
13243
   	  npvid IN package_versions.pv_id%TYPE,
13244
	  nstateid IN product_states.state_id%TYPE,
13245
	  nuserid IN NUMBER
13246
   ) IS
13247
 
13248
   sStateName VARCHAR(4000);
13249
 
13250
  /* 
13251
  Author: Rupesh Solanki
13252
  Purpose: To modify the product state from integration to test to deployment
13253
  Release: 25th January 2006 
13254
  */   
13255
 
13256
  BEGIN
13257
 
13258
  UPDATE PACKAGE_VERSIONS
13259
  SET PRODUCT_STATE = nstateid
13260
  WHERE PV_ID = npvid;
13261
 
13262
 
13263
  SELECT STATE INTO sStateName
13264
  FROM PRODUCT_STATES 
13265
  WHERE STATE_ID = nstateid;
13266
 
13267
  -- Log Action --
13268
  log_action (npvid,
13269
              'modify_product_state',
13270
               nuserid,
13271
               sStateName
13272
              );  
13273
 
13274
 
13275
  END;			  	   	     
13276
/*-------------------------------------------------------------------------------------------------------*/   
13277
END pk_package_Test;
1374 dpurdie 13278
/
13279
--------------------------------------------------------
13280
--  DDL for Package Body PK_ENVIRONMENT_TEST
13281
--------------------------------------------------------
1373 dpurdie 13282
 
13283
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT_TEST" 
13284
IS
13285
/*
13286
------------------------------
13287
||  Last Modified:  Rupesh Solanki
13288
||  Modified Date:  29/Jan/2007
13289
||  Body Version:   1.1
13290
------------------------------
13291
*/
13292
 
13293
   /*-------------------------------------------------------------------------------------------------------*/
13294
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
13295
      RETURN NUMBER
13296
   IS
13297
   BEGIN
13298
       /*
13299
      || N - unlocked
13300
      || Y - release and locked
13301
      || P - penging approval
13302
      || A - approved package ready for auto-build
13303
      */
13304
      IF cdlock = 'N' OR cdlock = 'R'
13305
      THEN
13306
         -- WORK IN PROGRESS --
13307
         RETURN 0;
13308
      ELSIF cdlock = 'P' OR cdlock = 'A'
13309
      THEN
13310
         -- PENDING --
13311
         RETURN 1;
13312
      ELSIF cdlock = 'Y'
13313
      THEN
13314
         -- RELEASED --
13315
         RETURN 2;
13316
      ELSE
13317
         -- NOT FOUND --
13318
         raise_application_error
13319
                         (-20000,
13320
                             'Cannot decide where to place package. [cDlock='
13321
                          || cdlock
13322
                          || ']'
13323
                         );
13324
      END IF;
13325
   END;
13326
 
13327
/*-------------------------------------------------------------------------------------------------------*/
13328
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
13329
      RETURN NUMBER
13330
   IS
13331
      envtab    NUMBER            := -1;
13332
 
13333
      CURSOR curarea
13334
      IS
13335
         SELECT 2 AS envtab
13336
           FROM release_content rc
13337
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13338
         UNION
13339
         SELECT 0 AS envtab
13340
           FROM work_in_progress wip
13341
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13342
         UNION
13343
         SELECT 1 AS envtab
13344
           FROM planned pl
13345
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13346
 
13347
      recarea   curarea%ROWTYPE;
13348
   BEGIN
13349
      OPEN curarea;
13350
 
13351
      FETCH curarea
13352
       INTO recarea;
13353
 
13354
      IF curarea%FOUND
13355
      THEN
13356
         envtab := recarea.envtab;
13357
      END IF;
13358
 
13359
      CLOSE curarea;
13360
 
13361
      RETURN envtab;
13362
   END;
13363
 
13364
/*-------------------------------------------------------------------------------------------------------*/
13365
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
13366
      RETURN NUMBER
13367
   IS
13368
      ispatch   package_versions.dlocked%TYPE;
13369
      viewid    NUMBER                          := -1;
13370
 
13371
      CURSOR curview
13372
      IS
13373
         SELECT rc.base_view_id AS view_id
13374
           FROM release_content rc
13375
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13376
         UNION
13377
         SELECT wip.view_id AS view_id
13378
           FROM work_in_progress wip
13379
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13380
         UNION
13381
         SELECT pl.view_id AS view_id
13382
           FROM planned pl
13383
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13384
 
13385
      recview   curview%ROWTYPE;
13386
   BEGIN
13387
      -- Get dlock state
13388
      SELECT pv.is_patch
13389
        INTO ispatch
13390
        FROM package_versions pv
13391
       WHERE pv.pv_id = pvid;
13392
 
13393
      -- Decide which view id should package go under.
13394
      IF (ispatch != 'Y') OR (ispatch IS NULL)
13395
      THEN
13396
         -- Get VIEW ID of Package
13397
         OPEN curview;
13398
 
13399
         FETCH curview
13400
          INTO recview;
13401
 
13402
         IF curview%FOUND
13403
         THEN
13404
            viewid := recview.view_id;
13405
         ELSE
13406
            raise_application_error
13407
               (-20000,
13408
                   'Cannot find view_id to proceed. [PvId='
13409
                || pvid
13410
                || ']. The current version may not exist in the release anymore.'
13411
               );
13412
         END IF;
13413
 
13414
         CLOSE curview;
13415
      ELSE
13416
         -- Get VIEW ID of Patch (view id of parent package)
13417
         SELECT rc.base_view_id
13418
           INTO viewid
13419
           FROM release_content rc, package_patches ppv
13420
          WHERE rc.rtag_id = rtagid
13421
            AND rc.pv_id = ppv.pv_id
13422
            AND ppv.patch_id = pvid;
13423
      END IF;
13424
 
13425
      RETURN viewid;
13426
   END;
13427
 
13428
/*-------------------------------------------------------------------------------------------------------*/
13429
   PROCEDURE add_package (
13430
      pvid     IN   NUMBER,
13431
      viewid   IN   NUMBER,
13432
      rtagid   IN   NUMBER,
13433
      userid   IN   NUMBER
13434
   )
13435
   IS
13436
      dlocked   package_versions.dlocked%TYPE;
13437
      envtab    NUMBER;
13438
   BEGIN
13439
      IF can_edit_pkg_in_project (pvid, rtagid) = 1
13440
      THEN
13441
         -- Get dlock state
13442
         SELECT pv.dlocked
13443
           INTO dlocked
13444
           FROM package_versions pv
13445
          WHERE pv.pv_id = pvid;
13446
 
13447
         -- Get which area should go under
13448
         envtab := select_environment_area (dlocked);
13449
         -- Log
13450
         log_action (pvid, 'action', userid, 'Start of Package Add...');
13451
 
13452
         -- Remove Package
13453
         IF envtab = 0
13454
         THEN
13455
            -- WORK IN PROGRESS --
13456
            pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
13457
         ELSIF envtab = 1
13458
         THEN
13459
            -- PENDING --
13460
            pk_planned.add_package (pvid, viewid, rtagid, userid);
13461
         ELSIF envtab = 2
13462
         THEN
13463
            -- RELEASED --
13464
            -- NOTE: this package will be replaced with matching package
13465
            pk_release.add_package (pvid, viewid, rtagid, userid);
13466
            -- Now do post Release Actions
13467
            pk_release.run_post_actions (pvid, rtagid);
13468
         END IF;
13469
 
13470
         -- Log
13471
         log_action (pvid, 'action', userid, 'End of Package Add...');
13472
      END IF;
13473
   END;
13474
 
13475
/*-------------------------------------------------------------------------------------------------------*/
13476
   PROCEDURE add_package_bulk (
13477
      pvidlist   IN   VARCHAR2,
13478
      viewid     IN   NUMBER,
13479
      rtagid     IN   NUMBER,
13480
      userid     IN   NUMBER
13481
   )
13482
   IS
13483
      nidcollector   relmgr_number_tab_t            := relmgr_number_tab_t
13484
                                                                          ();
13485
      dlocked        package_versions.dlocked%TYPE;
13486
      pvid           NUMBER;
13487
      envtab         NUMBER;
13488
   BEGIN
13489
      /*--------------- Business Rules Here -------------------*/
13490
      IF (pvidlist IS NULL)
13491
      THEN
13492
         raise_application_error (-20000,
13493
                                  'Please select at least one package.'
13494
                                 );
13495
      END IF;
13496
 
13497
/*-------------------------------------------------------*/
13498
      nidcollector := in_list_number (pvidlist);
13499
 
13500
      FOR i IN 1 .. nidcollector.COUNT
13501
      LOOP
13502
         pvid := nidcollector (i);
13503
         add_package (pvid, viewid, rtagid, userid);
13504
      END LOOP;
13505
   END;
13506
 
13507
/*-------------------------------------------------------------------------------------------------------*/
13508
   PROCEDURE replace_package (
13509
      newpvid   IN   NUMBER,
13510
      oldpvid   IN   NUMBER,
13511
      rtagid    IN   NUMBER,
13512
      userid    IN   NUMBER
13513
   )
13514
   IS
13515
      dlocked        package_versions.dlocked%TYPE;
13516
      viewid         NUMBER;
13517
      envtab         NUMBER;
13518
      ROWCOUNT       NUMBER;
13519
      creleasemode   CHAR (1);
13520
      npkgid         NUMBER;
13521
   BEGIN
13522
      /*--------------- Business Rules Here -------------------*/
13523
      -- Check if oldPvId exists. It could have been removed
13524
      SELECT COUNT (pv.pv_id)
13525
        INTO ROWCOUNT
13526
        FROM package_versions pv
13527
       WHERE pv.pv_id = oldpvid;
13528
 
13529
/*-------------------------------------------------------*/
13530
 
13531
      /* This procedure is usually used by "History" option in Release Manager */
13532
 
13533
      -- Get dlock state
13534
      SELECT pv.dlocked
13535
        INTO dlocked
13536
        FROM package_versions pv
13537
       WHERE pv.pv_id = newpvid;
13538
 
13539
      -- Get VIEW_ID ---
13540
      IF ROWCOUNT = 1
13541
      THEN
13542
         viewid := get_view_location (oldpvid, rtagid);
13543
      ELSE
13544
         -- Set ViewID to default
13545
         viewid := 7;
13546
      END IF;
13547
 
13548
      -- Get which area should go under
13549
      envtab := select_environment_area (dlocked);
13550
      -- Log
13551
      log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
13552
 
13553
      -- Replace package
13554
      IF envtab = 0
13555
      THEN
13556
         -- WORK IN PROGRESS --
13557
 
13558
         -- Delete old package
13559
         pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
13560
         -- Add new package
13561
         pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
13562
      ELSIF envtab = 1
13563
      THEN
13564
         -- PENDING --
13565
 
13566
         -- Delete old package
13567
         pk_planned.remove_package (oldpvid, rtagid, userid);
13568
         -- Add new package
13569
         pk_planned.add_package (newpvid, viewid, rtagid, userid);
13570
      ELSIF envtab = 2
13571
      THEN
13572
         -- RELEASED --
13573
 
13574
         -- Delete old package
13575
         pk_release.remove_package (oldpvid, rtagid, userid);
13576
         -- Add new package
13577
         pk_release.add_package (newpvid, viewid, rtagid, userid);
13578
         -- Now do post Release Actions
13579
         pk_release.run_post_actions (newpvid, rtagid);
13580
      END IF;
13581
 
13582
      -- Log
13583
      log_action (oldpvid, 'action', userid, 'End of Package Replace...');
13584
   END;
13585
 
13586
/*-------------------------------------------------------------------------------------------------------*/
13587
   FUNCTION remove_package (
13588
      pvid          IN   NUMBER,
13589
      rtagid        IN   NUMBER,
13590
      userid        IN   NUMBER,
13591
      forceremove   IN   CHAR
13592
   )
13593
      RETURN NUMBER
13594
   IS
13595
      envtab        NUMBER;
13596
      isused        BOOLEAN;
13597
      recordcount   NUMBER;
13598
   BEGIN
13599
/*--------------- Business Rules Here -------------------*/
13600
/*-------------------------------------------------------*/
13601
 
13602
      -- Find location of package
13603
      envtab := get_package_area (pvid, rtagid);
13604
 
13605
      -- Remove Package
13606
      IF envtab = 0
13607
      THEN
13608
         -- WORK IN PROGRESS --
13609
         -- Delete package
13610
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
13611
         RETURN 0;
13612
      ELSIF envtab = 1
13613
      THEN
13614
         -- PENDING --
13615
         -- Delete package
13616
         pk_planned.remove_package (pvid, rtagid, userid);
13617
         RETURN 0;
13618
      ELSIF envtab = 2
13619
      THEN
13620
         -- RELEASED --
13621
 
13622
         -- Check if is used by other packages
13623
         isused := TRUE;
13624
 
13625
         IF forceremove = 'N'
13626
         THEN
13627
            SELECT COUNT (pv.pv_id)
13628
              INTO recordcount
13629
              FROM (SELECT dpv.pkg_id, dpv.v_ext
13630
                      FROM release_content rc,
13631
                           package_dependencies dep,
13632
                           package_versions dpv
13633
                     WHERE rc.rtag_id = rtagid
13634
                       AND rc.pv_id = dep.pv_id
13635
                       AND dep.dpv_id = dpv.pv_id) rdep,
13636
                   package_versions pv
13637
             WHERE pv.pkg_id = rdep.pkg_id
13638
               AND NVL (pv.v_ext, '|LINK_A_NULL|') =
13639
                                             NVL (rdep.v_ext, '|LINK_A_NULL|')
13640
               AND pv.pv_id = pvid;
13641
 
13642
            IF recordcount > 0
13643
            THEN
13644
               RETURN 1;                    -- Return 1 as package being used
13645
            ELSE
13646
               isused := FALSE;
13647
            END IF;
13648
         END IF;
13649
 
13650
         IF forceremove = 'Y' OR NOT isused
13651
         THEN
13652
            -- Delete old package
13653
            pk_release.remove_package (pvid, rtagid, userid);
13654
            -- Now do post Release Actions
13655
            pk_release.run_post_actions (pvid, rtagid);
13656
            RETURN 0;
13657
         END IF;
13658
      END IF;
13659
   END;
13660
 
13661
/*-------------------------------------------------------------------------------------------------------*/
13662
   PROCEDURE get_environment_items (
13663
      viewtype           IN       NUMBER,
13664
      userid             IN       NUMBER,
13665
      rtagid             IN       NUMBER,
13666
      sviewidshowlist    IN       VARCHAR2,
13667
      ntruerecordcount   OUT      NUMBER,
13668
      recordset          OUT      typecur
13669
   )
13670
   IS
13671
   BEGIN
13672
      -- Get true record count because views can give false count
13673
      SELECT COUNT (pl.pv_id)
13674
        INTO ntruerecordcount
13675
        FROM environment_view pl
13676
       WHERE pl.rtag_id = rtagid;
13677
 
13678
      IF viewtype = 1
13679
      THEN
13680
         /*--- GUEST VIEW ---*/
13681
         OPEN recordset FOR
13682
            SELECT   *
13683
                FROM (
13684
                      /* Base Views collapsed */
13685
                      SELECT DISTINCT vi.view_id, vi.view_name,
13686
                                      TO_NUMBER (NULL) AS pkg_state,
13687
                                      TO_NUMBER (NULL) AS deprecated_state,
13688
                                      TO_NUMBER (NULL) AS pv_id,
13689
                                      NULL AS pkg_name, NULL AS pkg_version,
13690
                                      NULL AS dlocked, NULL AS pv_description
13691
                                 FROM environment_view rel, views vi
13692
                                WHERE rel.view_id = vi.view_id
13693
                                  AND rtag_id = rtagid
13694
                                  AND rel.view_id NOT IN (
13695
                                         SELECT *
13696
                                           FROM THE
13697
                                                   (SELECT CAST
13698
                                                              (in_list_number
13699
                                                                  (sviewidshowlist
13700
                                                                  ) AS relmgr_number_tab_t
13701
                                                              )
13702
                                                      FROM DUAL
13703
                                                   ))
13704
                      UNION
13705
                      /* Base Views expanded */
13706
                      SELECT vi.view_id, vi.view_name,
13707
                             DECODE (rel.pkg_state,
13708
                                     NULL, 0,
13709
                                     rel.pkg_state
13710
                                    ) AS pkg_state,
13711
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13712
                             pv.pkg_version, pv.dlocked, pv.pv_description
13713
                        FROM environment_view rel,
13714
                             PACKAGES pkg,
13715
                             package_versions pv,
13716
                             views vi
13717
                       WHERE pv.pkg_id = pkg.pkg_id
13718
                         AND rel.pv_id = pv.pv_id
13719
                         AND rel.view_id = vi.view_id
13720
                         AND rel.view_id IN (
13721
                                SELECT *
13722
                                  FROM THE
13723
                                          (SELECT CAST
13724
                                                     (in_list_number
13725
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13726
                                                     )
13727
                                             FROM DUAL
13728
                                          ))
13729
                         AND rtag_id = rtagid) ord
13730
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13731
      ELSIF viewtype = 2
13732
      THEN
13733
         /*--- PERSONAL VIEW ---*/
13734
         OPEN recordset FOR
13735
            SELECT   *
13736
                FROM (
13737
                      /* Base Views collapsed */
13738
                      SELECT DISTINCT vi.view_id, vi.view_name,
13739
                                      TO_NUMBER (NULL) AS pkg_state,
13740
                                      TO_NUMBER (NULL) AS deprecated_state,
13741
                                      TO_NUMBER (NULL) AS pv_id,
13742
                                      NULL AS pkg_name, NULL AS pkg_version,
13743
                                      NULL AS dlocked, NULL AS pv_description
13744
                                 FROM environment_view rel,
13745
                                      view_settings vs,
13746
                                      views vi
13747
                                WHERE rel.view_id = vi.view_id
13748
                                  AND vs.view_id = rel.view_id
13749
                                  AND vs.user_id = userid
13750
                                  AND rtag_id = rtagid
13751
                                  AND rel.view_id NOT IN (
13752
                                         SELECT *
13753
                                           FROM THE
13754
                                                   (SELECT CAST
13755
                                                              (in_list_number
13756
                                                                  (sviewidshowlist
13757
                                                                  ) AS relmgr_number_tab_t
13758
                                                              )
13759
                                                      FROM DUAL
13760
                                                   ))
13761
                      UNION
13762
                      /* Base Views expanded */
13763
                      SELECT vi.view_id, vi.view_name,
13764
                             DECODE (rel.pkg_state,
13765
                                     NULL, 0,
13766
                                     rel.pkg_state
13767
                                    ) AS pkg_state,
13768
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13769
                             pv.pkg_version, pv.dlocked, pv.pv_description
13770
                        FROM environment_view rel,
13771
                             PACKAGES pkg,
13772
                             package_versions pv,
13773
                             views vi,
13774
                             view_settings vs
13775
                       WHERE pv.pkg_id = pkg.pkg_id
13776
                         AND rel.pv_id = pv.pv_id
13777
                         AND rel.view_id = vi.view_id
13778
                         AND vs.view_id = vi.view_id
13779
                         AND vs.user_id = userid
13780
                         AND rel.view_id IN (
13781
                                SELECT *
13782
                                  FROM THE
13783
                                          (SELECT CAST
13784
                                                     (in_list_number
13785
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13786
                                                     )
13787
                                             FROM DUAL
13788
                                          ))
13789
                         AND rtag_id = rtagid
13790
                      UNION
13791
                      /* Private Views collapsed */
13792
                      SELECT vi.view_id, vi.view_name,
13793
                             TO_NUMBER (NULL) AS pkg_state,
13794
                             TO_NUMBER (NULL) AS deprecated_state,
13795
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13796
                             NULL AS pkg_version, NULL AS dlocked,
13797
                             NULL AS pv_description
13798
                        FROM view_settings vs,
13799
                             view_def vd,
13800
                             views vi,
13801
                             environment_view rel,
13802
                             package_versions pv
13803
                       WHERE vs.view_id = vi.view_id
13804
                         AND rel.pv_id = pv.pv_id
13805
                         AND vd.pkg_id = pv.pkg_id
13806
                         AND vd.view_id = vi.view_id
13807
                         AND vi.base_view = 'N'
13808
                         AND rel.rtag_id = rtagid
13809
                         AND vs.user_id = userid
13810
                         AND vi.view_id NOT IN (
13811
                                SELECT *
13812
                                  FROM THE
13813
                                          (SELECT CAST
13814
                                                     (in_list_number
13815
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13816
                                                     )
13817
                                             FROM DUAL
13818
                                          ))
13819
                      UNION
13820
                      /* Private Views expanded */
13821
                      SELECT vi.view_id, vi.view_name,
13822
                             DECODE (rel.pkg_state,
13823
                                     NULL, 0,
13824
                                     rel.pkg_state
13825
                                    ) AS pkg_state,
13826
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13827
                             pv.pkg_version, pv.dlocked, pv.pv_description
13828
                        FROM users usr,
13829
                             view_settings vs,
13830
                             view_def vd,
13831
                             views vi,
13832
                             environment_view rel,
13833
                             PACKAGES pkg,
13834
                             package_versions pv
13835
                       WHERE vs.user_id = usr.user_id
13836
                         AND vs.view_id = vi.view_id
13837
                         AND vd.view_id = vi.view_id
13838
                         AND pv.pkg_id = pkg.pkg_id
13839
                         AND rel.pv_id = pv.pv_id
13840
                         AND rel.rtag_id = rtagid
13841
                         AND vd.pkg_id = pkg.pkg_id
13842
                         AND vi.base_view = 'N'
13843
                         AND vi.view_id IN (
13844
                                SELECT *
13845
                                  FROM THE
13846
                                          (SELECT CAST
13847
                                                     (in_list_number
13848
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13849
                                                     )
13850
                                             FROM DUAL
13851
                                          ))
13852
                         AND usr.user_id = userid) ord
13853
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13854
      END IF;
13855
   END;
13856
 
13857
/*-------------------------------------------------------------------------------------------------------*/
13858
   PROCEDURE get_released_items (
13859
      viewtype           IN       NUMBER,
13860
      userid             IN       NUMBER,
13861
      rtagid             IN       NUMBER,
13862
      sviewidshowlist    IN       VARCHAR2,
13863
      ntruerecordcount   OUT      NUMBER,
13864
      recordset          OUT      typecur
13865
   )
13866
   IS
13867
   BEGIN
13868
      -- Get true record count because views can give false count
13869
      SELECT COUNT (rc.pv_id)
13870
        INTO ntruerecordcount
13871
        FROM release_content rc
13872
       WHERE rc.rtag_id = rtagid;
13873
 
13874
      IF viewtype = 1
13875
      THEN
13876
         /*--- GUEST VIEW ---*/
13877
         OPEN recordset FOR
13878
            SELECT   *
13879
                FROM (
13880
                      /* Base Views collapsed */
13881
                      SELECT DISTINCT vi.view_id, vi.view_name,
13882
                                      TO_NUMBER (NULL) AS pkg_state,
13883
                                      TO_NUMBER (NULL) AS deprecated_state,
13884
                                      TO_NUMBER (NULL) AS pv_id,
13885
                                      NULL AS pkg_name, NULL AS pkg_version,
13886
                                      NULL AS dlocked, NULL AS pv_description
13887
                                 FROM release_content rel, views vi
13888
                                WHERE rel.base_view_id = vi.view_id
13889
                                  AND rtag_id = rtagid
13890
                                  AND rel.base_view_id NOT IN (
13891
                                         SELECT *
13892
                                           FROM THE
13893
                                                   (SELECT CAST
13894
                                                              (in_list_number
13895
                                                                  (sviewidshowlist
13896
                                                                  ) AS relmgr_number_tab_t
13897
                                                              )
13898
                                                      FROM DUAL
13899
                                                   ))
13900
                      UNION
13901
                      /* Base Views expanded */
13902
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13903
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13904
                             pv.pkg_version, pv.dlocked, pv.pv_description
13905
                        FROM release_content rel,
13906
                             PACKAGES pkg,
13907
                             package_versions pv,
13908
                             views vi
13909
                       WHERE pv.pkg_id = pkg.pkg_id
13910
                         AND rel.pv_id = pv.pv_id
13911
                         AND rel.base_view_id = vi.view_id
13912
                         AND rel.base_view_id IN (
13913
                                SELECT *
13914
                                  FROM THE
13915
                                          (SELECT CAST
13916
                                                     (in_list_number
13917
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13918
                                                     )
13919
                                             FROM DUAL
13920
                                          ))
13921
                         AND rtag_id = rtagid) ord
13922
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13923
      ELSIF viewtype = 2
13924
      THEN
13925
         /*--- PERSONAL VIEW ---*/
13926
         OPEN recordset FOR
13927
            SELECT   *
13928
                FROM (
13929
                      /* Base Views collapsed */
13930
                      SELECT DISTINCT vi.view_id, vi.view_name,
13931
                                      TO_NUMBER (NULL) AS pkg_state,
13932
                                      TO_NUMBER (NULL) AS deprecated_state,
13933
                                      TO_NUMBER (NULL) AS pv_id,
13934
                                      NULL AS pkg_name, NULL AS pkg_version,
13935
                                      NULL AS dlocked, NULL AS pv_description
13936
                                 FROM release_content rel,
13937
                                      view_settings vs,
13938
                                      views vi
13939
                                WHERE rel.base_view_id = vi.view_id
13940
                                  AND vs.view_id = rel.base_view_id
13941
                                  AND vs.user_id = userid
13942
                                  AND rtag_id = rtagid
13943
                                  AND rel.base_view_id NOT IN (
13944
                                         SELECT *
13945
                                           FROM THE
13946
                                                   (SELECT CAST
13947
                                                              (in_list_number
13948
                                                                  (sviewidshowlist
13949
                                                                  ) AS relmgr_number_tab_t
13950
                                                              )
13951
                                                      FROM DUAL
13952
                                                   ))
13953
                      UNION
13954
                      /* Base Views expanded */
13955
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13956
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13957
                             pv.pkg_version, pv.dlocked, pv.pv_description
13958
                        FROM release_content rel,
13959
                             PACKAGES pkg,
13960
                             package_versions pv,
13961
                             views vi,
13962
                             view_settings vs
13963
                       WHERE pv.pkg_id = pkg.pkg_id
13964
                         AND rel.pv_id = pv.pv_id
13965
                         AND rel.base_view_id = vi.view_id
13966
                         AND vs.view_id = vi.view_id
13967
                         AND vs.user_id = userid
13968
                         AND rel.base_view_id IN (
13969
                                SELECT *
13970
                                  FROM THE
13971
                                          (SELECT CAST
13972
                                                     (in_list_number
13973
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13974
                                                     )
13975
                                             FROM DUAL
13976
                                          ))
13977
                         AND rtag_id = rtagid
13978
                      UNION
13979
                      /* Private Views collapsed */
13980
                      SELECT vi.view_id, vi.view_name,
13981
                             TO_NUMBER (NULL) AS pkg_state,
13982
                             TO_NUMBER (NULL) AS deprecated_state,
13983
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13984
                             NULL AS pkg_version, NULL AS dlocked,
13985
                             NULL AS pv_description
13986
                        FROM view_settings vs,
13987
                             view_def vd,
13988
                             views vi,
13989
                             release_content rel,
13990
                             package_versions pv
13991
                       WHERE vs.view_id = vi.view_id
13992
                         AND rel.pv_id = pv.pv_id
13993
                         AND vd.pkg_id = pv.pkg_id
13994
                         AND vd.view_id = vi.view_id
13995
                         AND vi.base_view = 'N'
13996
                         AND rel.rtag_id = rtagid
13997
                         AND vs.user_id = userid
13998
                         AND vi.view_id NOT IN (
13999
                                SELECT *
14000
                                  FROM THE
14001
                                          (SELECT CAST
14002
                                                     (in_list_number
14003
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14004
                                                     )
14005
                                             FROM DUAL
14006
                                          ))
14007
                      UNION
14008
                      /* Private Views expanded */
14009
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
14010
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14011
                             pv.pkg_version, pv.dlocked, pv.pv_description
14012
                        FROM users usr,
14013
                             view_settings vs,
14014
                             view_def vd,
14015
                             views vi,
14016
                             release_content rel,
14017
                             PACKAGES pkg,
14018
                             package_versions pv
14019
                       WHERE vs.user_id = usr.user_id
14020
                         AND vs.view_id = vi.view_id
14021
                         AND vd.view_id = vi.view_id
14022
                         AND pv.pkg_id = pkg.pkg_id
14023
                         AND rel.pv_id = pv.pv_id
14024
                         AND rel.rtag_id = rtagid
14025
                         AND vd.pkg_id = pkg.pkg_id
14026
                         AND vi.base_view = 'N'
14027
                         AND vi.view_id IN (
14028
                                SELECT *
14029
                                  FROM THE
14030
                                          (SELECT CAST
14031
                                                     (in_list_number
14032
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14033
                                                     )
14034
                                             FROM DUAL
14035
                                          ))
14036
                         AND usr.user_id = userid) ord
14037
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14038
      END IF;
14039
   END;
14040
 
14041
/*-------------------------------------------------------------------------------------------------------*/
14042
   PROCEDURE get_work_in_progress_items (
14043
      viewtype           IN       NUMBER,
14044
      userid             IN       NUMBER,
14045
      rtagid             IN       NUMBER,
14046
      sviewidshowlist    IN       VARCHAR2,
14047
      ntruerecordcount   OUT      NUMBER,
14048
      recordset          OUT      typecur
14049
   )
14050
   IS
14051
   BEGIN
14052
      -- Get true record count because views can give false count
14053
      SELECT COUNT (wip.pv_id)
14054
        INTO ntruerecordcount
14055
        FROM work_in_progress wip
14056
       WHERE wip.rtag_id = rtagid;
14057
 
14058
      IF viewtype = 1
14059
      THEN
14060
         /*--- GUEST VIEW ---*/
14061
         OPEN recordset FOR
14062
            SELECT   *
14063
                FROM (
14064
                      /* Base Views collapsed */
14065
                      SELECT DISTINCT vi.view_id, vi.view_name,
14066
                                      TO_NUMBER (NULL) AS pkg_state,
14067
                                      TO_NUMBER (NULL) AS deprecated_state,
14068
                                      TO_NUMBER (NULL) AS pv_id,
14069
                                      NULL AS pkg_name, NULL AS pkg_version,
14070
                                      NULL AS dlocked, NULL AS pv_description
14071
                                 FROM work_in_progress rel, views vi
14072
                                WHERE rel.view_id = vi.view_id
14073
                                  AND rtag_id = rtagid
14074
                                  AND rel.view_id NOT IN (
14075
                                         SELECT *
14076
                                           FROM THE
14077
                                                   (SELECT CAST
14078
                                                              (in_list_number
14079
                                                                  (sviewidshowlist
14080
                                                                  ) AS relmgr_number_tab_t
14081
                                                              )
14082
                                                      FROM DUAL
14083
                                                   ))
14084
                      UNION
14085
                      /* Base Views expanded */
14086
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14087
 
14088
                             --rel.pkg_state,
14089
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14090
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14091
                             pv.pv_description
14092
                        FROM work_in_progress rel,
14093
                             PACKAGES pkg,
14094
                             package_versions pv,
14095
                             views vi
14096
                       WHERE pv.pkg_id = pkg.pkg_id
14097
                         AND rel.pv_id = pv.pv_id
14098
                         AND rel.view_id = vi.view_id
14099
                         AND rel.view_id IN (
14100
                                SELECT *
14101
                                  FROM THE
14102
                                          (SELECT CAST
14103
                                                     (in_list_number
14104
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14105
                                                     )
14106
                                             FROM DUAL
14107
                                          ))
14108
                         AND rtag_id = rtagid) ord
14109
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14110
      ELSIF viewtype = 2
14111
      THEN
14112
         /*--- PERSONAL VIEW ---*/
14113
         OPEN recordset FOR
14114
            SELECT   *
14115
                FROM (
14116
                      /* Base Views collapsed */
14117
                      SELECT DISTINCT vi.view_id, vi.view_name,
14118
                                      TO_NUMBER (NULL) AS pkg_state,
14119
                                      TO_NUMBER (NULL) AS deprecated_state,
14120
                                      TO_NUMBER (NULL) AS pv_id,
14121
                                      NULL AS pkg_name, NULL AS pkg_version,
14122
                                      NULL AS dlocked, NULL AS pv_description
14123
                                 FROM work_in_progress rel,
14124
                                      view_settings vs,
14125
                                      views vi
14126
                                WHERE rel.view_id = vi.view_id
14127
                                  AND vs.view_id = rel.view_id
14128
                                  AND vs.user_id = userid
14129
                                  AND rtag_id = rtagid
14130
                                  AND rel.view_id NOT IN (
14131
                                         SELECT *
14132
                                           FROM THE
14133
                                                   (SELECT CAST
14134
                                                              (in_list_number
14135
                                                                  (sviewidshowlist
14136
                                                                  ) AS relmgr_number_tab_t
14137
                                                              )
14138
                                                      FROM DUAL
14139
                                                   ))
14140
                      UNION
14141
                      /* Base Views expanded */
14142
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14143
 
14144
                             --rel.pkg_state,
14145
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14146
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14147
                             pv.pv_description
14148
                        FROM work_in_progress rel,
14149
                             PACKAGES pkg,
14150
                             package_versions pv,
14151
                             views vi,
14152
                             view_settings vs
14153
                       WHERE pv.pkg_id = pkg.pkg_id
14154
                         AND rel.pv_id = pv.pv_id
14155
                         AND rel.view_id = vi.view_id
14156
                         AND vs.view_id = vi.view_id
14157
                         AND vs.user_id = userid
14158
                         AND rel.view_id IN (
14159
                                SELECT *
14160
                                  FROM THE
14161
                                          (SELECT CAST
14162
                                                     (in_list_number
14163
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14164
                                                     )
14165
                                             FROM DUAL
14166
                                          ))
14167
                         AND rtag_id = rtagid
14168
                      UNION
14169
                      /* Private Views collapsed */
14170
                      SELECT vi.view_id, vi.view_name,
14171
                             TO_NUMBER (NULL) AS pkg_state,
14172
                             TO_NUMBER (NULL) AS deprecated_state,
14173
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14174
                             NULL AS pkg_version, NULL AS dlocked,
14175
                             NULL AS pv_description
14176
                        FROM view_settings vs,
14177
                             view_def vd,
14178
                             views vi,
14179
                             work_in_progress rel,
14180
                             package_versions pv
14181
                       WHERE vs.view_id = vi.view_id
14182
                         AND rel.pv_id = pv.pv_id
14183
                         AND vd.pkg_id = pv.pkg_id
14184
                         AND vd.view_id = vi.view_id
14185
                         AND vi.base_view = 'N'
14186
                         AND rel.rtag_id = rtagid
14187
                         AND vs.user_id = userid
14188
                         AND vi.view_id NOT IN (
14189
                                SELECT *
14190
                                  FROM THE
14191
                                          (SELECT CAST
14192
                                                     (in_list_number
14193
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14194
                                                     )
14195
                                             FROM DUAL
14196
                                          ))
14197
                      UNION
14198
                      /* Private Views expanded */
14199
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14200
 
14201
                             --rel.pkg_state,
14202
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14203
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14204
                             pv.pv_description
14205
                        FROM users usr,
14206
                             view_settings vs,
14207
                             view_def vd,
14208
                             views vi,
14209
                             work_in_progress rel,
14210
                             PACKAGES pkg,
14211
                             package_versions pv
14212
                       WHERE vs.user_id = usr.user_id
14213
                         AND vs.view_id = vi.view_id
14214
                         AND vd.view_id = vi.view_id
14215
                         AND pv.pkg_id = pkg.pkg_id
14216
                         AND rel.pv_id = pv.pv_id
14217
                         AND rel.rtag_id = rtagid
14218
                         AND vd.pkg_id = pkg.pkg_id
14219
                         AND vi.base_view = 'N'
14220
                         AND vi.view_id IN (
14221
                                SELECT *
14222
                                  FROM THE
14223
                                          (SELECT CAST
14224
                                                     (in_list_number
14225
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14226
                                                     )
14227
                                             FROM DUAL
14228
                                          ))
14229
                         AND usr.user_id = userid) ord
14230
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14231
      END IF;
14232
   END;
14233
 
14234
/*-------------------------------------------------------------------------------------------------------*/
14235
   PROCEDURE get_pending_items (
14236
      viewtype           IN       NUMBER,
14237
      userid             IN       NUMBER,
14238
      rtagid             IN       NUMBER,
14239
      sviewidshowlist    IN       VARCHAR2,
14240
      ntruerecordcount   OUT      NUMBER,
14241
      recordset          OUT      typecur
14242
   )
14243
   IS
14244
   BEGIN
14245
      -- Get true record count because views can give false count
14246
      SELECT COUNT (pl.pv_id)
14247
        INTO ntruerecordcount
14248
        FROM planned pl
14249
       WHERE pl.rtag_id = rtagid;
14250
 
14251
      IF viewtype = 1
14252
      THEN
14253
         /*--- GUEST VIEW ---*/
14254
         OPEN recordset FOR
14255
            SELECT   *
14256
                FROM (
14257
                      /* Base Views collapsed */
14258
                      SELECT DISTINCT vi.view_id, vi.view_name,
14259
                                      TO_NUMBER (NULL) AS pkg_state,
14260
                                      TO_NUMBER (NULL) AS deprecated_state,
14261
                                      TO_NUMBER (NULL) AS pv_id,
14262
                                      NULL AS pkg_name, NULL AS pkg_version,
14263
                                      NULL AS dlocked, NULL AS pv_description
14264
                                 FROM planned rel, views vi
14265
                                WHERE rel.view_id = vi.view_id
14266
                                  AND rtag_id = rtagid
14267
                                  AND rel.view_id NOT IN (
14268
                                         SELECT *
14269
                                           FROM THE
14270
                                                   (SELECT CAST
14271
                                                              (in_list_number
14272
                                                                  (sviewidshowlist
14273
                                                                  ) AS relmgr_number_tab_t
14274
                                                              )
14275
                                                      FROM DUAL
14276
                                                   ))
14277
                      UNION
14278
                      /* Base Views expanded */
14279
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14280
 
14281
                             --rel.pkg_state,
14282
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14283
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14284
                             pv.pv_description
14285
                        FROM planned rel,
14286
                             PACKAGES pkg,
14287
                             package_versions pv,
14288
                             views vi
14289
                       WHERE pv.pkg_id = pkg.pkg_id
14290
                         AND rel.pv_id = pv.pv_id
14291
                         AND rel.view_id = vi.view_id
14292
                         AND rel.view_id IN (
14293
                                SELECT *
14294
                                  FROM THE
14295
                                          (SELECT CAST
14296
                                                     (in_list_number
14297
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14298
                                                     )
14299
                                             FROM DUAL
14300
                                          ))
14301
                         AND rtag_id = rtagid) ord
14302
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14303
      ELSIF viewtype = 2
14304
      THEN
14305
         /*--- PERSONAL VIEW ---*/
14306
         OPEN recordset FOR
14307
            SELECT   *
14308
                FROM (
14309
                      /* Base Views collapsed */
14310
                      SELECT DISTINCT vi.view_id, vi.view_name,
14311
                                      TO_NUMBER (NULL) AS pkg_state,
14312
                                      TO_NUMBER (NULL) AS deprecated_state,
14313
                                      TO_NUMBER (NULL) AS pv_id,
14314
                                      NULL AS pkg_name, NULL AS pkg_version,
14315
                                      NULL AS dlocked, NULL AS pv_description
14316
                                 FROM planned rel, view_settings vs, views vi
14317
                                WHERE rel.view_id = vi.view_id
14318
                                  AND vs.view_id = rel.view_id
14319
                                  AND vs.user_id = userid
14320
                                  AND rtag_id = rtagid
14321
                                  AND rel.view_id NOT IN (
14322
                                         SELECT *
14323
                                           FROM THE
14324
                                                   (SELECT CAST
14325
                                                              (in_list_number
14326
                                                                  (sviewidshowlist
14327
                                                                  ) AS relmgr_number_tab_t
14328
                                                              )
14329
                                                      FROM DUAL
14330
                                                   ))
14331
                      UNION
14332
                      /* Base Views expanded */
14333
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14334
 
14335
                             --rel.pkg_state,
14336
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14337
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14338
                             pv.pv_description
14339
                        FROM planned rel,
14340
                             PACKAGES pkg,
14341
                             package_versions pv,
14342
                             views vi,
14343
                             view_settings vs
14344
                       WHERE pv.pkg_id = pkg.pkg_id
14345
                         AND rel.pv_id = pv.pv_id
14346
                         AND rel.view_id = vi.view_id
14347
                         AND vs.view_id = vi.view_id
14348
                         AND vs.user_id = userid
14349
                         AND rel.view_id IN (
14350
                                SELECT *
14351
                                  FROM THE
14352
                                          (SELECT CAST
14353
                                                     (in_list_number
14354
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14355
                                                     )
14356
                                             FROM DUAL
14357
                                          ))
14358
                         AND rtag_id = rtagid
14359
                      UNION
14360
                      /* Private Views collapsed */
14361
                      SELECT vi.view_id, vi.view_name,
14362
                             TO_NUMBER (NULL) AS pkg_state,
14363
                             TO_NUMBER (NULL) AS deprecated_state,
14364
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14365
                             NULL AS pkg_version, NULL AS dlocked,
14366
                             NULL AS pv_description
14367
                        FROM view_settings vs,
14368
                             view_def vd,
14369
                             views vi,
14370
                             planned rel,
14371
                             package_versions pv
14372
                       WHERE vs.view_id = vi.view_id
14373
                         AND rel.pv_id = pv.pv_id
14374
                         AND vd.pkg_id = pv.pkg_id
14375
                         AND vd.view_id = vi.view_id
14376
                         AND vi.base_view = 'N'
14377
                         AND rel.rtag_id = rtagid
14378
                         AND vs.user_id = userid
14379
                         AND vi.view_id NOT IN (
14380
                                SELECT *
14381
                                  FROM THE
14382
                                          (SELECT CAST
14383
                                                     (in_list_number
14384
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14385
                                                     )
14386
                                             FROM DUAL
14387
                                          ))
14388
                      UNION
14389
                      /* Private Views expanded */
14390
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14391
 
14392
                             --rel.pkg_state,
14393
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14394
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14395
                             pv.pv_description
14396
                        FROM users usr,
14397
                             view_settings vs,
14398
                             view_def vd,
14399
                             views vi,
14400
                             planned rel,
14401
                             PACKAGES pkg,
14402
                             package_versions pv
14403
                       WHERE vs.user_id = usr.user_id
14404
                         AND vs.view_id = vi.view_id
14405
                         AND vd.view_id = vi.view_id
14406
                         AND pv.pkg_id = pkg.pkg_id
14407
                         AND rel.pv_id = pv.pv_id
14408
                         AND rel.rtag_id = rtagid
14409
                         AND vd.pkg_id = pkg.pkg_id
14410
                         AND vi.base_view = 'N'
14411
                         AND vi.view_id IN (
14412
                                SELECT *
14413
                                  FROM THE
14414
                                          (SELECT CAST
14415
                                                     (in_list_number
14416
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14417
                                                     )
14418
                                             FROM DUAL
14419
                                          ))
14420
                         AND usr.user_id = userid) ord
14421
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14422
      END IF;
14423
   END;
14424
 
14425
/*-------------------------------------------------------------------------------------------------------*/
14426
   PROCEDURE get_view_content (
14427
      rtagid      IN       NUMBER,
14428
      viewid      IN       NUMBER,
14429
      recordset   OUT      typecur
14430
   )
14431
   IS
14432
      isbaseview   CHAR (1);
14433
   BEGIN
14434
      -- Check if the view is BASE VIEW
14435
      SELECT vi.base_view
14436
        INTO isbaseview
14437
        FROM views vi
14438
       WHERE vi.view_id = viewid;
14439
 
14440
      IF (isbaseview = 'Y')
14441
      THEN
14442
         -- Get Base view content
14443
         OPEN recordset FOR
14444
            SELECT   DECODE (rel.pkg_state,
14445
                             NULL, 0,
14446
                             rel.pkg_state
14447
                            ) AS pkg_state,
14448
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14449
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14450
                     pv.build_type
14451
                FROM environment_view rel, PACKAGES pkg, package_versions pv
14452
               WHERE pv.pkg_id = pkg.pkg_id
14453
                 AND rel.pv_id = pv.pv_id
14454
                 AND rel.view_id = viewid
14455
                 AND rel.rtag_id = rtagid
14456
            ORDER BY UPPER (pkg.pkg_name);
14457
      ELSE
14458
         -- Get non base view content
14459
         OPEN recordset FOR
14460
            SELECT   DECODE (rel.pkg_state,
14461
                             NULL, 0,
14462
                             rel.pkg_state
14463
                            ) AS pkg_state,
14464
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14465
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14466
                     pv.build_type
14467
                FROM environment_view rel,
14468
                     PACKAGES pkg,
14469
                     package_versions pv,
14470
                     view_def vd
14471
               WHERE pv.pkg_id = pkg.pkg_id
14472
                 AND rel.pv_id = pv.pv_id
14473
                 AND rel.rtag_id = rtagid
14474
                 AND vd.view_id = viewid
14475
                 AND vd.pkg_id = pv.pkg_id
14476
            ORDER BY UPPER (pkg.pkg_name);
14477
      END IF;
14478
   END;
14479
 
14480
/*-------------------------------------------------------------------------------------------------------*/
14481
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
14482
      RETURN NUMBER
14483
   IS
14484
      envtab             NUMBER;
14485
      returnvalue        NUMBER;
14486
      return_not_found   NUMBER := -1;
14487
   BEGIN
14488
      envtab := get_package_area (pvid, rtagid);
14489
 
14490
      IF envtab = 0
14491
      THEN
14492
         -- WORK IN PROGRESS --
14493
         returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
14494
      ELSIF envtab = 1
14495
      THEN
14496
         -- PENDING --
14497
         returnvalue := pk_planned.get_package_view (pvid, rtagid);
14498
      ELSIF envtab = 2
14499
      THEN
14500
         -- RELEASED --
14501
         returnvalue := pk_release.get_package_view (pvid, rtagid);
14502
      ELSE
14503
         -- This may be a Patch not located anywhere but unlocked
14504
         returnvalue := return_not_found;
14505
      END IF;
14506
 
14507
      RETURN returnvalue;
14508
   END;
14509
 
14510
/*-------------------------------------------------------------------------------------------------------*/
14511
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14512
   IS
14513
      viewid          NUMBER;
14514
      envtab          NUMBER;
14515
      ispatch         CHAR (1) := NULL;
14516
      buildtype       CHAR (1) := NULL;
14517
      lastversionid   NUMBER;
14518
   BEGIN
14519
      -- Check if package is patch
14520
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14521
        INTO ispatch, buildtype, lastversionid
14522
        FROM package_versions pv
14523
       WHERE pv.pv_id = pvid;
14524
 
14525
      -- Get ViewId
14526
      viewid := get_package_view (pvid, rtagid);
14527
      -- Remove from current area
14528
      envtab := pk_environment.get_package_area (pvid, rtagid);
14529
 
14530
      -- Make sure that package was in work-in-progress or pending before makeing it release
14531
      -- Exclude patches, ripple builds
14532
      IF (envtab < 0)
14533
      THEN
14534
         -- Not found in work-in-progress or pending
14535
         IF (ispatch IS NULL) AND (buildtype = 'M')
14536
         THEN
14537
            raise_application_error (-20000,
14538
                                     'This package cannot be released here.'
14539
                                    );
14540
         END IF;
14541
      END IF;
14542
 
14543
      -- Log
14544
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14545
 
14546
      IF envtab = 0
14547
      THEN
14548
         -- WORK IN PROGRESS --
14549
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14550
      ELSIF envtab = 1
14551
      THEN
14552
         -- PENDING --
14553
         pk_planned.remove_package (pvid, rtagid, userid);
14554
      END IF;
14555
 
14556
      -- Change package state
14557
      pk_package.change_state (pvid, 'Y', userid);
14558
 
14559
      -- Make sure it is valid BASE VIEW
14560
      IF viewid < 1
14561
      THEN
14562
         viewid := 7;                            -- This is default base view
14563
      END IF;
14564
 
14565
      IF (ispatch IS NULL)
14566
      THEN
14567
         -- Add package to new area
14568
         pk_release.add_package (pvid, viewid, rtagid, userid);
14569
      END IF;
14570
 
14571
      -- Now do post Release Actions
14572
      pk_release.run_post_actions (pvid, rtagid);
14573
 
14574
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14575
      DELETE FROM do_not_ripple
14576
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14577
 
14578
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14579
      DELETE FROM advisory_ripple
14580
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14581
 
14582
      -- Log
14583
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14584
   END;
14585
 
14586
/*-------------------------------------------------------------------------------------------------------*/
14587
   PROCEDURE auto_make_release (
14588
      pvid            IN   NUMBER,
14589
      rtagid          IN   NUMBER,
14590
      userid          IN   NUMBER,
14591
      vext            IN   package_versions.v_ext%TYPE,
14592
      ssv_ext         IN   package_versions.v_ext%TYPE,
14593
      clonefrompvid   IN   NUMBER
14594
   )
14595
   IS
14596
      viewid          NUMBER;
14597
      envtab          NUMBER;
14598
      ispatch         CHAR (1) := NULL;
14599
      buildtype       CHAR (1) := NULL;
14600
      lastversionid   NUMBER;
14601
   BEGIN
14602
      -- Check if package is patch
14603
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14604
        INTO ispatch, buildtype, lastversionid
14605
        FROM package_versions pv
14606
       WHERE pv.pv_id = pvid;
14607
 
14608
      IF vext <> ssv_ext
14609
      THEN
14610
         -- Get ViewId
14611
         viewid := get_package_view (clonefrompvid, rtagid);
14612
         -- Remove from current area
14613
         envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
14614
      ELSE
14615
         -- Get ViewId
14616
         viewid := get_package_view (pvid, rtagid);
14617
         -- Remove from current area
14618
         envtab := pk_environment.get_package_area (pvid, rtagid);
14619
      END IF;
14620
 
14621
      -- Make sure that package was in work-in-progress or pending before makeing it release
14622
      -- Exclude patches, ripple builds
14623
      IF (envtab < 0)
14624
      THEN
14625
         -- Not found in work-in-progress or pending
14626
         IF (ispatch IS NULL) AND (buildtype = 'M')
14627
         THEN
14628
            raise_application_error (-20000,
14629
                                     'This package cannot be released here.'
14630
                                    );
14631
         END IF;
14632
      END IF;
14633
 
14634
      -- Log
14635
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14636
 
14637
      IF vext <> ssv_ext
14638
      THEN
14639
         IF envtab = 0
14640
         THEN
14641
            -- WORK IN PROGRESS --
14642
            pk_work_in_progress.remove_package (clonefrompvid, rtagid,
14643
                                                userid);
14644
         ELSIF envtab = 1
14645
         THEN
14646
            -- PENDING --
14647
            pk_planned.remove_package (clonefrompvid, rtagid, userid);
14648
         ELSIF envtab = 2
14649
         THEN
14650
            -- RELEASED --
14651
            pk_release.remove_package (clonefrompvid, rtagid, userid);
14652
         END IF;
14653
      ELSE
14654
         IF envtab = 0
14655
         THEN
14656
            -- WORK IN PROGRESS --
14657
            pk_work_in_progress.remove_package (pvid, rtagid, userid);
14658
         ELSIF envtab = 1
14659
         THEN
14660
            -- PENDING --
14661
            pk_planned.remove_package (pvid, rtagid, userid);
14662
         END IF;
14663
      END IF;
14664
 
14665
      -- Change package state
14666
      pk_package.change_state (pvid, 'Y', userid);
14667
 
14668
      -- Make sure it is valid BASE VIEW
14669
      IF viewid < 1
14670
      THEN
14671
         viewid := 7;                            -- This is default base view
14672
      END IF;
14673
 
14674
      IF (ispatch IS NULL)
14675
      THEN
14676
         -- Add package to new area
14677
         pk_release.add_package (pvid, viewid, rtagid, userid);
14678
      END IF;
14679
 
14680
      -- Now do post Release Actions
14681
      pk_release.run_post_actions (pvid, rtagid);
14682
      -- Now update the Dash_Board Table
14683
      pk_rmapi.update_dash_board (rtagid);
14684
 
14685
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14686
      DELETE FROM do_not_ripple
14687
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14688
 
14689
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14690
      DELETE FROM advisory_ripple
14691
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14692
 
14693
      -- Log
14694
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14695
   END;
14696
 
14697
/*-------------------------------------------------------------------------------------------------------*/
14698
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14699
   IS
14700
      viewid   NUMBER;
14701
      envtab   NUMBER;
14702
   BEGIN
14703
      -- Get ViewId
14704
      --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
14705
      viewid := get_package_view (pvid, rtagid);
14706
      -- Remove from current area
14707
      envtab := pk_environment.get_package_area (pvid, rtagid);
14708
      -- Log
14709
      log_action (pvid,
14710
                  'action',
14711
                  userid,
14712
                  'Start of Make Package UnRelease...'
14713
                 );
14714
 
14715
      IF envtab = 2
14716
      THEN
14717
         -- RELEASE AREA --
14718
         pk_release.remove_package (pvid, rtagid, userid);
14719
      ELSIF envtab = 1
14720
      THEN
14721
         -- PENDING --
14722
         pk_planned.remove_package (pvid, rtagid, userid);
14723
      END IF;
14724
 
14725
      -- Change package state
14726
      pk_package.change_state (pvid, 'N', userid);
14727
 
14728
      -- Make sure it is valid BASE VIEW
14729
      IF viewid < 1
14730
      THEN
14731
         viewid := 7;                            -- This is default base view
14732
      END IF;
14733
 
14734
      -- Add package to new area
14735
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14736
      -- Now do post Release Actions
14737
      pk_release.run_post_actions (pvid, rtagid);
14738
      -- Log
14739
      log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
14740
   END;
14741
 
14742
/*-------------------------------------------------------------------------------------------------------*/
14743
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14744
   IS
14745
      viewid      NUMBER;
14746
      ispatch     CHAR (1) := NULL;
14747
      buildtype   CHAR (1) := NULL;
14748
   BEGIN
14749
      -- Check if package is patch
14750
      SELECT pv.is_patch, pv.build_type
14751
        INTO ispatch, buildtype
14752
        FROM package_versions pv
14753
       WHERE pv.pv_id = pvid;
14754
 
14755
      -- Get ViewId
14756
      viewid := get_package_view (pvid, rtagid);
14757
      --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
14758
 
14759
      -- Log
14760
      log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
14761
 
14762
      IF (ispatch IS NULL)
14763
      THEN
14764
         -- Remove from current area
14765
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14766
         -- Change package state
14767
         pk_package.change_state (pvid, 'P', userid);
14768
         -- Add package to new area
14769
         pk_planned.add_package (pvid, viewid, rtagid, userid);
14770
      END IF;
14771
 
14772
      -- Log
14773
      log_action (pvid, 'action', userid, 'End of Make Package Pending...');
14774
   END;
14775
 
14776
/*-------------------------------------------------------------------------------------------------------*/
14777
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14778
   IS
14779
   BEGIN
14780
      -- Log
14781
      log_action (pvid,
14782
                  'action',
14783
                  userid,
14784
                  'Start of Package Pending Approval...'
14785
                 );
14786
      -- Change package state
14787
      pk_package.change_state (pvid, 'A', userid);
14788
      -- Log
14789
      log_action (pvid, 'action', userid,
14790
                  'End of Package Pending Approval...');
14791
   END;
14792
 
14793
/*-------------------------------------------------------------------------------------------------------*/
14794
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14795
   IS
14796
      viewid   NUMBER;
14797
   BEGIN
14798
      -- Get ViewId
14799
      viewid := get_package_view (pvid, rtagid);
14800
-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
14801
 
14802
      -- Log
14803
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14804
      -- Remove from current area
14805
      pk_planned.remove_package (pvid, rtagid, userid);
14806
      -- Change package state
14807
      pk_package.change_state (pvid, 'R', userid);
14808
      -- Add package to new area
14809
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14810
      -- Log
14811
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14812
   END;
14813
 
14814
/*-------------------------------------------------------------------------------------------------------*/
14815
   PROCEDURE change_package_view (
14816
      pvid        IN   NUMBER,
14817
      rtagid      IN   NUMBER,
14818
      newviewid   IN   NUMBER
14819
   )
14820
   IS
14821
      envtab   NUMBER;
14822
   BEGIN
14823
      envtab := pk_environment.get_package_area (pvid, rtagid);
14824
 
14825
      IF envtab = 0
14826
      THEN
14827
         -- WORK IN PROGRESS --
14828
         pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
14829
      ELSIF envtab = 1
14830
      THEN
14831
         -- PENDING --
14832
         pk_planned.change_package_view (pvid, rtagid, newviewid);
14833
      ELSIF envtab = 2
14834
      THEN
14835
         -- RELEASED --
14836
         pk_release.change_package_view (pvid, rtagid, newviewid);
14837
      END IF;
14838
   END;
14839
 
14840
/*-------------------------------------------------------------------------------------------------------*/
14841
   PROCEDURE find_package (
14842
      skeyword      IN       VARCHAR2,
14843
      nrtagid       IN       NUMBER,
14844
      nsearcharea   IN       NUMBER,
14845
      recordset     OUT      typecur
14846
   )
14847
   IS
14848
   BEGIN
14849
      IF nsearcharea = 0
14850
      THEN
14851
         /* Search Work In Progress */
14852
         OPEN recordset FOR
14853
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14854
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14855
                     pv.modified_stamp, usr.full_name, usr.user_email
14856
                FROM views vi,
14857
                     work_in_progress rc,
14858
                     PACKAGES pkg,
14859
                     package_versions pv,
14860
                     users usr
14861
               WHERE rc.view_id = vi.view_id
14862
                 AND rc.pv_id = pv.pv_id
14863
                 AND pkg.pkg_id = pv.pkg_id
14864
                 AND pv.modifier_id = usr.user_id
14865
                 AND rc.rtag_id = nrtagid
14866
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14867
            ORDER BY UPPER (pkg.pkg_name);
14868
      ELSIF nsearcharea = 1
14869
      THEN
14870
         /* Search Pending */
14871
         OPEN recordset FOR
14872
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14873
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14874
                     pv.modified_stamp, usr.full_name, usr.user_email
14875
                FROM views vi,
14876
                     planned rc,
14877
                     PACKAGES pkg,
14878
                     package_versions pv,
14879
                     users usr
14880
               WHERE rc.view_id = vi.view_id
14881
                 AND rc.pv_id = pv.pv_id
14882
                 AND pkg.pkg_id = pv.pkg_id
14883
                 AND pv.modifier_id = usr.user_id
14884
                 AND rc.rtag_id = nrtagid
14885
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14886
            ORDER BY UPPER (pkg.pkg_name);
14887
      ELSIF nsearcharea = 2
14888
      THEN
14889
         /* Search Released */
14890
         OPEN recordset FOR
14891
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14892
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14893
                     pv.modified_stamp, usr.full_name, usr.user_email
14894
                FROM views vi,
14895
                     release_content rc,
14896
                     PACKAGES pkg,
14897
                     package_versions pv,
14898
                     users usr
14899
               WHERE rc.base_view_id = vi.view_id
14900
                 AND rc.pv_id = pv.pv_id
14901
                 AND pkg.pkg_id = pv.pkg_id
14902
                 AND pv.modifier_id = usr.user_id
14903
                 AND rc.rtag_id = nrtagid
14904
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14905
            ORDER BY UPPER (pkg.pkg_name);
14906
      ELSIF nsearcharea = 3
14907
      THEN
14908
         /* Search ALL */
14909
         OPEN recordset FOR
14910
            SELECT   rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
14911
                     pv.pv_id, pv.pkg_version, pv.comments,
14912
                     pv.modified_stamp, usr.full_name, usr.user_email
14913
                FROM views vi,
14914
                     environment_view rc,
14915
                     PACKAGES pkg,
14916
                     package_versions pv,
14917
                     users usr
14918
               WHERE rc.view_id = vi.view_id
14919
                 AND rc.pv_id = pv.pv_id
14920
                 AND pkg.pkg_id = pv.pkg_id
14921
                 AND pv.modifier_id = usr.user_id
14922
                 AND rc.rtag_id = nrtagid
14923
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14924
            ORDER BY UPPER (pkg.pkg_name);
14925
      END IF;
14926
   END;
14927
 
14928
/*-------------------------------------------------------------------------------------------------------*/
14929
   PROCEDURE find_file (
14930
      skeyword      IN       VARCHAR2,
14931
      nrtagid       IN       NUMBER,
14932
      nsearcharea   IN       NUMBER,
14933
      npagesize     IN       NUMBER,
14934
      recordset     OUT      typecur
14935
   )
14936
   IS
14937
   BEGIN
14938
      IF nsearcharea = 0
14939
      THEN
14940
         /* Search Work In Progress */
14941
         OPEN recordset FOR
14942
            SELECT   qry.*
14943
                FROM (
14944
                      /* File search on Packages */
14945
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14946
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14947
                        FROM work_in_progress rc,
14948
                             PACKAGES pkg,
14949
                             package_versions pv,
14950
                             release_components art
14951
                       WHERE rc.pv_id = art.pv_id
14952
                         AND pv.pkg_id = pkg.pkg_id
14953
                         AND rc.pv_id = pv.pv_id
14954
                         AND rc.rtag_id = nrtagid
14955
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14956
                      UNION ALL
14957
                      /* File search on Products */
14958
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14959
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14960
                        FROM work_in_progress rc,
14961
                             PACKAGES pkg,
14962
                             package_versions pv,
14963
                             product_components art
14964
                       WHERE rc.pv_id = art.pv_id
14965
                         AND pv.pkg_id = pkg.pkg_id
14966
                         AND rc.pv_id = pv.pv_id
14967
                         AND rc.rtag_id = nrtagid
14968
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
14969
               WHERE ROWNUM <= npagesize
14970
            ORDER BY UPPER (qry.pkg_name);
14971
      ELSIF nsearcharea = 1
14972
      THEN
14973
         /* Search Pending */
14974
         OPEN recordset FOR
14975
            SELECT   qry.*
14976
                FROM (
14977
                      /* File search on Packages */
14978
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14979
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14980
                        FROM planned rc,
14981
                             PACKAGES pkg,
14982
                             package_versions pv,
14983
                             release_components art
14984
                       WHERE rc.pv_id = art.pv_id
14985
                         AND pv.pkg_id = pkg.pkg_id
14986
                         AND rc.pv_id = pv.pv_id
14987
                         AND rc.rtag_id = nrtagid
14988
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14989
                      UNION ALL
14990
                      /* File search on Products */
14991
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14992
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14993
                        FROM planned rc,
14994
                             PACKAGES pkg,
14995
                             package_versions pv,
14996
                             product_components art
14997
                       WHERE rc.pv_id = art.pv_id
14998
                         AND pv.pkg_id = pkg.pkg_id
14999
                         AND rc.pv_id = pv.pv_id
15000
                         AND rc.rtag_id = nrtagid
15001
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15002
               WHERE ROWNUM <= npagesize
15003
            ORDER BY UPPER (qry.pkg_name);
15004
      ELSIF nsearcharea = 2
15005
      THEN
15006
         /* Search Released */
15007
         OPEN recordset FOR
15008
            SELECT   qry.*
15009
                FROM (
15010
                      /* File search on Packages */
15011
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15012
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15013
                             NULL AS patch_id
15014
                        FROM release_content rc,
15015
                             PACKAGES pkg,
15016
                             package_versions pv,
15017
                             release_components art
15018
                       WHERE rc.pv_id = art.pv_id
15019
                         AND pv.pkg_id = pkg.pkg_id
15020
                         AND rc.pv_id = pv.pv_id
15021
                         AND rc.rtag_id = nrtagid
15022
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15023
                      UNION ALL
15024
                      /* File search on Products */
15025
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15026
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15027
                             NULL AS patch_id
15028
                        FROM release_content rc,
15029
                             PACKAGES pkg,
15030
                             package_versions pv,
15031
                             product_components art
15032
                       WHERE rc.pv_id = art.pv_id
15033
                         AND pv.pkg_id = pkg.pkg_id
15034
                         AND rc.pv_id = pv.pv_id
15035
                         AND rc.rtag_id = nrtagid
15036
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15037
                      UNION ALL
15038
                      /* File search on Patches */
15039
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15040
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15041
                             DECODE (art.file_path,
15042
                                     NULL, pp.patch_id,
15043
                                     NULL
15044
                                    ) AS patch_id
15045
                        FROM release_content rc,
15046
                             PACKAGES pkg,
15047
                             package_versions pv,
15048
                             release_components art,
15049
                             package_patches pp
15050
                       WHERE pv.pv_id = pp.pv_id
15051
                         AND pv.pkg_id = pkg.pkg_id
15052
                         AND rc.rtag_id = nrtagid
15053
                         AND art.pv_id = pp.patch_id
15054
                         AND rc.pv_id = pp.pv_id
15055
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15056
               WHERE ROWNUM <= npagesize
15057
            ORDER BY UPPER (qry.pkg_name);
15058
      ELSIF nsearcharea = 3
15059
      THEN
15060
         /* Search ALL */
15061
         OPEN recordset FOR
15062
            SELECT   qry.*
15063
                FROM (
15064
                      /* File search on Packages */
15065
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15066
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15067
                             NULL AS patch_id
15068
                        FROM environment_view rc,
15069
                             PACKAGES pkg,
15070
                             package_versions pv,
15071
                             release_components art
15072
                       WHERE rc.pv_id = art.pv_id
15073
                         AND pv.pkg_id = pkg.pkg_id
15074
                         AND rc.pv_id = pv.pv_id
15075
                         AND rc.rtag_id = nrtagid
15076
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15077
                      UNION ALL
15078
                      /* File search on Products */
15079
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15080
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15081
                             NULL AS patch_id
15082
                        FROM environment_view rc,
15083
                             PACKAGES pkg,
15084
                             package_versions pv,
15085
                             product_components art
15086
                       WHERE rc.pv_id = art.pv_id
15087
                         AND pv.pkg_id = pkg.pkg_id
15088
                         AND rc.pv_id = pv.pv_id
15089
                         AND rc.rtag_id = nrtagid
15090
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15091
                      UNION ALL
15092
                      /* File search on Patches */
15093
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15094
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15095
                             DECODE (art.file_path,
15096
                                     NULL, pp.patch_id,
15097
                                     NULL
15098
                                    ) AS patch_id
15099
                        FROM release_content rc,
15100
                             PACKAGES pkg,
15101
                             package_versions pv,
15102
                             release_components art,
15103
                             package_patches pp
15104
                       WHERE pv.pv_id = pp.pv_id
15105
                         AND pv.pkg_id = pkg.pkg_id
15106
                         AND rc.rtag_id = nrtagid
15107
                         AND art.pv_id = pp.patch_id
15108
                         AND rc.pv_id = pp.pv_id
15109
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15110
               WHERE ROWNUM <= npagesize
15111
            ORDER BY UPPER (qry.pkg_name);
15112
      END IF;
15113
   END;
15114
 
15115
/*-------------------------------------------------------------------------------------------------------*/
15116
   PROCEDURE get_prodrelease_items (
15117
      rtagid             IN       NUMBER,
15118
      ntruerecordcount   OUT      NUMBER,
15119
      recordset          OUT      typecur
15120
   )
15121
   IS
15122
   BEGIN
15123
      -- Get true record count n the number of integration products
15124
      SELECT COUNT (rc.pv_id)
15125
        INTO ntruerecordcount
15126
        FROM release_content rc
15127
       WHERE rc.rtag_id = rtagid;
15128
 
15129
      OPEN recordset FOR
15130
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,    --rel.pkg_state,
15131
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15132
                  pv.pkg_version, pv.dlocked, pv.pv_description
15133
             FROM release_content rel,
15134
                  PACKAGES pkg,
15135
                  package_versions pv,
15136
                  views vi
15137
            WHERE pv.pkg_id = pkg.pkg_id
15138
              AND rel.pv_id = pv.pv_id
15139
              AND rel.base_view_id = vi.view_id
15140
              AND pv.is_deployable = 'Y'
15141
              AND rtag_id = rtagid
15142
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15143
                                              FROM deployment_manager.os_contents)
15144
              AND rel.product_state IS NULL
15145
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15146
   END;
15147
 
15148
/*-------------------------------------------------------------------------------------------------------*/
15149
   PROCEDURE get_integration_items (
15150
      rtagid             IN       NUMBER,
15151
      ntruerecordcount   OUT      NUMBER,
15152
      recordset          OUT      typecur
15153
   )
15154
   IS
15155
   BEGIN
15156
      -- Get true record count n the number of integration products
15157
      SELECT COUNT (rc.pv_id)
15158
        INTO ntruerecordcount
15159
        FROM release_content rc
15160
       WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
15161
 
15162
      OPEN recordset FOR
15163
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15164
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15165
                  pv.pkg_version, pv.dlocked, pv.pv_description
15166
             FROM release_content rel,
15167
                  PACKAGES pkg,
15168
                  package_versions pv,
15169
                  views vi
15170
            WHERE pv.pkg_id = pkg.pkg_id
15171
              AND rel.pv_id = pv.pv_id
15172
              AND rel.base_view_id = vi.view_id
15173
              AND pv.is_deployable = 'Y'
15174
              AND rtag_id = rtagid
15175
              AND rel.product_state IN (1, 5)
15176
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15177
   END;
15178
 
15179
/*-------------------------------------------------------------------------------------------------------*/
15180
   PROCEDURE get_test_items (
15181
      rtagid             IN       NUMBER,
15182
      ntruerecordcount   OUT      NUMBER,
15183
      recordset          OUT      typecur
15184
   )
15185
   IS
15186
   BEGIN
15187
      -- Get true record count n the number of test products
15188
      SELECT COUNT (rc.pv_id)
15189
        INTO ntruerecordcount
15190
        FROM release_content rc
15191
       WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
15192
 
15193
      OPEN recordset FOR
15194
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15195
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15196
                  pv.pkg_version, pv.dlocked, pv.pv_description
15197
             FROM release_content rel,
15198
                  PACKAGES pkg,
15199
                  package_versions pv,
15200
                  views vi
15201
            WHERE pv.pkg_id = pkg.pkg_id
15202
              AND rel.pv_id = pv.pv_id
15203
              AND rel.base_view_id = vi.view_id
15204
              AND pv.is_deployable = 'Y'
15205
              AND rtag_id = rtagid
15206
              AND rel.product_state = 2
15207
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15208
   END;
15209
 
15210
/*-------------------------------------------------------------------------------------------------------*/
15211
   PROCEDURE get_deploy_items (
15212
      rtagid             IN       NUMBER,
15213
      ntruerecordcount   OUT      NUMBER,
15214
      recordset          OUT      typecur
15215
   )
15216
   IS
15217
   BEGIN
15218
      -- Get true record count n the number of deploy products
15219
      SELECT COUNT (rc.pv_id)
15220
        INTO ntruerecordcount
15221
        FROM release_content rc
15222
       WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
15223
 
15224
      OPEN recordset FOR
15225
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15226
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15227
                  pv.pkg_version, pv.dlocked, pv.pv_description
15228
             FROM release_content rel,
15229
                  PACKAGES pkg,
15230
                  package_versions pv,
15231
                  views vi
15232
            WHERE pv.pkg_id = pkg.pkg_id
15233
              AND rel.pv_id = pv.pv_id
15234
              AND rel.base_view_id = vi.view_id
15235
              AND pv.is_deployable = 'Y'
15236
              AND rtag_id = rtagid
15237
              AND rel.product_state IN (3, 5)
15238
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15239
                                              FROM deployment_manager.os_contents)
15240
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15241
   END;
15242
 
15243
/*-------------------------------------------------------------------------------------------------------*/
15244
   PROCEDURE get_reject_items (
15245
      rtagid             IN       NUMBER,
15246
      ntruerecordcount   OUT      NUMBER,
15247
      recordset          OUT      typecur
15248
   )
15249
   IS
15250
   BEGIN
15251
      -- Get true record count n the number of reject products
15252
      SELECT COUNT (rc.pv_id)
15253
        INTO ntruerecordcount
15254
        FROM release_content rc
15255
       WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
15256
 
15257
      OPEN recordset FOR
15258
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15259
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15260
                  pv.pkg_version, pv.dlocked, pv.pv_description
15261
             FROM release_content rel,
15262
                  PACKAGES pkg,
15263
                  package_versions pv,
15264
                  views vi
15265
            WHERE pv.pkg_id = pkg.pkg_id
15266
              AND rel.pv_id = pv.pv_id
15267
              AND rel.base_view_id = vi.view_id
15268
              AND pv.is_deployable = 'Y'
15269
              AND rtag_id = rtagid
15270
              AND rel.product_state = 4
15271
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15272
   END;
15273
/*-------------------------------------------------------------------------------------------------------*/
15274
END pk_environment_test;
1374 dpurdie 15275
/
15276
--------------------------------------------------------
15277
--  DDL for Package Body PK_BUILDAPI_TEST
15278
--------------------------------------------------------
1373 dpurdie 15279
 
15280
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI_TEST" IS
15281
 
15282
/*
15283
------------------------------
15284
||  Last Modified:  S.Vukovic
15285
||  Modified Date:  30/Mar/2005
15286
||  Body Version:   1.0
15287
------------------------------
15288
*/
15289
 
15290
 
15291
/*-------------------------------------------------------------------------------------------------------*/
15292
PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
15293
								  sOsName IN VARCHAR2,
15294
								  sOrigFilePath IN VARCHAR2,
15295
								  sFileName IN VARCHAR2,
15296
								  sDestFilePath IN VARCHAR2,
15297
								  nByteSize IN NUMBER,
15298
								  sCRCcksum IN VARCHAR2 ) IS
15299
 
15300
	nOsId NUMBER;
15301
 
15302
BEGIN
15303
	/*--------------- Business Rules Here -------------------*/
15304
	-- OS Name Requirements --
15305
	IF (sOsName IS NULL) THEN
15306
		RAISE_APPLICATION_ERROR (-20000, 'OsName cannot be NULL.');
15307
	END IF;
15308
 
15309
 
15310
	-- File Requirements --
15311
	IF (NOT sFileName IS NULL) THEN
15312
 
15313
		IF (nByteSize IS NULL) THEN
15314
			RAISE_APPLICATION_ERROR (-20000, 'Byte Size cannot be NULL.');
15315
 
15316
		ELSIF (sCRCcksum IS NULL) THEN
15317
			RAISE_APPLICATION_ERROR (-20000, 'CRC CKSUM cannot be NULL.');
15318
 
15319
		END IF;
15320
 
15321
	END IF;
15322
 
15323
 
15324
	-- Folder Requirements --
15325
	-- No requirements for now.
15326
 
15327
	/*-------------------------------------------------------*/
15328
 
15329
	-- Get OsId
15330
	nOsId := Get_OsId ( sOsName );
15331
 
15332
 
15333
	-- Insert component entry
15334
	INSERT INTO PRODUCT_COMPONENTS ( PV_ID, OS_ID, FILE_PATH, FILE_NAME, DESTINATION_PATH, BYTE_SIZE, CRC_CKSUM )
15335
    VALUES (
15336
			  nPvId,
15337
			  nOsId,
15338
			  sOrigFilePath,
15339
			  sFileName,
15340
			  sDestFilePath,
15341
			  nByteSize,
15342
			  sCRCcksum
15343
			);
15344
 
15345
 
15346
	EXCEPTION
15347
    WHEN DUP_VAL_ON_INDEX
15348
	THEN
15349
		RAISE_APPLICATION_ERROR (-20000, 'Cannot have duplicate product components.');
15350
 
15351
END;
15352
/*-------------------------------------------------------------------------------------------------------*/
15353
PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 ) IS
15354
 
15355
	nOsId NUMBER;
15356
 
15357
BEGIN
15358
	/*--------------- Business Rules Here -------------------*/
15359
	/*-------------------------------------------------------*/
15360
 
15361
	-- Get OsId
15362
	nOsId := Get_OsId ( sOsName );
15363
 
15364
 
15365
	-- Delete component entry
15366
	DELETE
15367
	  FROM PRODUCT_COMPONENTS pc
15368
	 WHERE pc.PV_ID = nPvId
15369
	   AND pc.OS_ID = nOsId;
15370
 
15371
 
15372
END;
15373
/*-------------------------------------------------------------------------------------------------------*/
15374
FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER IS
15375
	Code NUMBER;
15376
 
15377
BEGIN
15378
 
15379
	-- Get Platform Code --
15380
	SELECT pf.CODE INTO Code
15381
	  FROM PLATFORMS pf
15382
	 WHERE UPPER( pf.NAME ) = UPPER( sOsName );
15383
 
15384
 
15385
	RETURN Code;	   
15386
 
15387
	EXCEPTION
15388
    	WHEN NO_DATA_FOUND THEN
15389
       		RAISE_APPLICATION_ERROR (-20000, 'Platform '|| sOsName ||' is not valid. It needs to be added to PLATFORMS table in Release Manager.' );
15390
   	RAISE;
15391
END;
15392
/*-------------------------------------------------------------------------------------------------------*/
15393
PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
15394
			  					 sWebServer IN VARCHAR2,
15395
								 sMailServer IN VARCHAR2,
15396
								 sMailSender IN VARCHAR2) IS
15397
 
15398
BEGIN
15399
 
15400
 
15401
	 UPDATE BUILD_SERVICE_CONFIG
15402
	 SET CONFIG = sDatabaseServer
15403
	 WHERE SERVICE = 'DATABASE SERVER'; 
15404
 
15405
	 UPDATE BUILD_SERVICE_CONFIG
15406
	 SET CONFIG = sWebServer
15407
	 WHERE SERVICE = 'WEB SERVER'; 
15408
 
15409
	 UPDATE BUILD_SERVICE_CONFIG
15410
	 SET CONFIG = sMailServer
15411
	 WHERE SERVICE = 'MAIL SERVER'; 
15412
 
15413
	 UPDATE BUILD_SERVICE_CONFIG
15414
	 SET CONFIG = sMailSender
15415
	 WHERE SERVICE = 'BUILD FAILURE MAIL SENDER'; 	 	 									 
15416
 
15417
 
15418
 
15419
END;
15420
/*-------------------------------------------------------------------------------------------------------*/
15421
PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue in VARCHAR2 ) IS
15422
 
15423
GBE_ID NUMBER;
15424
 
15425
BEGIN
15426
 
15427
	-- Get GBE_ID
15428
	SELECT SEQ_GBE_ID.NEXTVAL INTO GBE_ID FROM DUAL;
15429
 
15430
	INSERT INTO GBE_MACHTYPE (GBE_ID, GBE_VALUE)
15431
	VALUES( GBE_ID, sGBEValue);
15432
 
15433
 
15434
END;
15435
/*-------------------------------------------------------------------------------------------------------*/
15436
PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER ) IS
15437
 
15438
BEGIN
15439
 
15440
	 DELETE FROM GBE_MACHTYPE WHERE GBE_ID = nGBE_ID;
15441
 
15442
END;
15443
/*-------------------------------------------------------------------------------------------------------*/
15444
PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 ) IS
15445
 
15446
BEGIN
15447
 
15448
	 UPDATE GBE_MACHTYPE
15449
	 SET GBE_VALUE = sGBEValue 
15450
	 WHERE GBE_ID = nGBE_ID;
15451
 
15452
 
15453
END;
15454
/*-------------------------------------------------------------------------------------------------------*/
15455
PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER ) IS
15456
 
15457
nRecordNumber NUMBER;
15458
nRconId NUMBER;
15459
BEGIN
15460
	-- Get RCON_ID
15461
	SELECT SEQ_RCON_ID.NEXTVAL INTO nRconId FROM DUAL; 
15462
 
15463
        SELECT count(*) INTO nRecordNumber 
15464
        FROM RELEASE_CONFIG
15465
        WHERE RTAG_ID = nRtagId;
15466
 
15467
        IF nRecordNumber = 0 THEN
15468
       	   INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15469
           VALUES (nRconId, nRtagId, sDaemonHostname, 'M', nGbeId);
15470
        ELSE
15471
        	INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15472
        	VALUES (nRconId, nRtagId, sDaemonHostname, 'S', nGbeId);
15473
        END IF;
15474
 
15475
 
15476
 
15477
END;
15478
/*-------------------------------------------------------------------------------------------------------*/        
15479
END PK_BUILDAPI_TEST;
1374 dpurdie 15480
/
15481
--------------------------------------------------------
15482
--  DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO
15483
--------------------------------------------------------
1373 dpurdie 15484
 
15485
  CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (
15486
   nprojid     IN   NUMBER,
15487
   nviewid     IN   NUMBER,
15488
   suserlist   IN   VARCHAR2
15489
)
15490
IS
15491
   groupid   NUMBER;
15492
/******************************************************************************
15493
   NAME:       ADD_AUTOBUILD_FAILURE
15494
   PURPOSE:
15495
 
15496
   REVISIONS:
15497
   Ver        Date        Author           Description
15498
   ---------  ----------  ---------------  ------------------------------------
15499
   1.0        11/04/2006   Rupesh Solanki Created this procedure.
15500
 
15501
   NOTES:
15502
 
15503
   Automatically available Auto Replace Keywords:
15504
      Object Name:     ADD_AUTOBUILD_FAILURE
15505
      Sysdate:         11/04/2006
15506
      Date and Time:   11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AM
15507
      Username:         (set in TOAD Options, Procedure Editor)
15508
      Table Name:       (set in the "New PL/SQL Object" dialog)
15509
 
15510
******************************************************************************/
15511
BEGIN
15512
   BEGIN
15513
      SELECT group_email_id
15514
        INTO groupid
15515
        FROM autobuild_failure
15516
       WHERE proj_id = nprojid AND view_id = nviewid;
15517
   EXCEPTION
15518
      WHEN NO_DATA_FOUND
15519
      THEN
15520
         --  Create Next Sequence Id ---
15521
         SELECT seq_group_email_id.NEXTVAL
15522
           INTO groupid
15523
           FROM DUAL;
15524
 
15525
         INSERT INTO autobuild_failure
15526
                     (group_email_id, proj_id, view_id
15527
                     )
15528
              VALUES (groupid, nprojid, nviewid
15529
                     );
15530
   END;
15531
 
15532
   add_view_members (groupid, suserlist);
15533
END add_autobuild_failure_info;
1374 dpurdie 15534
/
15535
--------------------------------------------------------
15536
--  DDL for Procedure DEPRECATE_PACKAGE
15537
--------------------------------------------------------
1373 dpurdie 15538
 
15539
  CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
15540
	   	  		  							   nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
15541
	   	  		  							   nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
15542
											   sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,
15543
											   nUserId IN NUMBER) IS
15544
ext VARCHAR2(50);
15545
 
15546
 
15547
 
15548
 
15549
BEGIN
15550
 
15551
	--Extract the package version extension
15552
	SELECT V_EXT into ext
15553
	FROM PACKAGE_VERSIONS
15554
	WHERE PV_ID = nPvId; 
15555
 
15556
    -- Deprecate Package
15557
    INSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)
15558
	VALUES (nRtagId, nPkgId, sComments, ext);
15559
 
15560
	IF ext IS NOT NULL THEN
15561
	   UPDATE RELEASE_CONTENT 
15562
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15563
	   WHERE RTAG_ID = nRtagId
15564
	   AND PV_ID IN (SELECT PV.PV_ID 
15565
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15566
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15567
				  	AND PV.V_EXT = ext
15568
				  	AND PKG.PKG_ID = nPkgId
15569
				 	);						
15570
	ELSE
15571
	   UPDATE RELEASE_CONTENT 
15572
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15573
	   WHERE RTAG_ID = nRtagId
15574
	   AND PV_ID IN (SELECT PV.PV_ID 
15575
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15576
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15577
				  	AND PV.V_EXT IS NULL
15578
				  	AND PKG.PKG_ID = nPkgId
15579
				 	);
15580
	END IF;
15581
 
15582
	UPDATE RELEASE_CONTENT
15583
	SET PKG_ID = nPkgId, DEPRECATED_STATE = 7
15584
	WHERE RTAG_ID = nRtagId
15585
	AND PV_ID IN (		   SELECT DISTINCT
15586
 	 		  	 		   qry.PV_ID
15587
						        FROM (
15588
								 	  SELECT dep.*,
15589
									  LEVEL AS LEVEL_NUM
15590
									  FROM PACKAGE_DEPENDENCIES dep 
15591
 								START WITH dep.DPV_ID IN ( nPvId ) 
15592
								CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
15593
 								) qry,
15594
								PACKAGES pkg,
15595
								PACKAGE_VERSIONS pv,
15596
								RELEASE_CONTENT rc
15597
						 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
15598
							 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
15599
							 AND rc.DEPRECATED_STATE IS NULL
15600
				 );			 
15601
 
15602
    /* LOG ACTION */
15603
   	/*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/
15604
 
15605
 
15606
END Deprecate_Package;
1374 dpurdie 15607
/
15608
--------------------------------------------------------
15609
--  DDL for Procedure LOG_PROJECT_ACTION
15610
--------------------------------------------------------
1373 dpurdie 15611
 
15612
  CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,
15613
												 enumActionTypeName IN VARCHAR2,
15614
		                                         nUserId IN NUMBER,
15615
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL,
15616
												 nRtagId IN NUMBER  ) IS
15617
/* ---------------------------------------------------------------------------
15618
    Version: 3.0
15619
   --------------------------------------------------------------------------- */
15620
 
15621
    ActionTypeId NUMBER;
15622
 
15623
BEGIN
15624
 
15625
    -- Get Action Type FK
15626
    SELECT act.ACTTYPE_ID INTO ActionTypeId
15627
      FROM ACTION_TYPE act
15628
     WHERE act.NAME = enumActionTypeName;
15629
 
15630
 
15631
    INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)
15632
    VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);
15633
 
15634
 
15635
END Log_Project_Action;
1374 dpurdie 15636
/
15637
--------------------------------------------------------
15638
--  DDL for Procedure RIPPLE_PACKAGE
15639
--------------------------------------------------------
1373 dpurdie 15640
 
15641
  CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (
15642
        sPvIdList IN VARCHAR2,
15643
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
15644
        nUserId IN NUMBER
15645
    ) IS
15646
/* ---------------------------------------------------------------------------
15647
    Version: 4.1
15648
   --------------------------------------------------------------------------- */
15649
 
15650
BEGIN
15651
 
15652
    IF (sPvIdList IS NULL) THEN
15653
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
15654
    END IF;
15655
 
15656
    -- Ripple Package
15657
    DELETE FROM DO_NOT_RIPPLE
15658
    WHERE RTAG_ID = nRtagId
15659
    AND PV_ID IN (
15660
        SELECT *
15661
        FROM THE (
15662
            SELECT CAST( IN_LIST_NUMBER( sPvIdList )
15663
            AS RELMGR_NUMBER_TAB_t )
15664
            FROM DUAL
15665
        )
15666
    );
15667
 
15668
    /* LOG ACTION */
15669
    Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );
15670
 
15671
END Ripple_Package;
1374 dpurdie 15672
/
15673
--------------------------------------------------------
15674
--  DDL for Procedure DT_SETPROPERTYBYID
15675
--------------------------------------------------------
1373 dpurdie 15676
 
15677
  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 15678
/
15679
--------------------------------------------------------
15680
--  DDL for Procedure BASIC_CLONE
15681
--------------------------------------------------------
1373 dpurdie 15682
 
15683
  CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,
15684
                        nTOpv_id IN NUMBER,
15685
                        nRtag_id IN NUMBER,
15686
                        nUser_id IN NUMBER,
15687
                        nTOpkg_id IN NUMBER DEFAULT NULL,
15688
                        enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) IS
15689
 
15690
   FromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
15691
   major NUMBER;
15692
   minor NUMBER;
15693
   patch NUMBER;
15694
   buildn NUMBER;
15695
   from_vcs_type_id NUMBER;
15696
BEGIN
15697
------------------------------ Version Control System ------------------------------------------
15698
   SELECT vcs_type_id
15699
      INTO from_vcs_type_id
15700
      FROM package_versions WHERE pv_id = nFROMpv_id;
15701
 
15702
   UPDATE package_versions
15703
      SET vcs_type_id = from_vcs_type_id
15704
      WHERE pv_id = nTOpv_id;
15705
------------------------------------- Limits ---------------------------------------------------
15706
   select major_limit, minor_limit, patch_limit, build_number_limit
15707
   into major, minor, patch, buildn
15708
   from package_versions where pv_id=nFROMpv_id;
15709
    UPDATE package_versions SET
15710
           major_limit = major,
15711
           minor_limit = minor,
15712
           patch_limit = patch,
15713
           build_number_limit = buildn
15714
     WHERE PV_ID = nTOpv_id;
15715
------------------------------------- Clone Dependencies ---------------------------------------------------
15716
   IF NOT nRtag_id IS NULL
15717
   THEN
15718
      -- Auto Update Dependencies --
15719
      INSERT INTO PACKAGE_DEPENDENCIES
15720
           SELECT nTOpv_id AS pv_id,
15721
                  DECODE(nUser_id,
15722
                         frc.modifier_id,
15723
                         frc.pv_id,
15724
                         DECODE(frc.dlocked,
15725
                                'Y',
15726
                                frc.pv_id,
15727
                                dep.dpv_id)
15728
                         ) AS dpv_id,
15729
                  nTOpkg_id AS pkg_id,
15730
                  dep.dpkg_id,
15731
                  dep.build_type,
15732
                  dep.display_order
15733
             FROM PACKAGE_DEPENDENCIES dep,
15734
                  PACKAGE_VERSIONS pv,
15735
                  (
15736
                  /* Full Release Contents used for reference*/
15737
                  SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlocked
15738
                  FROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpv
15739
                  WHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id
15740
                  ) frc
15741
            WHERE dep.pv_id = nFROMpv_id
15742
              AND dep.dpv_id = pv.pv_id
15743
              AND pv.pkg_id = frc.pkg_id(+)
15744
              AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);
15745
   ELSE
15746
      -- Clone Dependencies --
15747
      INSERT INTO PACKAGE_DEPENDENCIES
15748
           SELECT nTOpv_id         AS pv_id,
15749
                  dep.dpv_id,
15750
                  nTOpkg_id        AS pkg_id,
15751
                  dep.dpkg_id,
15752
                  dep.build_type,
15753
                  dep.display_order
15754
             FROM PACKAGE_DEPENDENCIES dep
15755
            WHERE dep.pv_id = nFROMpv_id;
15756
 
15757
   END IF;
15758
 
15759
----------------------------------------- Clone Issues -------------------------------------------------------
15760
   IF enumISSUES_STATE_IMPORTED IS NULL
15761
   THEN
15762
        /* All Issues */
15763
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15764
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15765
              FROM CQ_ISSUES
15766
             WHERE pv_id = nFROMpv_id;
15767
   ELSE
15768
       /* Outstanding Issues Only */
15769
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15770
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15771
              FROM CQ_ISSUES
15772
             WHERE pv_id = nFROMpv_id
15773
               AND iss_state = enumISSUES_STATE_IMPORTED;
15774
   END IF;
15775
 
15776
------------------------------------ Clone Runtime Dependencies -----------------------------------------------
15777
   INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)
15778
       SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user
15779
       FROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;
15780
 
15781
--------------------------------------- Clone Additional Notes ------------------------------------------------
15782
   INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )
15783
        SELECT an.NOTE_ID,
15784
               nTOpv_id AS PV_ID,
15785
               an.NOTE_TITLE,
15786
               an.NOTE_BODY,
15787
               an.MOD_DATE,
15788
               an.MOD_USER
15789
          FROM ADDITIONAL_NOTES an
15790
         WHERE an.PV_ID = nFROMpv_id;
15791
 
15792
-------------------------------------------- Clone Unit Tests -------------------------------------------------
15793
   -- Clone only Automatic unit tests --
15794
   INSERT INTO UNIT_TESTS (
15795
                           TEST_ID,
15796
                           PV_ID,
15797
                           TEST_TYPES_FK,
15798
                           TEST_SUMMARY,
15799
                           COMPLETION_DATE,
15800
                           COMPLETED_BY,
15801
                           RESULTS_URL,
15802
                           RESULTS_ATTACHMENT_NAME,
15803
                           NUMOF_TEST
15804
                          )
15805
        SELECT ut.TEST_ID,
15806
               nTOpv_id AS PV_ID,
15807
               ut.TEST_TYPES_FK,
15808
               ut.TEST_SUMMARY,
15809
               Ora_Sysdate AS COMPLETION_DATE,
15810
               nUser_id AS COMPLETED_BY,
15811
               ut.RESULTS_URL,
15812
               ut.RESULTS_ATTACHMENT_NAME,
15813
               ut.NUMOF_TEST
15814
          FROM UNIT_TESTS ut
15815
         WHERE ut.PV_ID = nFROMpv_id
15816
           AND ut.TEST_TYPES_FK IN ( 5, 7 );
15817
 
15818
    -- Clone only Interactive Unit Tests --
15819
    INSERT INTO UNIT_TESTS (
15820
                            TEST_ID,
15821
                            PV_ID,
15822
                            TEST_TYPES_FK,
15823
                            TEST_SUMMARY
15824
                           )
15825
       SELECT ut.TEST_ID,
15826
              nTOpv_id AS PV_ID,
15827
              ut.TEST_TYPES_FK,
15828
              ut.TEST_SUMMARY
15829
         FROM UNIT_TESTS ut
15830
        WHERE ut.PV_ID = nFROMpv_id
15831
          AND ut.TEST_TYPES_FK IN (6);
15832
 
15833
-------------------------------------------- Clone Package Documents ------------------------------------------
15834
   INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )
15835
        SELECT nTOpv_id AS PV_ID,
15836
               pd.test_id,
15837
               pd.doc_num,
15838
               pd.doc_id,
15839
               pd.IS_LATEST
15840
          FROM PACKAGE_DOCUMENTS pd
15841
         WHERE pd.PV_ID = nFROMpv_id;
15842
 
15843
-------------------------------------------- Clone Build Environments -----------------------------------------
15844
    INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )
15845
    SELECT nTOpv_id AS PV_ID,
15846
           pkgbe.BE_ID,
15847
           pkgbe.BUILD_TYPE
15848
      FROM PACKAGE_BUILD_ENV pkgbe
15849
     WHERE pkgbe.PV_ID = nFROMpv_id;
15850
---------------------------------------------Clone Package Build Info------------------------------------------
15851
    INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)
15852
    SELECT nTOpv_id AS PV_ID,
15853
           pkgbinfo.BM_ID,
15854
           pkgbinfo.BSA_ID
15855
      FROM PACKAGE_BUILD_INFO pkgbinfo
15856
     WHERE pkgbinfo.PV_ID = nFROMpv_id;
15857
---------------------------------------------Clone Package Version Processes-----------------------------------
15858
    INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )
15859
    SELECT nTOpv_id AS PV_ID,
15860
           pp.PROC_ID
15861
      FROM PACKAGE_PROCESSES pp
15862
     WHERE pp.PV_ID = nFROMpv_id;
15863
---------------------------------------------Clone Licencing Associations-----------------------------------
15864
    PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);
15865
---------------------------------------------------------------------------------------------------------------
15866
 
15867
    /* LOG ACTION */
15868
    SELECT pv.PKG_VERSION INTO FromVersion
15869
      FROM PACKAGE_VERSIONS pv
15870
     WHERE pv.PV_ID = nFROMpv_id;
15871
 
15872
    Log_Action ( nTOpv_id, 'clone_from', nUser_id,
15873
                 'Details cloned from: '|| FromVersion );
15874
 
15875
---------------------------------------------------------------------------------------------------------------
15876
 
15877
END Basic_Clone;
1374 dpurdie 15878
/
15879
--------------------------------------------------------
15880
--  DDL for Procedure UPDATE_UNIT_TEST
15881
--------------------------------------------------------
1373 dpurdie 15882
 
15883
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,
15884
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
15885
											   nPv_id IN NUMBER,
15886
											   nUserId IN NUMBER,
15887
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
15888
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
15889
	                                           sCompletion_date IN VARCHAR2,
15890
											   sDpkg_path IN VARCHAR2,
15891
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
15892
											   sResults IN VARCHAR2,
15893
											   outFileName OUT VARCHAR2
15894
                                              ) IS
15895
/* ---------------------------------------------------------------------------
15896
    Version: 3.1.0
15897
   --------------------------------------------------------------------------- */
15898
 
15899
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
15900
 
15901
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
15902
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
15903
 
15904
 
15905
BEGIN
15906
 
15907
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
15908
       	ResultsURL := sResults;
15909
       ELSE
15910
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
15911
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
15912
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
15913
           END IF;
15914
       END IF;
15915
 
15916
	--- Update Unit Test ---
15917
    UPDATE UNIT_TESTS SET
15918
           TEST_SUMMARY = sTest_summary,
15919
		   NUMOF_TEST = sNumof_test,
15920
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
15921
		   COMPLETED_BY = nUserId,
15922
		   RESULTS_URL = ResultsURL,
15923
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
15924
     WHERE TEST_ID = nTest_id
15925
       AND PV_ID = nPv_id;
15926
 
15927
END Update_Unit_Test;
1374 dpurdie 15928
/
15929
--------------------------------------------------------
15930
--  DDL for Procedure SET_TO_AUTOBUILDABLE
15931
--------------------------------------------------------
1373 dpurdie 15932
 
15933
  CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (
15934
   nrtagid     IN   NUMBER,
15935
   spvidlist   IN   VARCHAR2
15936
)
15937
IS
15938
/******************************************************************************
15939
   NAME:       SET_TO_AUTOBUILDABLE
15940
   PURPOSE:
15941
 
15942
   REVISIONS:
15943
   Ver        Date        Author           Description
15944
   ---------  ----------  ---------------  ------------------------------------
15945
   1.0        15/12/2006   Rupesh Solanki       1. Created this procedure.
15946
 
15947
   NOTES:
15948
 
15949
   Automatically available Auto Replace Keywords:
15950
      Object Name:     SET_TO_AUTOBUILDABLE
15951
      Sysdate:         15/12/2006
15952
      Date and Time:   15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AM
15953
      Username:         (set in TOAD Options, Procedure Editor)
15954
      Table Name:       (set in the "New PL/SQL Object" dialog)
15955
 
15956
******************************************************************************/
15957
   npvidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
15958
   PvId NUMBER;
15959
BEGIN
15960
 
15961
   npvidcollector := in_list_number2 (spvidlist);
15962
 
15963
   UPDATE package_versions
15964
      SET is_autobuildable = 'N'
15965
    WHERE pv_id IN (SELECT pv_id
15966
                      FROM release_content
15967
                     WHERE rtag_id = nrtagid);
15968
 
15969
 
15970
 
15971
   	FOR i IN 1..npvidcollector.COUNT
15972
	LOOP
15973
		PvId := npvidcollector(i);
15974
 
15975
		UPDATE package_versions
15976
		set is_autobuildable = 'Y'
15977
		where pv_id = PvId;
15978
 
15979
	END LOOP;
15980
 
15981
 
15982
END set_to_autobuildable;
1374 dpurdie 15983
/
15984
--------------------------------------------------------
15985
--  DDL for Procedure LEVEL_N_CONFLICTS
15986
--------------------------------------------------------
1373 dpurdie 15987
 
15988
  CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (
15989
   nnrtag_id       IN       NUMBER,
15990
   nnsession_num   IN       NUMBER,
15991
   nnrowcnt        OUT      NUMBER,
15992
   nniteration     IN       NUMBER
15993
)
15994
IS
15995
/* ---------------------------------------------------------------------------
15996
    Version: 3.0.1
15997
   --------------------------------------------------------------------------- */
15998
   previteration   NUMBER := nniteration - 1;
15999
BEGIN
16000
   /* ---------  LEVEL 1 CONFILCTS -----------
16001
   || Following states are used:
16002
   || 0 -> NOT FOUND
16003
   || 1 -> MAJOR
16004
   || 2 -> MINOR MINOR
16005
   */
16006
   INSERT INTO temp_env_states
16007
      SELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,
16008
                      pv.pv_id, pv.pkg_id, pv.v_ext,
16009
                      DECODE (tes.tes_state, 2, 2, 1) AS MESSAGE
16010
                 FROM package_dependencies dep,
16011
                      package_versions dpv,
16012
                      package_versions pv,
16013
                      release_content rel,
16014
                      temp_env_states tes
16015
                WHERE rel.pv_id = dep.pv_id
16016
                  AND rel.rtag_id = nnrtag_id
16017
                  AND dep.pv_id = pv.pv_id
16018
                  AND dep.dpv_id = dpv.pv_id
16019
                  AND dpv.pkg_id = tes.pkg_id
16020
                  AND NVL (dpv.v_ext, '|LINK_A_NULL|') =
16021
                                              NVL (tes.v_ext, '|LINK_A_NULL|')
16022
                  AND tes.session_num = nnsession_num
16023
                  AND tes.level_num = previteration
16024
                  AND (dep.pv_id, dep.dpv_id) IN 
16025
                                                   /* Remove packages listed in IGNORE_WARNINGS table and
16026
                                                 || packages already stored in Temp Table.
16027
                                                 */
16028
                      (
16029
                         SELECT pd.pv_id, pd.dpv_id
16030
                           FROM package_dependencies pd, release_content rc
16031
                          WHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id
16032
                         --AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )
16033
                         MINUS
16034
                         SELECT igw.pv_id, igw.dpv_id
16035
                           FROM ignore_warnings igw
16036
                          WHERE igw.rtag_id = nnrtag_id);
16037
 
16038
   nnrowcnt := SQL%ROWCOUNT;
16039
END level_n_conflicts;
1374 dpurdie 16040
/
16041
--------------------------------------------------------
16042
--  DDL for Procedure REMOVE_COMPONENTS
16043
--------------------------------------------------------
1373 dpurdie 16044
 
16045
  CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS
16046
/* ---------------------------------------------------------------------------
16047
    Version: 3.0.0
16048
   --------------------------------------------------------------------------- */
16049
 
16050
 
16051
BEGIN
16052
 
16053
	 --- Delete From RELEASE_COMPONENTS
16054
	 DELETE FROM RELEASE_COMPONENTS
16055
	 WHERE PV_ID = nPvId;
16056
 
16057
END Remove_Components;
1374 dpurdie 16058
/
16059
--------------------------------------------------------
16060
--  DDL for Procedure ADD_COMPONENT
16061
--------------------------------------------------------
1373 dpurdie 16062
 
16063
  CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,
16064
	   	  		  						  	sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,
16065
											sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,
16066
											nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,
16067
											sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,
16068
											sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL
16069
                                           ) IS
16070
/* ---------------------------------------------------------------------------
16071
    Version: 3.0.0
16072
   --------------------------------------------------------------------------- */
16073
 
16074
 
16075
BEGIN
16076
 
16077
	 --- Insert into RELEASE_COMPONENTS
16078
	 INSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )
16079
	 VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc  );
16080
 
16081
 
16082
 
16083
 
16084
END Add_Component;
1374 dpurdie 16085
/
16086
--------------------------------------------------------
16087
--  DDL for Procedure ADD_PACKAGE_INTEREST
16088
--------------------------------------------------------
1373 dpurdie 16089
 
16090
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
16091
	   	  		  								  nPkgIdList IN VARCHAR2,
16092
												  nUserId IN NUMBER
16093
	   	  		  								  ) IS
16094
 
16095
/******************************************************************************
16096
   NAME:       ADD_PACKAGE_INTEREST
16097
   PURPOSE:    
16098
 
16099
   REVISIONS:
16100
   Ver        Date        Author           Description
16101
   ---------  ----------  ---------------  ------------------------------------
16102
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
16103
 
16104
   NOTES:
16105
 
16106
   Automatically available Auto Replace Keywords:
16107
      Object Name:     ADD_PACKAGE_INTEREST
16108
      Sysdate:         12/05/2006
16109
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
16110
      Username:         (set in TOAD Options, Procedure Editor)
16111
      Table Name:       (set in the "New PL/SQL Object" dialog)
16112
 
16113
******************************************************************************/
16114
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
16115
   nPkgId NUMBER;
16116
BEGIN
16117
 
16118
	 npkgidcollector := in_list_number2 (nPkgIdList);
16119
 
16120
	FOR i IN 1..npkgidcollector.COUNT
16121
	LOOP
16122
		nPkgId := npkgidcollector(i);
16123
 
16124
	 --- Insert into PACKAGE_INTEREST TABLE
16125
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
16126
	 VALUES(nProjId, nPkgId, nUserId);
16127
	END LOOP;	 
16128
 
16129
 
16130
END ADD_PACKAGE_INTEREST;
1374 dpurdie 16131
/
16132
--------------------------------------------------------
16133
--  DDL for Procedure UNLOCK_PACKAGE
16134
--------------------------------------------------------
1373 dpurdie 16135
 
16136
  CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16137
											 nUserId IN NUMBER ) IS
16138
/* ---------------------------------------------------------------------------
16139
    Author: Rupesh Solanki
16140
 
16141
	Version: 4.0
16142
   --------------------------------------------------------------------------- */
16143
   STATE CHAR;
16144
 
16145
BEGIN
16146
 
16147
	SELECT DLOCKED INTO STATE
16148
	FROM PACKAGE_VERSIONS
16149
	WHERE PV_ID = nPvId; 
16150
 
16151
	IF STATE = 'A' THEN --It was made official for autobuilds
16152
		-- Unlock Package
16153
		UPDATE PACKAGE_VERSIONS pv SET
16154
		pv.DLOCKED = 'P'
16155
		WHERE pv.PV_ID = nPvId;	
16156
	ELSE
16157
		-- Unlock Package
16158
		UPDATE PACKAGE_VERSIONS pv SET
16159
		pv.DLOCKED = 'N'
16160
		WHERE pv.PV_ID = nPvId;	
16161
 
16162
	END IF;	   
16163
 
16164
    /* LOG ACTION */
16165
   	Log_Action ( nPvId, 'unlock_package', nUserId );
16166
 
16167
END Unlock_Package;
1374 dpurdie 16168
/
16169
--------------------------------------------------------
16170
--  DDL for Procedure REMOVE_PROJECT_VIEW_OWNER
16171
--------------------------------------------------------
1373 dpurdie 16172
 
16173
  CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,
16174
	   	  		  						 			  nViewId IN NUMBER,
16175
										 			  sUserIdList IN VARCHAR2,
16176
										 			  nUserId IN NUMBER ) IS
16177
 
16178
GroupId NUMBER;													  
16179
 
16180
 
16181
 
16182
/******************************************************************************
16183
   NAME:       UPDATE_VIEW
16184
   PURPOSE:    
16185
 
16186
   REVISIONS:
16187
   Ver        Date        Author           		Description
16188
   ---------  ----------  ---------------  ------------------------------------
16189
   1.0        10/04/2006     Rupesh Solanki     1. Created this procedure.
16190
 
16191
   NOTES:
16192
 
16193
   Automatically available Auto Replace Keywords:
16194
      Object Name:     UPDATE_VIEW
16195
      Sysdate:         10/04/2006
16196
      Date and Time:   10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PM
16197
      Username:         (set in TOAD Options, Procedure Editor)
16198
      Table Name:       (set in the "New PL/SQL Object" dialog)
16199
 
16200
******************************************************************************/
16201
 
16202
BEGIN
16203
	 SELECT GROUP_EMAIL_ID into GroupId
16204
	 FROM AUTOBUILD_FAILURE
16205
	 WHERE PROJ_ID = nProjId
16206
	 AND VIEW_ID = nViewId;
16207
 
16208
	 DELETE FROM MEMBERS_GROUP
16209
	 WHERE GROUP_EMAIL_ID = GroupId
16210
	 AND USER_ID IN (
16211
	 SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
16212
	 );
16213
 
16214
 
16215
 
16216
END REMOVE_PROJECT_VIEW_OWNER;
1374 dpurdie 16217
/
16218
--------------------------------------------------------
16219
--  DDL for Procedure DEPLOY_TO_RELEASE
16220
--------------------------------------------------------
1373 dpurdie 16221
 
16222
  CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS
16223
 
16224
/******************************************************************************
16225
 
16226
 
16227
******************************************************************************/
16228
 
16229
	CURSOR curInfo IS
16230
    SELECT DISTINCT
16231
        qry.DPV_ID
16232
     FROM (
16233
             SELECT dep.*,
16234
                    LEVEL AS LEVEL_NUM
16235
               FROM PACKAGE_DEPENDENCIES dep
16236
             START WITH dep.PV_ID IN ( 
16237
 
16238
                        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
16239
 
16240
                        ) 
16241
 			CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID
16242
 		) qry,
16243
 		PACKAGES pkg,
16244
		PACKAGE_VERSIONS pv
16245
 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
16246
         and (pv.is_patch is null or pv.is_patch = 'N');
16247
    recInfo curInfo%ROWTYPE;
16248
 
16249
 
16250
BEGIN
16251
 
16252
	OPEN curInfo;
16253
    FETCH curInfo INTO recInfo;
16254
 
16255
	WHILE curInfo%FOUND
16256
	LOOP
16257
 
16258
	insert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
16259
    VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);
16260
 
16261
    FETCH curInfo INTO recInfo;
16262
 
16263
	END LOOP;
16264
 
16265
	CLOSE curInfo;
16266
 
16267
 
16268
 
16269
 
16270
END DEPLOY_TO_RELEASE; 
1374 dpurdie 16271
/
16272
--------------------------------------------------------
16273
--  DDL for Procedure TOUCH_RELEASE
16274
--------------------------------------------------------
1373 dpurdie 16275
 
16276
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
16277
/* ---------------------------------------------------------------------------
16278
    The purpose of this procedure is to flag in the database that the specified
16279
    release has changed to an extent that the procedure Rebuild_Environment
16280
    should be called at the next opportunity in order that the package state
16281
    icons are all re-evaluated.
16282
    The package state icons are controlled using the pkg_state column in the
16283
    release_content table, and Rebuild_Environment updates that column.
16284
    It will be through user action in the website that Rebuild_Environment will
16285
    be called, for example:
16286
      a) when setting/clearing ignore warnings checkboxes
16287
      b) when someone opens a page upon a rtag/pvid and rebuild_en flag is set
16288
      c) when someone opens the build order report form
16289
      d) when someone modifies dependencies of a package
16290
      + other scenarios (?)
16291
   --------------------------------------------------------------------------- */
16292
BEGIN
16293
   -- Touch Release for Rebuild
16294
   UPDATE RELEASE_TAGS rt SET
16295
          rt.REBUILD_ENV = 'Y',
16296
          rt.REBUILD_STAMP = 0
16297
    WHERE rt.RTAG_ID = nRtagId;
16298
 
16299
END Touch_Release;
1374 dpurdie 16300
/
16301
--------------------------------------------------------
16302
--  DDL for Procedure UNRIPPLE_PACKAGE
16303
--------------------------------------------------------
1373 dpurdie 16304
 
16305
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (
16306
        sPvIdList IN VARCHAR2,
16307
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
16308
        nUserId IN NUMBER
16309
    ) IS
16310
/* ---------------------------------------------------------------------------
16311
    Version: 4.1
16312
   --------------------------------------------------------------------------- */
16313
 
16314
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
16315
 
16316
BEGIN
16317
 
16318
    IF (sPvIdList IS NULL) THEN
16319
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
16320
    END IF;
16321
 
16322
    oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
16323
 
16324
    -- UnRipple Package
16325
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )
16326
    SELECT nRtagId, pv.PV_ID
16327
    FROM PACKAGE_VERSIONS pv
16328
    WHERE pv.PV_ID IN (
16329
        SELECT *
16330
        FROM TABLE (
16331
            CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )
16332
        )
16333
    );
16334
 
16335
    /* LOG ACTION */
16336
    Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );
16337
 
16338
END UnRipple_Package;
1374 dpurdie 16339
/
16340
--------------------------------------------------------
16341
--  DDL for Procedure DT_DROPUSEROBJECTBYID
16342
--------------------------------------------------------
1373 dpurdie 16343
 
16344
  CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;
1374 dpurdie 16345
/
16346
--------------------------------------------------------
16347
--  DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT
16348
--------------------------------------------------------
1373 dpurdie 16349
 
16350
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (
16351
        nPvId IN NUMBER,
16352
        nRtagId IN NUMBER,
16353
        nUserId IN NUMBER,
16354
        nrootCausePvId IN NUMBER,
16355
        srootCause IN VARCHAR2,
16356
        srootFile IN VARCHAR2
16357
    ) IS
16358
    ReleaseLocation VARCHAR2(4000);
16359
BEGIN
16360
 
16361
    -- UnRipple Package
16362
    delete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;
16363
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);
16364
 
16365
    /* LOG ACTION */
16366
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16367
              FROM PROJECTS proj,
16368
                   RELEASE_TAGS rt
16369
             WHERE rt.RTAG_ID = nRtagId
16370
               AND rt.PROJ_ID = proj.PROJ_ID;
16371
 
16372
    /* LOG ACTION */
16373
    Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );
16374
 
16375
END UnRipple_Package_Indirect;
1374 dpurdie 16376
/
16377
--------------------------------------------------------
16378
--  DDL for Procedure TO_INSERT_VTREE_ID
16379
--------------------------------------------------------
1373 dpurdie 16380
 
16381
  CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS
16382
 
16383
/******************************************************************************
16384
   NAME:       TO_INSERT_VTREE_ID
16385
   PURPOSE:    
16386
 
16387
   REVISIONS:
16388
   Ver        Date        Author           Description
16389
   ---------  ----------  ---------------  ------------------------------------
16390
   1.0        2/02/2007          1. Created this procedure.
16391
 
16392
   NOTES:
16393
 
16394
   Automatically available Auto Replace Keywords:
16395
      Object Name:     TO_INSERT_VTREE_ID
16396
      Sysdate:         2/02/2007
16397
      Date and Time:   2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AM
16398
      Username:         (set in TOAD Options, Procedure Editor)
16399
      Table Name:       (set in the "New PL/SQL Object" dialog)
16400
 
16401
******************************************************************************/
16402
VTreeId NUMBER;																			  																	   
16403
 
16404
 
16405
	CURSOR curInfo IS
16406
    SELECT RTAG_ID
16407
	FROM RELEASE_TAGS
16408
	WHERE VTREE_ID IS NULL;
16409
    recInfo curInfo%ROWTYPE;
16410
 
16411
 
16412
BEGIN
16413
 
16414
	OPEN curInfo;
16415
    FETCH curInfo INTO recInfo;
16416
 
16417
	WHILE curInfo%FOUND
16418
	LOOP
16419
		SELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;
16420
 
16421
		UPDATE RELEASE_TAGS
16422
		SET VTREE_ID = VTreeId
16423
		WHERE RTAG_ID = recInfo.RTAG_ID;
16424
 
16425
		FETCH curInfo INTO recInfo;
16426
	END LOOP;
16427
 
16428
	CLOSE curInfo;
16429
 
16430
END TO_INSERT_VTREE_ID;
1374 dpurdie 16431
/
16432
--------------------------------------------------------
16433
--  DDL for Procedure CHANGE_RELEASE_MODE
16434
--------------------------------------------------------
1373 dpurdie 16435
 
16436
  CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS
16437
/* ---------------------------------------------------------------------------
16438
    Version: 3.0.0
16439
   --------------------------------------------------------------------------- */
16440
 
16441
	cMode CHAR(1) := NULL;  
16442
	nProjId NUMBER; 
16443
 
16444
BEGIN
16445
 
16446
 
16447
	/*
16448
	Author: Rupesh Solanki
16449
	Modified: 24th October 2006
16450
	Reason: Added the archive mode state into Release Manager 
16451
	||	1 - Open Mode
16452
	||	2 - Restrictive Mode
16453
	||	3 - Closed Mode
16454
	||	4 - CCB Mode
16455
	||	5 - Archive Mode
16456
	*/	
16457
	-- Get project Id
16458
	SELECT rt.PROJ_ID INTO nProjId
16459
	  FROM RELEASE_TAGS rt
16460
	 WHERE rt.RTAG_ID = nRtagId; 
16461
 
16462
	IF nModeCode = 1 THEN
16463
		-- Open Mode
16464
		cMode := 'N';
16465
 
16466
		/* LOG ACTION */
16467
   		Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );
16468
 
16469
	ELSIF nModeCode = 2 THEN
16470
		-- Restrictive Mode
16471
		cMode := 'R';
16472
 
16473
		/* LOG ACTION */
16474
   		Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );
16475
 
16476
	ELSIF nModeCode = 3 THEN
16477
		-- Closed Mode
16478
		cMode := 'Y';
16479
 
16480
		/* LOG ACTION */
16481
   		Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId  );
16482
 
16483
	ELSIF nModeCode = 4 THEN
16484
		-- CCB Mode
16485
		cMode := 'C';
16486
 
16487
		/* LOG ACTION */
16488
   		Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId  );
16489
 
16490
	ELSIF nModeCode = 5 THEN
16491
		-- Archive Mode
16492
		cMode := 'A';
16493
 
16494
		/* LOG ACTION */
16495
   		Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId  );	
16496
 
16497
 
16498
	END IF;
16499
 
16500
 
16501
 
16502
	-- Now update table
16503
	IF NOT cMode IS NULL THEN
16504
		UPDATE RELEASE_TAGS rt SET
16505
		rt.OFFICIAL = cMode
16506
		WHERE rt.RTAG_ID = nRtagId;
16507
 
16508
	END IF;
16509
 
16510
 
16511
END CHANGE_RELEASE_MODE;
1374 dpurdie 16512
/
16513
--------------------------------------------------------
16514
--  DDL for Procedure UPDATE_UNIT_TEST_TEST
16515
--------------------------------------------------------
1373 dpurdie 16516
 
16517
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,
16518
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
16519
											   nPv_id IN NUMBER,
16520
											   nUserId IN NUMBER,
16521
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
16522
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
16523
	                                           sCompletion_date IN VARCHAR2,
16524
											   sDpkg_path IN VARCHAR2,
16525
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
16526
											   sResults IN VARCHAR2,
16527
											   outFileName OUT VARCHAR2
16528
                                              ) IS
16529
/* ---------------------------------------------------------------------------
16530
    Version: 3.1.0
16531
   --------------------------------------------------------------------------- */
16532
 
16533
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
16534
 
16535
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
16536
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
16537
 
16538
 
16539
BEGIN
16540
 
16541
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
16542
       	ResultsURL := sResults;
16543
       ELSE
16544
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16545
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
16546
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
16547
           END IF;
16548
       END IF;
16549
 
16550
       /*	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16551
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
16552
    		sResults_url:= 'doc' || '/' || 
16553
			;
16554
        END IF;*/
16555
	--- Update Unit Test ---
16556
    UPDATE UNIT_TESTS SET
16557
           TEST_SUMMARY = sTest_summary,
16558
		   NUMOF_TEST = sNumof_test,
16559
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
16560
		   COMPLETED_BY = nUserId,
16561
		   RESULTS_URL = ResultsURL,
16562
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
16563
     WHERE TEST_ID = nTest_id
16564
       AND PV_ID = nPv_id;
16565
 
16566
END Update_Unit_Test_Test;
1374 dpurdie 16567
/
16568
--------------------------------------------------------
16569
--  DDL for Procedure NEW_VERSION
16570
--------------------------------------------------------
1373 dpurdie 16571
 
16572
  CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,
16573
                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,
16574
                                          NNsetto_pv_id IN NUMBER DEFAULT NULL,
16575
                                          NNrtag_id IN NUMBER,
16576
                                          NNuser_id IN NUMBER,
16577
                                          enumISSUES_STATE_IMPORTED IN NUMBER,
16578
                                          retPv_id OUT NUMBER ) IS
16579
 
16580
 
16581
  TO BE REMOVED   !!!										  
16582
 
16583
 
16584
 
16585
 
16586
/* ---------------------------------------------------------------------------
16587
    Version: 3.3
16588
   --------------------------------------------------------------------------- */
16589
 
16590
    ReleaseLocation VARCHAR2(4000);
16591
    origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;
16592
    origDlocked PACKAGE_VERSIONS.dlocked%TYPE;
16593
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
16594
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
16595
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
16596
    nIssuesTypes NUMBER;
16597
 
16598
    CURSOR package_versions_cur IS
16599
        SELECT pv.pv_id, pv.is_patch
16600
          FROM PACKAGE_VERSIONS pv
16601
         WHERE pv.pkg_version = SSpkg_version
16602
           AND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );
16603
    package_versions_rec package_versions_cur%ROWTYPE;
16604
 
16605
    CURSOR clone_package_versions_cur IS
16606
        SELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;
16607
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
16608
 
16609
BEGIN
16610
	IF NNsetto_pv_id IS NULL
16611
    THEN
16612
		-- SetToPv_id is not supplied, hence proceed.
16613
 
16614
	    /* ---------------------------------------------------- */
16615
	    /* Find id package_version exists                       */
16616
	    /* ---------------------------------------------------- */
16617
 
16618
	    OPEN package_versions_cur;
16619
	    FETCH package_versions_cur INTO package_versions_rec;
16620
 
16621
	    IF package_versions_cur%NOTFOUND
16622
	    THEN
16623
	        SELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;
16624
	        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
16625
 
16626
	        OPEN clone_package_versions_cur;
16627
	        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
16628
	        origPkg_id := clone_package_versions_rec.pkg_id;
16629
	        origDlocked := clone_package_versions_rec.dlocked;
16630
	        CLOSE clone_package_versions_cur;
16631
 
16632
	        -- Clone Package Version Details --
16633
	        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,
16634
	                                       src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )
16635
	            SELECT retPv_id         AS pv_id,
16636
	                   origPkg_id       AS pkg_id,
16637
	                   SSpkg_version    AS pkg_version,
16638
	                   'N'              AS dlocked,
16639
	                   Ora_Sysdate      AS created_stamp,
16640
	                   NNuser_id        AS creator_id,
16641
	                   Ora_Sysdatetime  AS modified_stamp,
16642
	                   NNuser_id        AS modifier_id,
16643
	                   SSV_MM           AS V_MM,
16644
	                   SSV_NMM          AS V_NMM,
16645
	                   SSV_EXT          AS V_EXT,
16646
	                   pv.src_path,
16647
	                   pv.pv_description,
16648
                       pv.PV_OVERVIEW,
16649
                       NNorig_pv_id 	AS LAST_PV_ID,
16650
	                   pv.owner_id,
16651
					   pv.IS_DEPLOYABLE,
16652
					   pv.IS_BUILD_ENV_REQUIRED
16653
	              FROM PACKAGE_VERSIONS pv
16654
	             WHERE pv.pv_id = NNorig_pv_id;
16655
 
16656
 
16657
	        -- Set Issues Type for cloning ---
16658
	        IF origDlocked = 'Y'
16659
	        THEN
16660
            	nIssuesTypes := enumISSUES_STATE_IMPORTED;
16661
	        ELSE
16662
            	nIssuesTypes := NULL;
16663
	        END IF;
16664
 
16665
			Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );
16666
 
16667
 
16668
 
16669
	    ELSE
16670
	        retPv_id := package_versions_rec.pv_id;
16671
 
16672
	    END IF;
16673
 
16674
        CLOSE package_versions_cur;
16675
 
16676
	ELSE
16677
    	retPv_id := NNsetto_pv_id;
16678
    END IF;
16679
 
16680
 
16681
    /* ---------------------------------------------------- */
16682
    /* Insert into Release Contents (EXCLUDE PATCHES)       */
16683
    /* ---------------------------------------------------- */
16684
	IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THEN
16685
	    UPDATE RELEASE_CONTENT
16686
	       SET pv_id = retPv_id,
16687
	           insert_stamp = Ora_Sysdate,
16688
	           insertor_id = NNuser_id
16689
	     WHERE rtag_id = NNrtag_id
16690
	       AND pv_id = NNorig_pv_id;
16691
 
16692
        /* LOG ACTION */
16693
        SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16694
		  FROM PROJECTS proj,
16695
		  	   VTREES vt,
16696
		       RELEASE_TAGS rt
16697
		 WHERE rt.VTREE_ID = vt.VTREE_ID
16698
		   AND vt.PROJ_ID = proj.PROJ_ID
16699
		   AND rt.RTAG_ID = NNrtag_id;
16700
 
16701
        Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );
16702
   		Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );
16703
 
16704
	END IF;
16705
 
16706
 
16707
END New_Version;
1374 dpurdie 16708
/
16709
--------------------------------------------------------
16710
--  DDL for Procedure ADD_RUNTIME_DEPENDENCY
16711
--------------------------------------------------------
1373 dpurdie 16712
 
16713
  CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,
16714
                                                     SSrtd_name IN PACKAGES.pkg_name%TYPE,
16715
                                                     SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
16716
                                                     NNuser_id IN NUMBER
16717
                                                    ) IS
16718
/* ---------------------------------------------------------------------------
16719
    Version: 3.1
16720
   --------------------------------------------------------------------------- */
16721
 
16722
    retRTD_ID NUMBER;
16723
 
16724
	CURSOR rtd_cur IS
16725
        SELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;
16726
    rtd_rec rtd_cur%ROWTYPE;
16727
 
16728
BEGIN
16729
    --- Seed database with package_name and version if required ---
16730
    Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );
16731
 
16732
	OPEN rtd_cur;
16733
    FETCH rtd_cur INTO rtd_rec;
16734
 
16735
    IF rtd_cur%NOTFOUND
16736
    THEN
16737
		/* Make sure it does not exists already as runtime dependency */
16738
 
16739
		--- Add new Runtime Dependency ---
16740
	    INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )
16741
	    VALUES (  NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );
16742
 
16743
    	/* LOG ACTION */
16744
        Log_Action ( NNpv_id, 'runtime_add', NNuser_id,
16745
    			     'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );
16746
 
16747
	END IF;
16748
 
16749
 
16750
END Add_Runtime_Dependency;
1374 dpurdie 16751
/
16752
--------------------------------------------------------
16753
--  DDL for Procedure LEVEL_ONE_CONFLICTS
16754
--------------------------------------------------------
1373 dpurdie 16755
 
16756
  CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (
16757
   nnrtag_id       IN   NUMBER,
16758
   nnsession_num   IN   NUMBER
16759
)
16760
IS
16761
BEGIN
16762
   /* ---------  LEVEL 1 CONFILCTS -----------
16763
   || Following states are used:
16764
   || 0 -> NOT FOUND
16765
   || 1 -> MAJOR
16766
   || 2 -> MINOR MINOR
16767
   */
16768
   INSERT INTO temp_env_states
16769
      SELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,
16770
                      err.pv_id, errpkg.pkg_id, errpkg.v_ext,
16771
                      DECODE (frc.v_nmm,
16772
                              NULL, 0,
16773
                              errpv.v_nmm, DECODE (frc.v_mm,
16774
                                                   errpv.v_mm, NULL,
16775
                                                   2
16776
                                                  ),
16777
                              1
16778
                             ) AS MESSAGE
16779
                 FROM (
16780
                       /* Full Release Contents used for reference*/
16781
                        SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,
16782
                                NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,
16783
                                rpv.pkg_version, rpv.v_nmm, rpv.v_mm,
16784
                                (SELECT COUNT(*)
16785
                                   FROM ADVISORY_RIPPLE avr
16786
                                  WHERE avr.rtag_id = rel.rtag_id
16787
                                    AND avr.pv_id = rel.pv_id
16788
                                ) AS IsAvr
16789
                          FROM release_content rel,
16790
                                package_versions rpv
16791
                          WHERE rel.pv_id = rpv.pv_id
16792
                             AND rtag_id = nnrtag_id
16793
                      ) frc,
16794
 
16795
                      (
16796
                       /* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will not
16797
                          necessarily be satisfied in the release) */
16798
                       SELECT dep.pv_id, dep.dpv_id AS err_dpv
16799
                         FROM package_dependencies dep,
16800
                              package_versions dep_dpv
16801
                        WHERE dep.dpv_id = dep_dpv.pv_id
16802
                          AND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16803
                          AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)
16804
                          AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16805
                       MINUS
16806
                       /* MINUS Dependencies to be ignored */
16807
                       SELECT igw.pv_id, igw.dpv_id AS err_dpv
16808
                         FROM ignore_warnings igw,
16809
                              package_versions igw_dpv
16810
                        WHERE igw.dpv_id = igw_dpv.pv_id
16811
                          AND igw.rtag_id = nnrtag_id
16812
                      ) err,
16813
                      package_versions errpkg,
16814
                      package_versions errpv
16815
                WHERE err.err_dpv = errpv.pv_id
16816
                  AND errpv.pkg_id = frc.pkg_id(+)
16817
                  AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
16818
                  AND err.pv_id = errpkg.pv_id
16819
                  AND frc.IsAvr = 0;
16820
END level_one_conflicts;
1374 dpurdie 16821
/
16822
--------------------------------------------------------
16823
--  DDL for Procedure OLE
16824
--------------------------------------------------------
1373 dpurdie 16825
 
16826
  CREATE OR REPLACE PROCEDURE "OLE" 
16827
IS retval VARCHAR2(40);   
16828
BEGIN   retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 ) 
16829
DBMS_OUTPUT.PUT_LINE(retval);
1374 dpurdie 16830
/
16831
--------------------------------------------------------
16832
--  DDL for Procedure SYNC_PROJECTS_NEW_VERSION
16833
--------------------------------------------------------
1373 dpurdie 16834
 
16835
  CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id 				IN NUMBER,
16836
														  sSyncRtagsInList		IN VARCHAR2,
16837
				                                          nUser_id 				IN NUMBER ) IS
16838
/* ---------------------------------------------------------------------------
16839
    Version: 3.0.0
16840
   --------------------------------------------------------------------------- */
16841
 
16842
	CURSOR sync_rtags_cur IS
16843
        SELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_id
16844
		  FROM release_content rc,
16845
		  	   package_versions pv,
16846
		       package_versions opv
16847
		 WHERE rc.pv_id = pv.pv_id
16848
		   AND opv.pkg_id = pv.pkg_id
16849
		   AND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')
16850
		   AND opv.pv_id = nPv_id
16851
		   AND rtag_id IN ( SELECT *
16852
		   	   		   	      FROM THE (
16853
					   	   		   	    SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )
16854
					       		   	    FROM dual
16855
									   )
16856
						  );
16857
    sync_rtags_rec sync_rtags_cur%ROWTYPE;
16858
 
16859
BEGIN
16860
 
16861
	OPEN sync_rtags_cur;
16862
	FETCH sync_rtags_cur INTO sync_rtags_rec;
16863
 
16864
	WHILE sync_rtags_cur%FOUND
16865
	LOOP
16866
		DELETE FROM RELEASE_CONTENT
16867
		 WHERE rtag_id = sync_rtags_rec.rtag_id
16868
	       AND pv_id = sync_rtags_rec.pv_id;
16869
 
16870
		INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
16871
	   		   VALUES ( sync_rtags_rec.rtag_id,
16872
		       		  	nPv_id,
16873
						sync_rtags_rec.BASE_VIEW_ID,
16874
	           			Ora_Sysdate,
16875
	           			nUser_id,
16876
 
16877
	      	   		   );
16878
 
16879
-- 		UPDATE RELEASE_CONTENT
16880
-- 	       SET pv_id = nPv_id,
16881
-- 	           insert_stamp = Ora_Sysdate,
16882
-- 	           insertor_id = nUser_id
16883
-- 	     WHERE rtag_id = sync_rtags_rec.rtag_id
16884
-- 	       AND pv_id = sync_rtags_rec.pv_id;
16885
 
16886
		FETCH sync_rtags_cur INTO sync_rtags_rec;
16887
	END LOOP;
16888
 
16889
	CLOSE sync_rtags_cur;
16890
 
16891
END Sync_Projects_New_Version;
1374 dpurdie 16892
/
16893
--------------------------------------------------------
16894
--  DDL for Procedure LOCK_PACKAGE
16895
--------------------------------------------------------
1373 dpurdie 16896
 
16897
  CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16898
											 nUserId IN NUMBER ) IS
16899
/* ---------------------------------------------------------------------------
16900
    Version: 4.0
16901
   --------------------------------------------------------------------------- */
16902
 
16903
BEGIN
16904
 
16905
    -- Lock Package
16906
    UPDATE PACKAGE_VERSIONS pv SET
16907
    	pv.DLOCKED = 'Y'
16908
    WHERE pv.PV_ID = nPvId;
16909
 
16910
    /* LOG ACTION */
16911
   	Log_Action ( nPvId, 'lock_package', nUserId );
16912
 
16913
END Lock_Package;
1374 dpurdie 16914
/
16915
--------------------------------------------------------
16916
--  DDL for Procedure UPDATE_PACKAGE_STATES
16917
--------------------------------------------------------
1373 dpurdie 16918
 
16919
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,
16920
                                                    NNsession_num IN NUMBER ) IS
16921
/* =============  STATE RULES =================== */
16922
/*
16923
   MNR   MRR   MN   MR    |   pkg_state
16924
   ------------------------------------
16925
 
16926
 
16927
 
16928
 
16929
   ------------------------------------
16930
 
16931
 
16932
 
16933
 
16934
   ------------------------------------
16935
    1     0     0     0   |      MINOR_READY
16936
    1     0     0     1   |      MAJOR
16937
    1     0     1     0   |      MINOR
16938
    1     0     1     1   |      MAJOR
16939
   ------------------------------------
16940
    1     1     0     0   |      MAJOR_READY
16941
    1     1     0     1   |      MAJOR
16942
    1     1     1     0   |      MAJOR
16943
    1     1     1     1   |      MAJOR
16944
   ------------------------------------
16945
*/
16946
BEGIN
16947
    /*----------------------------------------------
16948
    ||              MINOR READY
16949
    */----------------------------------------------
16950
 
16951
    UPDATE release_content
16952
       SET pkg_state = 4
16953
     WHERE rtag_id = NNrtag_id
16954
       AND pv_id IN
16955
           (
16956
           SELECT DISTINCT pv_id
16957
           FROM temp_env_states
16958
           WHERE session_num = NNsession_num
16959
             AND level_num = 1
16960
             AND tes_state = 2
16961
           );
16962
 
16963
    /*----------------------------------------------
16964
    ||              MAJOR READY
16965
    */----------------------------------------------
16966
    UPDATE release_content
16967
       SET pkg_state = 3
16968
     WHERE rtag_id = NNrtag_id
16969
       AND pv_id IN
16970
           (
16971
           SELECT DISTINCT pv_id
16972
           FROM temp_env_states
16973
           WHERE session_num = NNsession_num
16974
             AND level_num = 1
16975
             AND tes_state IN (0,1)
16976
           );
16977
 
16978
    /*----------------------------------------------
16979
    ||                MINOR
16980
    */----------------------------------------------
16981
    UPDATE release_content
16982
       SET pkg_state = 2
16983
     WHERE rtag_id = NNrtag_id
16984
       AND pv_id IN
16985
           (
16986
           SELECT DISTINCT pv_id
16987
            FROM temp_env_states
16988
            WHERE session_num = NNsession_num
16989
              AND level_num >= 2
16990
              AND tes_state = 2
16991
            MINUS
16992
           SELECT pv_id
16993
             FROM release_content
16994
            WHERE rtag_id = NNrtag_id
16995
              AND pkg_state = 3
16996
           );
16997
 
16998
    /*----------------------------------------------
16999
    ||                MAJOR
17000
    */----------------------------------------------
17001
    UPDATE release_content
17002
       SET pkg_state = 1
17003
     WHERE rtag_id = NNrtag_id
17004
       AND pv_id IN
17005
           (
17006
           SELECT DISTINCT pv_id
17007
           FROM temp_env_states
17008
           WHERE session_num = NNsession_num
17009
             AND level_num >= 2
17010
             AND tes_state IN (0,1)
17011
           /* MAJOR EXCEPTION - When package has Major Ready and Minor */
17012
           UNION
17013
           SELECT DISTINCT tes.pv_id
17014
           FROM temp_env_states tes,
17015
                release_content rc
17016
           WHERE tes.session_num = NNsession_num
17017
             AND tes.level_num >= 2
17018
             AND tes.tes_state = 2
17019
             AND rtag_id = NNrtag_id
17020
             AND rc.pv_id = tes.pv_id
17021
             AND rc.pkg_state = 3
17022
           );
17023
 
17024
    /*----------------------------------------------
17025
    ||                 OK
17026
    */----------------------------------------------
17027
    UPDATE release_content
17028
       SET pkg_state = 0
17029
     WHERE rtag_id = NNrtag_id
17030
       AND pv_id IN
17031
           (
17032
           SELECT rc.pv_id
17033
             FROM release_content rc
17034
            WHERE rc.rtag_id = NNrtag_id
17035
              AND NOT rc.pv_id IN
17036
                    (
17037
                     SELECT DISTINCT pv_id
17038
                     FROM temp_env_states WHERE session_num = NNsession_num
17039
                    )
17040
           );
17041
 
17042
      Update_Deprecation_State (NNrtag_id);
17043
 
17044
    /*----------------------------------------------
17045
    ||              PEGGED VERSIONS DEPENDENT
17046
    */----------------------------------------------
17047
    UPDATE release_content
17048
       SET pkg_state = 10
17049
     WHERE rtag_id = NNrtag_id
17050
       AND pv_id IN
17051
           (
17052
           SELECT DISTINCT pv_id
17053
           FROM pegged_versions pegv
17054
           WHERE pegv.rtag_id = NNrtag_id
17055
           );
17056
 
17057
    /*----------------------------------------------
17058
    ||              ADVISORY RIPPLE
17059
    */----------------------------------------------
17060
    UPDATE release_content
17061
       SET pkg_state = 8
17062
     WHERE rtag_id = NNrtag_id
17063
       AND pv_id IN
17064
           (
17065
           SELECT DISTINCT pv_id
17066
           FROM advisory_ripple ar
17067
           WHERE ar.rtag_id = NNrtag_id
17068
           )
17069
       AND pv_id IN
17070
           (
17071
           SELECT DISTINCT pv_id
17072
           FROM release_content rc
17073
           WHERE rc.rtag_id = NNrtag_id
17074
           );
17075
 
17076
END Update_Package_States;
1374 dpurdie 17077
/
17078
--------------------------------------------------------
17079
--  DDL for Procedure REMOVE_DOCUMENT
17080
--------------------------------------------------------
1373 dpurdie 17081
 
17082
  CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
17083
											  nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,
17084
                                              nUserId IN NUMBER ) IS
17085
/* ---------------------------------------------------------------------------
17086
    Version: 3.0
17087
   --------------------------------------------------------------------------- */
17088
 
17089
   DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;
17090
 
17091
BEGIN
17092
 
17093
	-- Get Doc Num
17094
    SELECT pd.DOC_NUM INTO DocNumber
17095
      FROM PACKAGE_DOCUMENTS pd
17096
     WHERE pd.PV_ID = nPvId
17097
       AND pd.DOC_ID = nDocId;
17098
 
17099
 
17100
	-- Delete Document
17101
    DELETE
17102
      FROM PACKAGE_DOCUMENTS pd
17103
     WHERE pd.PV_ID = nPvId
17104
       AND pd.DOC_ID = nDocId;
17105
 
17106
 
17107
    /* LOG ACTION */
17108
   	Log_Action ( nPvId, 'document_remove', nUserId,
17109
   			     'Document number: '|| DocNumber );
17110
 
17111
 
17112
END Remove_Document;
1374 dpurdie 17113
/
17114
--------------------------------------------------------
17115
--  DDL for Procedure SPLIT_VERSION
17116
--------------------------------------------------------
1373 dpurdie 17117
 
17118
  CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17119
                                            SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,
17120
                                            SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,
17121
                                            SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE  ) IS
17122
/* ---------------------------------------------------------------------------
17123
    Version: 3.0.0
17124
   --------------------------------------------------------------------------- */
17125
 
17126
    TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)
17127
        INDEX BY BINARY_INTEGER;
17128
 
17129
    version_components VERSION_COMPONENTS_TYPE;
17130
    lastDot NUMBER := 0;
17131
    currDot NUMBER := 0;
17132
 
17133
BEGIN
17134
    currDot := INSTR ( SSpkg_version, '.', -1 );      -- Find 1st dot from the right
17135
 
17136
    IF ( currDot > 0 )
17137
    THEN
17138
        -- YES dot separator found --
17139
        SSV_EXT := GET_V_EXT( SSpkg_version );
17140
 
17141
        IF NOT SSV_EXT IS NULL
17142
        THEN
17143
            lastDot := currDot;
17144
            currDot := INSTR ( SSpkg_version, '.', -1, 2 );   -- Find 2nd dot from the right
17145
 
17146
            IF ( currDot > 0 )
17147
            THEN
17148
                -- XXXX.M.E
17149
                SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);
17150
                SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;
17151
            ELSE
17152
                -- XXXX.E
17153
                SSV_MM := NULL;
17154
                SSV_NMM := SSpkg_version;
17155
            END IF;
17156
 
17157
        ELSE
17158
            -- XXXX.M
17159
            SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );
17160
            SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );
17161
 
17162
        END IF;
17163
 
17164
    ELSE
17165
        -- NO dot separator found --
17166
        -- XXXXXX
17167
        SSV_MM  := NULL;
17168
        SSV_NMM := SSpkg_version;
17169
        SSV_EXT := NULL;
17170
 
17171
    END IF;
17172
 
17173
END Split_Version;
1374 dpurdie 17174
/
17175
--------------------------------------------------------
17176
--  DDL for Procedure ADD_PACKAGE_INTEREST_TEST
17177
--------------------------------------------------------
1373 dpurdie 17178
 
17179
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
17180
	   	  		  								  nPkgIdList IN VARCHAR2,
17181
												  nUserId IN NUMBER
17182
	   	  		  								  ) IS
17183
 
17184
/******************************************************************************
17185
   NAME:       ADD_PACKAGE_INTEREST
17186
   PURPOSE:    
17187
 
17188
   REVISIONS:
17189
   Ver        Date        Author           Description
17190
   ---------  ----------  ---------------  ------------------------------------
17191
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
17192
 
17193
   NOTES:
17194
 
17195
   Automatically available Auto Replace Keywords:
17196
      Object Name:     ADD_PACKAGE_INTEREST
17197
      Sysdate:         12/05/2006
17198
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
17199
      Username:         (set in TOAD Options, Procedure Editor)
17200
      Table Name:       (set in the "New PL/SQL Object" dialog)
17201
 
17202
******************************************************************************/
17203
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
17204
   nPkgId NUMBER;
17205
BEGIN
17206
 
17207
	 npkgidcollector := in_list_number2 (nPkgIdList);
17208
 
17209
	FOR i IN 1..npkgidcollector.COUNT
17210
	LOOP
17211
		nPkgId := npkgidcollector(i);
17212
 
17213
	 --- Insert into PACKAGE_INTEREST TABLE
17214
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
17215
	 VALUES(nProjId, nPkgId, nUserId);
17216
	END LOOP;	 
17217
 
17218
 
17219
END ADD_PACKAGE_INTEREST_TEST;
1374 dpurdie 17220
/
17221
--------------------------------------------------------
17222
--  DDL for Procedure CLONED_PROCESSES
17223
--------------------------------------------------------
1373 dpurdie 17224
 
17225
  CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES" 
17226
IS
17227
 
17228
proc_id NUMBER;
17229
/******************************************************************************
17230
   NAME:       DELETE_DO_NOT_RIPPLE
17231
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
17232
               IS RELEASED
17233
 
17234
   REVISIONS:
17235
   Ver        Date        Author           Description
17236
   ---------  ----------  ---------------  ------------------------------------
17237
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
17238
 
17239
   NOTES:
17240
 
17241
   Automatically available Auto Replace Keywords:
17242
      Object Name:     DELETE_DO_NOT_RIPPLE
17243
      Sysdate:         21/04/2006
17244
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
17245
      Username:         (set in TOAD Options, Procedure Editor)
17246
      Table Name:       (set in the "New PL/SQL Object" dialog)
17247
 
17248
******************************************************************************/
17249
   CURSOR ripple_cur
17250
   IS
17251
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
17252
 
17253
   ripple_rec   ripple_cur%ROWTYPE;
17254
BEGIN
17255
   OPEN ripple_cur;
17256
 
17257
   FETCH ripple_cur
17258
    INTO ripple_rec;
17259
 
17260
   WHILE ripple_cur%FOUND
17261
   LOOP
17262
 
17263
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
17264
 
17265
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
17266
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
17267
 
17268
      FETCH ripple_cur
17269
       INTO ripple_rec;
17270
   END LOOP;
17271
END CLONED_PROCESSES;
1374 dpurdie 17272
/
17273
--------------------------------------------------------
17274
--  DDL for Procedure ADD_VIEW_MEMBERS
17275
--------------------------------------------------------
1373 dpurdie 17276
 
17277
  CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS
17278
 
17279
/******************************************************************************
17280
   NAME:       ADD_VIEW_MEMBERS
17281
   PURPOSE:    
17282
 
17283
   REVISIONS:
17284
   Ver        Date        Author           Description
17285
   ---------  ----------  ---------------  ------------------------------------
17286
   1.0        11/04/2006          1. Created this procedure.
17287
 
17288
   NOTES:
17289
 
17290
   Automatically available Auto Replace Keywords:
17291
      Object Name:     ADD_VIEW_MEMBERS
17292
      Sysdate:         11/04/2006
17293
      Date and Time:   11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AM
17294
      Username:         (set in TOAD Options, Procedure Editor)
17295
      Table Name:       (set in the "New PL/SQL Object" dialog)
17296
 
17297
******************************************************************************/
17298
CURSOR user_cur IS
17299
	SELECT u.USER_ID
17300
	  FROM USERS u
17301
	 WHERE u.USER_ID IN (
17302
	 	   			   	SELECT * 
17303
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
17304
						);
17305
user_rec user_cur%ROWTYPE;
17306
 
17307
 
17308
BEGIN
17309
 
17310
	 OPEN user_cur;
17311
	 FETCH user_cur INTO user_rec;
17312
 
17313
	 WHILE user_cur%FOUND
17314
	 LOOP
17315
	 	 INSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)
17316
	 	 VALUES ( nGroupId, user_rec.USER_ID);
17317
 
17318
	 	 FETCH user_cur INTO user_rec;	 
17319
	 END LOOP;	 
17320
 
17321
 
17322
 
17323
END ADD_VIEW_MEMBERS;
1374 dpurdie 17324
/
17325
--------------------------------------------------------
17326
--  DDL for Procedure RESET_IGNORE_WARNINGS
17327
--------------------------------------------------------
1373 dpurdie 17328
 
17329
  CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,
17330
                                                    nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
17331
/* ---------------------------------------------------------------------------
17332
    Version: 5.0
17333
   --------------------------------------------------------------------------- */
17334
 
17335
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17336
 
17337
BEGIN
17338
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
17339
 
17340
    -- Remove Ignore Warnings
17341
     DELETE
17342
       FROM ignore_warnings
17343
	  WHERE (rtag_id, pv_id, dpv_id) IN
17344
	     (
17345
	      SELECT igw.rtag_id, igw.pv_id, igw.dpv_id
17346
	        FROM ignore_warnings igw,
17347
	             package_versions dpv,
17348
	             package_versions pv
17349
	       WHERE igw.dpv_id = dpv.pv_id
17350
	         AND igw.rtag_id = nRTagId
17351
	         AND dpv.pkg_id = pv.pkg_id
17352
	         AND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')
17353
	         AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
17354
         );
17355
 
17356
END Reset_Ignore_Warnings;
1374 dpurdie 17357
/
17358
--------------------------------------------------------
17359
--  DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO
17360
--------------------------------------------------------
1373 dpurdie 17361
 
17362
  CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS
17363
 
17364
/******************************************************************************
17365
   NAME:       INSERT_INTO_PACKAGE_BUILD_INFO
17366
   PURPOSE:    
17367
 
17368
   REVISIONS:
17369
   Ver        Date        Author           Description
17370
   ---------  ----------  ---------------  ------------------------------------
17371
   1.0        6/12/2006          1. Created this procedure.
17372
 
17373
   NOTES:
17374
 
17375
   Automatically available Auto Replace Keywords:
17376
      Object Name:     INSERT_INTO_PACKAGE_BUILD_INFO
17377
      Sysdate:         6/12/2006
17378
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
17379
      Username:         (set in TOAD Options, Procedure Editor)
17380
      Table Name:       (set in the "New PL/SQL Object" dialog)
17381
 
17382
******************************************************************************/
17383
 
17384
	CURSOR curInfo IS
17385
    SELECT PV_ID
17386
	FROM PACKAGE_BUILD_ENV
17387
	WHERE BE_ID IN (11, 12);
17388
    recInfo curInfo%ROWTYPE;
17389
 
17390
 
17391
BEGIN
17392
 
17393
	OPEN curInfo;
17394
    FETCH curInfo INTO recInfo;
17395
 
17396
	WHILE curInfo%FOUND
17397
	LOOP
17398
 
17399
		INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )
17400
		VALUES( recInfo.PV_ID, 2, 5);
17401
 
17402
		UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;
17403
 
17404
		FETCH curInfo INTO recInfo;
17405
 
17406
	END LOOP;
17407
 
17408
	CLOSE curInfo;
17409
 
17410
 
17411
 
17412
 
17413
END INSERT_INTO_PACKAGE_BUILD_INFO;
1374 dpurdie 17414
/
17415
--------------------------------------------------------
17416
--  DDL for Procedure UPDATE_ADDITIONAL_NOTE
17417
--------------------------------------------------------
1373 dpurdie 17418
 
17419
  CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,
17420
													 pnPv_id IN NUMBER,
17421
                                                     psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
17422
                                                     psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
17423
                                                     pnUser_id IN NUMBER,
17424
                                                     outErrCode OUT NUMBER
17425
                                                    ) IS
17426
/* ---------------------------------------------------------------------------
17427
    Version: 3.0.1
17428
   --------------------------------------------------------------------------- */
17429
 
17430
    newID NUMBER;
17431
 
17432
    /* Disallow duplicate Note Titles */
17433
	CURSOR an_duplicate_cur IS
17434
        SELECT COUNT(*) AS cnt_note
17435
          FROM ADDITIONAL_NOTES
17436
         WHERE pv_id = pnPv_id
17437
           AND note_id != pnNote_id
17438
           AND note_title = psNote_title;
17439
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
17440
 
17441
BEGIN
17442
	outErrCode := -1;		-- Set default return error code to ERROR state
17443
 
17444
	OPEN an_duplicate_cur;
17445
    FETCH an_duplicate_cur INTO an_duplicate_rec;
17446
 
17447
    IF an_duplicate_rec.cnt_note < 1
17448
    THEN
17449
		--- Update Additional Note ---
17450
	    UPDATE ADDITIONAL_NOTES SET
17451
		       note_title = psNote_title,
17452
		       note_body = psNote_body,
17453
		       mod_date = Ora_Sysdate,
17454
		       mod_user = pnUser_id
17455
         WHERE note_id = pnNote_id
17456
           AND pv_id = pnPv_id;
17457
		outErrCode := 0;		-- Set return to SUCCESS
17458
	END IF;
17459
 
17460
	CLOSE an_duplicate_cur;
17461
END Update_Additional_Note;
1374 dpurdie 17462
/
17463
--------------------------------------------------------
17464
--  DDL for Procedure NEW_UNIT_TEST
17465
--------------------------------------------------------
1373 dpurdie 17466
 
17467
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
17468
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
17469
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
17470
                                            sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,
17471
                                            sDpkg_path IN VARCHAR2,
17472
                                            sResults IN VARCHAR2,
17473
                                            sCompletion_date IN VARCHAR2,
17474
                                            nCompleted_by IN NUMBER,
17475
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
17476
											enumTEST_TYPE_NOT_DONE IN NUMBER,
17477
											outFileName OUT VARCHAR2
17478
                                           ) IS
17479
/* ---------------------------------------------------------------------------
17480
    Version: 3.2.0
17481
   --------------------------------------------------------------------------- */
17482
 
17483
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
17484
 
17485
    newID NUMBER;
17486
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
17487
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
17488
 
17489
BEGIN
17490
 
17491
	-- Get new ID --
17492
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
17493
 
17494
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
17495
       	ResultsURL := sResults;
17496
       ELSE
17497
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
17498
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
17499
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
17500
           END IF;
17501
       END IF;
17502
 
17503
	-- Remove NOT_DONE entry if exists
17504
	DELETE FROM UNIT_TESTS
17505
	 WHERE pv_id = nPv_id
17506
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
17507
 
17508
	--- Add Additional Note ---
17509
    INSERT INTO UNIT_TESTS ( TEST_ID,
17510
								PV_ID,
17511
								TEST_TYPES_FK,
17512
								TEST_SUMMARY,
17513
								COMPLETION_DATE,
17514
								COMPLETED_BY,
17515
								RESULTS_URL,
17516
								RESULTS_ATTACHMENT_NAME,
17517
								NUMOF_TEST )
17518
    VALUES (
17519
       	newID,
17520
           nPv_id,
17521
           nTestTypeId,
17522
           sTest_summary,
17523
           TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
17524
           nCompleted_by,
17525
           ResultsURL,
17526
           ResultsAttachment,
17527
		   sNumOfTest );
17528
 
17529
END New_Unit_Test;
1374 dpurdie 17530
/
17531
--------------------------------------------------------
17532
--  DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE
17533
--------------------------------------------------------
1373 dpurdie 17534
 
17535
  CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)IS
17536
Auto CHAR;
17537
/******************************************************************************
17538
   NAME:       SWITCH_REPRODUCIBLE_PACKAGE
17539
   PURPOSE:    
17540
 
17541
   REVISIONS:
17542
   Ver        Date        Author           Description
17543
   ---------  ----------  ---------------  ------------------------------------
17544
   1.0        14/12/2006   Rupesh Solanki       1. Created this procedure.
17545
 
17546
   NOTES:
17547
 
17548
   Automatically available Auto Replace Keywords:
17549
      Object Name:     SWITCH_REPRODUCIBLE_PACKAGE
17550
      Sysdate:         14/12/2006
17551
      Date and Time:   14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AM
17552
      Username:         (set in TOAD Options, Procedure Editor)
17553
      Table Name:       (set in the "New PL/SQL Object" dialog)
17554
 
17555
******************************************************************************/
17556
BEGIN
17557
 
17558
	 SELECT IS_AUTOBUILDABLE into Auto
17559
	 FROM PACKAGE_VERSIONS 
17560
	 WHERE PV_ID = nPvId;
17561
 
17562
	 IF Auto = 'N' Then
17563
 
17564
	 	UPDATE PACKAGE_VERSIONS
17565
	 	SET IS_AUTOBUILDABLE = 'Y'
17566
	 	WHERE PV_ID = nPvId;
17567
 
17568
 
17569
	 	/* LOG ACTION */
17570
   		Log_Action ( nPvId, 'reproducible_package', nUserId );	 
17571
 
17572
	 Else
17573
 
17574
		 UPDATE PACKAGE_VERSIONS
17575
		 SET IS_AUTOBUILDABLE = 'N'
17576
		 WHERE PV_ID = nPvId;
17577
 
17578
 
17579
	 	 /* LOG ACTION */
17580
   	 	 Log_Action ( nPvId, 'unreproducible_package', nUserId );	 
17581
 
17582
	 End If;
17583
 
17584
 
17585
 
17586
 
17587
 
17588
 
17589
 
17590
 
17591
END SWITCH_REPRODUCIBLE_PACKAGE;
1374 dpurdie 17592
/
17593
--------------------------------------------------------
17594
--  DDL for Procedure LOG_DAEMON_ACTION
17595
--------------------------------------------------------
1373 dpurdie 17596
 
17597
  CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,
17598
												 enumActionTypeName IN VARCHAR2,
17599
		                                         nUserId IN NUMBER,
17600
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL  ) IS
17601
/* ---------------------------------------------------------------------------
17602
    Version: 3.0
17603
   --------------------------------------------------------------------------- */
17604
 
17605
    ActionTypeId NUMBER;
17606
 
17607
BEGIN
17608
 
17609
    -- Get Action Type FK
17610
    SELECT act.ACTTYPE_ID INTO ActionTypeId
17611
      FROM ACTION_TYPE act
17612
     WHERE act.NAME = enumActionTypeName;
17613
 
17614
 
17615
    INSERT INTO DAEMON_ACTION_LOG
17616
    VALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );
17617
 
17618
 
17619
END Log_Daemon_Action;
1374 dpurdie 17620
/
17621
--------------------------------------------------------
17622
--  DDL for Procedure UPDATE_MISC_VIEW
17623
--------------------------------------------------------
1373 dpurdie 17624
 
17625
  CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS
17626
/******************************************************************************
17627
   NAME:       UPDATE_MISC_VIEW
17628
   PURPOSE:    
17629
 
17630
   REVISIONS:
17631
   Ver        Date        Author           Description
17632
   ---------  ----------  ---------------  ------------------------------------
17633
   1.0        16/03/2007          1. Created this procedure.
17634
 
17635
   NOTES:
17636
 
17637
   Automatically available Auto Replace Keywords:
17638
      Object Name:     UPDATE_MISC_VIEW
17639
      Sysdate:         16/03/2007
17640
      Date and Time:   16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AM
17641
      Username:         (set in TOAD Options, Procedure Editor)
17642
      Table Name:       (set in the "New PL/SQL Object" dialog)
17643
 
17644
******************************************************************************/
17645
   CURSOR view_cur /*Create a record set to store the ripple data*/
17646
   IS
17647
   	 SELECT pkg.pkg_id, rc.base_view_id 
17648
	 FROM package_versions pv, packages pkg, release_content rc
17649
	 where rc.rtag_id = 2362
17650
	 and rc.pv_id = pv.pv_id
17651
	 and pv.pkg_id = pkg.pkg_id;
17652
   view_rec   view_cur%ROWTYPE;
17653
 
17654
 
17655
 
17656
BEGIN
17657
   OPEN view_cur;
17658
 
17659
   FETCH view_cur
17660
    INTO view_rec;
17661
 
17662
   WHILE view_cur%FOUND
17663
   LOOP
17664
 
17665
 
17666
	   update release_content
17667
	   set base_view_id = view_rec.base_view_id
17668
	   where rtag_id = 8027
17669
	   and pv_id IN 
17670
	   (
17671
	   	select pv.pv_id from release_content rc, package_versions pv
17672
		where rc.rtag_id = 8027
17673
		and pv.pv_id = rc.pv_id
17674
		and pv.pkg_id = view_rec.pkg_id 
17675
 
17676
	   );
17677
 
17678
 
17679
 
17680
 
17681
 
17682
 
17683
 
17684
 
17685
 
17686
   FETCH view_cur
17687
   		 INTO view_rec;
17688
   END LOOP;	 
17689
 
17690
 
17691
 
17692
 
17693
 
17694
END UPDATE_MISC_VIEW; 
1374 dpurdie 17695
/
17696
--------------------------------------------------------
17697
--  DDL for Procedure CHECK_NEW_PATCHES
17698
--------------------------------------------------------
1373 dpurdie 17699
 
17700
  CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (
17701
   nrtagid   IN   release_content.rtag_id%TYPE
17702
)
17703
IS
17704
/* ---------------------------------------------------------------------------
17705
    Version: 3.0
17706
   --------------------------------------------------------------------------- */
17707
BEGIN
17708
   /*--------------- Business Rules Here -------------------*/
17709
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
17710
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
17711
   END IF
17712
 
17713
   /*-------------------------------------------------------*/
17714
   UPDATE release_content rc
17715
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
17716
    WHERE rc.pv_id IN (
17717
             SELECT prod.pv_id
17718
               FROM (SELECT   pp.pv_id AS orig_parent_id,
17719
                              COUNT (*) AS num_of_patches
17720
                         FROM release_content rc, package_patches pp
17721
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17722
                     GROUP BY pp.pv_id) orig,
17723
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
17724
                              COUNT (*) AS num_of_patches
17725
                         FROM release_content rc,
17726
                              package_patches pp,
17727
                              package_dependencies dep,
17728
                              package_versions pv,
17729
                              package_patches prodpp
17730
                        WHERE rc.pv_id = pp.pv_id
17731
                          AND rc.rtag_id = nrtagid
17732
                          AND pp.patch_id = dep.dpv_id
17733
                          AND dep.pv_id = pv.pv_id
17734
                          AND pv.is_patch = 'Y'
17735
                          AND pv.dlocked = 'Y'
17736
                          AND prodpp.patch_id = dep.pv_id
17737
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
17738
                    release_content rc
17739
              WHERE orig.orig_parent_id = prod.pv_id
17740
                AND orig.num_of_patches != prod.num_of_patches
17741
                AND rc.rtag_id = nrtagid
17742
                AND rc.pv_id = prod.pv_id
17743
                AND rc.pkg_state = 0
17744
             UNION
17745
             SELECT   prodpp.pv_id
17746
                 FROM release_content rc,
17747
                      package_patches pp,
17748
                      package_dependencies dep,
17749
                      package_versions pv,
17750
                      package_patches prodpp
17751
                WHERE rc.pv_id = pp.pv_id
17752
                  AND rc.rtag_id = nrtagid
17753
                  AND pp.patch_id = dep.dpv_id
17754
                  AND dep.pv_id = pv.pv_id
17755
                  AND pv.is_patch = 'Y'
17756
                  AND pv.dlocked = 'Y'
17757
                  AND prodpp.patch_id = dep.pv_id
17758
             GROUP BY prodpp.pv_id, pp.pv_id
17759
             MINUS
17760
             SELECT   pp.pv_id
17761
                 FROM release_content rc, package_patches pp
17762
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17763
             GROUP BY pp.pv_id);
17764
END check_new_patches;
1374 dpurdie 17765
/
17766
--------------------------------------------------------
17767
--  DDL for Procedure CLEAN_ADVISORY_RIPPLE
17768
--------------------------------------------------------
1373 dpurdie 17769
 
17770
  CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)
17771
IS
17772
/******************************************************************************
17773
   NAME:       clean_advisory_ripple
17774
 
17775
   PURPOSE:    To delete entries from the advisory_ripple table based upon
17776
               an RTAG_ID only
17777
 
17778
               This is a tidy-up operation performed against the advisory_ripple
17779
               table, ensuring that the table does not have rtag_id/pv_id
17780
               combinations that cannot be found in the release's wip/pending/release
17781
               tabs.
17782
 
17783
******************************************************************************/
17784
BEGIN
17785
   -- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.
17786
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
17787
   -- work_in_progress, planned, or release_content table.
17788
   -- NOTE: Planned operations that represent pending additive/subtractive merge
17789
   -- operations are ignored because they have not been approved yet and so
17790
   -- cannot be said to be "in the release".
17791
   DELETE FROM advisory_ripple
17792
         WHERE rtag_id = nrtagid
17793
           AND pv_id not in
17794
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
17795
                 UNION
17796
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
17797
                 UNION
17798
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
17799
               );
17800
END clean_advisory_ripple;
1374 dpurdie 17801
/
17802
--------------------------------------------------------
17803
--  DDL for Procedure NEW_PATCH
17804
--------------------------------------------------------
1373 dpurdie 17805
 
17806
  CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17807
 	   	  		  					  	NNparent_id IN NUMBER,
17808
                                        sPatchIdList IN VARCHAR2,
17809
										NNuser_id IN NUMBER ) IS
17810
/* ---------------------------------------------------------------------------
17811
    Version: 3.5
17812
   --------------------------------------------------------------------------- */
17813
 
17814
    patchPv_id    NUMBER;
17815
	parPkg_id	  NUMBER;
17816
    LastInstallOrder NUMBER;
17817
    isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
17818
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
17819
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
17820
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
17821
	oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17822
 
17823
	CURSOR parent_cur IS
17824
        SELECT pv.*, pkg.pkg_name
17825
          FROM package_versions pv,
17826
		       packages pkg
17827
         WHERE pv.pv_id = NNparent_id
17828
		   AND pv.pkg_id = pkg.pkg_id;
17829
    parent_rec parent_cur%ROWTYPE;
17830
 
17831
    CURSOR patch_cur IS
17832
        SELECT pv.*, pg.pkg_name
17833
          FROM package_versions pv,
17834
		       packages pg
17835
         WHERE pv.pkg_id = parPkg_id
17836
		   AND pv.pkg_version = SSpatch_version
17837
		   AND pv.pkg_id = pg.pkg_id;
17838
    patch_rec patch_cur%ROWTYPE;
17839
 
17840
	CURSOR releases_cur IS
17841
        SELECT rc.pv_id
17842
		  FROM release_content rc
17843
		 WHERE rc.pv_id = patch_rec.pv_id;
17844
    releases_rec releases_cur%ROWTYPE;
17845
 
17846
 
17847
BEGIN
17848
 
17849
	-- Get Last Install Order
17850
    SELECT Count(*) INTO LastInstallOrder
17851
	  FROM PACKAGE_PATCHES pp
17852
	 WHERE pp.PV_ID = NNparent_id;
17853
 
17854
 
17855
    -- Get parent details
17856
	OPEN parent_cur;
17857
    FETCH parent_cur INTO parent_rec;
17858
	parPkg_id := parent_rec.pkg_id;
17859
 
17860
 
17861
	-- Find if patch exists in database
17862
    OPEN patch_cur;
17863
    FETCH patch_cur INTO patch_rec;
17864
 
17865
 
17866
    -- Parent must be official
17867
    IF parent_rec.dlocked = 'Y' THEN
17868
 
17869
	    IF patch_cur%NOTFOUND
17870
	    THEN
17871
        	isPatchDlocked := 'N';
17872
 
17873
	        -- Create new patch version --
17874
	        SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
17875
 
17876
 
17877
	        Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
17878
 
17879
	        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 )
17880
				   VALUES (
17881
						   patchPv_id,
17882
	                       parPkg_id,
17883
	                       SSpatch_version,
17884
	                       isPatchDlocked,
17885
	                       ORA_SYSDATE,
17886
	                       NNuser_id,
17887
	                       ORA_SYSDATETIME,
17888
	                       NNuser_id,
17889
	                       SSV_MM,
17890
	                       SSV_NMM,
17891
	                       SSV_EXT,
17892
	                       parent_rec.src_path,
17893
	                       'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
17894
	                       NNuser_id,
17895
						   'Y',
17896
                           patchPv_id,
17897
						   parent_rec.bs_id,
17898
						   parent_rec.is_autobuildable,
17899
						   parent_rec.ripple_field
17900
 
17901
						   );
17902
 
17903
			INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17904
		    	   ( SELECT NNparent_id AS pv_id,
17905
				            pv.pv_id AS patch_id,
17906
	                        LastInstallOrder + 1 AS INSTALL_ORDER
17907
				       FROM package_versions pv
17908
					  WHERE pv.pv_id = patchPv_id
17909
					    AND pv.is_patch = 'Y' );
17910
 
17911
	        /* LOG ACTION */
17912
            Log_Action ( patchPv_id, 'new_version', NNuser_id,
17913
        			     'Patch version created: '|| SSpatch_version );
17914
 
17915
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17916
        			     'New patch created and attached: '|| SSpatch_version );
17917
 
17918
 
17919
	    ELSE
17920
 
17921
		    patchPv_id := patch_rec.pv_id;
17922
	    	isPatchDlocked := patch_rec.dlocked;
17923
 
17924
			-- Find if pv_id exists in release content (i.e. it cannot be a patch)
17925
		    OPEN releases_cur;
17926
		    FETCH releases_cur INTO releases_rec;
17927
 
17928
			IF releases_cur%NOTFOUND
17929
	   		THEN
17930
				-- This pv_id is trully a patch, hence add Y to column IS_PATCH
17931
				UPDATE package_versions SET
17932
					   is_patch = 'Y'
17933
					   WHERE pv_id = patchPv_id;
17934
 
17935
				INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17936
			    	   ( SELECT NNparent_id AS pv_id,
17937
					            pv.pv_id AS patch_id,
17938
	                            LastInstallOrder + 1 AS INSTALL_ORDER
17939
					       FROM package_versions pv
17940
						  WHERE pv.pv_id = patchPv_id
17941
						    AND pv.is_patch = 'Y' );
17942
 
17943
			END IF;
17944
 
17945
			CLOSE releases_cur;
17946
 
17947
            /* LOG ACTION */
17948
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17949
        			     'Patch version was found and attached: '|| SSpatch_version );
17950
 
17951
	    END IF;
17952
 
17953
 
17954
 
17955
 
17956
    END IF;
17957
 
17958
 
17959
 
17960
    /* Create Patch Dependencies */
17961
    oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
17962
 
17963
 
17964
    -- Make sure patch is unofficial before altering its dependencies
17965
    IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
17966
    	-- Delete Existing Dependencies
17967
        DELETE
17968
          FROM PACKAGE_DEPENDENCIES dep
17969
         WHERE dep.PV_ID = patchPv_id;
17970
 
17971
 
17972
        -- Insert new dependencies
17973
        INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
17974
        SELECT patchPv_id AS PV_ID,
17975
        	   pv.PV_ID AS DPV_ID,
17976
               parPkg_id AS PKG_ID,
17977
               pv.PKG_ID AS DPKG_ID,
17978
               'L' AS BUILD_TYPE
17979
          FROM PACKAGE_VERSIONS pv
17980
         WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
17981
 
17982
 
17983
    END IF;
17984
 
17985
 
17986
    CLOSE parent_cur;
17987
    CLOSE patch_cur;
17988
END New_Patch;
1374 dpurdie 17989
/
17990
--------------------------------------------------------
17991
--  DDL for Procedure UPDATE_PROCESSES
17992
--------------------------------------------------------
1373 dpurdie 17993
 
17994
  CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES" 
17995
IS
17996
 
17997
proc_id NUMBER;
17998
/******************************************************************************
17999
   NAME:       DELETE_DO_NOT_RIPPLE
18000
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18001
               IS RELEASED
18002
 
18003
   REVISIONS:
18004
   Ver        Date        Author           Description
18005
   ---------  ----------  ---------------  ------------------------------------
18006
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18007
 
18008
   NOTES:
18009
 
18010
   Automatically available Auto Replace Keywords:
18011
      Object Name:     DELETE_DO_NOT_RIPPLE
18012
      Sysdate:         21/04/2006
18013
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18014
      Username:         (set in TOAD Options, Procedure Editor)
18015
      Table Name:       (set in the "New PL/SQL Object" dialog)
18016
 
18017
******************************************************************************/
18018
   CURSOR ripple_cur
18019
   IS
18020
      select proc_id,  proc_name, run_as, pkg_owner, is_interface from processes;
18021
 
18022
   ripple_rec   ripple_cur%ROWTYPE;
18023
BEGIN
18024
   OPEN ripple_cur;
18025
 
18026
   FETCH ripple_cur
18027
    INTO ripple_rec;
18028
 
18029
   WHILE ripple_cur%FOUND
18030
   LOOP
18031
 
18032
 
18033
update deployment_manager.processes_config 
18034
set proc_id = ripple_rec.proc_id
18035
where pkg_health_tag = ripple_rec.proc_name
18036
and cmd_interface IS NULL
18037
and pkg_owner IS NULL
18038
and is_interface IS NULL; 
18039
 
18040
 
18041
      FETCH ripple_cur
18042
       INTO ripple_rec;
18043
   END LOOP;
18044
END UPDATE_PROCESSES;
1374 dpurdie 18045
/
18046
--------------------------------------------------------
18047
--  DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO
18048
--------------------------------------------------------
1373 dpurdie 18049
 
18050
  CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO" 
18051
IS
18052
/******************************************************************************
18053
   NAME:       DELETE_AUTOBUILD_FAILURE_INFO
18054
   PURPOSE:
18055
 
18056
   REVISIONS:
18057
   Ver        Date        Author           Description
18058
   ---------  ----------  ---------------  ------------------------------------
18059
   1.0        2/06/2006    Rupesh Solanki      1. Created this procedure.
18060
 
18061
   NOTES:
18062
 
18063
   Automatically available Auto Replace Keywords:
18064
      Object Name:     DELETE_AUTOBUILD_FAILURE_INFO
18065
      Sysdate:         2/06/2006
18066
      Date and Time:   2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AM
18067
      Username:         (set in TOAD Options, Procedure Editor)
18068
      Table Name:       (set in the "New PL/SQL Object" dialog)
18069
 
18070
******************************************************************************/
18071
BEGIN
18072
   DELETE FROM autobuild_failure
18073
         WHERE group_email_id NOT IN (SELECT group_email_id
18074
                                        FROM members_group);
18075
END delete_autobuild_failure_info;
1374 dpurdie 18076
/
18077
--------------------------------------------------------
18078
--  DDL for Procedure TEST
18079
--------------------------------------------------------
1373 dpurdie 18080
 
18081
  CREATE OR REPLACE PROCEDURE "TEST" 
18082
IS
18083
 
18084
proc_id NUMBER;
18085
/******************************************************************************
18086
   NAME:       DELETE_DO_NOT_RIPPLE
18087
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18088
               IS RELEASED
18089
 
18090
   REVISIONS:
18091
   Ver        Date        Author           Description
18092
   ---------  ----------  ---------------  ------------------------------------
18093
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18094
 
18095
   NOTES:
18096
 
18097
   Automatically available Auto Replace Keywords:
18098
      Object Name:     DELETE_DO_NOT_RIPPLE
18099
      Sysdate:         21/04/2006
18100
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18101
      Username:         (set in TOAD Options, Procedure Editor)
18102
      Table Name:       (set in the "New PL/SQL Object" dialog)
18103
 
18104
******************************************************************************/
18105
   CURSOR ripple_cur
18106
   IS
18107
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
18108
 
18109
   ripple_rec   ripple_cur%ROWTYPE;
18110
BEGIN
18111
   OPEN ripple_cur;
18112
 
18113
   FETCH ripple_cur
18114
    INTO ripple_rec;
18115
 
18116
   WHILE ripple_cur%FOUND
18117
   LOOP
18118
 
18119
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
18120
 
18121
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
18122
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
18123
 
18124
      FETCH ripple_cur
18125
       INTO ripple_rec;
18126
   END LOOP;
18127
END test;
1374 dpurdie 18128
/
18129
--------------------------------------------------------
18130
--  DDL for Procedure CLEAN_DO_NOT_RIPPLE
18131
--------------------------------------------------------
1373 dpurdie 18132
 
18133
  CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)
18134
IS
18135
/******************************************************************************
18136
   NAME:       clean_do_not_ripple
18137
 
18138
   PURPOSE:    To delete entries from the do_not_ripple table based upon
18139
               an RTAG_ID only
18140
 
18141
               This is a tidy-up operation performed against the do_not_ripple
18142
               table, ensuring that the table does not have rtag_id/pv_id
18143
               combinations that cannot be found in the release's wip/pending/release
18144
               tabs.
18145
 
18146
******************************************************************************/
18147
BEGIN
18148
   -- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.
18149
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
18150
   -- work_in_progress, planned, or release_content table.
18151
   -- NOTE: Planned operations that represent pending additive/subtractive merge
18152
   -- operations are ignored because they have not been approved yet and so
18153
   -- cannot be said to be "in the release".
18154
   DELETE FROM do_not_ripple
18155
         WHERE rtag_id = nrtagid
18156
           AND pv_id not in
18157
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
18158
                 UNION
18159
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
18160
                 UNION
18161
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
18162
               );
18163
END clean_do_not_ripple;
1374 dpurdie 18164
/
18165
--------------------------------------------------------
18166
--  DDL for Procedure REBUILD_ENVIRONMENT
18167
--------------------------------------------------------
1373 dpurdie 18168
 
18169
  CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS
18170
 
18171
/* ---------------------------------------------------------------------------
18172
    Version: 3.3
18173
   --------------------------------------------------------------------------- */
18174
    rowCnt NUMBER := 0;
18175
    iteration NUMBER := 2;          -- Iterations counter
18176
    maxIterations NUMBER := 50;    -- Maximum number of iterations allowed.
18177
                                    -- This will prevent infinite loops if cyrcular dependencies are found
18178
    sessionNum NUMBER;
18179
BEGIN
18180
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18181
 
18182
 
18183
    -- Redo Patch Ignore warnings
18184
    Ignore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );
18185
 
18186
 
18187
    Level_One_Conflicts ( NNrtag_id, sessionNum );
18188
 
18189
    LOOP
18190
        Level_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );
18191
        iteration := iteration + 1;
18192
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18193
    END LOOP;
18194
 
18195
    Update_Package_States ( NNrtag_id, sessionNum );
18196
 
18197
    DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;
18198
 
18199
    -- Flag Packages with New Patches Available
18200
    Check_New_Patches ( NNrtag_id );
18201
 
18202
	Clean_Do_Not_Ripple( NNrtag_id );
18203
 
18204
 
18205
	/* Circular Dependency Flag */
18206
    /*
18207
	IF iteration > maxIterations
18208
	THEN
18209
		UPDATE release_tags SET
18210
		   	   circular_dependency = 'Y'
18211
		 WHERE rtag_id = NNrtag_id;
18212
	ELSE
18213
		UPDATE release_tags SET
18214
		   	   circular_dependency = NULL
18215
		 WHERE rtag_id = NNrtag_id;
18216
	END IF;
18217
    */
18218
END Rebuild_Environment;
1374 dpurdie 18219
/
18220
--------------------------------------------------------
18221
--  DDL for Procedure TEST_MARCO
18222
--------------------------------------------------------
1373 dpurdie 18223
 
18224
  CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS
18225
/******************************************************************************
18226
   NAME:       TEST_MARCO
18227
   PURPOSE:    
18228
 
18229
   REVISIONS:
18230
   Ver        Date        Author           Description
18231
   ---------  ----------  ---------------  ------------------------------------
18232
   1.0        2/03/2007          1. Created this procedure.
18233
 
18234
   NOTES:
18235
 
18236
   Automatically available Auto Replace Keywords:
18237
      Object Name:     TEST_MARCO
18238
      Sysdate:         2/03/2007
18239
      Date and Time:   2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PM
18240
      Username:         (set in TOAD Options, Procedure Editor)
18241
      Table Name:       (set in the "New PL/SQL Object" dialog)
18242
 
18243
******************************************************************************/
18244
 
18245
parPv_id    NUMBER;
18246
parPkg_id   NUMBER;
18247
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18248
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18249
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18250
BEGIN
18251
 
18252
SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18253
 
18254
        /* LOG ACTION */
18255
        Log_Action ( parPv_id, 'new_version', 3764,
18256
        			 'New package version: '|| parPv_id || '.' );
18257
 
18258
        Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );
18259
 
18260
     -- Clone Package Version Details --
18261
            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,
18262
                                           src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )
18263
                SELECT parPv_id         AS pv_id,
18264
                       pv.pkg_id        AS pkg_id,
18265
                       parPv_id || '.'    AS pkg_version,
18266
                       'N'              AS dlocked,
18267
                       Ora_Sysdate      AS created_stamp,
18268
                       3764        AS creator_id,
18269
                       Ora_Sysdatetime  AS modified_stamp,
18270
                       3764        AS modifier_id,
18271
                       SSV_MM          AS V_MM,
18272
                       SSV_NMM         AS V_NMM,
18273
                       SSV_EXT          AS V_EXT,
18274
                       pv.src_path,
18275
                       pv.pv_description,
18276
                       pv.PV_OVERVIEW,
18277
                       112982 	AS LAST_PV_ID,
18278
                       pv.owner_id,
18279
					   pv.BUILD_TYPE,
18280
					   pv.IS_BUILD_ENV_REQUIRED,
18281
					   pv.bs_id,
18282
					   pv.is_autobuildable,
18283
					   pv.IS_DEPLOYABLE
18284
                  FROM PACKAGE_VERSIONS pv
18285
                 WHERE pv.pv_id = 112982;		
18286
 
18287
Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );
18288
 
18289
 
18290
END TEST_MARCO;
1374 dpurdie 18291
/
18292
--------------------------------------------------------
18293
--  DDL for Procedure LOG_ACTION_BULK
18294
--------------------------------------------------------
1373 dpurdie 18295
 
18296
  CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,
18297
										 	  enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18298
                                         	  nUserId IN ACTION_LOG.USER_ID%TYPE,
18299
										 	  sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18300
/* ---------------------------------------------------------------------------
18301
    Version: 3.0
18302
   --------------------------------------------------------------------------- */
18303
 
18304
    ActionTypeId NUMBER;
18305
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18306
 
18307
BEGIN
18308
 
18309
    oPvIdCollector := IN_LIST_NUMBER ( nPvIdList );
18310
 
18311
    -- Get Action Type FK
18312
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18313
      FROM ACTION_TYPE act
18314
     WHERE act.NAME = enumActionTypeName;
18315
 
18316
    -- Log Action
18317
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18318
    SELECT nUserId,
18319
    	   ORA_SYSDATETIME,
18320
           pv.PV_ID,
18321
           sAdditionalComments,
18322
           ActionTypeId
18323
      FROM PACKAGE_VERSIONS pv
18324
     WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18325
 
18326
 
18327
END Log_Action_Bulk;
1374 dpurdie 18328
/
18329
--------------------------------------------------------
18330
--  DDL for Procedure CLONED_PACKAGE_PROCESSES
18331
--------------------------------------------------------
1373 dpurdie 18332
 
18333
  CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES" 
18334
IS
18335
 
18336
proc_id NUMBER;
18337
/******************************************************************************
18338
   NAME:       DELETE_DO_NOT_RIPPLE
18339
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18340
               IS RELEASED
18341
 
18342
   REVISIONS:
18343
   Ver        Date        Author           Description
18344
   ---------  ----------  ---------------  ------------------------------------
18345
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18346
 
18347
   NOTES:
18348
 
18349
   Automatically available Auto Replace Keywords:
18350
      Object Name:     DELETE_DO_NOT_RIPPLE
18351
      Sysdate:         21/04/2006
18352
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18353
      Username:         (set in TOAD Options, Procedure Editor)
18354
      Table Name:       (set in the "New PL/SQL Object" dialog)
18355
 
18356
******************************************************************************/
18357
   CURSOR ripple_cur
18358
   IS
18359
      select distinct proc_id, prod_id from deployment_manager.processes_config;
18360
 
18361
   ripple_rec   ripple_cur%ROWTYPE;
18362
BEGIN
18363
   OPEN ripple_cur;
18364
 
18365
   FETCH ripple_cur
18366
    INTO ripple_rec;
18367
 
18368
   WHILE ripple_cur%FOUND
18369
   LOOP
18370
 
18371
 
18372
 
18373
insert into package_processes (PROC_ID, PV_ID) 
18374
values( ripple_rec.proc_id, ripple_rec.prod_id);
18375
 
18376
      FETCH ripple_cur
18377
       INTO ripple_rec;
18378
   END LOOP;
18379
END CLONED_PACKAGE_PROCESSES;
1374 dpurdie 18380
/
18381
--------------------------------------------------------
18382
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2
18383
--------------------------------------------------------
1373 dpurdie 18384
 
18385
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
18386
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18387
                                                          NNuser_id IN NUMBER,
18388
                                                          retPV_ID OUT NUMBER,
18389
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
18390
/* ---------------------------------------------------------------------------
18391
    Version: 4.0
18392
   --------------------------------------------------------------------------- */
18393
 
18394
    parPkg_id   NUMBER;
18395
    parPv_id    NUMBER;
18396
    cloneFrom_pv_id NUMBER;
18397
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18398
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18399
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18400
 
18401
    CURSOR packages_cur IS
18402
        SELECT pkg_id FROM PACKAGES
18403
        WHERE pkg_name = SSpkg_name;
18404
    packages_rec packages_cur%ROWTYPE;
18405
 
18406
    CURSOR package_versions_cur IS
18407
        SELECT pv_id FROM PACKAGE_VERSIONS
18408
        WHERE pkg_id = parPkg_id
18409
        AND pkg_version = SSpkg_version;
18410
    package_versions_rec package_versions_cur%ROWTYPE;
18411
 
18412
    CURSOR clone_package_versions_cur IS
18413
        SELECT MAX(pv_id) AS pv_id
18414
          FROM PACKAGE_VERSIONS
18415
         WHERE pkg_id = parPkg_id
18416
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
18417
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
18418
 
18419
BEGIN
18420
    /* -------------------------------------------- */
18421
    /* Find if pkg_name exists and seed if required */
18422
    /* -------------------------------------------- */
18423
    OPEN packages_cur;
18424
    FETCH packages_cur INTO packages_rec;
18425
 
18426
    IF packages_cur%NOTFOUND
18427
    THEN
18428
        /* INSERT into packages table */
18429
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
18430
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
18431
 
18432
    ELSE
18433
        parPkg_id := packages_rec.pkg_id;
18434
 
18435
    END IF;
18436
 
18437
    CLOSE packages_cur;
18438
 
18439
 
18440
 
18441
    /* ---------------------------------------------------- */
18442
    /* Find if package_version exists and seed if required  */
18443
    /* ---------------------------------------------------- */
18444
    OPEN package_versions_cur;
18445
    FETCH package_versions_cur INTO package_versions_rec;
18446
 
18447
    IF package_versions_cur%NOTFOUND
18448
    THEN
18449
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18450
 
18451
        /* LOG ACTION */
18452
        Log_Action ( parPv_id, 'new_version', NNuser_id,
18453
        			 'New package version: '|| SSpkg_version );
18454
 
18455
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
18456
 
18457
 
18458
 
18459
 
18460
 
18461
            /* CLONE details from similar version  OR  from nCloneFromPvId */
18462
			IF ( NOT nCloneFromPvId IS NULL) THEN
18463
            	cloneFrom_pv_id := nCloneFromPvId;
18464
			ELSE
18465
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
18466
			END IF;
18467
 
18468
            -- Clone Package Version Details --
18469
            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,
18470
                                           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 )
18471
                SELECT parPv_id         AS pv_id,
18472
                       parPkg_id        AS pkg_id,
18473
                       SSpkg_version    AS pkg_version,
18474
                       'N'              AS dlocked,
18475
                       Ora_Sysdate      AS created_stamp,
18476
                       NNuser_id        AS creator_id,
18477
                       Ora_Sysdatetime  AS modified_stamp,
18478
                       NNuser_id        AS modifier_id,
18479
                       SSV_MM           AS V_MM,
18480
                       SSV_NMM          AS V_NMM,
18481
                       SSV_EXT          AS V_EXT,
18482
                       pv.src_path,
18483
                       pv.pv_description,
18484
                       pv.PV_OVERVIEW,
18485
                       cloneFrom_pv_id 	AS LAST_PV_ID,
18486
                       pv.owner_id,
18487
					   pv.BUILD_TYPE,
18488
					   pv.IS_BUILD_ENV_REQUIRED,
18489
					   pv.bs_id,
18490
					   pv.is_autobuildable,
18491
					   pv.IS_DEPLOYABLE,
18492
					   pv.ripple_field
18493
                  FROM PACKAGE_VERSIONS pv
18494
                 WHERE pv.pv_id = cloneFrom_pv_id;
18495
 
18496
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
18497
 
18498
        retPV_ID := parPv_id;
18499
 
18500
    ELSE
18501
        retPV_ID := package_versions_rec.pv_id;
18502
 
18503
    END IF;
18504
 
18505
    CLOSE package_versions_cur;
18506
 
18507
 
18508
 
18509
 
18510
END Seed_Package_Names_Versions2;
1374 dpurdie 18511
/
18512
--------------------------------------------------------
18513
--  DDL for Procedure BUILD_TREE
18514
--------------------------------------------------------
1373 dpurdie 18515
 
18516
  CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,
18517
	   	  		  					     retSessionNum OUT NUMBER ) IS
18518
 
18519
/* ---------------------------------------------------------------------------
18520
    Version: 3.0.0
18521
   --------------------------------------------------------------------------- */
18522
    rowCnt 			NUMBER := 0;						-- Iterations counter
18523
    iteration 		NUMBER := 1;                  -- Maximum number of iterations allowed.
18524
    maxIterations 	NUMBER := 50;      	  	-- This will prevent infinite loops if cyrcular dependencies are found
18525
	UP_THE_TREE 	CONSTANT NUMBER DEFAULT 1;
18526
	DOWN_THE_TREE 	CONSTANT NUMBER DEFAULT -1;
18527
    sessionNum 		NUMBER;
18528
	levelNum		NUMBER;
18529
 
18530
BEGIN
18531
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18532
 
18533
	/*
18534
	||	   Start UP THE TREE
18535
	*/
18536
 
18537
 
18538
	/* Packages with no dependencies */    
18539
    INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18540
		SELECT sessionNum AS SESSION_NUM,
18541
			   iteration AS LEVEL_NUM,
18542
			   UP_THE_TREE AS DIRECTION,
18543
			   rc.pv_id, pv.pkg_id, pv.v_ext
18544
		  FROM release_content rc,
18545
		  	   package_versions pv
18546
		 WHERE rc.rtag_id = nRtag_id
18547
		   AND rc.pv_id = pv.pv_id
18548
		 MINUS
18549
		SELECT sessionNum AS SESSION_NUM, 
18550
			   iteration AS LEVEL_NUM,
18551
			   UP_THE_TREE AS DIRECTION,
18552
			   dep.pv_id, pv.pkg_id, pv.v_ext
18553
		  FROM package_dependencies dep,
18554
		  	   package_versions pv
18555
		 WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )
18556
		   AND dep.pv_id = pv.pv_id;
18557
 
18558
 
18559
	/* Browse UP the build tree */	   
18560
	iteration := iteration + 1;
18561
    LOOP
18562
 
18563
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18564
			SELECT DISTINCT 
18565
			       sessionNum AS SESSION_NUM,
18566
			       iteration AS LEVEL_NUM,
18567
				   UP_THE_TREE AS DIRECTION, 
18568
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18569
			  FROM (  
18570
			        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
18571
			          FROM package_dependencies dep,
18572
			               release_content rc,
18573
						   package_versions pv,
18574
						   package_versions dpv
18575
			         WHERE dep.pv_id = rc.pv_id
18576
			           AND rc.rtag_id = nRtag_id
18577
					   AND dep.pv_id = pv.pv_id
18578
					   AND dep.dpv_id = dpv.pv_id
18579
					) rdep,
18580
					temp_tree_browse ttb
18581
			 WHERE rdep.dpkg_id  = ttb.pkg_id
18582
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')
18583
			   AND ttb.SESSION_NUM = sessionNum
18584
			   AND ttb.LEVEL_NUM = iteration - 1	
18585
			MINUS
18586
			/* Packages with all depencencies NOT matched */  
18587
			SELECT DISTINCT 
18588
			       sessionNum AS SESSION_NUM,
18589
			       iteration AS LEVEL_NUM, 
18590
				   UP_THE_TREE AS DIRECTION,
18591
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18592
			  FROM (  
18593
			        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
18594
			          FROM package_dependencies dep,
18595
			               release_content rc,
18596
						   package_versions pv,
18597
						   package_versions dpv
18598
			         WHERE dep.pv_id = rc.pv_id
18599
			           AND rc.rtag_id = nRtag_id
18600
					   AND dep.pv_id = pv.pv_id
18601
					   AND dep.dpv_id = dpv.pv_id
18602
					) rdep,
18603
					(
18604
					 SELECT tb.*
18605
					   FROM temp_tree_browse tb
18606
					  WHERE tb.SESSION_NUM = sessionNum
18607
					) ttb
18608
			 WHERE rdep.dpkg_id  = ttb.pkg_id (+)
18609
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')
18610
			   AND ttb.SESSION_NUM IS NULL;
18611
 
18612
		rowCnt := SQL%ROWCOUNT;
18613
		IF rowCnt > 0 THEN
18614
           iteration := iteration + 1;
18615
		END IF;
18616
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18617
    END LOOP;
18618
 
18619
	/*---------------------------------------------------------------------------------------------------------------------*/
18620
 
18621
	/*     Check for unresolved dependencies
18622
	||  
18623
	*/
18624
	/* UNRESOLVED */
18625
	 SELECT COUNT(*) INTO rowCnt
18626
	   FROM (
18627
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18628
			  FROM release_content rc,
18629
			  	   package_versions pv
18630
			 WHERE rc.rtag_id = nRtag_id
18631
			   AND rc.pv_id = pv.pv_id	   
18632
			MINUS
18633
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18634
			  FROM temp_tree_browse ttb
18635
			 WHERE ttb.session_num = sessionNum
18636
			);
18637
 
18638
 
18639
 
18640
	 IF rowCnt > 0 
18641
	 THEN
18642
	 	 /*     Circular dependencies detected.
18643
		 ||     Try to resolve build order from the top now.
18644
		 ||		Start DOWN THE TREE
18645
		 */
18646
 
18647
		iteration := 0; 
18648
		 /* Top Level packages */	
18649
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )	   
18650
			SELECT sessionNum AS SESSION_NUM,
18651
			       iteration AS LEVEL_NUM,
18652
				   DOWN_THE_TREE AS DIRECTION,
18653
				   pv.pv_id, pv.pkg_id, pv.v_ext
18654
			  FROM (		   
18655
					/* Packages no one depends on ( Top level packages )*/
18656
					( 
18657
					/* All parents*/ 
18658
					SELECT pv.pkg_id, pv.v_ext
18659
			          FROM package_dependencies dep,
18660
			               release_content rc,
18661
						   package_versions pv
18662
			         WHERE dep.pv_id = rc.pv_id
18663
			           AND rc.rtag_id = nRtag_id
18664
					   AND dep.pv_id = pv.pv_id
18665
					 MINUS
18666
					 /* All children */
18667
					SELECT dpv.pkg_id, dpv.v_ext
18668
			          FROM package_dependencies dep,
18669
			               release_content rc,
18670
						   package_versions dpv
18671
			         WHERE dep.pv_id = rc.pv_id
18672
			           AND rc.rtag_id = nRtag_id
18673
					   AND dep.dpv_id = dpv.pv_id
18674
					 ) 
18675
					 MINUS
18676
					/* Packages with resolved dependencies from UP THE TREE */ 
18677
					SELECT ttb.pkg_id, ttb.v_ext
18678
					  FROM temp_tree_browse ttb
18679
					 WHERE ttb.session_num = sessionNum
18680
				  ) tpkg,
18681
				  package_versions pv,
18682
				  release_content rc
18683
			WHERE rc.rtag_id = nRtag_id
18684
			  AND rc.pv_id = pv.pv_id
18685
			  AND tpkg.pkg_id = pv.pkg_id
18686
			  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18687
 
18688
 
18689
		 /* Keep taking packages which no one depende on */			  
18690
		 iteration := iteration - 1;  
18691
		 LOOP	  
18692
			   INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18693
					SELECT sessionNum AS SESSION_NUM,
18694
					       iteration AS LEVEL_NUM,
18695
					       DOWN_THE_TREE AS DIRECTION,
18696
					       pv.pv_id, pv.pkg_id, pv.v_ext
18697
					  FROM (		   
18698
					 	/* All Unresolved */
18699
					 	(
18700
					 	SELECT pv.pkg_id, pv.v_ext
18701
					 	  FROM release_content rc,
18702
					 	  	   package_versions pv
18703
					 	 WHERE rc.rtag_id = nRtag_id
18704
					 	   AND rc.pv_id = pv.pv_id	   
18705
					 	MINUS
18706
					 	SELECT ttb.pkg_id, ttb.v_ext
18707
					 	  FROM temp_tree_browse ttb
18708
					 	 WHERE ttb.session_num = sessionNum
18709
					 	)
18710
					 	 MINUS
18711
					 	(  
18712
					 	 /* Children of Unresolved */  
18713
					 	SELECT dpv.pkg_id, dpv.V_EXT
18714
					 	  FROM (
18715
					 			SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18716
					 			  FROM release_content rc,
18717
					 			  	   package_versions pv
18718
					 			 WHERE rc.rtag_id = nRtag_id
18719
					 			   AND rc.pv_id = pv.pv_id	   
18720
					 			MINUS
18721
					 			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18722
					 			  FROM temp_tree_browse ttb
18723
					 			 WHERE ttb.session_num = sessionNum
18724
					 		   ) unr,
18725
					 		   package_dependencies dep,
18726
					 		   package_versions dpv
18727
					 	 WHERE unr.pv_id = dep.pv_id
18728
					 	   AND dep.dpv_id = dpv.pv_id
18729
					 	 )  
18730
					   ) tpkg,
18731
					   package_versions pv,
18732
					   release_content rc
18733
					WHERE rc.rtag_id = nRtag_id
18734
					  AND rc.pv_id = pv.pv_id
18735
					  AND tpkg.pkg_id = pv.pkg_id
18736
					  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18737
 
18738
            rowCnt := SQL%ROWCOUNT;
18739
        	IF rowCnt > 0 THEN
18740
	           iteration := iteration - 1;
18741
			END IF;
18742
            EXIT WHEN (rowCnt < 1);
18743
     	END LOOP;
18744
 
18745
	 END IF;
18746
 
18747
 
18748
	/*---------------------------------------------------------------------------------------------------------------------*/
18749
 
18750
	/* 
18751
	|| 	 Save results from temp table
18752
	*/	
18753
	/* Clean up build_order table */
18754
	DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;
18755
 
18756
	/* Save UP THE TREE */
18757
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18758
		SELECT nRtag_id AS rtag_id,
18759
			   ttb.level_num AS step_num, 
18760
			   ttb.PV_ID
18761
		  FROM temp_tree_browse ttb
18762
		 WHERE ttb.session_num = sessionNum
18763
		   AND ttb.direction = UP_THE_TREE;	
18764
 
18765
	/*Get last step_num */
18766
	SELECT MAX(ttb.level_num) + 1 INTO levelNum
18767
	FROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;
18768
 
18769
	/* UNRESOLVED */
18770
	 SELECT COUNT(*) INTO rowCnt
18771
	   FROM (
18772
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18773
			  FROM release_content rc,
18774
			  	   package_versions pv
18775
			 WHERE rc.rtag_id = nRtag_id
18776
			   AND rc.pv_id = pv.pv_id	   
18777
			MINUS
18778
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18779
			  FROM temp_tree_browse ttb
18780
			 WHERE ttb.session_num = sessionNum
18781
			);
18782
 
18783
 
18784
	IF rowCnt > 0
18785
	THEN
18786
		/* Save unresolved packages */
18787
 		INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )
18788
		    SELECT  nRtag_id AS rtag_id,
18789
				    levelNum AS step_num, 
18790
				    upv.PV_ID,
18791
					'Y' AS UNRESOLVED
18792
			   FROM (
18793
					 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18794
					  FROM release_content rc,
18795
					  	   package_versions pv
18796
					 WHERE rc.rtag_id = nRtag_id
18797
					   AND rc.pv_id = pv.pv_id	   
18798
					MINUS
18799
					SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18800
					  FROM temp_tree_browse ttb
18801
					 WHERE ttb.session_num = sessionNum
18802
					) upv;
18803
	END IF;	
18804
 
18805
	/* Save DOWN THE TREE */
18806
	levelNum := 1000;
18807
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18808
		SELECT nRtag_id AS rtag_id,
18809
			   levelNum + ttb.level_num  AS step_num, 
18810
			   ttb.PV_ID
18811
		  FROM temp_tree_browse ttb
18812
		 WHERE ttb.session_num = sessionNum
18813
		   AND ttb.direction = DOWN_THE_TREE;
18814
 
18815
 
18816
	/*---------------------------------------------------------------------------------------------------------------------*/
18817
 
18818
	/* Clean up temp table */
18819
	DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;
18820
 
18821
	retSessionNum := sessionNum;
18822
END Build_Tree;
1374 dpurdie 18823
/
18824
--------------------------------------------------------
18825
--  DDL for Procedure CLEAR_ADVISORY_RIPPLE
18826
--------------------------------------------------------
1373 dpurdie 18827
 
18828
  CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18829
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
18830
											 nUserId IN NUMBER ) IS
18831
/* ---------------------------------------------------------------------------
18832
    Version: 4.0
18833
   --------------------------------------------------------------------------- */
18834
 
18835
BEGIN
18836
 
18837
    -- Clear Advisory Ripple Package
18838
    DELETE FROM ADVISORY_RIPPLE
18839
	WHERE PV_ID = nPvId
18840
	AND RTAG_ID = nRtagId;
18841
 
18842
    /* LOG ACTION */
18843
   	Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );
18844
 
18845
	/*Rebuild_Environment(nRtagId);*/
18846
 
18847
END Clear_Advisory_Ripple;
1374 dpurdie 18848
/
18849
--------------------------------------------------------
18850
--  DDL for Procedure REMOVE_RELEASE_CONTENT
18851
--------------------------------------------------------
1373 dpurdie 18852
 
18853
  CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,
18854
													 sNotPvIdList IN VARCHAR2,
18855
                                                     nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
18856
/* ---------------------------------------------------------------------------
18857
    Version: 3.0
18858
   --------------------------------------------------------------------------- */
18859
 
18860
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18861
oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18862
 
18863
BEGIN
18864
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
18865
    oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );
18866
 
18867
    -- Delete From Release Content
18868
    DELETE
18869
      FROM RELEASE_CONTENT
18870
	 WHERE rtag_id = nRTagId
18871
	   AND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
18872
	   AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18873
 
18874
 
18875
 
18876
END Remove_Release_Content;
1374 dpurdie 18877
/
18878
--------------------------------------------------------
18879
--  DDL for Procedure UPDATE_PACKAGE_DEPENDENCY
18880
--------------------------------------------------------
1373 dpurdie 18881
 
18882
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,
18883
                                                        SSdep_name IN PACKAGES.pkg_name%TYPE,
18884
                                                        SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18885
                                                        CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,
18886
                                                        NNuser_id IN NUMBER,
18887
                                                        NNdelete_old_dependency IN NUMBER
18888
                                                       ) IS
18889
/* ---------------------------------------------------------------------------
18890
    Version: 3.3
18891
   --------------------------------------------------------------------------- */
18892
 
18893
    retPV_ID NUMBER;
18894
    SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;
18895
	DepIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18896
    PvIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18897
    NNpkg_id NUMBER;
18898
    NNdpkg_id NUMBER;
18899
 
18900
BEGIN
18901
    --- Seed database with package_name and version if required ---
18902
    Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );
18903
 
18904
    -- get v_ext,pkg_id of current dependency
18905
    SELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatch
18906
      FROM PACKAGE_VERSIONS
18907
     WHERE pv_id = retPV_ID;
18908
 
18909
    -- get pkg_id of parent package
18910
    SELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatch
18911
      FROM PACKAGE_VERSIONS
18912
     WHERE pv_id = NNpv_id;
18913
 
18914
 
18915
	IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR
18916
    	( (PvIsPatch IS NOT NULL) )THEN
18917
 
18918
	    IF NNdelete_old_dependency = 1 THEN
18919
	        /* Used for CUSTOM dependency add/edit */
18920
 
18921
	        --- Remove old dependency ---
18922
            IF (PvIsPatch IS NULL) THEN
18923
            	-- Do it for Packages
18924
		        DELETE FROM PACKAGE_DEPENDENCIES
18925
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18926
		            (
18927
		            SELECT dep.*
18928
		              FROM PACKAGE_DEPENDENCIES dep,
18929
		                   PACKAGE_VERSIONS dpv,
18930
		                   PACKAGE_VERSIONS pv
18931
		             WHERE dep.dpv_id = dpv.pv_id
18932
		               AND dep.pv_id = NNpv_id
18933
		               AND pv.pv_id = retPV_ID
18934
		               AND dpv.pkg_id = pv.pkg_id
18935
		               AND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|')
18936
		            );
18937
            ELSE
18938
            	-- Do it for Patches
18939
                DELETE FROM PACKAGE_DEPENDENCIES
18940
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18941
		            (
18942
		            SELECT dep.*
18943
		              FROM PACKAGE_DEPENDENCIES dep
18944
		             WHERE dep.dpv_id = retPV_ID
18945
		               AND dep.pv_id = NNpv_id
18946
		            );
18947
			END IF;
18948
 
18949
	    END IF;
18950
 
18951
	    /* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */
18952
 
18953
	    --- Add new dependency ---
18954
	    INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )
18955
	    VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );
18956
 
18957
	END IF;
18958
 
18959
END Update_Package_Dependency;
1374 dpurdie 18960
/
18961
--------------------------------------------------------
18962
--  DDL for Procedure LOG_ACTION
18963
--------------------------------------------------------
1373 dpurdie 18964
 
18965
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18966
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18967
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
18968
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18969
/* ---------------------------------------------------------------------------
18970
    Version: 3.0
18971
   --------------------------------------------------------------------------- */
18972
 
18973
    ActionTypeId NUMBER;
18974
 
18975
BEGIN
18976
 
18977
    -- Get Action Type FK
18978
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18979
      FROM ACTION_TYPE act
18980
     WHERE act.NAME = enumActionTypeName;
18981
 
18982
 
18983
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18984
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
18985
 
18986
 
18987
END Log_Action;
1374 dpurdie 18988
/
18989
--------------------------------------------------------
18990
--  DDL for Procedure REMOVE_PATCH
18991
--------------------------------------------------------
1373 dpurdie 18992
 
18993
  CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
18994
										   nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
18995
                                           nUserId IN NUMBER ) IS
18996
/* ---------------------------------------------------------------------------
18997
    Version: 4.0
18998
   --------------------------------------------------------------------------- */
18999
 
19000
PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19001
 
19002
CURSOR curPatch IS
19003
	SELECT pp.PV_ID,
19004
		   pp.PATCH_ID,
19005
	       ROWNUM AS NEW_INSTALL_ORDER
19006
	  FROM PACKAGE_PATCHES pp
19007
	 WHERE pp.PV_ID = nPvId
19008
	ORDER BY pp.INSTALL_ORDER;
19009
recPatch curPatch%ROWTYPE;
19010
 
19011
BEGIN
19012
 
19013
	 -- Delete Patch
19014
     DELETE
19015
       FROM PACKAGE_PATCHES pp
19016
      WHERE pp.PV_ID = nPvId
19017
        AND pp.PATCH_ID = nPatchId;
19018
 
19019
 
19020
	-- Redo Install Order
19021
    OPEN curPatch;
19022
	FETCH curPatch INTO recPatch;
19023
 
19024
	WHILE curPatch%FOUND
19025
	LOOP
19026
 
19027
		UPDATE PACKAGE_PATCHES pp SET
19028
			pp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDER
19029
		WHERE pp.PV_ID = nPvId
19030
		  AND pp.PATCH_ID = recPatch.PATCH_ID;
19031
 
19032
		FETCH curPatch INTO recPatch;
19033
	END LOOP;
19034
 
19035
	CLOSE curPatch;
19036
 
19037
 
19038
 
19039
 
19040
    /* LOG ACTION */
19041
    SELECT pv.PKG_VERSION INTO PatchVersion
19042
      FROM PACKAGE_VERSIONS pv
19043
     WHERE pv.PV_ID = nPatchId;
19044
 
19045
   	Log_Action ( nPvId, 'patch_remove', nUserId,
19046
   			     'Version: '|| PatchVersion );
19047
 
19048
END Remove_Patch;
1374 dpurdie 19049
/
19050
--------------------------------------------------------
19051
--  DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP
19052
--------------------------------------------------------
1373 dpurdie 19053
 
19054
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
19055
	   	  		  								  	   	 sBuildEnvIdList IN VARCHAR2,
19056
														 nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE 
19057
														 ) IS
19058
/* ---------------------------------------------------------------------------
19059
    Last Modified: Rupesh Solanki
19060
	Version: 3.0.1
19061
   --------------------------------------------------------------------------- */
19062
 
19063
   nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();   
19064
   BsId NUMBER;
19065
   HackBsId NUMBER;
19066
 
19067
 
19068
BEGIN
19069
 
19070
   nBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );
19071
 
19072
   -- Delete Current Build Env settings
19073
   DELETE FROM PACKAGE_BUILD_ENV
19074
   WHERE pv_id = nPvId;
19075
 
19076
   -- Delet Current Package Build Info Settings
19077
   DELETE FROM PACKAGE_BUILD_INFO
19078
   WHERE pv_id = nPvId;
19079
 
19080
   -- Reset flag to N
19081
   UPDATE PACKAGE_VERSIONS SET
19082
	   IS_BUILD_ENV_REQUIRED = 'N'
19083
   WHERE PV_ID = nPvId;
19084
 
19085
 
19086
   -- Set new Build Env
19087
   IF NOT sBuildEnvIdList IS NULL THEN
19088
	FOR i IN 1..nBsCollector.COUNT
19089
	LOOP   
19090
 
19091
	BsId := nBsCollector(i);
19092
 
19093
	IF nBuildStandard = 2 THEN
19094
	   IF BsId = 1 THEN
19095
	   	  HackBsId := 11;
19096
	   ELSE
19097
	   	  HackBsId := 12;
19098
	   END IF;
19099
 
19100
   	  -- Insert into PACKAGE_BUILD_ENV
19101
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19102
	  SELECT nPvId AS PV_ID,
19103
	  		 be.BE_ID
19104
	    FROM BUILD_ENVIRONMENTS be
19105
	   WHERE be.BE_ID IN ( HackBsId );
19106
 
19107
   	  -- Insert into PACKAGE_BUILD_INFO
19108
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19109
	  SELECT nPvId AS PV_ID,
19110
	  		 be.BM_ID
19111
	    FROM BUILD_MACHINES be
19112
	   WHERE be.BM_ID IN ( BsId );						 
19113
 
19114
	   -- Set flag to Y
19115
	   UPDATE PACKAGE_VERSIONS SET
19116
		   IS_BUILD_ENV_REQUIRED = 'Y'
19117
	   WHERE PV_ID = nPvId;	
19118
 
19119
 
19120
	ELSE
19121
 
19122
   	  -- Insert into PACKAGE_BUILD_ENV
19123
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19124
	  SELECT nPvId AS PV_ID,
19125
	  		 be.BE_ID
19126
	    FROM BUILD_ENVIRONMENTS be
19127
	   WHERE be.BE_ID IN ( BsId );
19128
 
19129
   	  -- Insert into PACKAGE_BUILD_INFO
19130
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19131
	  SELECT nPvId AS PV_ID,
19132
	  		 be.BM_ID
19133
	    FROM BUILD_MACHINES be
19134
	   WHERE be.BM_ID IN ( BsId );						 
19135
 
19136
	   -- Set flag to Y
19137
	   UPDATE PACKAGE_VERSIONS SET
19138
		   IS_BUILD_ENV_REQUIRED = 'Y'
19139
	   WHERE PV_ID = nPvId;
19140
 
19141
	END IF;  
19142
 
19143
 
19144
	END LOOP;	   
19145
 
19146
   END IF;
19147
 
19148
 
19149
END Set_Package_Build_Env_Temp;
1374 dpurdie 19150
/
19151
--------------------------------------------------------
19152
--  DDL for Procedure UPDATE_RUNTIME_DEPENDENCY
19153
--------------------------------------------------------
1373 dpurdie 19154
 
19155
  CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,
19156
				   	  		  						    NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,
19157
				   	  		  						    SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19158
													    SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,
19159
													    SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,
19160
													    NNuser_id IN NUMBER ) IS
19161
/* ---------------------------------------------------------------------------
19162
    Version: 3.0.1
19163
   --------------------------------------------------------------------------- */
19164
 
19165
    retRTD_ID	NUMBER;
19166
	CURSOR rtd_cur IS
19167
	    SELECT pv.pkg_version, pkg.pkg_name
19168
		  FROM runtime_dependencies rtd,
19169
		       package_versions pv,
19170
			   packages pkg
19171
		 WHERE rtd.rtd_id = pv.pv_id
19172
		   AND pv.pkg_id = pkg.pkg_id
19173
		   AND rtd.pv_id = NNpv_id
19174
		   AND rtd.rtd_id = NNrtd_id;
19175
	   rtd_rec rtd_cur%ROWTYPE;
19176
 
19177
	CURSOR old_rtd_cur IS
19178
	    SELECT pv.pv_id
19179
		  FROM package_versions pv
19180
		 WHERE pv.pkg_id IN ( SELECT rtdpv.pkg_id
19181
		 	   			 	    FROM package_versions rtdpv
19182
							   WHERE rtdpv.pv_id = NNrtd_id )
19183
		   AND pv.pkg_version = SSrtd_version;
19184
	old_rtd_rec old_rtd_cur%ROWTYPE;
19185
 
19186
 
19187
BEGIN
19188
 
19189
    -- Get current runtime dependency details
19190
	OPEN rtd_cur;
19191
    FETCH rtd_cur INTO rtd_rec;
19192
 
19193
 
19194
 
19195
 
19196
	IF rtd_rec.pkg_version != SSrtd_version THEN
19197
           -- Version has changed, hence create new runtime dependency --
19198
	    /* NOTE: You must create new version as updating just a version will affect
19199
		        all packages using this runtime dependency and user does not expect that.
19200
		        It is safer to create new version */
19201
		OPEN old_rtd_cur;
19202
		FETCH old_rtd_cur INTO old_rtd_rec;
19203
 
19204
 
19205
		IF old_rtd_cur%NOTFOUND
19206
		THEN
19207
			-- Version not found, hence Create New version --
19208
    		Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );
19209
 
19210
			-- Update runtime dependency table --
19211
			UPDATE runtime_dependencies SET
19212
				   rtd_id = retRTD_ID,
19213
				   rtd_url = SSrtd_url,
19214
				   rtd_comments = SSrtd_comments
19215
			 WHERE pv_id = NNpv_id
19216
			   AND rtd_id = NNrtd_id;
19217
 
19218
		ELSE
19219
			-- Update runtime dependency table --
19220
			UPDATE runtime_dependencies SET
19221
				   rtd_id = old_rtd_rec.pv_id,
19222
				   rtd_url = SSrtd_url,
19223
				   rtd_comments = SSrtd_comments
19224
			 WHERE pv_id = NNpv_id
19225
			   AND rtd_id = NNrtd_id;
19226
 
19227
		END IF;
19228
 
19229
 
19230
		CLOSE old_rtd_cur;
19231
 
19232
	ELSE
19233
		--  Version has not changed, hence update everithing except	version --
19234
		UPDATE runtime_dependencies SET
19235
			   rtd_url = SSrtd_url,
19236
			   rtd_comments = SSrtd_comments
19237
		 WHERE pv_id = NNpv_id
19238
		   AND rtd_id = NNrtd_id;
19239
 
19240
 
19241
 
19242
	END IF;
19243
 
19244
 
19245
	CLOSE rtd_cur;
19246
 
19247
END Update_Runtime_Dependency;
1374 dpurdie 19248
/
19249
--------------------------------------------------------
19250
--  DDL for Procedure SET_ADVISORY_RIPPLE
19251
--------------------------------------------------------
1373 dpurdie 19252
 
19253
  CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19254
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
19255
											 nUserId IN NUMBER ) IS
19256
/* ---------------------------------------------------------------------------
19257
    Version: 4.0
19258
   --------------------------------------------------------------------------- */
19259
 
19260
BEGIN
19261
 
19262
    -- Set Advisory Ripple Package
19263
    INSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)
19264
	VALUES (nRtagId, nPvId);
19265
 
19266
    /* LOG ACTION */
19267
   	Log_Action ( nPvId, 'set_advisory_ripple', nUserId );
19268
 
19269
	/*Rebuild_Environment(nRtagId);*/
19270
 
19271
END Set_Advisory_Ripple;
1374 dpurdie 19272
/
19273
--------------------------------------------------------
19274
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS
19275
--------------------------------------------------------
1373 dpurdie 19276
 
19277
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
19278
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19279
                                                          NNuser_id IN NUMBER,
19280
                                                          retPV_ID OUT NUMBER,
19281
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
19282
/* ---------------------------------------------------------------------------
19283
    Version: 4.0
19284
   --------------------------------------------------------------------------- */
19285
 
19286
    parPkg_id   NUMBER;
19287
    parPv_id    NUMBER;
19288
    cloneFrom_pv_id NUMBER;
19289
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19290
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19291
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19292
 
19293
    CURSOR packages_cur IS
19294
        SELECT pkg_id FROM PACKAGES
19295
        WHERE pkg_name = SSpkg_name;
19296
    packages_rec packages_cur%ROWTYPE;
19297
 
19298
    CURSOR package_versions_cur IS
19299
        SELECT pv_id FROM PACKAGE_VERSIONS
19300
        WHERE pkg_id = parPkg_id
19301
        AND pkg_version = SSpkg_version;
19302
    package_versions_rec package_versions_cur%ROWTYPE;
19303
 
19304
    CURSOR clone_package_versions_cur IS
19305
        SELECT MAX(pv_id) AS pv_id
19306
          FROM PACKAGE_VERSIONS
19307
         WHERE pkg_id = parPkg_id
19308
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
19309
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
19310
 
19311
BEGIN
19312
    /* -------------------------------------------- */
19313
    /* Find if pkg_name exists and seed if required */
19314
    /* -------------------------------------------- */
19315
    OPEN packages_cur;
19316
    FETCH packages_cur INTO packages_rec;
19317
 
19318
    IF packages_cur%NOTFOUND
19319
    THEN
19320
        /* INSERT into packages table */
19321
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
19322
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
19323
 
19324
    ELSE
19325
        parPkg_id := packages_rec.pkg_id;
19326
 
19327
    END IF;
19328
 
19329
    CLOSE packages_cur;
19330
 
19331
 
19332
 
19333
    /* ---------------------------------------------------- */
19334
    /* Find if package_version exists and seed if required  */
19335
    /* ---------------------------------------------------- */
19336
    OPEN package_versions_cur;
19337
    FETCH package_versions_cur INTO package_versions_rec;
19338
 
19339
    IF package_versions_cur%NOTFOUND
19340
    THEN
19341
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
19342
 
19343
        /* LOG ACTION */
19344
        Log_Action ( parPv_id, 'new_version', NNuser_id,
19345
        			 'New package version: '|| SSpkg_version );
19346
 
19347
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19348
 
19349
        /* Find similar pkg_name + ext to clone from */
19350
        OPEN clone_package_versions_cur;
19351
        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
19352
 
19353
 
19354
        IF NOT clone_package_versions_rec.pv_id IS NULL
19355
        THEN
19356
            /* CLONE details from similar version  OR  from nCloneFromPvId */
19357
			IF ( NOT nCloneFromPvId IS NULL) THEN
19358
            	cloneFrom_pv_id := nCloneFromPvId;
19359
			ELSE
19360
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
19361
			END IF;
19362
 
19363
            -- Clone Package Version Details --
19364
            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,
19365
                                           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  )
19366
                SELECT parPv_id         AS pv_id,
19367
                       parPkg_id        AS pkg_id,
19368
                       SSpkg_version    AS pkg_version,
19369
                       'N'              AS dlocked,
19370
                       Ora_Sysdate      AS created_stamp,
19371
                       NNuser_id        AS creator_id,
19372
                       Ora_Sysdatetime  AS modified_stamp,
19373
                       NNuser_id        AS modifier_id,
19374
                       SSV_MM           AS V_MM,
19375
                       SSV_NMM          AS V_NMM,
19376
                       SSV_EXT          AS V_EXT,
19377
                       pv.src_path,
19378
                       pv.pv_description,
19379
                       pv.PV_OVERVIEW,
19380
                       cloneFrom_pv_id 	AS LAST_PV_ID,
19381
                       pv.owner_id,
19382
					   pv.BUILD_TYPE,
19383
					   pv.IS_BUILD_ENV_REQUIRED,
19384
					   pv.BS_ID,
19385
					   pv.is_autobuildable,
19386
					   pv.IS_DEPLOYABLE, 
19387
					   pv.ripple_field
19388
                  FROM PACKAGE_VERSIONS pv
19389
                 WHERE pv.pv_id = cloneFrom_pv_id;
19390
 
19391
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
19392
 
19393
        ELSE
19394
            /* BRAND NEW version + ext */
19395
            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 )
19396
        	VALUES (
19397
                    parPv_id,
19398
                    parPkg_id,
19399
                    SSpkg_version,
19400
                    'N',
19401
                    Ora_Sysdate,
19402
                    NNuser_id,
19403
                    Ora_Sysdatetime,
19404
                    NNuser_id,
19405
                    SSV_MM,
19406
                    SSV_NMM,
19407
                    SSV_EXT,
19408
                    NNuser_id,
19409
                    parPv_id,
19410
					'M',
19411
					'b'
19412
                   );
19413
 
19414
        END IF;
19415
 
19416
        CLOSE clone_package_versions_cur;
19417
        retPV_ID := parPv_id;
19418
 
19419
    ELSE
19420
        retPV_ID := package_versions_rec.pv_id;
19421
 
19422
    END IF;
19423
 
19424
    CLOSE package_versions_cur;
19425
 
19426
 
19427
 
19428
 
19429
END Seed_Package_Names_Versions;
1374 dpurdie 19430
/
19431
--------------------------------------------------------
19432
--  DDL for Procedure RENAME_PACKAGE_VERSION
19433
--------------------------------------------------------
1373 dpurdie 19434
 
19435
  CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,
19436
                                                     SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19437
													 cBuildType IN CHAR,
19438
                                                     NNuser_id IN NUMBER,
19439
                                                     errMessage OUT VARCHAR2 ) IS
19440
/* ---------------------------------------------------------------------------
19441
    Version: 3.2
19442
   --------------------------------------------------------------------------- */
19443
 
19444
    sPackageVersion VARCHAR2(4000);
19445
	sLabel VARCHAR2(4000) := NULL;
19446
    OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19447
 
19448
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19449
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19450
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19451
 
19452
    CURSOR package_versions_cur IS
19453
        SELECT pv_id
19454
     	  FROM package_versions
19455
     	 WHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )
19456
     	   AND pkg_version = SSpkg_version;
19457
    package_versions_rec package_versions_cur%ROWTYPE;
19458
 
19459
 
19460
BEGIN
19461
 
19462
    /* ---------------------------------------------------- */
19463
    /* Find if package_version exists                       */
19464
    /* ---------------------------------------------------- */
19465
 
19466
	errMessage := NULL;
19467
 
19468
 
19469
	-- Get previous version
19470
	SELECT pv.PKG_VERSION INTO OldPkgVersion
19471
      FROM PACKAGE_VERSIONS pv
19472
     WHERE pv.PV_ID = NNpv_id;
19473
 
19474
 
19475
	sPackageVersion := SSpkg_version;
19476
 
19477
 
19478
	IF OldPkgVersion != sPackageVersion THEN
19479
 
19480
	    OPEN package_versions_cur;
19481
	    FETCH package_versions_cur INTO package_versions_rec;
19482
 
19483
	    IF package_versions_cur%NOTFOUND
19484
	    THEN
19485
 
19486
			-- Split current version in parts
19487
	    	Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19488
 
19489
 
19490
		    -- Automated built config
19491
			IF (cBuildType = 'A') THEN
19492
				sPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT;	-- Make sure that version is still unique
19493
			END IF;
19494
 
19495
 
19496
	        -- Packge version not found, hence rename it.
19497
	        UPDATE package_versions
19498
	           SET pkg_version = sPackageVersion,
19499
	               v_mm = SSV_MM,
19500
	               v_nmm = SSV_NMM,
19501
	               v_ext = SSV_EXT,
19502
	               modified_stamp = ORA_SYSDATETIME,
19503
	               modifier_id = NNuser_id,
19504
				   build_type = cBuildType,
19505
				   pkg_label = NULL
19506
	         WHERE pv_id = NNpv_id;
19507
 
19508
 
19509
			IF (cBuildType = 'A') THEN
19510
				sLabel := GET_AUTOMATED_LABEL( NNpv_id );
19511
				UPDATE PACKAGE_VERSIONS pv SET
19512
					pv.PKG_LABEL = sLabel
19513
		         WHERE pv_id = NNpv_id;
19514
			END IF;
19515
 
19516
			/* LOG ACTION */
19517
	      	Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );
19518
 
19519
	    ELSE
19520
	        -- Package version exists. Cannot proceed.
19521
	        errMessage := 'enum_MSG_VERSION_EXISTS';
19522
 
19523
	    END IF;
19524
 
19525
	    CLOSE package_versions_cur;
19526
 
19527
	END IF;
19528
 
19529
 
19530
 
19531
 
19532
END Rename_Package_Version;
1374 dpurdie 19533
/
19534
--------------------------------------------------------
19535
--  DDL for Procedure PAOLO_BUILD_TREE
19536
--------------------------------------------------------
1373 dpurdie 19537
 
19538
  CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) IS
19539
 
19540
    sessionNumber NUMBER := 0;
19541
    iteration NUMBER := 1; 
19542
    rowCnt NUMBER := 0;
19543
    maxIterations 	NUMBER := 50;
19544
 
19545
BEGIN
19546
 
19547
 
19548
    INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19549
    SELECT sessionNumber, iteration, rc.PV_ID
19550
      FROM RELEASE_CONTENT rc
19551
     WHERE rc.RTAG_ID = nRtag_id;
19552
 
19553
    iteration := iteration + 1;
19554
    LOOP
19555
 
19556
        INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19557
		SELECT sessionNumber,     
19558
               iteration,
19559
               dep.DPV_ID
19560
          FROM TEMP_TREE_BROWSE ttb,
19561
               PACKAGE_DEPENDENCIES dep
19562
         WHERE dep.PV_ID = ttb.PV_ID 
19563
           AND ttb.LEVEL_NUM = iteration - 1 
19564
 
19565
         MINUS  
19566
 
19567
        SELECT sessionNumber, iteration, ttb.PV_ID
19568
          FROM TEMP_TREE_BROWSE ttb;   
19569
 
19570
 
19571
 
19572
 
19573
		rowCnt := SQL%ROWCOUNT;
19574
		IF rowCnt > 0 THEN
19575
           iteration := iteration + 1;
19576
		END IF;
19577
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
19578
    END LOOP; 
19579
 
19580
END PAOLO_Build_Tree;
1374 dpurdie 19581
/
19582
--------------------------------------------------------
19583
--  DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE
19584
--------------------------------------------------------
1373 dpurdie 19585
 
19586
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,
19587
														  pnPv_id IN NUMBER,
19588
					                                      sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,
19589
														  sAcceptanceDate IN VARCHAR2,
19590
														  sAcceptedBy IN NUMBER,
19591
					                                      sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,
19592
														  cUpdateAcceptedStateOnly IN CHAR
19593
					                                     ) IS
19594
/* ---------------------------------------------------------------------------
19595
    Version: 3.0.0
19596
   --------------------------------------------------------------------------- */
19597
 
19598
 
19599
 
19600
BEGIN
19601
	IF cUpdateAcceptedStateOnly = 'Y'
19602
	THEN
19603
		--- Update Accepted State Only ---
19604
		IF ( sAccepted IS NULL )
19605
		THEN
19606
			-- Clear alleptance
19607
			UPDATE UNIT_TESTS SET
19608
		           TEST_ACCEPTED = NULL,
19609
		           ACCEPTANCE_DATE = NULL,
19610
				   ACCEPTED_BY = NULL,
19611
				   REVIEW_COMMENTS = NULL
19612
		     WHERE TEST_ID = pnTest_id
19613
		       AND PV_ID = pnPv_id;
19614
 
19615
	    ELSE
19616
			UPDATE UNIT_TESTS SET
19617
		           TEST_ACCEPTED = sAccepted,
19618
		           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19619
				   ACCEPTED_BY = sAcceptedBy
19620
		     WHERE TEST_ID = pnTest_id
19621
		       AND PV_ID = pnPv_id;
19622
 
19623
		END IF;
19624
 
19625
 
19626
	ELSE
19627
		--- Update Unit Test Acceptance ---
19628
	    UPDATE UNIT_TESTS SET
19629
	           TEST_ACCEPTED = sAccepted,
19630
			   REVIEW_COMMENTS = sReviewComments,
19631
	           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19632
			   ACCEPTED_BY = sAcceptedBy
19633
	     WHERE TEST_ID = pnTest_id
19634
	       AND PV_ID = pnPv_id;
19635
 
19636
	END IF;
19637
 
19638
END Update_Unit_Test_Acceptance;
1374 dpurdie 19639
/
19640
--------------------------------------------------------
19641
--  DDL for Procedure NEW_ADDITIONAL_NOTE
19642
--------------------------------------------------------
1373 dpurdie 19643
 
19644
  CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,
19645
                                                  psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
19646
                                                  psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
19647
                                                  pnUser_id IN NUMBER,
19648
                                                  outErrCode OUT NUMBER
19649
                                                 ) IS
19650
/* ---------------------------------------------------------------------------
19651
    Version: 3.0.0
19652
   --------------------------------------------------------------------------- */
19653
 
19654
    newID NUMBER;
19655
 
19656
	CURSOR an_duplicate_cur IS
19657
        SELECT note_id
19658
          FROM ADDITIONAL_NOTES
19659
         WHERE pv_id = pnPv_id
19660
           AND note_title = psNote_title;
19661
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
19662
 
19663
BEGIN
19664
	outErrCode := -1;		-- Set default return error code to ERROR state
19665
 
19666
	OPEN an_duplicate_cur;
19667
    FETCH an_duplicate_cur INTO an_duplicate_rec;
19668
 
19669
    IF an_duplicate_cur%NOTFOUND
19670
    THEN
19671
		/* No duplicate titles */
19672
		-- Get new ID --
19673
    	SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;
19674
 
19675
		--- Add Additional Note ---
19676
	    INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user  )
19677
	    VALUES (  newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );
19678
		outErrCode := 0;		-- Set return to SUCCESS
19679
	END IF;
19680
 
19681
	CLOSE an_duplicate_cur;
19682
END New_Additional_Note;
1374 dpurdie 19683
/
19684
--------------------------------------------------------
19685
--  DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES
19686
--------------------------------------------------------
1373 dpurdie 19687
 
19688
  CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS
19689
 
19690
/******************************************************************************
19691
   NAME:       INSERT_MULTIPLE_STICKY_NOTES
19692
   PURPOSE:    
19693
 
19694
   REVISIONS:
19695
   Ver        Date        Author           Description
19696
   ---------  ----------  ---------------  ------------------------------------
19697
   1.0        6/12/2006          1. Created this procedure.
19698
 
19699
   NOTES:
19700
 
19701
   Automatically available Auto Replace Keywords:
19702
      Object Name:     INSERT_MULTIPLE_STICKY_NOTES
19703
      Sysdate:         6/12/2006
19704
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
19705
      Username:         (set in TOAD Options, Procedure Editor)
19706
      Table Name:       (set in the "New PL/SQL Object" dialog)
19707
 
19708
******************************************************************************/
19709
 
19710
	CURSOR curInfo IS
19711
    SELECT PV_ID
19712
	FROM PACKAGE_BUILD_ENV
19713
	WHERE BE_ID IN (11, 12);
19714
    recInfo curInfo%ROWTYPE;
19715
 
19716
 
19717
BEGIN
19718
 
19719
	OPEN curInfo;
19720
    FETCH curInfo INTO recInfo;
19721
 
19722
	WHILE curInfo%FOUND
19723
	LOOP
19724
 
19725
		INSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )
19726
		VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );
19727
 
19728
		FETCH curInfo INTO recInfo;
19729
 
19730
	END LOOP;
19731
 
19732
	CLOSE curInfo;
19733
 
19734
 
19735
 
19736
 
19737
END INSERT_MULTIPLE_STICKY_NOTES;
1374 dpurdie 19738
/
19739
--------------------------------------------------------
19740
--  DDL for Procedure TOUCH_RELEASE_BULK
19741
--------------------------------------------------------
1373 dpurdie 19742
 
19743
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS
19744
/* ---------------------------------------------------------------------------
19745
    Version: 3.0
19746
   --------------------------------------------------------------------------- */
19747
 
19748
oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19749
 
19750
BEGIN
19751
	 oRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );
19752
 
19753
	 -- Touch Release for Rebuild
19754
     UPDATE RELEASE_TAGS rt SET
19755
     	rt.REBUILD_ENV = 'Y',
19756
        rt.REBUILD_STAMP = 0
19757
      WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19758
 
19759
 
19760
END Touch_Release_Bulk;
1374 dpurdie 19761
/
19762
--------------------------------------------------------
19763
--  DDL for Procedure UPDATE_DEPRECATION_STATE
19764
--------------------------------------------------------
1373 dpurdie 19765
 
19766
  CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) AS
19767
 
19768
recno NUMBER;
19769
 
19770
CURSOR deprecate_cur IS
19771
 
19772
SELECT rc.pv_id
19773
FROM release_content rc
19774
WHERE rtag_id = nnrtag_id
19775
 AND deprecated_state IN(7);
19776
 
19777
deprecate_rec deprecate_cur % rowtype;
19778
 
19779
BEGIN
19780
 
19781
  OPEN deprecate_cur;
19782
 
19783
  FETCH deprecate_cur
19784
  INTO deprecate_rec;
19785
 
19786
  WHILE deprecate_cur % FOUND
19787
  LOOP
19788
 
19789
    SELECT COUNT(*)
19790
    INTO recno
19791
    FROM package_dependencies pd,
19792
      release_content rc
19793
    WHERE pd.pv_id = deprecate_rec.pv_id
19794
     AND rc.pv_id = pd.dpv_id
19795
     AND rc.rtag_id = nnrtag_id
19796
     AND rc.deprecated_state IN(6,   7);
19797
 
19798
    IF recno = 0 THEN
19799
 
19800
      UPDATE release_content
19801
      SET pkg_id = NULL, deprecated_state = NULL
19802
      WHERE pv_id = deprecate_rec.pv_id
19803
       AND rtag_id = nnrtag_id;
19804
 
19805
    END IF;
19806
 
19807
    FETCH deprecate_cur
19808
    INTO deprecate_rec;
19809
  END LOOP;
19810
 
19811
END;
1374 dpurdie 19812
/
19813
--------------------------------------------------------
19814
--  DDL for Procedure IGNORE_DEPENDENCY_WARNINGS
19815
--------------------------------------------------------
1373 dpurdie 19816
 
19817
  CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,
19818
                                                         nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,
19819
                                                         sIgnoreIdList IN VARCHAR2,
19820
                                                         bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,
19821
                                                         nUserId IN NUMBER DEFAULT NULL ) IS
19822
/* ---------------------------------------------------------------------------
19823
    Updates the ignore warnings table - this is really two functions in one.
19824
 
19825
    1) One function updates the table based on a list of dependent PV_IDs and a parent PV_ID
19826
       and is called from the RM website's SetIgnoreWarnings() function after a user changes
19827
       the ignore warnings checkboxes and submits the form.
19828
       This can (at time of writing this) only be done within releases that are not build
19829
       daemon enabled. The ignore warnings feature is a feature we would like to see the end
19830
       of in an ideal world.
19831
       The SetIgnoreWarnings() website function now calls Touch_Release so there is no need to
19832
       do so in this stored procedure, thereby making this stored procedure much more precise in
19833
       that it only updates the ignore_warnings table (action log table too although that is just
19834
       a log and doesn't affect any subsequent business rules behaviour) and it cares nothing
19835
       about website presentation layer states, etc.
19836
 
19837
    2) The other function updates the table for out of sync dependencies that have in fact
19838
       been satisfied by patches made to some other product in the release.
19839
       This seems to be a seldom used feature in current projects.
19840
       It is probably the most often taken path through this function given that it occurs when
19841
       this function is called from Rebuild_Environment, and that is called in many circumstances
19842
       from the RM website whenever the seems to be a possibility that the state of a package
19843
       in a release might have changed and therefore affects the state of other packages in
19844
       that same release.
19845
 
19846
    Parameter Usage:
19847
                        when called from    | when called from
19848
                        Rebuild_Environment | SetIgnoreWarnings()
19849
                        stored procedure.   | in the Website
19850
      --------------------------------------+----------------------------
19851
      nRtagId           RTAG_ID             | RTAG_ID
19852
      nPvId             NULL                | PV_ID
19853
      sIgnoreIdList     NULL                | list of dependent PV_ID's
19854
      bDoPatchIgnore    TRUE                | FALSE
19855
      nUserId           NULL                | current user ID
19856
   --------------------------------------------------------------------------- */
19857
 
19858
oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19859
ReleaseLocation VARCHAR2(4000);
19860
ActionTypeId NUMBER;
19861
 
19862
BEGIN
19863
 
19864
   IF (NOT bDoPatchIgnore) THEN
19865
      /* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website
19866
      */
19867
      oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );
19868
 
19869
 
19870
      /* Log Action */
19871
      -- Get Release Location
19872
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
19873
        FROM PROJECTS proj,
19874
             RELEASE_TAGS rt
19875
       WHERE rt.PROJ_ID = proj.PROJ_ID
19876
         AND rt.RTAG_ID = nRtagId;
19877
 
19878
      -- Get Action Type Id for IGNORE_ON
19879
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19880
        FROM ACTION_TYPE act
19881
       WHERE act.NAME = 'ignore_on';
19882
 
19883
      -- Get Ignored (Current MINUS Old)
19884
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19885
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19886
        FROM (
19887
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19888
                FROM PACKAGE_VERSIONS pv
19889
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19890
              MINUS
19891
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19892
                FROM IGNORE_WARNINGS igw
19893
               WHERE igw.RTAG_ID = nRtagId
19894
                 AND igw.PV_ID = nPvId
19895
             ) qry,
19896
             PACKAGE_VERSIONS pv,
19897
             PACKAGES pkg,
19898
             RELEASE_CONTENT rc,
19899
             PACKAGE_VERSIONS rpv
19900
       WHERE pv.PKG_ID = pkg.PKG_ID
19901
         AND rc.RTAG_ID = nRtagId
19902
         AND rc.PV_ID = rpv.PV_ID
19903
         AND rpv.PKG_ID = pv.PKG_ID
19904
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19905
         AND qry.DPV_ID = pv.PV_ID;
19906
 
19907
 
19908
      -- Get Action Type Id for IGNORE_OFF
19909
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19910
        FROM ACTION_TYPE act
19911
       WHERE act.NAME = 'ignore_off';
19912
 
19913
      -- Get UnIgnored (Old MINUS Current)
19914
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19915
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19916
        FROM (
19917
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19918
                FROM IGNORE_WARNINGS igw
19919
               WHERE igw.RTAG_ID = nRtagId
19920
                 AND igw.PV_ID = nPvId
19921
              MINUS
19922
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19923
                FROM PACKAGE_VERSIONS pv
19924
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19925
             ) qry,
19926
             PACKAGE_VERSIONS pv,
19927
             PACKAGES pkg,
19928
             RELEASE_CONTENT rc,
19929
             PACKAGE_VERSIONS rpv
19930
       WHERE pv.PKG_ID = pkg.PKG_ID
19931
         AND rc.RTAG_ID = nRtagId
19932
         AND rc.PV_ID = rpv.PV_ID
19933
         AND rpv.PKG_ID = pv.PKG_ID
19934
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19935
         AND qry.DPV_ID = pv.PV_ID;
19936
 
19937
 
19938
      -- Delete Current Ignore Warnings
19939
      DELETE
19940
        FROM IGNORE_WARNINGS igw
19941
       WHERE igw.RTAG_ID = nRtagId
19942
         AND igw.PV_ID = nPvId
19943
         AND igw.IS_PATCH_IGNORE IS NULL;
19944
 
19945
 
19946
      IF (oIgnoreIdCollector.COUNT > 0) THEN
19947
         -- Insert Ignore Warnings
19948
         INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )
19949
         SELECT nRtagId,
19950
                nPvId,
19951
                pv.PV_ID AS DPV_ID
19952
           FROM PACKAGE_VERSIONS pv
19953
          WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19954
      END IF;
19955
 
19956
   ELSE
19957
      /* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */
19958
 
19959
      -- Delete Current Patch Ignore Warnings
19960
      DELETE
19961
        FROM IGNORE_WARNINGS igw
19962
       WHERE igw.RTAG_ID = nRtagId
19963
         AND igw.IS_PATCH_IGNORE = 'Y';
19964
 
19965
 
19966
      -- Delete Manual Ignores that need to be Patch Ignores
19967
      DELETE
19968
        FROM IGNORE_WARNINGS igw
19969
       WHERE ( RTAG_ID, PV_ID, DPV_ID ) IN
19970
             (
19971
              SELECT DISTINCT
19972
                     nRtagId,
19973
                     err.PV_ID,
19974
                     err.ERR_DPV AS DPV_ID
19975
               FROM  (
19976
                      /* Full Release Contents used for reference*/
19977
                      SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
19978
                        FROM release_content rel, package_versions rpv
19979
                       WHERE rel.pv_id = rpv.pv_id
19980
                         AND rtag_id = nRtagId
19981
                     ) frc,
19982
                     (
19983
                      /* DPV_IDs not fount in release*/
19984
                      SELECT dep.pv_id, dep.dpv_id AS err_dpv
19985
                        FROM package_dependencies dep
19986
                       WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19987
                         AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19988
                     ) err,
19989
                     (
19990
                      SELECT DISTINCT pp.PV_ID, dep.DPV_ID
19991
                        FROM PACKAGE_PATCHES pp,
19992
                             PACKAGE_DEPENDENCIES dep,
19993
                             RELEASE_CONTENT rc
19994
                       WHERE rc.RTAG_ID = nRtagId
19995
                         AND rc.PV_ID = pp.PV_ID
19996
                         AND dep.PV_ID = pp.PATCH_ID
19997
                     ) pp,
19998
                     package_versions errpkg,
19999
                     package_versions errpv
20000
               WHERE err.err_dpv = errpv.pv_id
20001
                 AND errpv.pkg_id = frc.pkg_id(+)
20002
                 AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20003
                 AND err.pv_id = errpkg.pv_id
20004
                 AND err.PV_ID = pp.PV_ID
20005
                 AND frc.PV_ID = pp.DPV_ID
20006
             );
20007
 
20008
      /*
20009
      ---------------------------------------------------
20010
      --  Make sure that select statement above and below are same
20011
      ---------------------------------------------------
20012
      */
20013
 
20014
      -- Insert Patch Ignores
20015
      INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )
20016
      SELECT DISTINCT
20017
             nRtagId,
20018
             err.PV_ID,
20019
             err.ERR_DPV AS DPV_ID,
20020
             'Y'
20021
        FROM (
20022
              /* Full Release Contents used for reference*/
20023
              SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
20024
                FROM release_content rel, package_versions rpv
20025
               WHERE rel.pv_id = rpv.pv_id
20026
                 AND rtag_id = nRtagId
20027
             ) frc,
20028
             (
20029
               /* DPV_IDs not fount in release*/
20030
               SELECT dep.pv_id, dep.dpv_id AS err_dpv
20031
                 FROM package_dependencies dep
20032
                WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20033
                  AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20034
             ) err,
20035
             (
20036
              SELECT DISTINCT pp.PV_ID, dep.DPV_ID
20037
                FROM PACKAGE_PATCHES pp,
20038
                     PACKAGE_DEPENDENCIES dep,
20039
                     RELEASE_CONTENT rc
20040
               WHERE rc.RTAG_ID = nRtagId
20041
                 AND rc.PV_ID = pp.PV_ID
20042
                 AND dep.PV_ID = pp.PATCH_ID
20043
             ) pp,
20044
             package_versions errpkg,
20045
             package_versions errpv
20046
       WHERE err.err_dpv = errpv.pv_id
20047
         AND errpv.pkg_id = frc.pkg_id(+)
20048
         AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20049
         AND err.pv_id = errpkg.pv_id
20050
         AND err.PV_ID = pp.PV_ID
20051
         AND frc.PV_ID = pp.DPV_ID;
20052
 
20053
    END IF;
20054
 
20055
END Ignore_Dependency_Warnings;
1374 dpurdie 20056
/
20057
--------------------------------------------------------
20058
--  DDL for Procedure UNDEPRECATE_PACKAGE
20059
--------------------------------------------------------
1373 dpurdie 20060
 
20061
  CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20062
	   	  		  								 nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
20063
	   	  		  							   	 nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
20064
											   	 nUserId IN NUMBER) IS
20065
 
20066
ext VARCHAR2(50);
20067
PvIdList VARCHAR2(32767);
20068
nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
20069
PvId NUMBER;
20070
sComments VARCHAR2(32767);
20071
 
20072
BEGIN
20073
 
20074
 
20075
 
20076
	--Extract the package extension
20077
	SELECT V_EXT into ext 
20078
	FROM PACKAGE_VERSIONS 
20079
	WHERE PV_ID = nPvId;
20080
 
20081
	--SELECT COMMENTS into sComments 
20082
	--FROM DEPRECATED_PACKAGES
20083
	--WHERE RTAG_ID = nRtagId
20084
	--AND V_EXT = ext
20085
	--AND PKG_ID = nPkgId;
20086
 
20087
	--SELECT PV_ID into PvIdList FROM
20088
	--RELEASE_CONTENT WHERE RTAG_ID = nRtagId
20089
	--AND PKG_STATE = 6
20090
	--AND PV_ID NOT IN nPvId;
20091
 
20092
 
20093
	IF ext IS NOT NULL THEN
20094
       -- Undeprecate Package
20095
       DELETE FROM DEPRECATED_PACKAGES 
20096
	   WHERE RTAG_ID = nRtagId 
20097
	   AND PKG_ID = nPkgId
20098
	   AND V_EXT = ext;	
20099
 
20100
		UPDATE RELEASE_CONTENT 
20101
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20102
		WHERE RTAG_ID = nRtagId
20103
		AND PV_ID IN (SELECT PV.PV_ID 
20104
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20105
					  WHERE PKG.PKG_ID = PV.PKG_ID
20106
					  AND PKG.PKG_ID = nPkgId
20107
					  AND PV.V_EXT = ext
20108
					  UNION
20109
					  SELECT DISTINCT
20110
	 	 		  	 		   qry.PV_ID
20111
							        FROM (
20112
									 	  SELECT dep.*,
20113
										  LEVEL AS LEVEL_NUM
20114
										  FROM PACKAGE_DEPENDENCIES dep
20115
	 								START WITH dep.DPV_ID IN ( nPvId )
20116
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20117
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20118
	 								) qry,
20119
									PACKAGES pkg,
20120
									PACKAGE_VERSIONS pv,
20121
									RELEASE_CONTENT rc
20122
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20123
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20124
 
20125
					 );	 
20126
 
20127
	ELSE
20128
       -- Undeprecate Package
20129
       DELETE FROM DEPRECATED_PACKAGES 
20130
	   WHERE RTAG_ID = nRtagId 
20131
	   AND PKG_ID = nPkgId
20132
	   AND V_EXT IS NULL;	
20133
 
20134
		UPDATE RELEASE_CONTENT 
20135
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20136
		WHERE RTAG_ID = nRtagId
20137
		AND PV_ID IN (SELECT PV.PV_ID 
20138
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20139
					  WHERE PKG.PKG_ID = PV.PKG_ID
20140
					  AND PKG.PKG_ID = nPkgId
20141
					  AND PV.V_EXT IS NULL
20142
					  UNION
20143
					  SELECT DISTINCT
20144
	 	 		  	 		   qry.PV_ID
20145
							        FROM (
20146
									 	  SELECT dep.*,
20147
										  LEVEL AS LEVEL_NUM
20148
										  FROM PACKAGE_DEPENDENCIES dep
20149
	 								START WITH dep.DPV_ID IN ( nPvId )
20150
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20151
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20152
	 								) qry,
20153
									PACKAGES pkg,
20154
									PACKAGE_VERSIONS pv,
20155
									RELEASE_CONTENT rc
20156
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20157
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20158
 
20159
					 );	 	   
20160
 
20161
	END IF;
20162
 
20163
	--IF PvIdList IS NOT NULL THEN
20164
 
20165
	 --  nIdCollector := IN_LIST_NUMBER ( PvIdList );
20166
 
20167
	 --  FOR i IN 1..nIdCollector.COUNT
20168
	 --  LOOP
20169
	--	   PvId := nIdCollector(i);
20170
 
20171
 
20172
 
20173
	--		Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );
20174
	--		END LOOP;
20175
	--END IF;
20176
 
20177
	Rebuild_environment(nRtagId);			 
20178
 
20179
 
20180
 
20181
END Undeprecate_Package;
1374 dpurdie 20182
/
20183
--------------------------------------------------------
20184
--  DDL for Procedure REMOVE_PACKAGE_INTEREST
20185
--------------------------------------------------------
1373 dpurdie 20186
 
20187
  CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
20188
	   	  		  								  	nPkgId IN PACKAGES.PKG_ID%TYPE,
20189
												  	nUserId IN NUMBER
20190
	   	  		  									) IS
20191
 
20192
/******************************************************************************
20193
   NAME:       REMOVE_PACKAGE_INTEREST
20194
   PURPOSE:    To remove interest in a given package per project
20195
 
20196
   REVISIONS:
20197
   Ver        Date        Author           Description
20198
   ---------  ----------  ---------------  ------------------------------------
20199
   1.0        12/05/2006  Rupesh Solanki      1. Created this procedure.
20200
 
20201
   NOTES:
20202
 
20203
   Automatically available Auto Replace Keywords:
20204
      Object Name:     REMOVE_PACKAGE_INTEREST
20205
      Sysdate:         12/05/2006
20206
      Date and Time:   12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AM
20207
      Username:         (set in TOAD Options, Procedure Editor)
20208
      Table Name:       (set in the "New PL/SQL Object" dialog)
20209
 
20210
******************************************************************************/
20211
BEGIN
20212
 
20213
	 --Delete from PACKAGE_INTEREST
20214
	 DELETE FROM PACKAGE_INTEREST
20215
	 WHERE PROJ_ID = nProjId
20216
	 AND PKG_ID = nPkgId
20217
	 AND USER_ID = nUserId;
20218
 
20219
END REMOVE_PACKAGE_INTEREST;
1374 dpurdie 20220
/
20221
--------------------------------------------------------
20222
--  DDL for Procedure RELEASE_MANAGER_MAILOUT
20223
--------------------------------------------------------
1373 dpurdie 20224
 
20225
  CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (
20226
  sender      IN VARCHAR2,
20227
  recipient   IN VARCHAR2,
20228
  ccrecipient IN VARCHAR2,
20229
  subject     IN VARCHAR2,
20230
  message     IN VARCHAR2
20231
  ) IS
20232
 
20233
  crlf VARCHAR2(2):= UTL_TCP.CRLF;
20234
  connection utl_smtp.connection;
20235
  mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';
20236
  header VARCHAR2(1000);
20237
 
20238
BEGIN
20239
 
20240
  --
20241
  -- Start the connection.
20242
  --
20243
  connection := utl_smtp.open_connection(mailhost,25);
20244
 
20245
  header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
20246
     'From: '||sender||''||crlf||
20247
  'Subject: '||subject||crlf||
20248
       'To: '||recipient||crlf||
20249
       'CC: '||ccrecipient;
20250
 
20251
  --
20252
  -- Handshake with the SMTP server
20253
  --
20254
  utl_smtp.helo(connection, mailhost);
20255
  utl_smtp.mail(connection, sender);
20256
  utl_smtp.rcpt(connection, recipient);
20257
  utl_smtp.rcpt(connection, ccrecipient);
20258
  utl_smtp.open_data(connection);
20259
  --
20260
  -- Write the header
20261
  --
20262
  utl_smtp.write_data(connection, header);
20263
  --
20264
  -- The crlf is required to distinguish that what comes next is not simply part of the header..
20265
  --
20266
  utl_smtp.write_data(connection, crlf ||message);
20267
  utl_smtp.close_data(connection);
20268
  utl_smtp.quit(connection);
20269
 
20270
EXCEPTION
20271
  WHEN UTL_SMTP.INVALID_OPERATION THEN
20272
    dbms_output.put_line(' Invalid Operation in SMTP transaction.');
20273
  WHEN UTL_SMTP.TRANSIENT_ERROR THEN
20274
    dbms_output.put_line(' Temporary problems with sending email - try again later.');
20275
  WHEN UTL_SMTP.PERMANENT_ERROR THEN
20276
    dbms_output.put_line(' Errors in code for SMTP transaction.');
20277
 
20278
END RELEASE_MANAGER_MAILOUT;
1374 dpurdie 20279
/
20280
--------------------------------------------------------
20281
--  DDL for Procedure SET_PACKAGE_BUILD_ENV
20282
--------------------------------------------------------
1373 dpurdie 20283
 
20284
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
20285
	   	  		  								  	sBuildEnvIdList IN VARCHAR2 ) IS
20286
/* ---------------------------------------------------------------------------
20287
    Last Modified: Rupesh Solanki
20288
	Version: 3.0.1
20289
   --------------------------------------------------------------------------- */
20290
 
20291
 
20292
BEGIN
20293
 
20294
   -- Delete Current Build Env settings
20295
   DELETE FROM PACKAGE_BUILD_ENV
20296
   WHERE pv_id = nPvId;
20297
 
20298
   -- Delet Current Package Build Info Settings
20299
   DELETE FROM PACKAGE_BUILD_INFO
20300
   WHERE pv_id = nPvId;
20301
 
20302
   -- Reset flag to N
20303
   UPDATE PACKAGE_VERSIONS SET
20304
	   IS_BUILD_ENV_REQUIRED = 'N'
20305
   WHERE PV_ID = nPvId;
20306
 
20307
 
20308
   -- Set new Build Env
20309
   IF NOT sBuildEnvIdList IS NULL THEN
20310
   	  -- Insert into PACKAGE_BUILD_ENV
20311
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
20312
	  SELECT nPvId AS PV_ID,
20313
	  		 be.BE_ID
20314
	    FROM BUILD_ENVIRONMENTS be
20315
	   WHERE be.BE_ID IN (
20316
	   		 		  	   SELECT *
20317
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20318
	   		 		  	 );
20319
 
20320
   	  -- Insert into PACKAGE_BUILD_INFO
20321
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
20322
	  SELECT nPvId AS PV_ID,
20323
	  		 be.BM_ID
20324
	    FROM BUILD_MACHINES be
20325
	   WHERE be.BM_ID IN (
20326
	   		 		  	   SELECT *
20327
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20328
	   		 		  	 );						 
20329
 
20330
	   -- Set flag to Y
20331
	   UPDATE PACKAGE_VERSIONS SET
20332
		   IS_BUILD_ENV_REQUIRED = 'Y'
20333
	   WHERE PV_ID = nPvId;
20334
 
20335
   END IF;
20336
 
20337
 
20338
END Set_Package_Build_Env;
1374 dpurdie 20339
/
20340
--------------------------------------------------------
20341
--  DDL for Procedure SHIFT_INSTALL_ORDER
20342
--------------------------------------------------------
1373 dpurdie 20343
 
20344
  CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
20345
												  nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
20346
                                                  nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS
20347
/* ---------------------------------------------------------------------------
20348
    Version: 3.0
20349
   --------------------------------------------------------------------------- */
20350
 
20351
currInstallOrder NUMBER;
20352
FromInstallOrder NUMBER;
20353
 
20354
BEGIN
20355
 
20356
	 -- Get Current Install Order
20357
     SELECT pp.INSTALL_ORDER INTO currInstallOrder
20358
       FROM PACKAGE_PATCHES pp
20359
      WHERE pp.PV_ID = nPvId
20360
        AND pp.PATCH_ID = nPatchId;
20361
 
20362
 
20363
	 IF currInstallOrder > nToInstallOrder
20364
	 THEN
20365
 
20366
		FromInstallOrder := nToInstallOrder;
20367
 
20368
	    -- Shift others Up
20369
		UPDATE PACKAGE_PATCHES pp SET
20370
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER + 1
20371
		 WHERE pp.PV_ID = nPvId
20372
           AND pp.PATCH_ID != nPatchId
20373
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  currInstallOrder - 1;
20374
 
20375
 
20376
	 ELSIF currInstallOrder < nToInstallOrder
20377
	 THEN
20378
 
20379
		FromInstallOrder := currInstallOrder + 1;
20380
 
20381
		-- Shift others Down
20382
        UPDATE PACKAGE_PATCHES pp SET
20383
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER - 1
20384
		 WHERE pp.PV_ID = nPvId
20385
           AND pp.PATCH_ID != nPatchId
20386
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  nToInstallOrder;
20387
 
20388
	 END IF;
20389
 
20390
 
20391
	 -- Move Patch to new install order
20392
     UPDATE PACKAGE_PATCHES pp SET
20393
		    pp.INSTALL_ORDER = nToInstallOrder
20394
	  WHERE pp.PV_ID = nPvId
20395
	    AND pp.PATCH_ID = nPatchId;
20396
 
20397
 
20398
END Shift_Install_Order;
1374 dpurdie 20399
/
20400
--------------------------------------------------------
20401
--  DDL for Procedure NEW_PACKAGE_NAME
20402
--------------------------------------------------------
1373 dpurdie 20403
 
20404
  CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
20405
                                               retPKG_ID OUT NUMBER ) IS
20406
/* ---------------------------------------------------------------------------
20407
    Version: 3.0.0
20408
   --------------------------------------------------------------------------- */
20409
 
20410
    CURSOR packages_cur IS
20411
        SELECT pkg.pkg_id
20412
          FROM packages pkg
20413
         WHERE pkg.pkg_name = SSpkg_name;
20414
    packages_rec packages_cur%ROWTYPE;
20415
 
20416
 
20417
BEGIN
20418
 
20419
    /* ---------------------------------------------------- */
20420
    /* Find if package name exists                          */
20421
    /* ---------------------------------------------------- */
20422
 
20423
    OPEN packages_cur;
20424
    FETCH packages_cur INTO packages_rec;
20425
 
20426
    IF packages_cur%NOTFOUND
20427
    THEN
20428
        -- Create new pkg_name --
20429
        SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;
20430
 
20431
        INSERT INTO packages ( pkg_id, pkg_name )
20432
        VALUES ( retPKG_ID, SSpkg_name );
20433
 
20434
    ELSE
20435
        retPKG_ID := packages_rec.pkg_id;
20436
 
20437
    END IF;
20438
 
20439
 
20440
    CLOSE packages_cur;
20441
 
20442
END New_Package_Name;
1374 dpurdie 20443
/
20444
--------------------------------------------------------
20445
--  DDL for Procedure REMOVE_RUNTIME
20446
--------------------------------------------------------
1373 dpurdie 20447
 
20448
  CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20449
											 nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,
20450
                                             nUserId IN NUMBER ) IS
20451
/* ---------------------------------------------------------------------------
20452
    Version: 3.0
20453
   --------------------------------------------------------------------------- */
20454
 
20455
   RuntimeDependency VARCHAR2(4000);
20456
 
20457
BEGIN
20458
 
20459
	-- Get Runtime dependency
20460
    SELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION  INTO RuntimeDependency
20461
	  FROM RUNTIME_DEPENDENCIES rtd,
20462
	  	   PACKAGES pkg,
20463
	       PACKAGE_VERSIONS pv
20464
	 WHERE rtd.PV_ID = nPvId
20465
	   AND pv.PKG_ID = pkg.PKG_ID
20466
	   AND rtd.RTD_ID = pv.PV_ID
20467
	   AND rtd.RTD_ID = nRuntimeId;
20468
 
20469
 
20470
	-- Delete Document
20471
    DELETE
20472
      FROM RUNTIME_DEPENDENCIES rtd
20473
     WHERE rtd.PV_ID = nPvId
20474
       AND rtd.RTD_ID = nRuntimeId;
20475
 
20476
 
20477
    /* LOG ACTION */
20478
   	Log_Action ( nPvId, 'runtime_remove', nUserId,
20479
   			     'Runtime package: '|| RuntimeDependency );
20480
 
20481
 
20482
END Remove_Runtime;
1374 dpurdie 20483
/
20484
--------------------------------------------------------
20485
--  DDL for Procedure CHANGE_PACKAGE_STATE
20486
--------------------------------------------------------
1373 dpurdie 20487
 
20488
  CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20489
											 nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
20490
/* ---------------------------------------------------------------------------
20491
    Version: 4.0
20492
   --------------------------------------------------------------------------- */
20493
 
20494
BEGIN
20495
 
20496
    -- Unlock Package
20497
    UPDATE RELEASE_CONTENT rc SET
20498
    	rc.PKG_STATE = 0
20499
    WHERE rc.PV_ID = nPvId
20500
	AND rc.RTAG_ID = nRtagId;
20501
 
20502
    /* LOG ACTION */
20503
   /*	Log_Action ( nPvId, 'unlock_package', nUserId );*/
20504
 
20505
END Change_Package_State;
20506
/