Subversion Repositories DevTools

Rev

Go to most recent revision | 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;
2735 dpurdie 1844
      return_migrated_pkg             NUMBER                        := -4;
1373 dpurdie 1845
 
1846
      x_vcstypeid                     NUMBER;
1847
      x_tag                           VARCHAR2(32);
1848
      x_label                         VARCHAR2(60);
1849
      x_srcpath                       VARCHAR2(2000);
1374 dpurdie 1850
      p_srcpath                       VARCHAR2(2000);
1373 dpurdie 1851
 
1852
      -- Regular expression constituents
1853
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
1854
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
1855
      BOL           VARCHAR2(4)  := '^';
1856
      Anything      VARCHAR2(4)  := '.*';
1857
      ReplaceToken1 VARCHAR2(4)  := '\1';
1858
      ReplaceToken2 VARCHAR2(4)  := '\2';
1859
      ReplaceToken3 VARCHAR2(4)  := '\3';
1860
      iprev_modifier_id               NUMBER;
1861
 
1862
   BEGIN
1863
      /*--------------- Business Rules Here -------------------*/
1864
      IF (rtagid IS NULL)
1865
      THEN
1866
         raise_application_error (-20000, 'RtagId must be supplied.');
1867
      END IF;
1868
 
1869
      IF (pkgname IS NULL)
1870
      THEN
1871
         raise_application_error (-20000, 'PkgName must be supplied.');
1872
      END IF;
1873
 
1874
      IF (newpkgversion IS NULL)
1875
      THEN
1876
         raise_application_error (-20000, 'PkgVersion must be supplied.');
1877
      END IF;
1878
 
1879
      IF (vcstag IS NULL)
1880
      THEN
1881
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
1882
      END IF;
1883
 
1884
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
1885
      THEN
1886
         raise_application_error
1887
            (-20000,
1888
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
1889
            );
1890
      END IF;
1891
 
1892
      IF (username IS NULL)
1893
      THEN
1894
         raise_application_error (-20000, 'UserName must be supplied.');
1895
      END IF;
1896
 
1897
      -- Parse the PkgVcsTag
1898
      -- Sets up
1899
      --   x_tag, x_label, x_srcpath
1900
 
1901
       BEGIN
1902
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
1903
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
1904
 
1905
          -- Decode the short tag
1906
          CASE x_tag
1907
             WHEN 'CC' THEN
1908
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
1909
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1910
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1911
 
1912
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1913
                -- check for that error as well as the obvious zero-length string conditions.
1914
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1915
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1916
                END IF;
2365 dpurdie 1917
 
1918
                IF isSVNbyName(pkgname) > 0 THEN
1919
                    raise_application_error (-20000, 'Package has been migrated to SVN. Cannot release versions from ClearCase');
1920
                END IF;
1373 dpurdie 1921
 
2735 dpurdie 1922
                IF isSVNbyName(pkgname) > 0 THEN
1923
				    -- Don't allow migrated packages to be released from a CC label
1924
					return return_migrated_pkg;
1925
                END IF;
1926
 
1373 dpurdie 1927
             WHEN 'SVN' THEN
1928
                -- extract the 2nd token, that being the subversion tag
1374 dpurdie 1929
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1930
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1373 dpurdie 1931
 
1932
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1933
                -- check for that error as well as the obvious zero-length string conditions.
1374 dpurdie 1934
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1373 dpurdie 1935
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1936
                END IF;
1937
 
1938
             WHEN 'UC' THEN
1939
                -- nothing to extract, just assign defaults
1374 dpurdie 1940
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1373 dpurdie 1941
                x_label   := 'N/A';
1942
             ELSE
1943
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
1944
          END CASE;
1945
       END;
1946
 
1947
      -- Get the VCS_TYPE_ID for the version control system.
1948
      BEGIN
1949
         SELECT vt.vcs_type_id
1950
         INTO x_vcstypeid
1951
         FROM VCS_TYPE vt
1952
         WHERE vt.tag = x_tag;
1953
         EXCEPTION
1954
            WHEN NO_DATA_FOUND THEN
1955
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
1956
      END;
1957
 
1958
 
1959
      -- Get user_id
1960
      BEGIN
1961
         SELECT usr.user_id
1962
           INTO userid
1963
           FROM users usr
1964
          WHERE UPPER (usr.user_name) = UPPER (username)
1965
            AND usr.is_disabled IS NULL;
1966
      EXCEPTION
1967
         WHEN NO_DATA_FOUND
1968
         THEN
1969
            raise_application_error (-20000,
1970
                                        'UserName '
1971
                                     || username
1972
                                     || ' is not valid or disabled.'
1973
                                    );
1974
      END;
1975
 
1976
/*-------------------------------------------------------*/
1977
 
1978
      -- Create package if necessary
1979
      IF isrippled = 1
1980
      THEN
1981
         /* Ripple Build */
1982
         BEGIN
1983
            -- Make sure that package does not exist
1984
            SELECT pv.pv_id
1985
              INTO pvid
1986
              FROM package_versions pv, PACKAGES pkg
1987
             WHERE pv.pkg_id = pkg.pkg_id
1988
               AND pkg.pkg_name = pkgname
1989
               AND pv.pkg_version = newpkgversion;
1990
         EXCEPTION
1991
            WHEN NO_DATA_FOUND
1992
            THEN
1993
               pvid := 0;
1994
         END;
1995
 
1996
         IF (pvid = 0)
1997
         THEN
1998
            -- Split current version in parts
1999
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2000
 
2001
            BEGIN
1374 dpurdie 2002
               -- Find package to be replaced with the ripple package
1373 dpurdie 2003
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2004
               THEN
1374 dpurdie 2005
                  SELECT pv.pv_id, pv.src_path
2006
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2007
                    FROM PACKAGES pkg, package_versions pv,
2008
                         release_content rc
2009
                   WHERE rc.pv_id = pv.pv_id
2010
                     AND pv.pkg_id = pkg.pkg_id
2011
                     AND rc.rtag_id = rtagid
2012
                     AND pkg.pkg_name = pkgname
2013
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
2014
               ELSE
1374 dpurdie 2015
                  SELECT pv.pv_id, pv.src_path
2016
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2017
                    FROM PACKAGES pkg, package_versions pv,
2018
                         release_content rc
2019
                   WHERE rc.pv_id = pv.pv_id
2020
                     AND pv.pkg_id = pkg.pkg_id
2021
                     AND rc.rtag_id = rtagid
2022
                     AND pkg.pkg_name = pkgname
2023
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2024
               END IF;
2025
            EXCEPTION
2026
               WHEN NO_DATA_FOUND
2027
               THEN
2028
                  raise_application_error
2029
                                        (-20000,
2030
                                            'Cannot get CloneFromPvId. VExt='
2031
                                         || vext
2032
                                         || ', RtagId='
2033
                                         || rtagid
2034
                                         || ', PkgName='
2035
                                         || pkgname
2036
                                         || ', SSV_EXT='
2037
                                         || ssv_ext
2038
                                        );
2039
            END;
2040
 
2041
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2042
            THEN
2043
               -- Create package
2044
               seed_package_names_versions (pkgname,
2045
                                            newpkgversion,
2046
                                            userid,
2047
                                            pvid,
2048
                                            clonefrompvid
2049
                                           );
2050
            ELSE
2051
               -- Create package
2052
               seed_package_names_versions2 (pkgname,
2053
                                             newpkgversion,
2054
                                             userid,
2055
                                             pvid,
2056
                                             clonefrompvid
2057
                                            );
2058
            END IF;
2059
 
2060
            -- Update Package reason for release
2061
            UPDATE package_versions pv
2062
               SET pv.comments = 'Rippled Build.',
2063
                   pv.build_type = 'Y'
2064
             WHERE pv.pv_id = pvid;
2065
         ELSE
2066
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
2067
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
2068
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
2069
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
2070
            UPDATE package_versions pv
2071
               SET pv.release_notes_info = null,
2072
                   pv.modified_stamp = ora_sysdatetime
2073
             WHERE pv.pv_id = pvid;
2074
 
2075
            --DEVI-066151
2076
            log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');
2077
 
2078
            RETURN return_package_already_exists;
2079
         END IF;
2080
      ELSE
2081
         /* Auto build from Pending area */
2082
 
2083
         -- Find package in pending area
2084
         BEGIN
1374 dpurdie 2085
            SELECT pv.pv_id, pv.dlocked, pv.src_path
2086
              INTO pvid, dlocked, p_srcpath
1373 dpurdie 2087
              FROM planned pl, package_versions pv, PACKAGES pkg
2088
             WHERE pl.pv_id = pv.pv_id
2089
               AND pv.pkg_id = pkg.pkg_id
2090
               AND pl.rtag_id = rtagid
2091
               AND pkg.pkg_name = pkgname
2092
               AND pv.dlocked = 'A'
2093
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
2094
               AND rownum = 1
2095
             ORDER BY pv.modified_stamp;
2096
         EXCEPTION
2097
            WHEN NO_DATA_FOUND
2098
            THEN
2099
               pvid := 0;
2100
         END;
2101
 
2102
         IF (pvid = 0)
2103
         THEN
2104
            -- Package does not exist in pending area, hence report it
2105
            RETURN return_package_not_found;
2106
         ELSIF (dlocked != 'A')
2107
         THEN
2108
            -- Package is not approved for autobuild
2109
            RETURN return_not_approved;
2110
         END IF;
1374 dpurdie 2111
 
1373 dpurdie 2112
      END IF;
2113
 
1374 dpurdie 2114
      -- Ensure Source Path does not change
2115
      -- Do not expect the SVN development branch to change
2116
      -- From the previous package
2117
      IF ( x_tag = 'SVN' AND p_srcpath != x_srcpath )
2118
      THEN
2119
        raise_application_error (-20000, 'Source Path does not match (' || p_srcpath || ','|| x_srcpath || ')' );
2120
      END IF;
2121
 
1373 dpurdie 2122
      BEGIN
2123
         -- Import Dependencies
2124
         import_dependencies (pvid, dependenciesimportlist, userid);
2125
      END;
2126
 
2127
 
2128
      BEGIN
2129
         -- Split current version in parts
2130
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2131
 
2132
         -- Update Package Details
2133
         UPDATE package_versions pv
2134
            SET pv.pkg_version = newpkgversion,
2135
                pv.v_ext = ssv_ext,
2136
                pv.v_mm = ssv_mm,
2137
                pv.v_nmm = ssv_nmm,
2138
                pv.src_path = x_srcpath,
2139
                pv.pkg_label = x_label,
2140
                pv.vcs_type_id = x_vcstypeid
2141
          WHERE pv.pv_id = pvid;
2142
      EXCEPTION
2143
         WHEN DUP_VAL_ON_INDEX
2144
         THEN
2145
            -- Package already exists, hence cannot be used for ripple build
2146
            RETURN return_package_already_exists;
2147
      END;
2148
 
2149
      -- Update the is_autobuildable
2150
      UPDATE package_versions
2151
         SET is_autobuildable = 'Y'
2152
       WHERE pv_id = pvid;
2153
 
2154
      -- DEVI-063601
2155
      -- For planned builds the modifier_id shouldn't be set to buildadm.
2156
      -- To ensure this the modifier_id is obtained so it can be restored after
2157
      -- the function pk_environment.auto_make_release is called.
2158
      -- This function calls, change_state, which sets the modifier_id to the
2159
      -- specified userid, which for auto builds is buildadm.
2160
      SELECT pv.modifier_id INTO iprev_modifier_id
2161
      FROM package_versions pv WHERE pv.pv_id = pvid;
2162
 
2163
      -- Now release package
2164
      pk_environment.auto_make_release (pvid,
2165
                                        rtagid,
2166
                                        userid,
2167
                                        vext,
2168
                                        ssv_ext,
2169
                                        clonefrompvid
2170
                                       );
2171
 
2172
      -- DEVI-063601
2173
      -- if it is a planned build then restore the modifier_id to the previous modifier
2174
      UPDATE package_versions pv SET pv.modifier_id = iprev_modifier_id
2175
      WHERE pv.pv_id = pvid;
2176
 
2177
      --Now clean the PLANNED_VERSIONS table
2178
      SELECT pkg_id
2179
        INTO pkgid
2180
        FROM PACKAGES
2181
       WHERE pkg_name = pkgname;
2182
 
2183
      DELETE FROM planned_versions
2184
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
2185
 
2186
      RETURN pvid;
2187
   END;
2188
 
2189
/*-------------------------------------------------------------------------------------------------------*/
2190
   PROCEDURE import_dependencies (
2191
      pvid                     IN   NUMBER,
2192
      dependenciesimportlist   IN   VARCHAR2,
2193
      userid                   IN   NUMBER
2194
   )
2195
   IS
2196
/*
2197
|| DependenciesImportList Format:
2198
|| "pkgA","1.0.0";"pkgB","2.0.0";
2199
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
2200
*/
2201
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
2202
         INDEX BY VARCHAR2 (4000);
2203
 
2204
      seperator         VARCHAR2 (2)           := '||';
2205
      pkgname           VARCHAR2 (4000);
2206
      pkgversion        VARCHAR2 (4000);
2207
      buildtype         VARCHAR2 (50);
2208
      pkgid             NUMBER;
2209
      vext              VARCHAR2 (4000);
2210
      dpvid             NUMBER;
2211
      slist             VARCHAR2 (4000);
2212
      cbuildtypes       tdictionary;
2213
      dependencyrow     NUMBER;
2214
      sdependency       VARCHAR2 (4000);
2215
      first_pos         VARCHAR2 (4000);
2216
      second_pos        VARCHAR2 (4000);
2217
      third_pos         VARCHAR2 (4000);
2218
      forth_pos         VARCHAR2 (4000);
2219
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2220
 
2221
      CURSOR curbuildtype
2222
      IS
2223
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
2224
                dep.build_type
2225
           FROM package_dependencies dep, package_versions dpv
2226
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
2227
 
2228
      recbuildtype      curbuildtype%ROWTYPE;
2229
   BEGIN
2230
      slist := dependenciesimportlist;
2231
 
2232
      -- Preformat String
2233
      IF NOT slist IS NULL
2234
      THEN
2235
         slist := REPLACE (slist, ' ');                      -- Remove spaces
2236
         slist := REPLACE (slist, UTL_TCP.crlf);
2237
         -- Remove new line and carriage-return characters
2238
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
2239
      END IF;
2240
 
2241
      -- Get Current Dependencies
2242
      OPEN curbuildtype;
2243
 
2244
      FETCH curbuildtype
2245
       INTO recbuildtype;
2246
 
2247
      WHILE curbuildtype%FOUND
2248
      LOOP
2249
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
2250
 
2251
         FETCH curbuildtype
2252
          INTO recbuildtype;
2253
      END LOOP;
2254
 
2255
      CLOSE curbuildtype;
2256
 
2257
      -- Separate dependencies with ; separator
2258
      citemcollection := in_list_varchar2 (slist, ';');
2259
 
2260
      BEGIN
2261
         -- Remove old dependencies
2262
         DELETE FROM package_dependencies dep
2263
               WHERE dep.pv_id = pvid;
2264
 
2265
         -- Loop through dependencies
2266
         FOR dependencyrow IN 1 .. citemcollection.COUNT
2267
         LOOP
2268
            -- Extract pkg_name and pkg_version
2269
            sdependency := citemcollection (dependencyrow);
2270
            first_pos := INSTR (sdependency, '"', 1, 1);
2271
            second_pos := INSTR (sdependency, '"', 1, 2);
2272
            third_pos := INSTR (sdependency, '"', 1, 3);
2273
            forth_pos := INSTR (sdependency, '"', 1, 4);
2274
            pkgname :=
2275
               SUBSTR (sdependency,
2276
                       (first_pos + 1),
2277
                       (second_pos - first_pos - 1)
2278
                      );
2279
            pkgversion :=
2280
               SUBSTR (sdependency,
2281
                       (third_pos + 1),
2282
                       (forth_pos - third_pos - 1)
2283
                      );
2284
 
2285
            -- Dependency must exits to be linked against
2286
            BEGIN
2287
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
2288
                 INTO dpvid, pkgid, vext
2289
                 FROM package_versions pv, PACKAGES pkg
2290
                WHERE pv.pkg_id = pkg.pkg_id
2291
                  AND pkg.pkg_name = pkgname
2292
                  AND pv.pkg_version = pkgversion;
2293
            EXCEPTION
2294
               WHEN NO_DATA_FOUND
2295
               THEN
2296
                  raise_application_error
2297
                                  (-20000,
2298
                                      'Dependency ['
2299
                                   || pkgname
2300
                                   || ' '
2301
                                   || pkgversion
2302
                                   || '] does not exist yet and cannot be used!'
2303
                                  );
2304
            END;
2305
 
2306
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
2307
            BEGIN
2308
               buildtype := cbuildtypes (pkgid || seperator || vext);
2309
 
2310
               IF buildtype IS NULL
2311
               THEN
2312
                  -- Set build type to LinkPackageArchive by default
2313
                  buildtype := 'L';
2314
               END IF;
2315
            EXCEPTION
2316
               WHEN NO_DATA_FOUND
2317
               THEN
2318
                  buildtype := 'L';
2319
            END;
2320
 
2321
            -- Insert Dependencies
2322
            update_package_dependency (pvid,
2323
                                       pkgname,
2324
                                       pkgversion,
2325
                                       buildtype,
2326
                                       userid,
2327
 
2328
                                      );
2329
         END LOOP;
2330
      END;
2331
   END;
2332
 
2333
/*-------------------------------------------------------------------------------------------------------*/
2334
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
2335
      RETURN VARCHAR2
2336
   IS
2337
      pkgversion   VARCHAR2 (4000);
2338
   BEGIN
2339
      BEGIN
2340
         SELECT pv.pkg_version
2341
           INTO pkgversion
2342
           FROM PACKAGES pkg, release_content rc, package_versions pv
2343
          WHERE pv.pv_id = rc.pv_id
2344
            AND pkg.pkg_id = pv.pkg_id
2345
            AND pkg.pkg_name = pkgname
2346
            AND rc.rtag_id = rtagid;
2347
 
2348
         RETURN pkgversion;
2349
      END;
2350
   END;
2351
 
2352
/*-------------------------------------------------------------------------------------------------------*/
2353
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
2354
      RETURN VARCHAR2
2355
   IS
2356
      pkgversion   VARCHAR2 (4000);
2357
   BEGIN
2358
      BEGIN
2359
         SELECT pv.pkg_version
2360
           INTO pkgversion
2361
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
2362
          WHERE pv.pv_id = wip.pv_id
2363
            AND pkg.pkg_id = pv.pkg_id
2364
            AND pkg.pkg_name = pkgname
2365
            AND wip.rtag_id = rtagid;
2366
 
2367
         IF pkgversion IS NULL
2368
         THEN
2369
            SELECT pv.pkg_version
2370
              INTO pkgversion
2371
              FROM PACKAGES pkg, planned pl, package_versions pv
2372
             WHERE pv.pv_id = pl.pv_id
2373
               AND pkg.pkg_id = pv.pkg_id
2374
               AND pkg.pkg_name = pkgname
2375
               AND pl.rtag_id = rtagid;
2376
         END IF;
2377
 
2378
         RETURN pkgversion;
2379
      END;
2380
   END;
2381
 
2382
/*-------------------------------------------------------------------------------------------------------*/
2383
   PROCEDURE update_dash_board (rtagid IN NUMBER)
2384
   IS
2385
      projid       NUMBER;
2386
      projiddb     NUMBER;
2387
      total        NUMBER;
2388
      auto_total   NUMBER;
2389
      rtagiddb     NUMBER;
2390
   BEGIN
2391
      SELECT COUNT (*)
2392
        INTO total
2393
        FROM release_content rc, package_versions pv
2394
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
2395
 
2396
      SELECT COUNT (*)
2397
        INTO auto_total
2398
        FROM release_content rc, package_versions pv
2399
       WHERE pv.pv_id = rc.pv_id
2400
         AND pv.is_autobuildable = 'Y'
2401
         AND rc.rtag_id = rtagid;
2402
 
2403
      BEGIN
2404
         SELECT rtag_id
2405
           INTO rtagiddb
2406
           FROM dash_board
2407
          WHERE rtag_id = rtagid;
2408
 
2409
         SELECT proj_id
2410
           INTO projiddb
2411
           FROM dash_board
2412
          WHERE rtag_id = rtagid;
2413
      EXCEPTION
2414
         WHEN NO_DATA_FOUND
2415
         THEN
2416
            rtagiddb := '';
2417
      END;
2418
 
2419
      IF rtagiddb IS NULL
2420
      THEN
2421
         SELECT proj_id
2422
           INTO projid
2423
           FROM release_tags
2424
          WHERE rtag_id = rtagid;
2425
 
2426
         INSERT INTO dash_board
2427
                     (proj_id, rtag_id, last_build_time, automated_packages,
2428
                      total_packages
2429
                     )
2430
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
2431
                      total
2432
                     );
2433
      ELSE
2434
         UPDATE dash_board
2435
            SET last_build_time = ora_sysdatetime,
2436
                automated_packages = auto_total,
2437
                total_packages = total
2438
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
2439
      END IF;
2440
   END;
2441
 
2442
/*-------------------------------------------------------------------------------------------------------*/
2443
   FUNCTION exclude_from_build (
2444
      pvid          IN   NUMBER,
2445
      spkgversion   IN   VARCHAR2,
2446
      rtagid        IN   NUMBER,
2447
      username      IN   VARCHAR2
2448
   )
2449
      RETURN NUMBER
2450
   IS
2451
      userid              NUMBER;
2452
      outerrcode          NUMBER;
2453
      pkgid               NUMBER;
2454
 
2455
      CURSOR dnr_duplicate_cur
2456
      IS
2457
         SELECT *
2458
           FROM do_not_ripple
2459
          WHERE pv_id = pvid AND rtag_id = rtagid;
2460
 
2461
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2462
   BEGIN
2463
      outerrcode := -1;       -- Set default return error code to ERROR state
2464
 
2465
      /*--------------- Business Rules Here -------------------*/
2466
      IF (rtagid IS NULL)
2467
      THEN
2468
         RETURN outerrcode;
2469
--         raise_application_error (-20000, 'RtagId must be supplied.');
2470
      END IF;
2471
 
2472
      IF (pvid IS NULL)
2473
      THEN
2474
         RETURN outerrcode;
2475
--         raise_application_error (-20000, 'PvId must be supplied.');
2476
      END IF;
2477
 
2478
      IF (username IS NULL)
2479
      THEN
2480
         RETURN outerrcode;
2481
--         raise_application_error (-20000, 'UserName must be supplied.');
2482
      END IF;
2483
 
2484
      -- Get user_id
2485
      BEGIN
2486
         SELECT usr.user_id
2487
           INTO userid
2488
           FROM users usr
2489
          WHERE UPPER (usr.user_name) = UPPER (username)
2490
            AND usr.is_disabled IS NULL;
2491
      EXCEPTION
2492
         WHEN NO_DATA_FOUND
2493
         THEN
2494
            RETURN outerrcode;
2495
--            raise_application_error (-20000,
2496
--                                        'UserName '
2497
--                                     || username
2498
--                                     || ' is not valid or disabled.'
2499
--                                    );
2500
      END;
2501
 
2502
      OPEN dnr_duplicate_cur;
2503
 
2504
      FETCH dnr_duplicate_cur
2505
       INTO dnr_duplicate_rec;
2506
 
2507
      IF dnr_duplicate_cur%FOUND
2508
      THEN
2509
         outerrcode := 0;
2510
      END IF;
2511
 
2512
      IF dnr_duplicate_cur%NOTFOUND
2513
      THEN
2514
         /* No duplicate recordset */
2515
         unripple_package (pvid, rtagid, userid);
2516
         outerrcode := 0;                            -- Set return to SUCCESS
2517
      END IF;
2518
 
2519
      CLOSE dnr_duplicate_cur;
2520
 
2521
      SELECT pkg_id
2522
        INTO pkgid
2523
        FROM package_versions
2524
       WHERE pv_id = pvid;
2525
 
2526
      DELETE FROM planned_versions
2527
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2528
 
2529
      RETURN outerrcode;
2530
   END;
2531
 
2532
/*-------------------------------------------------------------------------------------------------------*/
2533
   FUNCTION exclude_indirect_from_build (
2534
      pvid          IN   NUMBER,
2535
      spkgversion   IN   VARCHAR2,
2536
      rtagid        IN   NUMBER,
2537
      username      IN   VARCHAR2,
2538
      rootpvid      IN   NUMBER,
2539
      rootcause     IN   VARCHAR2,
2540
      rootfile      IN   VARCHAR2
2541
   )
2542
      RETURN NUMBER
2543
   IS
2544
      userid              NUMBER;
2545
      outerrcode          NUMBER;
2546
      pkgid               NUMBER;
2547
 
2548
      CURSOR dnr_duplicate_cur
2549
      IS
2550
         SELECT *
2551
           FROM do_not_ripple
2552
          WHERE pv_id = pvid AND rtag_id = rtagid;
2553
 
2554
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2555
   BEGIN
2556
      outerrcode := -1;       -- Set default return error code to ERROR state
2557
 
2558
      /*--------------- Business Rules Here -------------------*/
2559
      IF (rtagid IS NULL)
2560
      THEN
2561
         RETURN outerrcode;
2562
--         raise_application_error (-20000, 'RtagId must be supplied.');
2563
      END IF;
2564
 
2565
      IF (pvid IS NULL)
2566
      THEN
2567
         RETURN outerrcode;
2568
--         raise_application_error (-20000, 'PvId must be supplied.');
2569
      END IF;
2570
 
2571
      IF (username IS NULL)
2572
      THEN
2573
         RETURN outerrcode;
2574
--         raise_application_error (-20000, 'UserName must be supplied.');
2575
      END IF;
2576
 
2577
      -- Get user_id
2578
      BEGIN
2579
         SELECT usr.user_id
2580
           INTO userid
2581
           FROM users usr
2582
          WHERE UPPER (usr.user_name) = UPPER (username)
2583
            AND usr.is_disabled IS NULL;
2584
      EXCEPTION
2585
         WHEN NO_DATA_FOUND
2586
         THEN
2587
            RETURN outerrcode;
2588
--            raise_application_error (-20000,
2589
--                                        'UserName '
2590
--                                     || username
2591
--                                     || ' is not valid or disabled.'
2592
--                                    );
2593
      END;
2594
 
2595
     /* No duplicate recordset */
2596
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
2597
     outerrcode := 0;                            -- Set return to SUCCESS
2598
 
2599
      SELECT pkg_id
2600
        INTO pkgid
2601
        FROM package_versions
2602
       WHERE pv_id = pvid;
2603
 
2604
      DELETE FROM planned_versions
2605
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2606
 
2607
      RETURN outerrcode;
2608
   END;
2609
/*-------------------------------------------------------------------------------------------------------*/
2610
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
2611
   IS
2612
   BEGIN
2613
      INSERT INTO abt_action_log
2614
                  (rcon_id, action_datetime, action
2615
                  )
2616
           VALUES (rconid, ora_sysdatetime, action
2617
                  );
2618
   END;
2619
 
2620
/*-------------------------------------------------------------------------------------------------------*/
2621
   FUNCTION insert_package_metrics (
2622
      rtagid                   IN   NUMBER,
2623
      pkgname                  IN   VARCHAR2,
2624
      vext                     IN   VARCHAR2,
2625
      metricstring             IN   VARCHAR2
2626
   )
2627
      RETURN NUMBER
2628
   IS
2629
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2630
      lv_pvid                  NUMBER                 := 0;
2631
      rownumber                NUMBER;
2632
      rowcontent               VARCHAR2(4000);
2633
      metricname               VARCHAR2(1000);
2634
      metricvalue              VARCHAR2(4000);
2635
      return_insert_error      NUMBER                 := -1;
2636
      return_insert_success    NUMBER                 := 0;
2637
 
2638
      /* Metrics */
2639
      lv_branches                 NUMBER;
2640
      lv_branchlist               VARCHAR2(4000);
2641
      lv_codefiles                NUMBER;
2642
      lv_ignoredfiles             NUMBER;
2643
      lv_directories              NUMBER;
2644
      lv_directorydepth           NUMBER;
2645
      lv_totalfiles               NUMBER;
2646
      lv_makefiles                NUMBER;
2647
      lv_blanklines               NUMBER;
2648
      lv_codelines                NUMBER;
2649
      lv_commentlines             NUMBER;
2650
 
2651
   BEGIN
2652
      /*--------------- Business Rules Here -------------------*/
2653
      IF (rtagid IS NULL)
2654
      THEN
2655
         RETURN return_insert_error;
2656
      END IF;
2657
 
2658
      IF (pkgname IS NULL)
2659
      THEN
2660
         RETURN return_insert_error;
2661
      END IF;
2662
 
2663
      IF (metricstring IS NULL)
2664
      THEN
2665
         RETURN return_insert_error;
2666
      END IF;
2667
 
2668
      BEGIN
2669
         SELECT pv.pv_id
2670
           INTO lv_pvid
2671
           FROM package_versions pv, packages pkg, release_content rc
2672
          WHERE pv.pkg_id = pkg.pkg_id
2673
            AND rc.rtag_id = rtagid
2674
            AND pv.pv_id = rc.pv_id
2675
            AND pkg.pkg_name = pkgname
2676
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2677
      EXCEPTION
2678
           WHEN NO_DATA_FOUND
2679
           THEN
2680
                lv_pvid := 0;
2681
      END;
2682
 
2683
      citemcollection := in_list_varchar2 (metricstring, ';');
2684
 
2685
      FOR rownumber IN 1 .. citemcollection.COUNT
2686
      LOOP
2687
         rowcontent := citemcollection(rownumber);
2688
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
2689
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
2690
 
2691
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
2692
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
2693
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
2694
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
2695
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
2696
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
2697
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
2698
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
2699
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
2700
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
2701
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
2702
         END IF;
2703
      END LOOP;
2704
 
2705
      IF (lv_pvid > 0)
2706
      THEN
2707
         -- Delete any existing entries for this package version to makes sure our data is untainted
2708
         DELETE FROM package_metrics pm
2709
         WHERE pm.pv_id = lv_pvid;
2710
 
2711
         -- Insert the new data into the metrics table
2712
         INSERT INTO package_metrics
2713
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
2714
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
2715
                     )
2716
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
2717
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
2718
                     );
2719
 
2720
         -- Now update the Release_Metrics Table
2721
         update_release_metrics(rtagid);
2722
 
2723
         RETURN return_insert_success;
2724
      ELSE
2725
         RETURN return_insert_error;
2726
      END IF;
2727
   END;
2728
 
2729
/*-------------------------------------------------------------------------------------------------------*/
2730
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
2731
   IS
2732
      lv_totalpackages       NUMBER;
2733
      lv_autobuilt           NUMBER;
2734
      lv_linesofcode         NUMBER;
2735
      lv_unittested          NUMBER;
2736
      lv_autotested          NUMBER;
2737
      lv_numOfbranches       NUMBER;
2738
      lv_lastbuildtime       DATE;
2739
   BEGIN
2740
      IF (rtagid > 0)
2741
      THEN
2742
         -- Get the total number of packages in this release and the number of
2743
         -- those that are autobuilt
2744
         SELECT COUNT (DISTINCT rc.pv_id),
2745
                COUNT (DISTINCT autobuilt_qry.pv_id)
2746
           INTO lv_totalpackages, lv_autobuilt
2747
           FROM release_content rc,
2748
                package_versions pv,
2749
                (
2750
                 SELECT rc.pv_id
2751
                   FROM release_content rc,
2752
                        package_versions pv
2753
                  WHERE pv.is_autobuildable = 'Y'
2754
                    AND pv.pv_id = rc.pv_id
2755
                    AND rc.rtag_id = rtagid
2756
                ) autobuilt_qry
2757
          WHERE pv.pv_id = rc.pv_id
2758
            AND rc.rtag_id = rtagid
2759
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
2760
 
2761
         -- Get the build time of the last package built in this release and the
2762
         -- total number of lines of code
2763
         SELECT MAX(pm.created_stamp),
2764
                SUM(pm.code_lines)
2765
           INTO lv_lastbuildtime, lv_linesofcode
2766
           FROM package_metrics pm, release_content rc
2767
          WHERE pm.pv_id = rc.pv_id
2768
            AND rc.rtag_id = rtagid;
2769
 
2770
         -- Get the number of packages with unit tests in this release and the
2771
         -- number of those that are autotested
2772
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
2773
           FROM unit_tests ut,
2774
                release_content rc
2775
          WHERE ut.pv_id = rc.pv_id
2776
            AND rc.rtag_id = rtagid
2777
        AND ut.test_types_fk != 1;
2778
 
2779
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
2780
          FROM unit_tests ut,
2781
               release_content rc
2782
         WHERE ut.pv_id = rc.pv_id
2783
           AND rc.rtag_id = rtagid
2784
           AND ut.test_types_fk = 7;
2785
 
2786
 
2787
         -- Count the number of unique branches in the packages in this release.
2788
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
2789
--           FROM (
2790
--                SELECT pv_id,
2791
--                       regexp_substr(str, '[^,]+', 1, level) branch,
2792
--                       level lv,
2793
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
2794
--                  FROM (
2795
--                       SELECT pm.pv_id,
2796
--                              ','||pm.branch_list str
2797
--                         FROM package_metrics pm,
2798
--                              release_content rc
2799
--                        WHERE pm.pv_id = rc.pv_id
2800
--                          AND rc.rtag_id = rtagid
2801
--                       )
2802
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
2803
--                )
2804
--          WHERE lv != lg;
2805
 
2806
         UPDATE release_metrics rm
2807
            SET rm.total_packages = lv_totalpackages,
2808
                rm.autobuilt = lv_autobuilt,
2809
                rm.lines_of_code = lv_linesofcode,
2810
                rm.unit_tested = lv_unittested,
2811
                rm.autotested = lv_autotested,
2812
--                rm.branches = lv_numOfbranches,
2813
                rm.last_build_time = lv_lastbuildtime
2814
          WHERE rtag_id = rtagid;
2815
 
2816
         IF (SQL%ROWCOUNT = 0)
2817
         THEN
2818
            INSERT INTO release_metrics
2819
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2820
                         autotested, last_build_time
2821
                        )
2822
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2823
                         lv_autotested, lv_lastbuildtime
2824
                        );
2825
         END IF;
2826
--         IF (SQL%ROWCOUNT = 0)
2827
--         THEN
2828
--            INSERT INTO release_metrics
2829
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2830
--                         autotested, branches, last_build_time
2831
--                        )
2832
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2833
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
2834
--                        );
2835
--         END IF;
2836
--      ELSE
2837
--         raise_application_error (-20000, 'RtagId must be supplied.');
2838
      END IF;
2839
   END;
2840
/*-------------------------------------------------------------------------------------------------------*/
2841
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
2842
   IS
2843
      vcstypeid    NUMBER;
2844
      vcstag       VARCHAR2(32);
2845
      label        VARCHAR2(60);
2846
      srcpath      VARCHAR2(2000);
2847
      vcstypeid_cc NUMBER;
2848
      vcstypeid_uc NUMBER;
2849
   BEGIN
2850
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
2851
      -- what the primary key value is for the ClearCase VCS entry.
2852
      BEGIN
2853
         SELECT vt.vcs_type_id
2854
         INTO vcstypeid_cc
2855
         FROM VCS_TYPE vt
2856
         WHERE vt.tag = 'CC';
2857
         EXCEPTION
2858
            WHEN NO_DATA_FOUND THEN
2859
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
2860
      END;
2861
 
2862
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
2863
      -- what the primary key value is for the Uncontrolled VCS entry.
2864
      BEGIN
2865
         SELECT vt.vcs_type_id
2866
         INTO vcstypeid_uc
2867
         FROM VCS_TYPE vt
2868
         WHERE vt.tag = 'UC';
2869
         EXCEPTION
2870
            WHEN NO_DATA_FOUND THEN
2871
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
2872
      END;
2873
 
2874
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
2875
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
2876
      BEGIN
2877
         SELECT pv.pkg_label, pv.src_path,
2878
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
2879
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
2880
                 ELSE pv.vcs_type_id END) AS vcs_type_id
2881
         INTO label, srcpath, vcstypeid
2882
         FROM PACKAGE_VERSIONS pv
2883
         WHERE pv.pv_id = pvid;
2884
         EXCEPTION
2885
            WHEN NO_DATA_FOUND THEN
2886
               raise_application_error (-20000, 'Package Version Not Found!');
2887
      END;
2888
 
2889
      -- Get the VCS TAG for the VCS_TYPE_ID.
2890
      BEGIN
2891
         SELECT vt.tag
2892
         INTO vcstag
2893
         FROM VCS_TYPE vt
2894
         WHERE vt.vcs_type_id = vcstypeid;
2895
         EXCEPTION
2896
            WHEN NO_DATA_FOUND THEN
2897
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
2898
      END;
2899
 
2900
      -- Return value depending upon which VCS Tag is being used.
2901
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
2902
      CASE vcstag
2903
         WHEN 'CC' THEN
2904
            RETURN vcstag || '::' || srcpath || '::' || label;
2905
         WHEN 'SVN' THEN
1374 dpurdie 2906
            RETURN vcstag || '::' || srcpath || '::' || label;
1373 dpurdie 2907
         ELSE
2908
            RETURN vcstag || '::';
2909
      END CASE;
2910
 
2911
   END;
2912
/*-------------------------------------------------------------------------------------------------------*/
2913
 
1374 dpurdie 2914
/*-------------------------------------------------------------------------------------------------------
2915
Name:        update_vcs_details
2916
Description: Updates the Version Control System (vcs) details specified in the vcstag
2917
             parameter for the specified package version.
2918
             The specified package vcstag is parsed and split into 3 fields:
2919
                vcs type, src path, label
2920
             These fields are then stored for the specified pv_id in the package_versions, table.
2921
             An action is recorded in the action log and provides information for tracking and
2922
             for restoring the previous vcs settings if a recovery is required.
2923
Paramters:
2924
             ipv_id:     Package version identifier
2925
             vcstag:     Full version control tag.
2926
                         Examples:
2927
                             "SVN::AUPERASVN01/DPG_SWBase/tools/trunk::daf_tools_25.1.7027.cr@1234"
2928
                            "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2929
             user_id:    Identifier of the user that is performing this function.
2930
*/
2931
PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)
2932
   IS
2933
      ivcs_type_id   NUMBER;
2934
      svcs_type      VARCHAR2(128);
2935
      ssrc_path      VARCHAR2(512);
2936
      spkg_label     VARCHAR2(512);
2937
      spattern       VARCHAR2(64);
2938
      saction_desc   VARCHAR2(2048);
2939
      old_vcs_type   VARCHAR2(128);
2940
      old_src_path   VARCHAR2(512);
2941
      old_pkg_label  VARCHAR2(512);
2942
      old_pkg_vcstag VARCHAR2(1024);
2943
      i              NUMBER;
2944
      vcount         NUMBER;
2945
   BEGIN
2946
     -- Split vcs tag into fields: vcs type, src path, label
2947
     -- Fields are separated by '::'
2948
     -- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2949
     -- The below regular expression pattern has groups to achieve this.
2950
 
2951
     spattern:= '^([^:]*)::([^:]*)(::(.*))?$';
2952
 
2953
     --As Oracle 10g does not allow REGEXP_SUBSTR to return a group,
2954
     --REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).
2955
     SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type  FROM DUAL;
2956
     SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path  FROM DUAL;
2957
     SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;
2958
 
2959
     -- Validate vcs type
2960
     BEGIN
2961
       SELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);
2962
     EXCEPTION
2963
       WHEN NO_DATA_FOUND THEN
2964
         raise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2965
       --RAISE;
2365 dpurdie 2966
     END;
1374 dpurdie 2967
 
2365 dpurdie 2968
     -- If Clearcase
1374 dpurdie 2969
     IF (ivcs_type_id = 2) THEN
2970
       -- Validate source path
2971
       IF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THEN
2972
         raise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2973
       END IF;
2365 dpurdie 2974
 
1374 dpurdie 2975
       -- Validate label
2976
       -- For clearcase the label must be specified. For subversion it is not required.
2977
       IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THEN
2978
         raise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2979
       END IF;
2980
 
2981
     -- if Subversion
2982
     ELSIF (ivcs_type_id = 23) THEN
2983
       -- general validity
2984
       -- Not as picky as the RM Data entry
2985
       IF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))+$','i') THEN
2986
         raise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2987
       END IF;
2988
 
2989
       -- Validate Tag
2990
       -- May be a Peg or a Label
2991
       IF NOT REGEXP_LIKE(spkg_label,'^@?[0-9]+$','i') THEN
2992
           IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+($|@[0-9]+)','i') THEN
2993
             raise_application_error (-20000, 'Invalid SVN tag:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2994
           END IF;
2995
       END IF;
2996
 
2997
        -- Check for suitable ending
2998
        IF NOT REGEXP_LIKE(ssrc_path,'(\/tags$)|(\/branches\/)|(\/trunk$)','i') THEN
2999
            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 || '"');
3000
        END IF;
3001
 
3002
       -- Check for combined use of tags, branches, trunk or repeats of each
3003
       -- Count occurrences of /tags or /branches/ or /trunk
3004
       vcount:=0;
3005
       i:=1;
3006
       WHILE i > 0 LOOP
3007
         i:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk(\/|$))',i,1,1,'i');
3008
         IF i > 0 THEN
3009
           -- if found then increment count
3010
           vcount:=vcount+1;
3011
           i:=i-1;  -- move index back to "/"
3012
         END IF;
3013
       END LOOP;
3014
 
3015
       IF vcount = 0  THEN
3016
         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 || '"');
3017
       END IF;
3018
 
3019
       IF vcount > 1  THEN
3020
         raise_application_error (-20000, 'Combined use of /trunk, /tags, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
3021
       END IF;
2365 dpurdie 3022
 
3023
 
1374 dpurdie 3024
     END IF;
3025
 
3026
     BEGIN
3027
       -- Get current vcs tag for specified package version
3028
       SELECT pv.src_path, pv.pkg_label, vc.tag as vcs_type
3029
       INTO old_src_path, old_pkg_label, old_vcs_type
3030
       FROM package_versions pv, vcs_type vc
3031
       WHERE pv.pv_id = ipv_id
3032
       AND pv.vcs_type_id = vc.vcs_type_id (+);
3033
 
3034
     EXCEPTION
3035
       WHEN NO_DATA_FOUND THEN
3036
         raise_application_error (-20000, 'Package version not found: ' || ipv_id);
2365 dpurdie 3037
     END;
1374 dpurdie 3038
 
3039
     old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;
3040
     IF (old_pkg_label IS NOT NULL) THEN
3041
       old_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;
3042
     END IF;
3043
 
3044
     -- Create action description
3045
     -- This description will contain the old and new tags.
3046
     -- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.
3047
     -- An example of the action description is below:
3048
     --   OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr
3049
     saction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;
3050
 
3051
     -- Store new vcs details
3052
     UPDATE package_versions SET
3053
       src_path = ssrc_path,
3054
       pkg_label = spkg_label,
3055
       vcs_type_id = ivcs_type_id
3056
     WHERE
3057
       pv_id = ipv_id;
3058
 
3059
     -- Store action in action log so that we can back track and also restore vcs settings if required.
3060
     log_action (ipv_id,'VcsConversion',user_id,saction_desc);
3061
 
3062
   END update_vcs_details;
3063
 
2365 dpurdie 3064
/*-------------------------------------------------------------------------------------------------------
3065
Name:        isSVN
3066
Description: Determine if any of the packages versions are controlled under SVN
3067
			 Intended to be used to prevent users from releasing a package
3068
			 that has been migrated to SVN
3069
 
3070
Paramters:	pkgid:     Package ID
3071
 
3072
Returns:	Number of versions under SVN version control
3073
*/
3074
 
3075
FUNCTION isSVN( pkgid IN NUMBER )
3076
    RETURN NUMBER
3077
    IS
3078
    svncount   NUMBER  := 0;
3079
   BEGIN
3080
        SELECT COUNT(*) INTO svncount FROM PACKAGE_VERSIONS pv WHERE pv.PKG_ID = pkgid AND pv.VCS_TYPE_ID = 23;
3081
        RETURN (svncount);
3082
   END;
3083
 
3084
/*-------------------------------------------------------------------------------------------------------
3085
Name:        isSVNbyName
3086
Description: Determine if any of the packages versions are controlled under SVN
3087
			 Intended to be used to prevent users from releasing a package
3088
			 that has been migrated to SVN
3089
 
3090
Paramters:	pkgname:	Package Name
3091
 
3092
Returns:	Number of versions under SVN version control
3093
*/
3094
 
3095
FUNCTION isSVNbyName( pkgname IN VARCHAR2 )
3096
    RETURN NUMBER
3097
IS
3098
   svncount   NUMBER  := 0;
3099
   BEGIN
3100
        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;
3101
        RETURN (svncount);
3102
   END;
3103
 
3104
   END;
1374 dpurdie 3105
/
3106
--------------------------------------------------------
3107
--  DDL for Package Body PK_BUILDAPI
3108
--------------------------------------------------------
1373 dpurdie 3109
 
3110
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI" 
3111
IS
3112
   /*-------------------------------------------------------------------------------------------------------*/
3113
   PROCEDURE add_product_component (
3114
      npvid           IN   NUMBER,
3115
      sosname         IN   VARCHAR2,
3116
      sorigfilepath   IN   VARCHAR2,
3117
      sfilename       IN   VARCHAR2,
3118
      sdestfilepath   IN   VARCHAR2,
3119
      nbytesize       IN   NUMBER,
3120
      scrccksum       IN   VARCHAR2
3121
   )
3122
   IS
3123
      nosid   NUMBER;
3124
   BEGIN
3125
      /*--------------- Business Rules Here -------------------*/
3126
      -- OS Name Requirements --
3127
      IF (sosname IS NULL)
3128
      THEN
3129
         raise_application_error (-20000, 'OsName cannot be NULL.');
3130
      END IF;
3131
 
3132
      -- File Requirements --
3133
      IF (NOT sfilename IS NULL)
3134
      THEN
3135
         IF (nbytesize IS NULL)
3136
         THEN
3137
            raise_application_error (-20000, 'Byte Size cannot be NULL.');
3138
         ELSIF (scrccksum IS NULL)
3139
         THEN
3140
            raise_application_error (-20000, 'CRC CKSUM cannot be NULL.');
3141
         END IF;
3142
      END IF;
3143
 
3144
      -- Folder Requirements --
3145
      -- No requirements for now.
3146
 
3147
      /*-------------------------------------------------------*/
3148
 
3149
      -- Get OsId
3150
      nosid := get_osid (sosname);
3151
 
3152
      -- Insert component entry
3153
      INSERT INTO product_components
3154
                  (pv_id, os_id, file_path, file_name, destination_path,
3155
                  byte_size, crc_cksum
3156
                  )
3157
         VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,
3158
                  nbytesize, scrccksum
3159
                  );
3160
   EXCEPTION
3161
      WHEN DUP_VAL_ON_INDEX
3162
      THEN
3163
         raise_application_error (-20000,
3164
                                 'Cannot have duplicate product components.'
3165
                                 );
3166
   END;
3167
 
3168
/*-------------------------------------------------------------------------------------------------------*/
3169
   PROCEDURE remove_all_product_components (
3170
      npvid     IN   NUMBER,
3171
      sosname   IN   VARCHAR2
3172
   )
3173
   IS
3174
      nosid   NUMBER;
3175
   BEGIN
3176
/*--------------- Business Rules Here -------------------*/
3177
/*-------------------------------------------------------*/
3178
 
3179
      -- Get OsId
3180
      nosid := get_osid (sosname);
3181
 
3182
      -- Delete component entry
3183
      DELETE FROM product_components pc
3184
            WHERE pc.pv_id = npvid AND pc.os_id = nosid;
3185
   END;
3186
 
3187
/*-------------------------------------------------------------------------------------------------------*/
3188
   FUNCTION get_osid (sosname IN VARCHAR2)
3189
      RETURN NUMBER
3190
   IS
3191
      code   NUMBER;
3192
   BEGIN
3193
      -- Get Platform Code --
3194
      SELECT pf.code
3195
      INTO code
3196
      FROM platforms pf
3197
      WHERE UPPER (pf.NAME) = UPPER (sosname);
3198
 
3199
      RETURN code;
3200
   EXCEPTION
3201
      WHEN NO_DATA_FOUND
3202
      THEN
3203
         raise_application_error
3204
            (-20000,
3205
               'Platform '
3206
            || sosname
3207
            || ' is not valid. It needs to be added to PLATFORMS table in Release Manager.'
3208
            );
3209
         RAISE;
3210
   END;
3211
 
3212
/*-------------------------------------------------------------------------------------------------------
3213
Obsolete - Superseded by update_build_service_info
3214
*/
3215
 
3216
   PROCEDURE update_build_service (
3217
      sdatabaseserver   IN   VARCHAR2,
3218
      swebserver        IN   VARCHAR2,
3219
      smailserver       IN   VARCHAR2,
3220
      smailsender       IN   VARCHAR2,
3221
      sdiskspace        IN   VARCHAR2,
3222
      ssbommanagement   IN   VARCHAR2
3223
   )
3224
   IS
3225
   BEGIN
3226
      UPDATE build_service_config
3227
         SET config = sdatabaseserver
3228
      WHERE service = 'DATABASE SERVER';
3229
 
3230
      UPDATE build_service_config
3231
         SET config = swebserver
3232
      WHERE service = 'WEB SERVER';
3233
 
3234
      UPDATE build_service_config
3235
         SET config = smailserver
3236
      WHERE service = 'MAIL SERVER';
3237
 
3238
      UPDATE build_service_config
3239
         SET config = smailsender
3240
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3241
 
3242
      UPDATE build_service_config
3243
         SET config = sdiskspace
3244
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3245
 
3246
      UPDATE build_service_config
3247
         SET config = ssbommanagement
3248
      WHERE service = 'SBOM MANAGEMENT';
3249
   END;
3250
 
3251
/*-------------------------------------------------------------------------------------------------------*/
3252
   PROCEDURE update_build_service_info (
3253
      sdatabaseserver   IN   VARCHAR2,
3254
      sarchiveserver    IN   VARCHAR2,
3255
      smailserver       IN   VARCHAR2,
3256
      smailsender       IN   VARCHAR2,
3257
      sdiskspace        IN   VARCHAR2,
3258
      ssbommanagement   IN   VARCHAR2
3259
   )
3260
   IS
3261
   BEGIN
3262
      UPDATE build_service_config
3263
         SET config = sdatabaseserver
3264
      WHERE service = 'DATABASE SERVER';
3265
 
3266
      UPDATE build_service_config
3267
         SET config = sarchiveserver
3268
      WHERE service = 'ARCHIVE SERVER';
3269
 
3270
      UPDATE build_service_config
3271
         SET config = smailserver
3272
      WHERE service = 'MAIL SERVER';
3273
 
3274
      UPDATE build_service_config
3275
         SET config = smailsender
3276
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3277
 
3278
      UPDATE build_service_config
3279
         SET config = sdiskspace
3280
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3281
 
3282
      UPDATE build_service_config
3283
         SET config = ssbommanagement
3284
      WHERE service = 'SBOM MANAGEMENT';
3285
   END;
3286
 
3287
 
3288
/*-------------------------------------------------------------------------------------------------------*/
3289
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)
3290
   IS
3291
      gbe_id   NUMBER;
3292
   BEGIN
3293
      -- Get GBE_ID
3294
      SELECT seq_gbe_id.NEXTVAL
3295
      INTO gbe_id
3296
      FROM DUAL;
3297
 
3298
      INSERT INTO gbe_machtype
3299
                  (gbe_id, gbe_value
3300
                  )
3301
         VALUES (gbe_id, sgbevalue
3302
                  );
3303
   END;
3304
 
3305
/*-------------------------------------------------------------------------------------------------------*/
3306
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)
3307
   IS
3308
   BEGIN
3309
      DELETE FROM gbe_machtype
3310
            WHERE gbe_id = ngbe_id;
3311
   END;
3312
 
3313
/*-------------------------------------------------------------------------------------------------------*/
3314
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)
3315
   IS
3316
   BEGIN
3317
      UPDATE gbe_machtype
3318
         SET gbe_value = sgbevalue
3319
      WHERE gbe_id = ngbe_id;
3320
   END;
3321
 
3322
/*-------------------------------------------------------------------------------------------------------*/
3323
  --This function is obsolete.  It was replaced by add_daemon_config. Done for DEVI-046806
3324
   PROCEDURE add_daemon (
3325
      sdaemonhostname   IN   VARCHAR2,
3326
      nrtagid           IN   NUMBER,
3327
      ngbeid            IN   NUMBER,
3328
      sgbebuildfilter   IN   VARCHAR2
3329
   )
3330
   IS
3331
      nrecordnumber   NUMBER;
3332
      nrconid         NUMBER;
3333
   BEGIN
3334
      -- Get RCON_ID
3335
      SELECT seq_rcon_id.NEXTVAL
3336
      INTO nrconid
3337
      FROM DUAL;
3338
 
3339
      SELECT COUNT (*)
3340
      INTO nrecordnumber
3341
      FROM release_config
3342
      WHERE rtag_id = nrtagid;
3343
 
3344
      IF nrecordnumber = 0
3345
      THEN
3346
         INSERT INTO release_config
3347
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3348
                     gbe_id, gbe_buildfilter
3349
                     )
3350
            VALUES (nrconid, nrtagid, sdaemonhostname, 'M',
3351
                     ngbeid, sgbebuildfilter
3352
                     );
3353
      ELSE
3354
         INSERT INTO release_config
3355
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3356
                     gbe_id, gbe_buildfilter
3357
                     )
3358
            VALUES (nrconid, nrtagid, sdaemonhostname, 'S',
3359
                     ngbeid, sgbebuildfilter
3360
                     );
3361
      END IF;
3362
 
3363
      -- A newly configured daemon should initially be paused (DEVI-047277)
3364
      INSERT INTO run_level
3365
                  (rcon_id, pause)
3366
           VALUES (nrconid, 1);
3367
   END;
3368
 
3369
/*-------------------------------------------------------------------------------------------------------*/
3370
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2)
3371
   IS
3372
   BEGIN
3373
      -- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.
3374
      DELETE FROM daemon_action_log
3375
            WHERE rcon_id IN (
3376
                     SELECT *
3377
                     FROM THE
3378
                              (SELECT CAST
3379
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3380
                                          )
3381
                                 FROM DUAL
3382
                              ));
3383
 
3384
      DELETE FROM run_level
3385
            WHERE rcon_id IN (
3386
                     SELECT *
3387
                     FROM THE
3388
                              (SELECT CAST
3389
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3390
                                          )
3391
                                 FROM DUAL
3392
                              ));
3393
 
3394
      DELETE FROM abt_action_log
3395
            WHERE rcon_id IN (
3396
                     SELECT *
3397
                     FROM THE
3398
                              (SELECT CAST
3399
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3400
                                          )
3401
                                 FROM DUAL
3402
                              ));
3403
 
3404
      -- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.
3405
      DELETE FROM release_config
3406
            WHERE rcon_id IN (
3407
                     SELECT *
3408
                     FROM THE
3409
                              (SELECT CAST
3410
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3411
                                          )
3412
                                 FROM DUAL
3413
                              ));
3414
   END;
3415
 
3416
/*-------------------------------------------------------------------------------------------------------*/
3417
  --This function is obsolete.  It was replaced by update_daemon_config for DEVI-046806
3418
   PROCEDURE update_daemon (
3419
      sdaemonhostname   IN   VARCHAR2,
3420
      nrconid           IN   NUMBER,
3421
      ngbeid            IN   NUMBER,
3422
      sgbebuildfilter   IN   VARCHAR2
3423
   )
3424
   IS
3425
   BEGIN
3426
      UPDATE release_config
3427
         SET daemon_hostname = sdaemonhostname,
3428
            gbe_id = ngbeid,
3429
            gbe_buildfilter = sgbebuildfilter
3430
      WHERE rcon_id = nrconid;
3431
   END;
3432
 
3433
/*-------------------------------------------------------------------------------------------------------*/
3434
   PROCEDURE insert_schedule_info (
3435
      dschedulepause     IN   DATE,
3436
      dscheduleresume    IN   DATE,
3437
      crepeat            IN   VARCHAR2,
3438
      cindefinitepause   IN   VARCHAR2
3439
   )
3440
   IS
3441
      nscheduledid   NUMBER;
3442
   BEGIN
3443
      -- Get Next Available Scheduled Id
3444
      SELECT seq_scheduled_id.NEXTVAL
3445
      INTO nscheduledid
3446
      FROM DUAL;
3447
 
3448
      INSERT INTO run_level_schedule
3449
         VALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,
3450
                  cindefinitepause);
3451
   END;
3452
 
3453
/*-------------------------------------------------------------------------------------------------------*/
3454
   PROCEDURE delete_schedule (nscheduleid IN NUMBER)
3455
   IS
3456
   BEGIN
3457
      DELETE FROM run_level_schedule
3458
            WHERE scheduled_id = nscheduleid;
3459
   END;
3460
 
3461
/*-------------------------------------------------------------------------------------------------------*/
3462
   PROCEDURE set_infinite_pause
3463
   IS
3464
      nscheduledid   NUMBER;
3465
   BEGIN
3466
      -- Get Next Available Scheduled Id
3467
      SELECT seq_scheduled_id.NEXTVAL
3468
      INTO nscheduledid
3469
      FROM DUAL;
3470
 
3471
      INSERT INTO run_level_schedule
3472
         VALUES (nscheduledid, NULL, NULL, NULL, 'P');
3473
   END;
3474
 
3475
/*-------------------------------------------------------------------------------------------------------*/
3476
   PROCEDURE set_resume
3477
   IS
3478
   BEGIN
3479
      DELETE FROM run_level_schedule
3480
            WHERE indefinite_pause = 'P';
3481
   END;
3482
 
3483
/*-------------------------------------------------------------------------------------------------------*/
3484
   PROCEDURE delete_out_of_date_schedule
3485
   IS
3486
   BEGIN
3487
      DELETE FROM run_level_schedule
3488
            WHERE scheduled_resume < ora_sysdatetime AND repeat = 0;
3489
   END;
3490
 
3491
/*-------------------------------------------------------------------------------------------------------*/
3492
   PROCEDURE set_daemon_resume (nrconid IN NUMBER)
3493
   IS
3494
   BEGIN
3495
      UPDATE run_level
3496
         SET PAUSE = NULL
3497
      WHERE rcon_id = nrconid;
3498
   END;
3499
 
3500
/*-------------------------------------------------------------------------------------------------------*/
3501
   PROCEDURE set_daemon_pause (nrconid IN NUMBER)
3502
   IS
3503
   BEGIN
3504
      UPDATE run_level
3505
         SET PAUSE = 1
3506
      WHERE rcon_id = nrconid;
3507
   END;
3508
/*-------------------------------------------------------------------------------------------------------*/
3509
   PROCEDURE set_daemon_disable (nrconid NUMBER)
3510
   IS
3511
   BEGIN
3512
      UPDATE run_level
3513
         SET PAUSE = 2
3514
      WHERE rcon_id = nrconid;
3515
   END;
3516
 
3517
/*-------------------------------------------------------------------------------------------------------*/
3518
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)
3519
   IS
3520
   BEGIN
3521
     UPDATE run_level
3522
     SET pause = nstate
3523
     WHERE rcon_id IN
3524
     (SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);
3525
   END;
3526
 
3527
/*-------------------------------------------------------------------------------------------------------*/
3528
   -- inserts a new daemon instruction
3529
   -- This is for use by the Release Manager Website code.
3530
   --
3531
   PROCEDURE insert_daemon_inst
3532
   ( nOp_code IN NUMBER
3533
   , nRtag_id IN NUMBER
3534
   , nPv_id IN NUMBER
3535
   , nSchedDate IN DATE
3536
   , nRepeatSecs IN NUMBER
3537
   , nAddedDate IN DATE
3538
   , nUser_id IN NUMBER
3539
   ) IS
3540
      nInstId   NUMBER;
3541
   BEGIN
3542
      -- Get Next Available Scheduled Id
3543
      SELECT seq_daemon_instruction_id.NEXTVAL
3544
      INTO nInstId
3545
      FROM DUAL;
3546
 
3547
      INSERT INTO Daemon_Instructions
3548
         VALUES (nInstId, nOp_code, nRtag_id,
3549
                  nPv_id, nSchedDate, nRepeatSecs,
3550
                  nAddedDate, nUser_id, '0');
3551
   EXCEPTION
3552
      WHEN DUP_VAL_ON_INDEX
3553
      THEN
3554
         raise_application_error (-20000,
3555
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3556
                                 );
3557
      WHEN OTHERS
3558
      THEN
3559
         raise;
3560
   END insert_daemon_inst;
3561
 
3562
/*-------------------------------------------------------------------------------------------------------*/
3563
   -- Deletes a daemon instruction matching the specified instruction ID
3564
   --
3565
   PROCEDURE del_daemon_inst
3566
   ( nInstId IN NUMBER
3567
   ) IS
3568
 
3569
   BEGIN
3570
      DELETE FROM Daemon_Instructions
3571
      WHERE DAEMON_INSTRUCTIONS_ID = nInstId;
3572
 
3573
   END del_daemon_inst;
3574
 
3575
/*-------------------------------------------------------------------------------------------------------*/
3576
   -- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id
3577
   --
3578
   PROCEDURE del_daemon_inst_by_rtag_pvid(
3579
      nOp_code IN NUMBER,
3580
      nRtag_id IN NUMBER,
3581
      nPv_id IN NUMBER
3582
   ) IS
3583
   BEGIN
3584
      DELETE FROM Daemon_Instructions
3585
      WHERE OP_CODE = nOp_code
3586
      AND RTAG_ID = nRtag_id
3587
      AND PV_ID   = nPv_id;
3588
 
3589
   END del_daemon_inst_by_rtag_pvid;
3590
 
3591
/*-------------------------------------------------------------------------------------------------------*/
3592
   -- Updates a daemon instruction
3593
   -- This is for use by the Release Manager Website code.
3594
   --
3595
   PROCEDURE update_daemon_inst
3596
   ( nInstId IN NUMBER
3597
   , nOp_code IN NUMBER
3598
   , nRtag_id IN NUMBER
3599
   , nPv_id IN NUMBER
3600
   , nSchedDate IN DATE
3601
   , nRepeatSecs IN NUMBER
3602
   , nAddedDate IN DATE
3603
   , nUser_id IN NUMBER
3604
   ) IS
3605
      CURSOR daemon_inst_cur IS
3606
         SELECT *
3607
         FROM daemon_instructions di
3608
         WHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;
3609
 
3610
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3611
 
3612
      exc_inst_removed EXCEPTION;
3613
   BEGIN
3614
      OPEN daemon_inst_cur;
3615
 
3616
      FETCH daemon_inst_cur
3617
      INTO daemon_inst_rec;
3618
 
3619
      IF daemon_inst_cur%FOUND THEN
3620
 
3621
         UPDATE Daemon_Instructions
3622
         SET op_code = nOp_code,
3623
            rtag_id = nRtag_id,
3624
            pv_id   = nPv_id,
3625
            scheduled_datetime = nSchedDate,
3626
            repeat_secs = nRepeatSecs,
3627
            added_datetime = nAddedDate,
3628
            user_id = nUser_id,
3629
            in_progress = '0'
3630
         WHERE daemon_instructions_id = nInstId;
3631
      ELSE
3632
         raise exc_inst_removed;
3633
      END IF;
3634
 
3635
      CLOSE daemon_inst_cur;
3636
   EXCEPTION
3637
      WHEN DUP_VAL_ON_INDEX
3638
      THEN
3639
         raise_application_error (-20000,
3640
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3641
                                 );
3642
      WHEN exc_inst_removed
3643
      THEN
3644
         raise_application_error (-20000,
3645
                                 'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.'
3646
                                 );
3647
      WHEN OTHERS
3648
      THEN
3649
         raise;
3650
   END update_daemon_inst;
3651
 
3652
/*-------------------------------------------------------------------------------------------------------*/
3653
   -- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination
3654
   -- This is for use by the Release Manager Website code.
3655
   --
3656
   FUNCTION daemon_ops_for_rtag_pvid(
3657
      nRtag_id IN NUMBER,
3658
      nPv_id IN NUMBER
3659
   ) RETURN VARCHAR2
3660
   IS
3661
      CURSOR daemon_inst_cur IS
3662
         SELECT di.OP_CODE
3663
         FROM daemon_instructions di
3664
         WHERE di.RTAG_ID = nRtag_id
3665
            AND di.PV_ID = nPv_id;
3666
 
3667
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3668
 
3669
      sRetList VARCHAR2(4000) := '';
3670
 
3671
   BEGIN
3672
      OPEN daemon_inst_cur;
3673
 
3674
      FETCH daemon_inst_cur
3675
      INTO daemon_inst_rec;
3676
 
3677
      WHILE daemon_inst_cur%FOUND
3678
      LOOP
3679
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3680
 
3681
         FETCH daemon_inst_cur
3682
         INTO daemon_inst_rec;
3683
      END LOOP;
3684
 
3685
      CLOSE daemon_inst_cur;
3686
 
3687
      RETURN sRetList;
3688
   END daemon_ops_for_rtag_pvid;
3689
/*-------------------------------------------------------------------------------------------------------*/
3690
   -- Returns a comma-separated list of operation codes found for a given rtag
3691
   -- This is for use by the Release Manager Website code.
3692
   --
3693
   FUNCTION daemon_ops_for_rtag(
3694
      nRtag_id IN NUMBER
3695
   ) RETURN VARCHAR2
3696
   IS
3697
      CURSOR daemon_inst_cur IS
3698
         SELECT di.OP_CODE
3699
         FROM daemon_instructions di
3700
         WHERE di.RTAG_ID = nRtag_id;
3701
 
3702
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3703
 
3704
      sRetList VARCHAR2(4000) := '';
3705
 
3706
   BEGIN
3707
      OPEN daemon_inst_cur;
3708
 
3709
      FETCH daemon_inst_cur
3710
      INTO daemon_inst_rec;
3711
 
3712
      WHILE daemon_inst_cur%FOUND
3713
      LOOP
3714
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3715
 
3716
         FETCH daemon_inst_cur
3717
         INTO daemon_inst_rec;
3718
      END LOOP;
3719
 
3720
      CLOSE daemon_inst_cur;
3721
 
3722
      RETURN sRetList;
3723
   END daemon_ops_for_rtag;
3724
/*-------------------------------------------------------------------------------------------------------*/
3725
   -- Gets a record from the daemon instruction table that can be carried out now and returns the fields
3726
   -- in the record a daemon will need
3727
   -- The Buildtool should use this to find a job to do for a particular release. It should then call
3728
   -- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call
3729
   -- mark_daemon_inst_completed(inst_id) to signal its completion.
3730
   -- Can be called repeatedly to get a full list of all instructions for a release, by passing back in
3731
   -- the instruction ID obtained from the previous call (the 1st call should use 0)
3732
   -- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,
3733
   -- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)
3734
   -- Returns 1 if a record was found, else 0.
3735
   --
3736
   FUNCTION get_daemon_inst(
3737
      nRtag_id IN NUMBER,
3738
      nInst_id IN OUT NUMBER,
3739
      nOp_code IN OUT NUMBER,
3740
      nPv_id OUT NUMBER,
3741
      nUser_id OUT NUMBER,
3742
      nInProgress OUT NUMBER
3743
   ) RETURN NUMBER
3744
   IS
3745
      CURSOR daemon_inst_cur IS
3746
         SELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progress
3747
           FROM daemon_instructions di
3748
          WHERE di.rtag_id = nRtag_id
3749
            AND di.daemon_instructions_id > nInst_id
3750
            AND di.scheduled_datetime <= ora_sysdatetime
3751
            AND ((nOp_code = -1) OR (nOp_code = di.op_code))
3752
            AND rownum <= 1
3753
       ORDER BY di.daemon_instructions_id;
3754
 
3755
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3756
   BEGIN
3757
      OPEN daemon_inst_cur;
3758
 
3759
      FETCH daemon_inst_cur
3760
      INTO daemon_inst_rec;
3761
 
3762
      -- If we found a record, return it.
3763
      IF daemon_inst_cur%FOUND THEN
3764
         nInst_id := daemon_inst_rec.daemon_instructions_id;
3765
         nOp_code := daemon_inst_rec.op_code;
3766
         nPv_id   := daemon_inst_rec.pv_id;
3767
         nUser_id := daemon_inst_rec.user_id;
3768
         IF daemon_inst_rec.in_progress = '1' THEN
3769
            nInProgress := 1;
3770
         ELSE
3771
            nInProgress := 0;
3772
         END IF;
3773
         CLOSE daemon_inst_cur;
3774
         RETURN 1;
3775
      END IF;
3776
 
3777
      CLOSE daemon_inst_cur;
3778
      RETURN 0;
3779
 
3780
   END get_daemon_inst;
3781
/*-------------------------------------------------------------------------------------------------------*/
3782
   -- Marks a daemon instruction as being processed by a daemon
3783
   -- The Buildtool should use this before it embarks on the work the instruction commands
3784
   --
3785
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )
3786
   IS
3787
   BEGIN
3788
      UPDATE Daemon_Instructions
3789
      SET in_progress = '1'
3790
      WHERE daemon_instructions_id = nInstId;
3791
 
3792
   END mark_daemon_inst_in_progress;
3793
 
3794
/*-------------------------------------------------------------------------------------------------------*/
3795
   -- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored
3796
   -- procedure in order to either delete the instruction or update it in the case where it is a repeating
3797
   -- instruction.
3798
   --
3799
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )
3800
   IS
3801
      repSecs NUMBER;
3802
      schedDate  DATE;
3803
 
3804
      CURSOR daemon_inst_cur IS
3805
         SELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDate
3806
         FROM daemon_instructions di
3807
         WHERE di.daemon_instructions_id = nInstId;
3808
 
3809
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3810
   BEGIN
3811
      OPEN daemon_inst_cur;
3812
 
3813
      FETCH daemon_inst_cur
3814
      INTO daemon_inst_rec;
3815
 
3816
      IF daemon_inst_cur%FOUND THEN
3817
 
3818
         -- if instruction repeats daily, add 1 day to the scheduled time and update the record
3819
         IF daemon_inst_rec.repSecs = 86400 THEN
3820
            UPDATE Daemon_Instructions
3821
               SET scheduled_datetime = daemon_inst_rec.schedDate + 1,
3822
                  in_progress = '0'
3823
            WHERE daemon_instructions_id = nInstId;
3824
         ELSE
3825
            -- Delete the daemon instruction, we are done with it
3826
            del_daemon_inst(nInstId);
3827
         END IF;
3828
      END IF;
3829
 
3830
      CLOSE daemon_inst_cur;
3831
 
3832
   EXCEPTION
3833
      WHEN OTHERS
3834
      THEN
3835
         raise;
3836
 
3837
   END mark_daemon_inst_completed;
3838
/*-------------------------------------------------------------------------------------------------------*/
3839
   -- This function deletes any old daemon instruction that appears stranded due to a problem that might
3840
   -- have occured during buildtool operation such as might occur if the buildtool or the machine it was
3841
   -- hosted on came down whilst it was processing a daemon instruction.
3842
   PROCEDURE cleanup_stranded_daemon_insts
3843
   IS
3844
   BEGIN
3845
      -- delete records at least two days old
3846
      DELETE FROM daemon_instructions di
3847
      WHERE  (di.scheduled_datetime + 5) <= ora_sysdatetime;
3848
 
3849
   END cleanup_stranded_daemon_insts;
3850
/*-------------------------------------------------------------------------------------------------------*/
3851
  --This function supersedes function, add_daemon. Done for DEVI-046806
3852
   PROCEDURE add_daemon_config (
3853
      nrtagid           IN   NUMBER,
3854
      nbmcon_id         IN   NUMBER,
3855
      sdaemon_mode      IN   VARCHAR2,
3856
      sgbebuildfilter   IN   VARCHAR2
3857
   )
3858
   IS
3859
      nrecordnumber   NUMBER;
3860
      nrconid         NUMBER;
3861
      sdaemonhostname VARCHAR2(50);
3862
      ngbeid         NUMBER;
3863
   BEGIN
3864
      -- Get RCON_ID
3865
      SELECT seq_rcon_id.NEXTVAL
3866
      INTO nrconid
3867
      FROM DUAL;
3868
 
3869
      SELECT COUNT (*)
3870
      INTO nrecordnumber
3871
      FROM release_config
3872
      WHERE rtag_id = nrtagid;
3873
 
3874
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3875
      FROM build_machine_config
3876
      WHERE bmcon_id = nbmcon_id;
3877
 
3878
      INSERT INTO release_config
3879
             (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3880
                gbe_id, gbe_buildfilter)
3881
      VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,
3882
                ngbeid, sgbebuildfilter);
3883
 
3884
      -- A newly configured daemon should initially be paused (DEVI-047277)
3885
      INSERT INTO run_level
3886
                  (rcon_id, pause)
3887
           VALUES (nrconid, 2);
3888
 
3889
   END;
3890
 
3891
/*-------------------------------------------------------------------------------------------------------*/
3892
  --This function supersedes function, update_daemon. Done for DEVI-046806
3893
   PROCEDURE update_daemon_config (
3894
      nrconid           IN   NUMBER,
3895
      nbmcon_id         IN   NUMBER,
3896
      sdaemon_mode      IN   VARCHAR2,
3897
      sgbebuildfilter   IN   VARCHAR2
3898
   )
3899
   IS
3900
      sdaemonhostname VARCHAR2(50);
3901
      ngbeid         NUMBER;
3902
   BEGIN
3903
 
3904
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3905
      FROM build_machine_config
3906
      WHERE bmcon_id = nbmcon_id;
3907
 
3908
      UPDATE release_config
3909
         SET daemon_hostname = sdaemonhostname,
3910
            gbe_id = ngbeid,
3911
            daemon_mode = sdaemon_mode,
3912
            gbe_buildfilter = sgbebuildfilter
3913
      WHERE rcon_id = nrconid;
3914
   END;
3915
 
3916
 
3917
/*-------------------------------------------------------------------------------------------------------*/
3918
   PROCEDURE add_build_machine (
3919
      sdisplay_name          IN   VARCHAR2,
3920
      smachine_hostname      IN   VARCHAR2,
3921
      ngbeid                 IN   NUMBER,
3922
      sdescription           IN   VARCHAR2
3923
   )
3924
   IS
3925
      nrecordnumber   NUMBER;
3926
      nbmcon_id       NUMBER;
3927
   BEGIN
3928
      -- Get BMCON_ID
3929
      SELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;
3930
 
3931
      INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)
3932
            VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);
3933
 
3934
   EXCEPTION
3935
      WHEN DUP_VAL_ON_INDEX
3936
      THEN
3937
         raise_application_error (-20000,
3938
                                 'Cannot have duplicate machines.'
3939
                                 );
3940
 
3941
   END;
3942
 
3943
/*-------------------------------------------------------------------------------------------------------*/
3944
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)
3945
   IS
3946
   BEGIN
3947
      DELETE FROM build_machine_config
3948
            WHERE bmcon_id IN (
3949
                     SELECT * FROM THE
3950
                              (SELECT CAST
3951
                                          (in_list_number (sbmcon_id_list) AS relmgr_number_tab_t
3952
                                          )
3953
                                 FROM DUAL
3954
                              ));
3955
   END;
3956
 
3957
 
3958
/*-------------------------------------------------------------------------------------------------------*/
3959
   PROCEDURE update_build_machine (
3960
      nbmcon_id              IN   NUMBER,
3961
      sdisplay_name          IN   VARCHAR2,
3962
      smachine_hostname      IN   VARCHAR2,
3963
      ngbeid                 IN   NUMBER,
3964
      sdescription           IN   VARCHAR2
3965
   )
3966
   IS
3967
   BEGIN
3968
      UPDATE build_machine_config
3969
         SET display_name = sdisplay_name,
3970
             machine_hostname = smachine_hostname,
3971
             gbe_id = ngbeid,
3972
             description = sdescription
3973
      WHERE bmcon_id = nbmcon_id;
3974
   EXCEPTION
3975
      WHEN DUP_VAL_ON_INDEX
3976
      THEN
3977
         raise_application_error (-20000,
3978
                                 'Cannot have duplicate machines.'
3979
                                 );
3980
   END;
3981
END pk_buildapi;
1374 dpurdie 3982
/
3983
--------------------------------------------------------
3984
--  DDL for Package Body PK_PACKAGE
3985
--------------------------------------------------------
1373 dpurdie 3986
 
3987
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE" 
3988
IS
3989
   /*-------------------------------------------------------------------------------------------------------*/
3990
   PROCEDURE new_version (
3991
      nlastpvid                   IN       NUMBER,
3992
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
3993
      cbuildtype                  IN       CHAR,
3994
      nsettopvid                  IN       NUMBER DEFAULT NULL,
3995
      nrtagid                     IN       NUMBER,
3996
      nuserid                     IN       NUMBER,
3997
      enumissues_state_imported   IN       NUMBER,
3998
      returnpvid                  OUT      NUMBER
3999
   )
4000
   IS
4001
      origpkg_id                  package_versions.pkg_id%TYPE;
4002
      origdlocked                 package_versions.dlocked%TYPE;
4003
      ssv_mm                      package_versions.v_mm%TYPE;
4004
      ssv_nmm                     package_versions.v_nmm%TYPE;
4005
      ssv_ext                     package_versions.v_ext%TYPE;
4006
      spackageversion             VARCHAR2 (4000);
4007
      nissuestypes                NUMBER;
4008
      nviewid                     NUMBER;
4009
      reccount                    NUMBER;
4010
      isreleased                  package_versions.dlocked%TYPE := 'N';
4011
      slabel                      VARCHAR2 (4000)               := NULL;
4012
 
4013
      CURSOR package_versions_cur
4014
      IS
4015
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
4016
           FROM package_versions pv
4017
          WHERE pv.pkg_version = snewpkgversion
4018
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
4019
                                         FROM package_versions origpv
4020
                                        WHERE origpv.pv_id = nlastpvid);
4021
 
4022
      package_versions_rec package_versions_cur%ROWTYPE;
4023
 
4024
      CURSOR clone_package_versions_cur
4025
      IS
4026
         SELECT DISTINCT pkg_id, dlocked
4027
                    FROM package_versions
4028
                   WHERE pv_id = nlastpvid;
4029
 
4030
      clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
4031
   BEGIN
4032
      spackageversion := snewpkgversion;
4033
 
4034
      IF nsettopvid IS NULL
4035
      THEN
4036
         -- SetToPv_id is not supplied, hence proceed.
4037
 
4038
         /* ---------------------------------------------------- */
4039
         /* Find id package_version exists                       */
4040
         /* ---------------------------------------------------- */
4041
         OPEN package_versions_cur;
4042
 
4043
         FETCH package_versions_cur
4044
          INTO package_versions_rec;
4045
 
4046
         IF package_versions_cur%NOTFOUND
4047
         THEN
4048
            ---  Create brand new package ---
4049
            SELECT seq_pv_id.NEXTVAL
4050
              INTO returnpvid
4051
              FROM DUAL;
4052
 
4053
            -- Split Version to get extention + other
4054
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
4055
 
4056
            -- Get previous package to clone from
4057
            OPEN clone_package_versions_cur;
4058
 
4059
            FETCH clone_package_versions_cur
4060
             INTO clone_package_versions_rec;
4061
 
4062
            origpkg_id := clone_package_versions_rec.pkg_id;
4063
            origdlocked := clone_package_versions_rec.dlocked;
4064
 
4065
            CLOSE clone_package_versions_cur;
4066
 
4067
            -- Automated built config
4068
            IF (cbuildtype = 'A')
4069
            THEN
4070
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
4071
               -- Make sure that version is still unique
4072
            END IF;
4073
 
4074
            -- Clone Package Version Details --
4075
            INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,
4076
                                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
4077
                                         v_ext, src_path, pv_description, pv_overview,
4078
                                         last_pv_id, owner_id, is_deployable,
4079
                                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
4080
                 SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
4081
                        spackageversion AS pkg_version, 'N' AS dlocked,
4082
                        ora_sysdate AS created_stamp, nuserid AS creator_id,
4083
                        ora_sysdatetime AS modified_stamp,
4084
                        nuserid AS modifier_id, ssv_mm AS v_mm,
4085
                        ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
4086
                        pv.pv_description, pv.pv_overview,
4087
                        nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
4088
                        pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
4089
                   FROM package_versions pv
4090
                  WHERE pv.pv_id = nlastpvid;
4091
 
4092
            -- Set Issues Type for cloning ---
4093
            IF origdlocked = 'Y'
4094
            THEN
4095
               nissuestypes := enumissues_state_imported;
4096
            ELSE
4097
               nissuestypes := NULL;
4098
            END IF;
4099
 
4100
            -- Update Label for automated built
4101
            IF (cbuildtype = 'A')
4102
            THEN
4103
               slabel := get_automated_label (returnpvid);
4104
 
4105
               UPDATE package_versions pv
4106
                  SET pv.pkg_label = slabel
4107
                WHERE pv.pv_id = returnpvid;
4108
            END IF;
4109
 
4110
            basic_clone (nlastpvid,
4111
                         returnpvid,
4112
                         nrtagid,
4113
                         nuserid,
4114
                         origpkg_id,
4115
                         nissuestypes
4116
                        );
4117
         ELSE
4118
            --- Package already exists, hence reuse ---
4119
            returnpvid := package_versions_rec.pv_id;
4120
            isreleased := package_versions_rec.dlocked;
4121
         END IF;
4122
 
4123
         CLOSE package_versions_cur;
4124
      ELSE
4125
         returnpvid := nsettopvid;
4126
      END IF;
4127
   END new_version;
4128
 
4129
/*-------------------------------------------------------------------------------------------------------*/
4130
   PROCEDURE change_state (
4131
      pvid       IN   NUMBER,
4132
      newstate   IN   package_versions.dlocked%TYPE,
4133
      userid     IN   NUMBER
4134
   )
4135
   IS
4136
   BEGIN
4137
      -- Set package in Released mode
4138
      UPDATE package_versions pv
4139
         SET pv.dlocked = newstate,
4140
             pv.modified_stamp = ora_sysdatetime,
4141
             pv.modifier_id = userid
4142
       WHERE pv.pv_id = pvid;
4143
 
4144
      -- Log action --
4145
      IF newstate = 'Y'
4146
      THEN
4147
         -- RELEASED --
4148
         log_action (pvid,
4149
                     'makeofficial',
4150
                     userid,
4151
                     'Package state change to: Released'
4152
                    );
4153
      ELSIF newstate = 'N'
4154
      THEN
4155
         -- UNLOCKED --
4156
         log_action (pvid,
4157
                     'makeunofficial',
4158
                     userid,
4159
                     'Package state change to: Ulocked'
4160
                    );
4161
      ELSIF newstate = 'P'
4162
      THEN
4163
         -- PENDING APPROVAL --
4164
         log_action (pvid,
4165
                     'add_to_planned',
4166
                     userid,
4167
                     'Package state change to: Pending Approval'
4168
                    );
4169
      ELSIF newstate = 'R'
4170
      THEN
4171
         -- REJECTED --
4172
         log_action (pvid,
4173
                     'reject_package',
4174
                     userid,
4175
                     'Package state change to: Rejected'
4176
                    );
4177
      ELSIF newstate = 'A'
4178
      THEN
4179
         -- APPROVED --
4180
         log_action (pvid,
4181
                     'approve_package',
4182
                     userid,
4183
                     'Package state change to: Approved'
4184
                    );
4185
      END IF;
4186
   END;
4187
 
4188
/*-------------------------------------------------------------------------------------------------------*/
4189
   PROCEDURE destroy_package (
4190
      pvid               IN       NUMBER,
4191
      overridewarnings   IN       CHAR DEFAULT 'N',
4192
      problemstring      OUT      VARCHAR2
4193
   )
4194
   IS
4195
      LOCKED     CHAR;
4196
      pkgid      NUMBER;
4197
      ROWCOUNT   NUMBER;
4198
   BEGIN
4199
      /*
4200
      || This will destroy all package details from database.
4201
      || It will only be used to remove unwanted work in progress packages,
4202
      || or mestaken versions
4203
      */
4204
 
4205
      /*--------------- Business Rules Here -------------------*/
4206
      problemstring := NULL;
4207
 
4208
      IF overridewarnings = 'N'
4209
      THEN
4210
         -- Package must not be official
4211
         SELECT pv.dlocked
4212
           INTO LOCKED
4213
           FROM package_versions pv
4214
          WHERE pv.pv_id = pvid;
4215
 
4216
         IF LOCKED = 'Y'
4217
         THEN
4218
            problemstring :=
4219
                  problemstring
4220
               || '- Package is locked and released.'
4221
               || UTL_TCP.crlf;
4222
         END IF;
4223
 
4224
         -- Cannot remove if used in BOMs
4225
         SELECT COUNT (osc.prod_id)
4226
           INTO ROWCOUNT
4227
           FROM deployment_manager.os_contents osc
4228
          WHERE osc.prod_id = pvid;
4229
 
4230
         IF ROWCOUNT > 0
4231
         THEN
4232
            problemstring :=
4233
                  problemstring
4234
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
4235
               || UTL_TCP.crlf;
4236
         END IF;
4237
 
4238
         -- Cannot remove if Referenced as build dependency
4239
         SELECT COUNT (dep.pv_id)
4240
           INTO ROWCOUNT
4241
           FROM package_dependencies dep
4242
          WHERE dep.dpv_id = pvid;
4243
 
4244
         IF ROWCOUNT > 0
4245
         THEN
4246
            problemstring :=
4247
                  problemstring
4248
               || '- Package is referenced by other package as build dependency.'
4249
               || UTL_TCP.crlf;
4250
         END IF;
4251
 
4252
         -- Cannot remove if Referenced as runtime dependency
4253
         SELECT COUNT (rd.pv_id)
4254
           INTO ROWCOUNT
4255
           FROM runtime_dependencies rd
4256
          WHERE rd.rtd_id = pvid;
4257
 
4258
         IF ROWCOUNT > 0
4259
         THEN
4260
            problemstring :=
4261
                  problemstring
4262
               || '- Package is referenced by other package as runtime dependency.'
4263
               || UTL_TCP.crlf;
4264
         END IF;
4265
 
4266
         -- Cannot remove if Referenced as patch
4267
         SELECT COUNT (pp.pv_id)
4268
           INTO ROWCOUNT
4269
           FROM package_patches pp
4270
          WHERE pp.patch_id = pvid;
4271
 
4272
         IF ROWCOUNT > 0
4273
         THEN
4274
            problemstring :=
4275
                  problemstring
4276
               || '- Package is used as patch by other package.'
4277
               || UTL_TCP.crlf;
4278
         END IF;
4279
      END IF;
4280
 
4281
/*-------------------------------------------------------*/
4282
      IF (problemstring IS NULL)
4283
      THEN
4284
         --- Remove From Work in Progress
4285
         DELETE FROM work_in_progress wip
4286
               WHERE wip.pv_id = pvid;
4287
 
4288
         --- Remove From Pending
4289
         DELETE FROM planned pl
4290
               WHERE pl.pv_id = pvid;
4291
 
4292
         --- Remove From Released area
4293
         DELETE FROM release_content rc
4294
               WHERE rc.pv_id = pvid;
4295
 
4296
         ---Remove From Package Processes
4297
         DELETE FROM package_processes pp
4298
               WHERE pp.pv_id = pvid;
4299
 
4300
         --- Remove Dependencies
4301
         DELETE FROM package_dependencies dep
4302
               WHERE dep.pv_id = pvid;
4303
 
4304
         DELETE FROM package_dependencies dep
4305
               WHERE dep.dpv_id = pvid;
4306
 
4307
         --- Remove Runtime dependencies
4308
         DELETE FROM runtime_dependencies rtd
4309
               WHERE rtd.pv_id = pvid;
4310
 
4311
         DELETE FROM runtime_dependencies rtd
4312
               WHERE rtd.rtd_id = pvid;
4313
 
4314
         --- Remove components
4315
         DELETE FROM product_components pc
4316
               WHERE pc.pv_id = pvid;
4317
 
4318
         DELETE FROM release_components rc
4319
               WHERE rc.pv_id = pvid;
4320
 
4321
         --- Remove From Notification History
4322
         DELETE FROM notification_history nh
4323
               WHERE nh.pv_id = pvid;
4324
 
4325
         --- Remove From Ignore Warnings
4326
         DELETE FROM ignore_warnings iw
4327
               WHERE iw.pv_id = pvid;
4328
 
4329
         --- Remove From Additional Notes
4330
         DELETE FROM additional_notes an
4331
               WHERE an.pv_id = pvid;
4332
 
4333
         --- Remove From CQ Issues
4334
         DELETE FROM cq_issues cq
4335
               WHERE cq.pv_id = pvid;
4336
 
4337
         --- Remove from Package Patches
4338
         DELETE FROM package_patches pp
4339
               WHERE pp.pv_id = pvid;
4340
 
4341
         DELETE FROM package_patches pp
4342
               WHERE pp.patch_id = pvid;
4343
 
4344
         --- Remove From Package Documents
4345
         DELETE FROM package_documents pd
4346
               WHERE pd.pv_id = pvid;
4347
 
4348
         --- Remove from Code Review
4349
         DELETE FROM code_reviews cr
4350
               WHERE cr.pv_id = pvid;
4351
 
4352
         --- Remove from Code Review URL
4353
         DELETE FROM code_review_url cru
4354
               WHERE cru.pv_id = pvid;
4355
 
4356
         --- Remove from Unit Tests
4357
         DELETE FROM unit_tests ut
4358
               WHERE ut.pv_id = pvid;
4359
 
4360
         --- Remove from Package BuildEnv
4361
         DELETE FROM package_build_env pbe
4362
               WHERE pbe.pv_id = pvid;
4363
 
4364
         --- Remove from Package Build Info
4365
         DELETE FROM package_build_info pbi
4366
               WHERE pbi.pv_id = pvid;
4367
 
4368
         --- Remove from Build Order
4369
         DELETE FROM build_order bo
4370
               WHERE bo.pv_id = pvid;
4371
 
4372
         --- Remove from Licencing
4373
         PK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );
4374
 
4375
         --- Remove from Note Manager
4376
         DELETE FROM note_manager nm
4377
               WHERE nm.nid = pvid;
4378
 
4379
         --- Remove from Action log
4380
         DELETE FROM action_log al
4381
               WHERE al.pv_id = pvid;
4382
 
4383
         --- Remove from Do Not Ripple
4384
         DELETE FROM DO_NOT_RIPPLE dnr
4385
               WHERE dnr.PV_ID = pvid;
4386
 
4387
         --- Remove from Advisory Ripple
4388
         DELETE FROM ADVISORY_RIPPLE ar
4389
               WHERE ar.PV_ID = pvid;
4390
 
4391
         --- Remove from Jira Issues
4392
         DELETE FROM JIRA_ISSUES jira
4393
               WHERE jira.PV_ID = pvid;
4394
 
4395
         --- Remove from Package Metrics
4396
         DELETE FROM package_metrics pm
4397
              WHERE pm.pv_id = pvid;
4398
 
4399
         -- Delete from Pegged Versions
4400
         DELETE FROM pegged_versions pegv
4401
              WHERE pegv.pv_id = pvid;
4402
 
4403
         --- Finally Remove From Package Versions
4404
         --- Get Package name
4405
         SELECT pv.pkg_id
4406
           INTO pkgid
4407
           FROM package_versions pv
4408
          WHERE pv.pv_id = pvid;
4409
 
4410
         DELETE FROM package_versions pv
4411
               WHERE pv.pv_id = pvid;
4412
 
4413
         --- Remove package name if not used any more
4414
         SELECT COUNT (pv.pv_id)
4415
           INTO ROWCOUNT
4416
           FROM package_versions pv
4417
          WHERE pv.pkg_id = pkgid;
4418
 
4419
         IF ROWCOUNT < 1
4420
         THEN
4421
            DELETE FROM PACKAGES pkg
4422
                  WHERE pkg.pkg_id = pkgid;
4423
         END IF;
4424
      END IF;
4425
   END;
4426
 
4427
/*-------------------------------------------------------------------------------------------------------*/
4428
   PROCEDURE new_patch (
4429
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
4430
      nparentpvid        IN       NUMBER,
4431
      spatchidlist       IN       VARCHAR2,
4432
      nuserid            IN       NUMBER,
4433
      returnpatchid      OUT      NUMBER
4434
   )
4435
   IS
4436
      patchpv_id           NUMBER;
4437
      parpkg_id            NUMBER;
4438
      lastinstallorder     NUMBER;
4439
      ispatchdlocked       package_versions.dlocked%TYPE;
4440
      ssv_mm               package_versions.v_mm%TYPE;
4441
      ssv_nmm              package_versions.v_nmm%TYPE;
4442
      ssv_ext              package_versions.v_ext%TYPE;
4443
      opatchdepcollector   relmgr_number_tab_t  := relmgr_number_tab_t ();
4444
 
4445
      CURSOR parent_cur
4446
      IS
4447
         SELECT pv.*, pkg.pkg_name
4448
           FROM package_versions pv, PACKAGES pkg
4449
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
4450
 
4451
      parent_rec parent_cur%ROWTYPE;
4452
 
4453
      CURSOR patch_cur
4454
      IS
4455
         SELECT pv.*, pg.pkg_name
4456
           FROM package_versions pv, PACKAGES pg
4457
          WHERE pv.pkg_id = parpkg_id
4458
            AND pv.pkg_version = snewpatchversion
4459
            AND pv.pkg_id = pg.pkg_id;
4460
 
4461
      patch_rec  patch_cur%ROWTYPE;
4462
 
4463
      CURSOR releases_cur
4464
      IS
4465
         SELECT rc.pv_id
4466
           FROM release_content rc
4467
          WHERE rc.pv_id = patch_rec.pv_id;
4468
 
4469
      releases_rec releases_cur%ROWTYPE;
4470
   BEGIN
4471
      -- Get Last Install Order
4472
      SELECT COUNT (*)
4473
        INTO lastinstallorder
4474
        FROM package_patches pp
4475
       WHERE pp.pv_id = nparentpvid;
4476
 
4477
      -- Get parent details
4478
      OPEN parent_cur;
4479
 
4480
      FETCH parent_cur
4481
       INTO parent_rec;
4482
 
4483
      parpkg_id := parent_rec.pkg_id;
4484
 
4485
      -- Find if patch exists in database
4486
      OPEN patch_cur;
4487
 
4488
      FETCH patch_cur
4489
       INTO patch_rec;
4490
 
4491
      -- Parent must be official
4492
      IF parent_rec.dlocked = 'Y'
4493
      THEN
4494
         IF patch_cur%NOTFOUND
4495
         THEN
4496
            ispatchdlocked := 'N';
4497
 
4498
            -- Create new patch version --
4499
            SELECT seq_pv_id.NEXTVAL
4500
              INTO patchpv_id
4501
              FROM DUAL;
4502
 
4503
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
4504
 
4505
            INSERT INTO package_versions
4506
                        (pv_id, pkg_id, pkg_version,
4507
                         dlocked, created_stamp, creator_id,
4508
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
4509
                         src_path,
4510
                         pv_description,
4511
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
4512
                         is_autobuildable, ripple_field
4513
                        )
4514
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
4515
                         ispatchdlocked, ora_sysdate, nuserid,
4516
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
4517
                         parent_rec.src_path,
4518
                            'This is a patch to '
4519
                         || parent_rec.pkg_name
4520
                         || ' '
4521
                         || parent_rec.pkg_version,
4522
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
4523
                        );
4524
 
4525
            INSERT INTO package_patches
4526
                        (pv_id, patch_id, install_order)
4527
                (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4528
                        lastinstallorder + 1 AS install_order
4529
                   FROM package_versions pv
4530
                  WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4531
 
4532
            /* LOG ACTION */
4533
            log_action (patchpv_id,
4534
                        'new_version',
4535
                        nuserid,
4536
                        'Patch version created: ' || snewpatchversion
4537
                       );
4538
            log_action (nparentpvid,
4539
                        'patch_add',
4540
                        nuserid,
4541
                        'New patch created and attached: ' || snewpatchversion
4542
                       );
4543
         ELSE
4544
            patchpv_id := patch_rec.pv_id;
4545
            ispatchdlocked := patch_rec.dlocked;
4546
 
4547
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
4548
            OPEN releases_cur;
4549
 
4550
            FETCH releases_cur
4551
             INTO releases_rec;
4552
 
4553
            IF releases_cur%NOTFOUND
4554
            THEN
4555
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
4556
               UPDATE package_versions
4557
                  SET is_patch = 'Y'
4558
                WHERE pv_id = patchpv_id;
4559
 
4560
               INSERT INTO package_patches
4561
                           (pv_id, patch_id, install_order)
4562
                   (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4563
                           lastinstallorder + 1 AS install_order
4564
                      FROM package_versions pv
4565
                     WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4566
            END IF;
4567
 
4568
            CLOSE releases_cur;
4569
 
4570
            /* LOG ACTION */
4571
            log_action (nparentpvid,
4572
                        'patch_add',
4573
                        nuserid,
4574
                           'Patch version was found and attached: '
4575
                        || snewpatchversion
4576
                       );
4577
         END IF;
4578
      END IF;
4579
 
4580
      /* Create Patch Dependencies */
4581
      opatchdepcollector := in_list_number (spatchidlist);
4582
 
4583
      -- Make sure patch is unofficial before altering its dependencies
4584
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
4585
      THEN
4586
         -- Delete Existing Dependencies
4587
         DELETE FROM package_dependencies dep
4588
               WHERE dep.pv_id = patchpv_id;
4589
 
4590
         -- Insert new dependencies
4591
         INSERT INTO package_dependencies
4592
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
4593
              SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
4594
                     parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
4595
                     'L' AS build_type
4596
                FROM package_versions pv
4597
               WHERE pv.pv_id IN (
4598
                      SELECT *
4599
                        FROM TABLE
4600
                                (CAST
4601
                                    (opatchdepcollector AS relmgr_number_tab_t)
4602
                                ));
4603
      END IF;
4604
 
4605
      -- Return patch_id
4606
      returnpatchid := patchpv_id;
4607
 
4608
      CLOSE parent_cur;
4609
 
4610
      CLOSE patch_cur;
4611
   EXCEPTION
4612
      WHEN DUP_VAL_ON_INDEX
4613
      THEN
4614
         raise_application_error (-20000,
4615
                                     'Patch version '
4616
                                  || snewpatchversion
4617
                                  || ' already exist.'
4618
                                 );
4619
   END;
4620
 
4621
/*-------------------------------------------------------------------------------------------------------*/
4622
   PROCEDURE obsolete_patch (
4623
      patchid            IN   NUMBER,
4624
      isobsolete         IN   CHAR,
4625
      obsoletecomments   IN   VARCHAR2,
4626
      userid             IN   NUMBER
4627
   )
4628
   IS
4629
   BEGIN
4630
      -- Update patch
4631
      UPDATE package_versions pv
4632
         SET pv.is_obsolete = isobsolete,
4633
             pv.obsolete_comments = obsoletecomments
4634
       WHERE pv.pv_id = patchid;
4635
 
4636
      /*
4637
      -- Update patch children
4638
      UPDATE PACKAGE_VERSIONS pv SET
4639
      pv.IS_OBSOLETE = IsObsolete,
4640
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4641
      WHERE pv.PV_ID IN (
4642
                     SELECT DISTINCT dep.DPV_ID
4643
                       FROM PACKAGE_DEPENDENCIES dep
4644
                      WHERE dep.PV_ID = PatchId
4645
                     );
4646
 
4647
 
4648
      -- Update patch parent
4649
      UPDATE PACKAGE_VERSIONS pv SET
4650
      pv.IS_OBSOLETE = IsObsolete,
4651
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4652
      WHERE pv.PV_ID IN (
4653
                     SELECT DISTINCT dep.PV_ID
4654
                       FROM PACKAGE_DEPENDENCIES dep
4655
                      WHERE dep.DPV_ID = PatchId
4656
                     );
4657
 
4658
      */
4659
 
4660
      /* LOG ACTION */
4661
      IF isobsolete IS NOT NULL
4662
      THEN
4663
         log_action (patchid,
4664
                     'patch_obsolete',
4665
                     userid,
4666
                     'Obsolete patch. ' || obsoletecomments
4667
                    );
4668
      ELSE
4669
         log_action (patchid,
4670
                     'patch_obsolete',
4671
                     userid,
4672
                     'Undo patch obsolete.'
4673
                    );
4674
      END IF;
4675
   END;
4676
 
4677
/*-------------------------------------------------------------------------------------------------------*/
4678
   PROCEDURE obsolete_patches (
4679
      spatchidlist       IN   VARCHAR2,
4680
      isobsolete         IN   CHAR,
4681
      obsoletecomments   IN   VARCHAR2,
4682
      userid             IN   NUMBER
4683
   )
4684
   IS
4685
   BEGIN
4686
      /*--------------- Business Rules Here -------------------*/
4687
      IF spatchidlist IS NULL
4688
      THEN
4689
         raise_application_error (-20000,
4690
                                  'Please select one or more Patches.'
4691
                                 );
4692
      END IF;
4693
 
4694
/*-------------------------------------------------------*/
4695
 
4696
      -- Update patch
4697
      UPDATE package_versions pv
4698
         SET pv.is_obsolete = isobsolete,
4699
             pv.obsolete_comments = obsoletecomments
4700
       WHERE pv.pv_id IN (
4701
                SELECT *
4702
                  FROM THE
4703
                          (SELECT CAST
4704
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
4705
                                     )
4706
                             FROM DUAL
4707
                          ));
4708
      /*
4709
      -- Update patch children
4710
      UPDATE PACKAGE_VERSIONS pv SET
4711
      pv.IS_OBSOLETE = IsObsolete,
4712
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4713
      WHERE pv.PV_ID IN (
4714
                     SELECT DISTINCT dep.DPV_ID
4715
                       FROM PACKAGE_DEPENDENCIES dep
4716
                      WHERE dep.PV_ID = PatchId
4717
                     );
4718
 
4719
 
4720
      -- Update patch parent
4721
      UPDATE PACKAGE_VERSIONS pv SET
4722
      pv.IS_OBSOLETE = IsObsolete,
4723
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4724
      WHERE pv.PV_ID IN (
4725
                     SELECT DISTINCT dep.PV_ID
4726
                       FROM PACKAGE_DEPENDENCIES dep
4727
                      WHERE dep.DPV_ID = PatchId
4728
                     );
4729
 
4730
      */
4731
 
4732
      /* LOG ACTION
4733
      IF IsObsolete IS NOT NULL THEN
4734
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4735
                     'Obsolete patch. '|| ObsoleteComments );
4736
      ELSE
4737
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4738
                     'Undo patch obsolete.' );
4739
      END IF;  */
4740
   END;
4741
 
4742
/*-------------------------------------------------------------------------------------------------------*/
4743
   PROCEDURE add_process (
4744
      nprocid         IN   processes.proc_id%TYPE,
4745
      shealthtag      IN   processes.proc_name%TYPE,
4746
      sprocdesc       IN   processes.proc_description%TYPE,
4747
      scmdinterface   IN   processes.run_as%TYPE,
4748
      spkgowner       IN   processes.pkg_owner%TYPE,
4749
      sisinterface    IN   processes.is_interface%TYPE,
4750
      npvid           IN   package_processes.pv_id%TYPE,
4751
      nuserid         IN   NUMBER
4752
   )
4753
   IS
4754
      pkgname   VARCHAR2 (100);
4755
 
4756
   BEGIN
4757
      INSERT INTO processes
4758
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
4759
                   is_interface
4760
                  )
4761
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
4762
                   sisinterface
4763
                  );
4764
 
4765
      pk_package.add_package_process (nprocid, npvid, nuserid);
4766
   END;
4767
 
4768
/*-------------------------------------------------------------------------------------------------------*/
4769
   PROCEDURE add_package_process (
4770
      nprocidlist   IN   VARCHAR2,
4771
      npvid         IN   package_processes.pv_id%TYPE,
4772
      nuserid       IN   NUMBER
4773
   )
4774
   IS
4775
      processname   VARCHAR2 (4000);
4776
 
4777
      CURSOR proc_cur
4778
      IS
4779
         SELECT prc.proc_id
4780
           FROM processes prc
4781
          WHERE prc.proc_id IN (
4782
                   SELECT *
4783
                     FROM THE
4784
                             (SELECT CAST
4785
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
4786
                                        )
4787
                                FROM DUAL
4788
                             ));
4789
 
4790
      proc_rec  proc_cur%ROWTYPE;
4791
   BEGIN
4792
      OPEN proc_cur;
4793
 
4794
      FETCH proc_cur
4795
       INTO proc_rec;
4796
 
4797
      WHILE proc_cur%FOUND
4798
      LOOP
4799
         INSERT INTO package_processes (proc_id, pv_id)
4800
              VALUES (proc_rec.proc_id, npvid);
4801
 
4802
         SELECT prc.proc_name
4803
           INTO processname
4804
           FROM processes prc
4805
          WHERE prc.proc_id = proc_rec.proc_id;
4806
 
4807
         -- Log Action --
4808
         log_action (npvid,
4809
                     'process_add',
4810
                     nuserid,
4811
                     'Added process with health tag ' || processname
4812
                    );
4813
 
4814
         FETCH proc_cur
4815
          INTO proc_rec;
4816
      END LOOP;
4817
 
4818
      CLOSE proc_cur;
4819
   END;
4820
 
4821
/*-------------------------------------------------------------------------------------------------------*/
4822
   PROCEDURE remove_process (
4823
      nprocid   IN   package_processes.proc_id%TYPE,
4824
      npvid     IN   package_processes.pv_id%TYPE,
4825
      nuserid   IN   NUMBER
4826
   )
4827
   IS
4828
      processname   VARCHAR2 (4000);
4829
   BEGIN
4830
      SELECT prc.proc_name
4831
        INTO processname
4832
        FROM processes prc
4833
       WHERE prc.proc_id = nprocid;
4834
 
4835
      DELETE FROM package_processes
4836
            WHERE proc_id = nprocid AND pv_id = npvid;
4837
 
4838
      -- Log Action --
4839
      log_action (npvid,
4840
                  'process_remove',
4841
                  nuserid,
4842
                  'Removed process with health tag ' || processname
4843
                 );
4844
   END;
4845
/*-------------------------------------------------------------------------------------------------------*/
4846
   /*
4847
   ** Author: Rupesh Solanki
4848
   ** Purpose: To move package versions from one release to another
4849
   ** Release: 4th September 2006
4850
   */
4851
   PROCEDURE move_package (
4852
      npvid        IN package_versions.pv_id%TYPE,
4853
      nrtagid      IN release_tags.rtag_id%TYPE,
4854
      nnewrtagid   IN release_tags.rtag_id%TYPE,
4855
      nuserid      IN NUMBER
4856
   )
4857
   IS
4858
 
4859
      oldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);
4860
 
4861
   BEGIN
4862
      SELECT rtag_name into oldrtag_name
4863
      FROM RELEASE_TAGS
4864
      WHERE rtag_id = nrtagid;
4865
 
4866
      SELECT rtag_name into newrtag_name
4867
      FROM RELEASE_TAGS
4868
      WHERE rtag_id = nnewrtagid;
4869
 
4870
      /* Table Work In Progress*/
4871
      UPDATE WORK_IN_PROGRESS
4872
      SET RTAG_ID = nnewrtagid
4873
      WHERE RTAG_ID = nrtagid
4874
      AND PV_ID = npvid;
4875
 
4876
      /* Table PLANNED*/
4877
      UPDATE PLANNED
4878
      SET RTAG_ID = nnewrtagid
4879
      WHERE RTAG_ID = nrtagid
4880
      AND PV_ID = npvid;
4881
 
4882
      /* Table PEGGED_VERSIONS */
4883
      DELETE FROM PEGGED_VERSIONS pegv
4884
      WHERE pegv.RTAG_ID = nrtagid
4885
      AND pegv.PV_ID = npvid;
4886
 
4887
      /* Table ADVISORY_RIPPLE*/
4888
      DELETE FROM ADVISORY_RIPPLE
4889
      WHERE RTAG_ID = nrtagid
4890
      AND PV_ID = npvid;
4891
 
4892
 
4893
      -- Log Action --
4894
      log_action (npvid,
4895
                  'move_package_version',
4896
                  nuserid,
4897
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
4898
                 );
4899
   END;
4900
 
4901
/*-------------------------------------------------------------------------------------------------------*/
4902
   /*
4903
   ** Author: Rupesh Solanki
4904
   ** Purpose: To modify the product state from integration to test to deployment
4905
   ** Release: 25th January 2006
4906
   */
4907
   PROCEDURE modify_product_state (
4908
      npvid    IN package_versions.pv_id%TYPE,
4909
      nrtagid  IN release_tags.rtag_id%TYPE,
4910
      nstateid IN product_states.state_id%TYPE,
4911
      nuserid  IN NUMBER
4912
   ) IS
4913
 
4914
      sStateName VARCHAR2(4000);
4915
      sRtagName VARCHAR2(4000);
4916
 
4917
   BEGIN
4918
 
4919
      UPDATE RELEASE_CONTENT
4920
      SET PRODUCT_STATE = nstateid
4921
      WHERE PV_ID = npvid
4922
      AND RTAG_ID = nrtagid;
4923
 
4924
 
4925
      SELECT STATE INTO sStateName
4926
      FROM PRODUCT_STATES
4927
      WHERE STATE_ID = nstateid;
4928
 
4929
      SELECT RTAG_NAME into sRtagName
4930
      FROM RELEASE_TAGS
4931
      WHERE RTAG_ID = nrtagid;
4932
 
4933
 
4934
      -- Log Action --
4935
      log_action (npvid,
4936
                  'modify_product_state',
4937
                     nuserid,
4938
                     sStateName || ' in '|| sRtagName
4939
                  );
4940
   END;
4941
/*-------------------------------------------------------------------------------------------------------*/
4942
   /*
4943
   ** Author: Jeremy Tweddle
4944
   ** Date: 24/Aug/2007
4945
   */
4946
   PROCEDURE add_code_review_url (
4947
      npvid           IN    NUMBER,
4948
      nprojid         IN    NUMBER,
4949
      surl            IN    VARCHAR2,
4950
      sreason         IN    VARCHAR2,
4951
      ddateofreview   IN    DATE
4952
   ) IS
4953
 
4954
      ncrid NUMBER;
4955
 
4956
   BEGIN
4957
 
4958
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
4959
 
4960
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
4961
                                    last_modified )
4962
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
4963
 
4964
   END;
4965
/*-------------------------------------------------------------------------------------------------------*/
4966
   /*
4967
   ** Author: Jeremy Tweddle
4968
   ** Date: 22/Aug/2007
4969
   */
4970
   PROCEDURE update_code_review_url (
4971
      ncrid           IN    NUMBER,
4972
      nprojid         IN    NUMBER,
4973
      surl            IN    VARCHAR2,
4974
      sreason         IN    VARCHAR2
4975
   ) IS
4976
 
4977
   BEGIN
4978
 
4979
      UPDATE code_review_url
4980
      SET url = surl,
4981
          proj_id = nprojid,
4982
          reason = sreason,
4983
          last_modified = ora_sysdate
4984
      WHERE cr_id = ncrid;
4985
 
4986
   END;
4987
/*-------------------------------------------------------------------------------------------------------*/
4988
   /*
4989
   ** Author: Jeremy Tweddle
4990
   ** Date: 22/Aug/2007
4991
   */
4992
   PROCEDURE remove_code_review_url (
4993
      ncrid  IN    NUMBER
4994
   ) IS
4995
 
4996
   BEGIN
4997
      DELETE FROM code_review_url
4998
      WHERE cr_id = ncrid;
4999
   END;
5000
/*-------------------------------------------------------------------------------------------------------*/
5001
END pk_package;
1374 dpurdie 5002
/
5003
--------------------------------------------------------
5004
--  DDL for Package Body PK_RMAPI_TEST
5005
--------------------------------------------------------
1373 dpurdie 5006
 
5007
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI_TEST" 
5008
IS
5009
 
5010
   /*-------------------------------------------------------------------------------------------------------*/
5011
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
5012
      RETURN typecur
5013
   IS
5014
      npvid     NUMBER  := 0;
5015
      RECORDS   typecur;
5016
   BEGIN
5017
      BEGIN
5018
         -- Get PV_ID --
5019
         SELECT pv.pv_id
5020
           INTO npvid
5021
           FROM PACKAGES pkg, package_versions pv
5022
          WHERE pv.pkg_id = pkg.pkg_id
5023
            AND pkg.pkg_name = pkgname
5024
            AND pv.pkg_version = pkgversion;
5025
      EXCEPTION
5026
         WHEN NO_DATA_FOUND
5027
         THEN
5028
            raise_application_error (-20000, 'Package Not Found!');
5029
            --WHEN OTHERS THEN
5030
                  -- Consider logging the error and then re-raise
5031
            RAISE;
5032
      END;
5033
 
5034
      -- Finally get package dependencies --
5035
      OPEN RECORDS FOR
5036
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
5037
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
5038
          WHERE dep.pv_id = npvid
5039
            AND dpv.pkg_id = dpkg.pkg_id
5040
            AND dpv.pv_id = dep.dpv_id;
5041
 
5042
      RETURN RECORDS;
5043
   END;
5044
 
5045
/*-------------------------------------------------------------------------------------------------------*/
5046
   FUNCTION wip_iteration_package (
5047
      projname        VARCHAR2,
5048
      iterationname   VARCHAR2,
5049
      pkgname         VARCHAR2
5050
   )
5051
      RETURN typecur
5052
   IS
5053
      nrtagid   NUMBER  := 0;
5054
      RECORDS   typecur;
5055
   BEGIN
5056
      BEGIN
5057
         -- Get latest rtag_id --
5058
         SELECT rt.rtag_id
5059
           INTO nrtagid
5060
           FROM projects proj, release_tags rt
5061
          WHERE rt.proj_id = proj.proj_id
5062
            AND UPPER (proj.proj_name) = UPPER (projname)
5063
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
5064
 
5065
         IF (nrtagid IS NULL)
5066
         THEN
5067
            raise_application_error (-20000,
5068
                                     'Work In Progress is Not Found!');
5069
         END IF;
5070
      EXCEPTION
5071
         WHEN NO_DATA_FOUND
5072
         THEN
5073
            raise_application_error (-20000,
5074
                                     'Work In Progress is Not Found!');
5075
            RAISE;
5076
      END;
5077
 
5078
      -- Finally get package dependencies --
5079
      OPEN RECORDS FOR
5080
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
5081
                pv.src_path
5082
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
5083
          WHERE pv.pkg_id = pkg.pkg_id
5084
            AND wip.pv_id = pv.pv_id
5085
            AND wip.rtag_id = nrtagid
5086
            AND pkg.pkg_name = pkgname;
5087
 
5088
      RETURN RECORDS;
5089
   END;
5090
 
5091
/*-------------------------------------------------------------------------------------------------------*/
5092
   FUNCTION auto_make_release (
5093
      rtagid                   IN   NUMBER,
5094
      pkgname                  IN   VARCHAR2,
5095
      vext                     IN   VARCHAR2,
5096
      newpkgversion            IN   VARCHAR2,
5097
      label                    IN   VARCHAR2,
5098
      dependenciesimportlist   IN   VARCHAR2,
5099
      isrippled                IN   NUMBER,
5100
      username                 IN   VARCHAR2
5101
   )
5102
      RETURN NUMBER
5103
   IS
5104
      pkgid                           NUMBER;
5105
      pvid                            NUMBER                        := 0;
5106
      userid                          NUMBER;
5107
      dlocked                         VARCHAR2 (20)                 := NULL;
5108
      clonefrompvid                   NUMBER;
5109
      ssv_mm                          package_versions.v_mm%TYPE;
5110
      ssv_nmm                         package_versions.v_nmm%TYPE;
5111
      ssv_ext                         package_versions.v_ext%TYPE;
5112
      return_package_not_found        NUMBER                        := -1;
5113
      return_package_already_exists   NUMBER                        := -2;
5114
      return_not_approved             NUMBER                        := -3;
5115
   BEGIN
5116
      /*--------------- Business Rules Here -------------------*/
5117
      IF (rtagid IS NULL)
5118
      THEN
5119
         raise_application_error (-20000, 'RtagId must be supplied.');
5120
      END IF;
5121
 
5122
      IF (pkgname IS NULL)
5123
      THEN
5124
         raise_application_error (-20000, 'PkgName must be supplied.');
5125
      END IF;
5126
 
5127
      IF (newpkgversion IS NULL)
5128
      THEN
5129
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5130
      END IF;
5131
 
5132
      IF (label IS NULL)
5133
      THEN
5134
         raise_application_error (-20000, 'Label must be supplied.');
5135
      END IF;
5136
 
5137
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5138
      THEN
5139
         raise_application_error
5140
            (-20000,
5141
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5142
            );
5143
      END IF;
5144
 
5145
      IF (username IS NULL)
5146
      THEN
5147
         raise_application_error (-20000, 'UserName must be supplied.');
5148
      END IF;
5149
 
5150
      -- Get user_id
5151
      BEGIN
5152
         SELECT usr.user_id
5153
           INTO userid
5154
           FROM users usr
5155
          WHERE UPPER (usr.user_name) = UPPER (username)
5156
            AND usr.is_disabled IS NULL;
5157
      EXCEPTION
5158
         WHEN NO_DATA_FOUND
5159
         THEN
5160
            raise_application_error (-20000,
5161
                                        'UserName '
5162
                                     || username
5163
                                     || ' is not valid or disabled.'
5164
                                    );
5165
      END;
5166
 
5167
/*-------------------------------------------------------*/
5168
 
5169
      -- Create package if necessary
5170
      IF isrippled = 1
5171
      THEN
5172
         /* Ripple Build */
5173
         BEGIN
5174
            -- Make sure that package does not exist
5175
            SELECT pv.pv_id
5176
              INTO pvid
5177
              FROM package_versions pv, PACKAGES pkg
5178
             WHERE pv.pkg_id = pkg.pkg_id
5179
               AND pkg.pkg_name = pkgname
5180
               AND pv.pkg_version = newpkgversion;
5181
         EXCEPTION
5182
            WHEN NO_DATA_FOUND
5183
            THEN
5184
               pvid := 0;
5185
         END;
5186
 
5187
         IF (pvid = 0)
5188
         THEN
5189
            -- Split current version in parts
5190
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5191
 
5192
            BEGIN
5193
               -- Find package to be replaced with thie ripple package
5194
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5195
               THEN
5196
                  SELECT pv.pv_id
5197
                    INTO clonefrompvid
5198
                    FROM PACKAGES pkg, package_versions pv,
5199
                         release_content rc
5200
                   WHERE rc.pv_id = pv.pv_id
5201
                     AND pv.pkg_id = pkg.pkg_id
5202
                     AND rc.rtag_id = rtagid
5203
                     AND pkg.pkg_name = pkgname
5204
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5205
               ELSE
5206
                  SELECT pv.pv_id
5207
                    INTO clonefrompvid
5208
                    FROM PACKAGES pkg, package_versions pv,
5209
                         release_content rc
5210
                   WHERE rc.pv_id = pv.pv_id
5211
                     AND pv.pkg_id = pkg.pkg_id
5212
                     AND rc.rtag_id = rtagid
5213
                     AND pkg.pkg_name = pkgname
5214
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5215
               END IF;
5216
            EXCEPTION
5217
               WHEN NO_DATA_FOUND
5218
               THEN
5219
                  raise_application_error
5220
                                        (-20000,
5221
                                            'Cannot get CloneFromPvId. VExt='
5222
                                         || vext
5223
                                         || ', RtagId='
5224
                                         || rtagid
5225
                                         || ', PkgName='
5226
                                         || pkgname
5227
                                         || ', SSV_EXT='
5228
                                         || ssv_ext
5229
                                        );
5230
            END;
5231
 
5232
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5233
            THEN
5234
               -- Create package
5235
               seed_package_names_versions (pkgname,
5236
                                            newpkgversion,
5237
                                            userid,
5238
                                            pvid,
5239
                                            clonefrompvid
5240
                                           );
5241
            ELSE
5242
               -- Create package
5243
               seed_package_names_versions2 (pkgname,
5244
                                             newpkgversion,
5245
                                             userid,
5246
                                             pvid,
5247
                                             clonefrompvid
5248
                                            );
5249
            END IF;
5250
 
5251
            -- Update Package reason for release
5252
            UPDATE package_versions pv
5253
               SET pv.comments = 'Rippled Build.',
5254
                   pv.build_type = 'Y'
5255
             WHERE pv.pv_id = pvid;
5256
         ELSE
5257
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5258
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5259
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5260
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5261
            UPDATE package_versions pv
5262
               SET pv.release_notes_info = null,
5263
                   pv.modified_stamp = ora_sysdatetime
5264
             WHERE pv.pv_id = pvid;
5265
 
5266
            RETURN return_package_already_exists;
5267
         END IF;
5268
      ELSE
5269
         /* Auto build from Pending area */
5270
 
5271
         -- Find package in pending area
5272
         BEGIN
5273
            SELECT pv.pv_id, pv.dlocked
5274
              INTO pvid, dlocked
5275
              FROM planned pl, package_versions pv, PACKAGES pkg
5276
             WHERE pl.pv_id = pv.pv_id
5277
               AND pv.pkg_id = pkg.pkg_id
5278
               AND pl.rtag_id = rtagid
5279
               AND pkg.pkg_name = pkgname
5280
               AND pv.dlocked = 'A'
5281
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5282
               AND rownum = 1
5283
             ORDER BY pv.modified_stamp;
5284
         EXCEPTION
5285
            WHEN NO_DATA_FOUND
5286
            THEN
5287
               pvid := 0;
5288
         END;
5289
 
5290
         IF (pvid = 0)
5291
         THEN
5292
            -- Package does not exist in pending area, hence report it
5293
            RETURN return_package_not_found;
5294
         ELSIF (dlocked != 'A')
5295
         THEN
5296
            -- Package is not approved for autobuild
5297
            RETURN return_not_approved;
5298
         END IF;
5299
      END IF;
5300
 
5301
      BEGIN
5302
         -- Import Dependencies
5303
         import_dependencies (pvid, dependenciesimportlist, userid);
5304
      END;
5305
 
5306
      BEGIN
5307
         -- Split current version in parts
5308
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5309
 
5310
         -- Update Package Details
5311
         UPDATE package_versions pv
5312
            SET pv.pkg_version = newpkgversion,
5313
                pv.v_ext = ssv_ext,
5314
                pv.v_mm = ssv_mm,
5315
                pv.v_nmm = ssv_nmm,
5316
                pv.pkg_label = label
5317
          WHERE pv.pv_id = pvid;
5318
      EXCEPTION
5319
         WHEN DUP_VAL_ON_INDEX
5320
         THEN
5321
            -- Package already exists, hence cannot be used for ripple build
5322
            RETURN return_package_already_exists;
5323
      END;
5324
 
5325
      -- Update the is_autobuildable
5326
      UPDATE package_versions
5327
         SET is_autobuildable = 'Y'
5328
       WHERE pv_id = pvid;
5329
 
5330
      -- Now release package
5331
      pk_environment.auto_make_release (pvid,
5332
                                        rtagid,
5333
                                        userid,
5334
                                        vext,
5335
                                        ssv_ext,
5336
                                        clonefrompvid
5337
                                       );
5338
 
5339
      --Now clean the PLANNED_VERSIONS table
5340
      SELECT pkg_id
5341
        INTO pkgid
5342
        FROM PACKAGES
5343
       WHERE pkg_name = pkgname;
5344
 
5345
      DELETE FROM planned_versions
5346
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5347
 
5348
      RETURN pvid;
5349
   END;
5350
 
5351
/*-------------------------------------------------------------------------------------------------------*/
5352
   FUNCTION auto_make_vcsrelease (
5353
      rtagid                   IN   NUMBER,
5354
      pkgname                  IN   VARCHAR2,
5355
      vext                     IN   VARCHAR2,
5356
      newpkgversion            IN   VARCHAR2,
5357
      vcstag             IN   VARCHAR2,
5358
      dependenciesimportlist   IN   VARCHAR2,
5359
      isrippled                IN   NUMBER,
5360
      username                 IN   VARCHAR2
5361
   )
5362
      RETURN NUMBER
5363
   IS
5364
      pkgid                           NUMBER;
5365
      pvid                            NUMBER                        := 0;
5366
      userid                          NUMBER;
5367
      dlocked                         VARCHAR2 (20)                 := NULL;
5368
      clonefrompvid                   NUMBER;
5369
      ssv_mm                          package_versions.v_mm%TYPE;
5370
      ssv_nmm                         package_versions.v_nmm%TYPE;
5371
      ssv_ext                         package_versions.v_ext%TYPE;
5372
      return_package_not_found        NUMBER                        := -1;
5373
      return_package_already_exists   NUMBER                        := -2;
5374
      return_not_approved             NUMBER                        := -3;
5375
 
5376
      x_vcstypeid                     NUMBER;
5377
      x_tag                           VARCHAR2(32);
5378
      x_label                         VARCHAR2(60);
5379
      x_srcpath                       VARCHAR2(2000);
5380
 
5381
      -- Regular expression constituents
5382
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
5383
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
5384
      BOL           VARCHAR2(4)  := '^';
5385
      Anything      VARCHAR2(4)  := '.*';
5386
      ReplaceToken1 VARCHAR2(4)  := '\1';
5387
      ReplaceToken2 VARCHAR2(4)  := '\2';
5388
      ReplaceToken3 VARCHAR2(4)  := '\3';
5389
 
5390
 
5391
   BEGIN
5392
      /*--------------- Business Rules Here -------------------*/
5393
      IF (rtagid IS NULL)
5394
      THEN
5395
         raise_application_error (-20000, 'RtagId must be supplied.');
5396
      END IF;
5397
 
5398
      IF (pkgname IS NULL)
5399
      THEN
5400
         raise_application_error (-20000, 'PkgName must be supplied.');
5401
      END IF;
5402
 
5403
      IF (newpkgversion IS NULL)
5404
      THEN
5405
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5406
      END IF;
5407
 
5408
      IF (vcstag IS NULL)
5409
      THEN
5410
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
5411
      END IF;
5412
 
5413
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5414
      THEN
5415
         raise_application_error
5416
            (-20000,
5417
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5418
            );
5419
      END IF;
5420
 
5421
      IF (username IS NULL)
5422
      THEN
5423
         raise_application_error (-20000, 'UserName must be supplied.');
5424
      END IF;
5425
 
5426
      -- Parse the PkgVcsTag
5427
      -- Sets up
5428
      --   x_tag, x_label, x_srcpath
5429
 
5430
       BEGIN
5431
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
5432
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
5433
 
5434
          -- Decode the short tag
5435
          CASE x_tag
5436
             WHEN 'CC' THEN
5437
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
5438
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
5439
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
5440
 
5441
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5442
                -- check for that error as well as the obvious zero-length string conditions.
5443
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
5444
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5445
                END IF;
5446
 
5447
             WHEN 'SVN' THEN
5448
                -- extract the 2nd token, that being the subversion tag
5449
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);
5450
                x_label   := 'N/A';
5451
 
5452
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5453
                -- check for that error as well as the obvious zero-length string conditions.
5454
                IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THEN
5455
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5456
                END IF;
5457
 
5458
             WHEN 'UC' THEN
5459
                -- nothing to extract, just assign defaults
5460
                x_srcpath := '';
5461
                x_label   := 'N/A';
5462
             ELSE
5463
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
5464
          END CASE;
5465
       END;
5466
 
5467
      -- Get the VCS_TYPE_ID for the version control system.
5468
      BEGIN
5469
         SELECT vt.vcs_type_id
5470
         INTO x_vcstypeid
5471
         FROM VCS_TYPE vt
5472
         WHERE vt.tag = x_tag;
5473
         EXCEPTION
5474
            WHEN NO_DATA_FOUND THEN
5475
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
5476
      END;
5477
 
5478
 
5479
      -- Get user_id
5480
      BEGIN
5481
         SELECT usr.user_id
5482
           INTO userid
5483
           FROM users usr
5484
          WHERE UPPER (usr.user_name) = UPPER (username)
5485
            AND usr.is_disabled IS NULL;
5486
      EXCEPTION
5487
         WHEN NO_DATA_FOUND
5488
         THEN
5489
            raise_application_error (-20000,
5490
                                        'UserName '
5491
                                     || username
5492
                                     || ' is not valid or disabled.'
5493
                                    );
5494
      END;
5495
 
5496
/*-------------------------------------------------------*/
5497
 
5498
      -- Create package if necessary
5499
      IF isrippled = 1
5500
      THEN
5501
         /* Ripple Build */
5502
         BEGIN
5503
            -- Make sure that package does not exist
5504
            SELECT pv.pv_id
5505
              INTO pvid
5506
              FROM package_versions pv, PACKAGES pkg
5507
             WHERE pv.pkg_id = pkg.pkg_id
5508
               AND pkg.pkg_name = pkgname
5509
               AND pv.pkg_version = newpkgversion;
5510
         EXCEPTION
5511
            WHEN NO_DATA_FOUND
5512
            THEN
5513
               pvid := 0;
5514
         END;
5515
 
5516
         IF (pvid = 0)
5517
         THEN
5518
            -- Split current version in parts
5519
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5520
 
5521
            BEGIN
5522
               -- Find package to be replaced with thie ripple package
5523
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5524
               THEN
5525
                  SELECT pv.pv_id
5526
                    INTO clonefrompvid
5527
                    FROM PACKAGES pkg, package_versions pv,
5528
                         release_content rc
5529
                   WHERE rc.pv_id = pv.pv_id
5530
                     AND pv.pkg_id = pkg.pkg_id
5531
                     AND rc.rtag_id = rtagid
5532
                     AND pkg.pkg_name = pkgname
5533
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5534
               ELSE
5535
                  SELECT pv.pv_id
5536
                    INTO clonefrompvid
5537
                    FROM PACKAGES pkg, package_versions pv,
5538
                         release_content rc
5539
                   WHERE rc.pv_id = pv.pv_id
5540
                     AND pv.pkg_id = pkg.pkg_id
5541
                     AND rc.rtag_id = rtagid
5542
                     AND pkg.pkg_name = pkgname
5543
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5544
               END IF;
5545
            EXCEPTION
5546
               WHEN NO_DATA_FOUND
5547
               THEN
5548
                  raise_application_error
5549
                                        (-20000,
5550
                                            'Cannot get CloneFromPvId. VExt='
5551
                                         || vext
5552
                                         || ', RtagId='
5553
                                         || rtagid
5554
                                         || ', PkgName='
5555
                                         || pkgname
5556
                                         || ', SSV_EXT='
5557
                                         || ssv_ext
5558
                                        );
5559
            END;
5560
 
5561
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5562
            THEN
5563
               -- Create package
5564
               seed_package_names_versions (pkgname,
5565
                                            newpkgversion,
5566
                                            userid,
5567
                                            pvid,
5568
                                            clonefrompvid
5569
                                           );
5570
            ELSE
5571
               -- Create package
5572
               seed_package_names_versions2 (pkgname,
5573
                                             newpkgversion,
5574
                                             userid,
5575
                                             pvid,
5576
                                             clonefrompvid
5577
                                            );
5578
            END IF;
5579
 
5580
            -- Update Package reason for release
5581
            UPDATE package_versions pv
5582
               SET pv.comments = 'Rippled Build.',
5583
                   pv.build_type = 'Y'
5584
             WHERE pv.pv_id = pvid;
5585
         ELSE
5586
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5587
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5588
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5589
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5590
            UPDATE package_versions pv
5591
               SET pv.release_notes_info = null,
5592
                   pv.modified_stamp = ora_sysdatetime
5593
             WHERE pv.pv_id = pvid;
5594
 
5595
            RETURN return_package_already_exists;
5596
         END IF;
5597
      ELSE
5598
         /* Auto build from Pending area */
5599
 
5600
         -- Find package in pending area
5601
         BEGIN
5602
            SELECT pv.pv_id, pv.dlocked
5603
              INTO pvid, dlocked
5604
              FROM planned pl, package_versions pv, PACKAGES pkg
5605
             WHERE pl.pv_id = pv.pv_id
5606
               AND pv.pkg_id = pkg.pkg_id
5607
               AND pl.rtag_id = rtagid
5608
               AND pkg.pkg_name = pkgname
5609
               AND pv.dlocked = 'A'
5610
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5611
               AND rownum = 1
5612
             ORDER BY pv.modified_stamp;
5613
         EXCEPTION
5614
            WHEN NO_DATA_FOUND
5615
            THEN
5616
               pvid := 0;
5617
         END;
5618
 
5619
         IF (pvid = 0)
5620
         THEN
5621
            -- Package does not exist in pending area, hence report it
5622
            RETURN return_package_not_found;
5623
         ELSIF (dlocked != 'A')
5624
         THEN
5625
            -- Package is not approved for autobuild
5626
            RETURN return_not_approved;
5627
         END IF;
5628
      END IF;
5629
 
5630
      BEGIN
5631
         -- Import Dependencies
5632
         import_dependencies (pvid, dependenciesimportlist, userid);
5633
      END;
5634
 
5635
      BEGIN
5636
         -- Split current version in parts
5637
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5638
 
5639
         -- Update Package Details
5640
         UPDATE package_versions pv
5641
            SET pv.pkg_version = newpkgversion,
5642
                pv.v_ext = ssv_ext,
5643
                pv.v_mm = ssv_mm,
5644
                pv.v_nmm = ssv_nmm,
5645
                pv.src_path = x_srcpath,
5646
                pv.pkg_label = x_label,
5647
                pv.vcs_type_id = x_vcstypeid
5648
          WHERE pv.pv_id = pvid;
5649
      EXCEPTION
5650
         WHEN DUP_VAL_ON_INDEX
5651
         THEN
5652
            -- Package already exists, hence cannot be used for ripple build
5653
            RETURN return_package_already_exists;
5654
      END;
5655
 
5656
      -- Update the is_autobuildable
5657
      UPDATE package_versions
5658
         SET is_autobuildable = 'Y'
5659
       WHERE pv_id = pvid;
5660
 
5661
      -- Now release package
5662
      pk_environment.auto_make_release (pvid,
5663
                                        rtagid,
5664
                                        userid,
5665
                                        vext,
5666
                                        ssv_ext,
5667
                                        clonefrompvid
5668
                                       );
5669
 
5670
      --Now clean the PLANNED_VERSIONS table
5671
      SELECT pkg_id
5672
        INTO pkgid
5673
        FROM PACKAGES
5674
       WHERE pkg_name = pkgname;
5675
 
5676
      DELETE FROM planned_versions
5677
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5678
 
5679
      RETURN pvid;
5680
   END;
5681
 
5682
/*-------------------------------------------------------------------------------------------------------*/
5683
   PROCEDURE import_dependencies (
5684
      pvid                     IN   NUMBER,
5685
      dependenciesimportlist   IN   VARCHAR2,
5686
      userid                   IN   NUMBER
5687
   )
5688
   IS
5689
/*
5690
|| DependenciesImportList Format:
5691
|| "pkgA","1.0.0";"pkgB","2.0.0";
5692
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
5693
*/
5694
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
5695
         INDEX BY VARCHAR2 (4000);
5696
 
5697
      seperator         VARCHAR2 (2)           := '||';
5698
      pkgname           VARCHAR2 (4000);
5699
      pkgversion        VARCHAR2 (4000);
5700
      buildtype         VARCHAR2 (50);
5701
      pkgid             NUMBER;
5702
      vext              VARCHAR2 (4000);
5703
      dpvid             NUMBER;
5704
      slist             VARCHAR2 (4000);
5705
      cbuildtypes       tdictionary;
5706
      dependencyrow     NUMBER;
5707
      sdependency       VARCHAR2 (4000);
5708
      first_pos         VARCHAR2 (4000);
5709
      second_pos        VARCHAR2 (4000);
5710
      third_pos         VARCHAR2 (4000);
5711
      forth_pos         VARCHAR2 (4000);
5712
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
5713
 
5714
      CURSOR curbuildtype
5715
      IS
5716
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
5717
                dep.build_type
5718
           FROM package_dependencies dep, package_versions dpv
5719
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
5720
 
5721
      recbuildtype      curbuildtype%ROWTYPE;
5722
   BEGIN
5723
      slist := dependenciesimportlist;
5724
 
5725
      -- Preformat String
5726
      IF NOT slist IS NULL
5727
      THEN
5728
         slist := REPLACE (slist, ' ');                      -- Remove spaces
5729
         slist := REPLACE (slist, UTL_TCP.crlf);
5730
         -- Remove new line and carriage-return characters
5731
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
5732
      END IF;
5733
 
5734
      -- Get Current Dependencies
5735
      OPEN curbuildtype;
5736
 
5737
      FETCH curbuildtype
5738
       INTO recbuildtype;
5739
 
5740
      WHILE curbuildtype%FOUND
5741
      LOOP
5742
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
5743
 
5744
         FETCH curbuildtype
5745
          INTO recbuildtype;
5746
      END LOOP;
5747
 
5748
      CLOSE curbuildtype;
5749
 
5750
      -- Separate dependencies with ; separator
5751
      citemcollection := in_list_varchar2 (slist, ';');
5752
 
5753
      BEGIN
5754
         -- Remove old dependencies
5755
         DELETE FROM package_dependencies dep
5756
               WHERE dep.pv_id = pvid;
5757
 
5758
         -- Loop through dependencies
5759
         FOR dependencyrow IN 1 .. citemcollection.COUNT
5760
         LOOP
5761
            -- Extract pkg_name and pkg_version
5762
            sdependency := citemcollection (dependencyrow);
5763
            first_pos := INSTR (sdependency, '"', 1, 1);
5764
            second_pos := INSTR (sdependency, '"', 1, 2);
5765
            third_pos := INSTR (sdependency, '"', 1, 3);
5766
            forth_pos := INSTR (sdependency, '"', 1, 4);
5767
            pkgname :=
5768
               SUBSTR (sdependency,
5769
                       (first_pos + 1),
5770
                       (second_pos - first_pos - 1)
5771
                      );
5772
            pkgversion :=
5773
               SUBSTR (sdependency,
5774
                       (third_pos + 1),
5775
                       (forth_pos - third_pos - 1)
5776
                      );
5777
 
5778
            -- Dependency must exits to be linked against
5779
            BEGIN
5780
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
5781
                 INTO dpvid, pkgid, vext
5782
                 FROM package_versions pv, PACKAGES pkg
5783
                WHERE pv.pkg_id = pkg.pkg_id
5784
                  AND pkg.pkg_name = pkgname
5785
                  AND pv.pkg_version = pkgversion;
5786
            EXCEPTION
5787
               WHEN NO_DATA_FOUND
5788
               THEN
5789
                  raise_application_error
5790
                                  (-20000,
5791
                                      'Dependency ['
5792
                                   || pkgname
5793
                                   || ' '
5794
                                   || pkgversion
5795
                                   || '] does not exist yet and cannot be used!'
5796
                                  );
5797
            END;
5798
 
5799
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
5800
            BEGIN
5801
               buildtype := cbuildtypes (pkgid || seperator || vext);
5802
 
5803
               IF buildtype IS NULL
5804
               THEN
5805
                  -- Set build type to LinkPackageArchive by default
5806
                  buildtype := 'L';
5807
               END IF;
5808
            EXCEPTION
5809
               WHEN NO_DATA_FOUND
5810
               THEN
5811
                  buildtype := 'L';
5812
            END;
5813
 
5814
            -- Insert Dependencies
5815
            update_package_dependency (pvid,
5816
                                       pkgname,
5817
                                       pkgversion,
5818
                                       buildtype,
5819
                                       userid,
5820
 
5821
                                      );
5822
         END LOOP;
5823
      END;
5824
   END;
5825
 
5826
/*-------------------------------------------------------------------------------------------------------*/
5827
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
5828
      RETURN VARCHAR2
5829
   IS
5830
      pkgversion   VARCHAR2 (4000);
5831
   BEGIN
5832
      BEGIN
5833
         SELECT pv.pkg_version
5834
           INTO pkgversion
5835
           FROM PACKAGES pkg, release_content rc, package_versions pv
5836
          WHERE pv.pv_id = rc.pv_id
5837
            AND pkg.pkg_id = pv.pkg_id
5838
            AND pkg.pkg_name = pkgname
5839
            AND rc.rtag_id = rtagid;
5840
 
5841
         RETURN pkgversion;
5842
      END;
5843
   END;
5844
 
5845
/*-------------------------------------------------------------------------------------------------------*/
5846
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
5847
      RETURN VARCHAR2
5848
   IS
5849
      pkgversion   VARCHAR2 (4000);
5850
   BEGIN
5851
      BEGIN
5852
         SELECT pv.pkg_version
5853
           INTO pkgversion
5854
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
5855
          WHERE pv.pv_id = wip.pv_id
5856
            AND pkg.pkg_id = pv.pkg_id
5857
            AND pkg.pkg_name = pkgname
5858
            AND wip.rtag_id = rtagid;
5859
 
5860
         IF pkgversion IS NULL
5861
         THEN
5862
            SELECT pv.pkg_version
5863
              INTO pkgversion
5864
              FROM PACKAGES pkg, planned pl, package_versions pv
5865
             WHERE pv.pv_id = pl.pv_id
5866
               AND pkg.pkg_id = pv.pkg_id
5867
               AND pkg.pkg_name = pkgname
5868
               AND pl.rtag_id = rtagid;
5869
         END IF;
5870
 
5871
         RETURN pkgversion;
5872
      END;
5873
   END;
5874
 
5875
/*-------------------------------------------------------------------------------------------------------*/
5876
   PROCEDURE update_dash_board (rtagid IN NUMBER)
5877
   IS
5878
      projid       NUMBER;
5879
      projiddb     NUMBER;
5880
      total        NUMBER;
5881
      auto_total   NUMBER;
5882
      rtagiddb     NUMBER;
5883
   BEGIN
5884
      SELECT COUNT (*)
5885
        INTO total
5886
        FROM release_content rc, package_versions pv
5887
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
5888
 
5889
      SELECT COUNT (*)
5890
        INTO auto_total
5891
        FROM release_content rc, package_versions pv
5892
       WHERE pv.pv_id = rc.pv_id
5893
         AND pv.is_autobuildable = 'Y'
5894
         AND rc.rtag_id = rtagid;
5895
 
5896
      BEGIN
5897
         SELECT rtag_id
5898
           INTO rtagiddb
5899
           FROM dash_board
5900
          WHERE rtag_id = rtagid;
5901
 
5902
         SELECT proj_id
5903
           INTO projiddb
5904
           FROM dash_board
5905
          WHERE rtag_id = rtagid;
5906
      EXCEPTION
5907
         WHEN NO_DATA_FOUND
5908
         THEN
5909
            rtagiddb := '';
5910
      END;
5911
 
5912
      IF rtagiddb IS NULL
5913
      THEN
5914
         SELECT proj_id
5915
           INTO projid
5916
           FROM release_tags
5917
          WHERE rtag_id = rtagid;
5918
 
5919
         INSERT INTO dash_board
5920
                     (proj_id, rtag_id, last_build_time, automated_packages,
5921
                      total_packages
5922
                     )
5923
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
5924
                      total
5925
                     );
5926
      ELSE
5927
         UPDATE dash_board
5928
            SET last_build_time = ora_sysdatetime,
5929
                automated_packages = auto_total,
5930
                total_packages = total
5931
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
5932
      END IF;
5933
   END;
5934
 
5935
/*-------------------------------------------------------------------------------------------------------*/
5936
   FUNCTION exclude_from_build (
5937
      pvid          IN   NUMBER,
5938
      spkgversion   IN   VARCHAR2,
5939
      rtagid        IN   NUMBER,
5940
      username      IN   VARCHAR2
5941
   )
5942
      RETURN NUMBER
5943
   IS
5944
      userid              NUMBER;
5945
      outerrcode          NUMBER;
5946
      pkgid               NUMBER;
5947
 
5948
      CURSOR dnr_duplicate_cur
5949
      IS
5950
         SELECT *
5951
           FROM do_not_ripple
5952
          WHERE pv_id = pvid AND rtag_id = rtagid;
5953
 
5954
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
5955
   BEGIN
5956
      outerrcode := -1;       -- Set default return error code to ERROR state
5957
 
5958
      /*--------------- Business Rules Here -------------------*/
5959
      IF (rtagid IS NULL)
5960
      THEN
5961
         RETURN outerrcode;
5962
--         raise_application_error (-20000, 'RtagId must be supplied.');
5963
      END IF;
5964
 
5965
      IF (pvid IS NULL)
5966
      THEN
5967
         RETURN outerrcode;
5968
--         raise_application_error (-20000, 'PvId must be supplied.');
5969
      END IF;
5970
 
5971
      IF (username IS NULL)
5972
      THEN
5973
         RETURN outerrcode;
5974
--         raise_application_error (-20000, 'UserName must be supplied.');
5975
      END IF;
5976
 
5977
      -- Get user_id
5978
      BEGIN
5979
         SELECT usr.user_id
5980
           INTO userid
5981
           FROM users usr
5982
          WHERE UPPER (usr.user_name) = UPPER (username)
5983
            AND usr.is_disabled IS NULL;
5984
      EXCEPTION
5985
         WHEN NO_DATA_FOUND
5986
         THEN
5987
            RETURN outerrcode;
5988
--            raise_application_error (-20000,
5989
--                                        'UserName '
5990
--                                     || username
5991
--                                     || ' is not valid or disabled.'
5992
--                                    );
5993
      END;
5994
 
5995
      OPEN dnr_duplicate_cur;
5996
 
5997
      FETCH dnr_duplicate_cur
5998
       INTO dnr_duplicate_rec;
5999
 
6000
      IF dnr_duplicate_cur%FOUND
6001
      THEN
6002
         outerrcode := 0;
6003
      END IF;
6004
 
6005
      IF dnr_duplicate_cur%NOTFOUND
6006
      THEN
6007
         /* No duplicate recordset */
6008
         unripple_package (pvid, rtagid, userid);
6009
         outerrcode := 0;                            -- Set return to SUCCESS
6010
      END IF;
6011
 
6012
      CLOSE dnr_duplicate_cur;
6013
 
6014
      SELECT pkg_id
6015
        INTO pkgid
6016
        FROM package_versions
6017
       WHERE pv_id = pvid;
6018
 
6019
      DELETE FROM planned_versions
6020
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6021
 
6022
      RETURN outerrcode;
6023
   END;
6024
 
6025
/*-------------------------------------------------------------------------------------------------------*/
6026
   FUNCTION exclude_indirect_from_build (
6027
      pvid          IN   NUMBER,
6028
      spkgversion   IN   VARCHAR2,
6029
      rtagid        IN   NUMBER,
6030
      username      IN   VARCHAR2,
6031
      rootpvid      IN   NUMBER,
6032
      rootcause     IN   VARCHAR2,
6033
      rootfile      IN   VARCHAR2
6034
   )
6035
      RETURN NUMBER
6036
   IS
6037
      userid              NUMBER;
6038
      outerrcode          NUMBER;
6039
      pkgid               NUMBER;
6040
 
6041
      CURSOR dnr_duplicate_cur
6042
      IS
6043
         SELECT *
6044
           FROM do_not_ripple
6045
          WHERE pv_id = pvid AND rtag_id = rtagid;
6046
 
6047
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
6048
   BEGIN
6049
      outerrcode := -1;       -- Set default return error code to ERROR state
6050
 
6051
      /*--------------- Business Rules Here -------------------*/
6052
      IF (rtagid IS NULL)
6053
      THEN
6054
         RETURN outerrcode;
6055
--         raise_application_error (-20000, 'RtagId must be supplied.');
6056
      END IF;
6057
 
6058
      IF (pvid IS NULL)
6059
      THEN
6060
         RETURN outerrcode;
6061
--         raise_application_error (-20000, 'PvId must be supplied.');
6062
      END IF;
6063
 
6064
      IF (username IS NULL)
6065
      THEN
6066
         RETURN outerrcode;
6067
--         raise_application_error (-20000, 'UserName must be supplied.');
6068
      END IF;
6069
 
6070
      -- Get user_id
6071
      BEGIN
6072
         SELECT usr.user_id
6073
           INTO userid
6074
           FROM users usr
6075
          WHERE UPPER (usr.user_name) = UPPER (username)
6076
            AND usr.is_disabled IS NULL;
6077
      EXCEPTION
6078
         WHEN NO_DATA_FOUND
6079
         THEN
6080
            RETURN outerrcode;
6081
--            raise_application_error (-20000,
6082
--                                        'UserName '
6083
--                                     || username
6084
--                                     || ' is not valid or disabled.'
6085
--                                    );
6086
      END;
6087
 
6088
     /* No duplicate recordset */
6089
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
6090
     outerrcode := 0;                            -- Set return to SUCCESS
6091
 
6092
      SELECT pkg_id
6093
        INTO pkgid
6094
        FROM package_versions
6095
       WHERE pv_id = pvid;
6096
 
6097
      DELETE FROM planned_versions
6098
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6099
 
6100
      RETURN outerrcode;
6101
   END;
6102
/*-------------------------------------------------------------------------------------------------------*/
6103
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
6104
   IS
6105
   BEGIN
6106
      INSERT INTO abt_action_log
6107
                  (rcon_id, action_datetime, action
6108
                  )
6109
           VALUES (rconid, ora_sysdatetime, action
6110
                  );
6111
   END;
6112
 
6113
/*-------------------------------------------------------------------------------------------------------*/
6114
   FUNCTION insert_package_metrics (
6115
      rtagid                   IN   NUMBER,
6116
      pkgname                  IN   VARCHAR2,
6117
      vext                     IN   VARCHAR2,
6118
      metricstring             IN   VARCHAR2
6119
   )
6120
      RETURN NUMBER
6121
   IS
6122
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
6123
      lv_pvid                  NUMBER                 := 0;
6124
      rownumber                NUMBER;
6125
      rowcontent               VARCHAR2(4000);
6126
      metricname               VARCHAR2(1000);
6127
      metricvalue              VARCHAR2(4000);
6128
      return_insert_error      NUMBER                 := -1;
6129
      return_insert_success    NUMBER                 := 0;
6130
 
6131
      /* Metrics */
6132
      lv_branches                 NUMBER;
6133
      lv_branchlist               VARCHAR2(4000);
6134
      lv_codefiles                NUMBER;
6135
      lv_ignoredfiles             NUMBER;
6136
      lv_directories              NUMBER;
6137
      lv_directorydepth           NUMBER;
6138
      lv_totalfiles               NUMBER;
6139
      lv_makefiles                NUMBER;
6140
      lv_blanklines               NUMBER;
6141
      lv_codelines                NUMBER;
6142
      lv_commentlines             NUMBER;
6143
 
6144
   BEGIN
6145
      /*--------------- Business Rules Here -------------------*/
6146
      IF (rtagid IS NULL)
6147
      THEN
6148
         RETURN return_insert_error;
6149
      END IF;
6150
 
6151
      IF (pkgname IS NULL)
6152
      THEN
6153
         RETURN return_insert_error;
6154
      END IF;
6155
 
6156
      IF (metricstring IS NULL)
6157
      THEN
6158
         RETURN return_insert_error;
6159
      END IF;
6160
 
6161
      BEGIN
6162
         SELECT pv.pv_id
6163
           INTO lv_pvid
6164
           FROM package_versions pv, packages pkg, release_content rc
6165
          WHERE pv.pkg_id = pkg.pkg_id
6166
            AND rc.rtag_id = rtagid
6167
            AND pv.pv_id = rc.pv_id
6168
            AND pkg.pkg_name = pkgname
6169
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
6170
      EXCEPTION
6171
           WHEN NO_DATA_FOUND
6172
           THEN
6173
                lv_pvid := 0;
6174
      END;
6175
 
6176
      citemcollection := in_list_varchar2 (metricstring, ';');
6177
 
6178
      FOR rownumber IN 1 .. citemcollection.COUNT
6179
      LOOP
6180
         rowcontent := citemcollection(rownumber);
6181
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
6182
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
6183
 
6184
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
6185
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
6186
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
6187
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
6188
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
6189
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
6190
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
6191
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
6192
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
6193
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
6194
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
6195
         END IF;
6196
      END LOOP;
6197
 
6198
      IF (lv_pvid > 0)
6199
      THEN
6200
         -- Delete any existing entries for this package version to makes sure our data is untainted
6201
         DELETE FROM package_metrics pm
6202
         WHERE pm.pv_id = lv_pvid;
6203
 
6204
         -- Insert the new data into the metrics table
6205
         INSERT INTO package_metrics
6206
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
6207
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
6208
                     )
6209
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
6210
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
6211
                     );
6212
 
6213
         -- Now update the Release_Metrics Table
6214
         update_release_metrics(rtagid);
6215
 
6216
         RETURN return_insert_success;
6217
      ELSE
6218
         RETURN return_insert_error;
6219
      END IF;
6220
   END;
6221
 
6222
/*-------------------------------------------------------------------------------------------------------*/
6223
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
6224
   IS
6225
      lv_totalpackages       NUMBER;
6226
      lv_autobuilt           NUMBER;
6227
      lv_linesofcode         NUMBER;
6228
      lv_unittested          NUMBER;
6229
      lv_autotested          NUMBER;
6230
      lv_numOfbranches       NUMBER;
6231
      lv_lastbuildtime       DATE;
6232
   BEGIN
6233
      IF (rtagid > 0)
6234
      THEN
6235
         -- Get the total number of packages in this release and the number of
6236
         -- those that are autobuilt
6237
         SELECT COUNT (DISTINCT rc.pv_id),
6238
                COUNT (DISTINCT autobuilt_qry.pv_id)
6239
           INTO lv_totalpackages, lv_autobuilt
6240
           FROM release_content rc,
6241
                package_versions pv,
6242
                (
6243
                 SELECT rc.pv_id
6244
                   FROM release_content rc,
6245
                        package_versions pv
6246
                  WHERE pv.is_autobuildable = 'Y'
6247
                    AND pv.pv_id = rc.pv_id
6248
                    AND rc.rtag_id = rtagid
6249
                ) autobuilt_qry
6250
          WHERE pv.pv_id = rc.pv_id
6251
            AND rc.rtag_id = rtagid
6252
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
6253
 
6254
         -- Get the build time of the last package built in this release and the
6255
         -- total number of lines of code
6256
         SELECT MAX(pm.created_stamp),
6257
                SUM(pm.code_lines)
6258
           INTO lv_lastbuildtime, lv_linesofcode
6259
           FROM package_metrics pm, release_content rc
6260
          WHERE pm.pv_id = rc.pv_id
6261
            AND rc.rtag_id = rtagid;
6262
 
6263
         -- Get the number of packages with unit tests in this release and the
6264
         -- number of those that are autotested
6265
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
6266
           FROM unit_tests ut,
6267
                release_content rc
6268
          WHERE ut.pv_id = rc.pv_id
6269
            AND rc.rtag_id = rtagid
6270
        AND ut.test_types_fk != 1;
6271
 
6272
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
6273
          FROM unit_tests ut,
6274
               release_content rc
6275
         WHERE ut.pv_id = rc.pv_id
6276
           AND rc.rtag_id = rtagid
6277
           AND ut.test_types_fk = 7;
6278
 
6279
 
6280
         -- Count the number of unique branches in the packages in this release.
6281
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
6282
--           FROM (
6283
--                SELECT pv_id,
6284
--                       regexp_substr(str, '[^,]+', 1, level) branch,
6285
--                       level lv,
6286
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
6287
--                  FROM (
6288
--                       SELECT pm.pv_id,
6289
--                              ','||pm.branch_list str
6290
--                         FROM package_metrics pm,
6291
--                              release_content rc
6292
--                        WHERE pm.pv_id = rc.pv_id
6293
--                          AND rc.rtag_id = rtagid
6294
--                       )
6295
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
6296
--                )
6297
--          WHERE lv != lg;
6298
 
6299
         UPDATE release_metrics rm
6300
            SET rm.total_packages = lv_totalpackages,
6301
                rm.autobuilt = lv_autobuilt,
6302
                rm.lines_of_code = lv_linesofcode,
6303
                rm.unit_tested = lv_unittested,
6304
                rm.autotested = lv_autotested,
6305
--                rm.branches = lv_numOfbranches,
6306
                rm.last_build_time = lv_lastbuildtime
6307
          WHERE rtag_id = rtagid;
6308
 
6309
         IF (SQL%ROWCOUNT = 0)
6310
         THEN
6311
            INSERT INTO release_metrics
6312
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6313
                         autotested, last_build_time
6314
                        )
6315
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6316
                         lv_autotested, lv_lastbuildtime
6317
                        );
6318
         END IF;
6319
--         IF (SQL%ROWCOUNT = 0)
6320
--         THEN
6321
--            INSERT INTO release_metrics
6322
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6323
--                         autotested, branches, last_build_time
6324
--                        )
6325
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6326
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
6327
--                        );
6328
--         END IF;
6329
--      ELSE
6330
--         raise_application_error (-20000, 'RtagId must be supplied.');
6331
      END IF;
6332
   END;
6333
/*-------------------------------------------------------------------------------------------------------*/
6334
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
6335
   IS
6336
      vcstypeid    NUMBER;
6337
      vcstag       VARCHAR2(32);
6338
      label        VARCHAR2(60);
6339
      srcpath      VARCHAR2(2000);
6340
      vcstypeid_cc NUMBER;
6341
      vcstypeid_uc NUMBER;
6342
   BEGIN
6343
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
6344
      -- what the primary key value is for the ClearCase VCS entry.
6345
      BEGIN
6346
         SELECT vt.vcs_type_id
6347
         INTO vcstypeid_cc
6348
         FROM VCS_TYPE vt
6349
         WHERE vt.tag = 'CC';
6350
         EXCEPTION
6351
            WHEN NO_DATA_FOUND THEN
6352
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
6353
      END;
6354
 
6355
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
6356
      -- what the primary key value is for the Uncontrolled VCS entry.
6357
      BEGIN
6358
         SELECT vt.vcs_type_id
6359
         INTO vcstypeid_uc
6360
         FROM VCS_TYPE vt
6361
         WHERE vt.tag = 'UC';
6362
         EXCEPTION
6363
            WHEN NO_DATA_FOUND THEN
6364
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
6365
      END;
6366
 
6367
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
6368
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
6369
      BEGIN
6370
         SELECT pv.pkg_label, pv.src_path,
6371
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
6372
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
6373
                 ELSE pv.vcs_type_id END) AS vcs_type_id
6374
         INTO label, srcpath, vcstypeid
6375
         FROM PACKAGE_VERSIONS pv
6376
         WHERE pv.pv_id = pvid;
6377
         EXCEPTION
6378
            WHEN NO_DATA_FOUND THEN
6379
               raise_application_error (-20000, 'Package Version Not Found!');
6380
      END;
6381
 
6382
      -- Get the VCS TAG for the VCS_TYPE_ID.
6383
      BEGIN
6384
         SELECT vt.tag
6385
         INTO vcstag
6386
         FROM VCS_TYPE vt
6387
         WHERE vt.vcs_type_id = vcstypeid;
6388
         EXCEPTION
6389
            WHEN NO_DATA_FOUND THEN
6390
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
6391
      END;
6392
 
6393
      -- Return value depending upon which VCS Tag is being used.
6394
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
6395
      CASE vcstag
6396
         WHEN 'CC' THEN
6397
            RETURN vcstag || '::' || srcpath || '::' || label;
6398
         WHEN 'SVN' THEN
6399
            RETURN vcstag || '::' || srcpath;
6400
         ELSE
6401
            RETURN vcstag || '::';
6402
      END CASE;
6403
 
6404
   END;
6405
/*-------------------------------------------------------------------------------------------------------*/
6406
 
6407
END pk_rmapi_test;
1374 dpurdie 6408
/
6409
--------------------------------------------------------
6410
--  DDL for Package Body PK_LICENCING
6411
--------------------------------------------------------
1373 dpurdie 6412
 
6413
  CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS
6414
 
6415
/*
6416
------------------------------
6417
||  Last Modified:  G.Huddy
6418
||  Modified Date:  19/Aug/2008
6419
||  Body Version:   1.0
6420
------------------------------
6421
*/
6422
 
6423
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6424
   BEGIN
6425
      IF IS_LICENCED(PvId, licenceId) = 0 THEN
6426
         -- Add entry to licencing table
6427
         INSERT INTO licencing (pv_id, licence)
6428
         VALUES (PvId, licenceId);
6429
 
6430
         -- log action
6431
         -- TODO
6432
      END IF;
6433
 
6434
   END;
6435
 
6436
/*-------------------------------------------------------------------------------------------------------*/
6437
 
6438
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6439
   BEGIN
6440
      IF NOT IS_LICENCED(PvId, licenceId) = 0 THEN
6441
         -- Delete entry from licencing table
6442
         DELETE FROM licencing
6443
         WHERE pv_id = PvId
6444
         AND licence = licenceId;
6445
 
6446
         -- log action
6447
         -- TODO
6448
      END IF;
6449
   END;
6450
 
6451
/*-------------------------------------------------------------------------------------------------------*/
6452
 
6453
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) IS
6454
 
6455
      CURSOR licencing_cur
6456
      IS
6457
         SELECT *
6458
         FROM licencing
6459
         WHERE pv_id = fromPvId;
6460
 
6461
      licencing_rec licencing_cur%ROWTYPE;
6462
 
6463
   BEGIN
6464
      -- For each licence association that the Last PV_ID had, create a similar
6465
      -- arrangement for the new PV_ID
6466
      -- NOTE that any additional licencing associations the new PV_ID has that the old one
6467
      -- does not have, are retained. The assumption is that the user has made those and so we do not
6468
      -- have any right to destroy them without asking them.
6469
      OPEN licencing_cur;
6470
 
6471
      FETCH licencing_cur
6472
      INTO licencing_rec;
6473
 
6474
      WHILE licencing_cur%FOUND
6475
      LOOP
6476
         ADD_LICENCE ( toPvId, licencing_rec.licence, UserId );
6477
 
6478
         FETCH licencing_cur
6479
         INTO licencing_rec;
6480
      END LOOP;
6481
   END;
6482
 
6483
/*-------------------------------------------------------------------------------------------------------*/
6484
 
6485
   FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER IS
6486
      found NUMBER;
6487
   BEGIN
6488
 
6489
      SELECT COUNT(*) INTO found
6490
      FROM licencing
6491
      WHERE pv_id = PvId
6492
      AND licence = LicenceId;
6493
 
6494
      RETURN found;
6495
   END;
6496
 
6497
/*-------------------------------------------------------------------------------------------------------*/
6498
 
6499
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) IS
6500
 
6501
      CURSOR licencing_cur
6502
      IS
6503
         SELECT *
6504
         FROM licencing
6505
         WHERE pv_id = PvId;
6506
 
6507
      licencing_rec licencing_cur%ROWTYPE;
6508
   BEGIN
6509
      -- For each licence association that the PV_ID had, remove it
6510
      OPEN licencing_cur;
6511
 
6512
      FETCH licencing_cur
6513
      INTO licencing_rec;
6514
 
6515
      WHILE licencing_cur%FOUND
6516
      LOOP
6517
         REMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );
6518
 
6519
         FETCH licencing_cur
6520
         INTO licencing_rec;
6521
      END LOOP;
6522
   END;
6523
 
6524
/*-------------------------------------------------------------------------------------------------------*/
6525
END PK_LICENCING;
1374 dpurdie 6526
/
6527
--------------------------------------------------------
6528
--  DDL for Package Body RM_ISSUES
6529
--------------------------------------------------------
1373 dpurdie 6530
 
6531
  CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS
6532
 
6533
-- Private Implementation -----------------------------------------------------
6534
 
6535
 
6536
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6537
	AS
6538
 
6539
	BEGIN
6540
		-- start boundary case
6541
		IF ( XXstart < XX ) THEN
6542
			RETURN 1;
6543
 
6544
		ELSIF ( XXstart = XX ) THEN
6545
 
6546
			-- need to consider YY
6547
			IF ( YYstart < YY ) THEN
6548
				RETURN 1;
6549
 
6550
			ELSIF ( YYstart = YY ) THEN
6551
 
6552
					-- need to consider ZZ
6553
					IF ( ZZstart <= ZZ ) THEN
6554
						RETURN 1;
6555
 
6556
					ELSE
6557
						RETURN 0;
6558
					END IF;
6559
 
6560
			ELSE
6561
				RETURN 0;
6562
			END IF;
6563
		ELSE
6564
			RETURN 0;
6565
		END IF;
6566
	EXCEPTION
6567
		WHEN OTHERS THEN
6568
			RETURN -1;
6569
	END;
6570
 
6571
 
6572
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6573
	AS
6574
 
6575
	BEGIN
6576
		-- end boundary case
6577
		IF ( XX < XXend ) THEN
6578
			RETURN 1;
6579
 
6580
		ELSIF ( XX = XXend ) THEN
6581
 
6582
			-- need to consider YY
6583
			IF ( YY < YYend ) THEN
6584
				RETURN 1;
6585
 
6586
			ELSIF ( YY = YYend ) THEN
6587
 
6588
					-- need to consider ZZ
6589
					IF ( ZZ <= ZZend ) THEN
6590
						RETURN 1;
6591
 
6592
					ELSE
6593
						RETURN 0;
6594
					END IF;
6595
			ELSE
6596
 
6597
				RETURN 0;
6598
			END IF;
6599
		ELSE
6600
			RETURN 0;
6601
		END IF;
6602
	EXCEPTION
6603
		WHEN OTHERS THEN
6604
			RETURN -1;
6605
	END;
6606
 
6607
	/*
6608
	-	version format:		XX.YY.ZZ.abc
6609
	*/
6610
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER
6611
	AS
6612
		XXstart		NUMBER	:=	0;
6613
		XXend		NUMBER	:=	0;
6614
		XX			NUMBER	:=	0;
6615
		YYstart		NUMBER	:=	0;
6616
		YYend		NUMBER	:=	0;
6617
		YY			NUMBER	:=	0;
6618
		ZZstart		NUMBER	:=	0;
6619
		ZZend		NUMBER	:=	0;
6620
		ZZ			NUMBER	:=	0;
6621
		first_dot	NUMBER	:=	0;
6622
		second_dot	NUMBER	:=	0;
6623
		third_dot	NUMBER	:=	0;
6624
 
6625
		ProjExtstart	VARCHAR2(10);
6626
		ProjExtend		VARCHAR2(10);
6627
		ProjExt			VARCHAR2(10);
6628
 
6629
	BEGIN
6630
		-- strip the version number
6631
		first_dot :=  INSTR(version_start, '.', 1, 1);
6632
		second_dot :=  INSTR(version_start, '.', 1, 2);
6633
		third_dot :=  INSTR(version_start, '.', 1, 3);
6634
 
6635
		XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );
6636
		YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6637
		ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6638
		ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );
6639
 
6640
		first_dot :=  INSTR(version_end, '.', 1, 1);
6641
		second_dot :=  INSTR(version_end, '.', 1, 2);
6642
		third_dot :=  INSTR(version_end, '.', 1, 3);
6643
 
6644
		XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );
6645
		YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6646
		ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6647
		ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );
6648
 
6649
		first_dot :=  INSTR(version, '.', 1, 1);
6650
		second_dot :=  INSTR(version, '.', 1, 2);
6651
		third_dot :=  INSTR(version, '.', 1, 3);
6652
 
6653
		XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );
6654
		YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6655
		ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6656
		ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );
6657
 
6658
		-- only include versions if all project extensions are the same
6659
		IF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THEN
6660
 
6661
			IF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THEN
6662
				RETURN 1;
6663
			ELSE
6664
				RETURN 0;
6665
			END IF;
6666
		ELSE
6667
			RETURN 0;
6668
		END IF;
6669
 
6670
	EXCEPTION
6671
		WHEN OTHERS THEN
6672
			RETURN -1;
6673
	END;
6674
 
6675
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER
6676
	AS
6677
	    pkg_id NUMBER;
6678
	BEGIN
6679
		SELECT
6680
			p.PKG_ID
6681
		INTO
6682
			pkg_id
6683
		FROM
6684
			PACKAGES p
6685
		WHERE
6686
			p.PKG_NAME = pkgName;
6687
 
6688
		RETURN pkg_id;
6689
	EXCEPTION
6690
	    WHEN OTHERS THEN
6691
			dbms_output.put_line('GetPkgId exception: ' || SQLERRM );
6692
			RETURN -1;
6693
	END;
6694
 
6695
 
6696
-- Public Implementation ------------------------------------------------------
6697
 
6698
	/*
6699
	-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep
6700
	--
6701
	-- INPUT PARAMETERS:
6702
	--
6703
	--		pkg_name  	-  	The name of the top level package to get issues for
6704
	--		version_start	-	The start version for the comparison
6705
	--		version_end	-	The end version for the comparison
6706
	*/
6707
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6708
	AS
6709
		pkgId	NUMBER;
6710
	BEGIN
6711
		-- get pkg_id of the input package:
6712
		pkgId := GetPkgId( pkg_name );
6713
 
6714
		OPEN vCursor FOR
6715
		SELECT
6716
			  pv.PKG_ID,
6717
			  pv.PKG_VERSION,
6718
			  pv.PV_ID,
6719
			  i_pkg.ISS_ID,
6720
			  ( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,
6721
			  pd.DPKG_ID,
6722
			  ( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,
6723
			  pd.DPV_ID,
6724
			  i_dpkg.ISS_ID AS ISSUE_ID
6725
		FROM
6726
			 PACKAGE_VERSIONS pv
6727
							  LEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_ID
6728
							  LEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_ID
6729
							  LEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_ID
6730
		WHERE
6731
   			 pv.PKG_ID = pkgId
6732
		AND
6733
			VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1
6734
		AND
6735
			 ( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )
6736
		ORDER BY
6737
			 pv.PKG_ID,
6738
			 pv.PV_ID,
6739
			 pd.DPKG_ID,
6740
			 pd.DPV_ID;
6741
	EXCEPTION
6742
		WHEN OTHERS THEN
6743
			dbms_output.put_line('AllIssues exception: ' || SQLERRM );
6744
	END;
6745
 
6746
 
6747
	-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok
6748
 
6749
	/*
6750
	-- Proc: LoadIssuesTable
6751
	--
6752
	-- Populates Package_Issues table with details of issues from all dependent packages.
6753
	-- This will be for all package versions of the input pkg_name between the
6754
	-- version_start and version_end.
6755
	--
6756
	-- INPUT PARAMETERS:
6757
	--
6758
	--		pkg_name  	-  	The name of the top level package to get issues for
6759
	--		version_start	-	The start version for the comparison
6760
	--		version_end	-	The end version for the comparison
6761
	*/
6762
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6763
	AS
6764
		pkgId	NUMBER;
6765
 
6766
		CURSOR pack_vers_cur IS
6767
			SELECT
6768
				pv.PV_ID,
6769
				pv.PKG_VERSION,
6770
				pv.PKG_ID,
6771
				p.PKG_NAME
6772
			FROM
6773
				PACKAGE_VERSIONS pv
6774
					JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6775
			WHERE
6776
   				 pv.PKG_ID = pkgId
6777
			AND
6778
				VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;
6779
 
6780
	BEGIN
6781
		DELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6782
 
6783
		-- get the pkg_id we are finding issues for
6784
		pkgId := GetPkgId( pkg_name );
6785
 
6786
		-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.
6787
		FOR pack_ver_rec IN  pack_vers_cur
6788
		LOOP
6789
			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 );
6790
			COMMIT;
6791
		END LOOP;
6792
 
6793
		-- The output cursor - shows the individual versions of the top level package then were reported on
6794
		OPEN vCursor FOR
6795
		SELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6796
/*removed
6797
		SELECT
6798
			PKG_VERSION
6799
		FROM
6800
			RELEASE_MANAGER.RM_PACKAGE_ISSUES;
6801
*/
6802
 
6803
 
6804
	EXCEPTION
6805
		WHEN OTHERS THEN
6806
			dbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );
6807
	END;
6808
 
6809
 
6810
	/*
6811
	-- Proc: InsertIssuesForDepends
6812
	--
6813
	-- Used by LoadIssuesTable to recursively find issues for all dependent packages
6814
	--
6815
	-- INPUT PARAMETERS:
6816
	--
6817
	--		pvID  		-  	The package version id of the package to get issues for
6818
	--		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)
6819
	--		top_pkgName -  	The package name of the top level package
6820
	--		top_pvID  	-  	The package version id of the top level package
6821
	--		top_pkgVer  -  	The package version description of the top level package
6822
	*/
6823
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )
6824
	AS
6825
		pkgId		NUMBER;
6826
		issCnt		NUMBER := 0;
6827
		pkgCheck	NUMBER := 0;
6828
		depCheck	NUMBER := 0;
6829
 
6830
		dpkgName	VARCHAR(50);
6831
		dpkgVersion	VARCHAR(50);
6832
 
6833
		CURSOR dep_packs_cur IS
6834
			SELECT
6835
				DPV_ID
6836
			FROM
6837
				PACKAGE_DEPENDENCIES
6838
			WHERE
6839
				PV_ID = pvID;
6840
 
6841
	BEGIN
6842
 
6843
		-- check to see if the package has been processed previously
6844
		SELECT
6845
			COUNT(*)
6846
		INTO
6847
			pkgCheck
6848
		FROM
6849
			RM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6850
		WHERE
6851
			DPV_ID = pvID;
6852
 
6853
		dbms_output.put_line('pkgCheck: ' || pkgCheck );
6854
 
6855
		-- Package not already processed (no cyclic dependency) - process it
6856
		IF ( pkgCheck = 0 ) THEN
6857
 
6858
			-- check to see if this package version has any issues assigned to it
6859
			SELECT
6860
				COUNT(*)
6861
			INTO
6862
				issCnt
6863
			FROM
6864
				CQ_ISSUES i
6865
			WHERE
6866
				i.PV_ID = pvID;
6867
 
6868
			dbms_output.put_line('issCnt: ' || issCnt );
6869
 
6870
			-- Always enter a marker row into the table even if there are no issues for the package.
6871
			-- This allows us to pick up any cyclic dependencies.
6872
			IF ( issCnt > 0 ) THEN
6873
				-- get issues and insert into RM_PACKAGE_ISSUES
6874
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6875
 
6876
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6877
					SELECT DISTINCT
6878
						top_pkgID		AS PKG_ID,
6879
						top_pkgName		AS PKG_NAME,
6880
						top_pvID		AS PV_ID,
6881
						top_pkgVer		AS PKG_VERSION,
6882
						pv.PV_ID		AS DPV_ID,
6883
						p.PKG_NAME		AS DPKG_NAME,
6884
						pv.PKG_VERSION	AS DPKG_VERSION,
6885
						ci.ISS_DB,
6886
						ci.ISS_ID
6887
					FROM
6888
						PACKAGE_VERSIONS pv
6889
							JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6890
							JOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_ID
6891
					WHERE
6892
						pv.PV_ID = pvID;
6893
 
6894
			ELSE
6895
				-- get the dpkg details - there will always be a row returned here
6896
				SELECT
6897
					p.PKG_NAME
6898
				INTO
6899
					dpkgName
6900
				FROM
6901
					PACKAGE_VERSIONS pv
6902
						JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6903
				WHERE
6904
	   				 pv.PV_ID = pvID;
6905
 
6906
				SELECT
6907
					pv.PKG_VERSION
6908
				INTO
6909
					dpkgVersion
6910
				FROM
6911
					PACKAGE_VERSIONS pv
6912
				WHERE
6913
	   				 pv.PV_ID = pvID;
6914
 
6915
				-- enter a marker row
6916
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6917
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6918
				VALUES (
6919
					top_pkgID,
6920
					top_pkgName,
6921
					top_pvID,
6922
					top_pkgVer,
6923
					pvID,
6924
					dpkgName,
6925
					dpkgVersion,
6926
					NULL,
6927
					NULL );
6928
 
6929
			END IF;
6930
 
6931
			-- If this package version has dependencies then recurse
6932
			SELECT
6933
				COUNT(*)
6934
			INTO
6935
				depCheck
6936
			FROM
6937
				PACKAGE_DEPENDENCIES
6938
			WHERE
6939
				PV_ID = pvID;
6940
 
6941
			IF ( depCheck > 0 ) THEN
6942
				-- get dependencies and call this function recursively for each one
6943
				FOR dep_rec IN  dep_packs_cur
6944
				LOOP
6945
					InsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );
6946
				END LOOP;
6947
 
6948
			END IF;
6949
 
6950
		END IF;
6951
 
6952
	/*EXCEPTION
6953
		WHEN OTHERS THEN
6954
			no exception handling required
6955
	*/
6956
	END;
6957
 
6958
END Rm_Issues;
1374 dpurdie 6959
/
6960
--------------------------------------------------------
6961
--  DDL for Package Body PK_RELEASE_TEST
6962
--------------------------------------------------------
1373 dpurdie 6963
 
6964
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE_TEST" IS
6965
 
6966
 
6967
/*
6968
------------------------------
6969
||  Last Modified:  S.Vukovic
6970
||  Modified Date:  12/Sep/2005
6971
||  Body Version:   3.0
6972
------------------------------
6973
*/
6974
 
6975
 
6976
/*-------------------------------------------------------------------------------------------------------*/
6977
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
6978
 
6979
RtagId NUMBER;
6980
ParentRtagId NUMBER;
6981
RecCount NUMBER := 0;
6982
 
6983
 
6984
BEGIN
6985
	/*--------------- Business Rules Here -------------------*/
6986
	-- Check for missing parameters
6987
	IF (sReleaseName IS NULL) OR (nUserId IS NULL)
6988
	THEN
6989
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
6990
 
6991
	END IF;
6992
 
6993
 
6994
	-- Check for duplicate Release Names
6995
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
6996
	  FROM RELEASE_TAGS rt
6997
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
6998
	   AND rt.PROJ_ID = nProjId;
6999
 
7000
	IF (RecCount > 0) THEN
7001
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7002
	END IF;
7003
	/*-------------------------------------------------------*/
7004
 
7005
 
7006
	-- Get rtag_id
7007
	SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
7008
 
7009
 
7010
 
7011
	-- Get Parent RtagId
7012
	ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
7013
 
7014
 
7015
	-- Create new release
7016
	INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID, 
7017
							   OFFICIAL, REBUILD_ENV, REBUILD_STAMP, 
7018
							   PARENT_RTAG_ID, PROJ_ID )
7019
	VALUES ( RtagId, 
7020
			 sReleaseName, 
7021
			 sReleaseComments,
7022
			 ORA_SYSDATE,
7023
			 nUserId,
7024
			 'N',
7025
			 'N',
7026
			 0,
7027
			 ParentRtagId,
7028
			 nProjId );
7029
 
7030
	-- Update display Order
7031
	UPDATE_DISPLAY_ORDER ( nProjId );
7032
 
7033
	/* Log Project Action */
7034
	Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
7035
 
7036
 
7037
	-- Import Release Contents
7038
	IF (NOT nSourceRtagId IS NULL) THEN
7039
		Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
7040
 
7041
	END IF;
7042
 
7043
 
7044
 
7045
END;
7046
/*-------------------------------------------------------------------------------------------------------*/
7047
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
7048
 
7049
 
7050
BEGIN
7051
 
7052
 
7053
	/*--------------- Business Rules Here -------------------*/
7054
	/*-------------------------------------------------------*/
7055
 
7056
	UPDATE RELEASE_TAGS urt SET
7057
	urt.DISPLAY_ORDER = (
7058
						SELECT qry.REC_NUM
7059
						  FROM (	
7060
								SELECT rel.*, ROWNUM AS REC_NUM
7061
								  FROM (
7062
 
7063
								  		SELECT rt.RTAG_ID, 
7064
											   rt.DISPLAY_ORDER,
7065
										       DECODE( rt.PARENT_RTAG_ID, 
7066
											   		   rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
7067
										  FROM RELEASE_TAGS rt
7068
										 WHERE rt.PROJ_ID = nProjId 
7069
 
7070
								  		) rel
7071
								START WITH rel.PARENT_RTAG_ID = 0
7072
								CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID   
7073
								ORDER SIBLINGS BY rel.DISPLAY_ORDER
7074
								) qry
7075
					      WHERE qry.RTAG_ID = urt.RTAG_ID 								
7076
						)
7077
	WHERE urt.PROJ_ID = nProjId;
7078
 
7079
END;
7080
/*-------------------------------------------------------------------------------------------------------*/
7081
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
7082
 
7083
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();						 
7084
	SeqNum NUMBER;
7085
 
7086
BEGIN
7087
 
7088
 
7089
	/*--------------- Business Rules Here -------------------*/
7090
	/*-------------------------------------------------------*/
7091
 
7092
	nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
7093
 
7094
	-- Set start sequence number
7095
	SeqNum := 1;
7096
 
7097
	FOR i IN 1..nIdCollector.COUNT
7098
	LOOP
7099
 
7100
		-- Update new display order
7101
		UPDATE RELEASE_TAGS rt SET
7102
			rt.DISPLAY_ORDER = SeqNum
7103
		 WHERE rt.PROJ_ID = nProjId
7104
		   AND rt.RTAG_ID = nIdCollector(i);
7105
 
7106
		SeqNum := SeqNum + 1;
7107
 
7108
	END LOOP;
7109
 
7110
END;
7111
/*-------------------------------------------------------------------------------------------------------*/
7112
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
7113
 
7114
RecCount NUMBER := 0;
7115
ProjId NUMBER;
7116
 
7117
BEGIN
7118
 
7119
 
7120
	/*--------------- Business Rules Here -------------------*/
7121
	-- Check for missing parameters
7122
	IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
7123
	THEN
7124
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
7125
 
7126
	END IF;
7127
 
7128
 
7129
	-- Check for duplicate Release Names
7130
	SELECT rt.PROJ_ID INTO ProjId
7131
	  FROM RELEASE_TAGS rt
7132
	 WHERE rt.RTAG_ID = nRtagId;
7133
 
7134
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
7135
	  FROM RELEASE_TAGS rt
7136
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
7137
	   AND rt.RTAG_ID != nRtagId
7138
	   AND rt.PROJ_ID = ProjId;
7139
 
7140
 
7141
	IF (RecCount > 0) THEN
7142
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7143
	END IF;
7144
	/*-------------------------------------------------------*/
7145
 
7146
 
7147
 
7148
	-- Update release details
7149
	UPDATE RELEASE_TAGS rt SET
7150
	rt.RTAG_NAME = sReleaseName,
7151
	rt.DESCRIPTION = sReleaseComments,
7152
	rt.PARENT_RTAG_ID = nParentRtagId,
7153
	rt.ASSOC_MASS_REF = nMASSRtagId,
7154
	rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch
7155
	WHERE rt.RTAG_ID = nRtagId; 
7156
 
7157
	-- Update display Order
7158
	UPDATE_DISPLAY_ORDER ( ProjId );
7159
 
7160
	/* Log Project Action */
7161
	Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
7162
 
7163
 
7164
 
7165
 
7166
END;
7167
/*-------------------------------------------------------------------------------------------------------*/
7168
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7169
 
7170
	RecCount NUMBER := 0;
7171
	sReleaseId VARCHAR2(4000);
7172
	ProjId NUMBER;
7173
 
7174
BEGIN
7175
	/*--------------- Business Rules Here -------------------*/
7176
	IF (nRtagId IS NULL) 
7177
	THEN
7178
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7179
	END IF;
7180
 
7181
 
7182
 
7183
	-- Check for any kids
7184
	SELECT COUNT( rt.RTAG_ID ) INTO RecCount
7185
	  FROM RELEASE_TAGS rt
7186
	 WHERE rt.PARENT_RTAG_ID = nRtagId
7187
	   AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
7188
 
7189
	IF (RecCount > 0) THEN
7190
		RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
7191
	END IF; 
7192
	/*-------------------------------------------------------*/
7193
 
7194
	-- Clear the release contents
7195
	Clean_Release_Contents ( nRtagId, nUserId );
7196
 
7197
	/* Log Project Action */
7198
	SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
7199
	  FROM RELEASE_TAGS rt
7200
	 WHERE rt.RTAG_ID = nRtagId;
7201
 
7202
	Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
7203
 
7204
 
7205
	-- Remove Release
7206
	DELETE 
7207
	  FROM RELEASE_TAGS rt
7208
	 WHERE rt.RTAG_ID = nRtagId;
7209
 
7210
 
7211
 
7212
END;
7213
/*-------------------------------------------------------------------------------------------------------*/
7214
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
7215
 
7216
	sSourceLocation VARCHAR2(4000);
7217
	sTargetLocation VARCHAR2(4000);
7218
	ProjId NUMBER;
7219
	cReleaseMode CHAR(1);
7220
 
7221
 
7222
BEGIN
7223
	/*--------------- Business Rules Here -------------------*/
7224
	IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
7225
	THEN
7226
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
7227
	END IF;
7228
 
7229
	IF (nSourceRtagId = nTargetRtagId) THEN
7230
		RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
7231
	END IF;
7232
 
7233
 
7234
	-- Check if Target release is in OPEN mode
7235
	SELECT rt.OFFICIAL  INTO  cReleaseMode
7236
	  FROM RELEASE_TAGS rt
7237
	 WHERE rt.RTAG_ID = nTargetRtagId;
7238
 
7239
	IF (cReleaseMode != 'N') THEN
7240
		RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
7241
	END IF;	 
7242
 
7243
	/*-------------------------------------------------------*/
7244
 
7245
	-- Clean target contents
7246
	Clean_Release_Contents ( nTargetRtagId, nUserId );
7247
 
7248
 
7249
	-- Import Released Area Contents
7250
	INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE ) 
7251
	SELECT nTargetRtagId AS RTAG_ID, 
7252
		   rc.PV_ID, 
7253
		   rc.BASE_VIEW_ID, 
7254
		   rc.INSERT_STAMP, 
7255
		   rc.INSERTOR_ID, 
7256
		   rc.PKG_STATE
7257
	  FROM RELEASE_CONTENT rc
7258
	 WHERE rc.RTAG_ID = nSourceRtagId;
7259
 
7260
 
7261
	-- Import Ignore Warning states
7262
	INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
7263
	SELECT nTargetRtagId AS RTAG_ID,
7264
	       igw.PV_ID,
7265
	       igw.DPV_ID
7266
	  FROM IGNORE_WARNINGS igw
7267
	 WHERE igw.rtag_id = nSourceRtagId;
7268
 
7269
 
7270
	/* Log Project Action */
7271
	-- Get Source Location
7272
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
7273
	  FROM RELEASE_TAGS rt,
7274
	  	   PROJECTS pr
7275
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7276
	   AND rt.RTAG_ID = nSourceRtagId;
7277
 
7278
	-- Get Target Location
7279
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
7280
	  FROM RELEASE_TAGS rt,
7281
	  	   PROJECTS pr
7282
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7283
	   AND rt.RTAG_ID = nTargetRtagId;	   
7284
 
7285
	-- Get project id   
7286
	SELECT rt.PROJ_ID  INTO  ProjId
7287
	  FROM RELEASE_TAGS rt
7288
	 WHERE rt.RTAG_ID = nTargetRtagId;   
7289
 
7290
	Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );	
7291
 
7292
 
7293
END;
7294
/*-------------------------------------------------------------------------------------------------------*/
7295
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7296
 
7297
	RecCount NUMBER;
7298
 
7299
BEGIN
7300
	/*--------------- Business Rules Here -------------------*/
7301
	IF (nRtagId IS NULL) 
7302
	THEN
7303
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7304
	END IF;
7305
 
7306
 
7307
	-- Check if other release references this release
7308
	SELECT COUNT( rl.RTAG_ID ) INTO RecCount
7309
	  FROM RELEASE_LINKS rl
7310
	 WHERE rl.REF_RTAG_ID = nRtagId;
7311
 
7312
	IF (RecCount > 0) THEN
7313
		RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
7314
	END IF; 	
7315
	/*-------------------------------------------------------*/
7316
 
7317
	-- Delete Release links
7318
	DELETE 
7319
	  FROM RELEASE_LINKS rl
7320
	 WHERE rl.RTAG_ID = nRtagId;
7321
 
7322
	-- Delete ignore warning
7323
	DELETE 
7324
	  FROM IGNORE_WARNINGS iw
7325
	 WHERE iw.RTAG_ID = nRtagId;
7326
 
7327
 
7328
	-- Delete Build Order cached calculations	  
7329
	DELETE
7330
	  FROM BUILD_ORDER bo
7331
	 WHERE bo.RTAG_ID = nRtagId;
7332
 
7333
 
7334
	-- Delete Notification History
7335
	DELETE
7336
	  FROM NOTIFICATION_HISTORY nh
7337
	 WHERE nh.RTAG_ID = nRtagId;
7338
 
7339
 
7340
	-- Delete Released Area Contents
7341
	DELETE
7342
	  FROM RELEASE_CONTENT rc
7343
	 WHERE rc.RTAG_ID = nRtagId;
7344
 
7345
 
7346
	-- Delete Work In Progress Area Contents
7347
	DELETE
7348
	  FROM WORK_IN_PROGRESS wip
7349
	 WHERE wip.RTAG_ID = nRtagId;
7350
 
7351
 
7352
	-- Delete Pending Area Contents
7353
	DELETE 
7354
	  FROM PLANNED pl
7355
	 WHERE pl.RTAG_ID = nRtagId;
7356
 
7357
 
7358
END;
7359
/*-------------------------------------------------------------------------------------------------------*/
7360
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
7361
 
7362
	nSourceParentRtagId NUMBER;
7363
 
7364
BEGIN
7365
	/*--------------- Business Rules Here -------------------*/
7366
	IF (nRtagId IS NULL) OR (cIsBranch IS NULL)  
7367
	THEN
7368
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
7369
	END IF;
7370
	/*-------------------------------------------------------*/
7371
 
7372
 
7373
	IF ( nSourceRtagId IS NULL ) THEN
7374
		-- Create new on main branch
7375
		RETURN nRtagId;
7376
 
7377
	ELSE
7378
		-- Create from source rtag_id
7379
 
7380
		-- Find parent of Source RtagId
7381
		SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
7382
		  FROM RELEASE_TAGS rt
7383
		 WHERE rt.RTAG_ID = nSourceRtagId;
7384
 
7385
		IF (UPPER(cIsBranch) = 'Y') THEN
7386
			RETURN nSourceRtagId;
7387
		ELSE
7388
			IF (nSourceRtagId = nSourceParentRtagId) THEN
7389
				RETURN nRtagId;
7390
			ELSE
7391
				RETURN nSourceParentRtagId;
7392
			END IF;
7393
		END IF;	
7394
 
7395
 
7396
	END IF;
7397
 
7398
 
7399
END;
7400
/*-------------------------------------------------------------------------------------------------------*/
7401
 
7402
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
7403
-- 							 sNextVersion OUT VARCHAR2,
7404
-- 							 nNextLifeCycle OUT NUMBER,
7405
-- 							 nParentRtagId OUT NUMBER,
7406
-- 							 nProjId IN NUMBER ) IS
7407
-- 							
7408
-- SourceBranchCount NUMBER;
7409
-- ProjRootVersion VARCHAR2(4000);
7410
-- LastLifeCycle NUMBER;
7411
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
7412
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
7413
-- 
7414
-- SourceProjId NUMBER; 
7415
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
7416
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
7417
-- 
7418
-- BEGIN
7419
-- 	/*--------------- Business Rules Here -------------------*/
7420
-- 	/*-------------------------------------------------------*/
7421
-- 	
7422
-- 	   
7423
-- 	BEGIN
7424
-- 		-- Get Project root version
7425
-- 		SELECT rt.RTAG_VERSION INTO ProjRootVersion
7426
-- 		  FROM RELEASE_TAGS rt
7427
-- 		 WHERE rt.PROJ_ID = nProjId
7428
-- 		   AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
7429
-- 	   
7430
-- 		EXCEPTION
7431
-- 		WHEN NO_DATA_FOUND THEN
7432
-- 		ProjRootVersion := ROOT_VERSION_NOT_FOUND;
7433
-- 	END;		   
7434
-- 	
7435
-- 	
7436
-- 	
7437
-- 	 
7438
-- 	BEGIN
7439
-- 		-- Get info for source rtagid
7440
-- 		SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
7441
-- 		  FROM RELEASE_TAGS rt
7442
-- 		 WHERE rt.RTAG_ID = nSourceRtagId;	
7443
-- 	   
7444
-- 		EXCEPTION
7445
-- 		WHEN NO_DATA_FOUND THEN
7446
-- 		SourceProjId := NULL;
7447
-- 		SourceVersion := NULL;
7448
-- 		SourceLifeCycle := NULL;
7449
-- 	END;	  
7450
-- 	
7451
-- 	
7452
-- 	IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
7453
-- 	
7454
-- 		/* Blank Release Required  OR  Release imported from other project */
7455
-- 		
7456
-- 		IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
7457
-- 			/* No Releases found in the project, hence calculate next version available.  */
7458
-- 			
7459
-- 			-- Set parent rtag
7460
-- 			nParentRtagId := SET_PARENT_AS_YOURSELF;
7461
-- 			
7462
-- 			
7463
-- 			BEGIN
7464
-- 				-- Get Next Available Global Root Version 
7465
-- 				SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
7466
-- 				  FROM RELEASE_TAGS rt
7467
-- 				 WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
7468
-- 				
7469
-- 				-- Set Next Rtag Version
7470
-- 				sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
7471
-- 				
7472
-- 				-- Restart Lifecycle
7473
-- 				nNextLifeCycle := 0;
7474
-- 				
7475
-- 				
7476
-- 				EXCEPTION
7477
-- 				WHEN NO_DATA_FOUND THEN
7478
-- 				-- Release Manager has no releases, hence start from 1
7479
-- 				sNextVersion := '1';
7480
-- 				nNextLifeCycle := 0;
7481
-- 				
7482
-- 			END;
7483
-- 			
7484
-- 			
7485
-- 					
7486
-- 		ELSE
7487
-- 			/* Releases found in this project. */
7488
-- 							   
7489
-- 			SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
7490
-- 			  FROM (
7491
-- 					SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
7492
-- 					  FROM RELEASE_TAGS rt
7493
-- 					 WHERE rt.PROJ_ID = nProjId
7494
-- 					   AND rt.RTAG_VERSION = ProjRootVersion 
7495
-- 					 ORDER BY rt.RTAG_LIFE_CYCLE DESC
7496
-- 			  		) qry
7497
-- 			 WHERE ROWNUM = 1;		
7498
-- 
7499
-- 			
7500
-- 			-- Set same Rtag Version
7501
-- 			sNextVersion := ProjRootVersion;
7502
-- 			
7503
-- 			-- Increase Lifecycle
7504
-- 			nNextLifeCycle := LastLifeCycle + 1;
7505
-- 		
7506
-- 		END IF;
7507
-- 				
7508
-- 	
7509
-- 		
7510
-- 	ELSE
7511
-- 		/* Create Release From other release within this project */
7512
-- 		
7513
-- 		-- Set parent id
7514
-- 		nParentRtagId := nSourceRtagId;
7515
-- 		
7516
-- 		
7517
-- 		-- Get number of source branches
7518
-- 		SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
7519
-- 		  FROM RELEASE_TAGS rt
7520
-- 		 WHERE rt.PROJ_ID = nProjId
7521
-- 		   AND rt.PARENT_RTAG_ID = nSourceRtagId;		   
7522
-- 		   
7523
-- 		   
7524
-- 		IF SourceBranchCount = 0 THEN
7525
-- 			/* Release is Head (i.e. Tip on its branch ) */
7526
-- 			
7527
-- 			-- Set Next Rtag Version
7528
-- 			sNextVersion := SourceVersion;
7529
-- 			
7530
-- 			-- Increase Lifecycle
7531
-- 			nNextLifeCycle := SourceLifeCycle + 1;
7532
-- 			
7533
-- 			
7534
-- 		ELSIF SourceBranchCount = 1 THEN
7535
-- 			/* Release IS NOT Head, but can be branched */
7536
-- 			
7537
-- 			-- Set Next Rtag Version
7538
-- 			sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
7539
-- 			
7540
-- 			-- Reset Lifecycle to 1
7541
-- 			nNextLifeCycle := 1;
7542
-- 			
7543
-- 			
7544
-- 		ELSE	
7545
-- 			-- Limit of two branches is reached
7546
-- 			RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');		
7547
-- 			
7548
-- 		END IF;	
7549
-- 			
7550
-- 			
7551
-- 		
7552
-- 		
7553
-- 		
7554
-- 	
7555
-- 	END IF;
7556
-- 	
7557
-- 		
7558
-- END;
7559
 
7560
/*-------------------------------------------------------------------------------------------------------*/
7561
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
7562
 
7563
	IsBaseView CHAR(1);
7564
 
7565
BEGIN
7566
 
7567
	-- Check if the view is BASE VIEW
7568
	SELECT vi.BASE_VIEW INTO IsBaseView
7569
	  FROM VIEWS vi
7570
	 WHERE vi.VIEW_ID = ViewId;
7571
 
7572
	IF (IsBaseView = 'Y') THEN 
7573
		-- Get Base view content
7574
		OPEN RecordSet FOR
7575
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7576
			   pv.pv_id, 
7577
			   pkg.pkg_name, 
7578
			   pv.pkg_version, 
7579
			   pv.dlocked, 
7580
			   pv.pv_description,
7581
			   pv.BUILD_TYPE
7582
		  FROM release_content rel,
7583
		       packages pkg,
7584
		       package_versions pv
7585
		 WHERE pv.pkg_id = pkg.pkg_id
7586
		   AND rel.pv_id = pv.pv_id
7587
		   AND rel.BASE_VIEW_ID = ViewId
7588
		   AND rel.RTAG_ID = RtagId
7589
		 ORDER BY UPPER(pkg.PKG_NAME);
7590
 
7591
	ELSE	 
7592
 
7593
	 	-- Get non base view content
7594
		OPEN RecordSet FOR
7595
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7596
			   pv.pv_id, 
7597
			   pkg.pkg_name, 
7598
			   pv.pkg_version, 
7599
			   pv.dlocked, 
7600
			   pv.pv_description,
7601
			   pv.BUILD_TYPE
7602
		  FROM release_content rel,
7603
		       packages pkg,
7604
		       package_versions pv,
7605
			   VIEW_DEF vd
7606
		 WHERE pv.pkg_id = pkg.pkg_id
7607
		   AND rel.pv_id = pv.pv_id
7608
		   AND vd.VIEW_ID = ViewId
7609
		   AND vd.PKG_ID = pv.PKG_ID
7610
		   AND rel.RTAG_ID = RtagId
7611
		 ORDER BY UPPER(pkg.PKG_NAME);		 
7612
 
7613
	END IF;	 	 
7614
 
7615
 
7616
 
7617
 
7618
END;
7619
/*-------------------------------------------------------------------------------------------------------*/
7620
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7621
 
7622
	ReleaseLocation VARCHAR2(4000);
7623
	sPkgVersion VARCHAR2(4000);
7624
	nPkgId NUMBER;
7625
	sVExt VARCHAR2(4000);
7626
	IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
7627
 
7628
	-- Find package for replacement
7629
	CURSOR curReplacePkg IS
7630
    SELECT pv.PV_ID
7631
	  FROM RELEASE_CONTENT rc,
7632
	  	   PACKAGE_VERSIONS pv
7633
	 WHERE rc.PV_ID = pv.PV_ID
7634
	   AND rc.RTAG_ID = RtagId
7635
	   AND pv.PKG_ID = nPkgId
7636
	   AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
7637
    recReplacePkg curReplacePkg%ROWTYPE;
7638
 
7639
BEGIN
7640
 
7641
	-- Get is_patch, pkg_id and v_ext
7642
	SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
7643
	  FROM PACKAGE_VERSIONS pv
7644
	 WHERE pv.PV_ID = newPvId;
7645
 
7646
 
7647
	-- Never put patch in relesed area
7648
	IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
7649
 
7650
		-- Try to get a package to be replaced with this new one.
7651
		-- Use unique constraint of PKG_ID and V_EXT
7652
		OPEN curReplacePkg;
7653
	    FETCH curReplacePkg INTO recReplacePkg;
7654
 
7655
	    IF curReplacePkg%FOUND THEN
7656
			-- Replace package
7657
			REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
7658
 
7659
		ELSE
7660
			-- Add new package
7661
			INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
7662
			VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
7663
 
7664
 
7665
		    /* LOG ACTION */
7666
			SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7667
			  FROM PROJECTS proj,
7668
			  	   RELEASE_TAGS rt
7669
			 WHERE rt.PROJ_ID = proj.PROJ_ID
7670
			   AND rt.RTAG_ID = RtagId;
7671
 
7672
			SELECT pv.PKG_VERSION INTO sPkgVersion
7673
			  FROM PACKAGE_VERSIONS pv
7674
			 WHERE pv.PV_ID = newPvId;
7675
 
7676
			Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7677
 
7678
 
7679
		END IF;
7680
 
7681
		CLOSE curReplacePkg;
7682
 
7683
	END IF;
7684
 
7685
END;
7686
/*-------------------------------------------------------------------------------------------------------*/
7687
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7688
 
7689
	ReleaseLocation VARCHAR2(4000);
7690
	sPkgVersion VARCHAR2(4000);
7691
 
7692
BEGIN
7693
 
7694
	-- Replace Package
7695
    UPDATE RELEASE_CONTENT
7696
       SET pv_id = newPvId,
7697
           insert_stamp = Ora_Sysdate,
7698
           insertor_id = UserId
7699
     WHERE rtag_id = RtagId
7700
       AND pv_id = oldPvId;
7701
 
7702
 
7703
    /* LOG ACTION */
7704
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7705
	  FROM PROJECTS proj,
7706
	  	   RELEASE_TAGS rt
7707
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7708
	   AND rt.RTAG_ID = RtagId;
7709
 
7710
	SELECT pv.PKG_VERSION INTO sPkgVersion
7711
	  FROM PACKAGE_VERSIONS pv
7712
	 WHERE pv.PV_ID = newPvId;
7713
 
7714
	Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
7715
	Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7716
 
7717
END;
7718
/*-------------------------------------------------------------------------------------------------------*/
7719
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7720
	ReleaseLocation VARCHAR2(4000);
7721
 
7722
BEGIN
7723
 
7724
 
7725
	-- Delete old package
7726
	DELETE
7727
	  FROM RELEASE_CONTENT rc
7728
	 WHERE rc.PV_ID = PvId
7729
	   AND rc.RTAG_ID = RtagId;
7730
 
7731
 
7732
	/* LOG ACTION */
7733
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7734
	  FROM PROJECTS proj,
7735
	       RELEASE_TAGS rt
7736
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7737
	   AND rt.RTAG_ID = RtagId;
7738
 
7739
	Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7740
 
7741
 
7742
END;
7743
/*-------------------------------------------------------------------------------------------------------*/
7744
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7745
	ReleaseLocation VARCHAR2(4000);
7746
 
7747
	CURSOR curMatchingPackage IS
7748
    SELECT mpv.PV_ID
7749
	  FROM RELEASE_CONTENT rc,
7750
	  	   PACKAGE_VERSIONS mpv,
7751
		   PACKAGE_VERSIONS pv
7752
	 WHERE rc.PV_ID = mpv.PV_ID
7753
	   AND rc.RTAG_ID = RtagId
7754
	   AND pv.PV_ID = PvId
7755
	   AND pv.PKG_ID = mpv.PKG_ID
7756
	   AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
7757
    recMatchingPackage curMatchingPackage%ROWTYPE;
7758
 
7759
BEGIN
7760
 
7761
	OPEN curMatchingPackage;
7762
    FETCH curMatchingPackage INTO recMatchingPackage;
7763
 
7764
    IF curMatchingPackage%FOUND THEN
7765
		-- Delete old package
7766
		DELETE
7767
		  FROM RELEASE_CONTENT rc
7768
		 WHERE rc.PV_ID = recMatchingPackage.PV_ID
7769
		   AND rc.RTAG_ID = RtagId;
7770
 
7771
 
7772
		/* LOG ACTION */
7773
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7774
		  FROM PROJECTS proj,
7775
		  	   RELEASE_TAGS rt
7776
		 WHERE rt.PROJ_ID = proj.PROJ_ID
7777
		   AND rt.RTAG_ID = RtagId;
7778
 
7779
		Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7780
 
7781
	END IF;
7782
 
7783
 
7784
	CLOSE curMatchingPackage;
7785
 
7786
 
7787
 
7788
 
7789
END;
7790
/*-------------------------------------------------------------------------------------------------------*/
7791
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
7792
 
7793
	ReturnValue NUMBER;
7794
 
7795
BEGIN
7796
	SELECT rc.BASE_VIEW_ID INTO ReturnValue
7797
	  FROM RELEASE_CONTENT rc
7798
	 WHERE rc.RTAG_ID = RtagId
7799
	   AND rc.PV_ID = PvId;
7800
 
7801
	RETURN ReturnValue;
7802
END;
7803
/*-------------------------------------------------------------------------------------------------------*/
7804
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
7805
 
7806
BEGIN
7807
	-- Reset Ignore warnings up-the-tree
7808
	RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
7809
 
7810
	-- Refresh Package states
7811
	TOUCH_RELEASE ( RtagId );
7812
 
7813
END;
7814
/*-------------------------------------------------------------------------------------------------------*/
7815
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
7816
	CURSOR curReleases IS
7817
    SELECT rc.RTAG_ID
7818
	  FROM RELEASE_CONTENT rc
7819
	 WHERE rc.PV_ID = PvId;
7820
    recReleases curReleases%ROWTYPE;
7821
 
7822
BEGIN
7823
 
7824
	OPEN curReleases;
7825
    FETCH curReleases INTO recReleases;
7826
 
7827
	WHILE curReleases%FOUND
7828
	LOOP
7829
 
7830
		RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
7831
 
7832
		FETCH curReleases INTO recReleases;
7833
	END LOOP;
7834
 
7835
	CLOSE curReleases;	
7836
 
7837
END;
7838
/*-------------------------------------------------------------------------------------------------------*/
7839
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
7840
 
7841
BEGIN
7842
 
7843
	UPDATE RELEASE_CONTENT rc SET
7844
	rc.BASE_VIEW_ID = NewViewId
7845
	WHERE rc.PV_ID = PvId
7846
	  AND rc.RTAG_ID = RtagId;
7847
 
7848
END;
7849
/*-------------------------------------------------------------------------------------------------------*/
7850
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
7851
 
7852
	RowCount NUMBER;
7853
 
7854
 
7855
	CURSOR curPackageClash IS
7856
	SELECT pkg.PKG_NAME,
7857
		   er.*
7858
	  FROM (
7859
 
7860
	  		/* Get existing referenced packages */
7861
			SELECT pv.PKG_ID,
7862
			       pv.V_EXT
7863
			  FROM RELEASE_LINKS rl,
7864
			  	   RELEASE_CONTENT rc,
7865
			  	   PACKAGE_VERSIONS pv
7866
			 WHERE rl.RTAG_ID = nRtagId
7867
			   AND rl.REF_RTAG_ID = rc.RTAG_ID
7868
			   AND rc.PV_ID = pv.PV_ID
7869
 
7870
	  	    ) er,
7871
			(
7872
 
7873
			/* Get current reference packages */
7874
			SELECT pv.PKG_ID,
7875
			       pv.V_EXT
7876
			  FROM RELEASE_CONTENT rc,
7877
			  	   PACKAGE_VERSIONS pv
7878
			 WHERE rc.RTAG_ID = nRefRtagId
7879
			   AND rc.PV_ID = pv.PV_ID    
7880
 
7881
			) cr,
7882
			PACKAGES PKG
7883
	 WHERE er.PKG_ID = cr.PKG_ID
7884
	   AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7885
	   AND er.PKG_ID = pkg.PKG_ID;
7886
 
7887
	recPackageClash curPackageClash%ROWTYPE;	   
7888
 
7889
BEGIN
7890
	/*--------------- Business Rules Here -------------------*/
7891
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7892
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7893
	END IF;
7894
 
7895
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7896
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7897
	END IF;
7898
	/*-------------------------------------------------------*/
7899
	ProblemString := NULL;
7900
 
7901
 
7902
	-- Check if release already has references
7903
	SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
7904
	  FROM RELEASE_LINKS rl
7905
	 WHERE rl.RTAG_ID = nRtagId;	
7906
 
7907
 
7908
	IF RowCount > 0 THEN
7909
		-- Found existing references
7910
 
7911
		-- Make sure there is no package clashes
7912
		OPEN curPackageClash;
7913
	    FETCH curPackageClash INTO recPackageClash;
7914
 
7915
		IF curPackageClash%FOUND THEN
7916
 
7917
			ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
7918
 
7919
			WHILE curPackageClash%FOUND
7920
			LOOP
7921
				EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;	-- Do not allow variable overflow 
7922
 
7923
				ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
7924
 
7925
				FETCH curPackageClash INTO recPackageClash;
7926
			END LOOP;
7927
 
7928
		END IF;
7929
 
7930
		CLOSE curPackageClash;
7931
 
7932
 
7933
	ELSE
7934
		-- No references found, hence reference a release
7935
 
7936
 
7937
		-- Remove exising package from this release to be referenced
7938
		REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);	
7939
 
7940
 
7941
		-- Add new linked packages to release
7942
		INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
7943
		SELECT nRtagId,
7944
			   rc.PV_ID,
7945
			   rc.BASE_VIEW_ID, 
7946
			   rc.INSERT_STAMP, 
7947
			   rc.INSERTOR_ID, 
7948
			   rc.PKG_STATE
7949
		  FROM RELEASE_CONTENT rc
7950
		 WHERE rc.RTAG_ID = nRefRtagId;
7951
 
7952
 
7953
 
7954
		-- Copy ignore warnings for referenced packages
7955
		INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
7956
		SELECT nRtagId, 
7957
			   iw.PV_ID, 
7958
			   iw.DPV_ID, 
7959
			   iw.IS_PATCH_IGNORE
7960
		  FROM IGNORE_WARNINGS iw,
7961
		  	   RELEASE_CONTENT rc
7962
		 WHERE iw.RTAG_ID = rc.RTAG_ID 
7963
		   AND iw.PV_ID = rc.PV_ID
7964
		   AND rc.RTAG_ID = nRefRtagId;	 
7965
 
7966
 
7967
 
7968
		-- Reference release 
7969
		INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
7970
		VALUES ( nRtagId, nRefRtagId );		 
7971
 
7972
 
7973
		-- Refresh Package states
7974
		TOUCH_RELEASE ( nRtagId );
7975
 
7976
	END IF;	 
7977
 
7978
 
7979
END;
7980
/*-------------------------------------------------------------------------------------------------------*/
7981
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
7982
 
7983
 
7984
BEGIN
7985
	/*--------------- Business Rules Here -------------------*/
7986
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7987
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7988
	END IF;
7989
 
7990
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7991
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7992
	END IF;
7993
 
7994
	/*-------------------------------------------------------*/
7995
 
7996
 
7997
	-- Remove ignore warnings for those packages who use referenced packages
7998
	DELETE FROM IGNORE_WARNINGS iw
7999
	 WHERE iw.RTAG_ID = nRtagId
8000
	   AND iw.DPV_ID IN (
8001
	   						SELECT dep.DPV_ID
8002
							  FROM (
8003
 
8004
									/* Get referenced packages */
8005
									SELECT pv.PKG_ID,
8006
									       pv.V_EXT
8007
									  FROM RELEASE_CONTENT rc,
8008
									  	   PACKAGE_VERSIONS pv
8009
									 WHERE rc.RTAG_ID = nRefRtagId
8010
									   AND rc.PV_ID = pv.PV_ID    
8011
 
8012
									) cr,
8013
									(
8014
 
8015
									/* Get all dependencies for current release */
8016
									SELECT DISTINCT 
8017
										   pv.PKG_ID,
8018
										   pv.V_EXT,
8019
										   dep.DPV_ID
8020
									  FROM RELEASE_CONTENT rc,
8021
										   PACKAGE_DEPENDENCIES dep,
8022
										   PACKAGE_VERSIONS pv
8023
									 WHERE rc.RTAG_ID = nRtagId
8024
									   AND rc.PV_ID = dep.PV_ID		
8025
									   AND dep.PV_ID = pv.PV_ID	   
8026
 
8027
									) dep
8028
							 WHERE dep.PKG_ID = cr.PKG_ID
8029
							   AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8030
	   					);  
8031
 
8032
 
8033
 
8034
 
8035
	-- Remove ignore warnings for those package which are going to be replaced with the reference
8036
	DELETE FROM IGNORE_WARNINGS iw
8037
	 WHERE iw.RTAG_ID = nRtagId
8038
	   AND iw.PV_ID IN (
8039
						SELECT pv.PV_ID
8040
						  FROM (
8041
 
8042
								/* Get referenced packages */
8043
								SELECT pv.PKG_ID,
8044
								       pv.V_EXT
8045
								  FROM RELEASE_CONTENT rc,
8046
								  	   PACKAGE_VERSIONS pv
8047
								 WHERE rc.RTAG_ID = nRefRtagId
8048
								   AND rc.PV_ID = pv.PV_ID    
8049
 
8050
								) cr,
8051
								RELEASE_CONTENT rc,
8052
								PACKAGE_VERSIONS pv
8053
						 WHERE pv.PKG_ID = cr.PKG_ID
8054
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8055
						   AND rc.RTAG_ID = nRtagId
8056
						   AND rc.PV_ID = pv.PV_ID
8057
						);			
8058
 
8059
 
8060
 
8061
 
8062
 
8063
	-- Remove matching packages from release
8064
	DELETE FROM RELEASE_CONTENT rc
8065
	 WHERE rc.RTAG_ID = nRtagId
8066
	   AND rc.PV_ID IN (
8067
						SELECT pv.PV_ID
8068
						  FROM (
8069
 
8070
								/* Get referenced packages */
8071
								SELECT pv.PKG_ID,
8072
								       pv.V_EXT
8073
								  FROM RELEASE_CONTENT rc,
8074
								  	   PACKAGE_VERSIONS pv
8075
								 WHERE rc.RTAG_ID = nRefRtagId
8076
								   AND rc.PV_ID = pv.PV_ID    
8077
 
8078
								) cr,
8079
								RELEASE_CONTENT rc,
8080
								PACKAGE_VERSIONS pv
8081
						 WHERE pv.PKG_ID = cr.PKG_ID
8082
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8083
						   AND rc.RTAG_ID = nRtagId
8084
						   AND rc.PV_ID = pv.PV_ID
8085
						);	
8086
 
8087
 
8088
 
8089
 
8090
 
8091
	-- Remove Reference release 
8092
	DELETE 
8093
	  FROM RELEASE_LINKS rl
8094
	 WHERE rl.RTAG_ID = nRtagId
8095
	   AND rl.REF_RTAG_ID = nRefRtagId;
8096
 
8097
 
8098
	-- Refresh Package states
8099
	TOUCH_RELEASE ( nRtagId );
8100
 
8101
 
8102
END;
8103
/*-------------------------------------------------------------------------------------------------------*/
8104
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
8105
 
8106
	cReleaseMode CHAR(1);
8107
	cPvMode CHAR(1);
8108
 
8109
BEGIN
8110
 
8111
	-- Get Release Mode
8112
	SELECT rt.OFFICIAL INTO cReleaseMode
8113
	  FROM RELEASE_TAGS rt
8114
	 WHERE rt.RTAG_ID = RtagId;
8115
 
8116
 
8117
	-- Get Package Mode
8118
	SELECT pv.DLOCKED INTO cPvMode
8119
	  FROM PACKAGE_VERSIONS pv
8120
	 WHERE pv.PV_ID = PvId;	 
8121
 
8122
	-- Only check if package is locked 
8123
	IF (cPvMode = 'Y') THEN
8124
 
8125
		IF (cReleaseMode != 'N') AND (Permission != 'Y')
8126
		THEN
8127
			RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
8128
 
8129
		END IF;
8130
 
8131
	END IF;	
8132
 
8133
 
8134
END;
8135
/*-------------------------------------------------------------------------------------------------------*/
8136
END PK_RELEASE_TEST;
1374 dpurdie 8137
/
8138
--------------------------------------------------------
8139
--  DDL for Package Body PK_APP_UTILS
8140
--------------------------------------------------------
1373 dpurdie 8141
 
8142
  CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS
8143
 
8144
/*
8145
------------------------------
8146
||  Last Modified:  S.Vukovic
8147
||  Modified Date:  26/Apr/2005
8148
||  Body Version:   1.0
8149
------------------------------
8150
*/
8151
 
8152
 
8153
/*-------------------------------------------------------------------------------------------------------*/
8154
PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur)   IS
8155
 
8156
 
8157
BEGIN
8158
 
8159
 
8160
	IF (NOT RtagId IS NULL) THEN
8161
		-- Case with RTAG_ID present
8162
		OPEN records FOR
8163
		SELECT rt.PROJ_ID,
8164
			   rt.RTAG_ID AS RTAG_ID
8165
		  FROM RELEASE_TAGS rt
8166
		 WHERE rt.RTAG_ID = TO_NUMBER(RtagId);
8167
 
8168
	ELSIF (NOT ProjId IS NULL) THEN
8169
		-- Case with PROJ_ID present
8170
		OPEN records FOR
8171
		SELECT TO_NUMBER(ProjId) AS PROJ_ID,
8172
			   -1 AS RTAG_ID
8173
		  FROM DUAL;
8174
 
8175
	ELSE
8176
		-- Case with none present
8177
		OPEN records FOR
8178
		SELECT -1 AS PROJ_ID,
8179
			   -1 AS RTAG_ID
8180
		  FROM DUAL;
8181
 
8182
	END IF;
8183
 
8184
 
8185
 
8186
 
8187
   	--RETURN records;
8188
 
8189
END;
8190
/*-------------------------------------------------------------------------------------------------------*/
8191
END PK_APP_UTILS;
1374 dpurdie 8192
/
8193
--------------------------------------------------------
8194
--  DDL for Package Body PK_RELEASE
8195
--------------------------------------------------------
1373 dpurdie 8196
 
8197
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS
8198
 
8199
/*-------------------------------------------------------------------------------------------------------*/
8200
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
8201
 
8202
RtagId NUMBER;
8203
ParentRtagId NUMBER;
8204
RecCount NUMBER := 0;
8205
VtreeId NUMBER;
8206
 
8207
BEGIN
8208
   /*--------------- Business Rules Here -------------------*/
8209
   -- Check for missing parameters
8210
   IF (sReleaseName IS NULL) OR (nUserId IS NULL)
8211
   THEN
8212
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
8213
 
8214
   END IF;
8215
 
8216
 
8217
   -- Check for duplicate Release Names
8218
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8219
     FROM RELEASE_TAGS rt
8220
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8221
      AND rt.PROJ_ID = nProjId;
8222
 
8223
   IF (RecCount > 0) THEN
8224
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8225
   END IF;
8226
   /*-------------------------------------------------------*/
8227
 
8228
 
8229
   -- Get rtag_id
8230
   SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
8231
 
8232
   SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;
8233
 
8234
 
8235
 
8236
   -- Get Parent RtagId
8237
   ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
8238
 
8239
   -- If the parent RTAG is NOT in this project then we cannot use it.
8240
   -- We must re-assign the parent to be the new release's RTAG_ID instead
8241
   -- else it will not show up in the projects release tree (DEVI-55480)
8242
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8243
     FROM RELEASE_TAGS rt
8244
    WHERE rt.RTAG_ID = ParentRtagId
8245
      AND rt.PROJ_ID = nProjId;
8246
 
8247
   IF (RecCount = 0) THEN
8248
     ParentRtagId := RtagId;
8249
   END IF;
8250
 
8251
   -- Create new release
8252
   INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,
8253
                        OFFICIAL, REBUILD_ENV, REBUILD_STAMP,
8254
                        PARENT_RTAG_ID, PROJ_ID, VTREE_ID )
8255
   VALUES ( RtagId,
8256
          sReleaseName,
8257
          sReleaseComments,
8258
          ORA_SYSDATE,
8259
          nUserId,
8260
          'N',
8261
          'N',
8262
          0,
8263
          ParentRtagId,
8264
          nProjId,
8265
          VtreeId );
8266
 
8267
   -- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)
8268
   IF (NOT nSourceRtagId IS NULL)
8269
   THEN
8270
      UPDATE RELEASE_TAGS rtd
8271
      SET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)
8272
      WHERE rtd.RTAG_ID = RtagId;
8273
   END IF;
8274
 
8275
   -- Update display Order
8276
   UPDATE_DISPLAY_ORDER ( nProjId );
8277
 
8278
   /* Log Project Action */
8279
   Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
8280
 
8281
 
8282
   -- Import Release Contents
8283
   IF (NOT nSourceRtagId IS NULL) THEN
8284
      Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
8285
   END IF;
8286
 
8287
END;
8288
/*-------------------------------------------------------------------------------------------------------*/
8289
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
8290
 
8291
 
8292
BEGIN
8293
 
8294
 
8295
   /*--------------- Business Rules Here -------------------*/
8296
   /*-------------------------------------------------------*/
8297
 
8298
   UPDATE RELEASE_TAGS urt SET
8299
   urt.DISPLAY_ORDER = (
8300
                  SELECT qry.REC_NUM
8301
                    FROM (
8302
                        SELECT rel.*, ROWNUM AS REC_NUM
8303
                          FROM (
8304
 
8305
                                SELECT rt.RTAG_ID,
8306
                                    rt.DISPLAY_ORDER,
8307
                                     DECODE( rt.PARENT_RTAG_ID,
8308
                                             rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
8309
                                FROM RELEASE_TAGS rt
8310
                               WHERE rt.PROJ_ID = nProjId
8311
 
8312
                                ) rel
8313
                        START WITH rel.PARENT_RTAG_ID = 0
8314
                        CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID
8315
                        ORDER SIBLINGS BY rel.DISPLAY_ORDER
8316
                        ) qry
8317
                     WHERE qry.RTAG_ID = urt.RTAG_ID
8318
                  )
8319
   WHERE urt.PROJ_ID = nProjId;
8320
 
8321
END;
8322
/*-------------------------------------------------------------------------------------------------------*/
8323
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
8324
 
8325
   nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
8326
   SeqNum NUMBER;
8327
 
8328
BEGIN
8329
 
8330
 
8331
   /*--------------- Business Rules Here -------------------*/
8332
   /*-------------------------------------------------------*/
8333
 
8334
   nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
8335
 
8336
   -- Set start sequence number
8337
   SeqNum := 1;
8338
 
8339
   FOR i IN 1..nIdCollector.COUNT
8340
   LOOP
8341
 
8342
      -- Update new display order
8343
      UPDATE RELEASE_TAGS rt SET
8344
         rt.DISPLAY_ORDER = SeqNum
8345
       WHERE rt.PROJ_ID = nProjId
8346
         AND rt.RTAG_ID = nIdCollector(i);
8347
 
8348
      SeqNum := SeqNum + 1;
8349
 
8350
   END LOOP;
8351
 
8352
END;
8353
/*-------------------------------------------------------------------------------------------------------*/
8354
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
8355
 
8356
RecCount NUMBER := 0;
8357
ProjId NUMBER;
8358
 
8359
BEGIN
8360
 
8361
 
8362
   /*--------------- Business Rules Here -------------------*/
8363
   -- Check for missing parameters
8364
   IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
8365
   THEN
8366
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
8367
 
8368
   END IF;
8369
 
8370
 
8371
   -- Check for duplicate Release Names
8372
   SELECT rt.PROJ_ID INTO ProjId
8373
     FROM RELEASE_TAGS rt
8374
    WHERE rt.RTAG_ID = nRtagId;
8375
 
8376
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8377
     FROM RELEASE_TAGS rt
8378
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8379
      AND rt.RTAG_ID != nRtagId
8380
      AND rt.PROJ_ID = ProjId;
8381
 
8382
 
8383
   IF (RecCount > 0) THEN
8384
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8385
   END IF;
8386
   /*-------------------------------------------------------*/
8387
 
8388
 
8389
 
8390
   -- Update release details
8391
   UPDATE RELEASE_TAGS rt SET
8392
   rt.RTAG_NAME = sReleaseName,
8393
   rt.DESCRIPTION = sReleaseComments,
8394
   rt.PARENT_RTAG_ID = nParentRtagId,
8395
   rt.ASSOC_MASS_REF = nMASSRtagId,
8396
   rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,
8397
   rt.OWNER_EMAIL = sOwnerEmail,
8398
   rt.PRODUCT_STATE_USED = cState
8399
   WHERE rt.RTAG_ID = nRtagId;
8400
 
8401
   -- Update display Order
8402
   UPDATE_DISPLAY_ORDER ( ProjId );
8403
 
8404
   /* Log Project Action */
8405
   Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
8406
 
8407
 
8408
 
8409
 
8410
END;
8411
/*-------------------------------------------------------------------------------------------------------*/
8412
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8413
 
8414
   RecCount NUMBER := 0;
8415
   sReleaseId VARCHAR2(4000);
8416
   ProjId NUMBER;
8417
 
8418
BEGIN
8419
   /*--------------- Business Rules Here -------------------*/
8420
   IF (nRtagId IS NULL)
8421
   THEN
8422
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8423
   END IF;
8424
 
8425
 
8426
 
8427
   -- Check for any kids
8428
   SELECT COUNT( rt.RTAG_ID ) INTO RecCount
8429
     FROM RELEASE_TAGS rt
8430
    WHERE rt.PARENT_RTAG_ID = nRtagId
8431
      AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
8432
 
8433
   IF (RecCount > 0) THEN
8434
      RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
8435
   END IF;
8436
   /*-------------------------------------------------------*/
8437
 
8438
   -- Clear the release contents
8439
   Clean_Release_Contents ( nRtagId, nUserId );
8440
 
8441
   /* Log Project Action */
8442
   SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
8443
     FROM RELEASE_TAGS rt
8444
    WHERE rt.RTAG_ID = nRtagId;
8445
 
8446
   Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
8447
 
8448
 
8449
   -- Remove Release
8450
   DELETE
8451
     FROM RELEASE_TAGS rt
8452
    WHERE rt.RTAG_ID = nRtagId;
8453
 
8454
 
8455
 
8456
END;
8457
/*-------------------------------------------------------------------------------------------------------*/
8458
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
8459
 
8460
   sSourceLocation VARCHAR2(4000);
8461
   sTargetLocation VARCHAR2(4000);
8462
   ProjId NUMBER;
8463
   cReleaseMode CHAR(1);
8464
   RconId NUMBER;
8465
 
8466
   -- this cursor gets the source release daemon configurations, ensuring that the
8467
   -- first record will be the master daemon, and subsequent records will be the slaves.
8468
   CURSOR curSrcReleaseConfigs IS
8469
    SELECT daemon_hostname, gbe_id, gbe_buildfilter
8470
     FROM RELEASE_CONFIG rc
8471
    WHERE rc.RTAG_ID = nSourceRtagId
8472
    ORDER BY rc.daemon_mode;
8473
    recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;
8474
 
8475
    -- this cursor looks for target release daemons
8476
   CURSOR curTgtReleaseConfigs IS
8477
    SELECT rcon_id
8478
     FROM RELEASE_CONFIG rc
8479
    WHERE rc.RTAG_ID = nTargetRtagId;
8480
    recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;
8481
 
8482
    -- this cursor looks for target release daemon run level entries
8483
   CURSOR curTgtReleaseConfigRunLevel IS
8484
    SELECT current_run_level
8485
     FROM RUN_LEVEL rl
8486
    WHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;
8487
    recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;
8488
 
8489
BEGIN
8490
   /*--------------- Business Rules Here -------------------*/
8491
   IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
8492
   THEN
8493
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
8494
   END IF;
8495
 
8496
   IF (nSourceRtagId = nTargetRtagId) THEN
8497
      RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
8498
   END IF;
8499
 
8500
 
8501
   -- Check if Target release is in OPEN mode
8502
   SELECT rt.OFFICIAL  INTO  cReleaseMode
8503
     FROM RELEASE_TAGS rt
8504
    WHERE rt.RTAG_ID = nTargetRtagId;
8505
 
8506
   IF (cReleaseMode != 'N') THEN
8507
      RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
8508
   END IF;
8509
 
8510
   -- check that the target release's daemons are all paused before we allow an import operation
8511
   OPEN curTgtReleaseConfigs;
8512
   FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;
8513
 
8514
   WHILE curTgtReleaseConfigs%FOUND
8515
   LOOP
8516
      OPEN curTgtReleaseConfigRunLevel;
8517
      FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;
8518
      IF curTgtReleaseConfigRunLevel%FOUND THEN
8519
         IF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR
8520
            (recTgtReleaseConfigRunLevel.current_run_level <> 2) THEN
8521
            RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8522
         END IF;
8523
      ELSE
8524
         -- we don't know what the daemon run level is so err on the side of caution
8525
         RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8526
      END IF;
8527
      CLOSE curTgtReleaseConfigRunLevel;
8528
 
8529
      FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;
8530
   END LOOP;
8531
 
8532
   CLOSE curTgtReleaseConfigs;
8533
 
8534
 
8535
   /*-------------------------------------------------------*/
8536
 
8537
   -- Clean target contents
8538
   Clean_Release_Contents ( nTargetRtagId, nUserId );
8539
 
8540
 
8541
   -- Import Released Area Contents
8542
   INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )
8543
   SELECT nTargetRtagId AS RTAG_ID,
8544
         rc.PV_ID,
8545
         rc.BASE_VIEW_ID,
8546
         rc.INSERT_STAMP,
8547
         rc.INSERTOR_ID,
8548
         rc.PKG_STATE,
8549
         rc.PKG_ID,
8550
         rc.DEPRECATED_STATE
8551
     FROM RELEASE_CONTENT rc
8552
    WHERE rc.RTAG_ID = nSourceRtagId;
8553
 
8554
 
8555
   -- Import any Pegged Version settings from the source release
8556
   INSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )
8557
   SELECT nTargetRtagId AS RTAG_ID,
8558
          pegv.PV_ID
8559
     FROM PEGGED_VERSIONS pegv
8560
    WHERE pegv.RTAG_ID = nSourceRtagId;
8561
 
8562
   -- Import any Advisory Ripple settings from the source release
8563
   INSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )
8564
   SELECT nTargetRtagId AS RTAG_ID,
8565
          avr.PV_ID
8566
     FROM ADVISORY_RIPPLE avr
8567
    WHERE avr.RTAG_ID = nSourceRtagId;
8568
 
8569
 
8570
   --Import Release Configuration Information
8571
   OPEN curSrcReleaseConfigs;
8572
   FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8573
 
8574
   WHILE curSrcReleaseConfigs%FOUND
8575
   LOOP
8576
      -- add a daemon to the target release
8577
      PK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );
8578
 
8579
      FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8580
   END LOOP;
8581
 
8582
   CLOSE curSrcReleaseConfigs;
8583
 
8584
 
8585
 
8586
   -- Import Ignore Warning states
8587
   INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
8588
   SELECT nTargetRtagId AS RTAG_ID,
8589
          igw.PV_ID,
8590
          igw.DPV_ID
8591
     FROM IGNORE_WARNINGS igw
8592
    WHERE igw.rtag_id = nSourceRtagId;
8593
 
8594
 
8595
   /* Log Project Action */
8596
   -- Get Source Location
8597
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
8598
     FROM RELEASE_TAGS rt,
8599
           PROJECTS pr
8600
    WHERE rt.PROJ_ID = pr.PROJ_ID
8601
      AND rt.RTAG_ID = nSourceRtagId;
8602
 
8603
   -- Get Target Location
8604
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
8605
     FROM RELEASE_TAGS rt,
8606
           PROJECTS pr
8607
    WHERE rt.PROJ_ID = pr.PROJ_ID
8608
      AND rt.RTAG_ID = nTargetRtagId;
8609
 
8610
   -- Get project id
8611
   SELECT rt.PROJ_ID  INTO  ProjId
8612
     FROM RELEASE_TAGS rt
8613
    WHERE rt.RTAG_ID = nTargetRtagId;
8614
 
8615
   Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );
8616
END;
8617
 
8618
 
8619
 
8620
/*-------------------------------------------------------------------------------------------------------*/
8621
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8622
 
8623
   RecCount NUMBER;
8624
        rconIdList VARCHAR2(4000);
8625
 
8626
BEGIN
8627
   /*--------------- Business Rules Here -------------------*/
8628
   IF (nRtagId IS NULL)
8629
   THEN
8630
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8631
   END IF;
8632
 
8633
 
8634
   -- Check if other release references this release
8635
   SELECT COUNT( rl.RTAG_ID ) INTO RecCount
8636
     FROM RELEASE_LINKS rl
8637
    WHERE rl.REF_RTAG_ID = nRtagId;
8638
 
8639
   IF (RecCount > 0) THEN
8640
      RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
8641
   END IF;
8642
   /*-------------------------------------------------------*/
8643
 
8644
   -- Delete Release links
8645
   DELETE
8646
     FROM RELEASE_LINKS rl
8647
    WHERE rl.RTAG_ID = nRtagId;
8648
 
8649
   -- Delete ignore warning
8650
   DELETE
8651
     FROM IGNORE_WARNINGS iw
8652
    WHERE iw.RTAG_ID = nRtagId;
8653
 
8654
 
8655
   -- Delete Build Order cached calculations
8656
   DELETE
8657
     FROM BUILD_ORDER bo
8658
    WHERE bo.RTAG_ID = nRtagId;
8659
 
8660
 
8661
   -- Delete Notification History
8662
   DELETE
8663
     FROM NOTIFICATION_HISTORY nh
8664
    WHERE nh.RTAG_ID = nRtagId;
8665
 
8666
 
8667
   -- Delete Released Area Contents
8668
   DELETE
8669
     FROM RELEASE_CONTENT rc
8670
    WHERE rc.RTAG_ID = nRtagId;
8671
 
8672
 
8673
   -- Delete Work In Progress Area Contents
8674
   DELETE
8675
     FROM WORK_IN_PROGRESS wip
8676
    WHERE wip.RTAG_ID = nRtagId;
8677
 
8678
 
8679
   -- Delete Pending Area Contents
8680
   DELETE
8681
     FROM PLANNED pl
8682
    WHERE pl.RTAG_ID = nRtagId;
8683
 
8684
   -- Delete Deprecated Packages
8685
   DELETE
8686
     FROM DEPRECATED_PACKAGES dp
8687
    WHERE dp.RTAG_ID = nRtagId;
8688
 
8689
   -- Delete Project Action Log
8690
   DELETE
8691
     FROM PROJECT_ACTION_LOG pal
8692
    WHERE pal.RTAG_ID = nRtagId;
8693
 
8694
   -- Delete Do Not Ripple Contents
8695
   DELETE
8696
     FROM DO_NOT_RIPPLE dnr
8697
    WHERE dnr.RTAG_ID = nRtagId;
8698
 
8699
   -- Delete Dash Board Contents
8700
   DELETE
8701
     FROM DASH_BOARD db
8702
    WHERE db.RTAG_ID = nRtagId;
8703
 
8704
   -- Delete Advisory Ripple Contents
8705
   DELETE
8706
     FROM ADVISORY_RIPPLE adr
8707
    WHERE adr.RTAG_ID = nRtagId;
8708
 
8709
   -- Delete Archive Action Log
8710
   DELETE
8711
     FROM ARCHIVE_ACTION_LOG aal
8712
    WHERE aal.RTAG_ID = nRtagId;
8713
 
8714
   -- Delete Daemons For This Release
8715
   FOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )
8716
   LOOP
8717
      rconIdList := rconIdList || rcon.RCON_ID || ',';
8718
   END LOOP;
8719
 
8720
   pk_buildapi.DELETE_DAEMON(rconIdList);
8721
 
8722
   -- Delete Release Metrics Contents
8723
   DELETE
8724
     FROM RELEASE_METRICS rm
8725
    WHERE rm.RTAG_ID = nRtagId;
8726
 
8727
   -- Delete Release Configuration Contents
8728
   DELETE
8729
     FROM RELEASE_CONFIG rc
8730
    WHERE rc.RTAG_ID = nRtagId;
8731
 
8732
   -- Delete Pegged Version Contents
8733
   DELETE
8734
     FROM PEGGED_VERSIONS pegv
8735
    WHERE pegv.RTAG_ID = nRtagId;
8736
 
8737
END;
8738
/*-------------------------------------------------------------------------------------------------------*/
8739
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
8740
 
8741
   nSourceParentRtagId NUMBER;
8742
 
8743
BEGIN
8744
   /*--------------- Business Rules Here -------------------*/
8745
   IF (nRtagId IS NULL) OR (cIsBranch IS NULL)
8746
   THEN
8747
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
8748
   END IF;
8749
   /*-------------------------------------------------------*/
8750
 
8751
 
8752
   IF ( nSourceRtagId IS NULL ) THEN
8753
      -- Create new on main branch
8754
      RETURN nRtagId;
8755
 
8756
   ELSE
8757
      -- Create from source rtag_id
8758
 
8759
      -- Find parent of Source RtagId
8760
      SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
8761
        FROM RELEASE_TAGS rt
8762
       WHERE rt.RTAG_ID = nSourceRtagId;
8763
 
8764
      IF (UPPER(cIsBranch) = 'Y') THEN
8765
         RETURN nSourceRtagId;
8766
      ELSE
8767
         IF (nSourceRtagId = nSourceParentRtagId) THEN
8768
            RETURN nRtagId;
8769
         ELSE
8770
            RETURN nSourceParentRtagId;
8771
         END IF;
8772
      END IF;
8773
 
8774
 
8775
   END IF;
8776
 
8777
 
8778
END;
8779
/*-------------------------------------------------------------------------------------------------------*/
8780
 
8781
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
8782
--                       sNextVersion OUT VARCHAR2,
8783
--                       nNextLifeCycle OUT NUMBER,
8784
--                       nParentRtagId OUT NUMBER,
8785
--                       nProjId IN NUMBER ) IS
8786
--
8787
-- SourceBranchCount NUMBER;
8788
-- ProjRootVersion VARCHAR2(4000);
8789
-- LastLifeCycle NUMBER;
8790
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
8791
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
8792
--
8793
-- SourceProjId NUMBER;
8794
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
8795
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
8796
--
8797
-- BEGIN
8798
--    /*--------------- Business Rules Here -------------------*/
8799
--    /*-------------------------------------------------------*/
8800
--
8801
--
8802
--    BEGIN
8803
--       -- Get Project root version
8804
--       SELECT rt.RTAG_VERSION INTO ProjRootVersion
8805
--         FROM RELEASE_TAGS rt
8806
--        WHERE rt.PROJ_ID = nProjId
8807
--          AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
8808
--
8809
--       EXCEPTION
8810
--       WHEN NO_DATA_FOUND THEN
8811
--       ProjRootVersion := ROOT_VERSION_NOT_FOUND;
8812
--    END;
8813
--
8814
--
8815
--
8816
--
8817
--    BEGIN
8818
--       -- Get info for source rtagid
8819
--       SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
8820
--         FROM RELEASE_TAGS rt
8821
--        WHERE rt.RTAG_ID = nSourceRtagId;
8822
--
8823
--       EXCEPTION
8824
--       WHEN NO_DATA_FOUND THEN
8825
--       SourceProjId := NULL;
8826
--       SourceVersion := NULL;
8827
--       SourceLifeCycle := NULL;
8828
--    END;
8829
--
8830
--
8831
--    IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
8832
--
8833
--       /* Blank Release Required  OR  Release imported from other project */
8834
--
8835
--       IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
8836
--          /* No Releases found in the project, hence calculate next version available.  */
8837
--
8838
--          -- Set parent rtag
8839
--          nParentRtagId := SET_PARENT_AS_YOURSELF;
8840
--
8841
--
8842
--          BEGIN
8843
--             -- Get Next Available Global Root Version
8844
--             SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
8845
--               FROM RELEASE_TAGS rt
8846
--              WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
8847
--
8848
--             -- Set Next Rtag Version
8849
--             sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
8850
--
8851
--             -- Restart Lifecycle
8852
--             nNextLifeCycle := 0;
8853
--
8854
--
8855
--             EXCEPTION
8856
--             WHEN NO_DATA_FOUND THEN
8857
--             -- Release Manager has no releases, hence start from 1
8858
--             sNextVersion := '1';
8859
--             nNextLifeCycle := 0;
8860
--
8861
--          END;
8862
--
8863
--
8864
--
8865
--       ELSE
8866
--          /* Releases found in this project. */
8867
--
8868
--          SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
8869
--            FROM (
8870
--                SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
8871
--                  FROM RELEASE_TAGS rt
8872
--                 WHERE rt.PROJ_ID = nProjId
8873
--                   AND rt.RTAG_VERSION = ProjRootVersion
8874
--                 ORDER BY rt.RTAG_LIFE_CYCLE DESC
8875
--                  ) qry
8876
--           WHERE ROWNUM = 1;
8877
--
8878
--
8879
--          -- Set same Rtag Version
8880
--          sNextVersion := ProjRootVersion;
8881
--
8882
--          -- Increase Lifecycle
8883
--          nNextLifeCycle := LastLifeCycle + 1;
8884
--
8885
--       END IF;
8886
--
8887
--
8888
--
8889
--    ELSE
8890
--       /* Create Release From other release within this project */
8891
--
8892
--       -- Set parent id
8893
--       nParentRtagId := nSourceRtagId;
8894
--
8895
--
8896
--       -- Get number of source branches
8897
--       SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
8898
--         FROM RELEASE_TAGS rt
8899
--        WHERE rt.PROJ_ID = nProjId
8900
--          AND rt.PARENT_RTAG_ID = nSourceRtagId;
8901
--
8902
--
8903
--       IF SourceBranchCount = 0 THEN
8904
--          /* Release is Head (i.e. Tip on its branch ) */
8905
--
8906
--          -- Set Next Rtag Version
8907
--          sNextVersion := SourceVersion;
8908
--
8909
--          -- Increase Lifecycle
8910
--          nNextLifeCycle := SourceLifeCycle + 1;
8911
--
8912
--
8913
--       ELSIF SourceBranchCount = 1 THEN
8914
--          /* Release IS NOT Head, but can be branched */
8915
--
8916
--          -- Set Next Rtag Version
8917
--          sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
8918
--
8919
--          -- Reset Lifecycle to 1
8920
--          nNextLifeCycle := 1;
8921
--
8922
--
8923
--       ELSE
8924
--          -- Limit of two branches is reached
8925
--          RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');
8926
--
8927
--       END IF;
8928
--
8929
--
8930
--
8931
--
8932
--
8933
--
8934
--    END IF;
8935
--
8936
--
8937
-- END;
8938
 
8939
/*-------------------------------------------------------------------------------------------------------*/
8940
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
8941
 
8942
   IsBaseView CHAR(1);
8943
 
8944
BEGIN
8945
 
8946
   -- Check if the view is BASE VIEW
8947
   SELECT vi.BASE_VIEW INTO IsBaseView
8948
     FROM VIEWS vi
8949
    WHERE vi.VIEW_ID = ViewId;
8950
 
8951
   IF (IsBaseView = 'Y') THEN
8952
      -- Get Base view content
8953
      OPEN RecordSet FOR
8954
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8955
            rel.deprecated_state,
8956
            pv.pv_id,
8957
            pkg.pkg_name,
8958
            pv.pkg_version,
8959
            pv.dlocked,
8960
            pv.pv_description,
8961
            pv.BUILD_TYPE
8962
        FROM release_content rel,
8963
             packages pkg,
8964
             package_versions pv
8965
       WHERE pv.pkg_id = pkg.pkg_id
8966
         AND rel.pv_id = pv.pv_id
8967
         AND rel.BASE_VIEW_ID = ViewId
8968
         AND rel.RTAG_ID = RtagId
8969
       ORDER BY UPPER(pkg.PKG_NAME);
8970
 
8971
   ELSE
8972
 
8973
       -- Get non base view content
8974
      OPEN RecordSet FOR
8975
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8976
            rel.deprecated_state,
8977
            pv.pv_id,
8978
            pkg.pkg_name,
8979
            pv.pkg_version,
8980
            pv.dlocked,
8981
            pv.pv_description,
8982
            pv.BUILD_TYPE
8983
        FROM release_content rel,
8984
             packages pkg,
8985
             package_versions pv,
8986
            VIEW_DEF vd
8987
       WHERE pv.pkg_id = pkg.pkg_id
8988
         AND rel.pv_id = pv.pv_id
8989
         AND vd.VIEW_ID = ViewId
8990
         AND vd.PKG_ID = pv.PKG_ID
8991
         AND rel.RTAG_ID = RtagId
8992
       ORDER BY UPPER(pkg.PKG_NAME);
8993
 
8994
   END IF;
8995
 
8996
 
8997
 
8998
 
8999
END;
9000
/*-------------------------------------------------------------------------------------------------------*/
9001
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9002
 
9003
   ReleaseLocation VARCHAR2(4000);
9004
   sPkgVersion VARCHAR2(4000);
9005
   nPkgId NUMBER;
9006
   sVExt VARCHAR2(4000);
9007
   IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
9008
 
9009
   -- Find package for replacement
9010
   CURSOR curReplacePkg IS
9011
    SELECT pv.PV_ID
9012
     FROM RELEASE_CONTENT rc,
9013
           PACKAGE_VERSIONS pv
9014
    WHERE rc.PV_ID = pv.PV_ID
9015
      AND rc.RTAG_ID = RtagId
9016
      AND pv.PKG_ID = nPkgId
9017
      AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
9018
    recReplacePkg curReplacePkg%ROWTYPE;
9019
 
9020
BEGIN
9021
 
9022
   -- Get is_patch, pkg_id and v_ext
9023
   SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
9024
     FROM PACKAGE_VERSIONS pv
9025
    WHERE pv.PV_ID = newPvId;
9026
 
9027
 
9028
   -- Never put patch in relesed area
9029
   IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
9030
 
9031
      -- Try to get a package to be replaced with this new one.
9032
      -- Use unique constraint of PKG_ID and V_EXT
9033
      OPEN curReplacePkg;
9034
       FETCH curReplacePkg INTO recReplacePkg;
9035
 
9036
       IF curReplacePkg%FOUND THEN
9037
         -- Replace package
9038
         REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
9039
 
9040
      ELSE
9041
         -- Add new package
9042
         INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
9043
         VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
9044
 
9045
 
9046
          /* LOG ACTION */
9047
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9048
           FROM PROJECTS proj,
9049
                 RELEASE_TAGS rt
9050
          WHERE rt.PROJ_ID = proj.PROJ_ID
9051
            AND rt.RTAG_ID = RtagId;
9052
 
9053
         SELECT pv.PKG_VERSION INTO sPkgVersion
9054
           FROM PACKAGE_VERSIONS pv
9055
          WHERE pv.PV_ID = newPvId;
9056
 
9057
         Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9058
 
9059
 
9060
      END IF;
9061
 
9062
      CLOSE curReplacePkg;
9063
 
9064
   END IF;
9065
 
9066
END;
9067
/*-------------------------------------------------------------------------------------------------------*/
9068
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9069
 
9070
   ReleaseLocation VARCHAR2(4000);
9071
   sPkgVersion VARCHAR2(4000);
9072
 
9073
BEGIN
9074
 
9075
   -- Replace Package
9076
    UPDATE RELEASE_CONTENT
9077
       SET pv_id = newPvId,
9078
           insert_stamp = Ora_Sysdate,
9079
           insertor_id = UserId,
9080
         product_state = NULL
9081
     WHERE rtag_id = RtagId
9082
       AND pv_id = oldPvId;
9083
 
9084
   -- update the pegging table
9085
   UPDATE PEGGED_VERSIONS
9086
      SET pv_id = newPvId
9087
     WHERE rtag_id = RtagId
9088
       AND pv_id = oldPvId;
9089
 
9090
   -- update the advisory_ripple table
9091
   UPDATE ADVISORY_RIPPLE
9092
      SET pv_id = newPvId
9093
     WHERE rtag_id = RtagId
9094
       AND pv_id = oldPvId;
9095
 
9096
    /* LOG ACTION */
9097
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9098
     FROM PROJECTS proj,
9099
           RELEASE_TAGS rt
9100
    WHERE rt.PROJ_ID = proj.PROJ_ID
9101
      AND rt.RTAG_ID = RtagId;
9102
 
9103
   SELECT pv.PKG_VERSION INTO sPkgVersion
9104
     FROM PACKAGE_VERSIONS pv
9105
    WHERE pv.PV_ID = newPvId;
9106
 
9107
   Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
9108
   Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9109
 
9110
END;
9111
/*-------------------------------------------------------------------------------------------------------*/
9112
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9113
   ReleaseLocation VARCHAR2(4000);
9114
 
9115
BEGIN
9116
 
9117
 
9118
   -- Delete old package
9119
   DELETE
9120
     FROM RELEASE_CONTENT rc
9121
    WHERE rc.PV_ID = PvId
9122
      AND rc.RTAG_ID = RtagId;
9123
 
9124
 
9125
   /* LOG ACTION */
9126
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9127
     FROM PROJECTS proj,
9128
          RELEASE_TAGS rt
9129
    WHERE rt.PROJ_ID = proj.PROJ_ID
9130
      AND rt.RTAG_ID = RtagId;
9131
 
9132
   Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9133
 
9134
 
9135
END;
9136
/*-------------------------------------------------------------------------------------------------------*/
9137
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9138
   ReleaseLocation VARCHAR2(4000);
9139
 
9140
   CURSOR curMatchingPackage IS
9141
    SELECT mpv.PV_ID
9142
     FROM RELEASE_CONTENT rc,
9143
           PACKAGE_VERSIONS mpv,
9144
         PACKAGE_VERSIONS pv
9145
    WHERE rc.PV_ID = mpv.PV_ID
9146
      AND rc.RTAG_ID = RtagId
9147
      AND pv.PV_ID = PvId
9148
      AND pv.PKG_ID = mpv.PKG_ID
9149
      AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
9150
    recMatchingPackage curMatchingPackage%ROWTYPE;
9151
 
9152
BEGIN
9153
 
9154
   OPEN curMatchingPackage;
9155
    FETCH curMatchingPackage INTO recMatchingPackage;
9156
 
9157
    IF curMatchingPackage%FOUND THEN
9158
      -- Delete old package
9159
      DELETE
9160
        FROM RELEASE_CONTENT rc
9161
       WHERE rc.PV_ID = recMatchingPackage.PV_ID
9162
         AND rc.RTAG_ID = RtagId;
9163
 
9164
 
9165
      /* LOG ACTION */
9166
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9167
        FROM PROJECTS proj,
9168
              RELEASE_TAGS rt
9169
       WHERE rt.PROJ_ID = proj.PROJ_ID
9170
         AND rt.RTAG_ID = RtagId;
9171
 
9172
      Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9173
 
9174
   END IF;
9175
 
9176
 
9177
   CLOSE curMatchingPackage;
9178
 
9179
 
9180
 
9181
 
9182
END;
9183
/*-------------------------------------------------------------------------------------------------------*/
9184
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
9185
 
9186
   ReturnValue NUMBER;
9187
 
9188
BEGIN
9189
   SELECT rc.BASE_VIEW_ID INTO ReturnValue
9190
     FROM RELEASE_CONTENT rc
9191
    WHERE rc.RTAG_ID = RtagId
9192
      AND rc.PV_ID = PvId;
9193
 
9194
   RETURN ReturnValue;
9195
END;
9196
/*-------------------------------------------------------------------------------------------------------*/
9197
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
9198
 
9199
BEGIN
9200
   -- Reset Ignore warnings up-the-tree
9201
   RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
9202
 
9203
   -- Refresh Package states
9204
   TOUCH_RELEASE ( RtagId );
9205
 
9206
END;
9207
/*-------------------------------------------------------------------------------------------------------*/
9208
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
9209
   CURSOR curReleases IS
9210
    SELECT rc.RTAG_ID
9211
     FROM RELEASE_CONTENT rc
9212
    WHERE rc.PV_ID = PvId;
9213
    recReleases curReleases%ROWTYPE;
9214
 
9215
BEGIN
9216
 
9217
   OPEN curReleases;
9218
    FETCH curReleases INTO recReleases;
9219
 
9220
   WHILE curReleases%FOUND
9221
   LOOP
9222
 
9223
      RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
9224
 
9225
      FETCH curReleases INTO recReleases;
9226
   END LOOP;
9227
 
9228
   CLOSE curReleases;
9229
 
9230
END;
9231
/*-------------------------------------------------------------------------------------------------------*/
9232
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
9233
 
9234
BEGIN
9235
 
9236
   UPDATE RELEASE_CONTENT rc SET
9237
   rc.BASE_VIEW_ID = NewViewId
9238
   WHERE rc.PV_ID = PvId
9239
     AND rc.RTAG_ID = RtagId;
9240
 
9241
END;
9242
/*-------------------------------------------------------------------------------------------------------*/
9243
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
9244
 
9245
   RowCount NUMBER;
9246
 
9247
 
9248
   CURSOR curPackageClash IS
9249
   SELECT pkg.PKG_NAME,
9250
         er.*
9251
     FROM (
9252
 
9253
           /* Get existing referenced packages */
9254
         SELECT pv.PKG_ID,
9255
                pv.V_EXT
9256
           FROM RELEASE_LINKS rl,
9257
                 RELEASE_CONTENT rc,
9258
                 PACKAGE_VERSIONS pv
9259
          WHERE rl.RTAG_ID = nRtagId
9260
            AND rl.REF_RTAG_ID = rc.RTAG_ID
9261
            AND rc.PV_ID = pv.PV_ID
9262
 
9263
            ) er,
9264
         (
9265
 
9266
         /* Get current reference packages */
9267
         SELECT pv.PKG_ID,
9268
                pv.V_EXT
9269
           FROM RELEASE_CONTENT rc,
9270
                 PACKAGE_VERSIONS pv
9271
          WHERE rc.RTAG_ID = nRefRtagId
9272
            AND rc.PV_ID = pv.PV_ID
9273
 
9274
         ) cr,
9275
         PACKAGES PKG
9276
    WHERE er.PKG_ID = cr.PKG_ID
9277
      AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9278
      AND er.PKG_ID = pkg.PKG_ID;
9279
 
9280
   recPackageClash curPackageClash%ROWTYPE;
9281
 
9282
BEGIN
9283
   /*--------------- Business Rules Here -------------------*/
9284
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9285
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9286
   END IF;
9287
 
9288
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9289
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9290
   END IF;
9291
   /*-------------------------------------------------------*/
9292
   ProblemString := NULL;
9293
 
9294
 
9295
   -- Check if release already has references
9296
   SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
9297
     FROM RELEASE_LINKS rl
9298
    WHERE rl.RTAG_ID = nRtagId;
9299
 
9300
 
9301
   IF RowCount > 0 THEN
9302
      -- Found existing references
9303
 
9304
      -- Make sure there is no package clashes
9305
      OPEN curPackageClash;
9306
       FETCH curPackageClash INTO recPackageClash;
9307
 
9308
      IF curPackageClash%FOUND THEN
9309
 
9310
         ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
9311
 
9312
         WHILE curPackageClash%FOUND
9313
         LOOP
9314
            EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;   -- Do not allow variable overflow
9315
 
9316
            ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
9317
 
9318
            FETCH curPackageClash INTO recPackageClash;
9319
         END LOOP;
9320
 
9321
      END IF;
9322
 
9323
      CLOSE curPackageClash;
9324
 
9325
 
9326
   ELSE
9327
      -- No references found, hence reference a release
9328
 
9329
 
9330
      -- Remove exising package from this release to be referenced
9331
      REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);
9332
 
9333
 
9334
      -- Add new linked packages to release
9335
      INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
9336
      SELECT nRtagId,
9337
            rc.PV_ID,
9338
            rc.BASE_VIEW_ID,
9339
            rc.INSERT_STAMP,
9340
            rc.INSERTOR_ID,
9341
            rc.PKG_STATE
9342
        FROM RELEASE_CONTENT rc
9343
       WHERE rc.RTAG_ID = nRefRtagId;
9344
 
9345
 
9346
 
9347
      -- Copy ignore warnings for referenced packages
9348
      INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
9349
      SELECT nRtagId,
9350
            iw.PV_ID,
9351
            iw.DPV_ID,
9352
            iw.IS_PATCH_IGNORE
9353
        FROM IGNORE_WARNINGS iw,
9354
              RELEASE_CONTENT rc
9355
       WHERE iw.RTAG_ID = rc.RTAG_ID
9356
         AND iw.PV_ID = rc.PV_ID
9357
         AND rc.RTAG_ID = nRefRtagId;
9358
 
9359
 
9360
 
9361
      -- Reference release
9362
      INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
9363
      VALUES ( nRtagId, nRefRtagId );
9364
 
9365
 
9366
      -- Refresh Package states
9367
      TOUCH_RELEASE ( nRtagId );
9368
 
9369
   END IF;
9370
 
9371
 
9372
END;
9373
/*-------------------------------------------------------------------------------------------------------*/
9374
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
9375
 
9376
 
9377
BEGIN
9378
   /*--------------- Business Rules Here -------------------*/
9379
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9380
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9381
   END IF;
9382
 
9383
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9384
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9385
   END IF;
9386
 
9387
   /*-------------------------------------------------------*/
9388
 
9389
 
9390
   -- Remove ignore warnings for those packages who use referenced packages
9391
   DELETE FROM IGNORE_WARNINGS iw
9392
    WHERE iw.RTAG_ID = nRtagId
9393
      AND iw.DPV_ID IN (
9394
                        SELECT dep.DPV_ID
9395
                       FROM (
9396
 
9397
                           /* Get referenced packages */
9398
                           SELECT pv.PKG_ID,
9399
                                  pv.V_EXT
9400
                             FROM RELEASE_CONTENT rc,
9401
                                   PACKAGE_VERSIONS pv
9402
                            WHERE rc.RTAG_ID = nRefRtagId
9403
                              AND rc.PV_ID = pv.PV_ID
9404
 
9405
                           ) cr,
9406
                           (
9407
 
9408
                           /* Get all dependencies for current release */
9409
                           SELECT DISTINCT
9410
                                 pv.PKG_ID,
9411
                                 pv.V_EXT,
9412
                                 dep.DPV_ID
9413
                             FROM RELEASE_CONTENT rc,
9414
                                 PACKAGE_DEPENDENCIES dep,
9415
                                 PACKAGE_VERSIONS pv
9416
                            WHERE rc.RTAG_ID = nRtagId
9417
                              AND rc.PV_ID = dep.PV_ID
9418
                              AND dep.PV_ID = pv.PV_ID
9419
 
9420
                           ) dep
9421
                      WHERE dep.PKG_ID = cr.PKG_ID
9422
                        AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9423
                     );
9424
 
9425
 
9426
 
9427
 
9428
   -- Remove ignore warnings for those package which are going to be replaced with the reference
9429
   DELETE FROM IGNORE_WARNINGS iw
9430
    WHERE iw.RTAG_ID = nRtagId
9431
      AND iw.PV_ID IN (
9432
                  SELECT pv.PV_ID
9433
                    FROM (
9434
 
9435
                        /* Get referenced packages */
9436
                        SELECT pv.PKG_ID,
9437
                               pv.V_EXT
9438
                          FROM RELEASE_CONTENT rc,
9439
                                PACKAGE_VERSIONS pv
9440
                         WHERE rc.RTAG_ID = nRefRtagId
9441
                           AND rc.PV_ID = pv.PV_ID
9442
 
9443
                        ) cr,
9444
                        RELEASE_CONTENT rc,
9445
                        PACKAGE_VERSIONS pv
9446
                   WHERE pv.PKG_ID = cr.PKG_ID
9447
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9448
                     AND rc.RTAG_ID = nRtagId
9449
                     AND rc.PV_ID = pv.PV_ID
9450
                  );
9451
 
9452
 
9453
 
9454
 
9455
 
9456
   -- Remove matching packages from release
9457
   DELETE FROM RELEASE_CONTENT rc
9458
    WHERE rc.RTAG_ID = nRtagId
9459
      AND rc.PV_ID IN (
9460
                  SELECT pv.PV_ID
9461
                    FROM (
9462
 
9463
                        /* Get referenced packages */
9464
                        SELECT pv.PKG_ID,
9465
                               pv.V_EXT
9466
                          FROM RELEASE_CONTENT rc,
9467
                                PACKAGE_VERSIONS pv
9468
                         WHERE rc.RTAG_ID = nRefRtagId
9469
                           AND rc.PV_ID = pv.PV_ID
9470
 
9471
                        ) cr,
9472
                        RELEASE_CONTENT rc,
9473
                        PACKAGE_VERSIONS pv
9474
                   WHERE pv.PKG_ID = cr.PKG_ID
9475
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9476
                     AND rc.RTAG_ID = nRtagId
9477
                     AND rc.PV_ID = pv.PV_ID
9478
                  );
9479
 
9480
 
9481
 
9482
 
9483
 
9484
   -- Remove Reference release
9485
   DELETE
9486
     FROM RELEASE_LINKS rl
9487
    WHERE rl.RTAG_ID = nRtagId
9488
      AND rl.REF_RTAG_ID = nRefRtagId;
9489
 
9490
 
9491
   -- Refresh Package states
9492
   TOUCH_RELEASE ( nRtagId );
9493
 
9494
 
9495
END;
9496
/*-------------------------------------------------------------------------------------------------------*/
9497
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
9498
 
9499
   cReleaseMode CHAR(1);
9500
   cPvMode CHAR(1);
9501
 
9502
BEGIN
9503
 
9504
   -- Get Release Mode
9505
   SELECT rt.OFFICIAL INTO cReleaseMode
9506
     FROM RELEASE_TAGS rt
9507
    WHERE rt.RTAG_ID = RtagId;
9508
 
9509
 
9510
   -- Get Package Mode
9511
   SELECT pv.DLOCKED INTO cPvMode
9512
     FROM PACKAGE_VERSIONS pv
9513
    WHERE pv.PV_ID = PvId;
9514
 
9515
   -- Only check if package is locked
9516
   IF (cPvMode = 'Y') THEN
9517
 
9518
      IF (cReleaseMode != 'N') AND (Permission != 'Y')
9519
      THEN
9520
         RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
9521
 
9522
      END IF;
9523
 
9524
   END IF;
9525
 
9526
 
9527
END;
9528
 
9529
/*-------------------------------------------------------------------------------------------------------*/
9530
END PK_RELEASE;
1374 dpurdie 9531
/
9532
--------------------------------------------------------
9533
--  DDL for Package Body PK_PROJECT
9534
--------------------------------------------------------
1373 dpurdie 9535
 
9536
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS
9537
 
9538
    /*------------------------------------------------------------------------*/
9539
    PROCEDURE update_base_url (
9540
    nprojid   IN  projects.proj_id%TYPE,
9541
    sbaseurl  IN  VARCHAR2
9542
    ) IS
9543
    BEGIN
9544
 
9545
    UPDATE projects
9546
    SET base_url = sbaseurl
9547
    WHERE proj_id = nprojid;
9548
 
9549
    END update_base_url;
9550
 
9551
/*------------------------------------------------------------------------*/
9552
    PROCEDURE update_project_config (
9553
    nprojid   IN  projects.proj_id%TYPE,
9554
    sbaseurl  IN  VARCHAR2,
9555
    sjirakey  IN  VARCHAR2
9556
    ) IS
9557
    BEGIN
9558
 
9559
    UPDATE projects
9560
    SET base_url = sbaseurl,
9561
        jira_key = sjirakey
9562
    WHERE proj_id = nprojid;
9563
 
9564
    END update_project_config;
9565
    /*------------------------------------------------------------------------*/
9566
 
9567
    END pk_project;
1374 dpurdie 9568
/
9569
--------------------------------------------------------
9570
--  DDL for Package Body PK_ENVIRONMENT
9571
--------------------------------------------------------
1373 dpurdie 9572
 
9573
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT" 
9574
IS
9575
 
9576
   /*-------------------------------------------------------------------------------------------------------*/
9577
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
9578
     RETURN NUMBER
9579
   IS
9580
   BEGIN
9581
      /*
9582
     || N - unlocked
9583
     || Y - release and locked
9584
     || P - penging approval
9585
     || A - approved package ready for auto-build
9586
     */
9587
     IF cdlock = 'N' OR cdlock = 'R'
9588
     THEN
9589
       -- WORK IN PROGRESS --
9590
       RETURN 0;
9591
     ELSIF cdlock = 'P' OR cdlock = 'A'
9592
     THEN
9593
       -- PENDING --
9594
       RETURN 1;
9595
     ELSIF cdlock = 'Y'
9596
     THEN
9597
       -- RELEASED --
9598
       RETURN 2;
9599
     ELSE
9600
       -- NOT FOUND --
9601
       raise_application_error
9602
                   (-20000,
9603
                      'Cannot decide where to place package. [cDlock='
9604
                    || cdlock
9605
                    || ']'
9606
                   );
9607
     END IF;
9608
   END;
9609
 
9610
/*-------------------------------------------------------------------------------------------------------*/
9611
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
9612
     RETURN NUMBER
9613
   IS
9614
     envtab   NUMBER         := -1;
9615
 
9616
     CURSOR curarea
9617
     IS
9618
       SELECT 2 AS envtab
9619
         FROM release_content rc
9620
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9621
       UNION
9622
       SELECT 0 AS envtab
9623
         FROM work_in_progress wip
9624
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9625
       UNION
9626
       SELECT 1 AS envtab
9627
         FROM planned pl
9628
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9629
 
9630
     recarea   curarea%ROWTYPE;
9631
   BEGIN
9632
     OPEN curarea;
9633
 
9634
     FETCH curarea
9635
      INTO recarea;
9636
 
9637
     IF curarea%FOUND
9638
     THEN
9639
       envtab := recarea.envtab;
9640
     END IF;
9641
 
9642
     CLOSE curarea;
9643
 
9644
     RETURN envtab;
9645
   END;
9646
 
9647
/*-------------------------------------------------------------------------------------------------------*/
9648
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
9649
     RETURN NUMBER
9650
   IS
9651
     ispatch   package_versions.dlocked%TYPE;
9652
     viewid   NUMBER                    := -1;
9653
 
9654
     CURSOR curview
9655
     IS
9656
       SELECT rc.base_view_id AS view_id
9657
         FROM release_content rc
9658
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9659
       UNION
9660
       SELECT wip.view_id AS view_id
9661
         FROM work_in_progress wip
9662
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9663
       UNION
9664
       SELECT pl.view_id AS view_id
9665
         FROM planned pl
9666
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9667
 
9668
     recview   curview%ROWTYPE;
9669
   BEGIN
9670
     -- Get dlock state
9671
     SELECT pv.is_patch
9672
      INTO ispatch
9673
      FROM package_versions pv
9674
      WHERE pv.pv_id = pvid;
9675
 
9676
     -- Decide which view id should package go under.
9677
     IF (ispatch != 'Y') OR (ispatch IS NULL)
9678
     THEN
9679
       -- Get VIEW ID of Package
9680
       OPEN curview;
9681
 
9682
       FETCH curview
9683
        INTO recview;
9684
 
9685
       IF curview%FOUND
9686
       THEN
9687
         viewid := recview.view_id;
9688
       ELSE
9689
         raise_application_error
9690
            (-20000,
9691
               'Cannot find view_id to proceed. [PvId='
9692
            || pvid
9693
            || ']. The current version may not exist in the release anymore.'
9694
            );
9695
       END IF;
9696
 
9697
       CLOSE curview;
9698
     ELSE
9699
       -- Get VIEW ID of Patch (view id of parent package)
9700
       SELECT rc.base_view_id
9701
         INTO viewid
9702
         FROM release_content rc, package_patches ppv
9703
        WHERE rc.rtag_id = rtagid
9704
         AND rc.pv_id = ppv.pv_id
9705
         AND ppv.patch_id = pvid;
9706
     END IF;
9707
 
9708
     RETURN viewid;
9709
   END;
9710
 
9711
/*-------------------------------------------------------------------------------------------------------*/
9712
   PROCEDURE add_package (
9713
     pvid    IN   NUMBER,
9714
     viewid   IN   NUMBER,
9715
     rtagid   IN   NUMBER,
9716
     userid   IN   NUMBER
9717
   )
9718
   IS
9719
     dlocked   package_versions.dlocked%TYPE;
9720
     envtab   NUMBER;
9721
   BEGIN
9722
     IF can_edit_pkg_in_project (pvid, rtagid) = 1
9723
     THEN
9724
       -- Get dlock state
9725
       SELECT pv.dlocked
9726
         INTO dlocked
9727
         FROM package_versions pv
9728
        WHERE pv.pv_id = pvid;
9729
 
9730
       -- Get which area should go under
9731
       envtab := select_environment_area (dlocked);
9732
       -- Log
9733
       log_action (pvid, 'action', userid, 'Start of Package Add...');
9734
 
9735
       -- Remove Package
9736
       IF envtab = 0
9737
       THEN
9738
         -- WORK IN PROGRESS --
9739
         pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
9740
       ELSIF envtab = 1
9741
       THEN
9742
         -- PENDING --
9743
         pk_planned.add_package (pvid, viewid, rtagid, userid);
9744
       ELSIF envtab = 2
9745
       THEN
9746
         -- RELEASED --
9747
         -- NOTE: this package will be replaced with matching package
9748
         pk_release.add_package (pvid, viewid, rtagid, userid);
9749
         -- Now do post Release Actions
9750
         pk_release.run_post_actions (pvid, rtagid);
9751
       END IF;
9752
 
9753
       -- Log
9754
       log_action (pvid, 'action', userid, 'End of Package Add...');
9755
     END IF;
9756
   END;
9757
 
9758
/*-------------------------------------------------------------------------------------------------------*/
9759
   PROCEDURE add_package_bulk (
9760
     pvidlist   IN   VARCHAR2,
9761
     viewid    IN   NUMBER,
9762
     rtagid    IN   NUMBER,
9763
     userid    IN   NUMBER
9764
   )
9765
   IS
9766
     nidcollector   relmgr_number_tab_t         := relmgr_number_tab_t
9767
                                                        ();
9768
     dlocked      package_versions.dlocked%TYPE;
9769
     pvid         NUMBER;
9770
     envtab       NUMBER;
9771
   BEGIN
9772
     /*--------------- Business Rules Here -------------------*/
9773
     IF (pvidlist IS NULL)
9774
     THEN
9775
       raise_application_error (-20000,
9776
                          'Please select at least one package.'
9777
                         );
9778
     END IF;
9779
 
9780
/*-------------------------------------------------------*/
9781
     nidcollector := in_list_number (pvidlist);
9782
 
9783
     FOR i IN 1 .. nidcollector.COUNT
9784
     LOOP
9785
       pvid := nidcollector (i);
9786
       add_package (pvid, viewid, rtagid, userid);
9787
     END LOOP;
9788
   END;
9789
 
9790
/*-------------------------------------------------------------------------------------------------------*/
9791
   PROCEDURE replace_package (
9792
     newpvid  IN   NUMBER,
9793
     oldpvid  IN   NUMBER,
9794
     rtagid   IN   NUMBER,
9795
     userid   IN   NUMBER
9796
   )
9797
   IS
9798
     dlocked      package_versions.dlocked%TYPE;
9799
     viewid       NUMBER;
9800
     envtab       NUMBER;
9801
     ROWCOUNT     NUMBER;
9802
     creleasemode CHAR (1);
9803
     npkgid       NUMBER;
9804
   BEGIN
9805
     /*--------------- Business Rules Here -------------------*/
9806
     -- Check if oldPvId exists. It could have been removed
9807
     SELECT COUNT (pv.pv_id)
9808
       INTO ROWCOUNT
9809
       FROM package_versions pv
9810
      WHERE pv.pv_id = oldpvid;
9811
 
9812
/*-------------------------------------------------------*/
9813
 
9814
     /* This procedure is usually used by "History" option in Release Manager */
9815
 
9816
     -- Get dlock state
9817
     SELECT pv.dlocked
9818
       INTO dlocked
9819
       FROM package_versions pv
9820
      WHERE pv.pv_id = newpvid;
9821
 
9822
     -- Get VIEW_ID ---
9823
     IF ROWCOUNT = 1
9824
     THEN
9825
       viewid := get_view_location (oldpvid, rtagid);
9826
     ELSE
9827
       -- Set ViewID to default
9828
       viewid := 7;
9829
     END IF;
9830
 
9831
     -- Get which area should go under
9832
     envtab := select_environment_area (dlocked);
9833
     -- Log
9834
     log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
9835
 
9836
     -- Replace package
9837
     IF envtab = 0
9838
     THEN
9839
       -- WORK IN PROGRESS --
9840
 
9841
       -- Delete old package
9842
       pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
9843
 
9844
       -- Add new package
9845
       pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
9846
     ELSIF envtab = 1
9847
     THEN
9848
       -- PENDING --
9849
 
9850
       -- Delete old package
9851
       pk_planned.remove_package (oldpvid, rtagid, userid);
9852
 
9853
       -- Add new package
9854
       pk_planned.add_package (newpvid, viewid, rtagid, userid);
9855
     ELSIF envtab = 2
9856
     THEN
9857
       -- RELEASED --
9858
 
9859
       -- Delete old package
9860
       pk_release.remove_package (oldpvid, rtagid, userid);
9861
       -- Add new package
9862
       pk_release.add_package (newpvid, viewid, rtagid, userid);
9863
 
9864
       -- update the pegging table
9865
       UPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9866
 
9867
       -- update the advisory ripple table
9868
       UPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9869
 
9870
       -- Now do post Release Actions
9871
       pk_release.run_post_actions (newpvid, rtagid);
9872
     END IF;
9873
 
9874
     -- Log
9875
     log_action (oldpvid, 'action', userid, 'End of Package Replace...');
9876
   END;
9877
 
9878
/*-------------------------------------------------------------------------------------------------------*/
9879
   FUNCTION remove_package (
9880
     pvid        IN   NUMBER,
9881
     rtagid      IN   NUMBER,
9882
     userid      IN   NUMBER,
9883
     forceremove IN   CHAR
9884
   )
9885
     RETURN NUMBER
9886
   IS
9887
     envtab      NUMBER;
9888
     isused      BOOLEAN;
9889
     recordcount   NUMBER;
9890
   BEGIN
9891
/*--------------- Business Rules Here -------------------*/
9892
/*-------------------------------------------------------*/
9893
 
9894
     -- Find location of package
9895
     envtab := get_package_area (pvid, rtagid);
9896
 
9897
     -- Remove Package
9898
     IF envtab = 0
9899
     THEN
9900
       -- WORK IN PROGRESS --
9901
       -- Delete package
9902
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
9903
 
9904
       RETURN 0;
9905
     ELSIF envtab = 1
9906
     THEN
9907
       -- PENDING --
9908
       -- Delete package
9909
       pk_planned.remove_package (pvid, rtagid, userid);
9910
 
9911
       RETURN 0;
9912
     ELSIF envtab = 2
9913
     THEN
9914
       -- RELEASED --
9915
 
9916
       -- Check if is used by other packages
9917
       isused := TRUE;
9918
 
9919
       IF forceremove = 'N'
9920
       THEN
9921
         SELECT COUNT (pv.pv_id)
9922
           INTO recordcount
9923
           FROM (SELECT dpv.pkg_id, dpv.v_ext
9924
                 FROM release_content rc,
9925
                     package_dependencies dep,
9926
                     package_versions dpv
9927
                WHERE rc.rtag_id = rtagid
9928
                  AND rc.pv_id = dep.pv_id
9929
                  AND dep.dpv_id = dpv.pv_id) rdep,
9930
               package_versions pv
9931
          WHERE pv.pkg_id = rdep.pkg_id
9932
            AND NVL (pv.v_ext, '|LINK_A_NULL|') =
9933
                                  NVL (rdep.v_ext, '|LINK_A_NULL|')
9934
            AND pv.pv_id = pvid;
9935
 
9936
         IF recordcount > 0
9937
         THEN
9938
            RETURN 1;               -- Return 1 as package being used
9939
         ELSE
9940
            isused := FALSE;
9941
         END IF;
9942
       END IF;
9943
 
9944
       IF forceremove = 'Y' OR NOT isused
9945
       THEN
9946
         -- Delete old package
9947
         pk_release.remove_package (pvid, rtagid, userid);
9948
 
9949
         -- Delete old package's pegging info
9950
         DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;
9951
 
9952
         -- Delete old package's advisory ripple info
9953
         DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;
9954
 
9955
         -- Now do post Release Actions
9956
         pk_release.run_post_actions (pvid, rtagid);
9957
         RETURN 0;
9958
       END IF;
9959
     END IF;
9960
   END;
9961
 
9962
/*-------------------------------------------------------------------------------------------------------*/
9963
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
9964
 
9965
   PROCEDURE get_environment_items (
9966
     viewtype         IN      NUMBER,
9967
     userid           IN      NUMBER,
9968
     rtagid           IN      NUMBER,
9969
     sviewidshowlist  IN      VARCHAR2,
9970
     ntruerecordcount OUT     NUMBER,
9971
     recordset        OUT     typecur
9972
   )
9973
   IS
9974
   BEGIN
9975
     -- Get true record count because views can give false count
9976
     SELECT COUNT (pl.pv_id)
9977
      INTO ntruerecordcount
9978
      FROM environment_view pl
9979
      WHERE pl.rtag_id = rtagid;
9980
 
9981
     IF viewtype = 1
9982
     THEN
9983
       /*--- GUEST VIEW ---*/
9984
       OPEN recordset FOR
9985
         SELECT   *
9986
            FROM (
9987
                 /* Base Views collapsed */
9988
                 SELECT DISTINCT vi.view_id, vi.view_name,
9989
                             TO_NUMBER (NULL) AS pkg_state,
9990
                             TO_NUMBER (NULL) AS deprecated_state,
9991
                             TO_NUMBER (NULL) AS pv_id,
9992
                             NULL AS pkg_name, NULL AS pkg_version,
9993
                             NULL AS dlocked, NULL AS pv_description,
9994
                             rel.operation
9995
                         FROM environment_view rel, views vi
9996
                        WHERE rel.view_id = vi.view_id
9997
                          AND rtag_id = rtagid
9998
                          AND rel.view_id NOT IN (
9999
                               SELECT *
10000
                                 FROM THE
10001
                                       (SELECT CAST
10002
                                               (in_list_number
10003
                                                  (sviewidshowlist
10004
                                                  ) AS relmgr_number_tab_t
10005
                                               )
10006
                                         FROM DUAL
10007
                                       ))
10008
                 UNION
10009
                 /* Base Views expanded */
10010
                 SELECT vi.view_id, vi.view_name,
10011
                      DECODE (rel.pkg_state,
10012
                            NULL, 0,
10013
                            rel.pkg_state
10014
                           ) AS pkg_state,
10015
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10016
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10017
                      rel.operation
10018
                  FROM environment_view rel,
10019
                      PACKAGES pkg,
10020
                      package_versions pv,
10021
                      views vi
10022
                  WHERE pv.pkg_id = pkg.pkg_id
10023
                   AND rel.pv_id = pv.pv_id
10024
                   AND rel.view_id = vi.view_id
10025
                   AND rel.view_id IN (
10026
                        SELECT *
10027
                          FROM THE
10028
                                (SELECT CAST
10029
                                        (in_list_number
10030
                                               (sviewidshowlist) AS relmgr_number_tab_t
10031
                                        )
10032
                                  FROM DUAL
10033
                                ))
10034
                   AND rtag_id = rtagid) ord
10035
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10036
     ELSIF viewtype = 2
10037
     THEN
10038
       /*--- PERSONAL VIEW ---*/
10039
       OPEN recordset FOR
10040
         SELECT   *
10041
            FROM (
10042
                 /* Base Views collapsed */
10043
                 SELECT DISTINCT vi.view_id, vi.view_name,
10044
                             TO_NUMBER (NULL) AS pkg_state,
10045
                             TO_NUMBER (NULL) AS deprecated_state,
10046
                             TO_NUMBER (NULL) AS pv_id,
10047
                             NULL AS pkg_name, NULL AS pkg_version,
10048
                             NULL AS dlocked, NULL AS pv_description,
10049
                             rel.operation
10050
                         FROM environment_view rel,
10051
                             view_settings vs,
10052
                             views vi
10053
                        WHERE rel.view_id = vi.view_id
10054
                          AND vs.view_id = rel.view_id
10055
                          AND vs.user_id = userid
10056
                          AND rtag_id = rtagid
10057
                          AND rel.view_id NOT IN (
10058
                               SELECT *
10059
                                 FROM THE
10060
                                       (SELECT CAST
10061
                                               (in_list_number
10062
                                                  (sviewidshowlist
10063
                                                  ) AS relmgr_number_tab_t
10064
                                               )
10065
                                         FROM DUAL
10066
                                       ))
10067
                 UNION
10068
                 /* Base Views expanded */
10069
                 SELECT vi.view_id, vi.view_name,
10070
                      DECODE (rel.pkg_state,
10071
                            NULL, 0,
10072
                            rel.pkg_state
10073
                           ) AS pkg_state,
10074
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10075
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10076
                      rel.operation
10077
                  FROM environment_view rel,
10078
                      PACKAGES pkg,
10079
                      package_versions pv,
10080
                      views vi,
10081
                      view_settings vs
10082
                  WHERE pv.pkg_id = pkg.pkg_id
10083
                   AND rel.pv_id = pv.pv_id
10084
                   AND rel.view_id = vi.view_id
10085
                   AND vs.view_id = vi.view_id
10086
                   AND vs.user_id = userid
10087
                   AND rel.view_id IN (
10088
                        SELECT *
10089
                          FROM THE
10090
                                (SELECT CAST
10091
                                        (in_list_number
10092
                                               (sviewidshowlist) AS relmgr_number_tab_t
10093
                                        )
10094
                                  FROM DUAL
10095
                                ))
10096
                   AND rtag_id = rtagid
10097
                 UNION
10098
                 /* Private Views collapsed */
10099
                 SELECT vi.view_id, vi.view_name,
10100
                      TO_NUMBER (NULL) AS pkg_state,
10101
                      TO_NUMBER (NULL) AS deprecated_state,
10102
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10103
                      NULL AS pkg_version, NULL AS dlocked,
10104
                      NULL AS pv_description,
10105
                      rel.operation
10106
                  FROM view_settings vs,
10107
                      view_def vd,
10108
                      views vi,
10109
                      environment_view rel,
10110
                      package_versions pv
10111
                  WHERE vs.view_id = vi.view_id
10112
                   AND rel.pv_id = pv.pv_id
10113
                   AND vd.pkg_id = pv.pkg_id
10114
                   AND vd.view_id = vi.view_id
10115
                   AND vi.base_view = 'N'
10116
                   AND rel.rtag_id = rtagid
10117
                   AND vs.user_id = userid
10118
                   AND vi.view_id NOT IN (
10119
                        SELECT *
10120
                          FROM THE
10121
                                (SELECT CAST
10122
                                        (in_list_number
10123
                                               (sviewidshowlist) AS relmgr_number_tab_t
10124
                                        )
10125
                                  FROM DUAL
10126
                                ))
10127
                 UNION
10128
                 /* Private Views expanded */
10129
                 SELECT vi.view_id, vi.view_name,
10130
                      DECODE (rel.pkg_state,
10131
                            NULL, 0,
10132
                            rel.pkg_state
10133
                           ) AS pkg_state,
10134
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10135
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10136
                      rel.operation
10137
                  FROM users usr,
10138
                      view_settings vs,
10139
                      view_def vd,
10140
                      views vi,
10141
                      environment_view rel,
10142
                      PACKAGES pkg,
10143
                      package_versions pv
10144
                  WHERE vs.user_id = usr.user_id
10145
                   AND vs.view_id = vi.view_id
10146
                   AND vd.view_id = vi.view_id
10147
                   AND pv.pkg_id = pkg.pkg_id
10148
                   AND rel.pv_id = pv.pv_id
10149
                   AND rel.rtag_id = rtagid
10150
                   AND vd.pkg_id = pkg.pkg_id
10151
                   AND vi.base_view = 'N'
10152
                   AND vi.view_id IN (
10153
                        SELECT *
10154
                          FROM THE
10155
                                (SELECT CAST
10156
                                        (in_list_number
10157
                                               (sviewidshowlist) AS relmgr_number_tab_t
10158
                                        )
10159
                                  FROM DUAL
10160
                                ))
10161
                   AND usr.user_id = userid) ord
10162
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10163
     END IF;
10164
   END;
10165
 
10166
/*-------------------------------------------------------------------------------------------------------*/
10167
   PROCEDURE get_released_items (
10168
     viewtype         IN      NUMBER,
10169
     userid           IN      NUMBER,
10170
     rtagid           IN      NUMBER,
10171
     sviewidshowlist  IN      VARCHAR2,
10172
     ntruerecordcount OUT     NUMBER,
10173
     recordset        OUT     typecur
10174
   )
10175
   IS
10176
   BEGIN
10177
     -- Get true record count because views can give false count
10178
     SELECT COUNT (rc.pv_id)
10179
      INTO ntruerecordcount
10180
      FROM release_content rc
10181
      WHERE rc.rtag_id = rtagid;
10182
 
10183
     IF viewtype = 1
10184
     THEN
10185
       /*--- GUEST VIEW ---*/
10186
       OPEN recordset FOR
10187
         SELECT   *
10188
            FROM (
10189
                 /* Base Views collapsed */
10190
                 SELECT DISTINCT vi.view_id, vi.view_name,
10191
                             TO_NUMBER (NULL) AS pkg_state,
10192
                             TO_NUMBER (NULL) AS deprecated_state,
10193
                             TO_NUMBER (NULL) AS pv_id,
10194
                             NULL AS pkg_name, NULL AS pkg_version,
10195
                             NULL AS dlocked, NULL AS pv_description
10196
                         FROM release_content rel, views vi
10197
                        WHERE rel.base_view_id = vi.view_id
10198
                          AND rtag_id = rtagid
10199
                          AND rel.base_view_id NOT IN (
10200
                               SELECT *
10201
                                 FROM THE
10202
                                       (SELECT CAST
10203
                                               (in_list_number
10204
                                                  (sviewidshowlist
10205
                                                  ) AS relmgr_number_tab_t
10206
                                               )
10207
                                         FROM DUAL
10208
                                       ))
10209
                 UNION
10210
                 /* Base Views expanded */
10211
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10212
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10213
                      pv.pkg_version, pv.dlocked, pv.pv_description
10214
                  FROM release_content rel,
10215
                      PACKAGES pkg,
10216
                      package_versions pv,
10217
                      views vi
10218
                  WHERE pv.pkg_id = pkg.pkg_id
10219
                   AND rel.pv_id = pv.pv_id
10220
                   AND rel.base_view_id = vi.view_id
10221
                   AND rel.base_view_id IN (
10222
                        SELECT *
10223
                          FROM THE
10224
                                (SELECT CAST
10225
                                        (in_list_number
10226
                                               (sviewidshowlist) AS relmgr_number_tab_t
10227
                                        )
10228
                                  FROM DUAL
10229
                                ))
10230
                   AND rtag_id = rtagid) ord
10231
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10232
     ELSIF viewtype = 2
10233
     THEN
10234
       /*--- PERSONAL VIEW ---*/
10235
       OPEN recordset FOR
10236
         SELECT   *
10237
            FROM (
10238
                 /* Base Views collapsed */
10239
                 SELECT DISTINCT vi.view_id, vi.view_name,
10240
                             TO_NUMBER (NULL) AS pkg_state,
10241
                             TO_NUMBER (NULL) AS deprecated_state,
10242
                             TO_NUMBER (NULL) AS pv_id,
10243
                             NULL AS pkg_name, NULL AS pkg_version,
10244
                             NULL AS dlocked, NULL AS pv_description
10245
                         FROM release_content rel,
10246
                             view_settings vs,
10247
                             views vi
10248
                        WHERE rel.base_view_id = vi.view_id
10249
                          AND vs.view_id = rel.base_view_id
10250
                          AND vs.user_id = userid
10251
                          AND rtag_id = rtagid
10252
                          AND rel.base_view_id NOT IN (
10253
                               SELECT *
10254
                                 FROM THE
10255
                                       (SELECT CAST
10256
                                               (in_list_number
10257
                                                  (sviewidshowlist
10258
                                                  ) AS relmgr_number_tab_t
10259
                                               )
10260
                                         FROM DUAL
10261
                                       ))
10262
                 UNION
10263
                 /* Base Views expanded */
10264
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10265
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10266
                      pv.pkg_version, pv.dlocked, pv.pv_description
10267
                  FROM release_content rel,
10268
                      PACKAGES pkg,
10269
                      package_versions pv,
10270
                      views vi,
10271
                      view_settings vs
10272
                  WHERE pv.pkg_id = pkg.pkg_id
10273
                   AND rel.pv_id = pv.pv_id
10274
                   AND rel.base_view_id = vi.view_id
10275
                   AND vs.view_id = vi.view_id
10276
                   AND vs.user_id = userid
10277
                   AND rel.base_view_id IN (
10278
                        SELECT *
10279
                          FROM THE
10280
                                (SELECT CAST
10281
                                        (in_list_number
10282
                                               (sviewidshowlist) AS relmgr_number_tab_t
10283
                                        )
10284
                                  FROM DUAL
10285
                                ))
10286
                   AND rtag_id = rtagid
10287
                 UNION
10288
                 /* Private Views collapsed */
10289
                 SELECT vi.view_id, vi.view_name,
10290
                      TO_NUMBER (NULL) AS pkg_state,
10291
                      TO_NUMBER (NULL) AS deprecated_state,
10292
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10293
                      NULL AS pkg_version, NULL AS dlocked,
10294
                      NULL AS pv_description
10295
                  FROM view_settings vs,
10296
                      view_def vd,
10297
                      views vi,
10298
                      release_content rel,
10299
                      package_versions pv
10300
                  WHERE vs.view_id = vi.view_id
10301
                   AND rel.pv_id = pv.pv_id
10302
                   AND vd.pkg_id = pv.pkg_id
10303
                   AND vd.view_id = vi.view_id
10304
                   AND vi.base_view = 'N'
10305
                   AND rel.rtag_id = rtagid
10306
                   AND vs.user_id = userid
10307
                   AND vi.view_id NOT IN (
10308
                        SELECT *
10309
                          FROM THE
10310
                                (SELECT CAST
10311
                                        (in_list_number
10312
                                               (sviewidshowlist) AS relmgr_number_tab_t
10313
                                        )
10314
                                  FROM DUAL
10315
                                ))
10316
                 UNION
10317
                 /* Private Views expanded */
10318
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10319
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10320
                      pv.pkg_version, pv.dlocked, pv.pv_description
10321
                  FROM users usr,
10322
                      view_settings vs,
10323
                      view_def vd,
10324
                      views vi,
10325
                      release_content rel,
10326
                      PACKAGES pkg,
10327
                      package_versions pv
10328
                  WHERE vs.user_id = usr.user_id
10329
                   AND vs.view_id = vi.view_id
10330
                   AND vd.view_id = vi.view_id
10331
                   AND pv.pkg_id = pkg.pkg_id
10332
                   AND rel.pv_id = pv.pv_id
10333
                   AND rel.rtag_id = rtagid
10334
                   AND vd.pkg_id = pkg.pkg_id
10335
                   AND vi.base_view = 'N'
10336
                   AND vi.view_id IN (
10337
                        SELECT *
10338
                          FROM THE
10339
                                (SELECT CAST
10340
                                        (in_list_number
10341
                                               (sviewidshowlist) AS relmgr_number_tab_t
10342
                                        )
10343
                                  FROM DUAL
10344
                                ))
10345
                   AND usr.user_id = userid) ord
10346
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10347
     END IF;
10348
   END;
10349
 
10350
/*-------------------------------------------------------------------------------------------------------*/
10351
   PROCEDURE get_work_in_progress_items (
10352
     viewtype         IN      NUMBER,
10353
     userid           IN      NUMBER,
10354
     rtagid           IN      NUMBER,
10355
     sviewidshowlist  IN      VARCHAR2,
10356
     ntruerecordcount OUT     NUMBER,
10357
     recordset        OUT     typecur
10358
   )
10359
   IS
10360
   BEGIN
10361
     -- Get true record count because views can give false count
10362
     SELECT COUNT (wip.pv_id)
10363
      INTO ntruerecordcount
10364
      FROM work_in_progress wip
10365
      WHERE wip.rtag_id = rtagid;
10366
 
10367
     IF viewtype = 1
10368
     THEN
10369
       /*--- GUEST VIEW ---*/
10370
       OPEN recordset FOR
10371
         SELECT   *
10372
            FROM (
10373
                 /* Base Views collapsed */
10374
                 SELECT DISTINCT vi.view_id, vi.view_name,
10375
                             TO_NUMBER (NULL) AS pkg_state,
10376
                             TO_NUMBER (NULL) AS deprecated_state,
10377
                             TO_NUMBER (NULL) AS pv_id,
10378
                             NULL AS pkg_name, NULL AS pkg_version,
10379
                             NULL AS dlocked, NULL AS pv_description
10380
                         FROM work_in_progress rel, views vi
10381
                        WHERE rel.view_id = vi.view_id
10382
                          AND rtag_id = rtagid
10383
                          AND rel.view_id NOT IN (
10384
                               SELECT *
10385
                                 FROM THE
10386
                                       (SELECT CAST
10387
                                               (in_list_number
10388
                                                  (sviewidshowlist
10389
                                                  ) AS relmgr_number_tab_t
10390
                                               )
10391
                                         FROM DUAL
10392
                                       ))
10393
                 UNION
10394
                 /* Base Views expanded */
10395
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10396
 
10397
                      --rel.pkg_state,
10398
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10399
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10400
                      pv.pv_description
10401
                  FROM work_in_progress rel,
10402
                      PACKAGES pkg,
10403
                      package_versions pv,
10404
                      views vi
10405
                  WHERE pv.pkg_id = pkg.pkg_id
10406
                   AND rel.pv_id = pv.pv_id
10407
                   AND rel.view_id = vi.view_id
10408
                   AND rel.view_id IN (
10409
                        SELECT *
10410
                          FROM THE
10411
                                (SELECT CAST
10412
                                        (in_list_number
10413
                                               (sviewidshowlist) AS relmgr_number_tab_t
10414
                                        )
10415
                                  FROM DUAL
10416
                                ))
10417
                   AND rtag_id = rtagid) ord
10418
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10419
     ELSIF viewtype = 2
10420
     THEN
10421
       /*--- PERSONAL VIEW ---*/
10422
       OPEN recordset FOR
10423
         SELECT   *
10424
            FROM (
10425
                 /* Base Views collapsed */
10426
                 SELECT DISTINCT vi.view_id, vi.view_name,
10427
                             TO_NUMBER (NULL) AS pkg_state,
10428
                             TO_NUMBER (NULL) AS deprecated_state,
10429
                             TO_NUMBER (NULL) AS pv_id,
10430
                             NULL AS pkg_name, NULL AS pkg_version,
10431
                             NULL AS dlocked, NULL AS pv_description
10432
                         FROM work_in_progress rel,
10433
                             view_settings vs,
10434
                             views vi
10435
                        WHERE rel.view_id = vi.view_id
10436
                          AND vs.view_id = rel.view_id
10437
                          AND vs.user_id = userid
10438
                          AND rtag_id = rtagid
10439
                          AND rel.view_id NOT IN (
10440
                               SELECT *
10441
                                 FROM THE
10442
                                       (SELECT CAST
10443
                                               (in_list_number
10444
                                                  (sviewidshowlist
10445
                                                  ) AS relmgr_number_tab_t
10446
                                               )
10447
                                         FROM DUAL
10448
                                       ))
10449
                 UNION
10450
                 /* Base Views expanded */
10451
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10452
 
10453
                      --rel.pkg_state,
10454
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10455
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10456
                      pv.pv_description
10457
                  FROM work_in_progress rel,
10458
                      PACKAGES pkg,
10459
                      package_versions pv,
10460
                      views vi,
10461
                      view_settings vs
10462
                  WHERE pv.pkg_id = pkg.pkg_id
10463
                   AND rel.pv_id = pv.pv_id
10464
                   AND rel.view_id = vi.view_id
10465
                   AND vs.view_id = vi.view_id
10466
                   AND vs.user_id = userid
10467
                   AND rel.view_id IN (
10468
                        SELECT *
10469
                          FROM THE
10470
                                (SELECT CAST
10471
                                        (in_list_number
10472
                                               (sviewidshowlist) AS relmgr_number_tab_t
10473
                                        )
10474
                                  FROM DUAL
10475
                                ))
10476
                   AND rtag_id = rtagid
10477
                 UNION
10478
                 /* Private Views collapsed */
10479
                 SELECT vi.view_id, vi.view_name,
10480
                      TO_NUMBER (NULL) AS pkg_state,
10481
                      TO_NUMBER (NULL) AS deprecated_state,
10482
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10483
                      NULL AS pkg_version, NULL AS dlocked,
10484
                      NULL AS pv_description
10485
                  FROM view_settings vs,
10486
                      view_def vd,
10487
                      views vi,
10488
                      work_in_progress rel,
10489
                      package_versions pv
10490
                  WHERE vs.view_id = vi.view_id
10491
                   AND rel.pv_id = pv.pv_id
10492
                   AND vd.pkg_id = pv.pkg_id
10493
                   AND vd.view_id = vi.view_id
10494
                   AND vi.base_view = 'N'
10495
                   AND rel.rtag_id = rtagid
10496
                   AND vs.user_id = userid
10497
                   AND vi.view_id NOT IN (
10498
                        SELECT *
10499
                          FROM THE
10500
                                (SELECT CAST
10501
                                        (in_list_number
10502
                                               (sviewidshowlist) AS relmgr_number_tab_t
10503
                                        )
10504
                                  FROM DUAL
10505
                                ))
10506
                 UNION
10507
                 /* Private Views expanded */
10508
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10509
 
10510
                      --rel.pkg_state,
10511
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10512
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10513
                      pv.pv_description
10514
                  FROM users usr,
10515
                      view_settings vs,
10516
                      view_def vd,
10517
                      views vi,
10518
                      work_in_progress rel,
10519
                      PACKAGES pkg,
10520
                      package_versions pv
10521
                  WHERE vs.user_id = usr.user_id
10522
                   AND vs.view_id = vi.view_id
10523
                   AND vd.view_id = vi.view_id
10524
                   AND pv.pkg_id = pkg.pkg_id
10525
                   AND rel.pv_id = pv.pv_id
10526
                   AND rel.rtag_id = rtagid
10527
                   AND vd.pkg_id = pkg.pkg_id
10528
                   AND vi.base_view = 'N'
10529
                   AND vi.view_id IN (
10530
                        SELECT *
10531
                          FROM THE
10532
                                (SELECT CAST
10533
                                        (in_list_number
10534
                                               (sviewidshowlist) AS relmgr_number_tab_t
10535
                                        )
10536
                                  FROM DUAL
10537
                                ))
10538
                   AND usr.user_id = userid) ord
10539
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10540
     END IF;
10541
   END;
10542
 
10543
/*-------------------------------------------------------------------------------------------------------*/
10544
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
10545
 
10546
   PROCEDURE get_pending_items (
10547
     viewtype         IN      NUMBER,
10548
     userid           IN      NUMBER,
10549
     rtagid           IN      NUMBER,
10550
     sviewidshowlist  IN      VARCHAR2,
10551
     ntruerecordcount OUT     NUMBER,
10552
     recordset        OUT     typecur
10553
   )
10554
   IS
10555
   BEGIN
10556
     -- Get true record count because views can give false count
10557
     SELECT COUNT (pl.pv_id)
10558
      INTO ntruerecordcount
10559
      FROM planned pl
10560
      WHERE pl.rtag_id = rtagid;
10561
 
10562
     IF viewtype = 1
10563
     THEN
10564
       /*--- GUEST VIEW ---*/
10565
       OPEN recordset FOR
10566
         SELECT   *
10567
            FROM (
10568
                 /* Base Views collapsed */
10569
                 SELECT DISTINCT vi.view_id, vi.view_name,
10570
                             TO_NUMBER (NULL) AS pkg_state,
10571
                             TO_NUMBER (NULL) AS deprecated_state,
10572
                             TO_NUMBER (NULL) AS pv_id,
10573
                             NULL AS pkg_name, NULL AS pkg_version,
10574
                             NULL AS dlocked, NULL AS pv_description,
10575
                             rel.operation
10576
                         FROM planned rel, views vi
10577
                        WHERE rel.view_id = vi.view_id
10578
                          AND rtag_id = rtagid
10579
                          AND rel.view_id NOT IN (
10580
                               SELECT *
10581
                                 FROM THE
10582
                                       (SELECT CAST
10583
                                               (in_list_number
10584
                                                  (sviewidshowlist
10585
                                                  ) AS relmgr_number_tab_t
10586
                                               )
10587
                                         FROM DUAL
10588
                                       ))
10589
                 UNION
10590
                 /* Base Views expanded */
10591
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10592
 
10593
                      --rel.pkg_state,
10594
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10595
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10596
                      pv.pv_description,
10597
                      rel.operation
10598
                  FROM planned rel,
10599
                      PACKAGES pkg,
10600
                      package_versions pv,
10601
                      views vi
10602
                  WHERE pv.pkg_id = pkg.pkg_id
10603
                   AND rel.pv_id = pv.pv_id
10604
                   AND rel.view_id = vi.view_id
10605
                   AND rel.view_id IN (
10606
                        SELECT *
10607
                          FROM THE
10608
                                (SELECT CAST
10609
                                        (in_list_number
10610
                                               (sviewidshowlist) AS relmgr_number_tab_t
10611
                                        )
10612
                                  FROM DUAL
10613
                                ))
10614
                   AND rtag_id = rtagid) ord
10615
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10616
     ELSIF viewtype = 2
10617
     THEN
10618
       /*--- PERSONAL VIEW ---*/
10619
       OPEN recordset FOR
10620
         SELECT   *
10621
            FROM (
10622
                 /* Base Views collapsed */
10623
                 SELECT DISTINCT vi.view_id, vi.view_name,
10624
                             TO_NUMBER (NULL) AS pkg_state,
10625
                             TO_NUMBER (NULL) AS deprecated_state,
10626
                             TO_NUMBER (NULL) AS pv_id,
10627
                             NULL AS pkg_name, NULL AS pkg_version,
10628
                             NULL AS dlocked, NULL AS pv_description,
10629
                             rel.operation
10630
                         FROM planned rel, view_settings vs, views vi
10631
                        WHERE rel.view_id = vi.view_id
10632
                          AND vs.view_id = rel.view_id
10633
                          AND vs.user_id = userid
10634
                          AND rtag_id = rtagid
10635
                          AND rel.view_id NOT IN (
10636
                               SELECT *
10637
                                 FROM THE
10638
                                       (SELECT CAST
10639
                                               (in_list_number
10640
                                                  (sviewidshowlist
10641
                                                  ) AS relmgr_number_tab_t
10642
                                               )
10643
                                         FROM DUAL
10644
                                       ))
10645
                 UNION
10646
                 /* Base Views expanded */
10647
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10648
 
10649
                      --rel.pkg_state,
10650
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10651
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10652
                      pv.pv_description,
10653
                      rel.operation
10654
                  FROM planned rel,
10655
                      PACKAGES pkg,
10656
                      package_versions pv,
10657
                      views vi,
10658
                      view_settings vs
10659
                  WHERE pv.pkg_id = pkg.pkg_id
10660
                   AND rel.pv_id = pv.pv_id
10661
                   AND rel.view_id = vi.view_id
10662
                   AND vs.view_id = vi.view_id
10663
                   AND vs.user_id = userid
10664
                   AND rel.view_id IN (
10665
                        SELECT *
10666
                          FROM THE
10667
                                (SELECT CAST
10668
                                        (in_list_number
10669
                                               (sviewidshowlist) AS relmgr_number_tab_t
10670
                                        )
10671
                                  FROM DUAL
10672
                                ))
10673
                   AND rtag_id = rtagid
10674
                 UNION
10675
                 /* Private Views collapsed */
10676
                 SELECT vi.view_id, vi.view_name,
10677
                      TO_NUMBER (NULL) AS pkg_state,
10678
                      TO_NUMBER (NULL) AS deprecated_state,
10679
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10680
                      NULL AS pkg_version, NULL AS dlocked,
10681
                      NULL AS pv_description,
10682
                      rel.operation
10683
                  FROM view_settings vs,
10684
                      view_def vd,
10685
                      views vi,
10686
                      planned rel,
10687
                      package_versions pv
10688
                  WHERE vs.view_id = vi.view_id
10689
                   AND rel.pv_id = pv.pv_id
10690
                   AND vd.pkg_id = pv.pkg_id
10691
                   AND vd.view_id = vi.view_id
10692
                   AND vi.base_view = 'N'
10693
                   AND rel.rtag_id = rtagid
10694
                   AND vs.user_id = userid
10695
                   AND vi.view_id NOT IN (
10696
                        SELECT *
10697
                          FROM THE
10698
                                (SELECT CAST
10699
                                        (in_list_number
10700
                                               (sviewidshowlist) AS relmgr_number_tab_t
10701
                                        )
10702
                                  FROM DUAL
10703
                                ))
10704
                 UNION
10705
                 /* Private Views expanded */
10706
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10707
 
10708
                      --rel.pkg_state,
10709
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10710
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10711
                      pv.pv_description,
10712
                      rel.operation
10713
                  FROM users usr,
10714
                      view_settings vs,
10715
                      view_def vd,
10716
                      views vi,
10717
                      planned rel,
10718
                      PACKAGES pkg,
10719
                      package_versions pv
10720
                  WHERE vs.user_id = usr.user_id
10721
                   AND vs.view_id = vi.view_id
10722
                   AND vd.view_id = vi.view_id
10723
                   AND pv.pkg_id = pkg.pkg_id
10724
                   AND rel.pv_id = pv.pv_id
10725
                   AND rel.rtag_id = rtagid
10726
                   AND vd.pkg_id = pkg.pkg_id
10727
                   AND vi.base_view = 'N'
10728
                   AND vi.view_id IN (
10729
                        SELECT *
10730
                          FROM THE
10731
                                (SELECT CAST
10732
                                        (in_list_number
10733
                                               (sviewidshowlist) AS relmgr_number_tab_t
10734
                                        )
10735
                                  FROM DUAL
10736
                                ))
10737
                   AND usr.user_id = userid) ord
10738
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10739
     END IF;
10740
   END;
10741
 
10742
/*-------------------------------------------------------------------------------------------------------*/
10743
   PROCEDURE get_view_content (
10744
     rtagid     IN      NUMBER,
10745
     viewid     IN      NUMBER,
10746
     recordset OUT     typecur
10747
   )
10748
   IS
10749
     isbaseview   CHAR (1);
10750
   BEGIN
10751
     -- Check if the view is BASE VIEW
10752
     SELECT vi.base_view
10753
      INTO isbaseview
10754
      FROM views vi
10755
      WHERE vi.view_id = viewid;
10756
 
10757
     IF (isbaseview = 'Y')
10758
     THEN
10759
       -- Get Base view content
10760
       OPEN recordset FOR
10761
         SELECT   DECODE (rel.pkg_state,
10762
                      NULL, 0,
10763
                      rel.pkg_state
10764
                     ) AS pkg_state,
10765
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10766
                pv.pkg_version, pv.dlocked, pv.pv_description,
10767
                pv.build_type,
10768
                rel.operation
10769
            FROM environment_view rel, PACKAGES pkg, package_versions pv
10770
            WHERE pv.pkg_id = pkg.pkg_id
10771
             AND rel.pv_id = pv.pv_id
10772
             AND rel.view_id = viewid
10773
             AND rel.rtag_id = rtagid
10774
         ORDER BY UPPER (pkg.pkg_name);
10775
     ELSE
10776
       -- Get non base view content
10777
       OPEN recordset FOR
10778
         SELECT   DECODE (rel.pkg_state,
10779
                      NULL, 0,
10780
                      rel.pkg_state
10781
                     ) AS pkg_state,
10782
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10783
                pv.pkg_version, pv.dlocked, pv.pv_description,
10784
                pv.build_type,
10785
                rel.operation
10786
            FROM environment_view rel,
10787
                PACKAGES pkg,
10788
                package_versions pv,
10789
                view_def vd
10790
            WHERE pv.pkg_id = pkg.pkg_id
10791
             AND rel.pv_id = pv.pv_id
10792
             AND rel.rtag_id = rtagid
10793
             AND vd.view_id = viewid
10794
             AND vd.pkg_id = pv.pkg_id
10795
         ORDER BY UPPER (pkg.pkg_name);
10796
     END IF;
10797
   END;
10798
 
10799
/*-------------------------------------------------------------------------------------------------------*/
10800
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
10801
     RETURN NUMBER
10802
   IS
10803
     envtab           NUMBER;
10804
     returnvalue      NUMBER;
10805
     return_not_found NUMBER := -1;
10806
   BEGIN
10807
     envtab := get_package_area (pvid, rtagid);
10808
 
10809
     IF envtab = 0
10810
     THEN
10811
       -- WORK IN PROGRESS --
10812
       returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
10813
     ELSIF envtab = 1
10814
     THEN
10815
       -- PENDING --
10816
       returnvalue := pk_planned.get_package_view (pvid, rtagid);
10817
     ELSIF envtab = 2
10818
     THEN
10819
       -- RELEASED --
10820
       returnvalue := pk_release.get_package_view (pvid, rtagid);
10821
     ELSE
10822
       -- This may be a Patch not located anywhere but unlocked
10823
       returnvalue := return_not_found;
10824
     END IF;
10825
 
10826
     RETURN returnvalue;
10827
   END;
10828
 
10829
/*-------------------------------------------------------------------------------------------------------*/
10830
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
10831
   IS
10832
     viewid        NUMBER;
10833
     envtab        NUMBER;
10834
     ispatch       CHAR (1) := NULL;
10835
     buildtype     CHAR (1) := NULL;
10836
   BEGIN
10837
     -- Check if package is patch
10838
     SELECT pv.is_patch, pv.build_type
10839
      INTO ispatch, buildtype
10840
      FROM package_versions pv
10841
      WHERE pv.pv_id = pvid;
10842
 
10843
     -- Get ViewId
10844
     viewid := get_package_view (pvid, rtagid);
10845
     -- Remove from current area
10846
     envtab := pk_environment.get_package_area (pvid, rtagid);
10847
 
10848
     -- Make sure that package was in work-in-progress or pending before makeing it release
10849
     -- Exclude patches, ripple builds
10850
     IF (envtab < 0)
10851
     THEN
10852
       -- Not found in work-in-progress or pending
10853
       IF (ispatch IS NULL) AND (buildtype = 'M')
10854
       THEN
10855
         raise_application_error (-20000,
10856
                            'This package cannot be released here.'
10857
                           );
10858
       END IF;
10859
     END IF;
10860
 
10861
     -- Log
10862
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10863
 
10864
     IF envtab = 0
10865
     THEN
10866
       -- WORK IN PROGRESS --
10867
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
10868
     ELSIF envtab = 1
10869
     THEN
10870
       -- PENDING --
10871
       pk_planned.remove_package (pvid, rtagid, userid);
10872
     END IF;
10873
 
10874
     -- Change package state
10875
     pk_package.change_state (pvid, 'Y', userid);
10876
 
10877
     -- Make sure it is valid BASE VIEW
10878
     IF viewid < 1
10879
     THEN
10880
       viewid := 7;                     -- This is default base view
10881
     END IF;
10882
 
10883
     IF (ispatch IS NULL)
10884
     THEN
10885
       -- Add package to new area
10886
       pk_release.add_package (pvid, viewid, rtagid, userid);
10887
     END IF;
10888
 
10889
     -- Now do post Release Actions
10890
     pk_release.run_post_actions (pvid, rtagid);
10891
 
10892
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10893
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10894
     clean_do_not_ripple(rtagid);
10895
     clean_advisory_ripple(rtagid);
10896
 
10897
     -- Log
10898
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
10899
   END;
10900
 
10901
/*-------------------------------------------------------------------------------------------------------*/
10902
   PROCEDURE auto_make_release (
10903
     pvid          IN   NUMBER,
10904
     rtagid        IN   NUMBER,
10905
     userid        IN   NUMBER,
10906
     vext          IN   package_versions.v_ext%TYPE,
10907
     ssv_ext       IN   package_versions.v_ext%TYPE,
10908
     clonefrompvid IN   NUMBER
10909
   )
10910
   IS
10911
     viewid        NUMBER;
10912
     envtab        NUMBER;
10913
     ispatch       CHAR (1) := NULL;
10914
     buildtype      CHAR (1) := NULL;
10915
   BEGIN
10916
     -- Check if package is patch
10917
     SELECT pv.is_patch, pv.build_type
10918
      INTO ispatch, buildtype
10919
      FROM package_versions pv
10920
      WHERE pv.pv_id = pvid;
10921
 
10922
     IF vext <> ssv_ext
10923
     THEN
10924
       -- Get ViewId
10925
       viewid := get_package_view (clonefrompvid, rtagid);
10926
       -- Remove from current area
10927
       envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
10928
     ELSE
10929
       -- Get ViewId
10930
       viewid := get_package_view (pvid, rtagid);
10931
       -- Remove from current area
10932
       envtab := pk_environment.get_package_area (pvid, rtagid);
10933
     END IF;
10934
 
10935
     -- Make sure that package was in work-in-progress or pending before makeing it release
10936
     -- Exclude patches, ripple builds
10937
     IF (envtab < 0)
10938
     THEN
10939
       -- Not found in work-in-progress or pending
10940
       IF (ispatch IS NULL) AND (buildtype = 'M')
10941
       THEN
10942
         raise_application_error (-20000,
10943
                            'This package cannot be released here.'
10944
                           );
10945
       END IF;
10946
     END IF;
10947
 
10948
     -- Log
10949
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10950
 
10951
     IF vext <> ssv_ext
10952
     THEN
10953
       IF envtab = 0
10954
       THEN
10955
         -- WORK IN PROGRESS --
10956
         pk_work_in_progress.remove_package (clonefrompvid, rtagid,
10957
                                    userid);
10958
       ELSIF envtab = 1
10959
       THEN
10960
         -- PENDING --
10961
         pk_planned.remove_package (clonefrompvid, rtagid, userid);
10962
       ELSIF envtab = 2
10963
       THEN
10964
         -- RELEASED --
10965
         pk_release.remove_package (clonefrompvid, rtagid, userid);
10966
       END IF;
10967
     ELSE
10968
       IF envtab = 0
10969
       THEN
10970
         -- WORK IN PROGRESS --
10971
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
10972
       ELSIF envtab = 1
10973
       THEN
10974
         -- PENDING --
10975
         pk_planned.remove_package (pvid, rtagid, userid);
10976
       END IF;
10977
     END IF;
10978
 
10979
     -- Change package state
10980
     pk_package.change_state (pvid, 'Y', userid);
10981
 
10982
     -- Make sure it is valid BASE VIEW
10983
     IF viewid < 1
10984
     THEN
10985
       viewid := 7;                     -- This is default base view
10986
     END IF;
10987
 
10988
     IF (ispatch IS NULL)
10989
     THEN
10990
       -- Add package to new area
10991
       pk_release.add_package (pvid, viewid, rtagid, userid);
10992
     END IF;
10993
 
10994
     -- Now do post Release Actions
10995
     pk_release.run_post_actions (pvid, rtagid);
10996
     -- Now update the Dash_Board Table (DEPRECATED)
10997
     pk_rmapi.update_dash_board (rtagid);
10998
 
10999
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
11000
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
11001
     clean_do_not_ripple(rtagid);
11002
     clean_advisory_ripple(rtagid);
11003
 
11004
     -- Log
11005
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
11006
   END;
11007
 
11008
/*-------------------------------------------------------------------------------------------------------*/
11009
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11010
   IS
11011
     viewid   NUMBER;
11012
     envtab   NUMBER;
11013
   BEGIN
11014
     -- Get ViewId
11015
     --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
11016
     viewid := get_package_view (pvid, rtagid);
11017
     -- Remove from current area
11018
     envtab := pk_environment.get_package_area (pvid, rtagid);
11019
     -- Log
11020
     log_action (pvid,
11021
              'action',
11022
              userid,
11023
              'Start of Make Package UnRelease...'
11024
             );
11025
 
11026
     IF envtab = 2
11027
     THEN
11028
       -- RELEASE AREA --
11029
       pk_release.remove_package (pvid, rtagid, userid);
11030
     ELSIF envtab = 1
11031
     THEN
11032
       -- PENDING --
11033
       pk_planned.remove_package (pvid, rtagid, userid);
11034
     END IF;
11035
 
11036
     -- Change package state
11037
     pk_package.change_state (pvid, 'N', userid);
11038
 
11039
     -- Make sure it is valid BASE VIEW
11040
     IF viewid < 1
11041
     THEN
11042
       viewid := 7;                     -- This is default base view
11043
     END IF;
11044
 
11045
     -- Add package to new area
11046
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11047
     -- Now do post Release Actions
11048
     pk_release.run_post_actions (pvid, rtagid);
11049
     -- Log
11050
     log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
11051
   END;
11052
 
11053
/*-------------------------------------------------------------------------------------------------------*/
11054
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11055
   IS
11056
     viewid     NUMBER;
11057
     ispatch    CHAR (1) := NULL;
11058
     buildtype  CHAR (1) := NULL;
11059
   BEGIN
11060
     -- Check if package is patch
11061
     SELECT pv.is_patch, pv.build_type
11062
      INTO ispatch, buildtype
11063
      FROM package_versions pv
11064
      WHERE pv.pv_id = pvid;
11065
 
11066
     -- Get ViewId
11067
     viewid := get_package_view (pvid, rtagid);
11068
     --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
11069
 
11070
     -- Log
11071
     log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
11072
 
11073
     IF (ispatch IS NULL)
11074
     THEN
11075
       -- Remove from current area
11076
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
11077
       -- Change package state
11078
       pk_package.change_state (pvid, 'P', userid);
11079
       -- Add package to new area
11080
       pk_planned.add_package (pvid, viewid, rtagid, userid);
11081
     END IF;
11082
 
11083
     -- Log
11084
     log_action (pvid, 'action', userid, 'End of Make Package Pending...');
11085
   END;
11086
 
11087
/*-------------------------------------------------------------------------------------------------------*/
11088
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11089
   IS
11090
   BEGIN
11091
     -- Log
11092
     log_action (pvid,
11093
                 'action',
11094
                 userid,
11095
                 'Start of Package Pending Approval...'
11096
                 );
11097
     -- Change package state
11098
     pk_package.change_state (pvid, 'A', userid);
11099
     -- Log
11100
     log_action (pvid, 'action', userid,
11101
                 'End of Package Pending Approval...');
11102
   END;
11103
 
11104
/*-------------------------------------------------------------------------------------------------------*/
11105
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11106
   IS
11107
     viewid   NUMBER;
11108
     operation CHAR;
11109
   BEGIN
11110
     -- Get ViewId
11111
     viewid := get_package_view (pvid, rtagid);
11112
     -- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
11113
 
11114
     -- DEVI-45275
11115
     -- If the package version is an official version that is to be rejected from a merge operation
11116
     -- then find out in order to prevent it being added back to work-in-progress table . This will
11117
     -- be denoted by the operation field in the planned table being A or S
11118
     operation := ' ';
11119
     SELECT
11120
     (CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operation
11121
     FROM planned pl
11122
     WHERE pl.PV_ID = pvid
11123
     AND pl.RTAG_ID = rtagid;
11124
 
11125
     -- Log
11126
     log_action (pvid, 'action', userid, 'Start of Reject Package...');
11127
     -- Remove from current area
11128
     pk_planned.remove_package (pvid, rtagid, userid);
11129
 
11130
     -- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .
11131
     IF operation <> 'A' AND operation <> 'S'
11132
     THEN
11133
     -- Change package state
11134
     pk_package.change_state (pvid, 'R', userid);
11135
     -- Add package to new area
11136
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11137
     ELSE
11138
      log_action (pvid, 'action', userid, 'Rejected Package Merge');
11139
     END IF;
11140
     -- Log
11141
     log_action (pvid, 'action', userid, 'End of Reject Package...');
11142
   END;
11143
 
11144
/*-------------------------------------------------------------------------------------------------------*/
11145
   PROCEDURE change_package_view (
11146
     pvid       IN   NUMBER,
11147
     rtagid     IN   NUMBER,
11148
     newviewid  IN   NUMBER
11149
   )
11150
   IS
11151
     envtab   NUMBER;
11152
   BEGIN
11153
     envtab := pk_environment.get_package_area (pvid, rtagid);
11154
 
11155
     IF envtab = 0
11156
     THEN
11157
       -- WORK IN PROGRESS --
11158
       pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
11159
     ELSIF envtab = 1
11160
     THEN
11161
       -- PENDING --
11162
       pk_planned.change_package_view (pvid, rtagid, newviewid);
11163
     ELSIF envtab = 2
11164
     THEN
11165
       -- RELEASED --
11166
       pk_release.change_package_view (pvid, rtagid, newviewid);
11167
     END IF;
11168
   END;
11169
 
11170
/*-------------------------------------------------------------------------------------------------------*/
11171
   PROCEDURE find_package (
11172
     skeyword     IN      VARCHAR2,
11173
     nrtagid      IN      NUMBER,
11174
     nsearcharea  IN      NUMBER,
11175
     recordset    OUT     typecur
11176
   )
11177
   IS
11178
   BEGIN
11179
     IF nsearcharea = 0
11180
     THEN
11181
       /* Search Work In Progress */
11182
       OPEN recordset FOR
11183
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11184
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11185
                pv.modified_stamp, usr.full_name, usr.user_email
11186
           FROM views vi,
11187
                work_in_progress rc,
11188
                PACKAGES pkg,
11189
                package_versions pv,
11190
                users usr
11191
          WHERE rc.view_id = vi.view_id
11192
            AND rc.pv_id = pv.pv_id
11193
            AND pkg.pkg_id = pv.pkg_id
11194
            AND pv.modifier_id = usr.user_id
11195
            AND rc.rtag_id = nrtagid
11196
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11197
       ORDER BY UPPER (pkg.pkg_name);
11198
     ELSIF nsearcharea = 1
11199
     THEN
11200
       /* Search Pending */
11201
       OPEN recordset FOR
11202
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11203
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11204
                pv.modified_stamp, usr.full_name, usr.user_email
11205
           FROM views vi,
11206
                planned rc,
11207
                PACKAGES pkg,
11208
                package_versions pv,
11209
                users usr
11210
          WHERE rc.view_id = vi.view_id
11211
            AND rc.pv_id = pv.pv_id
11212
            AND pkg.pkg_id = pv.pkg_id
11213
            AND pv.modifier_id = usr.user_id
11214
            AND rc.rtag_id = nrtagid
11215
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11216
       ORDER BY UPPER (pkg.pkg_name);
11217
     ELSIF nsearcharea = 2
11218
     THEN
11219
       /* Search Released */
11220
       OPEN recordset FOR
11221
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11222
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11223
                pv.modified_stamp, usr.full_name, usr.user_email
11224
           FROM views vi,
11225
                release_content rc,
11226
                PACKAGES pkg,
11227
                package_versions pv,
11228
                users usr
11229
          WHERE rc.base_view_id = vi.view_id
11230
            AND rc.pv_id = pv.pv_id
11231
            AND pkg.pkg_id = pv.pkg_id
11232
            AND pv.modifier_id = usr.user_id
11233
            AND rc.rtag_id = nrtagid
11234
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11235
         ORDER BY UPPER (pkg.pkg_name);
11236
     ELSIF nsearcharea = 3
11237
     THEN
11238
       /* Search ALL */
11239
       OPEN recordset FOR
11240
         SELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
11241
                pv.pv_id, pv.pkg_version, pv.comments,
11242
                pv.modified_stamp, usr.full_name, usr.user_email
11243
           FROM views vi,
11244
                environment_view rc,
11245
                PACKAGES pkg,
11246
                package_versions pv,
11247
                users usr
11248
          WHERE rc.view_id = vi.view_id
11249
            AND rc.pv_id = pv.pv_id
11250
            AND pkg.pkg_id = pv.pkg_id
11251
            AND pv.modifier_id = usr.user_id
11252
            AND rc.rtag_id = nrtagid
11253
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11254
         ORDER BY UPPER (pkg.pkg_name);
11255
     END IF;
11256
   END;
11257
 
11258
/*-------------------------------------------------------------------------------------------------------*/
11259
   PROCEDURE find_file (
11260
     skeyword     IN      VARCHAR2,
11261
     nrtagid      IN      NUMBER,
11262
     nsearcharea  IN      NUMBER,
11263
     npagesize    IN      NUMBER,
11264
     recordset    OUT     typecur
11265
   )
11266
   IS
11267
   BEGIN
11268
     IF nsearcharea = 0
11269
     THEN
11270
       /* Search Work In Progress */
11271
       OPEN recordset FOR
11272
         SELECT   qry.*
11273
            FROM (
11274
                 /* File search on Packages */
11275
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11276
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11277
                   FROM work_in_progress rc,
11278
                        PACKAGES pkg,
11279
                        package_versions pv,
11280
                        release_components art
11281
                  WHERE rc.pv_id = art.pv_id
11282
                    AND pv.pkg_id = pkg.pkg_id
11283
                    AND rc.pv_id = pv.pv_id
11284
                    AND rc.rtag_id = nrtagid
11285
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11286
                 UNION ALL
11287
                 /* File search on Products */
11288
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11289
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11290
                   FROM work_in_progress rc,
11291
                        PACKAGES pkg,
11292
                        package_versions pv,
11293
                        product_components art
11294
                  WHERE rc.pv_id = art.pv_id
11295
                    AND pv.pkg_id = pkg.pkg_id
11296
                    AND rc.pv_id = pv.pv_id
11297
                    AND rc.rtag_id = nrtagid
11298
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11299
            WHERE ROWNUM <= npagesize
11300
         ORDER BY UPPER (qry.pkg_name);
11301
     ELSIF nsearcharea = 1
11302
     THEN
11303
       /* Search Pending */
11304
       OPEN recordset FOR
11305
         SELECT   qry.*
11306
            FROM (
11307
                 /* File search on Packages */
11308
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11309
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11310
                   FROM planned rc,
11311
                        PACKAGES pkg,
11312
                        package_versions pv,
11313
                        release_components art
11314
                  WHERE rc.pv_id = art.pv_id
11315
                    AND pv.pkg_id = pkg.pkg_id
11316
                    AND rc.pv_id = pv.pv_id
11317
                    AND rc.rtag_id = nrtagid
11318
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11319
                 UNION ALL
11320
                 /* File search on Products */
11321
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11322
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11323
                   FROM planned rc,
11324
                        PACKAGES pkg,
11325
                        package_versions pv,
11326
                        product_components art
11327
                  WHERE rc.pv_id = art.pv_id
11328
                    AND pv.pkg_id = pkg.pkg_id
11329
                    AND rc.pv_id = pv.pv_id
11330
                    AND rc.rtag_id = nrtagid
11331
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11332
            WHERE ROWNUM <= npagesize
11333
         ORDER BY UPPER (qry.pkg_name);
11334
     ELSIF nsearcharea = 2
11335
     THEN
11336
       /* Search Released */
11337
       OPEN recordset FOR
11338
         SELECT   qry.*
11339
            FROM (
11340
                 /* File search on Packages */
11341
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11342
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11343
                        NULL AS patch_id
11344
                   FROM release_content rc,
11345
                        PACKAGES pkg,
11346
                        package_versions pv,
11347
                        release_components art
11348
                  WHERE rc.pv_id = art.pv_id
11349
                    AND pv.pkg_id = pkg.pkg_id
11350
                    AND rc.pv_id = pv.pv_id
11351
                    AND rc.rtag_id = nrtagid
11352
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11353
                 UNION ALL
11354
                 /* File search on Products */
11355
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11356
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11357
                        NULL AS patch_id
11358
                   FROM release_content rc,
11359
                        PACKAGES pkg,
11360
                        package_versions pv,
11361
                        product_components art
11362
                  WHERE rc.pv_id = art.pv_id
11363
                    AND pv.pkg_id = pkg.pkg_id
11364
                    AND rc.pv_id = pv.pv_id
11365
                    AND rc.rtag_id = nrtagid
11366
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11367
                 UNION ALL
11368
                 /* File search on Patches */
11369
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11370
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11371
                        DECODE (art.file_path,
11372
                                NULL, pp.patch_id,
11373
                                NULL
11374
                                ) AS patch_id
11375
                   FROM release_content rc,
11376
                        PACKAGES pkg,
11377
                        package_versions pv,
11378
                        release_components art,
11379
                        package_patches pp
11380
                  WHERE pv.pv_id = pp.pv_id
11381
                    AND pv.pkg_id = pkg.pkg_id
11382
                    AND rc.rtag_id = nrtagid
11383
                    AND art.pv_id = pp.patch_id
11384
                    AND rc.pv_id = pp.pv_id
11385
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11386
            WHERE ROWNUM <= npagesize
11387
         ORDER BY UPPER (qry.pkg_name);
11388
     ELSIF nsearcharea = 3
11389
     THEN
11390
       /* Search ALL */
11391
       OPEN recordset FOR
11392
         SELECT   qry.*
11393
            FROM (
11394
                 /* File search on Packages */
11395
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11396
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11397
                        NULL AS patch_id
11398
                   FROM environment_view rc,
11399
                        PACKAGES pkg,
11400
                        package_versions pv,
11401
                        release_components art
11402
                  WHERE rc.pv_id = art.pv_id
11403
                    AND pv.pkg_id = pkg.pkg_id
11404
                    AND rc.pv_id = pv.pv_id
11405
                    AND rc.rtag_id = nrtagid
11406
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11407
                 UNION ALL
11408
                 /* File search on Products */
11409
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11410
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11411
                        NULL AS patch_id
11412
                   FROM environment_view rc,
11413
                        PACKAGES pkg,
11414
                        package_versions pv,
11415
                        product_components art
11416
                  WHERE rc.pv_id = art.pv_id
11417
                    AND pv.pkg_id = pkg.pkg_id
11418
                    AND rc.pv_id = pv.pv_id
11419
                    AND rc.rtag_id = nrtagid
11420
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11421
                 UNION ALL
11422
                 /* File search on Patches */
11423
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11424
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11425
                        DECODE (art.file_path,
11426
                                NULL, pp.patch_id,
11427
                                NULL
11428
                               ) AS patch_id
11429
                   FROM release_content rc,
11430
                        PACKAGES pkg,
11431
                        package_versions pv,
11432
                        release_components art,
11433
                        package_patches pp
11434
                  WHERE pv.pv_id = pp.pv_id
11435
                    AND pv.pkg_id = pkg.pkg_id
11436
                    AND rc.rtag_id = nrtagid
11437
                    AND art.pv_id = pp.patch_id
11438
                    AND rc.pv_id = pp.pv_id
11439
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11440
            WHERE ROWNUM <= npagesize
11441
         ORDER BY UPPER (qry.pkg_name);
11442
     END IF;
11443
   END;
11444
 
11445
/*-------------------------------------------------------------------------------------------------------*/
11446
   PROCEDURE get_prodrelease_items (
11447
     rtagid           IN      NUMBER,
11448
     ntruerecordcount OUT     NUMBER,
11449
     recordset        OUT     typecur
11450
   )
11451
   IS
11452
   BEGIN
11453
     -- Get true record count n the number of integration products
11454
     SELECT COUNT (rc.pv_id)
11455
      INTO ntruerecordcount
11456
      FROM release_content rc
11457
      WHERE rc.rtag_id = rtagid;
11458
 
11459
     OPEN recordset FOR
11460
       SELECT vi.view_id, vi.view_name, rel.pkg_state,   --rel.pkg_state,
11461
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11462
              pv.pkg_version, pv.dlocked, pv.pv_description
11463
         FROM release_content rel,
11464
              PACKAGES pkg,
11465
              package_versions pv,
11466
              views vi
11467
        WHERE pv.pkg_id = pkg.pkg_id
11468
          AND rel.pv_id = pv.pv_id
11469
          AND rel.base_view_id = vi.view_id
11470
          AND pv.is_deployable = 'Y'
11471
          AND rtag_id = rtagid
11472
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11473
                                 FROM deployment_manager.os_contents)
11474
          AND rel.product_state IS NULL
11475
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11476
   END;
11477
 
11478
/*-------------------------------------------------------------------------------------------------------*/
11479
   PROCEDURE get_integration_items (
11480
     rtagid           IN      NUMBER,
11481
     ntruerecordcount OUT     NUMBER,
11482
     recordset        OUT     typecur
11483
   )
11484
   IS
11485
   BEGIN
11486
     -- Get true record count n the number of integration products
11487
     SELECT COUNT (rc.pv_id)
11488
      INTO ntruerecordcount
11489
      FROM release_content rc
11490
      WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
11491
 
11492
     OPEN recordset FOR
11493
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11494
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11495
              pv.pkg_version, pv.dlocked, pv.pv_description
11496
         FROM release_content rel,
11497
              PACKAGES pkg,
11498
              package_versions pv,
11499
              views vi
11500
        WHERE pv.pkg_id = pkg.pkg_id
11501
          AND rel.pv_id = pv.pv_id
11502
          AND rel.base_view_id = vi.view_id
11503
          AND pv.is_deployable = 'Y'
11504
          AND rtag_id = rtagid
11505
          AND rel.product_state IN (1, 5)
11506
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11507
   END;
11508
 
11509
/*-------------------------------------------------------------------------------------------------------*/
11510
   PROCEDURE get_test_items (
11511
     rtagid           IN      NUMBER,
11512
     ntruerecordcount OUT     NUMBER,
11513
     recordset        OUT     typecur
11514
   )
11515
   IS
11516
   BEGIN
11517
     -- Get true record count n the number of test products
11518
     SELECT COUNT (rc.pv_id)
11519
      INTO ntruerecordcount
11520
      FROM release_content rc
11521
      WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
11522
 
11523
     OPEN recordset FOR
11524
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11525
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11526
              pv.pkg_version, pv.dlocked, pv.pv_description
11527
         FROM release_content rel,
11528
              PACKAGES pkg,
11529
              package_versions pv,
11530
              views vi
11531
        WHERE pv.pkg_id = pkg.pkg_id
11532
          AND rel.pv_id = pv.pv_id
11533
          AND rel.base_view_id = vi.view_id
11534
          AND pv.is_deployable = 'Y'
11535
          AND rtag_id = rtagid
11536
          AND rel.product_state = 2
11537
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11538
   END;
11539
 
11540
/*-------------------------------------------------------------------------------------------------------*/
11541
   PROCEDURE get_deploy_items (
11542
     rtagid           IN      NUMBER,
11543
     ntruerecordcount OUT     NUMBER,
11544
     recordset        OUT     typecur
11545
   )
11546
   IS
11547
   BEGIN
11548
     -- Get true record count n the number of deploy products
11549
     SELECT COUNT (rc.pv_id)
11550
      INTO ntruerecordcount
11551
      FROM release_content rc
11552
      WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
11553
 
11554
     OPEN recordset FOR
11555
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11556
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11557
              pv.pkg_version, pv.dlocked, pv.pv_description
11558
         FROM release_content rel,
11559
              PACKAGES pkg,
11560
              package_versions pv,
11561
              views vi
11562
        WHERE pv.pkg_id = pkg.pkg_id
11563
          AND rel.pv_id = pv.pv_id
11564
          AND rel.base_view_id = vi.view_id
11565
          AND pv.is_deployable = 'Y'
11566
          AND rtag_id = rtagid
11567
          AND rel.product_state IN (3, 5)
11568
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11569
                                 FROM deployment_manager.os_contents)
11570
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11571
   END;
11572
 
11573
/*-------------------------------------------------------------------------------------------------------*/
11574
   PROCEDURE get_reject_items (
11575
     rtagid           IN      NUMBER,
11576
     ntruerecordcount OUT     NUMBER,
11577
     recordset        OUT     typecur
11578
   )
11579
   IS
11580
   BEGIN
11581
     -- Get true record count n the number of reject products
11582
     SELECT COUNT (rc.pv_id)
11583
       INTO ntruerecordcount
11584
       FROM release_content rc
11585
      WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
11586
 
11587
     OPEN recordset FOR
11588
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11589
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11590
              pv.pkg_version, pv.dlocked, pv.pv_description
11591
         FROM release_content rel,
11592
              PACKAGES pkg,
11593
              package_versions pv,
11594
              views vi
11595
        WHERE pv.pkg_id = pkg.pkg_id
11596
          AND rel.pv_id = pv.pv_id
11597
          AND rel.base_view_id = vi.view_id
11598
          AND pv.is_deployable = 'Y'
11599
          AND rtag_id = rtagid
11600
          AND rel.product_state = 4
11601
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11602
   END;
11603
/*-------------------------------------------------------------------------------------------------------*/
11604
   -- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table
11605
   -- to the release_content table.
11606
 
11607
  PROCEDURE approve_merge (
11608
   PvId    IN NUMBER,
11609
   RtagId  IN NUMBER,
11610
   UserId  IN NUMBER
11611
  )
11612
  IS
11613
   viewid        NUMBER;
11614
   envtab        NUMBER;
11615
   oper         CHAR;
11616
  BEGIN
11617
      -- Get ViewId
11618
     viewid := get_package_view (pvid, rtagid);
11619
 
11620
     -- Get the view tab
11621
     envtab := pk_environment.get_package_area (pvid, rtagid);
11622
 
11623
     -- Make sure that package was in pending before merging it to released
11624
     IF (envtab <> 1)
11625
     THEN
11626
       -- Not found in pending
11627
       raise_application_error (-20000,
11628
                          'This package cannot be released here.'
11629
                         );
11630
     END IF;
11631
 
11632
     -- Log
11633
     log_action (pvid, 'action', userid, 'Start of Package Merge...');
11634
 
11635
     -- Get the planned operation type A=Add, S=Subtract
11636
     SELECT ev.operation INTO oper
11637
       FROM environment_view ev
11638
      WHERE ev.rtag_id = RtagId
11639
        AND ev.pv_id = PvId
11640
        AND (ev.operation = 'A' OR ev.operation = 'S');
11641
 
11642
     -- Remove from Pending
11643
     pk_planned.remove_package (PvId, RtagId, UserId);
11644
 
11645
     -- Either add to the release, or remove from the release as the operation commands
11646
     IF oper = 'A'
11647
     THEN
11648
       pk_release.add_package(PvId, viewId, RtagId, UserId);
11649
 
11650
     ELSIF oper = 'S'
11651
     THEN
11652
       pk_release.remove_package(PvId, RtagId, UserId);
11653
 
11654
       -- Delete old package's pegging info
11655
       DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;
11656
 
11657
       -- Delete old package's advisory ripple info
11658
       DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;
11659
     END IF;
11660
 
11661
     touch_release(RtagId);
11662
 
11663
     -- Log
11664
     log_action (pvid, 'action', userid, 'End of Package Merge...');
11665
  END;
11666
/*-------------------------------------------------------------------------------------------------------*/
11667
END pk_environment;
1374 dpurdie 11668
/
11669
--------------------------------------------------------
11670
--  DDL for Package Body PK_WORK_IN_PROGRESS
11671
--------------------------------------------------------
1373 dpurdie 11672
 
11673
  CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS
11674
 
11675
/*
11676
------------------------------
11677
||  Last Modified:  S.Vukovic
11678
||  Modified Date:  2/May/2005
11679
||  Body Version:   1.0
11680
------------------------------
11681
*/
11682
 
11683
 
11684
/*-------------------------------------------------------------------------------------------------------*/
11685
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11686
 
11687
	oldPvId NUMBER;
11688
	ReleaseLocation VARCHAR2(4000);
11689
	sLocation VARCHAR2(4000) := NULL;
11690
 
11691
 
11692
BEGIN
11693
	/*--------------- Business Rules Here -------------------*/
11694
	/*-------------------------------------------------------*/
11695
 
11696
	BEGIN
11697
		-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
11698
		SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
11699
		  FROM WORK_IN_PROGRESS wip,
11700
		  	   RELEASE_TAGS rt,
11701
			   PROJECTS proj
11702
		 WHERE wip.PV_ID = newPvId
11703
		   AND wip.RTAG_ID = rt.RTAG_ID
11704
		   AND rt.OFFICIAL != 'Y'
11705
		   AND rt.PROJ_ID = proj.PROJ_ID;
11706
 
11707
		EXCEPTION
11708
	    	WHEN NO_DATA_FOUND THEN
11709
	       		sLocation := NULL;
11710
 
11711
	END;	   	   
11712
 
11713
 
11714
 
11715
	IF (sLocation IS NULL)  THEN
11716
 
11717
		-- Add to "Work in progress"
11718
		INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
11719
		VALUES( RtagId, newPvId, ViewId );
11720
 
11721
 
11722
	    /* LOG ACTION */
11723
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11724
		  FROM PROJECTS proj,
11725
		  	   RELEASE_TAGS rt
11726
		 WHERE rt.PROJ_ID = proj.PROJ_ID
11727
		   AND rt.RTAG_ID = RtagId;
11728
 
11729
		Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11730
 
11731
	ELSE
11732
 
11733
		RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
11734
 
11735
	END IF;
11736
 
11737
END;
11738
/*-------------------------------------------------------------------------------------------------------*/
11739
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11740
 
11741
	ReleaseLocation VARCHAR2(4000);
11742
 
11743
BEGIN
11744
 
11745
	/*--------------- Business Rules Here -------------------*/
11746
	/*-------------------------------------------------------*/
11747
 
11748
 
11749
	-- Get release location for logging pusposes
11750
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11751
	  FROM PROJECTS proj,
11752
	  	   RELEASE_TAGS rt
11753
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11754
	   AND rt.RTAG_ID = RtagId;
11755
 
11756
 
11757
	-- Delete from Work In Progress
11758
	DELETE
11759
	  FROM WORK_IN_PROGRESS wip
11760
	 WHERE wip.RTAG_ID = RtagId
11761
	   AND wip.PV_ID = PvId;
11762
 
11763
	Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );
11764
 
11765
 
11766
 
11767
 
11768
END;
11769
/*-------------------------------------------------------------------------------------------------------*/
11770
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS
11771
 
11772
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
11773
	ReleaseLocation VARCHAR2(4000);
11774
	PvId NUMBER;
11775
 
11776
BEGIN
11777
 
11778
	/*--------------- Business Rules Here -------------------*/
11779
	IF (PvIdList IS NULL)
11780
	THEN
11781
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
11782
	END IF;
11783
	/*-------------------------------------------------------*/
11784
 
11785
 
11786
	nIdCollector := IN_LIST_NUMBER ( PvIdList );
11787
 
11788
 
11789
	-- Get release location for logging pusposes
11790
	SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11791
	  FROM PROJECTS proj,
11792
	  	   RELEASE_TAGS rt
11793
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11794
	   AND rt.RTAG_ID = RtagId;
11795
 
11796
 
11797
	FOR i IN 1..nIdCollector.COUNT
11798
	LOOP
11799
		PvId := nIdCollector(i);
11800
 
11801
		-- Delete from Work In Progress
11802
		DELETE
11803
		  FROM WORK_IN_PROGRESS wip
11804
		 WHERE wip.RTAG_ID = RtagId
11805
		   AND wip.PV_ID = PvId;
11806
 
11807
		Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11808
 
11809
	END LOOP;
11810
 
11811
 
11812
END;
11813
/*-------------------------------------------------------------------------------------------------------*/
11814
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
11815
 
11816
	ReturnValue NUMBER;
11817
 
11818
BEGIN
11819
	SELECT wip.VIEW_ID INTO ReturnValue
11820
	  FROM WORK_IN_PROGRESS wip
11821
	 WHERE wip.RTAG_ID = RtagId
11822
	   AND wip.PV_ID = PvId;
11823
 
11824
	RETURN ReturnValue;
11825
END;
11826
/*-------------------------------------------------------------------------------------------------------*/
11827
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
11828
 
11829
	IsBaseView CHAR(1);
11830
 
11831
BEGIN
11832
 
11833
	-- Check if the view is BASE VIEW
11834
	SELECT vi.BASE_VIEW INTO IsBaseView
11835
	  FROM VIEWS vi
11836
	 WHERE vi.VIEW_ID = ViewId;
11837
 
11838
	IF (IsBaseView = 'Y') THEN 
11839
		-- Get Base view content
11840
		OPEN RecordSet FOR
11841
		SELECT 0 AS PKG_STATE,
11842
			   NULL AS DEPRECATED_STATE,
11843
			   pv.pv_id, 
11844
			   pkg.pkg_name, 
11845
			   pv.pkg_version, 
11846
			   pv.dlocked, 
11847
			   pv.pv_description,
11848
			   pv.BUILD_TYPE
11849
		  FROM WORK_IN_PROGRESS rel,
11850
		       packages pkg,
11851
		       package_versions pv
11852
		 WHERE pv.pkg_id = pkg.pkg_id
11853
		   AND rel.pv_id = pv.pv_id
11854
		   AND rel.VIEW_ID = ViewId
11855
		   AND rel.RTAG_ID = RtagId
11856
		 ORDER BY UPPER(pkg.PKG_NAME);
11857
 
11858
 
11859
	ELSE	 
11860
 
11861
	 	-- Get non base view content
11862
		OPEN RecordSet FOR
11863
		SELECT 0 AS PKG_STATE,
11864
			   NULL AS DEPRECATED_STATE,
11865
			   pv.pv_id, 
11866
			   pkg.pkg_name, 
11867
			   pv.pkg_version, 
11868
			   pv.dlocked, 
11869
			   pv.pv_description,
11870
			   pv.BUILD_TYPE
11871
		  FROM WORK_IN_PROGRESS rel,
11872
		       packages pkg,
11873
		       package_versions pv,
11874
			   VIEW_DEF vd
11875
		 WHERE pv.pkg_id = pkg.pkg_id
11876
		   AND rel.pv_id = pv.pv_id
11877
		   AND vd.VIEW_ID = ViewId
11878
		   AND vd.PKG_ID = pv.PKG_ID
11879
		   AND rel.RTAG_ID = RtagId
11880
		 ORDER BY UPPER(pkg.PKG_NAME);
11881
 
11882
 
11883
	END IF;	 	
11884
 
11885
 
11886
END;
11887
/*-------------------------------------------------------------------------------------------------------*/
11888
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
11889
 
11890
BEGIN
11891
 
11892
	UPDATE WORK_IN_PROGRESS wip SET
11893
	wip.VIEW_ID = NewViewId
11894
	WHERE wip.PV_ID = PvId
11895
	  AND wip.RTAG_ID = RtagId;
11896
 
11897
END;
11898
/*-------------------------------------------------------------------------------------------------------*/
11899
END PK_WORK_IN_PROGRESS;
1374 dpurdie 11900
/
11901
--------------------------------------------------------
11902
--  DDL for Package Body PK_ARCHIVE
11903
--------------------------------------------------------
1373 dpurdie 11904
 
11905
  CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE" 
11906
IS
11907
/*
11908
------------------------------
11909
||  Author:  Rupesh Solanki
11910
||  Date:    26 October 2006
11911
||  Version:   1.0
11912
------------------------------
11913
*/
11914
/*---------------------------*/
11915
PROCEDURE populate_packages_table IS
11916
 
11917
BEGIN
11918
		  INSERT INTO archive_manager.PACKAGES
11919
		  (
11920
		  select * from packages where pkg_id not in 
11921
		  		  (select pkg_id from archive_manager.packages)
11922
		  );
11923
 
11924
          INSERT INTO archive_manager.PROCESSES
11925
          (
11926
          select * from processes where proc_id not in 
11927
            (select proc_id from archive_manager.processes)
11928
          );
11929
 
11930
 
11931
 
11932
END;
11933
/*-------------------------------------------------------------------------------------------------------*/
11934
   PROCEDURE populate_archive_data_table (
11935
      nrtagid   IN   release_tags.rtag_id%TYPE
11936
   )
11937
   IS
11938
/*
11939
Reason: To populate the archive_data table with information regarding the
11940
         number of package versions that exist in other releases.
11941
*/
11942
      numcount      NUMBER;
11943
      numusedby     NUMBER;
11944
      numruntime    NUMBER;
11945
 
11946
      /* Get all the package versions in the release */
11947
      CURSOR archive_cur
11948
      IS
11949
         SELECT pv_id
11950
           FROM release_content
11951
          WHERE rtag_id = nrtagid;
11952
 
11953
      archive_rec   archive_cur%ROWTYPE;
11954
   BEGIN
11955
/*--------------- Business Rules Here -------------------*/
11956
/*-------------------------------------------------------*/
11957
      OPEN archive_cur;
11958
 
11959
      FETCH archive_cur
11960
       INTO archive_rec;
11961
 
11962
      WHILE archive_cur%FOUND
11963
      LOOP
11964
        /* How many packages depend on this package version? */
11965
         SELECT COUNT (*)
11966
           INTO numusedby
11967
           FROM package_dependencies
11968
          WHERE dpv_id = archive_rec.pv_id;
11969
 
11970
        /* How many project releases use this package version?  */
11971
         SELECT COUNT (*)
11972
           INTO numcount
11973
           FROM release_content
11974
          WHERE pv_id = archive_rec.pv_id;
11975
 
11976
        /* How many packages have this package version as runtime
11977
        dependency? */
11978
         SELECT COUNT (*)
11979
           INTO numruntime
11980
           FROM runtime_dependencies
11981
          WHERE rtd_id = archive_rec.pv_id;
11982
 
11983
        /* Insert into the archive_data table if they are not runtime dependant
11984
        and package dependant and they exist in that particular release only*/
11985
         IF numusedby = 0 AND numcount = 1 AND numruntime = 0
11986
         THEN
11987
            INSERT INTO archive_data
11988
                        (rtag_id, pv_id
11989
                        )
11990
                 VALUES (nrtagid, archive_rec.pv_id
11991
                        );
11992
         END IF;
11993
 
11994
         FETCH archive_cur
11995
          INTO archive_rec;
11996
      END LOOP;
11997
   END;
11998
 
11999
/*-------------------------------------------------------------------------------------------------------*/
12000
   PROCEDURE migrate_pv_to_archive_schema (
12001
      nrtagid   IN   release_tags.rtag_id%TYPE
12002
   )
12003
   IS
12004
   BEGIN
12005
 
12006
      /* MIGRATION - PACKAGE_VERSIONS */
12007
      INSERT INTO archive_manager.package_versions
12008
         SELECT *
12009
           FROM package_versions
12010
          WHERE pv_id IN (SELECT pv_id
12011
                            FROM archive_data);
12012
 
12013
      /* MIGRATION - PACKAGE_BUILD_ENV */
12014
      INSERT INTO archive_manager.package_build_env
12015
         SELECT *
12016
           FROM package_build_env
12017
          WHERE pv_id IN (SELECT pv_id
12018
                            FROM archive_data);
12019
 
12020
      /* PURGE DATA FROM PACKAGE_BUILD_ENV */
12021
      DELETE FROM package_build_env
12022
            WHERE pv_id IN (SELECT pv_id
12023
                              FROM archive_data);
12024
 
12025
      /* MIGRATION - PACKAGE_BUILD_INFO */
12026
      INSERT INTO archive_manager.package_build_info
12027
         SELECT *
12028
           FROM package_build_info
12029
          WHERE pv_id IN (SELECT pv_id
12030
                            FROM archive_data);
12031
 
12032
      /* PURGE DATA FROM PACKAGE_BUILD_info */
12033
      DELETE FROM package_build_info
12034
            WHERE pv_id IN (SELECT pv_id
12035
                              FROM archive_data);							  
12036
 
12037
      /* MIGRATION - UNIT_TESTS  */
12038
      INSERT INTO archive_manager.unit_tests
12039
         SELECT *
12040
           FROM unit_tests
12041
          WHERE pv_id IN (SELECT pv_id
12042
                            FROM archive_data);
12043
 
12044
      /* PURGE DATA FROM UNIT_TESTS*/
12045
      DELETE FROM unit_tests
12046
            WHERE pv_id IN (SELECT pv_id
12047
                              FROM archive_data);
12048
 
12049
      /* MIGRATION - PACKAGE_PROCESSES */
12050
      INSERT INTO archive_manager.package_processes
12051
         SELECT *
12052
           FROM package_processes
12053
          WHERE pv_id IN (SELECT pv_id
12054
                            FROM archive_data);
12055
 
12056
      /* PURGE DATA FROM PACKAGE_PROCESSES*/
12057
      DELETE FROM package_processes
12058
            WHERE pv_id IN (SELECT pv_id
12059
                              FROM archive_data);
12060
 
12061
      /* MIGRATION - PACKAGE_DEPENDENCIES */
12062
      INSERT INTO archive_manager.package_dependencies
12063
         SELECT *
12064
           FROM package_dependencies
12065
          WHERE pv_id IN (SELECT pv_id
12066
                            FROM archive_data);
12067
 
12068
      /* PURGE DATA FROM PACKAGE_DEPENDENCIES*/
12069
      DELETE FROM package_dependencies
12070
            WHERE pv_id IN (SELECT pv_id
12071
                              FROM archive_data);
12072
 
12073
      /* MIGRATION - CODE_REVIEWS */
12074
      INSERT INTO archive_manager.code_reviews
12075
         SELECT *
12076
           FROM code_reviews
12077
          WHERE pv_id IN (SELECT pv_id
12078
                            FROM archive_data);
12079
 
12080
      /* PURGE DATA FROM CODE_REVIEWS*/
12081
      DELETE FROM code_reviews
12082
            WHERE pv_id IN (SELECT pv_id
12083
                              FROM archive_data);
12084
 
12085
      /* MIGRATION - RUNTIME_DEPENDENCIES*/
12086
      INSERT INTO archive_manager.runtime_dependencies
12087
         SELECT *
12088
           FROM runtime_dependencies
12089
          WHERE pv_id IN (SELECT pv_id
12090
                            FROM archive_data);
12091
 
12092
      /* PURGE DATA FROM RUNTIME_DEPENDENCIES*/
12093
      DELETE FROM runtime_dependencies
12094
            WHERE pv_id IN (SELECT pv_id
12095
                              FROM archive_data);
12096
 
12097
      /* MIGRATION - PACKAGE_DOCUMENTS */
12098
      INSERT INTO archive_manager.package_documents
12099
         SELECT *
12100
           FROM package_documents
12101
          WHERE pv_id IN (SELECT pv_id
12102
                            FROM archive_data);
12103
 
12104
      /* PURGE DATA FROM PACKAGE_DOCUMENTS*/
12105
      DELETE FROM package_documents
12106
            WHERE pv_id IN (SELECT pv_id
12107
                              FROM archive_data);
12108
 
12109
      /* MIGRATION - PACKAGE_PATCHES */
12110
      INSERT INTO archive_manager.package_patches
12111
         SELECT *
12112
           FROM package_patches
12113
          WHERE pv_id IN (SELECT pv_id
12114
                            FROM archive_data);
12115
 
12116
      /* PURGE DATA FROM PACKAGE_PATCHES*/
12117
      DELETE FROM package_patches
12118
            WHERE pv_id IN (SELECT pv_id
12119
                              FROM archive_data);
12120
 
12121
      /* MIGRATION - CQ_ISSUES */
12122
      INSERT INTO archive_manager.cq_issues
12123
         SELECT *
12124
           FROM cq_issues
12125
          WHERE pv_id IN (SELECT pv_id
12126
                            FROM archive_data);
12127
 
12128
      /* PURGE DATA FROM CQ_ISSUES*/
12129
      DELETE FROM cq_issues
12130
            WHERE pv_id IN (SELECT pv_id
12131
                              FROM archive_data);
12132
 
12133
      /* MIGRATION - ADDITIONAL_NOTES */
12134
      INSERT INTO archive_manager.additional_notes
12135
         SELECT *
12136
           FROM additional_notes
12137
          WHERE pv_id IN (SELECT pv_id
12138
                            FROM archive_data);
12139
 
12140
      /* PURGE DATA FROM ADDITIONAL_NOTES*/
12141
      DELETE FROM additional_notes
12142
            WHERE pv_id IN (SELECT pv_id
12143
                              FROM archive_data);
12144
 
12145
      /* MIGRATION - RELEASE_COMPONENTS */
12146
      INSERT INTO archive_manager.release_components
12147
         SELECT *
12148
           FROM release_components
12149
          WHERE pv_id IN (SELECT pv_id
12150
                            FROM archive_data);
12151
 
12152
      /* PURGE DATA FROM RELEASE_COMPONENTS*/
12153
      DELETE FROM release_components
12154
            WHERE pv_id IN (SELECT pv_id
12155
                              FROM archive_data);
12156
 
12157
      /* MIGRATION - IGNORE_WARNINGS */
12158
      INSERT INTO archive_manager.ignore_warnings
12159
         SELECT *
12160
           FROM ignore_warnings
12161
          WHERE pv_id IN (SELECT pv_id
12162
                            FROM archive_data);
12163
 
12164
      /* PURGE DATA FROM IGNORE_WARNINGS*/
12165
      DELETE FROM ignore_warnings
12166
            WHERE pv_id IN (SELECT pv_id
12167
                              FROM archive_data);
12168
 
12169
      /* PURGE DATA FROM WORK_IN_PROGRESS */
12170
      DELETE FROM work_in_progress
12171
            WHERE rtag_id = nrtagid;
12172
 
12173
      /* PURGE DATA FROM PLANNED */
12174
      DELETE FROM planned
12175
            WHERE rtag_id = nrtagid;
12176
 
12177
      /* MIGRATION - JIRA_ISSUES */
12178
      INSERT INTO archive_manager.jira_issues
12179
         SELECT *
12180
           FROM jira_issues
12181
          WHERE pv_id IN (SELECT pv_id
12182
                            FROM archive_data);
12183
 
12184
      /* PURGE DATA FROM JIRA_ISSUES*/
12185
      DELETE FROM jira_issues
12186
            WHERE pv_id IN (SELECT pv_id
12187
                              FROM archive_data);
12188
 
12189
      /* MIGRATION - PRODUCT_COMPONENTS */
12190
      INSERT INTO archive_manager.product_components
12191
         SELECT *
12192
           FROM product_components
12193
          WHERE pv_id IN (SELECT pv_id
12194
                            FROM archive_data);
12195
 
12196
      /* PURGE DATA FROM PRODUCT_COMPONENTS*/
12197
      DELETE FROM product_components
12198
            WHERE pv_id IN (SELECT pv_id
12199
                              FROM archive_data);
12200
 
12201
      /* MIGRATION - ACTION_LOG */
12202
      INSERT INTO archive_manager.action_log
12203
         SELECT *
12204
           FROM action_log
12205
          WHERE pv_id IN (SELECT pv_id
12206
                            FROM archive_data);
12207
 
12208
      /* PURGE DATA FROM ACTION_LOG*/
12209
      DELETE FROM action_log
12210
            WHERE pv_id IN (SELECT pv_id
12211
                              FROM archive_data);
12212
 
12213
 
12214
   END;
12215
 
12216
/*-------------------------------------------------------------------------------------------------------*/
12217
   PROCEDURE migrate_rtag_to_archive_schema (
12218
      nrtagid   IN   release_tags.rtag_id%TYPE
12219
   )
12220
   IS
12221
   BEGIN
12222
      /* MIGRATION - DO_NOT_RIPPLE */
12223
      INSERT INTO archive_manager.do_not_ripple
12224
         SELECT *
12225
           FROM do_not_ripple dnp
12226
          WHERE rtag_id = nrtagid;
12227
 
12228
      /* PURGE DATA FROM DO_NOT_RIPPLE */
12229
      DELETE FROM do_not_ripple
12230
            WHERE rtag_id = nrtagid;
12231
 
12232
      /* MIGRATION - ADVISORY_RIPPLES*/
12233
      INSERT INTO archive_manager.advisory_ripples
12234
         SELECT *
12235
           FROM advisory_ripple dnp
12236
          WHERE rtag_id = nrtagid;
12237
 
12238
      /* PURGE DATA FROM ADVISORY_RIPPLES*/
12239
      DELETE FROM advisory_ripple
12240
            WHERE rtag_id = nrtagid;			
12241
 
12242
      /* MIGRATION - RELEASE_CONTENT */
12243
      INSERT INTO archive_manager.release_content
12244
         SELECT *
12245
           FROM release_content
12246
          WHERE rtag_id = nrtagid;
12247
 
12248
      /* PURGE DATA FROM RELEASE_CONTENT*/
12249
      DELETE FROM release_content
12250
            WHERE rtag_id = nrtagid;
12251
 
12252
      /* MIGRATION - NOTIFICATION_HISTORY */
12253
      INSERT INTO archive_manager.notification_history
12254
         SELECT *
12255
           FROM notification_history
12256
          WHERE rtag_id = nrtagid;
12257
 
12258
      /* PURGE DATA FROM NOTIFICATION_HISTORY*/
12259
      DELETE FROM notification_history
12260
            WHERE rtag_id = nrtagid;
12261
 
12262
      /* MIGRATION - BUILD_ORDER   */
12263
      INSERT INTO archive_manager.build_order
12264
         SELECT *
12265
           FROM build_order
12266
          WHERE rtag_id = nrtagid;
12267
 
12268
      /* PURGE DATA FROM BUILD_ORDER*/
12269
      DELETE FROM build_order
12270
            WHERE rtag_id = nrtagid;
12271
 
12272
      /* MIGRATION - PROJECT_ACTION_LOG */
12273
      INSERT INTO archive_manager.project_action_log
12274
         SELECT *
12275
           FROM project_action_log
12276
          WHERE rtag_id = nrtagid;
12277
 
12278
      /* PURGE DATA FROM PROJECT_ACTION_LOG */
12279
      DELETE FROM project_action_log
12280
            WHERE rtag_id = nrtagid;
12281
 
12282
      /* MIGRATION - DEPRECATED_PACKAGES */
12283
      INSERT INTO archive_manager.deprecated_packages
12284
         SELECT *
12285
           FROM deprecated_packages
12286
          WHERE rtag_id = nrtagid;
12287
 
12288
      /* PURGE DATA FROM DEPRECATED_PACKAGES */
12289
      DELETE FROM deprecated_packages
12290
            WHERE rtag_id = nrtagid;
12291
 
12292
      /* MIGRATION - RELEASE_TAGS */
12293
      INSERT INTO archive_manager.release_tags
12294
         SELECT *
12295
           FROM release_tags
12296
          WHERE rtag_id = nrtagid;
12297
 
12298
 
12299
      /* PURGE DATA FROM PACKAGE_VERSIONS*/
12300
      DELETE FROM package_versions
12301
            WHERE pv_id IN (SELECT pv_id
12302
                              FROM archive_data);
12303
 
12304
 
12305
   END;
12306
 
12307
/*-------------------------------------------------------------------------------------------------------*/
12308
   PROCEDURE clean_up_archive_data_table (
12309
      nrtagid   IN   release_tags.rtag_id%TYPE
12310
   )
12311
   IS
12312
   BEGIN
12313
      /* Cleaning Up The Archive_Data Table */
12314
      DELETE FROM archive_data
12315
            WHERE rtag_id = nrtagid;
12316
   END;
12317
 
12318
/*-------------------------------------------------------------------------------------------------------*/
12319
   PROCEDURE write_action_log (
12320
      nuserid   IN   NUMBER,
12321
      nrtagid   IN   release_tags.rtag_id%TYPE
12322
   )
12323
   IS
12324
   BEGIN
12325
      /* Write Into Archive_Action_Log Table */
12326
      INSERT INTO archive_action_log
12327
                  (user_id, date_time_stamp, rtag_id,
12328
                   description
12329
                  )
12330
           VALUES (nuserid, ora_sysdatetime, nrtagid,
12331
                   'Release has been archived to the ARCHIVE_MANAGER schema'
12332
                  );
12333
   END;
12334
/*-------------------------------------------------------------------------------------------------------*/
12335
END pk_archive; 
1374 dpurdie 12336
/
12337
--------------------------------------------------------
12338
--  DDL for Package Body PK_PACKAGE_TEST
12339
--------------------------------------------------------
1373 dpurdie 12340
 
12341
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE_TEST" 
12342
IS
12343
/*
12344
------------------------------
12345
||  Last Modified:  R. Solanki
12346
||  Modified Date:  09/03/2006
12347
||  Body Version:   1.7
12348
------------------------------
12349
*/
12350
 
12351
   /*-------------------------------------------------------------------------------------------------------*/
12352
   PROCEDURE new_version (
12353
      nlastpvid                   IN       NUMBER,
12354
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
12355
      cbuildtype                  IN       CHAR,
12356
      nsettopvid                  IN       NUMBER DEFAULT NULL,
12357
      nrtagid                     IN       NUMBER,
12358
      nuserid                     IN       NUMBER,
12359
      enumissues_state_imported   IN       NUMBER,
12360
      returnpvid                  OUT      NUMBER
12361
   )
12362
   IS
12363
      origpkg_id                   package_versions.pkg_id%TYPE;
12364
      origdlocked                  package_versions.dlocked%TYPE;
12365
      ssv_mm                       package_versions.v_mm%TYPE;
12366
      ssv_nmm                      package_versions.v_nmm%TYPE;
12367
      ssv_ext                      package_versions.v_ext%TYPE;
12368
      spackageversion              VARCHAR2 (4000);
12369
      nissuestypes                 NUMBER;
12370
      nviewid                      NUMBER;
12371
      reccount                     NUMBER;
12372
      isreleased                   package_versions.dlocked%TYPE       := 'N';
12373
      slabel                       VARCHAR2 (4000)                    := NULL;
12374
 
12375
      CURSOR package_versions_cur
12376
      IS
12377
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
12378
           FROM package_versions pv
12379
          WHERE pv.pkg_version = snewpkgversion
12380
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
12381
                                         FROM package_versions origpv
12382
                                        WHERE origpv.pv_id = nlastpvid);
12383
 
12384
      package_versions_rec         package_versions_cur%ROWTYPE;
12385
 
12386
      CURSOR clone_package_versions_cur
12387
      IS
12388
         SELECT DISTINCT pkg_id, dlocked
12389
                    FROM package_versions
12390
                   WHERE pv_id = nlastpvid;
12391
 
12392
      clone_package_versions_rec   clone_package_versions_cur%ROWTYPE;
12393
   BEGIN
12394
      spackageversion := snewpkgversion;
12395
 
12396
      IF nsettopvid IS NULL
12397
      THEN
12398
         -- SetToPv_id is not supplied, hence proceed.
12399
 
12400
         /* ---------------------------------------------------- */
12401
/* Find id package_version exists                       */
12402
/* ---------------------------------------------------- */
12403
         OPEN package_versions_cur;
12404
 
12405
         FETCH package_versions_cur
12406
          INTO package_versions_rec;
12407
 
12408
         IF package_versions_cur%NOTFOUND
12409
         THEN
12410
            ---  Create brand new package ---
12411
            SELECT seq_pv_id.NEXTVAL
12412
              INTO returnpvid
12413
              FROM DUAL;
12414
 
12415
            -- Split Version to get extention + other
12416
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
12417
 
12418
            -- Get previous package to clone from
12419
            OPEN clone_package_versions_cur;
12420
 
12421
            FETCH clone_package_versions_cur
12422
             INTO clone_package_versions_rec;
12423
 
12424
            origpkg_id := clone_package_versions_rec.pkg_id;
12425
            origdlocked := clone_package_versions_rec.dlocked;
12426
 
12427
            CLOSE clone_package_versions_cur;
12428
 
12429
            -- Automated built config
12430
            IF (cbuildtype = 'A')
12431
            THEN
12432
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
12433
                                    -- Make sure that version is still unique
12434
            END IF;
12435
 
12436
            -- Clone Package Version Details --
12437
            INSERT INTO package_versions
12438
                        (pv_id, pkg_id, pkg_version, dlocked, created_stamp,
12439
                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
12440
                         v_ext, src_path, pv_description, pv_overview,
12441
                         last_pv_id, owner_id, is_deployable,
12442
                         is_build_env_required, build_type, bs_id, is_autobuildable)
12443
               SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
12444
                      spackageversion AS pkg_version, 'N' AS dlocked,
12445
                      ora_sysdate AS created_stamp, nuserid AS creator_id,
12446
                      ora_sysdatetime AS modified_stamp,
12447
                      nuserid AS modifier_id, ssv_mm AS v_mm,
12448
                      ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
12449
                      pv.pv_description, pv.pv_overview,
12450
                      nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
12451
                      pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable
12452
                 FROM package_versions pv
12453
                WHERE pv.pv_id = nlastpvid;
12454
 
12455
            -- Set Issues Type for cloning ---
12456
            IF origdlocked = 'Y'
12457
            THEN
12458
               nissuestypes := enumissues_state_imported;
12459
            ELSE
12460
               nissuestypes := NULL;
12461
            END IF;
12462
 
12463
            -- Update Label for automated built
12464
            IF (cbuildtype = 'A')
12465
            THEN
12466
               slabel := get_automated_label (returnpvid);
12467
 
12468
               UPDATE package_versions pv
12469
                  SET pv.pkg_label = slabel
12470
                WHERE pv.pv_id = returnpvid;
12471
            END IF;
12472
 
12473
            basic_clone (nlastpvid,
12474
                         returnpvid,
12475
                         nrtagid,
12476
                         nuserid,
12477
                         origpkg_id,
12478
                         nissuestypes
12479
                        );
12480
         ELSE
12481
            --- Package already exists, hence reuse ---
12482
            returnpvid := package_versions_rec.pv_id;
12483
            isreleased := package_versions_rec.dlocked;
12484
         END IF;
12485
 
12486
         CLOSE package_versions_cur;
12487
      ELSE
12488
         returnpvid := nsettopvid;
12489
      END IF;
12490
   END new_version;
12491
 
12492
/*-------------------------------------------------------------------------------------------------------*/
12493
   PROCEDURE change_state (
12494
      pvid       IN   NUMBER,
12495
      newstate   IN   package_versions.dlocked%TYPE,
12496
      userid     IN   NUMBER
12497
   )
12498
   IS
12499
   BEGIN
12500
      -- Set package in Released mode
12501
      UPDATE package_versions pv
12502
         SET pv.dlocked = newstate,
12503
             pv.modified_stamp = ora_sysdatetime,
12504
             pv.modifier_id = userid
12505
       WHERE pv.pv_id = pvid;
12506
 
12507
      -- Log action --
12508
      IF newstate = 'Y'
12509
      THEN
12510
         -- RELEASED --
12511
         log_action (pvid,
12512
                     'makeofficial',
12513
                     userid,
12514
                     'Package state change to: Released'
12515
                    );
12516
      ELSIF newstate = 'N'
12517
      THEN
12518
         -- UNLOCKED --
12519
         log_action (pvid,
12520
                     'makeunofficial',
12521
                     userid,
12522
                     'Package state change to: Ulocked'
12523
                    );
12524
      ELSIF newstate = 'P'
12525
      THEN
12526
         -- PENDING APPROVAL --
12527
         log_action (pvid,
12528
                     'add_to_planned',
12529
                     userid,
12530
                     'Package state change to: Pending Approval'
12531
                    );
12532
      ELSIF newstate = 'R'
12533
      THEN
12534
         -- REJECTED --
12535
         log_action (pvid,
12536
                     'reject_package',
12537
                     userid,
12538
                     'Package state change to: Rejected'
12539
                    );
12540
      ELSIF newstate = 'A'
12541
      THEN
12542
         -- APPROVED --
12543
         log_action (pvid,
12544
                     'approve_package',
12545
                     userid,
12546
                     'Package state change to: Approved'
12547
                    );
12548
      END IF;
12549
   END;
12550
 
12551
/*-------------------------------------------------------------------------------------------------------*/
12552
   PROCEDURE destroy_package (
12553
      pvid               IN       NUMBER,
12554
      overridewarnings   IN       CHAR DEFAULT 'N',
12555
      problemstring      OUT      VARCHAR2
12556
   )
12557
   IS
12558
      LOCKED     CHAR;
12559
      pkgid      NUMBER;
12560
      ROWCOUNT   NUMBER;
12561
   BEGIN
12562
      /*
12563
      || This will destroy all package details from database.
12564
      || It will only be used to remove unwanted work in progress packages,
12565
      || or mestaken versions
12566
      */
12567
 
12568
      /*--------------- Business Rules Here -------------------*/
12569
      problemstring := NULL;
12570
 
12571
      IF overridewarnings = 'N'
12572
      THEN
12573
         -- Package must not be official
12574
         SELECT pv.dlocked
12575
           INTO LOCKED
12576
           FROM package_versions pv
12577
          WHERE pv.pv_id = pvid;
12578
 
12579
         IF LOCKED = 'Y'
12580
         THEN
12581
            problemstring :=
12582
                  problemstring
12583
               || '- Package is locked and released.'
12584
               || UTL_TCP.crlf;
12585
         END IF;
12586
 
12587
         -- Cannot remove if used in BOMs
12588
         SELECT COUNT (osc.prod_id)
12589
           INTO ROWCOUNT
12590
           FROM deployment_manager.os_contents osc
12591
          WHERE osc.prod_id = pvid;
12592
 
12593
         IF ROWCOUNT > 0
12594
         THEN
12595
            problemstring :=
12596
                  problemstring
12597
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
12598
               || UTL_TCP.crlf;
12599
         END IF;
12600
 
12601
         -- Cannot remove if Referenced as build dependency
12602
         SELECT COUNT (dep.pv_id)
12603
           INTO ROWCOUNT
12604
           FROM package_dependencies dep
12605
          WHERE dep.dpv_id = pvid;
12606
 
12607
         IF ROWCOUNT > 0
12608
         THEN
12609
            problemstring :=
12610
                  problemstring
12611
               || '- Package is referenced by other package as build dependency.'
12612
               || UTL_TCP.crlf;
12613
         END IF;
12614
 
12615
         -- Cannot remove if Referenced as runtime dependency
12616
         SELECT COUNT (rd.pv_id)
12617
           INTO ROWCOUNT
12618
           FROM runtime_dependencies rd
12619
          WHERE rd.rtd_id = pvid;
12620
 
12621
         IF ROWCOUNT > 0
12622
         THEN
12623
            problemstring :=
12624
                  problemstring
12625
               || '- Package is referenced by other package as runtime dependency.'
12626
               || UTL_TCP.crlf;
12627
         END IF;
12628
 
12629
         -- Cannot remove if Referenced as patch
12630
         SELECT COUNT (pp.pv_id)
12631
           INTO ROWCOUNT
12632
           FROM package_patches pp
12633
          WHERE pp.patch_id = pvid;
12634
 
12635
         IF ROWCOUNT > 0
12636
         THEN
12637
            problemstring :=
12638
                  problemstring
12639
               || '- Package is used as patch by other package.'
12640
               || UTL_TCP.crlf;
12641
         END IF;
12642
      END IF;
12643
 
12644
/*-------------------------------------------------------*/
12645
      IF (problemstring IS NULL)
12646
      THEN
12647
         --- Remove From Work in Progress
12648
         DELETE FROM work_in_progress wip
12649
               WHERE wip.pv_id = pvid;
12650
 
12651
         --- Remove From Pending
12652
         DELETE FROM planned pl
12653
               WHERE pl.pv_id = pvid;
12654
 
12655
         --- Remove From Released area
12656
         DELETE FROM release_content rc
12657
               WHERE rc.pv_id = pvid;
12658
 
12659
         ---Remove From Package Processes
12660
         DELETE FROM package_processes pp
12661
               WHERE pp.pv_id = pvid;
12662
 
12663
         --- Remove Dependencies
12664
         DELETE FROM package_dependencies dep
12665
               WHERE dep.pv_id = pvid;
12666
 
12667
         DELETE FROM package_dependencies dep
12668
               WHERE dep.dpv_id = pvid;
12669
 
12670
         --- Remove Runtime dependencies
12671
         DELETE FROM runtime_dependencies rtd
12672
               WHERE rtd.pv_id = pvid;
12673
 
12674
         DELETE FROM runtime_dependencies rtd
12675
               WHERE rtd.rtd_id = pvid;
12676
 
12677
         --- Remove components
12678
         DELETE FROM product_components pc
12679
               WHERE pc.pv_id = pvid;
12680
 
12681
         DELETE FROM release_components rc
12682
               WHERE rc.pv_id = pvid;
12683
 
12684
         --- Remove From Notification History
12685
         DELETE FROM notification_history nh
12686
               WHERE nh.pv_id = pvid;
12687
 
12688
         --- Remove From Ignore Warnings
12689
         DELETE FROM ignore_warnings iw
12690
               WHERE iw.pv_id = pvid;
12691
 
12692
         --- Remove From Additional Notes
12693
         DELETE FROM additional_notes an
12694
               WHERE an.pv_id = pvid;
12695
 
12696
         --- Remove From CQ Issues
12697
         DELETE FROM cq_issues cq
12698
               WHERE cq.pv_id = pvid;
12699
 
12700
         --- Remove from Package Patches
12701
         DELETE FROM package_patches pp
12702
               WHERE pp.pv_id = pvid;
12703
 
12704
         DELETE FROM package_patches pp
12705
               WHERE pp.patch_id = pvid;
12706
 
12707
         --- Remove From Package Documents
12708
         DELETE FROM package_documents pd
12709
               WHERE pd.pv_id = pvid;
12710
 
12711
         --- Remove from Code Review
12712
         DELETE FROM code_reviews cr
12713
               WHERE cr.pv_id = pvid;
12714
 
12715
         --- Remove from Unit Tests
12716
         DELETE FROM unit_tests ut
12717
               WHERE ut.pv_id = pvid;
12718
 
12719
         --- Remove from Package BuildEnv
12720
         DELETE FROM package_build_env pbe
12721
               WHERE pbe.pv_id = pvid;
12722
 
12723
		 --- Remove from Package Build Info
12724
		 DELETE FROM package_build_info pbi
12725
		 	   WHERE pbi.pv_id = pvid;    
12726
 
12727
 
12728
         --- Remove from Build Order
12729
         DELETE FROM build_order bo
12730
               WHERE bo.pv_id = pvid;
12731
 
12732
         --- Remove from Note Manager
12733
         DELETE FROM note_manager nm
12734
               WHERE nm.nid = pvid;
12735
 
12736
         --- Remove from Action log
12737
         DELETE FROM action_log al
12738
               WHERE al.pv_id = pvid;
12739
 
12740
		 --- Remove from Do Not Ripple 
12741
		 DELETE FROM DO_NOT_RIPPLE dnr
12742
		 	   WHERE dnr.PV_ID = pvid;
12743
 
12744
		 --- Remove from Jira Issues 
12745
		 DELETE FROM JIRA_ISSUES jira
12746
		 	   WHERE jira.PV_ID = pvid;
12747
 
12748
         --- Finally Remove From Package Versions
12749
         --- Get Package name
12750
         SELECT pv.pkg_id
12751
           INTO pkgid
12752
           FROM package_versions pv
12753
          WHERE pv.pv_id = pvid;
12754
 
12755
         DELETE FROM package_versions pv
12756
               WHERE pv.pv_id = pvid;
12757
 
12758
         --- Remove package name if not used any more
12759
         SELECT COUNT (pv.pv_id)
12760
           INTO ROWCOUNT
12761
           FROM package_versions pv
12762
          WHERE pv.pkg_id = pkgid;
12763
 
12764
         IF ROWCOUNT < 1
12765
         THEN
12766
            DELETE FROM PACKAGES pkg
12767
                  WHERE pkg.pkg_id = pkgid;
12768
         END IF;
12769
      END IF;
12770
   END;
12771
 
12772
/*-------------------------------------------------------------------------------------------------------*/
12773
   PROCEDURE new_patch (
12774
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
12775
      nparentpvid        IN       NUMBER,
12776
      spatchidlist       IN       VARCHAR2,
12777
      nuserid            IN       NUMBER,
12778
      returnpatchid      OUT      NUMBER
12779
   )
12780
   IS
12781
      patchpv_id           NUMBER;
12782
      parpkg_id            NUMBER;
12783
      lastinstallorder     NUMBER;
12784
      ispatchdlocked       package_versions.dlocked%TYPE;
12785
      ssv_mm               package_versions.v_mm%TYPE;
12786
      ssv_nmm              package_versions.v_nmm%TYPE;
12787
      ssv_ext              package_versions.v_ext%TYPE;
12788
      opatchdepcollector   relmgr_number_tab_t      := relmgr_number_tab_t
12789
                                                                          ();
12790
 
12791
      CURSOR parent_cur
12792
      IS
12793
         SELECT pv.*, pkg.pkg_name
12794
           FROM package_versions pv, PACKAGES pkg
12795
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
12796
 
12797
      parent_rec           parent_cur%ROWTYPE;
12798
 
12799
      CURSOR patch_cur
12800
      IS
12801
         SELECT pv.*, pg.pkg_name
12802
           FROM package_versions pv, PACKAGES pg
12803
          WHERE pv.pkg_id = parpkg_id
12804
            AND pv.pkg_version = snewpatchversion
12805
            AND pv.pkg_id = pg.pkg_id;
12806
 
12807
      patch_rec            patch_cur%ROWTYPE;
12808
 
12809
      CURSOR releases_cur
12810
      IS
12811
         SELECT rc.pv_id
12812
           FROM release_content rc
12813
          WHERE rc.pv_id = patch_rec.pv_id;
12814
 
12815
      releases_rec         releases_cur%ROWTYPE;
12816
   BEGIN
12817
      -- Get Last Install Order
12818
      SELECT COUNT (*)
12819
        INTO lastinstallorder
12820
        FROM package_patches pp
12821
       WHERE pp.pv_id = nparentpvid;
12822
 
12823
      -- Get parent details
12824
      OPEN parent_cur;
12825
 
12826
      FETCH parent_cur
12827
       INTO parent_rec;
12828
 
12829
      parpkg_id := parent_rec.pkg_id;
12830
 
12831
      -- Find if patch exists in database
12832
      OPEN patch_cur;
12833
 
12834
      FETCH patch_cur
12835
       INTO patch_rec;
12836
 
12837
      -- Parent must be official
12838
      IF parent_rec.dlocked = 'Y'
12839
      THEN
12840
         IF patch_cur%NOTFOUND
12841
         THEN
12842
            ispatchdlocked := 'N';
12843
 
12844
            -- Create new patch version --
12845
            SELECT seq_pv_id.NEXTVAL
12846
              INTO patchpv_id
12847
              FROM DUAL;
12848
 
12849
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
12850
 
12851
            INSERT INTO package_versions
12852
                        (pv_id, pkg_id, pkg_version,
12853
                         dlocked, created_stamp, creator_id,
12854
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
12855
                         src_path,
12856
                         pv_description,
12857
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
12858
						 is_autobuildable
12859
                        )
12860
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
12861
                         ispatchdlocked, ora_sysdate, nuserid,
12862
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
12863
                         parent_rec.src_path,
12864
                            'This is a patch to '
12865
                         || parent_rec.pkg_name
12866
                         || ' '
12867
                         || parent_rec.pkg_version,
12868
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N'
12869
                        );
12870
 
12871
            INSERT INTO package_patches
12872
                        (pv_id, patch_id, install_order)
12873
               (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12874
                       lastinstallorder + 1 AS install_order
12875
                  FROM package_versions pv
12876
                 WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12877
 
12878
            /* LOG ACTION */
12879
            log_action (patchpv_id,
12880
                        'new_version',
12881
                        nuserid,
12882
                        'Patch version created: ' || snewpatchversion
12883
                       );
12884
            log_action (nparentpvid,
12885
                        'patch_add',
12886
                        nuserid,
12887
                        'New patch created and attached: ' || snewpatchversion
12888
                       );
12889
         ELSE
12890
            patchpv_id := patch_rec.pv_id;
12891
            ispatchdlocked := patch_rec.dlocked;
12892
 
12893
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
12894
            OPEN releases_cur;
12895
 
12896
            FETCH releases_cur
12897
             INTO releases_rec;
12898
 
12899
            IF releases_cur%NOTFOUND
12900
            THEN
12901
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
12902
               UPDATE package_versions
12903
                  SET is_patch = 'Y'
12904
                WHERE pv_id = patchpv_id;
12905
 
12906
               INSERT INTO package_patches
12907
                           (pv_id, patch_id, install_order)
12908
                  (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12909
                          lastinstallorder + 1 AS install_order
12910
                     FROM package_versions pv
12911
                    WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12912
            END IF;
12913
 
12914
            CLOSE releases_cur;
12915
 
12916
            /* LOG ACTION */
12917
            log_action (nparentpvid,
12918
                        'patch_add',
12919
                        nuserid,
12920
                           'Patch version was found and attached: '
12921
                        || snewpatchversion
12922
                       );
12923
         END IF;
12924
      END IF;
12925
 
12926
      /* Create Patch Dependencies */
12927
      opatchdepcollector := in_list_number (spatchidlist);
12928
 
12929
      -- Make sure patch is unofficial before altering its dependencies
12930
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
12931
      THEN
12932
         -- Delete Existing Dependencies
12933
         DELETE FROM package_dependencies dep
12934
               WHERE dep.pv_id = patchpv_id;
12935
 
12936
         -- Insert new dependencies
12937
         INSERT INTO package_dependencies
12938
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
12939
            SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
12940
                   parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
12941
                   'L' AS build_type
12942
              FROM package_versions pv
12943
             WHERE pv.pv_id IN (
12944
                      SELECT *
12945
                        FROM TABLE
12946
                                (CAST
12947
                                    (opatchdepcollector AS relmgr_number_tab_t)
12948
                                ));
12949
      END IF;
12950
 
12951
      -- Return patch_id
12952
      returnpatchid := patchpv_id;
12953
 
12954
      CLOSE parent_cur;
12955
 
12956
      CLOSE patch_cur;
12957
   EXCEPTION
12958
      WHEN DUP_VAL_ON_INDEX
12959
      THEN
12960
         raise_application_error (-20000,
12961
                                     'Patch version '
12962
                                  || snewpatchversion
12963
                                  || ' already exist.'
12964
                                 );
12965
   END;
12966
 
12967
/*-------------------------------------------------------------------------------------------------------*/
12968
   PROCEDURE obsolete_patch (
12969
      patchid            IN   NUMBER,
12970
      isobsolete         IN   CHAR,
12971
      obsoletecomments   IN   VARCHAR2,
12972
      userid             IN   NUMBER
12973
   )
12974
   IS
12975
   BEGIN
12976
      -- Update patch
12977
      UPDATE package_versions pv
12978
         SET pv.is_obsolete = isobsolete,
12979
             pv.obsolete_comments = obsoletecomments
12980
       WHERE pv.pv_id = patchid;
12981
 
12982
      /*
12983
      -- Update patch children
12984
      UPDATE PACKAGE_VERSIONS pv SET
12985
      pv.IS_OBSOLETE = IsObsolete,
12986
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12987
      WHERE pv.PV_ID IN (
12988
                     SELECT DISTINCT dep.DPV_ID
12989
                       FROM PACKAGE_DEPENDENCIES dep
12990
                      WHERE dep.PV_ID = PatchId
12991
                     );
12992
 
12993
 
12994
      -- Update patch parent
12995
      UPDATE PACKAGE_VERSIONS pv SET
12996
      pv.IS_OBSOLETE = IsObsolete,
12997
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12998
      WHERE pv.PV_ID IN (
12999
                     SELECT DISTINCT dep.PV_ID
13000
                       FROM PACKAGE_DEPENDENCIES dep
13001
                      WHERE dep.DPV_ID = PatchId
13002
                     );
13003
 
13004
         */
13005
 
13006
      /* LOG ACTION */
13007
      IF isobsolete IS NOT NULL
13008
      THEN
13009
         log_action (patchid,
13010
                     'patch_obsolete',
13011
                     userid,
13012
                     'Obsolete patch. ' || obsoletecomments
13013
                    );
13014
      ELSE
13015
         log_action (patchid,
13016
                     'patch_obsolete',
13017
                     userid,
13018
                     'Undo patch obsolete.'
13019
                    );
13020
      END IF;
13021
   END;
13022
 
13023
/*-------------------------------------------------------------------------------------------------------*/
13024
   PROCEDURE obsolete_patches (
13025
      spatchidlist       IN   VARCHAR2,
13026
      isobsolete         IN   CHAR,
13027
      obsoletecomments   IN   VARCHAR2,
13028
      userid             IN   NUMBER
13029
   )
13030
   IS
13031
   BEGIN
13032
      /*--------------- Business Rules Here -------------------*/
13033
      IF spatchidlist IS NULL
13034
      THEN
13035
         raise_application_error (-20000,
13036
                                  'Please select one or more Patches.'
13037
                                 );
13038
      END IF;
13039
 
13040
/*-------------------------------------------------------*/
13041
 
13042
      -- Update patch
13043
      UPDATE package_versions pv
13044
         SET pv.is_obsolete = isobsolete,
13045
             pv.obsolete_comments = obsoletecomments
13046
       WHERE pv.pv_id IN (
13047
                SELECT *
13048
                  FROM THE
13049
                          (SELECT CAST
13050
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
13051
                                     )
13052
                             FROM DUAL
13053
                          ));
13054
   /*
13055
   -- Update patch children
13056
   UPDATE PACKAGE_VERSIONS pv SET
13057
   pv.IS_OBSOLETE = IsObsolete,
13058
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13059
   WHERE pv.PV_ID IN (
13060
                  SELECT DISTINCT dep.DPV_ID
13061
                    FROM PACKAGE_DEPENDENCIES dep
13062
                   WHERE dep.PV_ID = PatchId
13063
                  );
13064
 
13065
 
13066
   -- Update patch parent
13067
   UPDATE PACKAGE_VERSIONS pv SET
13068
   pv.IS_OBSOLETE = IsObsolete,
13069
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13070
   WHERE pv.PV_ID IN (
13071
                  SELECT DISTINCT dep.PV_ID
13072
                    FROM PACKAGE_DEPENDENCIES dep
13073
                   WHERE dep.DPV_ID = PatchId
13074
                  );
13075
 
13076
      */
13077
 
13078
   /* LOG ACTION
13079
   IF IsObsolete IS NOT NULL THEN
13080
         Log_Action ( PatchId, 'patch_obsolete', UserId,
13081
                  'Obsolete patch. '|| ObsoleteComments );
13082
   ELSE
13083
      Log_Action ( PatchId, 'patch_obsolete', UserId,
13084
                  'Undo patch obsolete.' );
13085
   END IF;  */
13086
   END;
13087
 
13088
/*-------------------------------------------------------------------------------------------------------*/
13089
   PROCEDURE add_process (
13090
      nprocid         IN   processes.proc_id%TYPE,
13091
      shealthtag      IN   processes.proc_name%TYPE,
13092
      sprocdesc       IN   processes.proc_description%TYPE,
13093
      scmdinterface   IN   processes.run_as%TYPE,
13094
      spkgowner       IN   processes.pkg_owner%TYPE,
13095
      sisinterface    IN   processes.is_interface%TYPE,
13096
      npvid           IN   package_processes.pv_id%TYPE,
13097
      nuserid         IN   NUMBER
13098
   )
13099
   IS
13100
      pkgname   VARCHAR2 (100);
13101
/*Rupesh Release on 17/05/2006*/
13102
   BEGIN
13103
      INSERT INTO processes
13104
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
13105
                   is_interface
13106
                  )
13107
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
13108
                   sisinterface
13109
                  );
13110
 
13111
      pk_package.add_package_process (nprocid, npvid, nuserid);
13112
   END;
13113
 
13114
/*-------------------------------------------------------------------------------------------------------*/
13115
   PROCEDURE add_package_process (
13116
      nprocidlist   IN   VARCHAR2,
13117
      npvid         IN   package_processes.pv_id%TYPE,
13118
      nuserid       IN   NUMBER
13119
   )
13120
   IS
13121
      processname   VARCHAR2 (4000);
13122
 
13123
/*Rupesh Release on 17/05/2006*/
13124
      CURSOR proc_cur
13125
      IS
13126
         SELECT prc.proc_id
13127
           FROM processes prc
13128
          WHERE prc.proc_id IN (
13129
                   SELECT *
13130
                     FROM THE
13131
                             (SELECT CAST
13132
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
13133
                                        )
13134
                                FROM DUAL
13135
                             ));
13136
 
13137
      proc_rec      proc_cur%ROWTYPE;
13138
   BEGIN
13139
      OPEN proc_cur;
13140
 
13141
      FETCH proc_cur
13142
       INTO proc_rec;
13143
 
13144
      WHILE proc_cur%FOUND
13145
      LOOP
13146
         INSERT INTO package_processes
13147
                     (proc_id, pv_id
13148
                     )
13149
              VALUES (proc_rec.proc_id, npvid
13150
                     );
13151
 
13152
         SELECT prc.proc_name
13153
           INTO processname
13154
           FROM processes prc
13155
          WHERE prc.proc_id = proc_rec.proc_id;
13156
 
13157
         -- Log Action --
13158
         log_action (npvid,
13159
                     'process_add',
13160
                     nuserid,
13161
                     'Added process with health tag ' || processname
13162
                    );
13163
 
13164
         FETCH proc_cur
13165
          INTO proc_rec;
13166
      END LOOP;
13167
   END;
13168
 
13169
/*-------------------------------------------------------------------------------------------------------*/
13170
   PROCEDURE remove_process (
13171
      nprocid   IN   package_processes.proc_id%TYPE,
13172
      npvid     IN   package_processes.pv_id%TYPE,
13173
      nuserid   IN   NUMBER
13174
   )
13175
   IS
13176
      processname   VARCHAR2 (4000);
13177
/* Rupesh Release on 17/05/2006*/
13178
   BEGIN
13179
      SELECT prc.proc_name
13180
        INTO processname
13181
        FROM processes prc
13182
       WHERE prc.proc_id = nprocid;
13183
 
13184
      DELETE FROM package_processes
13185
            WHERE proc_id = nprocid AND pv_id = npvid;
13186
 
13187
      -- Log Action --
13188
      log_action (npvid,
13189
                  'process_remove',
13190
                  nuserid,
13191
                  'Removed process with health tag ' || processname
13192
                 );
13193
   END;
13194
/*-------------------------------------------------------------------------------------------------------*/
13195
  /* 
13196
  Author: Rupesh Solanki
13197
  Purpose: To move package versions from one release to another
13198
  Release: 4th September 2006 
13199
 
13200
  */
13201
  PROCEDURE move_package (
13202
   	  npvid  			  IN package_versions.pv_id%TYPE,
13203
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
13204
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
13205
	  nuserid			  IN NUMBER	
13206
  )	
13207
  IS	
13208
 
13209
  oldrtag_name VARCHAR2(4000);
13210
  newrtag_name VARCHAR2(4000);
13211
 
13212
 
13213
 
13214
  BEGIN
13215
 
13216
 
13217
  SELECT rtag_name into oldrtag_name
13218
  FROM RELEASE_TAGS
13219
  WHERE rtag_id = nrtagid;
13220
 
13221
  SELECT rtag_name into newrtag_name
13222
  FROM RELEASE_TAGS
13223
  WHERE rtag_id = nnewrtagid;
13224
 
13225
  /* Table Work In Progress*/
13226
  	   UPDATE WORK_IN_PROGRESS
13227
	   SET RTAG_ID = nnewrtagid
13228
	   WHERE RTAG_ID = nrtagid
13229
	   AND PV_ID = npvid;
13230
 
13231
  /* Table PLANNED*/	
13232
  	   UPDATE PLANNED
13233
	   SET RTAG_ID = nnewrtagid
13234
	   WHERE RTAG_ID = nrtagid
13235
	   AND PV_ID = npvid;   
13236
 
13237
      -- Log Action --
13238
      log_action (npvid,
13239
                  'move_package_version',
13240
                  nuserid,
13241
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
13242
                 );  	   	     
13243
 
13244
 
13245
  END;
13246
 
13247
/*-------------------------------------------------------------------------------------------------------*/
13248
PROCEDURE modify_product_state (
13249
   	  npvid IN package_versions.pv_id%TYPE,
13250
	  nstateid IN product_states.state_id%TYPE,
13251
	  nuserid IN NUMBER
13252
   ) IS
13253
 
13254
   sStateName VARCHAR(4000);
13255
 
13256
  /* 
13257
  Author: Rupesh Solanki
13258
  Purpose: To modify the product state from integration to test to deployment
13259
  Release: 25th January 2006 
13260
  */   
13261
 
13262
  BEGIN
13263
 
13264
  UPDATE PACKAGE_VERSIONS
13265
  SET PRODUCT_STATE = nstateid
13266
  WHERE PV_ID = npvid;
13267
 
13268
 
13269
  SELECT STATE INTO sStateName
13270
  FROM PRODUCT_STATES 
13271
  WHERE STATE_ID = nstateid;
13272
 
13273
  -- Log Action --
13274
  log_action (npvid,
13275
              'modify_product_state',
13276
               nuserid,
13277
               sStateName
13278
              );  
13279
 
13280
 
13281
  END;			  	   	     
13282
/*-------------------------------------------------------------------------------------------------------*/   
13283
END pk_package_Test;
1374 dpurdie 13284
/
13285
--------------------------------------------------------
13286
--  DDL for Package Body PK_ENVIRONMENT_TEST
13287
--------------------------------------------------------
1373 dpurdie 13288
 
13289
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT_TEST" 
13290
IS
13291
/*
13292
------------------------------
13293
||  Last Modified:  Rupesh Solanki
13294
||  Modified Date:  29/Jan/2007
13295
||  Body Version:   1.1
13296
------------------------------
13297
*/
13298
 
13299
   /*-------------------------------------------------------------------------------------------------------*/
13300
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
13301
      RETURN NUMBER
13302
   IS
13303
   BEGIN
13304
       /*
13305
      || N - unlocked
13306
      || Y - release and locked
13307
      || P - penging approval
13308
      || A - approved package ready for auto-build
13309
      */
13310
      IF cdlock = 'N' OR cdlock = 'R'
13311
      THEN
13312
         -- WORK IN PROGRESS --
13313
         RETURN 0;
13314
      ELSIF cdlock = 'P' OR cdlock = 'A'
13315
      THEN
13316
         -- PENDING --
13317
         RETURN 1;
13318
      ELSIF cdlock = 'Y'
13319
      THEN
13320
         -- RELEASED --
13321
         RETURN 2;
13322
      ELSE
13323
         -- NOT FOUND --
13324
         raise_application_error
13325
                         (-20000,
13326
                             'Cannot decide where to place package. [cDlock='
13327
                          || cdlock
13328
                          || ']'
13329
                         );
13330
      END IF;
13331
   END;
13332
 
13333
/*-------------------------------------------------------------------------------------------------------*/
13334
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
13335
      RETURN NUMBER
13336
   IS
13337
      envtab    NUMBER            := -1;
13338
 
13339
      CURSOR curarea
13340
      IS
13341
         SELECT 2 AS envtab
13342
           FROM release_content rc
13343
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13344
         UNION
13345
         SELECT 0 AS envtab
13346
           FROM work_in_progress wip
13347
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13348
         UNION
13349
         SELECT 1 AS envtab
13350
           FROM planned pl
13351
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13352
 
13353
      recarea   curarea%ROWTYPE;
13354
   BEGIN
13355
      OPEN curarea;
13356
 
13357
      FETCH curarea
13358
       INTO recarea;
13359
 
13360
      IF curarea%FOUND
13361
      THEN
13362
         envtab := recarea.envtab;
13363
      END IF;
13364
 
13365
      CLOSE curarea;
13366
 
13367
      RETURN envtab;
13368
   END;
13369
 
13370
/*-------------------------------------------------------------------------------------------------------*/
13371
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
13372
      RETURN NUMBER
13373
   IS
13374
      ispatch   package_versions.dlocked%TYPE;
13375
      viewid    NUMBER                          := -1;
13376
 
13377
      CURSOR curview
13378
      IS
13379
         SELECT rc.base_view_id AS view_id
13380
           FROM release_content rc
13381
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13382
         UNION
13383
         SELECT wip.view_id AS view_id
13384
           FROM work_in_progress wip
13385
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13386
         UNION
13387
         SELECT pl.view_id AS view_id
13388
           FROM planned pl
13389
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13390
 
13391
      recview   curview%ROWTYPE;
13392
   BEGIN
13393
      -- Get dlock state
13394
      SELECT pv.is_patch
13395
        INTO ispatch
13396
        FROM package_versions pv
13397
       WHERE pv.pv_id = pvid;
13398
 
13399
      -- Decide which view id should package go under.
13400
      IF (ispatch != 'Y') OR (ispatch IS NULL)
13401
      THEN
13402
         -- Get VIEW ID of Package
13403
         OPEN curview;
13404
 
13405
         FETCH curview
13406
          INTO recview;
13407
 
13408
         IF curview%FOUND
13409
         THEN
13410
            viewid := recview.view_id;
13411
         ELSE
13412
            raise_application_error
13413
               (-20000,
13414
                   'Cannot find view_id to proceed. [PvId='
13415
                || pvid
13416
                || ']. The current version may not exist in the release anymore.'
13417
               );
13418
         END IF;
13419
 
13420
         CLOSE curview;
13421
      ELSE
13422
         -- Get VIEW ID of Patch (view id of parent package)
13423
         SELECT rc.base_view_id
13424
           INTO viewid
13425
           FROM release_content rc, package_patches ppv
13426
          WHERE rc.rtag_id = rtagid
13427
            AND rc.pv_id = ppv.pv_id
13428
            AND ppv.patch_id = pvid;
13429
      END IF;
13430
 
13431
      RETURN viewid;
13432
   END;
13433
 
13434
/*-------------------------------------------------------------------------------------------------------*/
13435
   PROCEDURE add_package (
13436
      pvid     IN   NUMBER,
13437
      viewid   IN   NUMBER,
13438
      rtagid   IN   NUMBER,
13439
      userid   IN   NUMBER
13440
   )
13441
   IS
13442
      dlocked   package_versions.dlocked%TYPE;
13443
      envtab    NUMBER;
13444
   BEGIN
13445
      IF can_edit_pkg_in_project (pvid, rtagid) = 1
13446
      THEN
13447
         -- Get dlock state
13448
         SELECT pv.dlocked
13449
           INTO dlocked
13450
           FROM package_versions pv
13451
          WHERE pv.pv_id = pvid;
13452
 
13453
         -- Get which area should go under
13454
         envtab := select_environment_area (dlocked);
13455
         -- Log
13456
         log_action (pvid, 'action', userid, 'Start of Package Add...');
13457
 
13458
         -- Remove Package
13459
         IF envtab = 0
13460
         THEN
13461
            -- WORK IN PROGRESS --
13462
            pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
13463
         ELSIF envtab = 1
13464
         THEN
13465
            -- PENDING --
13466
            pk_planned.add_package (pvid, viewid, rtagid, userid);
13467
         ELSIF envtab = 2
13468
         THEN
13469
            -- RELEASED --
13470
            -- NOTE: this package will be replaced with matching package
13471
            pk_release.add_package (pvid, viewid, rtagid, userid);
13472
            -- Now do post Release Actions
13473
            pk_release.run_post_actions (pvid, rtagid);
13474
         END IF;
13475
 
13476
         -- Log
13477
         log_action (pvid, 'action', userid, 'End of Package Add...');
13478
      END IF;
13479
   END;
13480
 
13481
/*-------------------------------------------------------------------------------------------------------*/
13482
   PROCEDURE add_package_bulk (
13483
      pvidlist   IN   VARCHAR2,
13484
      viewid     IN   NUMBER,
13485
      rtagid     IN   NUMBER,
13486
      userid     IN   NUMBER
13487
   )
13488
   IS
13489
      nidcollector   relmgr_number_tab_t            := relmgr_number_tab_t
13490
                                                                          ();
13491
      dlocked        package_versions.dlocked%TYPE;
13492
      pvid           NUMBER;
13493
      envtab         NUMBER;
13494
   BEGIN
13495
      /*--------------- Business Rules Here -------------------*/
13496
      IF (pvidlist IS NULL)
13497
      THEN
13498
         raise_application_error (-20000,
13499
                                  'Please select at least one package.'
13500
                                 );
13501
      END IF;
13502
 
13503
/*-------------------------------------------------------*/
13504
      nidcollector := in_list_number (pvidlist);
13505
 
13506
      FOR i IN 1 .. nidcollector.COUNT
13507
      LOOP
13508
         pvid := nidcollector (i);
13509
         add_package (pvid, viewid, rtagid, userid);
13510
      END LOOP;
13511
   END;
13512
 
13513
/*-------------------------------------------------------------------------------------------------------*/
13514
   PROCEDURE replace_package (
13515
      newpvid   IN   NUMBER,
13516
      oldpvid   IN   NUMBER,
13517
      rtagid    IN   NUMBER,
13518
      userid    IN   NUMBER
13519
   )
13520
   IS
13521
      dlocked        package_versions.dlocked%TYPE;
13522
      viewid         NUMBER;
13523
      envtab         NUMBER;
13524
      ROWCOUNT       NUMBER;
13525
      creleasemode   CHAR (1);
13526
      npkgid         NUMBER;
13527
   BEGIN
13528
      /*--------------- Business Rules Here -------------------*/
13529
      -- Check if oldPvId exists. It could have been removed
13530
      SELECT COUNT (pv.pv_id)
13531
        INTO ROWCOUNT
13532
        FROM package_versions pv
13533
       WHERE pv.pv_id = oldpvid;
13534
 
13535
/*-------------------------------------------------------*/
13536
 
13537
      /* This procedure is usually used by "History" option in Release Manager */
13538
 
13539
      -- Get dlock state
13540
      SELECT pv.dlocked
13541
        INTO dlocked
13542
        FROM package_versions pv
13543
       WHERE pv.pv_id = newpvid;
13544
 
13545
      -- Get VIEW_ID ---
13546
      IF ROWCOUNT = 1
13547
      THEN
13548
         viewid := get_view_location (oldpvid, rtagid);
13549
      ELSE
13550
         -- Set ViewID to default
13551
         viewid := 7;
13552
      END IF;
13553
 
13554
      -- Get which area should go under
13555
      envtab := select_environment_area (dlocked);
13556
      -- Log
13557
      log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
13558
 
13559
      -- Replace package
13560
      IF envtab = 0
13561
      THEN
13562
         -- WORK IN PROGRESS --
13563
 
13564
         -- Delete old package
13565
         pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
13566
         -- Add new package
13567
         pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
13568
      ELSIF envtab = 1
13569
      THEN
13570
         -- PENDING --
13571
 
13572
         -- Delete old package
13573
         pk_planned.remove_package (oldpvid, rtagid, userid);
13574
         -- Add new package
13575
         pk_planned.add_package (newpvid, viewid, rtagid, userid);
13576
      ELSIF envtab = 2
13577
      THEN
13578
         -- RELEASED --
13579
 
13580
         -- Delete old package
13581
         pk_release.remove_package (oldpvid, rtagid, userid);
13582
         -- Add new package
13583
         pk_release.add_package (newpvid, viewid, rtagid, userid);
13584
         -- Now do post Release Actions
13585
         pk_release.run_post_actions (newpvid, rtagid);
13586
      END IF;
13587
 
13588
      -- Log
13589
      log_action (oldpvid, 'action', userid, 'End of Package Replace...');
13590
   END;
13591
 
13592
/*-------------------------------------------------------------------------------------------------------*/
13593
   FUNCTION remove_package (
13594
      pvid          IN   NUMBER,
13595
      rtagid        IN   NUMBER,
13596
      userid        IN   NUMBER,
13597
      forceremove   IN   CHAR
13598
   )
13599
      RETURN NUMBER
13600
   IS
13601
      envtab        NUMBER;
13602
      isused        BOOLEAN;
13603
      recordcount   NUMBER;
13604
   BEGIN
13605
/*--------------- Business Rules Here -------------------*/
13606
/*-------------------------------------------------------*/
13607
 
13608
      -- Find location of package
13609
      envtab := get_package_area (pvid, rtagid);
13610
 
13611
      -- Remove Package
13612
      IF envtab = 0
13613
      THEN
13614
         -- WORK IN PROGRESS --
13615
         -- Delete package
13616
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
13617
         RETURN 0;
13618
      ELSIF envtab = 1
13619
      THEN
13620
         -- PENDING --
13621
         -- Delete package
13622
         pk_planned.remove_package (pvid, rtagid, userid);
13623
         RETURN 0;
13624
      ELSIF envtab = 2
13625
      THEN
13626
         -- RELEASED --
13627
 
13628
         -- Check if is used by other packages
13629
         isused := TRUE;
13630
 
13631
         IF forceremove = 'N'
13632
         THEN
13633
            SELECT COUNT (pv.pv_id)
13634
              INTO recordcount
13635
              FROM (SELECT dpv.pkg_id, dpv.v_ext
13636
                      FROM release_content rc,
13637
                           package_dependencies dep,
13638
                           package_versions dpv
13639
                     WHERE rc.rtag_id = rtagid
13640
                       AND rc.pv_id = dep.pv_id
13641
                       AND dep.dpv_id = dpv.pv_id) rdep,
13642
                   package_versions pv
13643
             WHERE pv.pkg_id = rdep.pkg_id
13644
               AND NVL (pv.v_ext, '|LINK_A_NULL|') =
13645
                                             NVL (rdep.v_ext, '|LINK_A_NULL|')
13646
               AND pv.pv_id = pvid;
13647
 
13648
            IF recordcount > 0
13649
            THEN
13650
               RETURN 1;                    -- Return 1 as package being used
13651
            ELSE
13652
               isused := FALSE;
13653
            END IF;
13654
         END IF;
13655
 
13656
         IF forceremove = 'Y' OR NOT isused
13657
         THEN
13658
            -- Delete old package
13659
            pk_release.remove_package (pvid, rtagid, userid);
13660
            -- Now do post Release Actions
13661
            pk_release.run_post_actions (pvid, rtagid);
13662
            RETURN 0;
13663
         END IF;
13664
      END IF;
13665
   END;
13666
 
13667
/*-------------------------------------------------------------------------------------------------------*/
13668
   PROCEDURE get_environment_items (
13669
      viewtype           IN       NUMBER,
13670
      userid             IN       NUMBER,
13671
      rtagid             IN       NUMBER,
13672
      sviewidshowlist    IN       VARCHAR2,
13673
      ntruerecordcount   OUT      NUMBER,
13674
      recordset          OUT      typecur
13675
   )
13676
   IS
13677
   BEGIN
13678
      -- Get true record count because views can give false count
13679
      SELECT COUNT (pl.pv_id)
13680
        INTO ntruerecordcount
13681
        FROM environment_view pl
13682
       WHERE pl.rtag_id = rtagid;
13683
 
13684
      IF viewtype = 1
13685
      THEN
13686
         /*--- GUEST VIEW ---*/
13687
         OPEN recordset FOR
13688
            SELECT   *
13689
                FROM (
13690
                      /* Base Views collapsed */
13691
                      SELECT DISTINCT vi.view_id, vi.view_name,
13692
                                      TO_NUMBER (NULL) AS pkg_state,
13693
                                      TO_NUMBER (NULL) AS deprecated_state,
13694
                                      TO_NUMBER (NULL) AS pv_id,
13695
                                      NULL AS pkg_name, NULL AS pkg_version,
13696
                                      NULL AS dlocked, NULL AS pv_description
13697
                                 FROM environment_view rel, views vi
13698
                                WHERE rel.view_id = vi.view_id
13699
                                  AND rtag_id = rtagid
13700
                                  AND rel.view_id NOT IN (
13701
                                         SELECT *
13702
                                           FROM THE
13703
                                                   (SELECT CAST
13704
                                                              (in_list_number
13705
                                                                  (sviewidshowlist
13706
                                                                  ) AS relmgr_number_tab_t
13707
                                                              )
13708
                                                      FROM DUAL
13709
                                                   ))
13710
                      UNION
13711
                      /* Base Views expanded */
13712
                      SELECT vi.view_id, vi.view_name,
13713
                             DECODE (rel.pkg_state,
13714
                                     NULL, 0,
13715
                                     rel.pkg_state
13716
                                    ) AS pkg_state,
13717
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13718
                             pv.pkg_version, pv.dlocked, pv.pv_description
13719
                        FROM environment_view rel,
13720
                             PACKAGES pkg,
13721
                             package_versions pv,
13722
                             views vi
13723
                       WHERE pv.pkg_id = pkg.pkg_id
13724
                         AND rel.pv_id = pv.pv_id
13725
                         AND rel.view_id = vi.view_id
13726
                         AND rel.view_id IN (
13727
                                SELECT *
13728
                                  FROM THE
13729
                                          (SELECT CAST
13730
                                                     (in_list_number
13731
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13732
                                                     )
13733
                                             FROM DUAL
13734
                                          ))
13735
                         AND rtag_id = rtagid) ord
13736
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13737
      ELSIF viewtype = 2
13738
      THEN
13739
         /*--- PERSONAL VIEW ---*/
13740
         OPEN recordset FOR
13741
            SELECT   *
13742
                FROM (
13743
                      /* Base Views collapsed */
13744
                      SELECT DISTINCT vi.view_id, vi.view_name,
13745
                                      TO_NUMBER (NULL) AS pkg_state,
13746
                                      TO_NUMBER (NULL) AS deprecated_state,
13747
                                      TO_NUMBER (NULL) AS pv_id,
13748
                                      NULL AS pkg_name, NULL AS pkg_version,
13749
                                      NULL AS dlocked, NULL AS pv_description
13750
                                 FROM environment_view rel,
13751
                                      view_settings vs,
13752
                                      views vi
13753
                                WHERE rel.view_id = vi.view_id
13754
                                  AND vs.view_id = rel.view_id
13755
                                  AND vs.user_id = userid
13756
                                  AND rtag_id = rtagid
13757
                                  AND rel.view_id NOT IN (
13758
                                         SELECT *
13759
                                           FROM THE
13760
                                                   (SELECT CAST
13761
                                                              (in_list_number
13762
                                                                  (sviewidshowlist
13763
                                                                  ) AS relmgr_number_tab_t
13764
                                                              )
13765
                                                      FROM DUAL
13766
                                                   ))
13767
                      UNION
13768
                      /* Base Views expanded */
13769
                      SELECT vi.view_id, vi.view_name,
13770
                             DECODE (rel.pkg_state,
13771
                                     NULL, 0,
13772
                                     rel.pkg_state
13773
                                    ) AS pkg_state,
13774
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13775
                             pv.pkg_version, pv.dlocked, pv.pv_description
13776
                        FROM environment_view rel,
13777
                             PACKAGES pkg,
13778
                             package_versions pv,
13779
                             views vi,
13780
                             view_settings vs
13781
                       WHERE pv.pkg_id = pkg.pkg_id
13782
                         AND rel.pv_id = pv.pv_id
13783
                         AND rel.view_id = vi.view_id
13784
                         AND vs.view_id = vi.view_id
13785
                         AND vs.user_id = userid
13786
                         AND rel.view_id IN (
13787
                                SELECT *
13788
                                  FROM THE
13789
                                          (SELECT CAST
13790
                                                     (in_list_number
13791
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13792
                                                     )
13793
                                             FROM DUAL
13794
                                          ))
13795
                         AND rtag_id = rtagid
13796
                      UNION
13797
                      /* Private Views collapsed */
13798
                      SELECT vi.view_id, vi.view_name,
13799
                             TO_NUMBER (NULL) AS pkg_state,
13800
                             TO_NUMBER (NULL) AS deprecated_state,
13801
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13802
                             NULL AS pkg_version, NULL AS dlocked,
13803
                             NULL AS pv_description
13804
                        FROM view_settings vs,
13805
                             view_def vd,
13806
                             views vi,
13807
                             environment_view rel,
13808
                             package_versions pv
13809
                       WHERE vs.view_id = vi.view_id
13810
                         AND rel.pv_id = pv.pv_id
13811
                         AND vd.pkg_id = pv.pkg_id
13812
                         AND vd.view_id = vi.view_id
13813
                         AND vi.base_view = 'N'
13814
                         AND rel.rtag_id = rtagid
13815
                         AND vs.user_id = userid
13816
                         AND vi.view_id NOT IN (
13817
                                SELECT *
13818
                                  FROM THE
13819
                                          (SELECT CAST
13820
                                                     (in_list_number
13821
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13822
                                                     )
13823
                                             FROM DUAL
13824
                                          ))
13825
                      UNION
13826
                      /* Private Views expanded */
13827
                      SELECT vi.view_id, vi.view_name,
13828
                             DECODE (rel.pkg_state,
13829
                                     NULL, 0,
13830
                                     rel.pkg_state
13831
                                    ) AS pkg_state,
13832
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13833
                             pv.pkg_version, pv.dlocked, pv.pv_description
13834
                        FROM users usr,
13835
                             view_settings vs,
13836
                             view_def vd,
13837
                             views vi,
13838
                             environment_view rel,
13839
                             PACKAGES pkg,
13840
                             package_versions pv
13841
                       WHERE vs.user_id = usr.user_id
13842
                         AND vs.view_id = vi.view_id
13843
                         AND vd.view_id = vi.view_id
13844
                         AND pv.pkg_id = pkg.pkg_id
13845
                         AND rel.pv_id = pv.pv_id
13846
                         AND rel.rtag_id = rtagid
13847
                         AND vd.pkg_id = pkg.pkg_id
13848
                         AND vi.base_view = 'N'
13849
                         AND vi.view_id IN (
13850
                                SELECT *
13851
                                  FROM THE
13852
                                          (SELECT CAST
13853
                                                     (in_list_number
13854
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13855
                                                     )
13856
                                             FROM DUAL
13857
                                          ))
13858
                         AND usr.user_id = userid) ord
13859
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13860
      END IF;
13861
   END;
13862
 
13863
/*-------------------------------------------------------------------------------------------------------*/
13864
   PROCEDURE get_released_items (
13865
      viewtype           IN       NUMBER,
13866
      userid             IN       NUMBER,
13867
      rtagid             IN       NUMBER,
13868
      sviewidshowlist    IN       VARCHAR2,
13869
      ntruerecordcount   OUT      NUMBER,
13870
      recordset          OUT      typecur
13871
   )
13872
   IS
13873
   BEGIN
13874
      -- Get true record count because views can give false count
13875
      SELECT COUNT (rc.pv_id)
13876
        INTO ntruerecordcount
13877
        FROM release_content rc
13878
       WHERE rc.rtag_id = rtagid;
13879
 
13880
      IF viewtype = 1
13881
      THEN
13882
         /*--- GUEST VIEW ---*/
13883
         OPEN recordset FOR
13884
            SELECT   *
13885
                FROM (
13886
                      /* Base Views collapsed */
13887
                      SELECT DISTINCT vi.view_id, vi.view_name,
13888
                                      TO_NUMBER (NULL) AS pkg_state,
13889
                                      TO_NUMBER (NULL) AS deprecated_state,
13890
                                      TO_NUMBER (NULL) AS pv_id,
13891
                                      NULL AS pkg_name, NULL AS pkg_version,
13892
                                      NULL AS dlocked, NULL AS pv_description
13893
                                 FROM release_content rel, views vi
13894
                                WHERE rel.base_view_id = vi.view_id
13895
                                  AND rtag_id = rtagid
13896
                                  AND rel.base_view_id NOT IN (
13897
                                         SELECT *
13898
                                           FROM THE
13899
                                                   (SELECT CAST
13900
                                                              (in_list_number
13901
                                                                  (sviewidshowlist
13902
                                                                  ) AS relmgr_number_tab_t
13903
                                                              )
13904
                                                      FROM DUAL
13905
                                                   ))
13906
                      UNION
13907
                      /* Base Views expanded */
13908
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13909
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13910
                             pv.pkg_version, pv.dlocked, pv.pv_description
13911
                        FROM release_content rel,
13912
                             PACKAGES pkg,
13913
                             package_versions pv,
13914
                             views vi
13915
                       WHERE pv.pkg_id = pkg.pkg_id
13916
                         AND rel.pv_id = pv.pv_id
13917
                         AND rel.base_view_id = vi.view_id
13918
                         AND rel.base_view_id IN (
13919
                                SELECT *
13920
                                  FROM THE
13921
                                          (SELECT CAST
13922
                                                     (in_list_number
13923
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13924
                                                     )
13925
                                             FROM DUAL
13926
                                          ))
13927
                         AND rtag_id = rtagid) ord
13928
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13929
      ELSIF viewtype = 2
13930
      THEN
13931
         /*--- PERSONAL VIEW ---*/
13932
         OPEN recordset FOR
13933
            SELECT   *
13934
                FROM (
13935
                      /* Base Views collapsed */
13936
                      SELECT DISTINCT vi.view_id, vi.view_name,
13937
                                      TO_NUMBER (NULL) AS pkg_state,
13938
                                      TO_NUMBER (NULL) AS deprecated_state,
13939
                                      TO_NUMBER (NULL) AS pv_id,
13940
                                      NULL AS pkg_name, NULL AS pkg_version,
13941
                                      NULL AS dlocked, NULL AS pv_description
13942
                                 FROM release_content rel,
13943
                                      view_settings vs,
13944
                                      views vi
13945
                                WHERE rel.base_view_id = vi.view_id
13946
                                  AND vs.view_id = rel.base_view_id
13947
                                  AND vs.user_id = userid
13948
                                  AND rtag_id = rtagid
13949
                                  AND rel.base_view_id NOT IN (
13950
                                         SELECT *
13951
                                           FROM THE
13952
                                                   (SELECT CAST
13953
                                                              (in_list_number
13954
                                                                  (sviewidshowlist
13955
                                                                  ) AS relmgr_number_tab_t
13956
                                                              )
13957
                                                      FROM DUAL
13958
                                                   ))
13959
                      UNION
13960
                      /* Base Views expanded */
13961
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13962
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13963
                             pv.pkg_version, pv.dlocked, pv.pv_description
13964
                        FROM release_content rel,
13965
                             PACKAGES pkg,
13966
                             package_versions pv,
13967
                             views vi,
13968
                             view_settings vs
13969
                       WHERE pv.pkg_id = pkg.pkg_id
13970
                         AND rel.pv_id = pv.pv_id
13971
                         AND rel.base_view_id = vi.view_id
13972
                         AND vs.view_id = vi.view_id
13973
                         AND vs.user_id = userid
13974
                         AND rel.base_view_id IN (
13975
                                SELECT *
13976
                                  FROM THE
13977
                                          (SELECT CAST
13978
                                                     (in_list_number
13979
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13980
                                                     )
13981
                                             FROM DUAL
13982
                                          ))
13983
                         AND rtag_id = rtagid
13984
                      UNION
13985
                      /* Private Views collapsed */
13986
                      SELECT vi.view_id, vi.view_name,
13987
                             TO_NUMBER (NULL) AS pkg_state,
13988
                             TO_NUMBER (NULL) AS deprecated_state,
13989
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13990
                             NULL AS pkg_version, NULL AS dlocked,
13991
                             NULL AS pv_description
13992
                        FROM view_settings vs,
13993
                             view_def vd,
13994
                             views vi,
13995
                             release_content rel,
13996
                             package_versions pv
13997
                       WHERE vs.view_id = vi.view_id
13998
                         AND rel.pv_id = pv.pv_id
13999
                         AND vd.pkg_id = pv.pkg_id
14000
                         AND vd.view_id = vi.view_id
14001
                         AND vi.base_view = 'N'
14002
                         AND rel.rtag_id = rtagid
14003
                         AND vs.user_id = userid
14004
                         AND vi.view_id NOT IN (
14005
                                SELECT *
14006
                                  FROM THE
14007
                                          (SELECT CAST
14008
                                                     (in_list_number
14009
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14010
                                                     )
14011
                                             FROM DUAL
14012
                                          ))
14013
                      UNION
14014
                      /* Private Views expanded */
14015
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
14016
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14017
                             pv.pkg_version, pv.dlocked, pv.pv_description
14018
                        FROM users usr,
14019
                             view_settings vs,
14020
                             view_def vd,
14021
                             views vi,
14022
                             release_content rel,
14023
                             PACKAGES pkg,
14024
                             package_versions pv
14025
                       WHERE vs.user_id = usr.user_id
14026
                         AND vs.view_id = vi.view_id
14027
                         AND vd.view_id = vi.view_id
14028
                         AND pv.pkg_id = pkg.pkg_id
14029
                         AND rel.pv_id = pv.pv_id
14030
                         AND rel.rtag_id = rtagid
14031
                         AND vd.pkg_id = pkg.pkg_id
14032
                         AND vi.base_view = 'N'
14033
                         AND vi.view_id IN (
14034
                                SELECT *
14035
                                  FROM THE
14036
                                          (SELECT CAST
14037
                                                     (in_list_number
14038
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14039
                                                     )
14040
                                             FROM DUAL
14041
                                          ))
14042
                         AND usr.user_id = userid) ord
14043
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14044
      END IF;
14045
   END;
14046
 
14047
/*-------------------------------------------------------------------------------------------------------*/
14048
   PROCEDURE get_work_in_progress_items (
14049
      viewtype           IN       NUMBER,
14050
      userid             IN       NUMBER,
14051
      rtagid             IN       NUMBER,
14052
      sviewidshowlist    IN       VARCHAR2,
14053
      ntruerecordcount   OUT      NUMBER,
14054
      recordset          OUT      typecur
14055
   )
14056
   IS
14057
   BEGIN
14058
      -- Get true record count because views can give false count
14059
      SELECT COUNT (wip.pv_id)
14060
        INTO ntruerecordcount
14061
        FROM work_in_progress wip
14062
       WHERE wip.rtag_id = rtagid;
14063
 
14064
      IF viewtype = 1
14065
      THEN
14066
         /*--- GUEST VIEW ---*/
14067
         OPEN recordset FOR
14068
            SELECT   *
14069
                FROM (
14070
                      /* Base Views collapsed */
14071
                      SELECT DISTINCT vi.view_id, vi.view_name,
14072
                                      TO_NUMBER (NULL) AS pkg_state,
14073
                                      TO_NUMBER (NULL) AS deprecated_state,
14074
                                      TO_NUMBER (NULL) AS pv_id,
14075
                                      NULL AS pkg_name, NULL AS pkg_version,
14076
                                      NULL AS dlocked, NULL AS pv_description
14077
                                 FROM work_in_progress rel, views vi
14078
                                WHERE rel.view_id = vi.view_id
14079
                                  AND rtag_id = rtagid
14080
                                  AND rel.view_id NOT IN (
14081
                                         SELECT *
14082
                                           FROM THE
14083
                                                   (SELECT CAST
14084
                                                              (in_list_number
14085
                                                                  (sviewidshowlist
14086
                                                                  ) AS relmgr_number_tab_t
14087
                                                              )
14088
                                                      FROM DUAL
14089
                                                   ))
14090
                      UNION
14091
                      /* Base Views expanded */
14092
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14093
 
14094
                             --rel.pkg_state,
14095
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14096
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14097
                             pv.pv_description
14098
                        FROM work_in_progress rel,
14099
                             PACKAGES pkg,
14100
                             package_versions pv,
14101
                             views vi
14102
                       WHERE pv.pkg_id = pkg.pkg_id
14103
                         AND rel.pv_id = pv.pv_id
14104
                         AND rel.view_id = vi.view_id
14105
                         AND rel.view_id IN (
14106
                                SELECT *
14107
                                  FROM THE
14108
                                          (SELECT CAST
14109
                                                     (in_list_number
14110
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14111
                                                     )
14112
                                             FROM DUAL
14113
                                          ))
14114
                         AND rtag_id = rtagid) ord
14115
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14116
      ELSIF viewtype = 2
14117
      THEN
14118
         /*--- PERSONAL VIEW ---*/
14119
         OPEN recordset FOR
14120
            SELECT   *
14121
                FROM (
14122
                      /* Base Views collapsed */
14123
                      SELECT DISTINCT vi.view_id, vi.view_name,
14124
                                      TO_NUMBER (NULL) AS pkg_state,
14125
                                      TO_NUMBER (NULL) AS deprecated_state,
14126
                                      TO_NUMBER (NULL) AS pv_id,
14127
                                      NULL AS pkg_name, NULL AS pkg_version,
14128
                                      NULL AS dlocked, NULL AS pv_description
14129
                                 FROM work_in_progress rel,
14130
                                      view_settings vs,
14131
                                      views vi
14132
                                WHERE rel.view_id = vi.view_id
14133
                                  AND vs.view_id = rel.view_id
14134
                                  AND vs.user_id = userid
14135
                                  AND rtag_id = rtagid
14136
                                  AND rel.view_id NOT IN (
14137
                                         SELECT *
14138
                                           FROM THE
14139
                                                   (SELECT CAST
14140
                                                              (in_list_number
14141
                                                                  (sviewidshowlist
14142
                                                                  ) AS relmgr_number_tab_t
14143
                                                              )
14144
                                                      FROM DUAL
14145
                                                   ))
14146
                      UNION
14147
                      /* Base Views expanded */
14148
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14149
 
14150
                             --rel.pkg_state,
14151
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14152
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14153
                             pv.pv_description
14154
                        FROM work_in_progress rel,
14155
                             PACKAGES pkg,
14156
                             package_versions pv,
14157
                             views vi,
14158
                             view_settings vs
14159
                       WHERE pv.pkg_id = pkg.pkg_id
14160
                         AND rel.pv_id = pv.pv_id
14161
                         AND rel.view_id = vi.view_id
14162
                         AND vs.view_id = vi.view_id
14163
                         AND vs.user_id = userid
14164
                         AND rel.view_id IN (
14165
                                SELECT *
14166
                                  FROM THE
14167
                                          (SELECT CAST
14168
                                                     (in_list_number
14169
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14170
                                                     )
14171
                                             FROM DUAL
14172
                                          ))
14173
                         AND rtag_id = rtagid
14174
                      UNION
14175
                      /* Private Views collapsed */
14176
                      SELECT vi.view_id, vi.view_name,
14177
                             TO_NUMBER (NULL) AS pkg_state,
14178
                             TO_NUMBER (NULL) AS deprecated_state,
14179
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14180
                             NULL AS pkg_version, NULL AS dlocked,
14181
                             NULL AS pv_description
14182
                        FROM view_settings vs,
14183
                             view_def vd,
14184
                             views vi,
14185
                             work_in_progress rel,
14186
                             package_versions pv
14187
                       WHERE vs.view_id = vi.view_id
14188
                         AND rel.pv_id = pv.pv_id
14189
                         AND vd.pkg_id = pv.pkg_id
14190
                         AND vd.view_id = vi.view_id
14191
                         AND vi.base_view = 'N'
14192
                         AND rel.rtag_id = rtagid
14193
                         AND vs.user_id = userid
14194
                         AND vi.view_id NOT IN (
14195
                                SELECT *
14196
                                  FROM THE
14197
                                          (SELECT CAST
14198
                                                     (in_list_number
14199
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14200
                                                     )
14201
                                             FROM DUAL
14202
                                          ))
14203
                      UNION
14204
                      /* Private Views expanded */
14205
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14206
 
14207
                             --rel.pkg_state,
14208
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14209
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14210
                             pv.pv_description
14211
                        FROM users usr,
14212
                             view_settings vs,
14213
                             view_def vd,
14214
                             views vi,
14215
                             work_in_progress rel,
14216
                             PACKAGES pkg,
14217
                             package_versions pv
14218
                       WHERE vs.user_id = usr.user_id
14219
                         AND vs.view_id = vi.view_id
14220
                         AND vd.view_id = vi.view_id
14221
                         AND pv.pkg_id = pkg.pkg_id
14222
                         AND rel.pv_id = pv.pv_id
14223
                         AND rel.rtag_id = rtagid
14224
                         AND vd.pkg_id = pkg.pkg_id
14225
                         AND vi.base_view = 'N'
14226
                         AND vi.view_id IN (
14227
                                SELECT *
14228
                                  FROM THE
14229
                                          (SELECT CAST
14230
                                                     (in_list_number
14231
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14232
                                                     )
14233
                                             FROM DUAL
14234
                                          ))
14235
                         AND usr.user_id = userid) ord
14236
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14237
      END IF;
14238
   END;
14239
 
14240
/*-------------------------------------------------------------------------------------------------------*/
14241
   PROCEDURE get_pending_items (
14242
      viewtype           IN       NUMBER,
14243
      userid             IN       NUMBER,
14244
      rtagid             IN       NUMBER,
14245
      sviewidshowlist    IN       VARCHAR2,
14246
      ntruerecordcount   OUT      NUMBER,
14247
      recordset          OUT      typecur
14248
   )
14249
   IS
14250
   BEGIN
14251
      -- Get true record count because views can give false count
14252
      SELECT COUNT (pl.pv_id)
14253
        INTO ntruerecordcount
14254
        FROM planned pl
14255
       WHERE pl.rtag_id = rtagid;
14256
 
14257
      IF viewtype = 1
14258
      THEN
14259
         /*--- GUEST VIEW ---*/
14260
         OPEN recordset FOR
14261
            SELECT   *
14262
                FROM (
14263
                      /* Base Views collapsed */
14264
                      SELECT DISTINCT vi.view_id, vi.view_name,
14265
                                      TO_NUMBER (NULL) AS pkg_state,
14266
                                      TO_NUMBER (NULL) AS deprecated_state,
14267
                                      TO_NUMBER (NULL) AS pv_id,
14268
                                      NULL AS pkg_name, NULL AS pkg_version,
14269
                                      NULL AS dlocked, NULL AS pv_description
14270
                                 FROM planned rel, views vi
14271
                                WHERE rel.view_id = vi.view_id
14272
                                  AND rtag_id = rtagid
14273
                                  AND rel.view_id NOT IN (
14274
                                         SELECT *
14275
                                           FROM THE
14276
                                                   (SELECT CAST
14277
                                                              (in_list_number
14278
                                                                  (sviewidshowlist
14279
                                                                  ) AS relmgr_number_tab_t
14280
                                                              )
14281
                                                      FROM DUAL
14282
                                                   ))
14283
                      UNION
14284
                      /* Base Views expanded */
14285
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14286
 
14287
                             --rel.pkg_state,
14288
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14289
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14290
                             pv.pv_description
14291
                        FROM planned rel,
14292
                             PACKAGES pkg,
14293
                             package_versions pv,
14294
                             views vi
14295
                       WHERE pv.pkg_id = pkg.pkg_id
14296
                         AND rel.pv_id = pv.pv_id
14297
                         AND rel.view_id = vi.view_id
14298
                         AND rel.view_id IN (
14299
                                SELECT *
14300
                                  FROM THE
14301
                                          (SELECT CAST
14302
                                                     (in_list_number
14303
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14304
                                                     )
14305
                                             FROM DUAL
14306
                                          ))
14307
                         AND rtag_id = rtagid) ord
14308
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14309
      ELSIF viewtype = 2
14310
      THEN
14311
         /*--- PERSONAL VIEW ---*/
14312
         OPEN recordset FOR
14313
            SELECT   *
14314
                FROM (
14315
                      /* Base Views collapsed */
14316
                      SELECT DISTINCT vi.view_id, vi.view_name,
14317
                                      TO_NUMBER (NULL) AS pkg_state,
14318
                                      TO_NUMBER (NULL) AS deprecated_state,
14319
                                      TO_NUMBER (NULL) AS pv_id,
14320
                                      NULL AS pkg_name, NULL AS pkg_version,
14321
                                      NULL AS dlocked, NULL AS pv_description
14322
                                 FROM planned rel, view_settings vs, views vi
14323
                                WHERE rel.view_id = vi.view_id
14324
                                  AND vs.view_id = rel.view_id
14325
                                  AND vs.user_id = userid
14326
                                  AND rtag_id = rtagid
14327
                                  AND rel.view_id NOT IN (
14328
                                         SELECT *
14329
                                           FROM THE
14330
                                                   (SELECT CAST
14331
                                                              (in_list_number
14332
                                                                  (sviewidshowlist
14333
                                                                  ) AS relmgr_number_tab_t
14334
                                                              )
14335
                                                      FROM DUAL
14336
                                                   ))
14337
                      UNION
14338
                      /* Base Views expanded */
14339
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14340
 
14341
                             --rel.pkg_state,
14342
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14343
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14344
                             pv.pv_description
14345
                        FROM planned rel,
14346
                             PACKAGES pkg,
14347
                             package_versions pv,
14348
                             views vi,
14349
                             view_settings vs
14350
                       WHERE pv.pkg_id = pkg.pkg_id
14351
                         AND rel.pv_id = pv.pv_id
14352
                         AND rel.view_id = vi.view_id
14353
                         AND vs.view_id = vi.view_id
14354
                         AND vs.user_id = userid
14355
                         AND rel.view_id IN (
14356
                                SELECT *
14357
                                  FROM THE
14358
                                          (SELECT CAST
14359
                                                     (in_list_number
14360
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14361
                                                     )
14362
                                             FROM DUAL
14363
                                          ))
14364
                         AND rtag_id = rtagid
14365
                      UNION
14366
                      /* Private Views collapsed */
14367
                      SELECT vi.view_id, vi.view_name,
14368
                             TO_NUMBER (NULL) AS pkg_state,
14369
                             TO_NUMBER (NULL) AS deprecated_state,
14370
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14371
                             NULL AS pkg_version, NULL AS dlocked,
14372
                             NULL AS pv_description
14373
                        FROM view_settings vs,
14374
                             view_def vd,
14375
                             views vi,
14376
                             planned rel,
14377
                             package_versions pv
14378
                       WHERE vs.view_id = vi.view_id
14379
                         AND rel.pv_id = pv.pv_id
14380
                         AND vd.pkg_id = pv.pkg_id
14381
                         AND vd.view_id = vi.view_id
14382
                         AND vi.base_view = 'N'
14383
                         AND rel.rtag_id = rtagid
14384
                         AND vs.user_id = userid
14385
                         AND vi.view_id NOT IN (
14386
                                SELECT *
14387
                                  FROM THE
14388
                                          (SELECT CAST
14389
                                                     (in_list_number
14390
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14391
                                                     )
14392
                                             FROM DUAL
14393
                                          ))
14394
                      UNION
14395
                      /* Private Views expanded */
14396
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14397
 
14398
                             --rel.pkg_state,
14399
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14400
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14401
                             pv.pv_description
14402
                        FROM users usr,
14403
                             view_settings vs,
14404
                             view_def vd,
14405
                             views vi,
14406
                             planned rel,
14407
                             PACKAGES pkg,
14408
                             package_versions pv
14409
                       WHERE vs.user_id = usr.user_id
14410
                         AND vs.view_id = vi.view_id
14411
                         AND vd.view_id = vi.view_id
14412
                         AND pv.pkg_id = pkg.pkg_id
14413
                         AND rel.pv_id = pv.pv_id
14414
                         AND rel.rtag_id = rtagid
14415
                         AND vd.pkg_id = pkg.pkg_id
14416
                         AND vi.base_view = 'N'
14417
                         AND vi.view_id IN (
14418
                                SELECT *
14419
                                  FROM THE
14420
                                          (SELECT CAST
14421
                                                     (in_list_number
14422
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14423
                                                     )
14424
                                             FROM DUAL
14425
                                          ))
14426
                         AND usr.user_id = userid) ord
14427
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14428
      END IF;
14429
   END;
14430
 
14431
/*-------------------------------------------------------------------------------------------------------*/
14432
   PROCEDURE get_view_content (
14433
      rtagid      IN       NUMBER,
14434
      viewid      IN       NUMBER,
14435
      recordset   OUT      typecur
14436
   )
14437
   IS
14438
      isbaseview   CHAR (1);
14439
   BEGIN
14440
      -- Check if the view is BASE VIEW
14441
      SELECT vi.base_view
14442
        INTO isbaseview
14443
        FROM views vi
14444
       WHERE vi.view_id = viewid;
14445
 
14446
      IF (isbaseview = 'Y')
14447
      THEN
14448
         -- Get Base view content
14449
         OPEN recordset FOR
14450
            SELECT   DECODE (rel.pkg_state,
14451
                             NULL, 0,
14452
                             rel.pkg_state
14453
                            ) AS pkg_state,
14454
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14455
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14456
                     pv.build_type
14457
                FROM environment_view rel, PACKAGES pkg, package_versions pv
14458
               WHERE pv.pkg_id = pkg.pkg_id
14459
                 AND rel.pv_id = pv.pv_id
14460
                 AND rel.view_id = viewid
14461
                 AND rel.rtag_id = rtagid
14462
            ORDER BY UPPER (pkg.pkg_name);
14463
      ELSE
14464
         -- Get non base view content
14465
         OPEN recordset FOR
14466
            SELECT   DECODE (rel.pkg_state,
14467
                             NULL, 0,
14468
                             rel.pkg_state
14469
                            ) AS pkg_state,
14470
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14471
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14472
                     pv.build_type
14473
                FROM environment_view rel,
14474
                     PACKAGES pkg,
14475
                     package_versions pv,
14476
                     view_def vd
14477
               WHERE pv.pkg_id = pkg.pkg_id
14478
                 AND rel.pv_id = pv.pv_id
14479
                 AND rel.rtag_id = rtagid
14480
                 AND vd.view_id = viewid
14481
                 AND vd.pkg_id = pv.pkg_id
14482
            ORDER BY UPPER (pkg.pkg_name);
14483
      END IF;
14484
   END;
14485
 
14486
/*-------------------------------------------------------------------------------------------------------*/
14487
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
14488
      RETURN NUMBER
14489
   IS
14490
      envtab             NUMBER;
14491
      returnvalue        NUMBER;
14492
      return_not_found   NUMBER := -1;
14493
   BEGIN
14494
      envtab := get_package_area (pvid, rtagid);
14495
 
14496
      IF envtab = 0
14497
      THEN
14498
         -- WORK IN PROGRESS --
14499
         returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
14500
      ELSIF envtab = 1
14501
      THEN
14502
         -- PENDING --
14503
         returnvalue := pk_planned.get_package_view (pvid, rtagid);
14504
      ELSIF envtab = 2
14505
      THEN
14506
         -- RELEASED --
14507
         returnvalue := pk_release.get_package_view (pvid, rtagid);
14508
      ELSE
14509
         -- This may be a Patch not located anywhere but unlocked
14510
         returnvalue := return_not_found;
14511
      END IF;
14512
 
14513
      RETURN returnvalue;
14514
   END;
14515
 
14516
/*-------------------------------------------------------------------------------------------------------*/
14517
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14518
   IS
14519
      viewid          NUMBER;
14520
      envtab          NUMBER;
14521
      ispatch         CHAR (1) := NULL;
14522
      buildtype       CHAR (1) := NULL;
14523
      lastversionid   NUMBER;
14524
   BEGIN
14525
      -- Check if package is patch
14526
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14527
        INTO ispatch, buildtype, lastversionid
14528
        FROM package_versions pv
14529
       WHERE pv.pv_id = pvid;
14530
 
14531
      -- Get ViewId
14532
      viewid := get_package_view (pvid, rtagid);
14533
      -- Remove from current area
14534
      envtab := pk_environment.get_package_area (pvid, rtagid);
14535
 
14536
      -- Make sure that package was in work-in-progress or pending before makeing it release
14537
      -- Exclude patches, ripple builds
14538
      IF (envtab < 0)
14539
      THEN
14540
         -- Not found in work-in-progress or pending
14541
         IF (ispatch IS NULL) AND (buildtype = 'M')
14542
         THEN
14543
            raise_application_error (-20000,
14544
                                     'This package cannot be released here.'
14545
                                    );
14546
         END IF;
14547
      END IF;
14548
 
14549
      -- Log
14550
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14551
 
14552
      IF envtab = 0
14553
      THEN
14554
         -- WORK IN PROGRESS --
14555
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14556
      ELSIF envtab = 1
14557
      THEN
14558
         -- PENDING --
14559
         pk_planned.remove_package (pvid, rtagid, userid);
14560
      END IF;
14561
 
14562
      -- Change package state
14563
      pk_package.change_state (pvid, 'Y', userid);
14564
 
14565
      -- Make sure it is valid BASE VIEW
14566
      IF viewid < 1
14567
      THEN
14568
         viewid := 7;                            -- This is default base view
14569
      END IF;
14570
 
14571
      IF (ispatch IS NULL)
14572
      THEN
14573
         -- Add package to new area
14574
         pk_release.add_package (pvid, viewid, rtagid, userid);
14575
      END IF;
14576
 
14577
      -- Now do post Release Actions
14578
      pk_release.run_post_actions (pvid, rtagid);
14579
 
14580
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14581
      DELETE FROM do_not_ripple
14582
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14583
 
14584
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14585
      DELETE FROM advisory_ripple
14586
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14587
 
14588
      -- Log
14589
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14590
   END;
14591
 
14592
/*-------------------------------------------------------------------------------------------------------*/
14593
   PROCEDURE auto_make_release (
14594
      pvid            IN   NUMBER,
14595
      rtagid          IN   NUMBER,
14596
      userid          IN   NUMBER,
14597
      vext            IN   package_versions.v_ext%TYPE,
14598
      ssv_ext         IN   package_versions.v_ext%TYPE,
14599
      clonefrompvid   IN   NUMBER
14600
   )
14601
   IS
14602
      viewid          NUMBER;
14603
      envtab          NUMBER;
14604
      ispatch         CHAR (1) := NULL;
14605
      buildtype       CHAR (1) := NULL;
14606
      lastversionid   NUMBER;
14607
   BEGIN
14608
      -- Check if package is patch
14609
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14610
        INTO ispatch, buildtype, lastversionid
14611
        FROM package_versions pv
14612
       WHERE pv.pv_id = pvid;
14613
 
14614
      IF vext <> ssv_ext
14615
      THEN
14616
         -- Get ViewId
14617
         viewid := get_package_view (clonefrompvid, rtagid);
14618
         -- Remove from current area
14619
         envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
14620
      ELSE
14621
         -- Get ViewId
14622
         viewid := get_package_view (pvid, rtagid);
14623
         -- Remove from current area
14624
         envtab := pk_environment.get_package_area (pvid, rtagid);
14625
      END IF;
14626
 
14627
      -- Make sure that package was in work-in-progress or pending before makeing it release
14628
      -- Exclude patches, ripple builds
14629
      IF (envtab < 0)
14630
      THEN
14631
         -- Not found in work-in-progress or pending
14632
         IF (ispatch IS NULL) AND (buildtype = 'M')
14633
         THEN
14634
            raise_application_error (-20000,
14635
                                     'This package cannot be released here.'
14636
                                    );
14637
         END IF;
14638
      END IF;
14639
 
14640
      -- Log
14641
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14642
 
14643
      IF vext <> ssv_ext
14644
      THEN
14645
         IF envtab = 0
14646
         THEN
14647
            -- WORK IN PROGRESS --
14648
            pk_work_in_progress.remove_package (clonefrompvid, rtagid,
14649
                                                userid);
14650
         ELSIF envtab = 1
14651
         THEN
14652
            -- PENDING --
14653
            pk_planned.remove_package (clonefrompvid, rtagid, userid);
14654
         ELSIF envtab = 2
14655
         THEN
14656
            -- RELEASED --
14657
            pk_release.remove_package (clonefrompvid, rtagid, userid);
14658
         END IF;
14659
      ELSE
14660
         IF envtab = 0
14661
         THEN
14662
            -- WORK IN PROGRESS --
14663
            pk_work_in_progress.remove_package (pvid, rtagid, userid);
14664
         ELSIF envtab = 1
14665
         THEN
14666
            -- PENDING --
14667
            pk_planned.remove_package (pvid, rtagid, userid);
14668
         END IF;
14669
      END IF;
14670
 
14671
      -- Change package state
14672
      pk_package.change_state (pvid, 'Y', userid);
14673
 
14674
      -- Make sure it is valid BASE VIEW
14675
      IF viewid < 1
14676
      THEN
14677
         viewid := 7;                            -- This is default base view
14678
      END IF;
14679
 
14680
      IF (ispatch IS NULL)
14681
      THEN
14682
         -- Add package to new area
14683
         pk_release.add_package (pvid, viewid, rtagid, userid);
14684
      END IF;
14685
 
14686
      -- Now do post Release Actions
14687
      pk_release.run_post_actions (pvid, rtagid);
14688
      -- Now update the Dash_Board Table
14689
      pk_rmapi.update_dash_board (rtagid);
14690
 
14691
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14692
      DELETE FROM do_not_ripple
14693
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14694
 
14695
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14696
      DELETE FROM advisory_ripple
14697
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14698
 
14699
      -- Log
14700
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14701
   END;
14702
 
14703
/*-------------------------------------------------------------------------------------------------------*/
14704
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14705
   IS
14706
      viewid   NUMBER;
14707
      envtab   NUMBER;
14708
   BEGIN
14709
      -- Get ViewId
14710
      --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
14711
      viewid := get_package_view (pvid, rtagid);
14712
      -- Remove from current area
14713
      envtab := pk_environment.get_package_area (pvid, rtagid);
14714
      -- Log
14715
      log_action (pvid,
14716
                  'action',
14717
                  userid,
14718
                  'Start of Make Package UnRelease...'
14719
                 );
14720
 
14721
      IF envtab = 2
14722
      THEN
14723
         -- RELEASE AREA --
14724
         pk_release.remove_package (pvid, rtagid, userid);
14725
      ELSIF envtab = 1
14726
      THEN
14727
         -- PENDING --
14728
         pk_planned.remove_package (pvid, rtagid, userid);
14729
      END IF;
14730
 
14731
      -- Change package state
14732
      pk_package.change_state (pvid, 'N', userid);
14733
 
14734
      -- Make sure it is valid BASE VIEW
14735
      IF viewid < 1
14736
      THEN
14737
         viewid := 7;                            -- This is default base view
14738
      END IF;
14739
 
14740
      -- Add package to new area
14741
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14742
      -- Now do post Release Actions
14743
      pk_release.run_post_actions (pvid, rtagid);
14744
      -- Log
14745
      log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
14746
   END;
14747
 
14748
/*-------------------------------------------------------------------------------------------------------*/
14749
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14750
   IS
14751
      viewid      NUMBER;
14752
      ispatch     CHAR (1) := NULL;
14753
      buildtype   CHAR (1) := NULL;
14754
   BEGIN
14755
      -- Check if package is patch
14756
      SELECT pv.is_patch, pv.build_type
14757
        INTO ispatch, buildtype
14758
        FROM package_versions pv
14759
       WHERE pv.pv_id = pvid;
14760
 
14761
      -- Get ViewId
14762
      viewid := get_package_view (pvid, rtagid);
14763
      --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
14764
 
14765
      -- Log
14766
      log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
14767
 
14768
      IF (ispatch IS NULL)
14769
      THEN
14770
         -- Remove from current area
14771
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14772
         -- Change package state
14773
         pk_package.change_state (pvid, 'P', userid);
14774
         -- Add package to new area
14775
         pk_planned.add_package (pvid, viewid, rtagid, userid);
14776
      END IF;
14777
 
14778
      -- Log
14779
      log_action (pvid, 'action', userid, 'End of Make Package Pending...');
14780
   END;
14781
 
14782
/*-------------------------------------------------------------------------------------------------------*/
14783
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14784
   IS
14785
   BEGIN
14786
      -- Log
14787
      log_action (pvid,
14788
                  'action',
14789
                  userid,
14790
                  'Start of Package Pending Approval...'
14791
                 );
14792
      -- Change package state
14793
      pk_package.change_state (pvid, 'A', userid);
14794
      -- Log
14795
      log_action (pvid, 'action', userid,
14796
                  'End of Package Pending Approval...');
14797
   END;
14798
 
14799
/*-------------------------------------------------------------------------------------------------------*/
14800
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14801
   IS
14802
      viewid   NUMBER;
14803
   BEGIN
14804
      -- Get ViewId
14805
      viewid := get_package_view (pvid, rtagid);
14806
-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
14807
 
14808
      -- Log
14809
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14810
      -- Remove from current area
14811
      pk_planned.remove_package (pvid, rtagid, userid);
14812
      -- Change package state
14813
      pk_package.change_state (pvid, 'R', userid);
14814
      -- Add package to new area
14815
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14816
      -- Log
14817
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14818
   END;
14819
 
14820
/*-------------------------------------------------------------------------------------------------------*/
14821
   PROCEDURE change_package_view (
14822
      pvid        IN   NUMBER,
14823
      rtagid      IN   NUMBER,
14824
      newviewid   IN   NUMBER
14825
   )
14826
   IS
14827
      envtab   NUMBER;
14828
   BEGIN
14829
      envtab := pk_environment.get_package_area (pvid, rtagid);
14830
 
14831
      IF envtab = 0
14832
      THEN
14833
         -- WORK IN PROGRESS --
14834
         pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
14835
      ELSIF envtab = 1
14836
      THEN
14837
         -- PENDING --
14838
         pk_planned.change_package_view (pvid, rtagid, newviewid);
14839
      ELSIF envtab = 2
14840
      THEN
14841
         -- RELEASED --
14842
         pk_release.change_package_view (pvid, rtagid, newviewid);
14843
      END IF;
14844
   END;
14845
 
14846
/*-------------------------------------------------------------------------------------------------------*/
14847
   PROCEDURE find_package (
14848
      skeyword      IN       VARCHAR2,
14849
      nrtagid       IN       NUMBER,
14850
      nsearcharea   IN       NUMBER,
14851
      recordset     OUT      typecur
14852
   )
14853
   IS
14854
   BEGIN
14855
      IF nsearcharea = 0
14856
      THEN
14857
         /* Search Work In Progress */
14858
         OPEN recordset FOR
14859
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14860
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14861
                     pv.modified_stamp, usr.full_name, usr.user_email
14862
                FROM views vi,
14863
                     work_in_progress rc,
14864
                     PACKAGES pkg,
14865
                     package_versions pv,
14866
                     users usr
14867
               WHERE rc.view_id = vi.view_id
14868
                 AND rc.pv_id = pv.pv_id
14869
                 AND pkg.pkg_id = pv.pkg_id
14870
                 AND pv.modifier_id = usr.user_id
14871
                 AND rc.rtag_id = nrtagid
14872
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14873
            ORDER BY UPPER (pkg.pkg_name);
14874
      ELSIF nsearcharea = 1
14875
      THEN
14876
         /* Search Pending */
14877
         OPEN recordset FOR
14878
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14879
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14880
                     pv.modified_stamp, usr.full_name, usr.user_email
14881
                FROM views vi,
14882
                     planned rc,
14883
                     PACKAGES pkg,
14884
                     package_versions pv,
14885
                     users usr
14886
               WHERE rc.view_id = vi.view_id
14887
                 AND rc.pv_id = pv.pv_id
14888
                 AND pkg.pkg_id = pv.pkg_id
14889
                 AND pv.modifier_id = usr.user_id
14890
                 AND rc.rtag_id = nrtagid
14891
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14892
            ORDER BY UPPER (pkg.pkg_name);
14893
      ELSIF nsearcharea = 2
14894
      THEN
14895
         /* Search Released */
14896
         OPEN recordset FOR
14897
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14898
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14899
                     pv.modified_stamp, usr.full_name, usr.user_email
14900
                FROM views vi,
14901
                     release_content rc,
14902
                     PACKAGES pkg,
14903
                     package_versions pv,
14904
                     users usr
14905
               WHERE rc.base_view_id = vi.view_id
14906
                 AND rc.pv_id = pv.pv_id
14907
                 AND pkg.pkg_id = pv.pkg_id
14908
                 AND pv.modifier_id = usr.user_id
14909
                 AND rc.rtag_id = nrtagid
14910
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14911
            ORDER BY UPPER (pkg.pkg_name);
14912
      ELSIF nsearcharea = 3
14913
      THEN
14914
         /* Search ALL */
14915
         OPEN recordset FOR
14916
            SELECT   rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
14917
                     pv.pv_id, pv.pkg_version, pv.comments,
14918
                     pv.modified_stamp, usr.full_name, usr.user_email
14919
                FROM views vi,
14920
                     environment_view rc,
14921
                     PACKAGES pkg,
14922
                     package_versions pv,
14923
                     users usr
14924
               WHERE rc.view_id = vi.view_id
14925
                 AND rc.pv_id = pv.pv_id
14926
                 AND pkg.pkg_id = pv.pkg_id
14927
                 AND pv.modifier_id = usr.user_id
14928
                 AND rc.rtag_id = nrtagid
14929
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14930
            ORDER BY UPPER (pkg.pkg_name);
14931
      END IF;
14932
   END;
14933
 
14934
/*-------------------------------------------------------------------------------------------------------*/
14935
   PROCEDURE find_file (
14936
      skeyword      IN       VARCHAR2,
14937
      nrtagid       IN       NUMBER,
14938
      nsearcharea   IN       NUMBER,
14939
      npagesize     IN       NUMBER,
14940
      recordset     OUT      typecur
14941
   )
14942
   IS
14943
   BEGIN
14944
      IF nsearcharea = 0
14945
      THEN
14946
         /* Search Work In Progress */
14947
         OPEN recordset FOR
14948
            SELECT   qry.*
14949
                FROM (
14950
                      /* File search on Packages */
14951
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14952
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14953
                        FROM work_in_progress rc,
14954
                             PACKAGES pkg,
14955
                             package_versions pv,
14956
                             release_components art
14957
                       WHERE rc.pv_id = art.pv_id
14958
                         AND pv.pkg_id = pkg.pkg_id
14959
                         AND rc.pv_id = pv.pv_id
14960
                         AND rc.rtag_id = nrtagid
14961
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14962
                      UNION ALL
14963
                      /* File search on Products */
14964
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14965
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14966
                        FROM work_in_progress rc,
14967
                             PACKAGES pkg,
14968
                             package_versions pv,
14969
                             product_components art
14970
                       WHERE rc.pv_id = art.pv_id
14971
                         AND pv.pkg_id = pkg.pkg_id
14972
                         AND rc.pv_id = pv.pv_id
14973
                         AND rc.rtag_id = nrtagid
14974
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
14975
               WHERE ROWNUM <= npagesize
14976
            ORDER BY UPPER (qry.pkg_name);
14977
      ELSIF nsearcharea = 1
14978
      THEN
14979
         /* Search Pending */
14980
         OPEN recordset FOR
14981
            SELECT   qry.*
14982
                FROM (
14983
                      /* File search on Packages */
14984
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14985
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14986
                        FROM planned rc,
14987
                             PACKAGES pkg,
14988
                             package_versions pv,
14989
                             release_components art
14990
                       WHERE rc.pv_id = art.pv_id
14991
                         AND pv.pkg_id = pkg.pkg_id
14992
                         AND rc.pv_id = pv.pv_id
14993
                         AND rc.rtag_id = nrtagid
14994
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14995
                      UNION ALL
14996
                      /* File search on Products */
14997
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14998
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14999
                        FROM planned rc,
15000
                             PACKAGES pkg,
15001
                             package_versions pv,
15002
                             product_components art
15003
                       WHERE rc.pv_id = art.pv_id
15004
                         AND pv.pkg_id = pkg.pkg_id
15005
                         AND rc.pv_id = pv.pv_id
15006
                         AND rc.rtag_id = nrtagid
15007
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15008
               WHERE ROWNUM <= npagesize
15009
            ORDER BY UPPER (qry.pkg_name);
15010
      ELSIF nsearcharea = 2
15011
      THEN
15012
         /* Search Released */
15013
         OPEN recordset FOR
15014
            SELECT   qry.*
15015
                FROM (
15016
                      /* File search on Packages */
15017
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15018
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15019
                             NULL AS patch_id
15020
                        FROM release_content rc,
15021
                             PACKAGES pkg,
15022
                             package_versions pv,
15023
                             release_components art
15024
                       WHERE rc.pv_id = art.pv_id
15025
                         AND pv.pkg_id = pkg.pkg_id
15026
                         AND rc.pv_id = pv.pv_id
15027
                         AND rc.rtag_id = nrtagid
15028
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15029
                      UNION ALL
15030
                      /* File search on Products */
15031
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15032
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15033
                             NULL AS patch_id
15034
                        FROM release_content rc,
15035
                             PACKAGES pkg,
15036
                             package_versions pv,
15037
                             product_components art
15038
                       WHERE rc.pv_id = art.pv_id
15039
                         AND pv.pkg_id = pkg.pkg_id
15040
                         AND rc.pv_id = pv.pv_id
15041
                         AND rc.rtag_id = nrtagid
15042
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15043
                      UNION ALL
15044
                      /* File search on Patches */
15045
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15046
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15047
                             DECODE (art.file_path,
15048
                                     NULL, pp.patch_id,
15049
                                     NULL
15050
                                    ) AS patch_id
15051
                        FROM release_content rc,
15052
                             PACKAGES pkg,
15053
                             package_versions pv,
15054
                             release_components art,
15055
                             package_patches pp
15056
                       WHERE pv.pv_id = pp.pv_id
15057
                         AND pv.pkg_id = pkg.pkg_id
15058
                         AND rc.rtag_id = nrtagid
15059
                         AND art.pv_id = pp.patch_id
15060
                         AND rc.pv_id = pp.pv_id
15061
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15062
               WHERE ROWNUM <= npagesize
15063
            ORDER BY UPPER (qry.pkg_name);
15064
      ELSIF nsearcharea = 3
15065
      THEN
15066
         /* Search ALL */
15067
         OPEN recordset FOR
15068
            SELECT   qry.*
15069
                FROM (
15070
                      /* File search on Packages */
15071
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15072
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15073
                             NULL AS patch_id
15074
                        FROM environment_view rc,
15075
                             PACKAGES pkg,
15076
                             package_versions pv,
15077
                             release_components art
15078
                       WHERE rc.pv_id = art.pv_id
15079
                         AND pv.pkg_id = pkg.pkg_id
15080
                         AND rc.pv_id = pv.pv_id
15081
                         AND rc.rtag_id = nrtagid
15082
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15083
                      UNION ALL
15084
                      /* File search on Products */
15085
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15086
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15087
                             NULL AS patch_id
15088
                        FROM environment_view rc,
15089
                             PACKAGES pkg,
15090
                             package_versions pv,
15091
                             product_components art
15092
                       WHERE rc.pv_id = art.pv_id
15093
                         AND pv.pkg_id = pkg.pkg_id
15094
                         AND rc.pv_id = pv.pv_id
15095
                         AND rc.rtag_id = nrtagid
15096
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15097
                      UNION ALL
15098
                      /* File search on Patches */
15099
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15100
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15101
                             DECODE (art.file_path,
15102
                                     NULL, pp.patch_id,
15103
                                     NULL
15104
                                    ) AS patch_id
15105
                        FROM release_content rc,
15106
                             PACKAGES pkg,
15107
                             package_versions pv,
15108
                             release_components art,
15109
                             package_patches pp
15110
                       WHERE pv.pv_id = pp.pv_id
15111
                         AND pv.pkg_id = pkg.pkg_id
15112
                         AND rc.rtag_id = nrtagid
15113
                         AND art.pv_id = pp.patch_id
15114
                         AND rc.pv_id = pp.pv_id
15115
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15116
               WHERE ROWNUM <= npagesize
15117
            ORDER BY UPPER (qry.pkg_name);
15118
      END IF;
15119
   END;
15120
 
15121
/*-------------------------------------------------------------------------------------------------------*/
15122
   PROCEDURE get_prodrelease_items (
15123
      rtagid             IN       NUMBER,
15124
      ntruerecordcount   OUT      NUMBER,
15125
      recordset          OUT      typecur
15126
   )
15127
   IS
15128
   BEGIN
15129
      -- Get true record count n the number of integration products
15130
      SELECT COUNT (rc.pv_id)
15131
        INTO ntruerecordcount
15132
        FROM release_content rc
15133
       WHERE rc.rtag_id = rtagid;
15134
 
15135
      OPEN recordset FOR
15136
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,    --rel.pkg_state,
15137
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15138
                  pv.pkg_version, pv.dlocked, pv.pv_description
15139
             FROM release_content rel,
15140
                  PACKAGES pkg,
15141
                  package_versions pv,
15142
                  views vi
15143
            WHERE pv.pkg_id = pkg.pkg_id
15144
              AND rel.pv_id = pv.pv_id
15145
              AND rel.base_view_id = vi.view_id
15146
              AND pv.is_deployable = 'Y'
15147
              AND rtag_id = rtagid
15148
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15149
                                              FROM deployment_manager.os_contents)
15150
              AND rel.product_state IS NULL
15151
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15152
   END;
15153
 
15154
/*-------------------------------------------------------------------------------------------------------*/
15155
   PROCEDURE get_integration_items (
15156
      rtagid             IN       NUMBER,
15157
      ntruerecordcount   OUT      NUMBER,
15158
      recordset          OUT      typecur
15159
   )
15160
   IS
15161
   BEGIN
15162
      -- Get true record count n the number of integration products
15163
      SELECT COUNT (rc.pv_id)
15164
        INTO ntruerecordcount
15165
        FROM release_content rc
15166
       WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
15167
 
15168
      OPEN recordset FOR
15169
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15170
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15171
                  pv.pkg_version, pv.dlocked, pv.pv_description
15172
             FROM release_content rel,
15173
                  PACKAGES pkg,
15174
                  package_versions pv,
15175
                  views vi
15176
            WHERE pv.pkg_id = pkg.pkg_id
15177
              AND rel.pv_id = pv.pv_id
15178
              AND rel.base_view_id = vi.view_id
15179
              AND pv.is_deployable = 'Y'
15180
              AND rtag_id = rtagid
15181
              AND rel.product_state IN (1, 5)
15182
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15183
   END;
15184
 
15185
/*-------------------------------------------------------------------------------------------------------*/
15186
   PROCEDURE get_test_items (
15187
      rtagid             IN       NUMBER,
15188
      ntruerecordcount   OUT      NUMBER,
15189
      recordset          OUT      typecur
15190
   )
15191
   IS
15192
   BEGIN
15193
      -- Get true record count n the number of test products
15194
      SELECT COUNT (rc.pv_id)
15195
        INTO ntruerecordcount
15196
        FROM release_content rc
15197
       WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
15198
 
15199
      OPEN recordset FOR
15200
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15201
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15202
                  pv.pkg_version, pv.dlocked, pv.pv_description
15203
             FROM release_content rel,
15204
                  PACKAGES pkg,
15205
                  package_versions pv,
15206
                  views vi
15207
            WHERE pv.pkg_id = pkg.pkg_id
15208
              AND rel.pv_id = pv.pv_id
15209
              AND rel.base_view_id = vi.view_id
15210
              AND pv.is_deployable = 'Y'
15211
              AND rtag_id = rtagid
15212
              AND rel.product_state = 2
15213
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15214
   END;
15215
 
15216
/*-------------------------------------------------------------------------------------------------------*/
15217
   PROCEDURE get_deploy_items (
15218
      rtagid             IN       NUMBER,
15219
      ntruerecordcount   OUT      NUMBER,
15220
      recordset          OUT      typecur
15221
   )
15222
   IS
15223
   BEGIN
15224
      -- Get true record count n the number of deploy products
15225
      SELECT COUNT (rc.pv_id)
15226
        INTO ntruerecordcount
15227
        FROM release_content rc
15228
       WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
15229
 
15230
      OPEN recordset FOR
15231
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15232
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15233
                  pv.pkg_version, pv.dlocked, pv.pv_description
15234
             FROM release_content rel,
15235
                  PACKAGES pkg,
15236
                  package_versions pv,
15237
                  views vi
15238
            WHERE pv.pkg_id = pkg.pkg_id
15239
              AND rel.pv_id = pv.pv_id
15240
              AND rel.base_view_id = vi.view_id
15241
              AND pv.is_deployable = 'Y'
15242
              AND rtag_id = rtagid
15243
              AND rel.product_state IN (3, 5)
15244
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15245
                                              FROM deployment_manager.os_contents)
15246
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15247
   END;
15248
 
15249
/*-------------------------------------------------------------------------------------------------------*/
15250
   PROCEDURE get_reject_items (
15251
      rtagid             IN       NUMBER,
15252
      ntruerecordcount   OUT      NUMBER,
15253
      recordset          OUT      typecur
15254
   )
15255
   IS
15256
   BEGIN
15257
      -- Get true record count n the number of reject products
15258
      SELECT COUNT (rc.pv_id)
15259
        INTO ntruerecordcount
15260
        FROM release_content rc
15261
       WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
15262
 
15263
      OPEN recordset FOR
15264
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15265
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15266
                  pv.pkg_version, pv.dlocked, pv.pv_description
15267
             FROM release_content rel,
15268
                  PACKAGES pkg,
15269
                  package_versions pv,
15270
                  views vi
15271
            WHERE pv.pkg_id = pkg.pkg_id
15272
              AND rel.pv_id = pv.pv_id
15273
              AND rel.base_view_id = vi.view_id
15274
              AND pv.is_deployable = 'Y'
15275
              AND rtag_id = rtagid
15276
              AND rel.product_state = 4
15277
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15278
   END;
15279
/*-------------------------------------------------------------------------------------------------------*/
15280
END pk_environment_test;
1374 dpurdie 15281
/
15282
--------------------------------------------------------
15283
--  DDL for Package Body PK_BUILDAPI_TEST
15284
--------------------------------------------------------
1373 dpurdie 15285
 
15286
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI_TEST" IS
15287
 
15288
/*
15289
------------------------------
15290
||  Last Modified:  S.Vukovic
15291
||  Modified Date:  30/Mar/2005
15292
||  Body Version:   1.0
15293
------------------------------
15294
*/
15295
 
15296
 
15297
/*-------------------------------------------------------------------------------------------------------*/
15298
PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
15299
								  sOsName IN VARCHAR2,
15300
								  sOrigFilePath IN VARCHAR2,
15301
								  sFileName IN VARCHAR2,
15302
								  sDestFilePath IN VARCHAR2,
15303
								  nByteSize IN NUMBER,
15304
								  sCRCcksum IN VARCHAR2 ) IS
15305
 
15306
	nOsId NUMBER;
15307
 
15308
BEGIN
15309
	/*--------------- Business Rules Here -------------------*/
15310
	-- OS Name Requirements --
15311
	IF (sOsName IS NULL) THEN
15312
		RAISE_APPLICATION_ERROR (-20000, 'OsName cannot be NULL.');
15313
	END IF;
15314
 
15315
 
15316
	-- File Requirements --
15317
	IF (NOT sFileName IS NULL) THEN
15318
 
15319
		IF (nByteSize IS NULL) THEN
15320
			RAISE_APPLICATION_ERROR (-20000, 'Byte Size cannot be NULL.');
15321
 
15322
		ELSIF (sCRCcksum IS NULL) THEN
15323
			RAISE_APPLICATION_ERROR (-20000, 'CRC CKSUM cannot be NULL.');
15324
 
15325
		END IF;
15326
 
15327
	END IF;
15328
 
15329
 
15330
	-- Folder Requirements --
15331
	-- No requirements for now.
15332
 
15333
	/*-------------------------------------------------------*/
15334
 
15335
	-- Get OsId
15336
	nOsId := Get_OsId ( sOsName );
15337
 
15338
 
15339
	-- Insert component entry
15340
	INSERT INTO PRODUCT_COMPONENTS ( PV_ID, OS_ID, FILE_PATH, FILE_NAME, DESTINATION_PATH, BYTE_SIZE, CRC_CKSUM )
15341
    VALUES (
15342
			  nPvId,
15343
			  nOsId,
15344
			  sOrigFilePath,
15345
			  sFileName,
15346
			  sDestFilePath,
15347
			  nByteSize,
15348
			  sCRCcksum
15349
			);
15350
 
15351
 
15352
	EXCEPTION
15353
    WHEN DUP_VAL_ON_INDEX
15354
	THEN
15355
		RAISE_APPLICATION_ERROR (-20000, 'Cannot have duplicate product components.');
15356
 
15357
END;
15358
/*-------------------------------------------------------------------------------------------------------*/
15359
PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 ) IS
15360
 
15361
	nOsId NUMBER;
15362
 
15363
BEGIN
15364
	/*--------------- Business Rules Here -------------------*/
15365
	/*-------------------------------------------------------*/
15366
 
15367
	-- Get OsId
15368
	nOsId := Get_OsId ( sOsName );
15369
 
15370
 
15371
	-- Delete component entry
15372
	DELETE
15373
	  FROM PRODUCT_COMPONENTS pc
15374
	 WHERE pc.PV_ID = nPvId
15375
	   AND pc.OS_ID = nOsId;
15376
 
15377
 
15378
END;
15379
/*-------------------------------------------------------------------------------------------------------*/
15380
FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER IS
15381
	Code NUMBER;
15382
 
15383
BEGIN
15384
 
15385
	-- Get Platform Code --
15386
	SELECT pf.CODE INTO Code
15387
	  FROM PLATFORMS pf
15388
	 WHERE UPPER( pf.NAME ) = UPPER( sOsName );
15389
 
15390
 
15391
	RETURN Code;	   
15392
 
15393
	EXCEPTION
15394
    	WHEN NO_DATA_FOUND THEN
15395
       		RAISE_APPLICATION_ERROR (-20000, 'Platform '|| sOsName ||' is not valid. It needs to be added to PLATFORMS table in Release Manager.' );
15396
   	RAISE;
15397
END;
15398
/*-------------------------------------------------------------------------------------------------------*/
15399
PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
15400
			  					 sWebServer IN VARCHAR2,
15401
								 sMailServer IN VARCHAR2,
15402
								 sMailSender IN VARCHAR2) IS
15403
 
15404
BEGIN
15405
 
15406
 
15407
	 UPDATE BUILD_SERVICE_CONFIG
15408
	 SET CONFIG = sDatabaseServer
15409
	 WHERE SERVICE = 'DATABASE SERVER'; 
15410
 
15411
	 UPDATE BUILD_SERVICE_CONFIG
15412
	 SET CONFIG = sWebServer
15413
	 WHERE SERVICE = 'WEB SERVER'; 
15414
 
15415
	 UPDATE BUILD_SERVICE_CONFIG
15416
	 SET CONFIG = sMailServer
15417
	 WHERE SERVICE = 'MAIL SERVER'; 
15418
 
15419
	 UPDATE BUILD_SERVICE_CONFIG
15420
	 SET CONFIG = sMailSender
15421
	 WHERE SERVICE = 'BUILD FAILURE MAIL SENDER'; 	 	 									 
15422
 
15423
 
15424
 
15425
END;
15426
/*-------------------------------------------------------------------------------------------------------*/
15427
PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue in VARCHAR2 ) IS
15428
 
15429
GBE_ID NUMBER;
15430
 
15431
BEGIN
15432
 
15433
	-- Get GBE_ID
15434
	SELECT SEQ_GBE_ID.NEXTVAL INTO GBE_ID FROM DUAL;
15435
 
15436
	INSERT INTO GBE_MACHTYPE (GBE_ID, GBE_VALUE)
15437
	VALUES( GBE_ID, sGBEValue);
15438
 
15439
 
15440
END;
15441
/*-------------------------------------------------------------------------------------------------------*/
15442
PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER ) IS
15443
 
15444
BEGIN
15445
 
15446
	 DELETE FROM GBE_MACHTYPE WHERE GBE_ID = nGBE_ID;
15447
 
15448
END;
15449
/*-------------------------------------------------------------------------------------------------------*/
15450
PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 ) IS
15451
 
15452
BEGIN
15453
 
15454
	 UPDATE GBE_MACHTYPE
15455
	 SET GBE_VALUE = sGBEValue 
15456
	 WHERE GBE_ID = nGBE_ID;
15457
 
15458
 
15459
END;
15460
/*-------------------------------------------------------------------------------------------------------*/
15461
PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER ) IS
15462
 
15463
nRecordNumber NUMBER;
15464
nRconId NUMBER;
15465
BEGIN
15466
	-- Get RCON_ID
15467
	SELECT SEQ_RCON_ID.NEXTVAL INTO nRconId FROM DUAL; 
15468
 
15469
        SELECT count(*) INTO nRecordNumber 
15470
        FROM RELEASE_CONFIG
15471
        WHERE RTAG_ID = nRtagId;
15472
 
15473
        IF nRecordNumber = 0 THEN
15474
       	   INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15475
           VALUES (nRconId, nRtagId, sDaemonHostname, 'M', nGbeId);
15476
        ELSE
15477
        	INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15478
        	VALUES (nRconId, nRtagId, sDaemonHostname, 'S', nGbeId);
15479
        END IF;
15480
 
15481
 
15482
 
15483
END;
15484
/*-------------------------------------------------------------------------------------------------------*/        
15485
END PK_BUILDAPI_TEST;
1374 dpurdie 15486
/
15487
--------------------------------------------------------
15488
--  DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO
15489
--------------------------------------------------------
1373 dpurdie 15490
 
15491
  CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (
15492
   nprojid     IN   NUMBER,
15493
   nviewid     IN   NUMBER,
15494
   suserlist   IN   VARCHAR2
15495
)
15496
IS
15497
   groupid   NUMBER;
15498
/******************************************************************************
15499
   NAME:       ADD_AUTOBUILD_FAILURE
15500
   PURPOSE:
15501
 
15502
   REVISIONS:
15503
   Ver        Date        Author           Description
15504
   ---------  ----------  ---------------  ------------------------------------
15505
   1.0        11/04/2006   Rupesh Solanki Created this procedure.
15506
 
15507
   NOTES:
15508
 
15509
   Automatically available Auto Replace Keywords:
15510
      Object Name:     ADD_AUTOBUILD_FAILURE
15511
      Sysdate:         11/04/2006
15512
      Date and Time:   11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AM
15513
      Username:         (set in TOAD Options, Procedure Editor)
15514
      Table Name:       (set in the "New PL/SQL Object" dialog)
15515
 
15516
******************************************************************************/
15517
BEGIN
15518
   BEGIN
15519
      SELECT group_email_id
15520
        INTO groupid
15521
        FROM autobuild_failure
15522
       WHERE proj_id = nprojid AND view_id = nviewid;
15523
   EXCEPTION
15524
      WHEN NO_DATA_FOUND
15525
      THEN
15526
         --  Create Next Sequence Id ---
15527
         SELECT seq_group_email_id.NEXTVAL
15528
           INTO groupid
15529
           FROM DUAL;
15530
 
15531
         INSERT INTO autobuild_failure
15532
                     (group_email_id, proj_id, view_id
15533
                     )
15534
              VALUES (groupid, nprojid, nviewid
15535
                     );
15536
   END;
15537
 
15538
   add_view_members (groupid, suserlist);
15539
END add_autobuild_failure_info;
1374 dpurdie 15540
/
15541
--------------------------------------------------------
15542
--  DDL for Procedure DEPRECATE_PACKAGE
15543
--------------------------------------------------------
1373 dpurdie 15544
 
15545
  CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
15546
	   	  		  							   nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
15547
	   	  		  							   nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
15548
											   sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,
15549
											   nUserId IN NUMBER) IS
15550
ext VARCHAR2(50);
15551
 
15552
 
15553
 
15554
 
15555
BEGIN
15556
 
15557
	--Extract the package version extension
15558
	SELECT V_EXT into ext
15559
	FROM PACKAGE_VERSIONS
15560
	WHERE PV_ID = nPvId; 
15561
 
15562
    -- Deprecate Package
15563
    INSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)
15564
	VALUES (nRtagId, nPkgId, sComments, ext);
15565
 
15566
	IF ext IS NOT NULL THEN
15567
	   UPDATE RELEASE_CONTENT 
15568
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15569
	   WHERE RTAG_ID = nRtagId
15570
	   AND PV_ID IN (SELECT PV.PV_ID 
15571
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15572
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15573
				  	AND PV.V_EXT = ext
15574
				  	AND PKG.PKG_ID = nPkgId
15575
				 	);						
15576
	ELSE
15577
	   UPDATE RELEASE_CONTENT 
15578
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15579
	   WHERE RTAG_ID = nRtagId
15580
	   AND PV_ID IN (SELECT PV.PV_ID 
15581
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15582
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15583
				  	AND PV.V_EXT IS NULL
15584
				  	AND PKG.PKG_ID = nPkgId
15585
				 	);
15586
	END IF;
15587
 
15588
	UPDATE RELEASE_CONTENT
15589
	SET PKG_ID = nPkgId, DEPRECATED_STATE = 7
15590
	WHERE RTAG_ID = nRtagId
15591
	AND PV_ID IN (		   SELECT DISTINCT
15592
 	 		  	 		   qry.PV_ID
15593
						        FROM (
15594
								 	  SELECT dep.*,
15595
									  LEVEL AS LEVEL_NUM
15596
									  FROM PACKAGE_DEPENDENCIES dep 
15597
 								START WITH dep.DPV_ID IN ( nPvId ) 
15598
								CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
15599
 								) qry,
15600
								PACKAGES pkg,
15601
								PACKAGE_VERSIONS pv,
15602
								RELEASE_CONTENT rc
15603
						 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
15604
							 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
15605
							 AND rc.DEPRECATED_STATE IS NULL
15606
				 );			 
15607
 
15608
    /* LOG ACTION */
15609
   	/*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/
15610
 
15611
 
15612
END Deprecate_Package;
1374 dpurdie 15613
/
15614
--------------------------------------------------------
15615
--  DDL for Procedure LOG_PROJECT_ACTION
15616
--------------------------------------------------------
1373 dpurdie 15617
 
15618
  CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,
15619
												 enumActionTypeName IN VARCHAR2,
15620
		                                         nUserId IN NUMBER,
15621
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL,
15622
												 nRtagId IN NUMBER  ) IS
15623
/* ---------------------------------------------------------------------------
15624
    Version: 3.0
15625
   --------------------------------------------------------------------------- */
15626
 
15627
    ActionTypeId NUMBER;
15628
 
15629
BEGIN
15630
 
15631
    -- Get Action Type FK
15632
    SELECT act.ACTTYPE_ID INTO ActionTypeId
15633
      FROM ACTION_TYPE act
15634
     WHERE act.NAME = enumActionTypeName;
15635
 
15636
 
15637
    INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)
15638
    VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);
15639
 
15640
 
15641
END Log_Project_Action;
1374 dpurdie 15642
/
15643
--------------------------------------------------------
15644
--  DDL for Procedure RIPPLE_PACKAGE
15645
--------------------------------------------------------
1373 dpurdie 15646
 
15647
  CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (
15648
        sPvIdList IN VARCHAR2,
15649
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
15650
        nUserId IN NUMBER
15651
    ) IS
15652
/* ---------------------------------------------------------------------------
15653
    Version: 4.1
15654
   --------------------------------------------------------------------------- */
15655
 
15656
BEGIN
15657
 
15658
    IF (sPvIdList IS NULL) THEN
15659
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
15660
    END IF;
15661
 
15662
    -- Ripple Package
15663
    DELETE FROM DO_NOT_RIPPLE
15664
    WHERE RTAG_ID = nRtagId
15665
    AND PV_ID IN (
15666
        SELECT *
15667
        FROM THE (
15668
            SELECT CAST( IN_LIST_NUMBER( sPvIdList )
15669
            AS RELMGR_NUMBER_TAB_t )
15670
            FROM DUAL
15671
        )
15672
    );
15673
 
15674
    /* LOG ACTION */
15675
    Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );
15676
 
15677
END Ripple_Package;
1374 dpurdie 15678
/
15679
--------------------------------------------------------
15680
--  DDL for Procedure DT_SETPROPERTYBYID
15681
--------------------------------------------------------
1373 dpurdie 15682
 
15683
  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 15684
/
15685
--------------------------------------------------------
15686
--  DDL for Procedure BASIC_CLONE
15687
--------------------------------------------------------
1373 dpurdie 15688
 
15689
  CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,
15690
                        nTOpv_id IN NUMBER,
15691
                        nRtag_id IN NUMBER,
15692
                        nUser_id IN NUMBER,
15693
                        nTOpkg_id IN NUMBER DEFAULT NULL,
15694
                        enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) IS
15695
 
15696
   FromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
15697
   major NUMBER;
15698
   minor NUMBER;
15699
   patch NUMBER;
15700
   buildn NUMBER;
15701
   from_vcs_type_id NUMBER;
15702
BEGIN
15703
------------------------------ Version Control System ------------------------------------------
15704
   SELECT vcs_type_id
15705
      INTO from_vcs_type_id
15706
      FROM package_versions WHERE pv_id = nFROMpv_id;
15707
 
15708
   UPDATE package_versions
15709
      SET vcs_type_id = from_vcs_type_id
15710
      WHERE pv_id = nTOpv_id;
15711
------------------------------------- Limits ---------------------------------------------------
15712
   select major_limit, minor_limit, patch_limit, build_number_limit
15713
   into major, minor, patch, buildn
15714
   from package_versions where pv_id=nFROMpv_id;
15715
    UPDATE package_versions SET
15716
           major_limit = major,
15717
           minor_limit = minor,
15718
           patch_limit = patch,
15719
           build_number_limit = buildn
15720
     WHERE PV_ID = nTOpv_id;
15721
------------------------------------- Clone Dependencies ---------------------------------------------------
15722
   IF NOT nRtag_id IS NULL
15723
   THEN
15724
      -- Auto Update Dependencies --
15725
      INSERT INTO PACKAGE_DEPENDENCIES
15726
           SELECT nTOpv_id AS pv_id,
15727
                  DECODE(nUser_id,
15728
                         frc.modifier_id,
15729
                         frc.pv_id,
15730
                         DECODE(frc.dlocked,
15731
                                'Y',
15732
                                frc.pv_id,
15733
                                dep.dpv_id)
15734
                         ) AS dpv_id,
15735
                  nTOpkg_id AS pkg_id,
15736
                  dep.dpkg_id,
15737
                  dep.build_type,
15738
                  dep.display_order
15739
             FROM PACKAGE_DEPENDENCIES dep,
15740
                  PACKAGE_VERSIONS pv,
15741
                  (
15742
                  /* Full Release Contents used for reference*/
15743
                  SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlocked
15744
                  FROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpv
15745
                  WHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id
15746
                  ) frc
15747
            WHERE dep.pv_id = nFROMpv_id
15748
              AND dep.dpv_id = pv.pv_id
15749
              AND pv.pkg_id = frc.pkg_id(+)
15750
              AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);
15751
   ELSE
15752
      -- Clone Dependencies --
15753
      INSERT INTO PACKAGE_DEPENDENCIES
15754
           SELECT nTOpv_id         AS pv_id,
15755
                  dep.dpv_id,
15756
                  nTOpkg_id        AS pkg_id,
15757
                  dep.dpkg_id,
15758
                  dep.build_type,
15759
                  dep.display_order
15760
             FROM PACKAGE_DEPENDENCIES dep
15761
            WHERE dep.pv_id = nFROMpv_id;
15762
 
15763
   END IF;
15764
 
15765
----------------------------------------- Clone Issues -------------------------------------------------------
15766
   IF enumISSUES_STATE_IMPORTED IS NULL
15767
   THEN
15768
        /* All Issues */
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
   ELSE
15774
       /* Outstanding Issues Only */
15775
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15776
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15777
              FROM CQ_ISSUES
15778
             WHERE pv_id = nFROMpv_id
15779
               AND iss_state = enumISSUES_STATE_IMPORTED;
15780
   END IF;
15781
 
15782
------------------------------------ Clone Runtime Dependencies -----------------------------------------------
15783
   INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)
15784
       SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user
15785
       FROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;
15786
 
15787
--------------------------------------- Clone Additional Notes ------------------------------------------------
15788
   INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )
15789
        SELECT an.NOTE_ID,
15790
               nTOpv_id AS PV_ID,
15791
               an.NOTE_TITLE,
15792
               an.NOTE_BODY,
15793
               an.MOD_DATE,
15794
               an.MOD_USER
15795
          FROM ADDITIONAL_NOTES an
15796
         WHERE an.PV_ID = nFROMpv_id;
15797
 
15798
-------------------------------------------- Clone Unit Tests -------------------------------------------------
15799
   -- Clone only Automatic unit tests --
15800
   INSERT INTO UNIT_TESTS (
15801
                           TEST_ID,
15802
                           PV_ID,
15803
                           TEST_TYPES_FK,
15804
                           TEST_SUMMARY,
15805
                           COMPLETION_DATE,
15806
                           COMPLETED_BY,
15807
                           RESULTS_URL,
15808
                           RESULTS_ATTACHMENT_NAME,
15809
                           NUMOF_TEST
15810
                          )
15811
        SELECT ut.TEST_ID,
15812
               nTOpv_id AS PV_ID,
15813
               ut.TEST_TYPES_FK,
15814
               ut.TEST_SUMMARY,
15815
               Ora_Sysdate AS COMPLETION_DATE,
15816
               nUser_id AS COMPLETED_BY,
15817
               ut.RESULTS_URL,
15818
               ut.RESULTS_ATTACHMENT_NAME,
15819
               ut.NUMOF_TEST
15820
          FROM UNIT_TESTS ut
15821
         WHERE ut.PV_ID = nFROMpv_id
15822
           AND ut.TEST_TYPES_FK IN ( 5, 7 );
15823
 
15824
    -- Clone only Interactive Unit Tests --
15825
    INSERT INTO UNIT_TESTS (
15826
                            TEST_ID,
15827
                            PV_ID,
15828
                            TEST_TYPES_FK,
15829
                            TEST_SUMMARY
15830
                           )
15831
       SELECT ut.TEST_ID,
15832
              nTOpv_id AS PV_ID,
15833
              ut.TEST_TYPES_FK,
15834
              ut.TEST_SUMMARY
15835
         FROM UNIT_TESTS ut
15836
        WHERE ut.PV_ID = nFROMpv_id
15837
          AND ut.TEST_TYPES_FK IN (6);
15838
 
15839
-------------------------------------------- Clone Package Documents ------------------------------------------
15840
   INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )
15841
        SELECT nTOpv_id AS PV_ID,
15842
               pd.test_id,
15843
               pd.doc_num,
15844
               pd.doc_id,
15845
               pd.IS_LATEST
15846
          FROM PACKAGE_DOCUMENTS pd
15847
         WHERE pd.PV_ID = nFROMpv_id;
15848
 
15849
-------------------------------------------- Clone Build Environments -----------------------------------------
15850
    INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )
15851
    SELECT nTOpv_id AS PV_ID,
15852
           pkgbe.BE_ID,
15853
           pkgbe.BUILD_TYPE
15854
      FROM PACKAGE_BUILD_ENV pkgbe
15855
     WHERE pkgbe.PV_ID = nFROMpv_id;
15856
---------------------------------------------Clone Package Build Info------------------------------------------
15857
    INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)
15858
    SELECT nTOpv_id AS PV_ID,
15859
           pkgbinfo.BM_ID,
15860
           pkgbinfo.BSA_ID
15861
      FROM PACKAGE_BUILD_INFO pkgbinfo
15862
     WHERE pkgbinfo.PV_ID = nFROMpv_id;
15863
---------------------------------------------Clone Package Version Processes-----------------------------------
15864
    INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )
15865
    SELECT nTOpv_id AS PV_ID,
15866
           pp.PROC_ID
15867
      FROM PACKAGE_PROCESSES pp
15868
     WHERE pp.PV_ID = nFROMpv_id;
15869
---------------------------------------------Clone Licencing Associations-----------------------------------
15870
    PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);
15871
---------------------------------------------------------------------------------------------------------------
15872
 
15873
    /* LOG ACTION */
15874
    SELECT pv.PKG_VERSION INTO FromVersion
15875
      FROM PACKAGE_VERSIONS pv
15876
     WHERE pv.PV_ID = nFROMpv_id;
15877
 
15878
    Log_Action ( nTOpv_id, 'clone_from', nUser_id,
15879
                 'Details cloned from: '|| FromVersion );
15880
 
15881
---------------------------------------------------------------------------------------------------------------
15882
 
15883
END Basic_Clone;
1374 dpurdie 15884
/
15885
--------------------------------------------------------
15886
--  DDL for Procedure UPDATE_UNIT_TEST
15887
--------------------------------------------------------
1373 dpurdie 15888
 
15889
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,
15890
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
15891
											   nPv_id IN NUMBER,
15892
											   nUserId IN NUMBER,
15893
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
15894
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
15895
	                                           sCompletion_date IN VARCHAR2,
15896
											   sDpkg_path IN VARCHAR2,
15897
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
15898
											   sResults IN VARCHAR2,
15899
											   outFileName OUT VARCHAR2
15900
                                              ) IS
15901
/* ---------------------------------------------------------------------------
15902
    Version: 3.1.0
15903
   --------------------------------------------------------------------------- */
15904
 
15905
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
15906
 
15907
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
15908
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
15909
 
15910
 
15911
BEGIN
15912
 
15913
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
15914
       	ResultsURL := sResults;
15915
       ELSE
15916
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
15917
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
15918
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
15919
           END IF;
15920
       END IF;
15921
 
15922
	--- Update Unit Test ---
15923
    UPDATE UNIT_TESTS SET
15924
           TEST_SUMMARY = sTest_summary,
15925
		   NUMOF_TEST = sNumof_test,
15926
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
15927
		   COMPLETED_BY = nUserId,
15928
		   RESULTS_URL = ResultsURL,
15929
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
15930
     WHERE TEST_ID = nTest_id
15931
       AND PV_ID = nPv_id;
15932
 
15933
END Update_Unit_Test;
1374 dpurdie 15934
/
15935
--------------------------------------------------------
15936
--  DDL for Procedure SET_TO_AUTOBUILDABLE
15937
--------------------------------------------------------
1373 dpurdie 15938
 
15939
  CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (
15940
   nrtagid     IN   NUMBER,
15941
   spvidlist   IN   VARCHAR2
15942
)
15943
IS
15944
/******************************************************************************
15945
   NAME:       SET_TO_AUTOBUILDABLE
15946
   PURPOSE:
15947
 
15948
   REVISIONS:
15949
   Ver        Date        Author           Description
15950
   ---------  ----------  ---------------  ------------------------------------
15951
   1.0        15/12/2006   Rupesh Solanki       1. Created this procedure.
15952
 
15953
   NOTES:
15954
 
15955
   Automatically available Auto Replace Keywords:
15956
      Object Name:     SET_TO_AUTOBUILDABLE
15957
      Sysdate:         15/12/2006
15958
      Date and Time:   15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AM
15959
      Username:         (set in TOAD Options, Procedure Editor)
15960
      Table Name:       (set in the "New PL/SQL Object" dialog)
15961
 
15962
******************************************************************************/
15963
   npvidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
15964
   PvId NUMBER;
15965
BEGIN
15966
 
15967
   npvidcollector := in_list_number2 (spvidlist);
15968
 
15969
   UPDATE package_versions
15970
      SET is_autobuildable = 'N'
15971
    WHERE pv_id IN (SELECT pv_id
15972
                      FROM release_content
15973
                     WHERE rtag_id = nrtagid);
15974
 
15975
 
15976
 
15977
   	FOR i IN 1..npvidcollector.COUNT
15978
	LOOP
15979
		PvId := npvidcollector(i);
15980
 
15981
		UPDATE package_versions
15982
		set is_autobuildable = 'Y'
15983
		where pv_id = PvId;
15984
 
15985
	END LOOP;
15986
 
15987
 
15988
END set_to_autobuildable;
1374 dpurdie 15989
/
15990
--------------------------------------------------------
15991
--  DDL for Procedure LEVEL_N_CONFLICTS
15992
--------------------------------------------------------
1373 dpurdie 15993
 
15994
  CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (
15995
   nnrtag_id       IN       NUMBER,
15996
   nnsession_num   IN       NUMBER,
15997
   nnrowcnt        OUT      NUMBER,
15998
   nniteration     IN       NUMBER
15999
)
16000
IS
16001
/* ---------------------------------------------------------------------------
16002
    Version: 3.0.1
16003
   --------------------------------------------------------------------------- */
16004
   previteration   NUMBER := nniteration - 1;
16005
BEGIN
16006
   /* ---------  LEVEL 1 CONFILCTS -----------
16007
   || Following states are used:
16008
   || 0 -> NOT FOUND
16009
   || 1 -> MAJOR
16010
   || 2 -> MINOR MINOR
16011
   */
16012
   INSERT INTO temp_env_states
16013
      SELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,
16014
                      pv.pv_id, pv.pkg_id, pv.v_ext,
16015
                      DECODE (tes.tes_state, 2, 2, 1) AS MESSAGE
16016
                 FROM package_dependencies dep,
16017
                      package_versions dpv,
16018
                      package_versions pv,
16019
                      release_content rel,
16020
                      temp_env_states tes
16021
                WHERE rel.pv_id = dep.pv_id
16022
                  AND rel.rtag_id = nnrtag_id
16023
                  AND dep.pv_id = pv.pv_id
16024
                  AND dep.dpv_id = dpv.pv_id
16025
                  AND dpv.pkg_id = tes.pkg_id
16026
                  AND NVL (dpv.v_ext, '|LINK_A_NULL|') =
16027
                                              NVL (tes.v_ext, '|LINK_A_NULL|')
16028
                  AND tes.session_num = nnsession_num
16029
                  AND tes.level_num = previteration
16030
                  AND (dep.pv_id, dep.dpv_id) IN 
16031
                                                   /* Remove packages listed in IGNORE_WARNINGS table and
16032
                                                 || packages already stored in Temp Table.
16033
                                                 */
16034
                      (
16035
                         SELECT pd.pv_id, pd.dpv_id
16036
                           FROM package_dependencies pd, release_content rc
16037
                          WHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id
16038
                         --AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )
16039
                         MINUS
16040
                         SELECT igw.pv_id, igw.dpv_id
16041
                           FROM ignore_warnings igw
16042
                          WHERE igw.rtag_id = nnrtag_id);
16043
 
16044
   nnrowcnt := SQL%ROWCOUNT;
16045
END level_n_conflicts;
1374 dpurdie 16046
/
16047
--------------------------------------------------------
16048
--  DDL for Procedure REMOVE_COMPONENTS
16049
--------------------------------------------------------
1373 dpurdie 16050
 
16051
  CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS
16052
/* ---------------------------------------------------------------------------
16053
    Version: 3.0.0
16054
   --------------------------------------------------------------------------- */
16055
 
16056
 
16057
BEGIN
16058
 
16059
	 --- Delete From RELEASE_COMPONENTS
16060
	 DELETE FROM RELEASE_COMPONENTS
16061
	 WHERE PV_ID = nPvId;
16062
 
16063
END Remove_Components;
1374 dpurdie 16064
/
16065
--------------------------------------------------------
16066
--  DDL for Procedure ADD_COMPONENT
16067
--------------------------------------------------------
1373 dpurdie 16068
 
16069
  CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,
16070
	   	  		  						  	sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,
16071
											sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,
16072
											nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,
16073
											sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,
16074
											sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL
16075
                                           ) IS
16076
/* ---------------------------------------------------------------------------
16077
    Version: 3.0.0
16078
   --------------------------------------------------------------------------- */
16079
 
16080
 
16081
BEGIN
16082
 
16083
	 --- Insert into RELEASE_COMPONENTS
16084
	 INSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )
16085
	 VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc  );
16086
 
16087
 
16088
 
16089
 
16090
END Add_Component;
1374 dpurdie 16091
/
16092
--------------------------------------------------------
16093
--  DDL for Procedure ADD_PACKAGE_INTEREST
16094
--------------------------------------------------------
1373 dpurdie 16095
 
16096
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
16097
	   	  		  								  nPkgIdList IN VARCHAR2,
16098
												  nUserId IN NUMBER
16099
	   	  		  								  ) IS
16100
 
16101
/******************************************************************************
16102
   NAME:       ADD_PACKAGE_INTEREST
16103
   PURPOSE:    
16104
 
16105
   REVISIONS:
16106
   Ver        Date        Author           Description
16107
   ---------  ----------  ---------------  ------------------------------------
16108
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
16109
 
16110
   NOTES:
16111
 
16112
   Automatically available Auto Replace Keywords:
16113
      Object Name:     ADD_PACKAGE_INTEREST
16114
      Sysdate:         12/05/2006
16115
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
16116
      Username:         (set in TOAD Options, Procedure Editor)
16117
      Table Name:       (set in the "New PL/SQL Object" dialog)
16118
 
16119
******************************************************************************/
16120
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
16121
   nPkgId NUMBER;
16122
BEGIN
16123
 
16124
	 npkgidcollector := in_list_number2 (nPkgIdList);
16125
 
16126
	FOR i IN 1..npkgidcollector.COUNT
16127
	LOOP
16128
		nPkgId := npkgidcollector(i);
16129
 
16130
	 --- Insert into PACKAGE_INTEREST TABLE
16131
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
16132
	 VALUES(nProjId, nPkgId, nUserId);
16133
	END LOOP;	 
16134
 
16135
 
16136
END ADD_PACKAGE_INTEREST;
1374 dpurdie 16137
/
16138
--------------------------------------------------------
16139
--  DDL for Procedure UNLOCK_PACKAGE
16140
--------------------------------------------------------
1373 dpurdie 16141
 
16142
  CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16143
											 nUserId IN NUMBER ) IS
16144
/* ---------------------------------------------------------------------------
16145
    Author: Rupesh Solanki
16146
 
16147
	Version: 4.0
16148
   --------------------------------------------------------------------------- */
16149
   STATE CHAR;
16150
 
16151
BEGIN
16152
 
16153
	SELECT DLOCKED INTO STATE
16154
	FROM PACKAGE_VERSIONS
16155
	WHERE PV_ID = nPvId; 
16156
 
16157
	IF STATE = 'A' THEN --It was made official for autobuilds
16158
		-- Unlock Package
16159
		UPDATE PACKAGE_VERSIONS pv SET
16160
		pv.DLOCKED = 'P'
16161
		WHERE pv.PV_ID = nPvId;	
16162
	ELSE
16163
		-- Unlock Package
16164
		UPDATE PACKAGE_VERSIONS pv SET
16165
		pv.DLOCKED = 'N'
16166
		WHERE pv.PV_ID = nPvId;	
16167
 
16168
	END IF;	   
16169
 
16170
    /* LOG ACTION */
16171
   	Log_Action ( nPvId, 'unlock_package', nUserId );
16172
 
16173
END Unlock_Package;
1374 dpurdie 16174
/
16175
--------------------------------------------------------
16176
--  DDL for Procedure REMOVE_PROJECT_VIEW_OWNER
16177
--------------------------------------------------------
1373 dpurdie 16178
 
16179
  CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,
16180
	   	  		  						 			  nViewId IN NUMBER,
16181
										 			  sUserIdList IN VARCHAR2,
16182
										 			  nUserId IN NUMBER ) IS
16183
 
16184
GroupId NUMBER;													  
16185
 
16186
 
16187
 
16188
/******************************************************************************
16189
   NAME:       UPDATE_VIEW
16190
   PURPOSE:    
16191
 
16192
   REVISIONS:
16193
   Ver        Date        Author           		Description
16194
   ---------  ----------  ---------------  ------------------------------------
16195
   1.0        10/04/2006     Rupesh Solanki     1. Created this procedure.
16196
 
16197
   NOTES:
16198
 
16199
   Automatically available Auto Replace Keywords:
16200
      Object Name:     UPDATE_VIEW
16201
      Sysdate:         10/04/2006
16202
      Date and Time:   10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PM
16203
      Username:         (set in TOAD Options, Procedure Editor)
16204
      Table Name:       (set in the "New PL/SQL Object" dialog)
16205
 
16206
******************************************************************************/
16207
 
16208
BEGIN
16209
	 SELECT GROUP_EMAIL_ID into GroupId
16210
	 FROM AUTOBUILD_FAILURE
16211
	 WHERE PROJ_ID = nProjId
16212
	 AND VIEW_ID = nViewId;
16213
 
16214
	 DELETE FROM MEMBERS_GROUP
16215
	 WHERE GROUP_EMAIL_ID = GroupId
16216
	 AND USER_ID IN (
16217
	 SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
16218
	 );
16219
 
16220
 
16221
 
16222
END REMOVE_PROJECT_VIEW_OWNER;
1374 dpurdie 16223
/
16224
--------------------------------------------------------
16225
--  DDL for Procedure DEPLOY_TO_RELEASE
16226
--------------------------------------------------------
1373 dpurdie 16227
 
16228
  CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS
16229
 
16230
/******************************************************************************
16231
 
16232
 
16233
******************************************************************************/
16234
 
16235
	CURSOR curInfo IS
16236
    SELECT DISTINCT
16237
        qry.DPV_ID
16238
     FROM (
16239
             SELECT dep.*,
16240
                    LEVEL AS LEVEL_NUM
16241
               FROM PACKAGE_DEPENDENCIES dep
16242
             START WITH dep.PV_ID IN ( 
16243
 
16244
                        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
16245
 
16246
                        ) 
16247
 			CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID
16248
 		) qry,
16249
 		PACKAGES pkg,
16250
		PACKAGE_VERSIONS pv
16251
 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
16252
         and (pv.is_patch is null or pv.is_patch = 'N');
16253
    recInfo curInfo%ROWTYPE;
16254
 
16255
 
16256
BEGIN
16257
 
16258
	OPEN curInfo;
16259
    FETCH curInfo INTO recInfo;
16260
 
16261
	WHILE curInfo%FOUND
16262
	LOOP
16263
 
16264
	insert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
16265
    VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);
16266
 
16267
    FETCH curInfo INTO recInfo;
16268
 
16269
	END LOOP;
16270
 
16271
	CLOSE curInfo;
16272
 
16273
 
16274
 
16275
 
16276
END DEPLOY_TO_RELEASE; 
1374 dpurdie 16277
/
16278
--------------------------------------------------------
16279
--  DDL for Procedure TOUCH_RELEASE
16280
--------------------------------------------------------
1373 dpurdie 16281
 
16282
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
16283
/* ---------------------------------------------------------------------------
16284
    The purpose of this procedure is to flag in the database that the specified
16285
    release has changed to an extent that the procedure Rebuild_Environment
16286
    should be called at the next opportunity in order that the package state
16287
    icons are all re-evaluated.
16288
    The package state icons are controlled using the pkg_state column in the
16289
    release_content table, and Rebuild_Environment updates that column.
16290
    It will be through user action in the website that Rebuild_Environment will
16291
    be called, for example:
16292
      a) when setting/clearing ignore warnings checkboxes
16293
      b) when someone opens a page upon a rtag/pvid and rebuild_en flag is set
16294
      c) when someone opens the build order report form
16295
      d) when someone modifies dependencies of a package
16296
      + other scenarios (?)
16297
   --------------------------------------------------------------------------- */
16298
BEGIN
16299
   -- Touch Release for Rebuild
16300
   UPDATE RELEASE_TAGS rt SET
16301
          rt.REBUILD_ENV = 'Y',
16302
          rt.REBUILD_STAMP = 0
16303
    WHERE rt.RTAG_ID = nRtagId;
16304
 
16305
END Touch_Release;
1374 dpurdie 16306
/
16307
--------------------------------------------------------
16308
--  DDL for Procedure UNRIPPLE_PACKAGE
16309
--------------------------------------------------------
1373 dpurdie 16310
 
16311
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (
16312
        sPvIdList IN VARCHAR2,
16313
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
16314
        nUserId IN NUMBER
16315
    ) IS
16316
/* ---------------------------------------------------------------------------
16317
    Version: 4.1
16318
   --------------------------------------------------------------------------- */
16319
 
16320
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
16321
 
16322
BEGIN
16323
 
16324
    IF (sPvIdList IS NULL) THEN
16325
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
16326
    END IF;
16327
 
16328
    oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
16329
 
16330
    -- UnRipple Package
16331
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )
16332
    SELECT nRtagId, pv.PV_ID
16333
    FROM PACKAGE_VERSIONS pv
16334
    WHERE pv.PV_ID IN (
16335
        SELECT *
16336
        FROM TABLE (
16337
            CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )
16338
        )
16339
    );
16340
 
16341
    /* LOG ACTION */
16342
    Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );
16343
 
16344
END UnRipple_Package;
1374 dpurdie 16345
/
16346
--------------------------------------------------------
16347
--  DDL for Procedure DT_DROPUSEROBJECTBYID
16348
--------------------------------------------------------
1373 dpurdie 16349
 
16350
  CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;
1374 dpurdie 16351
/
16352
--------------------------------------------------------
16353
--  DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT
16354
--------------------------------------------------------
1373 dpurdie 16355
 
16356
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (
16357
        nPvId IN NUMBER,
16358
        nRtagId IN NUMBER,
16359
        nUserId IN NUMBER,
16360
        nrootCausePvId IN NUMBER,
16361
        srootCause IN VARCHAR2,
16362
        srootFile IN VARCHAR2
16363
    ) IS
16364
    ReleaseLocation VARCHAR2(4000);
16365
BEGIN
16366
 
16367
    -- UnRipple Package
16368
    delete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;
16369
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);
16370
 
16371
    /* LOG ACTION */
16372
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16373
              FROM PROJECTS proj,
16374
                   RELEASE_TAGS rt
16375
             WHERE rt.RTAG_ID = nRtagId
16376
               AND rt.PROJ_ID = proj.PROJ_ID;
16377
 
16378
    /* LOG ACTION */
16379
    Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );
16380
 
16381
END UnRipple_Package_Indirect;
1374 dpurdie 16382
/
16383
--------------------------------------------------------
16384
--  DDL for Procedure TO_INSERT_VTREE_ID
16385
--------------------------------------------------------
1373 dpurdie 16386
 
16387
  CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS
16388
 
16389
/******************************************************************************
16390
   NAME:       TO_INSERT_VTREE_ID
16391
   PURPOSE:    
16392
 
16393
   REVISIONS:
16394
   Ver        Date        Author           Description
16395
   ---------  ----------  ---------------  ------------------------------------
16396
   1.0        2/02/2007          1. Created this procedure.
16397
 
16398
   NOTES:
16399
 
16400
   Automatically available Auto Replace Keywords:
16401
      Object Name:     TO_INSERT_VTREE_ID
16402
      Sysdate:         2/02/2007
16403
      Date and Time:   2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AM
16404
      Username:         (set in TOAD Options, Procedure Editor)
16405
      Table Name:       (set in the "New PL/SQL Object" dialog)
16406
 
16407
******************************************************************************/
16408
VTreeId NUMBER;																			  																	   
16409
 
16410
 
16411
	CURSOR curInfo IS
16412
    SELECT RTAG_ID
16413
	FROM RELEASE_TAGS
16414
	WHERE VTREE_ID IS NULL;
16415
    recInfo curInfo%ROWTYPE;
16416
 
16417
 
16418
BEGIN
16419
 
16420
	OPEN curInfo;
16421
    FETCH curInfo INTO recInfo;
16422
 
16423
	WHILE curInfo%FOUND
16424
	LOOP
16425
		SELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;
16426
 
16427
		UPDATE RELEASE_TAGS
16428
		SET VTREE_ID = VTreeId
16429
		WHERE RTAG_ID = recInfo.RTAG_ID;
16430
 
16431
		FETCH curInfo INTO recInfo;
16432
	END LOOP;
16433
 
16434
	CLOSE curInfo;
16435
 
16436
END TO_INSERT_VTREE_ID;
1374 dpurdie 16437
/
16438
--------------------------------------------------------
16439
--  DDL for Procedure CHANGE_RELEASE_MODE
16440
--------------------------------------------------------
1373 dpurdie 16441
 
16442
  CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS
16443
/* ---------------------------------------------------------------------------
16444
    Version: 3.0.0
16445
   --------------------------------------------------------------------------- */
16446
 
16447
	cMode CHAR(1) := NULL;  
16448
	nProjId NUMBER; 
16449
 
16450
BEGIN
16451
 
16452
 
16453
	/*
16454
	Author: Rupesh Solanki
16455
	Modified: 24th October 2006
16456
	Reason: Added the archive mode state into Release Manager 
16457
	||	1 - Open Mode
16458
	||	2 - Restrictive Mode
16459
	||	3 - Closed Mode
16460
	||	4 - CCB Mode
16461
	||	5 - Archive Mode
16462
	*/	
16463
	-- Get project Id
16464
	SELECT rt.PROJ_ID INTO nProjId
16465
	  FROM RELEASE_TAGS rt
16466
	 WHERE rt.RTAG_ID = nRtagId; 
16467
 
16468
	IF nModeCode = 1 THEN
16469
		-- Open Mode
16470
		cMode := 'N';
16471
 
16472
		/* LOG ACTION */
16473
   		Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );
16474
 
16475
	ELSIF nModeCode = 2 THEN
16476
		-- Restrictive Mode
16477
		cMode := 'R';
16478
 
16479
		/* LOG ACTION */
16480
   		Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );
16481
 
16482
	ELSIF nModeCode = 3 THEN
16483
		-- Closed Mode
16484
		cMode := 'Y';
16485
 
16486
		/* LOG ACTION */
16487
   		Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId  );
16488
 
16489
	ELSIF nModeCode = 4 THEN
16490
		-- CCB Mode
16491
		cMode := 'C';
16492
 
16493
		/* LOG ACTION */
16494
   		Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId  );
16495
 
16496
	ELSIF nModeCode = 5 THEN
16497
		-- Archive Mode
16498
		cMode := 'A';
16499
 
16500
		/* LOG ACTION */
16501
   		Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId  );	
16502
 
16503
 
16504
	END IF;
16505
 
16506
 
16507
 
16508
	-- Now update table
16509
	IF NOT cMode IS NULL THEN
16510
		UPDATE RELEASE_TAGS rt SET
16511
		rt.OFFICIAL = cMode
16512
		WHERE rt.RTAG_ID = nRtagId;
16513
 
16514
	END IF;
16515
 
16516
 
16517
END CHANGE_RELEASE_MODE;
1374 dpurdie 16518
/
16519
--------------------------------------------------------
16520
--  DDL for Procedure UPDATE_UNIT_TEST_TEST
16521
--------------------------------------------------------
1373 dpurdie 16522
 
16523
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,
16524
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
16525
											   nPv_id IN NUMBER,
16526
											   nUserId IN NUMBER,
16527
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
16528
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
16529
	                                           sCompletion_date IN VARCHAR2,
16530
											   sDpkg_path IN VARCHAR2,
16531
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
16532
											   sResults IN VARCHAR2,
16533
											   outFileName OUT VARCHAR2
16534
                                              ) IS
16535
/* ---------------------------------------------------------------------------
16536
    Version: 3.1.0
16537
   --------------------------------------------------------------------------- */
16538
 
16539
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
16540
 
16541
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
16542
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
16543
 
16544
 
16545
BEGIN
16546
 
16547
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
16548
       	ResultsURL := sResults;
16549
       ELSE
16550
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16551
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
16552
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
16553
           END IF;
16554
       END IF;
16555
 
16556
       /*	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16557
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
16558
    		sResults_url:= 'doc' || '/' || 
16559
			;
16560
        END IF;*/
16561
	--- Update Unit Test ---
16562
    UPDATE UNIT_TESTS SET
16563
           TEST_SUMMARY = sTest_summary,
16564
		   NUMOF_TEST = sNumof_test,
16565
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
16566
		   COMPLETED_BY = nUserId,
16567
		   RESULTS_URL = ResultsURL,
16568
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
16569
     WHERE TEST_ID = nTest_id
16570
       AND PV_ID = nPv_id;
16571
 
16572
END Update_Unit_Test_Test;
1374 dpurdie 16573
/
16574
--------------------------------------------------------
16575
--  DDL for Procedure NEW_VERSION
16576
--------------------------------------------------------
1373 dpurdie 16577
 
16578
  CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,
16579
                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,
16580
                                          NNsetto_pv_id IN NUMBER DEFAULT NULL,
16581
                                          NNrtag_id IN NUMBER,
16582
                                          NNuser_id IN NUMBER,
16583
                                          enumISSUES_STATE_IMPORTED IN NUMBER,
16584
                                          retPv_id OUT NUMBER ) IS
16585
 
16586
 
16587
  TO BE REMOVED   !!!										  
16588
 
16589
 
16590
 
16591
 
16592
/* ---------------------------------------------------------------------------
16593
    Version: 3.3
16594
   --------------------------------------------------------------------------- */
16595
 
16596
    ReleaseLocation VARCHAR2(4000);
16597
    origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;
16598
    origDlocked PACKAGE_VERSIONS.dlocked%TYPE;
16599
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
16600
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
16601
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
16602
    nIssuesTypes NUMBER;
16603
 
16604
    CURSOR package_versions_cur IS
16605
        SELECT pv.pv_id, pv.is_patch
16606
          FROM PACKAGE_VERSIONS pv
16607
         WHERE pv.pkg_version = SSpkg_version
16608
           AND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );
16609
    package_versions_rec package_versions_cur%ROWTYPE;
16610
 
16611
    CURSOR clone_package_versions_cur IS
16612
        SELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;
16613
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
16614
 
16615
BEGIN
16616
	IF NNsetto_pv_id IS NULL
16617
    THEN
16618
		-- SetToPv_id is not supplied, hence proceed.
16619
 
16620
	    /* ---------------------------------------------------- */
16621
	    /* Find id package_version exists                       */
16622
	    /* ---------------------------------------------------- */
16623
 
16624
	    OPEN package_versions_cur;
16625
	    FETCH package_versions_cur INTO package_versions_rec;
16626
 
16627
	    IF package_versions_cur%NOTFOUND
16628
	    THEN
16629
	        SELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;
16630
	        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
16631
 
16632
	        OPEN clone_package_versions_cur;
16633
	        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
16634
	        origPkg_id := clone_package_versions_rec.pkg_id;
16635
	        origDlocked := clone_package_versions_rec.dlocked;
16636
	        CLOSE clone_package_versions_cur;
16637
 
16638
	        -- Clone Package Version Details --
16639
	        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,
16640
	                                       src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )
16641
	            SELECT retPv_id         AS pv_id,
16642
	                   origPkg_id       AS pkg_id,
16643
	                   SSpkg_version    AS pkg_version,
16644
	                   'N'              AS dlocked,
16645
	                   Ora_Sysdate      AS created_stamp,
16646
	                   NNuser_id        AS creator_id,
16647
	                   Ora_Sysdatetime  AS modified_stamp,
16648
	                   NNuser_id        AS modifier_id,
16649
	                   SSV_MM           AS V_MM,
16650
	                   SSV_NMM          AS V_NMM,
16651
	                   SSV_EXT          AS V_EXT,
16652
	                   pv.src_path,
16653
	                   pv.pv_description,
16654
                       pv.PV_OVERVIEW,
16655
                       NNorig_pv_id 	AS LAST_PV_ID,
16656
	                   pv.owner_id,
16657
					   pv.IS_DEPLOYABLE,
16658
					   pv.IS_BUILD_ENV_REQUIRED
16659
	              FROM PACKAGE_VERSIONS pv
16660
	             WHERE pv.pv_id = NNorig_pv_id;
16661
 
16662
 
16663
	        -- Set Issues Type for cloning ---
16664
	        IF origDlocked = 'Y'
16665
	        THEN
16666
            	nIssuesTypes := enumISSUES_STATE_IMPORTED;
16667
	        ELSE
16668
            	nIssuesTypes := NULL;
16669
	        END IF;
16670
 
16671
			Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );
16672
 
16673
 
16674
 
16675
	    ELSE
16676
	        retPv_id := package_versions_rec.pv_id;
16677
 
16678
	    END IF;
16679
 
16680
        CLOSE package_versions_cur;
16681
 
16682
	ELSE
16683
    	retPv_id := NNsetto_pv_id;
16684
    END IF;
16685
 
16686
 
16687
    /* ---------------------------------------------------- */
16688
    /* Insert into Release Contents (EXCLUDE PATCHES)       */
16689
    /* ---------------------------------------------------- */
16690
	IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THEN
16691
	    UPDATE RELEASE_CONTENT
16692
	       SET pv_id = retPv_id,
16693
	           insert_stamp = Ora_Sysdate,
16694
	           insertor_id = NNuser_id
16695
	     WHERE rtag_id = NNrtag_id
16696
	       AND pv_id = NNorig_pv_id;
16697
 
16698
        /* LOG ACTION */
16699
        SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16700
		  FROM PROJECTS proj,
16701
		  	   VTREES vt,
16702
		       RELEASE_TAGS rt
16703
		 WHERE rt.VTREE_ID = vt.VTREE_ID
16704
		   AND vt.PROJ_ID = proj.PROJ_ID
16705
		   AND rt.RTAG_ID = NNrtag_id;
16706
 
16707
        Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );
16708
   		Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );
16709
 
16710
	END IF;
16711
 
16712
 
16713
END New_Version;
1374 dpurdie 16714
/
16715
--------------------------------------------------------
16716
--  DDL for Procedure ADD_RUNTIME_DEPENDENCY
16717
--------------------------------------------------------
1373 dpurdie 16718
 
16719
  CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,
16720
                                                     SSrtd_name IN PACKAGES.pkg_name%TYPE,
16721
                                                     SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
16722
                                                     NNuser_id IN NUMBER
16723
                                                    ) IS
16724
/* ---------------------------------------------------------------------------
16725
    Version: 3.1
16726
   --------------------------------------------------------------------------- */
16727
 
16728
    retRTD_ID NUMBER;
16729
 
16730
	CURSOR rtd_cur IS
16731
        SELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;
16732
    rtd_rec rtd_cur%ROWTYPE;
16733
 
16734
BEGIN
16735
    --- Seed database with package_name and version if required ---
16736
    Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );
16737
 
16738
	OPEN rtd_cur;
16739
    FETCH rtd_cur INTO rtd_rec;
16740
 
16741
    IF rtd_cur%NOTFOUND
16742
    THEN
16743
		/* Make sure it does not exists already as runtime dependency */
16744
 
16745
		--- Add new Runtime Dependency ---
16746
	    INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )
16747
	    VALUES (  NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );
16748
 
16749
    	/* LOG ACTION */
16750
        Log_Action ( NNpv_id, 'runtime_add', NNuser_id,
16751
    			     'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );
16752
 
16753
	END IF;
16754
 
16755
 
16756
END Add_Runtime_Dependency;
1374 dpurdie 16757
/
16758
--------------------------------------------------------
16759
--  DDL for Procedure LEVEL_ONE_CONFLICTS
16760
--------------------------------------------------------
1373 dpurdie 16761
 
16762
  CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (
16763
   nnrtag_id       IN   NUMBER,
16764
   nnsession_num   IN   NUMBER
16765
)
16766
IS
16767
BEGIN
16768
   /* ---------  LEVEL 1 CONFILCTS -----------
16769
   || Following states are used:
16770
   || 0 -> NOT FOUND
16771
   || 1 -> MAJOR
16772
   || 2 -> MINOR MINOR
16773
   */
16774
   INSERT INTO temp_env_states
16775
      SELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,
16776
                      err.pv_id, errpkg.pkg_id, errpkg.v_ext,
16777
                      DECODE (frc.v_nmm,
16778
                              NULL, 0,
16779
                              errpv.v_nmm, DECODE (frc.v_mm,
16780
                                                   errpv.v_mm, NULL,
16781
                                                   2
16782
                                                  ),
16783
                              1
16784
                             ) AS MESSAGE
16785
                 FROM (
16786
                       /* Full Release Contents used for reference*/
16787
                        SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,
16788
                                NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,
16789
                                rpv.pkg_version, rpv.v_nmm, rpv.v_mm,
16790
                                (SELECT COUNT(*)
16791
                                   FROM ADVISORY_RIPPLE avr
16792
                                  WHERE avr.rtag_id = rel.rtag_id
16793
                                    AND avr.pv_id = rel.pv_id
16794
                                ) AS IsAvr
16795
                          FROM release_content rel,
16796
                                package_versions rpv
16797
                          WHERE rel.pv_id = rpv.pv_id
16798
                             AND rtag_id = nnrtag_id
16799
                      ) frc,
16800
 
16801
                      (
16802
                       /* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will not
16803
                          necessarily be satisfied in the release) */
16804
                       SELECT dep.pv_id, dep.dpv_id AS err_dpv
16805
                         FROM package_dependencies dep,
16806
                              package_versions dep_dpv
16807
                        WHERE dep.dpv_id = dep_dpv.pv_id
16808
                          AND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16809
                          AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)
16810
                          AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16811
                       MINUS
16812
                       /* MINUS Dependencies to be ignored */
16813
                       SELECT igw.pv_id, igw.dpv_id AS err_dpv
16814
                         FROM ignore_warnings igw,
16815
                              package_versions igw_dpv
16816
                        WHERE igw.dpv_id = igw_dpv.pv_id
16817
                          AND igw.rtag_id = nnrtag_id
16818
                      ) err,
16819
                      package_versions errpkg,
16820
                      package_versions errpv
16821
                WHERE err.err_dpv = errpv.pv_id
16822
                  AND errpv.pkg_id = frc.pkg_id(+)
16823
                  AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
16824
                  AND err.pv_id = errpkg.pv_id
16825
                  AND frc.IsAvr = 0;
16826
END level_one_conflicts;
1374 dpurdie 16827
/
16828
--------------------------------------------------------
16829
--  DDL for Procedure OLE
16830
--------------------------------------------------------
1373 dpurdie 16831
 
16832
  CREATE OR REPLACE PROCEDURE "OLE" 
16833
IS retval VARCHAR2(40);   
16834
BEGIN   retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 ) 
16835
DBMS_OUTPUT.PUT_LINE(retval);
1374 dpurdie 16836
/
16837
--------------------------------------------------------
16838
--  DDL for Procedure SYNC_PROJECTS_NEW_VERSION
16839
--------------------------------------------------------
1373 dpurdie 16840
 
16841
  CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id 				IN NUMBER,
16842
														  sSyncRtagsInList		IN VARCHAR2,
16843
				                                          nUser_id 				IN NUMBER ) IS
16844
/* ---------------------------------------------------------------------------
16845
    Version: 3.0.0
16846
   --------------------------------------------------------------------------- */
16847
 
16848
	CURSOR sync_rtags_cur IS
16849
        SELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_id
16850
		  FROM release_content rc,
16851
		  	   package_versions pv,
16852
		       package_versions opv
16853
		 WHERE rc.pv_id = pv.pv_id
16854
		   AND opv.pkg_id = pv.pkg_id
16855
		   AND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')
16856
		   AND opv.pv_id = nPv_id
16857
		   AND rtag_id IN ( SELECT *
16858
		   	   		   	      FROM THE (
16859
					   	   		   	    SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )
16860
					       		   	    FROM dual
16861
									   )
16862
						  );
16863
    sync_rtags_rec sync_rtags_cur%ROWTYPE;
16864
 
16865
BEGIN
16866
 
16867
	OPEN sync_rtags_cur;
16868
	FETCH sync_rtags_cur INTO sync_rtags_rec;
16869
 
16870
	WHILE sync_rtags_cur%FOUND
16871
	LOOP
16872
		DELETE FROM RELEASE_CONTENT
16873
		 WHERE rtag_id = sync_rtags_rec.rtag_id
16874
	       AND pv_id = sync_rtags_rec.pv_id;
16875
 
16876
		INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
16877
	   		   VALUES ( sync_rtags_rec.rtag_id,
16878
		       		  	nPv_id,
16879
						sync_rtags_rec.BASE_VIEW_ID,
16880
	           			Ora_Sysdate,
16881
	           			nUser_id,
16882
 
16883
	      	   		   );
16884
 
16885
-- 		UPDATE RELEASE_CONTENT
16886
-- 	       SET pv_id = nPv_id,
16887
-- 	           insert_stamp = Ora_Sysdate,
16888
-- 	           insertor_id = nUser_id
16889
-- 	     WHERE rtag_id = sync_rtags_rec.rtag_id
16890
-- 	       AND pv_id = sync_rtags_rec.pv_id;
16891
 
16892
		FETCH sync_rtags_cur INTO sync_rtags_rec;
16893
	END LOOP;
16894
 
16895
	CLOSE sync_rtags_cur;
16896
 
16897
END Sync_Projects_New_Version;
1374 dpurdie 16898
/
16899
--------------------------------------------------------
16900
--  DDL for Procedure LOCK_PACKAGE
16901
--------------------------------------------------------
1373 dpurdie 16902
 
16903
  CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16904
											 nUserId IN NUMBER ) IS
16905
/* ---------------------------------------------------------------------------
16906
    Version: 4.0
16907
   --------------------------------------------------------------------------- */
16908
 
16909
BEGIN
16910
 
16911
    -- Lock Package
16912
    UPDATE PACKAGE_VERSIONS pv SET
16913
    	pv.DLOCKED = 'Y'
16914
    WHERE pv.PV_ID = nPvId;
16915
 
16916
    /* LOG ACTION */
16917
   	Log_Action ( nPvId, 'lock_package', nUserId );
16918
 
16919
END Lock_Package;
1374 dpurdie 16920
/
16921
--------------------------------------------------------
16922
--  DDL for Procedure UPDATE_PACKAGE_STATES
16923
--------------------------------------------------------
1373 dpurdie 16924
 
16925
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,
16926
                                                    NNsession_num IN NUMBER ) IS
16927
/* =============  STATE RULES =================== */
16928
/*
16929
   MNR   MRR   MN   MR    |   pkg_state
16930
   ------------------------------------
16931
 
16932
 
16933
 
16934
 
16935
   ------------------------------------
16936
 
16937
 
16938
 
16939
 
16940
   ------------------------------------
16941
    1     0     0     0   |      MINOR_READY
16942
    1     0     0     1   |      MAJOR
16943
    1     0     1     0   |      MINOR
16944
    1     0     1     1   |      MAJOR
16945
   ------------------------------------
16946
    1     1     0     0   |      MAJOR_READY
16947
    1     1     0     1   |      MAJOR
16948
    1     1     1     0   |      MAJOR
16949
    1     1     1     1   |      MAJOR
16950
   ------------------------------------
16951
*/
16952
BEGIN
16953
    /*----------------------------------------------
16954
    ||              MINOR READY
16955
    */----------------------------------------------
16956
 
16957
    UPDATE release_content
16958
       SET pkg_state = 4
16959
     WHERE rtag_id = NNrtag_id
16960
       AND pv_id IN
16961
           (
16962
           SELECT DISTINCT pv_id
16963
           FROM temp_env_states
16964
           WHERE session_num = NNsession_num
16965
             AND level_num = 1
16966
             AND tes_state = 2
16967
           );
16968
 
16969
    /*----------------------------------------------
16970
    ||              MAJOR READY
16971
    */----------------------------------------------
16972
    UPDATE release_content
16973
       SET pkg_state = 3
16974
     WHERE rtag_id = NNrtag_id
16975
       AND pv_id IN
16976
           (
16977
           SELECT DISTINCT pv_id
16978
           FROM temp_env_states
16979
           WHERE session_num = NNsession_num
16980
             AND level_num = 1
16981
             AND tes_state IN (0,1)
16982
           );
16983
 
16984
    /*----------------------------------------------
16985
    ||                MINOR
16986
    */----------------------------------------------
16987
    UPDATE release_content
16988
       SET pkg_state = 2
16989
     WHERE rtag_id = NNrtag_id
16990
       AND pv_id IN
16991
           (
16992
           SELECT DISTINCT pv_id
16993
            FROM temp_env_states
16994
            WHERE session_num = NNsession_num
16995
              AND level_num >= 2
16996
              AND tes_state = 2
16997
            MINUS
16998
           SELECT pv_id
16999
             FROM release_content
17000
            WHERE rtag_id = NNrtag_id
17001
              AND pkg_state = 3
17002
           );
17003
 
17004
    /*----------------------------------------------
17005
    ||                MAJOR
17006
    */----------------------------------------------
17007
    UPDATE release_content
17008
       SET pkg_state = 1
17009
     WHERE rtag_id = NNrtag_id
17010
       AND pv_id IN
17011
           (
17012
           SELECT DISTINCT pv_id
17013
           FROM temp_env_states
17014
           WHERE session_num = NNsession_num
17015
             AND level_num >= 2
17016
             AND tes_state IN (0,1)
17017
           /* MAJOR EXCEPTION - When package has Major Ready and Minor */
17018
           UNION
17019
           SELECT DISTINCT tes.pv_id
17020
           FROM temp_env_states tes,
17021
                release_content rc
17022
           WHERE tes.session_num = NNsession_num
17023
             AND tes.level_num >= 2
17024
             AND tes.tes_state = 2
17025
             AND rtag_id = NNrtag_id
17026
             AND rc.pv_id = tes.pv_id
17027
             AND rc.pkg_state = 3
17028
           );
17029
 
17030
    /*----------------------------------------------
17031
    ||                 OK
17032
    */----------------------------------------------
17033
    UPDATE release_content
17034
       SET pkg_state = 0
17035
     WHERE rtag_id = NNrtag_id
17036
       AND pv_id IN
17037
           (
17038
           SELECT rc.pv_id
17039
             FROM release_content rc
17040
            WHERE rc.rtag_id = NNrtag_id
17041
              AND NOT rc.pv_id IN
17042
                    (
17043
                     SELECT DISTINCT pv_id
17044
                     FROM temp_env_states WHERE session_num = NNsession_num
17045
                    )
17046
           );
17047
 
17048
      Update_Deprecation_State (NNrtag_id);
17049
 
17050
    /*----------------------------------------------
17051
    ||              PEGGED VERSIONS DEPENDENT
17052
    */----------------------------------------------
17053
    UPDATE release_content
17054
       SET pkg_state = 10
17055
     WHERE rtag_id = NNrtag_id
17056
       AND pv_id IN
17057
           (
17058
           SELECT DISTINCT pv_id
17059
           FROM pegged_versions pegv
17060
           WHERE pegv.rtag_id = NNrtag_id
17061
           );
17062
 
17063
    /*----------------------------------------------
17064
    ||              ADVISORY RIPPLE
17065
    */----------------------------------------------
17066
    UPDATE release_content
17067
       SET pkg_state = 8
17068
     WHERE rtag_id = NNrtag_id
17069
       AND pv_id IN
17070
           (
17071
           SELECT DISTINCT pv_id
17072
           FROM advisory_ripple ar
17073
           WHERE ar.rtag_id = NNrtag_id
17074
           )
17075
       AND pv_id IN
17076
           (
17077
           SELECT DISTINCT pv_id
17078
           FROM release_content rc
17079
           WHERE rc.rtag_id = NNrtag_id
17080
           );
17081
 
17082
END Update_Package_States;
1374 dpurdie 17083
/
17084
--------------------------------------------------------
17085
--  DDL for Procedure REMOVE_DOCUMENT
17086
--------------------------------------------------------
1373 dpurdie 17087
 
17088
  CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
17089
											  nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,
17090
                                              nUserId IN NUMBER ) IS
17091
/* ---------------------------------------------------------------------------
17092
    Version: 3.0
17093
   --------------------------------------------------------------------------- */
17094
 
17095
   DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;
17096
 
17097
BEGIN
17098
 
17099
	-- Get Doc Num
17100
    SELECT pd.DOC_NUM INTO DocNumber
17101
      FROM PACKAGE_DOCUMENTS pd
17102
     WHERE pd.PV_ID = nPvId
17103
       AND pd.DOC_ID = nDocId;
17104
 
17105
 
17106
	-- Delete Document
17107
    DELETE
17108
      FROM PACKAGE_DOCUMENTS pd
17109
     WHERE pd.PV_ID = nPvId
17110
       AND pd.DOC_ID = nDocId;
17111
 
17112
 
17113
    /* LOG ACTION */
17114
   	Log_Action ( nPvId, 'document_remove', nUserId,
17115
   			     'Document number: '|| DocNumber );
17116
 
17117
 
17118
END Remove_Document;
1374 dpurdie 17119
/
17120
--------------------------------------------------------
17121
--  DDL for Procedure SPLIT_VERSION
17122
--------------------------------------------------------
1373 dpurdie 17123
 
17124
  CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17125
                                            SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,
17126
                                            SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,
17127
                                            SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE  ) IS
17128
/* ---------------------------------------------------------------------------
17129
    Version: 3.0.0
17130
   --------------------------------------------------------------------------- */
17131
 
17132
    TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)
17133
        INDEX BY BINARY_INTEGER;
17134
 
17135
    version_components VERSION_COMPONENTS_TYPE;
17136
    lastDot NUMBER := 0;
17137
    currDot NUMBER := 0;
17138
 
17139
BEGIN
17140
    currDot := INSTR ( SSpkg_version, '.', -1 );      -- Find 1st dot from the right
17141
 
17142
    IF ( currDot > 0 )
17143
    THEN
17144
        -- YES dot separator found --
17145
        SSV_EXT := GET_V_EXT( SSpkg_version );
17146
 
17147
        IF NOT SSV_EXT IS NULL
17148
        THEN
17149
            lastDot := currDot;
17150
            currDot := INSTR ( SSpkg_version, '.', -1, 2 );   -- Find 2nd dot from the right
17151
 
17152
            IF ( currDot > 0 )
17153
            THEN
17154
                -- XXXX.M.E
17155
                SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);
17156
                SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;
17157
            ELSE
17158
                -- XXXX.E
17159
                SSV_MM := NULL;
17160
                SSV_NMM := SSpkg_version;
17161
            END IF;
17162
 
17163
        ELSE
17164
            -- XXXX.M
17165
            SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );
17166
            SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );
17167
 
17168
        END IF;
17169
 
17170
    ELSE
17171
        -- NO dot separator found --
17172
        -- XXXXXX
17173
        SSV_MM  := NULL;
17174
        SSV_NMM := SSpkg_version;
17175
        SSV_EXT := NULL;
17176
 
17177
    END IF;
17178
 
17179
END Split_Version;
1374 dpurdie 17180
/
17181
--------------------------------------------------------
17182
--  DDL for Procedure ADD_PACKAGE_INTEREST_TEST
17183
--------------------------------------------------------
1373 dpurdie 17184
 
17185
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
17186
	   	  		  								  nPkgIdList IN VARCHAR2,
17187
												  nUserId IN NUMBER
17188
	   	  		  								  ) IS
17189
 
17190
/******************************************************************************
17191
   NAME:       ADD_PACKAGE_INTEREST
17192
   PURPOSE:    
17193
 
17194
   REVISIONS:
17195
   Ver        Date        Author           Description
17196
   ---------  ----------  ---------------  ------------------------------------
17197
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
17198
 
17199
   NOTES:
17200
 
17201
   Automatically available Auto Replace Keywords:
17202
      Object Name:     ADD_PACKAGE_INTEREST
17203
      Sysdate:         12/05/2006
17204
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
17205
      Username:         (set in TOAD Options, Procedure Editor)
17206
      Table Name:       (set in the "New PL/SQL Object" dialog)
17207
 
17208
******************************************************************************/
17209
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
17210
   nPkgId NUMBER;
17211
BEGIN
17212
 
17213
	 npkgidcollector := in_list_number2 (nPkgIdList);
17214
 
17215
	FOR i IN 1..npkgidcollector.COUNT
17216
	LOOP
17217
		nPkgId := npkgidcollector(i);
17218
 
17219
	 --- Insert into PACKAGE_INTEREST TABLE
17220
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
17221
	 VALUES(nProjId, nPkgId, nUserId);
17222
	END LOOP;	 
17223
 
17224
 
17225
END ADD_PACKAGE_INTEREST_TEST;
1374 dpurdie 17226
/
17227
--------------------------------------------------------
17228
--  DDL for Procedure CLONED_PROCESSES
17229
--------------------------------------------------------
1373 dpurdie 17230
 
17231
  CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES" 
17232
IS
17233
 
17234
proc_id NUMBER;
17235
/******************************************************************************
17236
   NAME:       DELETE_DO_NOT_RIPPLE
17237
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
17238
               IS RELEASED
17239
 
17240
   REVISIONS:
17241
   Ver        Date        Author           Description
17242
   ---------  ----------  ---------------  ------------------------------------
17243
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
17244
 
17245
   NOTES:
17246
 
17247
   Automatically available Auto Replace Keywords:
17248
      Object Name:     DELETE_DO_NOT_RIPPLE
17249
      Sysdate:         21/04/2006
17250
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
17251
      Username:         (set in TOAD Options, Procedure Editor)
17252
      Table Name:       (set in the "New PL/SQL Object" dialog)
17253
 
17254
******************************************************************************/
17255
   CURSOR ripple_cur
17256
   IS
17257
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
17258
 
17259
   ripple_rec   ripple_cur%ROWTYPE;
17260
BEGIN
17261
   OPEN ripple_cur;
17262
 
17263
   FETCH ripple_cur
17264
    INTO ripple_rec;
17265
 
17266
   WHILE ripple_cur%FOUND
17267
   LOOP
17268
 
17269
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
17270
 
17271
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
17272
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
17273
 
17274
      FETCH ripple_cur
17275
       INTO ripple_rec;
17276
   END LOOP;
17277
END CLONED_PROCESSES;
1374 dpurdie 17278
/
17279
--------------------------------------------------------
17280
--  DDL for Procedure ADD_VIEW_MEMBERS
17281
--------------------------------------------------------
1373 dpurdie 17282
 
17283
  CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS
17284
 
17285
/******************************************************************************
17286
   NAME:       ADD_VIEW_MEMBERS
17287
   PURPOSE:    
17288
 
17289
   REVISIONS:
17290
   Ver        Date        Author           Description
17291
   ---------  ----------  ---------------  ------------------------------------
17292
   1.0        11/04/2006          1. Created this procedure.
17293
 
17294
   NOTES:
17295
 
17296
   Automatically available Auto Replace Keywords:
17297
      Object Name:     ADD_VIEW_MEMBERS
17298
      Sysdate:         11/04/2006
17299
      Date and Time:   11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AM
17300
      Username:         (set in TOAD Options, Procedure Editor)
17301
      Table Name:       (set in the "New PL/SQL Object" dialog)
17302
 
17303
******************************************************************************/
17304
CURSOR user_cur IS
17305
	SELECT u.USER_ID
17306
	  FROM USERS u
17307
	 WHERE u.USER_ID IN (
17308
	 	   			   	SELECT * 
17309
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
17310
						);
17311
user_rec user_cur%ROWTYPE;
17312
 
17313
 
17314
BEGIN
17315
 
17316
	 OPEN user_cur;
17317
	 FETCH user_cur INTO user_rec;
17318
 
17319
	 WHILE user_cur%FOUND
17320
	 LOOP
17321
	 	 INSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)
17322
	 	 VALUES ( nGroupId, user_rec.USER_ID);
17323
 
17324
	 	 FETCH user_cur INTO user_rec;	 
17325
	 END LOOP;	 
17326
 
17327
 
17328
 
17329
END ADD_VIEW_MEMBERS;
1374 dpurdie 17330
/
17331
--------------------------------------------------------
17332
--  DDL for Procedure RESET_IGNORE_WARNINGS
17333
--------------------------------------------------------
1373 dpurdie 17334
 
17335
  CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,
17336
                                                    nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
17337
/* ---------------------------------------------------------------------------
17338
    Version: 5.0
17339
   --------------------------------------------------------------------------- */
17340
 
17341
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17342
 
17343
BEGIN
17344
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
17345
 
17346
    -- Remove Ignore Warnings
17347
     DELETE
17348
       FROM ignore_warnings
17349
	  WHERE (rtag_id, pv_id, dpv_id) IN
17350
	     (
17351
	      SELECT igw.rtag_id, igw.pv_id, igw.dpv_id
17352
	        FROM ignore_warnings igw,
17353
	             package_versions dpv,
17354
	             package_versions pv
17355
	       WHERE igw.dpv_id = dpv.pv_id
17356
	         AND igw.rtag_id = nRTagId
17357
	         AND dpv.pkg_id = pv.pkg_id
17358
	         AND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')
17359
	         AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
17360
         );
17361
 
17362
END Reset_Ignore_Warnings;
1374 dpurdie 17363
/
17364
--------------------------------------------------------
17365
--  DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO
17366
--------------------------------------------------------
1373 dpurdie 17367
 
17368
  CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS
17369
 
17370
/******************************************************************************
17371
   NAME:       INSERT_INTO_PACKAGE_BUILD_INFO
17372
   PURPOSE:    
17373
 
17374
   REVISIONS:
17375
   Ver        Date        Author           Description
17376
   ---------  ----------  ---------------  ------------------------------------
17377
   1.0        6/12/2006          1. Created this procedure.
17378
 
17379
   NOTES:
17380
 
17381
   Automatically available Auto Replace Keywords:
17382
      Object Name:     INSERT_INTO_PACKAGE_BUILD_INFO
17383
      Sysdate:         6/12/2006
17384
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
17385
      Username:         (set in TOAD Options, Procedure Editor)
17386
      Table Name:       (set in the "New PL/SQL Object" dialog)
17387
 
17388
******************************************************************************/
17389
 
17390
	CURSOR curInfo IS
17391
    SELECT PV_ID
17392
	FROM PACKAGE_BUILD_ENV
17393
	WHERE BE_ID IN (11, 12);
17394
    recInfo curInfo%ROWTYPE;
17395
 
17396
 
17397
BEGIN
17398
 
17399
	OPEN curInfo;
17400
    FETCH curInfo INTO recInfo;
17401
 
17402
	WHILE curInfo%FOUND
17403
	LOOP
17404
 
17405
		INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )
17406
		VALUES( recInfo.PV_ID, 2, 5);
17407
 
17408
		UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;
17409
 
17410
		FETCH curInfo INTO recInfo;
17411
 
17412
	END LOOP;
17413
 
17414
	CLOSE curInfo;
17415
 
17416
 
17417
 
17418
 
17419
END INSERT_INTO_PACKAGE_BUILD_INFO;
1374 dpurdie 17420
/
17421
--------------------------------------------------------
17422
--  DDL for Procedure UPDATE_ADDITIONAL_NOTE
17423
--------------------------------------------------------
1373 dpurdie 17424
 
17425
  CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,
17426
													 pnPv_id IN NUMBER,
17427
                                                     psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
17428
                                                     psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
17429
                                                     pnUser_id IN NUMBER,
17430
                                                     outErrCode OUT NUMBER
17431
                                                    ) IS
17432
/* ---------------------------------------------------------------------------
17433
    Version: 3.0.1
17434
   --------------------------------------------------------------------------- */
17435
 
17436
    newID NUMBER;
17437
 
17438
    /* Disallow duplicate Note Titles */
17439
	CURSOR an_duplicate_cur IS
17440
        SELECT COUNT(*) AS cnt_note
17441
          FROM ADDITIONAL_NOTES
17442
         WHERE pv_id = pnPv_id
17443
           AND note_id != pnNote_id
17444
           AND note_title = psNote_title;
17445
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
17446
 
17447
BEGIN
17448
	outErrCode := -1;		-- Set default return error code to ERROR state
17449
 
17450
	OPEN an_duplicate_cur;
17451
    FETCH an_duplicate_cur INTO an_duplicate_rec;
17452
 
17453
    IF an_duplicate_rec.cnt_note < 1
17454
    THEN
17455
		--- Update Additional Note ---
17456
	    UPDATE ADDITIONAL_NOTES SET
17457
		       note_title = psNote_title,
17458
		       note_body = psNote_body,
17459
		       mod_date = Ora_Sysdate,
17460
		       mod_user = pnUser_id
17461
         WHERE note_id = pnNote_id
17462
           AND pv_id = pnPv_id;
17463
		outErrCode := 0;		-- Set return to SUCCESS
17464
	END IF;
17465
 
17466
	CLOSE an_duplicate_cur;
17467
END Update_Additional_Note;
1374 dpurdie 17468
/
17469
--------------------------------------------------------
17470
--  DDL for Procedure NEW_UNIT_TEST
17471
--------------------------------------------------------
1373 dpurdie 17472
 
17473
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
17474
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
17475
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
17476
                                            sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,
17477
                                            sDpkg_path IN VARCHAR2,
17478
                                            sResults IN VARCHAR2,
17479
                                            sCompletion_date IN VARCHAR2,
17480
                                            nCompleted_by IN NUMBER,
17481
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
17482
											enumTEST_TYPE_NOT_DONE IN NUMBER,
17483
											outFileName OUT VARCHAR2
17484
                                           ) IS
17485
/* ---------------------------------------------------------------------------
17486
    Version: 3.2.0
17487
   --------------------------------------------------------------------------- */
17488
 
17489
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
17490
 
17491
    newID NUMBER;
17492
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
17493
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
17494
 
17495
BEGIN
17496
 
17497
	-- Get new ID --
17498
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
17499
 
17500
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
17501
       	ResultsURL := sResults;
17502
       ELSE
17503
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
17504
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
17505
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
17506
           END IF;
17507
       END IF;
17508
 
17509
	-- Remove NOT_DONE entry if exists
17510
	DELETE FROM UNIT_TESTS
17511
	 WHERE pv_id = nPv_id
17512
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
17513
 
17514
	--- Add Additional Note ---
17515
    INSERT INTO UNIT_TESTS ( TEST_ID,
17516
								PV_ID,
17517
								TEST_TYPES_FK,
17518
								TEST_SUMMARY,
17519
								COMPLETION_DATE,
17520
								COMPLETED_BY,
17521
								RESULTS_URL,
17522
								RESULTS_ATTACHMENT_NAME,
17523
								NUMOF_TEST )
17524
    VALUES (
17525
       	newID,
17526
           nPv_id,
17527
           nTestTypeId,
17528
           sTest_summary,
17529
           TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
17530
           nCompleted_by,
17531
           ResultsURL,
17532
           ResultsAttachment,
17533
		   sNumOfTest );
17534
 
17535
END New_Unit_Test;
1374 dpurdie 17536
/
17537
--------------------------------------------------------
17538
--  DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE
17539
--------------------------------------------------------
1373 dpurdie 17540
 
17541
  CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)IS
17542
Auto CHAR;
17543
/******************************************************************************
17544
   NAME:       SWITCH_REPRODUCIBLE_PACKAGE
17545
   PURPOSE:    
17546
 
17547
   REVISIONS:
17548
   Ver        Date        Author           Description
17549
   ---------  ----------  ---------------  ------------------------------------
17550
   1.0        14/12/2006   Rupesh Solanki       1. Created this procedure.
17551
 
17552
   NOTES:
17553
 
17554
   Automatically available Auto Replace Keywords:
17555
      Object Name:     SWITCH_REPRODUCIBLE_PACKAGE
17556
      Sysdate:         14/12/2006
17557
      Date and Time:   14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AM
17558
      Username:         (set in TOAD Options, Procedure Editor)
17559
      Table Name:       (set in the "New PL/SQL Object" dialog)
17560
 
17561
******************************************************************************/
17562
BEGIN
17563
 
17564
	 SELECT IS_AUTOBUILDABLE into Auto
17565
	 FROM PACKAGE_VERSIONS 
17566
	 WHERE PV_ID = nPvId;
17567
 
17568
	 IF Auto = 'N' Then
17569
 
17570
	 	UPDATE PACKAGE_VERSIONS
17571
	 	SET IS_AUTOBUILDABLE = 'Y'
17572
	 	WHERE PV_ID = nPvId;
17573
 
17574
 
17575
	 	/* LOG ACTION */
17576
   		Log_Action ( nPvId, 'reproducible_package', nUserId );	 
17577
 
17578
	 Else
17579
 
17580
		 UPDATE PACKAGE_VERSIONS
17581
		 SET IS_AUTOBUILDABLE = 'N'
17582
		 WHERE PV_ID = nPvId;
17583
 
17584
 
17585
	 	 /* LOG ACTION */
17586
   	 	 Log_Action ( nPvId, 'unreproducible_package', nUserId );	 
17587
 
17588
	 End If;
17589
 
17590
 
17591
 
17592
 
17593
 
17594
 
17595
 
17596
 
17597
END SWITCH_REPRODUCIBLE_PACKAGE;
1374 dpurdie 17598
/
17599
--------------------------------------------------------
17600
--  DDL for Procedure LOG_DAEMON_ACTION
17601
--------------------------------------------------------
1373 dpurdie 17602
 
17603
  CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,
17604
												 enumActionTypeName IN VARCHAR2,
17605
		                                         nUserId IN NUMBER,
17606
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL  ) IS
17607
/* ---------------------------------------------------------------------------
17608
    Version: 3.0
17609
   --------------------------------------------------------------------------- */
17610
 
17611
    ActionTypeId NUMBER;
17612
 
17613
BEGIN
17614
 
17615
    -- Get Action Type FK
17616
    SELECT act.ACTTYPE_ID INTO ActionTypeId
17617
      FROM ACTION_TYPE act
17618
     WHERE act.NAME = enumActionTypeName;
17619
 
17620
 
17621
    INSERT INTO DAEMON_ACTION_LOG
17622
    VALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );
17623
 
17624
 
17625
END Log_Daemon_Action;
1374 dpurdie 17626
/
17627
--------------------------------------------------------
17628
--  DDL for Procedure UPDATE_MISC_VIEW
17629
--------------------------------------------------------
1373 dpurdie 17630
 
17631
  CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS
17632
/******************************************************************************
17633
   NAME:       UPDATE_MISC_VIEW
17634
   PURPOSE:    
17635
 
17636
   REVISIONS:
17637
   Ver        Date        Author           Description
17638
   ---------  ----------  ---------------  ------------------------------------
17639
   1.0        16/03/2007          1. Created this procedure.
17640
 
17641
   NOTES:
17642
 
17643
   Automatically available Auto Replace Keywords:
17644
      Object Name:     UPDATE_MISC_VIEW
17645
      Sysdate:         16/03/2007
17646
      Date and Time:   16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AM
17647
      Username:         (set in TOAD Options, Procedure Editor)
17648
      Table Name:       (set in the "New PL/SQL Object" dialog)
17649
 
17650
******************************************************************************/
17651
   CURSOR view_cur /*Create a record set to store the ripple data*/
17652
   IS
17653
   	 SELECT pkg.pkg_id, rc.base_view_id 
17654
	 FROM package_versions pv, packages pkg, release_content rc
17655
	 where rc.rtag_id = 2362
17656
	 and rc.pv_id = pv.pv_id
17657
	 and pv.pkg_id = pkg.pkg_id;
17658
   view_rec   view_cur%ROWTYPE;
17659
 
17660
 
17661
 
17662
BEGIN
17663
   OPEN view_cur;
17664
 
17665
   FETCH view_cur
17666
    INTO view_rec;
17667
 
17668
   WHILE view_cur%FOUND
17669
   LOOP
17670
 
17671
 
17672
	   update release_content
17673
	   set base_view_id = view_rec.base_view_id
17674
	   where rtag_id = 8027
17675
	   and pv_id IN 
17676
	   (
17677
	   	select pv.pv_id from release_content rc, package_versions pv
17678
		where rc.rtag_id = 8027
17679
		and pv.pv_id = rc.pv_id
17680
		and pv.pkg_id = view_rec.pkg_id 
17681
 
17682
	   );
17683
 
17684
 
17685
 
17686
 
17687
 
17688
 
17689
 
17690
 
17691
 
17692
   FETCH view_cur
17693
   		 INTO view_rec;
17694
   END LOOP;	 
17695
 
17696
 
17697
 
17698
 
17699
 
17700
END UPDATE_MISC_VIEW; 
1374 dpurdie 17701
/
17702
--------------------------------------------------------
17703
--  DDL for Procedure CHECK_NEW_PATCHES
17704
--------------------------------------------------------
1373 dpurdie 17705
 
17706
  CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (
17707
   nrtagid   IN   release_content.rtag_id%TYPE
17708
)
17709
IS
17710
/* ---------------------------------------------------------------------------
17711
    Version: 3.0
17712
   --------------------------------------------------------------------------- */
17713
BEGIN
17714
   /*--------------- Business Rules Here -------------------*/
17715
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
17716
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
17717
   END IF
17718
 
17719
   /*-------------------------------------------------------*/
17720
   UPDATE release_content rc
17721
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
17722
    WHERE rc.pv_id IN (
17723
             SELECT prod.pv_id
17724
               FROM (SELECT   pp.pv_id AS orig_parent_id,
17725
                              COUNT (*) AS num_of_patches
17726
                         FROM release_content rc, package_patches pp
17727
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17728
                     GROUP BY pp.pv_id) orig,
17729
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
17730
                              COUNT (*) AS num_of_patches
17731
                         FROM release_content rc,
17732
                              package_patches pp,
17733
                              package_dependencies dep,
17734
                              package_versions pv,
17735
                              package_patches prodpp
17736
                        WHERE rc.pv_id = pp.pv_id
17737
                          AND rc.rtag_id = nrtagid
17738
                          AND pp.patch_id = dep.dpv_id
17739
                          AND dep.pv_id = pv.pv_id
17740
                          AND pv.is_patch = 'Y'
17741
                          AND pv.dlocked = 'Y'
17742
                          AND prodpp.patch_id = dep.pv_id
17743
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
17744
                    release_content rc
17745
              WHERE orig.orig_parent_id = prod.pv_id
17746
                AND orig.num_of_patches != prod.num_of_patches
17747
                AND rc.rtag_id = nrtagid
17748
                AND rc.pv_id = prod.pv_id
17749
                AND rc.pkg_state = 0
17750
             UNION
17751
             SELECT   prodpp.pv_id
17752
                 FROM release_content rc,
17753
                      package_patches pp,
17754
                      package_dependencies dep,
17755
                      package_versions pv,
17756
                      package_patches prodpp
17757
                WHERE rc.pv_id = pp.pv_id
17758
                  AND rc.rtag_id = nrtagid
17759
                  AND pp.patch_id = dep.dpv_id
17760
                  AND dep.pv_id = pv.pv_id
17761
                  AND pv.is_patch = 'Y'
17762
                  AND pv.dlocked = 'Y'
17763
                  AND prodpp.patch_id = dep.pv_id
17764
             GROUP BY prodpp.pv_id, pp.pv_id
17765
             MINUS
17766
             SELECT   pp.pv_id
17767
                 FROM release_content rc, package_patches pp
17768
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17769
             GROUP BY pp.pv_id);
17770
END check_new_patches;
1374 dpurdie 17771
/
17772
--------------------------------------------------------
17773
--  DDL for Procedure CLEAN_ADVISORY_RIPPLE
17774
--------------------------------------------------------
1373 dpurdie 17775
 
17776
  CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)
17777
IS
17778
/******************************************************************************
17779
   NAME:       clean_advisory_ripple
17780
 
17781
   PURPOSE:    To delete entries from the advisory_ripple table based upon
17782
               an RTAG_ID only
17783
 
17784
               This is a tidy-up operation performed against the advisory_ripple
17785
               table, ensuring that the table does not have rtag_id/pv_id
17786
               combinations that cannot be found in the release's wip/pending/release
17787
               tabs.
17788
 
17789
******************************************************************************/
17790
BEGIN
17791
   -- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.
17792
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
17793
   -- work_in_progress, planned, or release_content table.
17794
   -- NOTE: Planned operations that represent pending additive/subtractive merge
17795
   -- operations are ignored because they have not been approved yet and so
17796
   -- cannot be said to be "in the release".
17797
   DELETE FROM advisory_ripple
17798
         WHERE rtag_id = nrtagid
17799
           AND pv_id not in
17800
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
17801
                 UNION
17802
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
17803
                 UNION
17804
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
17805
               );
17806
END clean_advisory_ripple;
1374 dpurdie 17807
/
17808
--------------------------------------------------------
17809
--  DDL for Procedure NEW_PATCH
17810
--------------------------------------------------------
1373 dpurdie 17811
 
17812
  CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17813
 	   	  		  					  	NNparent_id IN NUMBER,
17814
                                        sPatchIdList IN VARCHAR2,
17815
										NNuser_id IN NUMBER ) IS
17816
/* ---------------------------------------------------------------------------
17817
    Version: 3.5
17818
   --------------------------------------------------------------------------- */
17819
 
17820
    patchPv_id    NUMBER;
17821
	parPkg_id	  NUMBER;
17822
    LastInstallOrder NUMBER;
17823
    isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
17824
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
17825
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
17826
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
17827
	oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17828
 
17829
	CURSOR parent_cur IS
17830
        SELECT pv.*, pkg.pkg_name
17831
          FROM package_versions pv,
17832
		       packages pkg
17833
         WHERE pv.pv_id = NNparent_id
17834
		   AND pv.pkg_id = pkg.pkg_id;
17835
    parent_rec parent_cur%ROWTYPE;
17836
 
17837
    CURSOR patch_cur IS
17838
        SELECT pv.*, pg.pkg_name
17839
          FROM package_versions pv,
17840
		       packages pg
17841
         WHERE pv.pkg_id = parPkg_id
17842
		   AND pv.pkg_version = SSpatch_version
17843
		   AND pv.pkg_id = pg.pkg_id;
17844
    patch_rec patch_cur%ROWTYPE;
17845
 
17846
	CURSOR releases_cur IS
17847
        SELECT rc.pv_id
17848
		  FROM release_content rc
17849
		 WHERE rc.pv_id = patch_rec.pv_id;
17850
    releases_rec releases_cur%ROWTYPE;
17851
 
17852
 
17853
BEGIN
17854
 
17855
	-- Get Last Install Order
17856
    SELECT Count(*) INTO LastInstallOrder
17857
	  FROM PACKAGE_PATCHES pp
17858
	 WHERE pp.PV_ID = NNparent_id;
17859
 
17860
 
17861
    -- Get parent details
17862
	OPEN parent_cur;
17863
    FETCH parent_cur INTO parent_rec;
17864
	parPkg_id := parent_rec.pkg_id;
17865
 
17866
 
17867
	-- Find if patch exists in database
17868
    OPEN patch_cur;
17869
    FETCH patch_cur INTO patch_rec;
17870
 
17871
 
17872
    -- Parent must be official
17873
    IF parent_rec.dlocked = 'Y' THEN
17874
 
17875
	    IF patch_cur%NOTFOUND
17876
	    THEN
17877
        	isPatchDlocked := 'N';
17878
 
17879
	        -- Create new patch version --
17880
	        SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
17881
 
17882
 
17883
	        Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
17884
 
17885
	        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 )
17886
				   VALUES (
17887
						   patchPv_id,
17888
	                       parPkg_id,
17889
	                       SSpatch_version,
17890
	                       isPatchDlocked,
17891
	                       ORA_SYSDATE,
17892
	                       NNuser_id,
17893
	                       ORA_SYSDATETIME,
17894
	                       NNuser_id,
17895
	                       SSV_MM,
17896
	                       SSV_NMM,
17897
	                       SSV_EXT,
17898
	                       parent_rec.src_path,
17899
	                       'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
17900
	                       NNuser_id,
17901
						   'Y',
17902
                           patchPv_id,
17903
						   parent_rec.bs_id,
17904
						   parent_rec.is_autobuildable,
17905
						   parent_rec.ripple_field
17906
 
17907
						   );
17908
 
17909
			INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17910
		    	   ( SELECT NNparent_id AS pv_id,
17911
				            pv.pv_id AS patch_id,
17912
	                        LastInstallOrder + 1 AS INSTALL_ORDER
17913
				       FROM package_versions pv
17914
					  WHERE pv.pv_id = patchPv_id
17915
					    AND pv.is_patch = 'Y' );
17916
 
17917
	        /* LOG ACTION */
17918
            Log_Action ( patchPv_id, 'new_version', NNuser_id,
17919
        			     'Patch version created: '|| SSpatch_version );
17920
 
17921
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17922
        			     'New patch created and attached: '|| SSpatch_version );
17923
 
17924
 
17925
	    ELSE
17926
 
17927
		    patchPv_id := patch_rec.pv_id;
17928
	    	isPatchDlocked := patch_rec.dlocked;
17929
 
17930
			-- Find if pv_id exists in release content (i.e. it cannot be a patch)
17931
		    OPEN releases_cur;
17932
		    FETCH releases_cur INTO releases_rec;
17933
 
17934
			IF releases_cur%NOTFOUND
17935
	   		THEN
17936
				-- This pv_id is trully a patch, hence add Y to column IS_PATCH
17937
				UPDATE package_versions SET
17938
					   is_patch = 'Y'
17939
					   WHERE pv_id = patchPv_id;
17940
 
17941
				INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17942
			    	   ( SELECT NNparent_id AS pv_id,
17943
					            pv.pv_id AS patch_id,
17944
	                            LastInstallOrder + 1 AS INSTALL_ORDER
17945
					       FROM package_versions pv
17946
						  WHERE pv.pv_id = patchPv_id
17947
						    AND pv.is_patch = 'Y' );
17948
 
17949
			END IF;
17950
 
17951
			CLOSE releases_cur;
17952
 
17953
            /* LOG ACTION */
17954
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17955
        			     'Patch version was found and attached: '|| SSpatch_version );
17956
 
17957
	    END IF;
17958
 
17959
 
17960
 
17961
 
17962
    END IF;
17963
 
17964
 
17965
 
17966
    /* Create Patch Dependencies */
17967
    oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
17968
 
17969
 
17970
    -- Make sure patch is unofficial before altering its dependencies
17971
    IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
17972
    	-- Delete Existing Dependencies
17973
        DELETE
17974
          FROM PACKAGE_DEPENDENCIES dep
17975
         WHERE dep.PV_ID = patchPv_id;
17976
 
17977
 
17978
        -- Insert new dependencies
17979
        INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
17980
        SELECT patchPv_id AS PV_ID,
17981
        	   pv.PV_ID AS DPV_ID,
17982
               parPkg_id AS PKG_ID,
17983
               pv.PKG_ID AS DPKG_ID,
17984
               'L' AS BUILD_TYPE
17985
          FROM PACKAGE_VERSIONS pv
17986
         WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
17987
 
17988
 
17989
    END IF;
17990
 
17991
 
17992
    CLOSE parent_cur;
17993
    CLOSE patch_cur;
17994
END New_Patch;
1374 dpurdie 17995
/
17996
--------------------------------------------------------
17997
--  DDL for Procedure UPDATE_PROCESSES
17998
--------------------------------------------------------
1373 dpurdie 17999
 
18000
  CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES" 
18001
IS
18002
 
18003
proc_id NUMBER;
18004
/******************************************************************************
18005
   NAME:       DELETE_DO_NOT_RIPPLE
18006
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18007
               IS RELEASED
18008
 
18009
   REVISIONS:
18010
   Ver        Date        Author           Description
18011
   ---------  ----------  ---------------  ------------------------------------
18012
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18013
 
18014
   NOTES:
18015
 
18016
   Automatically available Auto Replace Keywords:
18017
      Object Name:     DELETE_DO_NOT_RIPPLE
18018
      Sysdate:         21/04/2006
18019
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18020
      Username:         (set in TOAD Options, Procedure Editor)
18021
      Table Name:       (set in the "New PL/SQL Object" dialog)
18022
 
18023
******************************************************************************/
18024
   CURSOR ripple_cur
18025
   IS
18026
      select proc_id,  proc_name, run_as, pkg_owner, is_interface from processes;
18027
 
18028
   ripple_rec   ripple_cur%ROWTYPE;
18029
BEGIN
18030
   OPEN ripple_cur;
18031
 
18032
   FETCH ripple_cur
18033
    INTO ripple_rec;
18034
 
18035
   WHILE ripple_cur%FOUND
18036
   LOOP
18037
 
18038
 
18039
update deployment_manager.processes_config 
18040
set proc_id = ripple_rec.proc_id
18041
where pkg_health_tag = ripple_rec.proc_name
18042
and cmd_interface IS NULL
18043
and pkg_owner IS NULL
18044
and is_interface IS NULL; 
18045
 
18046
 
18047
      FETCH ripple_cur
18048
       INTO ripple_rec;
18049
   END LOOP;
18050
END UPDATE_PROCESSES;
1374 dpurdie 18051
/
18052
--------------------------------------------------------
18053
--  DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO
18054
--------------------------------------------------------
1373 dpurdie 18055
 
18056
  CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO" 
18057
IS
18058
/******************************************************************************
18059
   NAME:       DELETE_AUTOBUILD_FAILURE_INFO
18060
   PURPOSE:
18061
 
18062
   REVISIONS:
18063
   Ver        Date        Author           Description
18064
   ---------  ----------  ---------------  ------------------------------------
18065
   1.0        2/06/2006    Rupesh Solanki      1. Created this procedure.
18066
 
18067
   NOTES:
18068
 
18069
   Automatically available Auto Replace Keywords:
18070
      Object Name:     DELETE_AUTOBUILD_FAILURE_INFO
18071
      Sysdate:         2/06/2006
18072
      Date and Time:   2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AM
18073
      Username:         (set in TOAD Options, Procedure Editor)
18074
      Table Name:       (set in the "New PL/SQL Object" dialog)
18075
 
18076
******************************************************************************/
18077
BEGIN
18078
   DELETE FROM autobuild_failure
18079
         WHERE group_email_id NOT IN (SELECT group_email_id
18080
                                        FROM members_group);
18081
END delete_autobuild_failure_info;
1374 dpurdie 18082
/
18083
--------------------------------------------------------
18084
--  DDL for Procedure TEST
18085
--------------------------------------------------------
1373 dpurdie 18086
 
18087
  CREATE OR REPLACE PROCEDURE "TEST" 
18088
IS
18089
 
18090
proc_id NUMBER;
18091
/******************************************************************************
18092
   NAME:       DELETE_DO_NOT_RIPPLE
18093
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18094
               IS RELEASED
18095
 
18096
   REVISIONS:
18097
   Ver        Date        Author           Description
18098
   ---------  ----------  ---------------  ------------------------------------
18099
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18100
 
18101
   NOTES:
18102
 
18103
   Automatically available Auto Replace Keywords:
18104
      Object Name:     DELETE_DO_NOT_RIPPLE
18105
      Sysdate:         21/04/2006
18106
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18107
      Username:         (set in TOAD Options, Procedure Editor)
18108
      Table Name:       (set in the "New PL/SQL Object" dialog)
18109
 
18110
******************************************************************************/
18111
   CURSOR ripple_cur
18112
   IS
18113
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
18114
 
18115
   ripple_rec   ripple_cur%ROWTYPE;
18116
BEGIN
18117
   OPEN ripple_cur;
18118
 
18119
   FETCH ripple_cur
18120
    INTO ripple_rec;
18121
 
18122
   WHILE ripple_cur%FOUND
18123
   LOOP
18124
 
18125
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
18126
 
18127
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
18128
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
18129
 
18130
      FETCH ripple_cur
18131
       INTO ripple_rec;
18132
   END LOOP;
18133
END test;
1374 dpurdie 18134
/
18135
--------------------------------------------------------
18136
--  DDL for Procedure CLEAN_DO_NOT_RIPPLE
18137
--------------------------------------------------------
1373 dpurdie 18138
 
18139
  CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)
18140
IS
18141
/******************************************************************************
18142
   NAME:       clean_do_not_ripple
18143
 
18144
   PURPOSE:    To delete entries from the do_not_ripple table based upon
18145
               an RTAG_ID only
18146
 
18147
               This is a tidy-up operation performed against the do_not_ripple
18148
               table, ensuring that the table does not have rtag_id/pv_id
18149
               combinations that cannot be found in the release's wip/pending/release
18150
               tabs.
18151
 
18152
******************************************************************************/
18153
BEGIN
18154
   -- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.
18155
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
18156
   -- work_in_progress, planned, or release_content table.
18157
   -- NOTE: Planned operations that represent pending additive/subtractive merge
18158
   -- operations are ignored because they have not been approved yet and so
18159
   -- cannot be said to be "in the release".
18160
   DELETE FROM do_not_ripple
18161
         WHERE rtag_id = nrtagid
18162
           AND pv_id not in
18163
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
18164
                 UNION
18165
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
18166
                 UNION
18167
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
18168
               );
18169
END clean_do_not_ripple;
1374 dpurdie 18170
/
18171
--------------------------------------------------------
18172
--  DDL for Procedure REBUILD_ENVIRONMENT
18173
--------------------------------------------------------
1373 dpurdie 18174
 
18175
  CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS
18176
 
18177
/* ---------------------------------------------------------------------------
18178
    Version: 3.3
18179
   --------------------------------------------------------------------------- */
18180
    rowCnt NUMBER := 0;
18181
    iteration NUMBER := 2;          -- Iterations counter
18182
    maxIterations NUMBER := 50;    -- Maximum number of iterations allowed.
18183
                                    -- This will prevent infinite loops if cyrcular dependencies are found
18184
    sessionNum NUMBER;
18185
BEGIN
18186
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18187
 
18188
 
18189
    -- Redo Patch Ignore warnings
18190
    Ignore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );
18191
 
18192
 
18193
    Level_One_Conflicts ( NNrtag_id, sessionNum );
18194
 
18195
    LOOP
18196
        Level_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );
18197
        iteration := iteration + 1;
18198
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18199
    END LOOP;
18200
 
18201
    Update_Package_States ( NNrtag_id, sessionNum );
18202
 
18203
    DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;
18204
 
18205
    -- Flag Packages with New Patches Available
18206
    Check_New_Patches ( NNrtag_id );
18207
 
18208
	Clean_Do_Not_Ripple( NNrtag_id );
18209
 
18210
 
18211
	/* Circular Dependency Flag */
18212
    /*
18213
	IF iteration > maxIterations
18214
	THEN
18215
		UPDATE release_tags SET
18216
		   	   circular_dependency = 'Y'
18217
		 WHERE rtag_id = NNrtag_id;
18218
	ELSE
18219
		UPDATE release_tags SET
18220
		   	   circular_dependency = NULL
18221
		 WHERE rtag_id = NNrtag_id;
18222
	END IF;
18223
    */
18224
END Rebuild_Environment;
1374 dpurdie 18225
/
18226
--------------------------------------------------------
18227
--  DDL for Procedure TEST_MARCO
18228
--------------------------------------------------------
1373 dpurdie 18229
 
18230
  CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS
18231
/******************************************************************************
18232
   NAME:       TEST_MARCO
18233
   PURPOSE:    
18234
 
18235
   REVISIONS:
18236
   Ver        Date        Author           Description
18237
   ---------  ----------  ---------------  ------------------------------------
18238
   1.0        2/03/2007          1. Created this procedure.
18239
 
18240
   NOTES:
18241
 
18242
   Automatically available Auto Replace Keywords:
18243
      Object Name:     TEST_MARCO
18244
      Sysdate:         2/03/2007
18245
      Date and Time:   2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PM
18246
      Username:         (set in TOAD Options, Procedure Editor)
18247
      Table Name:       (set in the "New PL/SQL Object" dialog)
18248
 
18249
******************************************************************************/
18250
 
18251
parPv_id    NUMBER;
18252
parPkg_id   NUMBER;
18253
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18254
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18255
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18256
BEGIN
18257
 
18258
SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18259
 
18260
        /* LOG ACTION */
18261
        Log_Action ( parPv_id, 'new_version', 3764,
18262
        			 'New package version: '|| parPv_id || '.' );
18263
 
18264
        Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );
18265
 
18266
     -- Clone Package Version Details --
18267
            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,
18268
                                           src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )
18269
                SELECT parPv_id         AS pv_id,
18270
                       pv.pkg_id        AS pkg_id,
18271
                       parPv_id || '.'    AS pkg_version,
18272
                       'N'              AS dlocked,
18273
                       Ora_Sysdate      AS created_stamp,
18274
                       3764        AS creator_id,
18275
                       Ora_Sysdatetime  AS modified_stamp,
18276
                       3764        AS modifier_id,
18277
                       SSV_MM          AS V_MM,
18278
                       SSV_NMM         AS V_NMM,
18279
                       SSV_EXT          AS V_EXT,
18280
                       pv.src_path,
18281
                       pv.pv_description,
18282
                       pv.PV_OVERVIEW,
18283
                       112982 	AS LAST_PV_ID,
18284
                       pv.owner_id,
18285
					   pv.BUILD_TYPE,
18286
					   pv.IS_BUILD_ENV_REQUIRED,
18287
					   pv.bs_id,
18288
					   pv.is_autobuildable,
18289
					   pv.IS_DEPLOYABLE
18290
                  FROM PACKAGE_VERSIONS pv
18291
                 WHERE pv.pv_id = 112982;		
18292
 
18293
Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );
18294
 
18295
 
18296
END TEST_MARCO;
1374 dpurdie 18297
/
18298
--------------------------------------------------------
18299
--  DDL for Procedure LOG_ACTION_BULK
18300
--------------------------------------------------------
1373 dpurdie 18301
 
18302
  CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,
18303
										 	  enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18304
                                         	  nUserId IN ACTION_LOG.USER_ID%TYPE,
18305
										 	  sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18306
/* ---------------------------------------------------------------------------
18307
    Version: 3.0
18308
   --------------------------------------------------------------------------- */
18309
 
18310
    ActionTypeId NUMBER;
18311
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18312
 
18313
BEGIN
18314
 
18315
    oPvIdCollector := IN_LIST_NUMBER ( nPvIdList );
18316
 
18317
    -- Get Action Type FK
18318
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18319
      FROM ACTION_TYPE act
18320
     WHERE act.NAME = enumActionTypeName;
18321
 
18322
    -- Log Action
18323
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18324
    SELECT nUserId,
18325
    	   ORA_SYSDATETIME,
18326
           pv.PV_ID,
18327
           sAdditionalComments,
18328
           ActionTypeId
18329
      FROM PACKAGE_VERSIONS pv
18330
     WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18331
 
18332
 
18333
END Log_Action_Bulk;
1374 dpurdie 18334
/
18335
--------------------------------------------------------
18336
--  DDL for Procedure CLONED_PACKAGE_PROCESSES
18337
--------------------------------------------------------
1373 dpurdie 18338
 
18339
  CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES" 
18340
IS
18341
 
18342
proc_id NUMBER;
18343
/******************************************************************************
18344
   NAME:       DELETE_DO_NOT_RIPPLE
18345
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18346
               IS RELEASED
18347
 
18348
   REVISIONS:
18349
   Ver        Date        Author           Description
18350
   ---------  ----------  ---------------  ------------------------------------
18351
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18352
 
18353
   NOTES:
18354
 
18355
   Automatically available Auto Replace Keywords:
18356
      Object Name:     DELETE_DO_NOT_RIPPLE
18357
      Sysdate:         21/04/2006
18358
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18359
      Username:         (set in TOAD Options, Procedure Editor)
18360
      Table Name:       (set in the "New PL/SQL Object" dialog)
18361
 
18362
******************************************************************************/
18363
   CURSOR ripple_cur
18364
   IS
18365
      select distinct proc_id, prod_id from deployment_manager.processes_config;
18366
 
18367
   ripple_rec   ripple_cur%ROWTYPE;
18368
BEGIN
18369
   OPEN ripple_cur;
18370
 
18371
   FETCH ripple_cur
18372
    INTO ripple_rec;
18373
 
18374
   WHILE ripple_cur%FOUND
18375
   LOOP
18376
 
18377
 
18378
 
18379
insert into package_processes (PROC_ID, PV_ID) 
18380
values( ripple_rec.proc_id, ripple_rec.prod_id);
18381
 
18382
      FETCH ripple_cur
18383
       INTO ripple_rec;
18384
   END LOOP;
18385
END CLONED_PACKAGE_PROCESSES;
1374 dpurdie 18386
/
18387
--------------------------------------------------------
18388
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2
18389
--------------------------------------------------------
1373 dpurdie 18390
 
18391
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
18392
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18393
                                                          NNuser_id IN NUMBER,
18394
                                                          retPV_ID OUT NUMBER,
18395
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
18396
/* ---------------------------------------------------------------------------
18397
    Version: 4.0
18398
   --------------------------------------------------------------------------- */
18399
 
18400
    parPkg_id   NUMBER;
18401
    parPv_id    NUMBER;
18402
    cloneFrom_pv_id NUMBER;
18403
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18404
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18405
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18406
 
18407
    CURSOR packages_cur IS
18408
        SELECT pkg_id FROM PACKAGES
18409
        WHERE pkg_name = SSpkg_name;
18410
    packages_rec packages_cur%ROWTYPE;
18411
 
18412
    CURSOR package_versions_cur IS
18413
        SELECT pv_id FROM PACKAGE_VERSIONS
18414
        WHERE pkg_id = parPkg_id
18415
        AND pkg_version = SSpkg_version;
18416
    package_versions_rec package_versions_cur%ROWTYPE;
18417
 
18418
    CURSOR clone_package_versions_cur IS
18419
        SELECT MAX(pv_id) AS pv_id
18420
          FROM PACKAGE_VERSIONS
18421
         WHERE pkg_id = parPkg_id
18422
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
18423
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
18424
 
18425
BEGIN
18426
    /* -------------------------------------------- */
18427
    /* Find if pkg_name exists and seed if required */
18428
    /* -------------------------------------------- */
18429
    OPEN packages_cur;
18430
    FETCH packages_cur INTO packages_rec;
18431
 
18432
    IF packages_cur%NOTFOUND
18433
    THEN
18434
        /* INSERT into packages table */
18435
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
18436
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
18437
 
18438
    ELSE
18439
        parPkg_id := packages_rec.pkg_id;
18440
 
18441
    END IF;
18442
 
18443
    CLOSE packages_cur;
18444
 
18445
 
18446
 
18447
    /* ---------------------------------------------------- */
18448
    /* Find if package_version exists and seed if required  */
18449
    /* ---------------------------------------------------- */
18450
    OPEN package_versions_cur;
18451
    FETCH package_versions_cur INTO package_versions_rec;
18452
 
18453
    IF package_versions_cur%NOTFOUND
18454
    THEN
18455
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18456
 
18457
        /* LOG ACTION */
18458
        Log_Action ( parPv_id, 'new_version', NNuser_id,
18459
        			 'New package version: '|| SSpkg_version );
18460
 
18461
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
18462
 
18463
 
18464
 
18465
 
18466
 
18467
            /* CLONE details from similar version  OR  from nCloneFromPvId */
18468
			IF ( NOT nCloneFromPvId IS NULL) THEN
18469
            	cloneFrom_pv_id := nCloneFromPvId;
18470
			ELSE
18471
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
18472
			END IF;
18473
 
18474
            -- Clone Package Version Details --
18475
            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,
18476
                                           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 )
18477
                SELECT parPv_id         AS pv_id,
18478
                       parPkg_id        AS pkg_id,
18479
                       SSpkg_version    AS pkg_version,
18480
                       'N'              AS dlocked,
18481
                       Ora_Sysdate      AS created_stamp,
18482
                       NNuser_id        AS creator_id,
18483
                       Ora_Sysdatetime  AS modified_stamp,
18484
                       NNuser_id        AS modifier_id,
18485
                       SSV_MM           AS V_MM,
18486
                       SSV_NMM          AS V_NMM,
18487
                       SSV_EXT          AS V_EXT,
18488
                       pv.src_path,
18489
                       pv.pv_description,
18490
                       pv.PV_OVERVIEW,
18491
                       cloneFrom_pv_id 	AS LAST_PV_ID,
18492
                       pv.owner_id,
18493
					   pv.BUILD_TYPE,
18494
					   pv.IS_BUILD_ENV_REQUIRED,
18495
					   pv.bs_id,
18496
					   pv.is_autobuildable,
18497
					   pv.IS_DEPLOYABLE,
18498
					   pv.ripple_field
18499
                  FROM PACKAGE_VERSIONS pv
18500
                 WHERE pv.pv_id = cloneFrom_pv_id;
18501
 
18502
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
18503
 
18504
        retPV_ID := parPv_id;
18505
 
18506
    ELSE
18507
        retPV_ID := package_versions_rec.pv_id;
18508
 
18509
    END IF;
18510
 
18511
    CLOSE package_versions_cur;
18512
 
18513
 
18514
 
18515
 
18516
END Seed_Package_Names_Versions2;
1374 dpurdie 18517
/
18518
--------------------------------------------------------
18519
--  DDL for Procedure BUILD_TREE
18520
--------------------------------------------------------
1373 dpurdie 18521
 
18522
  CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,
18523
	   	  		  					     retSessionNum OUT NUMBER ) IS
18524
 
18525
/* ---------------------------------------------------------------------------
18526
    Version: 3.0.0
18527
   --------------------------------------------------------------------------- */
18528
    rowCnt 			NUMBER := 0;						-- Iterations counter
18529
    iteration 		NUMBER := 1;                  -- Maximum number of iterations allowed.
18530
    maxIterations 	NUMBER := 50;      	  	-- This will prevent infinite loops if cyrcular dependencies are found
18531
	UP_THE_TREE 	CONSTANT NUMBER DEFAULT 1;
18532
	DOWN_THE_TREE 	CONSTANT NUMBER DEFAULT -1;
18533
    sessionNum 		NUMBER;
18534
	levelNum		NUMBER;
18535
 
18536
BEGIN
18537
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18538
 
18539
	/*
18540
	||	   Start UP THE TREE
18541
	*/
18542
 
18543
 
18544
	/* Packages with no dependencies */    
18545
    INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18546
		SELECT sessionNum AS SESSION_NUM,
18547
			   iteration AS LEVEL_NUM,
18548
			   UP_THE_TREE AS DIRECTION,
18549
			   rc.pv_id, pv.pkg_id, pv.v_ext
18550
		  FROM release_content rc,
18551
		  	   package_versions pv
18552
		 WHERE rc.rtag_id = nRtag_id
18553
		   AND rc.pv_id = pv.pv_id
18554
		 MINUS
18555
		SELECT sessionNum AS SESSION_NUM, 
18556
			   iteration AS LEVEL_NUM,
18557
			   UP_THE_TREE AS DIRECTION,
18558
			   dep.pv_id, pv.pkg_id, pv.v_ext
18559
		  FROM package_dependencies dep,
18560
		  	   package_versions pv
18561
		 WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )
18562
		   AND dep.pv_id = pv.pv_id;
18563
 
18564
 
18565
	/* Browse UP the build tree */	   
18566
	iteration := iteration + 1;
18567
    LOOP
18568
 
18569
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18570
			SELECT DISTINCT 
18571
			       sessionNum AS SESSION_NUM,
18572
			       iteration AS LEVEL_NUM,
18573
				   UP_THE_TREE AS DIRECTION, 
18574
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18575
			  FROM (  
18576
			        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
18577
			          FROM package_dependencies dep,
18578
			               release_content rc,
18579
						   package_versions pv,
18580
						   package_versions dpv
18581
			         WHERE dep.pv_id = rc.pv_id
18582
			           AND rc.rtag_id = nRtag_id
18583
					   AND dep.pv_id = pv.pv_id
18584
					   AND dep.dpv_id = dpv.pv_id
18585
					) rdep,
18586
					temp_tree_browse ttb
18587
			 WHERE rdep.dpkg_id  = ttb.pkg_id
18588
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')
18589
			   AND ttb.SESSION_NUM = sessionNum
18590
			   AND ttb.LEVEL_NUM = iteration - 1	
18591
			MINUS
18592
			/* Packages with all depencencies NOT matched */  
18593
			SELECT DISTINCT 
18594
			       sessionNum AS SESSION_NUM,
18595
			       iteration AS LEVEL_NUM, 
18596
				   UP_THE_TREE AS DIRECTION,
18597
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18598
			  FROM (  
18599
			        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
18600
			          FROM package_dependencies dep,
18601
			               release_content rc,
18602
						   package_versions pv,
18603
						   package_versions dpv
18604
			         WHERE dep.pv_id = rc.pv_id
18605
			           AND rc.rtag_id = nRtag_id
18606
					   AND dep.pv_id = pv.pv_id
18607
					   AND dep.dpv_id = dpv.pv_id
18608
					) rdep,
18609
					(
18610
					 SELECT tb.*
18611
					   FROM temp_tree_browse tb
18612
					  WHERE tb.SESSION_NUM = sessionNum
18613
					) ttb
18614
			 WHERE rdep.dpkg_id  = ttb.pkg_id (+)
18615
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')
18616
			   AND ttb.SESSION_NUM IS NULL;
18617
 
18618
		rowCnt := SQL%ROWCOUNT;
18619
		IF rowCnt > 0 THEN
18620
           iteration := iteration + 1;
18621
		END IF;
18622
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18623
    END LOOP;
18624
 
18625
	/*---------------------------------------------------------------------------------------------------------------------*/
18626
 
18627
	/*     Check for unresolved dependencies
18628
	||  
18629
	*/
18630
	/* UNRESOLVED */
18631
	 SELECT COUNT(*) INTO rowCnt
18632
	   FROM (
18633
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18634
			  FROM release_content rc,
18635
			  	   package_versions pv
18636
			 WHERE rc.rtag_id = nRtag_id
18637
			   AND rc.pv_id = pv.pv_id	   
18638
			MINUS
18639
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18640
			  FROM temp_tree_browse ttb
18641
			 WHERE ttb.session_num = sessionNum
18642
			);
18643
 
18644
 
18645
 
18646
	 IF rowCnt > 0 
18647
	 THEN
18648
	 	 /*     Circular dependencies detected.
18649
		 ||     Try to resolve build order from the top now.
18650
		 ||		Start DOWN THE TREE
18651
		 */
18652
 
18653
		iteration := 0; 
18654
		 /* Top Level packages */	
18655
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )	   
18656
			SELECT sessionNum AS SESSION_NUM,
18657
			       iteration AS LEVEL_NUM,
18658
				   DOWN_THE_TREE AS DIRECTION,
18659
				   pv.pv_id, pv.pkg_id, pv.v_ext
18660
			  FROM (		   
18661
					/* Packages no one depends on ( Top level packages )*/
18662
					( 
18663
					/* All parents*/ 
18664
					SELECT pv.pkg_id, pv.v_ext
18665
			          FROM package_dependencies dep,
18666
			               release_content rc,
18667
						   package_versions pv
18668
			         WHERE dep.pv_id = rc.pv_id
18669
			           AND rc.rtag_id = nRtag_id
18670
					   AND dep.pv_id = pv.pv_id
18671
					 MINUS
18672
					 /* All children */
18673
					SELECT dpv.pkg_id, dpv.v_ext
18674
			          FROM package_dependencies dep,
18675
			               release_content rc,
18676
						   package_versions dpv
18677
			         WHERE dep.pv_id = rc.pv_id
18678
			           AND rc.rtag_id = nRtag_id
18679
					   AND dep.dpv_id = dpv.pv_id
18680
					 ) 
18681
					 MINUS
18682
					/* Packages with resolved dependencies from UP THE TREE */ 
18683
					SELECT ttb.pkg_id, ttb.v_ext
18684
					  FROM temp_tree_browse ttb
18685
					 WHERE ttb.session_num = sessionNum
18686
				  ) tpkg,
18687
				  package_versions pv,
18688
				  release_content rc
18689
			WHERE rc.rtag_id = nRtag_id
18690
			  AND rc.pv_id = pv.pv_id
18691
			  AND tpkg.pkg_id = pv.pkg_id
18692
			  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18693
 
18694
 
18695
		 /* Keep taking packages which no one depende on */			  
18696
		 iteration := iteration - 1;  
18697
		 LOOP	  
18698
			   INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18699
					SELECT sessionNum AS SESSION_NUM,
18700
					       iteration AS LEVEL_NUM,
18701
					       DOWN_THE_TREE AS DIRECTION,
18702
					       pv.pv_id, pv.pkg_id, pv.v_ext
18703
					  FROM (		   
18704
					 	/* All Unresolved */
18705
					 	(
18706
					 	SELECT pv.pkg_id, pv.v_ext
18707
					 	  FROM release_content rc,
18708
					 	  	   package_versions pv
18709
					 	 WHERE rc.rtag_id = nRtag_id
18710
					 	   AND rc.pv_id = pv.pv_id	   
18711
					 	MINUS
18712
					 	SELECT ttb.pkg_id, ttb.v_ext
18713
					 	  FROM temp_tree_browse ttb
18714
					 	 WHERE ttb.session_num = sessionNum
18715
					 	)
18716
					 	 MINUS
18717
					 	(  
18718
					 	 /* Children of Unresolved */  
18719
					 	SELECT dpv.pkg_id, dpv.V_EXT
18720
					 	  FROM (
18721
					 			SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18722
					 			  FROM release_content rc,
18723
					 			  	   package_versions pv
18724
					 			 WHERE rc.rtag_id = nRtag_id
18725
					 			   AND rc.pv_id = pv.pv_id	   
18726
					 			MINUS
18727
					 			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18728
					 			  FROM temp_tree_browse ttb
18729
					 			 WHERE ttb.session_num = sessionNum
18730
					 		   ) unr,
18731
					 		   package_dependencies dep,
18732
					 		   package_versions dpv
18733
					 	 WHERE unr.pv_id = dep.pv_id
18734
					 	   AND dep.dpv_id = dpv.pv_id
18735
					 	 )  
18736
					   ) tpkg,
18737
					   package_versions pv,
18738
					   release_content rc
18739
					WHERE rc.rtag_id = nRtag_id
18740
					  AND rc.pv_id = pv.pv_id
18741
					  AND tpkg.pkg_id = pv.pkg_id
18742
					  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18743
 
18744
            rowCnt := SQL%ROWCOUNT;
18745
        	IF rowCnt > 0 THEN
18746
	           iteration := iteration - 1;
18747
			END IF;
18748
            EXIT WHEN (rowCnt < 1);
18749
     	END LOOP;
18750
 
18751
	 END IF;
18752
 
18753
 
18754
	/*---------------------------------------------------------------------------------------------------------------------*/
18755
 
18756
	/* 
18757
	|| 	 Save results from temp table
18758
	*/	
18759
	/* Clean up build_order table */
18760
	DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;
18761
 
18762
	/* Save UP THE TREE */
18763
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18764
		SELECT nRtag_id AS rtag_id,
18765
			   ttb.level_num AS step_num, 
18766
			   ttb.PV_ID
18767
		  FROM temp_tree_browse ttb
18768
		 WHERE ttb.session_num = sessionNum
18769
		   AND ttb.direction = UP_THE_TREE;	
18770
 
18771
	/*Get last step_num */
18772
	SELECT MAX(ttb.level_num) + 1 INTO levelNum
18773
	FROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;
18774
 
18775
	/* UNRESOLVED */
18776
	 SELECT COUNT(*) INTO rowCnt
18777
	   FROM (
18778
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18779
			  FROM release_content rc,
18780
			  	   package_versions pv
18781
			 WHERE rc.rtag_id = nRtag_id
18782
			   AND rc.pv_id = pv.pv_id	   
18783
			MINUS
18784
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18785
			  FROM temp_tree_browse ttb
18786
			 WHERE ttb.session_num = sessionNum
18787
			);
18788
 
18789
 
18790
	IF rowCnt > 0
18791
	THEN
18792
		/* Save unresolved packages */
18793
 		INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )
18794
		    SELECT  nRtag_id AS rtag_id,
18795
				    levelNum AS step_num, 
18796
				    upv.PV_ID,
18797
					'Y' AS UNRESOLVED
18798
			   FROM (
18799
					 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18800
					  FROM release_content rc,
18801
					  	   package_versions pv
18802
					 WHERE rc.rtag_id = nRtag_id
18803
					   AND rc.pv_id = pv.pv_id	   
18804
					MINUS
18805
					SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18806
					  FROM temp_tree_browse ttb
18807
					 WHERE ttb.session_num = sessionNum
18808
					) upv;
18809
	END IF;	
18810
 
18811
	/* Save DOWN THE TREE */
18812
	levelNum := 1000;
18813
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18814
		SELECT nRtag_id AS rtag_id,
18815
			   levelNum + ttb.level_num  AS step_num, 
18816
			   ttb.PV_ID
18817
		  FROM temp_tree_browse ttb
18818
		 WHERE ttb.session_num = sessionNum
18819
		   AND ttb.direction = DOWN_THE_TREE;
18820
 
18821
 
18822
	/*---------------------------------------------------------------------------------------------------------------------*/
18823
 
18824
	/* Clean up temp table */
18825
	DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;
18826
 
18827
	retSessionNum := sessionNum;
18828
END Build_Tree;
1374 dpurdie 18829
/
18830
--------------------------------------------------------
18831
--  DDL for Procedure CLEAR_ADVISORY_RIPPLE
18832
--------------------------------------------------------
1373 dpurdie 18833
 
18834
  CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18835
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
18836
											 nUserId IN NUMBER ) IS
18837
/* ---------------------------------------------------------------------------
18838
    Version: 4.0
18839
   --------------------------------------------------------------------------- */
18840
 
18841
BEGIN
18842
 
18843
    -- Clear Advisory Ripple Package
18844
    DELETE FROM ADVISORY_RIPPLE
18845
	WHERE PV_ID = nPvId
18846
	AND RTAG_ID = nRtagId;
18847
 
18848
    /* LOG ACTION */
18849
   	Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );
18850
 
18851
	/*Rebuild_Environment(nRtagId);*/
18852
 
18853
END Clear_Advisory_Ripple;
1374 dpurdie 18854
/
18855
--------------------------------------------------------
18856
--  DDL for Procedure REMOVE_RELEASE_CONTENT
18857
--------------------------------------------------------
1373 dpurdie 18858
 
18859
  CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,
18860
													 sNotPvIdList IN VARCHAR2,
18861
                                                     nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
18862
/* ---------------------------------------------------------------------------
18863
    Version: 3.0
18864
   --------------------------------------------------------------------------- */
18865
 
18866
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18867
oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18868
 
18869
BEGIN
18870
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
18871
    oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );
18872
 
18873
    -- Delete From Release Content
18874
    DELETE
18875
      FROM RELEASE_CONTENT
18876
	 WHERE rtag_id = nRTagId
18877
	   AND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
18878
	   AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18879
 
18880
 
18881
 
18882
END Remove_Release_Content;
1374 dpurdie 18883
/
18884
--------------------------------------------------------
18885
--  DDL for Procedure UPDATE_PACKAGE_DEPENDENCY
18886
--------------------------------------------------------
1373 dpurdie 18887
 
18888
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,
18889
                                                        SSdep_name IN PACKAGES.pkg_name%TYPE,
18890
                                                        SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18891
                                                        CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,
18892
                                                        NNuser_id IN NUMBER,
18893
                                                        NNdelete_old_dependency IN NUMBER
18894
                                                       ) IS
18895
/* ---------------------------------------------------------------------------
18896
    Version: 3.3
18897
   --------------------------------------------------------------------------- */
18898
 
18899
    retPV_ID NUMBER;
18900
    SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;
18901
	DepIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18902
    PvIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18903
    NNpkg_id NUMBER;
18904
    NNdpkg_id NUMBER;
18905
 
18906
BEGIN
18907
    --- Seed database with package_name and version if required ---
18908
    Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );
18909
 
18910
    -- get v_ext,pkg_id of current dependency
18911
    SELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatch
18912
      FROM PACKAGE_VERSIONS
18913
     WHERE pv_id = retPV_ID;
18914
 
18915
    -- get pkg_id of parent package
18916
    SELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatch
18917
      FROM PACKAGE_VERSIONS
18918
     WHERE pv_id = NNpv_id;
18919
 
18920
 
18921
	IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR
18922
    	( (PvIsPatch IS NOT NULL) )THEN
18923
 
18924
	    IF NNdelete_old_dependency = 1 THEN
18925
	        /* Used for CUSTOM dependency add/edit */
18926
 
18927
	        --- Remove old dependency ---
18928
            IF (PvIsPatch IS NULL) THEN
18929
            	-- Do it for Packages
18930
		        DELETE FROM PACKAGE_DEPENDENCIES
18931
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18932
		            (
18933
		            SELECT dep.*
18934
		              FROM PACKAGE_DEPENDENCIES dep,
18935
		                   PACKAGE_VERSIONS dpv,
18936
		                   PACKAGE_VERSIONS pv
18937
		             WHERE dep.dpv_id = dpv.pv_id
18938
		               AND dep.pv_id = NNpv_id
18939
		               AND pv.pv_id = retPV_ID
18940
		               AND dpv.pkg_id = pv.pkg_id
18941
		               AND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|')
18942
		            );
18943
            ELSE
18944
            	-- Do it for Patches
18945
                DELETE FROM PACKAGE_DEPENDENCIES
18946
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18947
		            (
18948
		            SELECT dep.*
18949
		              FROM PACKAGE_DEPENDENCIES dep
18950
		             WHERE dep.dpv_id = retPV_ID
18951
		               AND dep.pv_id = NNpv_id
18952
		            );
18953
			END IF;
18954
 
18955
	    END IF;
18956
 
18957
	    /* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */
18958
 
18959
	    --- Add new dependency ---
18960
	    INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )
18961
	    VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );
18962
 
18963
	END IF;
18964
 
18965
END Update_Package_Dependency;
1374 dpurdie 18966
/
18967
--------------------------------------------------------
18968
--  DDL for Procedure LOG_ACTION
18969
--------------------------------------------------------
1373 dpurdie 18970
 
18971
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18972
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18973
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
18974
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18975
/* ---------------------------------------------------------------------------
18976
    Version: 3.0
18977
   --------------------------------------------------------------------------- */
18978
 
18979
    ActionTypeId NUMBER;
18980
 
18981
BEGIN
18982
 
18983
    -- Get Action Type FK
18984
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18985
      FROM ACTION_TYPE act
18986
     WHERE act.NAME = enumActionTypeName;
18987
 
18988
 
18989
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18990
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
18991
 
18992
 
18993
END Log_Action;
1374 dpurdie 18994
/
18995
--------------------------------------------------------
18996
--  DDL for Procedure REMOVE_PATCH
18997
--------------------------------------------------------
1373 dpurdie 18998
 
18999
  CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
19000
										   nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
19001
                                           nUserId IN NUMBER ) IS
19002
/* ---------------------------------------------------------------------------
19003
    Version: 4.0
19004
   --------------------------------------------------------------------------- */
19005
 
19006
PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19007
 
19008
CURSOR curPatch IS
19009
	SELECT pp.PV_ID,
19010
		   pp.PATCH_ID,
19011
	       ROWNUM AS NEW_INSTALL_ORDER
19012
	  FROM PACKAGE_PATCHES pp
19013
	 WHERE pp.PV_ID = nPvId
19014
	ORDER BY pp.INSTALL_ORDER;
19015
recPatch curPatch%ROWTYPE;
19016
 
19017
BEGIN
19018
 
19019
	 -- Delete Patch
19020
     DELETE
19021
       FROM PACKAGE_PATCHES pp
19022
      WHERE pp.PV_ID = nPvId
19023
        AND pp.PATCH_ID = nPatchId;
19024
 
19025
 
19026
	-- Redo Install Order
19027
    OPEN curPatch;
19028
	FETCH curPatch INTO recPatch;
19029
 
19030
	WHILE curPatch%FOUND
19031
	LOOP
19032
 
19033
		UPDATE PACKAGE_PATCHES pp SET
19034
			pp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDER
19035
		WHERE pp.PV_ID = nPvId
19036
		  AND pp.PATCH_ID = recPatch.PATCH_ID;
19037
 
19038
		FETCH curPatch INTO recPatch;
19039
	END LOOP;
19040
 
19041
	CLOSE curPatch;
19042
 
19043
 
19044
 
19045
 
19046
    /* LOG ACTION */
19047
    SELECT pv.PKG_VERSION INTO PatchVersion
19048
      FROM PACKAGE_VERSIONS pv
19049
     WHERE pv.PV_ID = nPatchId;
19050
 
19051
   	Log_Action ( nPvId, 'patch_remove', nUserId,
19052
   			     'Version: '|| PatchVersion );
19053
 
19054
END Remove_Patch;
1374 dpurdie 19055
/
19056
--------------------------------------------------------
19057
--  DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP
19058
--------------------------------------------------------
1373 dpurdie 19059
 
19060
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
19061
	   	  		  								  	   	 sBuildEnvIdList IN VARCHAR2,
19062
														 nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE 
19063
														 ) IS
19064
/* ---------------------------------------------------------------------------
19065
    Last Modified: Rupesh Solanki
19066
	Version: 3.0.1
19067
   --------------------------------------------------------------------------- */
19068
 
19069
   nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();   
19070
   BsId NUMBER;
19071
   HackBsId NUMBER;
19072
 
19073
 
19074
BEGIN
19075
 
19076
   nBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );
19077
 
19078
   -- Delete Current Build Env settings
19079
   DELETE FROM PACKAGE_BUILD_ENV
19080
   WHERE pv_id = nPvId;
19081
 
19082
   -- Delet Current Package Build Info Settings
19083
   DELETE FROM PACKAGE_BUILD_INFO
19084
   WHERE pv_id = nPvId;
19085
 
19086
   -- Reset flag to N
19087
   UPDATE PACKAGE_VERSIONS SET
19088
	   IS_BUILD_ENV_REQUIRED = 'N'
19089
   WHERE PV_ID = nPvId;
19090
 
19091
 
19092
   -- Set new Build Env
19093
   IF NOT sBuildEnvIdList IS NULL THEN
19094
	FOR i IN 1..nBsCollector.COUNT
19095
	LOOP   
19096
 
19097
	BsId := nBsCollector(i);
19098
 
19099
	IF nBuildStandard = 2 THEN
19100
	   IF BsId = 1 THEN
19101
	   	  HackBsId := 11;
19102
	   ELSE
19103
	   	  HackBsId := 12;
19104
	   END IF;
19105
 
19106
   	  -- Insert into PACKAGE_BUILD_ENV
19107
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19108
	  SELECT nPvId AS PV_ID,
19109
	  		 be.BE_ID
19110
	    FROM BUILD_ENVIRONMENTS be
19111
	   WHERE be.BE_ID IN ( HackBsId );
19112
 
19113
   	  -- Insert into PACKAGE_BUILD_INFO
19114
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19115
	  SELECT nPvId AS PV_ID,
19116
	  		 be.BM_ID
19117
	    FROM BUILD_MACHINES be
19118
	   WHERE be.BM_ID IN ( BsId );						 
19119
 
19120
	   -- Set flag to Y
19121
	   UPDATE PACKAGE_VERSIONS SET
19122
		   IS_BUILD_ENV_REQUIRED = 'Y'
19123
	   WHERE PV_ID = nPvId;	
19124
 
19125
 
19126
	ELSE
19127
 
19128
   	  -- Insert into PACKAGE_BUILD_ENV
19129
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19130
	  SELECT nPvId AS PV_ID,
19131
	  		 be.BE_ID
19132
	    FROM BUILD_ENVIRONMENTS be
19133
	   WHERE be.BE_ID IN ( BsId );
19134
 
19135
   	  -- Insert into PACKAGE_BUILD_INFO
19136
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19137
	  SELECT nPvId AS PV_ID,
19138
	  		 be.BM_ID
19139
	    FROM BUILD_MACHINES be
19140
	   WHERE be.BM_ID IN ( BsId );						 
19141
 
19142
	   -- Set flag to Y
19143
	   UPDATE PACKAGE_VERSIONS SET
19144
		   IS_BUILD_ENV_REQUIRED = 'Y'
19145
	   WHERE PV_ID = nPvId;
19146
 
19147
	END IF;  
19148
 
19149
 
19150
	END LOOP;	   
19151
 
19152
   END IF;
19153
 
19154
 
19155
END Set_Package_Build_Env_Temp;
1374 dpurdie 19156
/
19157
--------------------------------------------------------
19158
--  DDL for Procedure UPDATE_RUNTIME_DEPENDENCY
19159
--------------------------------------------------------
1373 dpurdie 19160
 
19161
  CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,
19162
				   	  		  						    NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,
19163
				   	  		  						    SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19164
													    SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,
19165
													    SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,
19166
													    NNuser_id IN NUMBER ) IS
19167
/* ---------------------------------------------------------------------------
19168
    Version: 3.0.1
19169
   --------------------------------------------------------------------------- */
19170
 
19171
    retRTD_ID	NUMBER;
19172
	CURSOR rtd_cur IS
19173
	    SELECT pv.pkg_version, pkg.pkg_name
19174
		  FROM runtime_dependencies rtd,
19175
		       package_versions pv,
19176
			   packages pkg
19177
		 WHERE rtd.rtd_id = pv.pv_id
19178
		   AND pv.pkg_id = pkg.pkg_id
19179
		   AND rtd.pv_id = NNpv_id
19180
		   AND rtd.rtd_id = NNrtd_id;
19181
	   rtd_rec rtd_cur%ROWTYPE;
19182
 
19183
	CURSOR old_rtd_cur IS
19184
	    SELECT pv.pv_id
19185
		  FROM package_versions pv
19186
		 WHERE pv.pkg_id IN ( SELECT rtdpv.pkg_id
19187
		 	   			 	    FROM package_versions rtdpv
19188
							   WHERE rtdpv.pv_id = NNrtd_id )
19189
		   AND pv.pkg_version = SSrtd_version;
19190
	old_rtd_rec old_rtd_cur%ROWTYPE;
19191
 
19192
 
19193
BEGIN
19194
 
19195
    -- Get current runtime dependency details
19196
	OPEN rtd_cur;
19197
    FETCH rtd_cur INTO rtd_rec;
19198
 
19199
 
19200
 
19201
 
19202
	IF rtd_rec.pkg_version != SSrtd_version THEN
19203
           -- Version has changed, hence create new runtime dependency --
19204
	    /* NOTE: You must create new version as updating just a version will affect
19205
		        all packages using this runtime dependency and user does not expect that.
19206
		        It is safer to create new version */
19207
		OPEN old_rtd_cur;
19208
		FETCH old_rtd_cur INTO old_rtd_rec;
19209
 
19210
 
19211
		IF old_rtd_cur%NOTFOUND
19212
		THEN
19213
			-- Version not found, hence Create New version --
19214
    		Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );
19215
 
19216
			-- Update runtime dependency table --
19217
			UPDATE runtime_dependencies SET
19218
				   rtd_id = retRTD_ID,
19219
				   rtd_url = SSrtd_url,
19220
				   rtd_comments = SSrtd_comments
19221
			 WHERE pv_id = NNpv_id
19222
			   AND rtd_id = NNrtd_id;
19223
 
19224
		ELSE
19225
			-- Update runtime dependency table --
19226
			UPDATE runtime_dependencies SET
19227
				   rtd_id = old_rtd_rec.pv_id,
19228
				   rtd_url = SSrtd_url,
19229
				   rtd_comments = SSrtd_comments
19230
			 WHERE pv_id = NNpv_id
19231
			   AND rtd_id = NNrtd_id;
19232
 
19233
		END IF;
19234
 
19235
 
19236
		CLOSE old_rtd_cur;
19237
 
19238
	ELSE
19239
		--  Version has not changed, hence update everithing except	version --
19240
		UPDATE runtime_dependencies SET
19241
			   rtd_url = SSrtd_url,
19242
			   rtd_comments = SSrtd_comments
19243
		 WHERE pv_id = NNpv_id
19244
		   AND rtd_id = NNrtd_id;
19245
 
19246
 
19247
 
19248
	END IF;
19249
 
19250
 
19251
	CLOSE rtd_cur;
19252
 
19253
END Update_Runtime_Dependency;
1374 dpurdie 19254
/
19255
--------------------------------------------------------
19256
--  DDL for Procedure SET_ADVISORY_RIPPLE
19257
--------------------------------------------------------
1373 dpurdie 19258
 
19259
  CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19260
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
19261
											 nUserId IN NUMBER ) IS
19262
/* ---------------------------------------------------------------------------
19263
    Version: 4.0
19264
   --------------------------------------------------------------------------- */
19265
 
19266
BEGIN
19267
 
19268
    -- Set Advisory Ripple Package
19269
    INSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)
19270
	VALUES (nRtagId, nPvId);
19271
 
19272
    /* LOG ACTION */
19273
   	Log_Action ( nPvId, 'set_advisory_ripple', nUserId );
19274
 
19275
	/*Rebuild_Environment(nRtagId);*/
19276
 
19277
END Set_Advisory_Ripple;
1374 dpurdie 19278
/
19279
--------------------------------------------------------
19280
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS
19281
--------------------------------------------------------
1373 dpurdie 19282
 
19283
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
19284
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19285
                                                          NNuser_id IN NUMBER,
19286
                                                          retPV_ID OUT NUMBER,
19287
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
19288
/* ---------------------------------------------------------------------------
19289
    Version: 4.0
19290
   --------------------------------------------------------------------------- */
19291
 
19292
    parPkg_id   NUMBER;
19293
    parPv_id    NUMBER;
19294
    cloneFrom_pv_id NUMBER;
19295
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19296
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19297
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19298
 
19299
    CURSOR packages_cur IS
19300
        SELECT pkg_id FROM PACKAGES
19301
        WHERE pkg_name = SSpkg_name;
19302
    packages_rec packages_cur%ROWTYPE;
19303
 
19304
    CURSOR package_versions_cur IS
19305
        SELECT pv_id FROM PACKAGE_VERSIONS
19306
        WHERE pkg_id = parPkg_id
19307
        AND pkg_version = SSpkg_version;
19308
    package_versions_rec package_versions_cur%ROWTYPE;
19309
 
19310
    CURSOR clone_package_versions_cur IS
19311
        SELECT MAX(pv_id) AS pv_id
19312
          FROM PACKAGE_VERSIONS
19313
         WHERE pkg_id = parPkg_id
19314
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
19315
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
19316
 
19317
BEGIN
19318
    /* -------------------------------------------- */
19319
    /* Find if pkg_name exists and seed if required */
19320
    /* -------------------------------------------- */
19321
    OPEN packages_cur;
19322
    FETCH packages_cur INTO packages_rec;
19323
 
19324
    IF packages_cur%NOTFOUND
19325
    THEN
19326
        /* INSERT into packages table */
19327
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
19328
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
19329
 
19330
    ELSE
19331
        parPkg_id := packages_rec.pkg_id;
19332
 
19333
    END IF;
19334
 
19335
    CLOSE packages_cur;
19336
 
19337
 
19338
 
19339
    /* ---------------------------------------------------- */
19340
    /* Find if package_version exists and seed if required  */
19341
    /* ---------------------------------------------------- */
19342
    OPEN package_versions_cur;
19343
    FETCH package_versions_cur INTO package_versions_rec;
19344
 
19345
    IF package_versions_cur%NOTFOUND
19346
    THEN
19347
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
19348
 
19349
        /* LOG ACTION */
19350
        Log_Action ( parPv_id, 'new_version', NNuser_id,
19351
        			 'New package version: '|| SSpkg_version );
19352
 
19353
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19354
 
19355
        /* Find similar pkg_name + ext to clone from */
19356
        OPEN clone_package_versions_cur;
19357
        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
19358
 
19359
 
19360
        IF NOT clone_package_versions_rec.pv_id IS NULL
19361
        THEN
19362
            /* CLONE details from similar version  OR  from nCloneFromPvId */
19363
			IF ( NOT nCloneFromPvId IS NULL) THEN
19364
            	cloneFrom_pv_id := nCloneFromPvId;
19365
			ELSE
19366
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
19367
			END IF;
19368
 
19369
            -- Clone Package Version Details --
19370
            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,
19371
                                           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  )
19372
                SELECT parPv_id         AS pv_id,
19373
                       parPkg_id        AS pkg_id,
19374
                       SSpkg_version    AS pkg_version,
19375
                       'N'              AS dlocked,
19376
                       Ora_Sysdate      AS created_stamp,
19377
                       NNuser_id        AS creator_id,
19378
                       Ora_Sysdatetime  AS modified_stamp,
19379
                       NNuser_id        AS modifier_id,
19380
                       SSV_MM           AS V_MM,
19381
                       SSV_NMM          AS V_NMM,
19382
                       SSV_EXT          AS V_EXT,
19383
                       pv.src_path,
19384
                       pv.pv_description,
19385
                       pv.PV_OVERVIEW,
19386
                       cloneFrom_pv_id 	AS LAST_PV_ID,
19387
                       pv.owner_id,
19388
					   pv.BUILD_TYPE,
19389
					   pv.IS_BUILD_ENV_REQUIRED,
19390
					   pv.BS_ID,
19391
					   pv.is_autobuildable,
19392
					   pv.IS_DEPLOYABLE, 
19393
					   pv.ripple_field
19394
                  FROM PACKAGE_VERSIONS pv
19395
                 WHERE pv.pv_id = cloneFrom_pv_id;
19396
 
19397
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
19398
 
19399
        ELSE
19400
            /* BRAND NEW version + ext */
19401
            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 )
19402
        	VALUES (
19403
                    parPv_id,
19404
                    parPkg_id,
19405
                    SSpkg_version,
19406
                    'N',
19407
                    Ora_Sysdate,
19408
                    NNuser_id,
19409
                    Ora_Sysdatetime,
19410
                    NNuser_id,
19411
                    SSV_MM,
19412
                    SSV_NMM,
19413
                    SSV_EXT,
19414
                    NNuser_id,
19415
                    parPv_id,
19416
					'M',
19417
					'b'
19418
                   );
19419
 
19420
        END IF;
19421
 
19422
        CLOSE clone_package_versions_cur;
19423
        retPV_ID := parPv_id;
19424
 
19425
    ELSE
19426
        retPV_ID := package_versions_rec.pv_id;
19427
 
19428
    END IF;
19429
 
19430
    CLOSE package_versions_cur;
19431
 
19432
 
19433
 
19434
 
19435
END Seed_Package_Names_Versions;
1374 dpurdie 19436
/
19437
--------------------------------------------------------
19438
--  DDL for Procedure RENAME_PACKAGE_VERSION
19439
--------------------------------------------------------
1373 dpurdie 19440
 
19441
  CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,
19442
                                                     SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19443
													 cBuildType IN CHAR,
19444
                                                     NNuser_id IN NUMBER,
19445
                                                     errMessage OUT VARCHAR2 ) IS
19446
/* ---------------------------------------------------------------------------
19447
    Version: 3.2
19448
   --------------------------------------------------------------------------- */
19449
 
19450
    sPackageVersion VARCHAR2(4000);
19451
	sLabel VARCHAR2(4000) := NULL;
19452
    OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19453
 
19454
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19455
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19456
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19457
 
19458
    CURSOR package_versions_cur IS
19459
        SELECT pv_id
19460
     	  FROM package_versions
19461
     	 WHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )
19462
     	   AND pkg_version = SSpkg_version;
19463
    package_versions_rec package_versions_cur%ROWTYPE;
19464
 
19465
 
19466
BEGIN
19467
 
19468
    /* ---------------------------------------------------- */
19469
    /* Find if package_version exists                       */
19470
    /* ---------------------------------------------------- */
19471
 
19472
	errMessage := NULL;
19473
 
19474
 
19475
	-- Get previous version
19476
	SELECT pv.PKG_VERSION INTO OldPkgVersion
19477
      FROM PACKAGE_VERSIONS pv
19478
     WHERE pv.PV_ID = NNpv_id;
19479
 
19480
 
19481
	sPackageVersion := SSpkg_version;
19482
 
19483
 
19484
	IF OldPkgVersion != sPackageVersion THEN
19485
 
19486
	    OPEN package_versions_cur;
19487
	    FETCH package_versions_cur INTO package_versions_rec;
19488
 
19489
	    IF package_versions_cur%NOTFOUND
19490
	    THEN
19491
 
19492
			-- Split current version in parts
19493
	    	Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19494
 
19495
 
19496
		    -- Automated built config
19497
			IF (cBuildType = 'A') THEN
19498
				sPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT;	-- Make sure that version is still unique
19499
			END IF;
19500
 
19501
 
19502
	        -- Packge version not found, hence rename it.
19503
	        UPDATE package_versions
19504
	           SET pkg_version = sPackageVersion,
19505
	               v_mm = SSV_MM,
19506
	               v_nmm = SSV_NMM,
19507
	               v_ext = SSV_EXT,
19508
	               modified_stamp = ORA_SYSDATETIME,
19509
	               modifier_id = NNuser_id,
19510
				   build_type = cBuildType,
19511
				   pkg_label = NULL
19512
	         WHERE pv_id = NNpv_id;
19513
 
19514
 
19515
			IF (cBuildType = 'A') THEN
19516
				sLabel := GET_AUTOMATED_LABEL( NNpv_id );
19517
				UPDATE PACKAGE_VERSIONS pv SET
19518
					pv.PKG_LABEL = sLabel
19519
		         WHERE pv_id = NNpv_id;
19520
			END IF;
19521
 
19522
			/* LOG ACTION */
19523
	      	Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );
19524
 
19525
	    ELSE
19526
	        -- Package version exists. Cannot proceed.
19527
	        errMessage := 'enum_MSG_VERSION_EXISTS';
19528
 
19529
	    END IF;
19530
 
19531
	    CLOSE package_versions_cur;
19532
 
19533
	END IF;
19534
 
19535
 
19536
 
19537
 
19538
END Rename_Package_Version;
1374 dpurdie 19539
/
19540
--------------------------------------------------------
19541
--  DDL for Procedure PAOLO_BUILD_TREE
19542
--------------------------------------------------------
1373 dpurdie 19543
 
19544
  CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) IS
19545
 
19546
    sessionNumber NUMBER := 0;
19547
    iteration NUMBER := 1; 
19548
    rowCnt NUMBER := 0;
19549
    maxIterations 	NUMBER := 50;
19550
 
19551
BEGIN
19552
 
19553
 
19554
    INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19555
    SELECT sessionNumber, iteration, rc.PV_ID
19556
      FROM RELEASE_CONTENT rc
19557
     WHERE rc.RTAG_ID = nRtag_id;
19558
 
19559
    iteration := iteration + 1;
19560
    LOOP
19561
 
19562
        INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19563
		SELECT sessionNumber,     
19564
               iteration,
19565
               dep.DPV_ID
19566
          FROM TEMP_TREE_BROWSE ttb,
19567
               PACKAGE_DEPENDENCIES dep
19568
         WHERE dep.PV_ID = ttb.PV_ID 
19569
           AND ttb.LEVEL_NUM = iteration - 1 
19570
 
19571
         MINUS  
19572
 
19573
        SELECT sessionNumber, iteration, ttb.PV_ID
19574
          FROM TEMP_TREE_BROWSE ttb;   
19575
 
19576
 
19577
 
19578
 
19579
		rowCnt := SQL%ROWCOUNT;
19580
		IF rowCnt > 0 THEN
19581
           iteration := iteration + 1;
19582
		END IF;
19583
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
19584
    END LOOP; 
19585
 
19586
END PAOLO_Build_Tree;
1374 dpurdie 19587
/
19588
--------------------------------------------------------
19589
--  DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE
19590
--------------------------------------------------------
1373 dpurdie 19591
 
19592
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,
19593
														  pnPv_id IN NUMBER,
19594
					                                      sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,
19595
														  sAcceptanceDate IN VARCHAR2,
19596
														  sAcceptedBy IN NUMBER,
19597
					                                      sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,
19598
														  cUpdateAcceptedStateOnly IN CHAR
19599
					                                     ) IS
19600
/* ---------------------------------------------------------------------------
19601
    Version: 3.0.0
19602
   --------------------------------------------------------------------------- */
19603
 
19604
 
19605
 
19606
BEGIN
19607
	IF cUpdateAcceptedStateOnly = 'Y'
19608
	THEN
19609
		--- Update Accepted State Only ---
19610
		IF ( sAccepted IS NULL )
19611
		THEN
19612
			-- Clear alleptance
19613
			UPDATE UNIT_TESTS SET
19614
		           TEST_ACCEPTED = NULL,
19615
		           ACCEPTANCE_DATE = NULL,
19616
				   ACCEPTED_BY = NULL,
19617
				   REVIEW_COMMENTS = NULL
19618
		     WHERE TEST_ID = pnTest_id
19619
		       AND PV_ID = pnPv_id;
19620
 
19621
	    ELSE
19622
			UPDATE UNIT_TESTS SET
19623
		           TEST_ACCEPTED = sAccepted,
19624
		           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19625
				   ACCEPTED_BY = sAcceptedBy
19626
		     WHERE TEST_ID = pnTest_id
19627
		       AND PV_ID = pnPv_id;
19628
 
19629
		END IF;
19630
 
19631
 
19632
	ELSE
19633
		--- Update Unit Test Acceptance ---
19634
	    UPDATE UNIT_TESTS SET
19635
	           TEST_ACCEPTED = sAccepted,
19636
			   REVIEW_COMMENTS = sReviewComments,
19637
	           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19638
			   ACCEPTED_BY = sAcceptedBy
19639
	     WHERE TEST_ID = pnTest_id
19640
	       AND PV_ID = pnPv_id;
19641
 
19642
	END IF;
19643
 
19644
END Update_Unit_Test_Acceptance;
1374 dpurdie 19645
/
19646
--------------------------------------------------------
19647
--  DDL for Procedure NEW_ADDITIONAL_NOTE
19648
--------------------------------------------------------
1373 dpurdie 19649
 
19650
  CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,
19651
                                                  psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
19652
                                                  psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
19653
                                                  pnUser_id IN NUMBER,
19654
                                                  outErrCode OUT NUMBER
19655
                                                 ) IS
19656
/* ---------------------------------------------------------------------------
19657
    Version: 3.0.0
19658
   --------------------------------------------------------------------------- */
19659
 
19660
    newID NUMBER;
19661
 
19662
	CURSOR an_duplicate_cur IS
19663
        SELECT note_id
19664
          FROM ADDITIONAL_NOTES
19665
         WHERE pv_id = pnPv_id
19666
           AND note_title = psNote_title;
19667
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
19668
 
19669
BEGIN
19670
	outErrCode := -1;		-- Set default return error code to ERROR state
19671
 
19672
	OPEN an_duplicate_cur;
19673
    FETCH an_duplicate_cur INTO an_duplicate_rec;
19674
 
19675
    IF an_duplicate_cur%NOTFOUND
19676
    THEN
19677
		/* No duplicate titles */
19678
		-- Get new ID --
19679
    	SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;
19680
 
19681
		--- Add Additional Note ---
19682
	    INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user  )
19683
	    VALUES (  newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );
19684
		outErrCode := 0;		-- Set return to SUCCESS
19685
	END IF;
19686
 
19687
	CLOSE an_duplicate_cur;
19688
END New_Additional_Note;
1374 dpurdie 19689
/
19690
--------------------------------------------------------
19691
--  DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES
19692
--------------------------------------------------------
1373 dpurdie 19693
 
19694
  CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS
19695
 
19696
/******************************************************************************
19697
   NAME:       INSERT_MULTIPLE_STICKY_NOTES
19698
   PURPOSE:    
19699
 
19700
   REVISIONS:
19701
   Ver        Date        Author           Description
19702
   ---------  ----------  ---------------  ------------------------------------
19703
   1.0        6/12/2006          1. Created this procedure.
19704
 
19705
   NOTES:
19706
 
19707
   Automatically available Auto Replace Keywords:
19708
      Object Name:     INSERT_MULTIPLE_STICKY_NOTES
19709
      Sysdate:         6/12/2006
19710
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
19711
      Username:         (set in TOAD Options, Procedure Editor)
19712
      Table Name:       (set in the "New PL/SQL Object" dialog)
19713
 
19714
******************************************************************************/
19715
 
19716
	CURSOR curInfo IS
19717
    SELECT PV_ID
19718
	FROM PACKAGE_BUILD_ENV
19719
	WHERE BE_ID IN (11, 12);
19720
    recInfo curInfo%ROWTYPE;
19721
 
19722
 
19723
BEGIN
19724
 
19725
	OPEN curInfo;
19726
    FETCH curInfo INTO recInfo;
19727
 
19728
	WHILE curInfo%FOUND
19729
	LOOP
19730
 
19731
		INSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )
19732
		VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );
19733
 
19734
		FETCH curInfo INTO recInfo;
19735
 
19736
	END LOOP;
19737
 
19738
	CLOSE curInfo;
19739
 
19740
 
19741
 
19742
 
19743
END INSERT_MULTIPLE_STICKY_NOTES;
1374 dpurdie 19744
/
19745
--------------------------------------------------------
19746
--  DDL for Procedure TOUCH_RELEASE_BULK
19747
--------------------------------------------------------
1373 dpurdie 19748
 
19749
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS
19750
/* ---------------------------------------------------------------------------
19751
    Version: 3.0
19752
   --------------------------------------------------------------------------- */
19753
 
19754
oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19755
 
19756
BEGIN
19757
	 oRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );
19758
 
19759
	 -- Touch Release for Rebuild
19760
     UPDATE RELEASE_TAGS rt SET
19761
     	rt.REBUILD_ENV = 'Y',
19762
        rt.REBUILD_STAMP = 0
19763
      WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19764
 
19765
 
19766
END Touch_Release_Bulk;
1374 dpurdie 19767
/
19768
--------------------------------------------------------
19769
--  DDL for Procedure UPDATE_DEPRECATION_STATE
19770
--------------------------------------------------------
1373 dpurdie 19771
 
19772
  CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) AS
19773
 
19774
recno NUMBER;
19775
 
19776
CURSOR deprecate_cur IS
19777
 
19778
SELECT rc.pv_id
19779
FROM release_content rc
19780
WHERE rtag_id = nnrtag_id
19781
 AND deprecated_state IN(7);
19782
 
19783
deprecate_rec deprecate_cur % rowtype;
19784
 
19785
BEGIN
19786
 
19787
  OPEN deprecate_cur;
19788
 
19789
  FETCH deprecate_cur
19790
  INTO deprecate_rec;
19791
 
19792
  WHILE deprecate_cur % FOUND
19793
  LOOP
19794
 
19795
    SELECT COUNT(*)
19796
    INTO recno
19797
    FROM package_dependencies pd,
19798
      release_content rc
19799
    WHERE pd.pv_id = deprecate_rec.pv_id
19800
     AND rc.pv_id = pd.dpv_id
19801
     AND rc.rtag_id = nnrtag_id
19802
     AND rc.deprecated_state IN(6,   7);
19803
 
19804
    IF recno = 0 THEN
19805
 
19806
      UPDATE release_content
19807
      SET pkg_id = NULL, deprecated_state = NULL
19808
      WHERE pv_id = deprecate_rec.pv_id
19809
       AND rtag_id = nnrtag_id;
19810
 
19811
    END IF;
19812
 
19813
    FETCH deprecate_cur
19814
    INTO deprecate_rec;
19815
  END LOOP;
19816
 
19817
END;
1374 dpurdie 19818
/
19819
--------------------------------------------------------
19820
--  DDL for Procedure IGNORE_DEPENDENCY_WARNINGS
19821
--------------------------------------------------------
1373 dpurdie 19822
 
19823
  CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,
19824
                                                         nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,
19825
                                                         sIgnoreIdList IN VARCHAR2,
19826
                                                         bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,
19827
                                                         nUserId IN NUMBER DEFAULT NULL ) IS
19828
/* ---------------------------------------------------------------------------
19829
    Updates the ignore warnings table - this is really two functions in one.
19830
 
19831
    1) One function updates the table based on a list of dependent PV_IDs and a parent PV_ID
19832
       and is called from the RM website's SetIgnoreWarnings() function after a user changes
19833
       the ignore warnings checkboxes and submits the form.
19834
       This can (at time of writing this) only be done within releases that are not build
19835
       daemon enabled. The ignore warnings feature is a feature we would like to see the end
19836
       of in an ideal world.
19837
       The SetIgnoreWarnings() website function now calls Touch_Release so there is no need to
19838
       do so in this stored procedure, thereby making this stored procedure much more precise in
19839
       that it only updates the ignore_warnings table (action log table too although that is just
19840
       a log and doesn't affect any subsequent business rules behaviour) and it cares nothing
19841
       about website presentation layer states, etc.
19842
 
19843
    2) The other function updates the table for out of sync dependencies that have in fact
19844
       been satisfied by patches made to some other product in the release.
19845
       This seems to be a seldom used feature in current projects.
19846
       It is probably the most often taken path through this function given that it occurs when
19847
       this function is called from Rebuild_Environment, and that is called in many circumstances
19848
       from the RM website whenever the seems to be a possibility that the state of a package
19849
       in a release might have changed and therefore affects the state of other packages in
19850
       that same release.
19851
 
19852
    Parameter Usage:
19853
                        when called from    | when called from
19854
                        Rebuild_Environment | SetIgnoreWarnings()
19855
                        stored procedure.   | in the Website
19856
      --------------------------------------+----------------------------
19857
      nRtagId           RTAG_ID             | RTAG_ID
19858
      nPvId             NULL                | PV_ID
19859
      sIgnoreIdList     NULL                | list of dependent PV_ID's
19860
      bDoPatchIgnore    TRUE                | FALSE
19861
      nUserId           NULL                | current user ID
19862
   --------------------------------------------------------------------------- */
19863
 
19864
oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19865
ReleaseLocation VARCHAR2(4000);
19866
ActionTypeId NUMBER;
19867
 
19868
BEGIN
19869
 
19870
   IF (NOT bDoPatchIgnore) THEN
19871
      /* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website
19872
      */
19873
      oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );
19874
 
19875
 
19876
      /* Log Action */
19877
      -- Get Release Location
19878
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
19879
        FROM PROJECTS proj,
19880
             RELEASE_TAGS rt
19881
       WHERE rt.PROJ_ID = proj.PROJ_ID
19882
         AND rt.RTAG_ID = nRtagId;
19883
 
19884
      -- Get Action Type Id for IGNORE_ON
19885
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19886
        FROM ACTION_TYPE act
19887
       WHERE act.NAME = 'ignore_on';
19888
 
19889
      -- Get Ignored (Current MINUS Old)
19890
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19891
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19892
        FROM (
19893
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19894
                FROM PACKAGE_VERSIONS pv
19895
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19896
              MINUS
19897
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19898
                FROM IGNORE_WARNINGS igw
19899
               WHERE igw.RTAG_ID = nRtagId
19900
                 AND igw.PV_ID = nPvId
19901
             ) qry,
19902
             PACKAGE_VERSIONS pv,
19903
             PACKAGES pkg,
19904
             RELEASE_CONTENT rc,
19905
             PACKAGE_VERSIONS rpv
19906
       WHERE pv.PKG_ID = pkg.PKG_ID
19907
         AND rc.RTAG_ID = nRtagId
19908
         AND rc.PV_ID = rpv.PV_ID
19909
         AND rpv.PKG_ID = pv.PKG_ID
19910
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19911
         AND qry.DPV_ID = pv.PV_ID;
19912
 
19913
 
19914
      -- Get Action Type Id for IGNORE_OFF
19915
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19916
        FROM ACTION_TYPE act
19917
       WHERE act.NAME = 'ignore_off';
19918
 
19919
      -- Get UnIgnored (Old MINUS Current)
19920
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19921
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19922
        FROM (
19923
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19924
                FROM IGNORE_WARNINGS igw
19925
               WHERE igw.RTAG_ID = nRtagId
19926
                 AND igw.PV_ID = nPvId
19927
              MINUS
19928
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19929
                FROM PACKAGE_VERSIONS pv
19930
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19931
             ) qry,
19932
             PACKAGE_VERSIONS pv,
19933
             PACKAGES pkg,
19934
             RELEASE_CONTENT rc,
19935
             PACKAGE_VERSIONS rpv
19936
       WHERE pv.PKG_ID = pkg.PKG_ID
19937
         AND rc.RTAG_ID = nRtagId
19938
         AND rc.PV_ID = rpv.PV_ID
19939
         AND rpv.PKG_ID = pv.PKG_ID
19940
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19941
         AND qry.DPV_ID = pv.PV_ID;
19942
 
19943
 
19944
      -- Delete Current Ignore Warnings
19945
      DELETE
19946
        FROM IGNORE_WARNINGS igw
19947
       WHERE igw.RTAG_ID = nRtagId
19948
         AND igw.PV_ID = nPvId
19949
         AND igw.IS_PATCH_IGNORE IS NULL;
19950
 
19951
 
19952
      IF (oIgnoreIdCollector.COUNT > 0) THEN
19953
         -- Insert Ignore Warnings
19954
         INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )
19955
         SELECT nRtagId,
19956
                nPvId,
19957
                pv.PV_ID AS DPV_ID
19958
           FROM PACKAGE_VERSIONS pv
19959
          WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19960
      END IF;
19961
 
19962
   ELSE
19963
      /* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */
19964
 
19965
      -- Delete Current Patch Ignore Warnings
19966
      DELETE
19967
        FROM IGNORE_WARNINGS igw
19968
       WHERE igw.RTAG_ID = nRtagId
19969
         AND igw.IS_PATCH_IGNORE = 'Y';
19970
 
19971
 
19972
      -- Delete Manual Ignores that need to be Patch Ignores
19973
      DELETE
19974
        FROM IGNORE_WARNINGS igw
19975
       WHERE ( RTAG_ID, PV_ID, DPV_ID ) IN
19976
             (
19977
              SELECT DISTINCT
19978
                     nRtagId,
19979
                     err.PV_ID,
19980
                     err.ERR_DPV AS DPV_ID
19981
               FROM  (
19982
                      /* Full Release Contents used for reference*/
19983
                      SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
19984
                        FROM release_content rel, package_versions rpv
19985
                       WHERE rel.pv_id = rpv.pv_id
19986
                         AND rtag_id = nRtagId
19987
                     ) frc,
19988
                     (
19989
                      /* DPV_IDs not fount in release*/
19990
                      SELECT dep.pv_id, dep.dpv_id AS err_dpv
19991
                        FROM package_dependencies dep
19992
                       WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19993
                         AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19994
                     ) err,
19995
                     (
19996
                      SELECT DISTINCT pp.PV_ID, dep.DPV_ID
19997
                        FROM PACKAGE_PATCHES pp,
19998
                             PACKAGE_DEPENDENCIES dep,
19999
                             RELEASE_CONTENT rc
20000
                       WHERE rc.RTAG_ID = nRtagId
20001
                         AND rc.PV_ID = pp.PV_ID
20002
                         AND dep.PV_ID = pp.PATCH_ID
20003
                     ) pp,
20004
                     package_versions errpkg,
20005
                     package_versions errpv
20006
               WHERE err.err_dpv = errpv.pv_id
20007
                 AND errpv.pkg_id = frc.pkg_id(+)
20008
                 AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20009
                 AND err.pv_id = errpkg.pv_id
20010
                 AND err.PV_ID = pp.PV_ID
20011
                 AND frc.PV_ID = pp.DPV_ID
20012
             );
20013
 
20014
      /*
20015
      ---------------------------------------------------
20016
      --  Make sure that select statement above and below are same
20017
      ---------------------------------------------------
20018
      */
20019
 
20020
      -- Insert Patch Ignores
20021
      INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )
20022
      SELECT DISTINCT
20023
             nRtagId,
20024
             err.PV_ID,
20025
             err.ERR_DPV AS DPV_ID,
20026
             'Y'
20027
        FROM (
20028
              /* Full Release Contents used for reference*/
20029
              SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
20030
                FROM release_content rel, package_versions rpv
20031
               WHERE rel.pv_id = rpv.pv_id
20032
                 AND rtag_id = nRtagId
20033
             ) frc,
20034
             (
20035
               /* DPV_IDs not fount in release*/
20036
               SELECT dep.pv_id, dep.dpv_id AS err_dpv
20037
                 FROM package_dependencies dep
20038
                WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20039
                  AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20040
             ) err,
20041
             (
20042
              SELECT DISTINCT pp.PV_ID, dep.DPV_ID
20043
                FROM PACKAGE_PATCHES pp,
20044
                     PACKAGE_DEPENDENCIES dep,
20045
                     RELEASE_CONTENT rc
20046
               WHERE rc.RTAG_ID = nRtagId
20047
                 AND rc.PV_ID = pp.PV_ID
20048
                 AND dep.PV_ID = pp.PATCH_ID
20049
             ) pp,
20050
             package_versions errpkg,
20051
             package_versions errpv
20052
       WHERE err.err_dpv = errpv.pv_id
20053
         AND errpv.pkg_id = frc.pkg_id(+)
20054
         AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20055
         AND err.pv_id = errpkg.pv_id
20056
         AND err.PV_ID = pp.PV_ID
20057
         AND frc.PV_ID = pp.DPV_ID;
20058
 
20059
    END IF;
20060
 
20061
END Ignore_Dependency_Warnings;
1374 dpurdie 20062
/
20063
--------------------------------------------------------
20064
--  DDL for Procedure UNDEPRECATE_PACKAGE
20065
--------------------------------------------------------
1373 dpurdie 20066
 
20067
  CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20068
	   	  		  								 nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
20069
	   	  		  							   	 nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
20070
											   	 nUserId IN NUMBER) IS
20071
 
20072
ext VARCHAR2(50);
20073
PvIdList VARCHAR2(32767);
20074
nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
20075
PvId NUMBER;
20076
sComments VARCHAR2(32767);
20077
 
20078
BEGIN
20079
 
20080
 
20081
 
20082
	--Extract the package extension
20083
	SELECT V_EXT into ext 
20084
	FROM PACKAGE_VERSIONS 
20085
	WHERE PV_ID = nPvId;
20086
 
20087
	--SELECT COMMENTS into sComments 
20088
	--FROM DEPRECATED_PACKAGES
20089
	--WHERE RTAG_ID = nRtagId
20090
	--AND V_EXT = ext
20091
	--AND PKG_ID = nPkgId;
20092
 
20093
	--SELECT PV_ID into PvIdList FROM
20094
	--RELEASE_CONTENT WHERE RTAG_ID = nRtagId
20095
	--AND PKG_STATE = 6
20096
	--AND PV_ID NOT IN nPvId;
20097
 
20098
 
20099
	IF ext IS NOT NULL THEN
20100
       -- Undeprecate Package
20101
       DELETE FROM DEPRECATED_PACKAGES 
20102
	   WHERE RTAG_ID = nRtagId 
20103
	   AND PKG_ID = nPkgId
20104
	   AND V_EXT = ext;	
20105
 
20106
		UPDATE RELEASE_CONTENT 
20107
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20108
		WHERE RTAG_ID = nRtagId
20109
		AND PV_ID IN (SELECT PV.PV_ID 
20110
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20111
					  WHERE PKG.PKG_ID = PV.PKG_ID
20112
					  AND PKG.PKG_ID = nPkgId
20113
					  AND PV.V_EXT = ext
20114
					  UNION
20115
					  SELECT DISTINCT
20116
	 	 		  	 		   qry.PV_ID
20117
							        FROM (
20118
									 	  SELECT dep.*,
20119
										  LEVEL AS LEVEL_NUM
20120
										  FROM PACKAGE_DEPENDENCIES dep
20121
	 								START WITH dep.DPV_ID IN ( nPvId )
20122
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20123
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20124
	 								) qry,
20125
									PACKAGES pkg,
20126
									PACKAGE_VERSIONS pv,
20127
									RELEASE_CONTENT rc
20128
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20129
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20130
 
20131
					 );	 
20132
 
20133
	ELSE
20134
       -- Undeprecate Package
20135
       DELETE FROM DEPRECATED_PACKAGES 
20136
	   WHERE RTAG_ID = nRtagId 
20137
	   AND PKG_ID = nPkgId
20138
	   AND V_EXT IS NULL;	
20139
 
20140
		UPDATE RELEASE_CONTENT 
20141
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20142
		WHERE RTAG_ID = nRtagId
20143
		AND PV_ID IN (SELECT PV.PV_ID 
20144
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20145
					  WHERE PKG.PKG_ID = PV.PKG_ID
20146
					  AND PKG.PKG_ID = nPkgId
20147
					  AND PV.V_EXT IS NULL
20148
					  UNION
20149
					  SELECT DISTINCT
20150
	 	 		  	 		   qry.PV_ID
20151
							        FROM (
20152
									 	  SELECT dep.*,
20153
										  LEVEL AS LEVEL_NUM
20154
										  FROM PACKAGE_DEPENDENCIES dep
20155
	 								START WITH dep.DPV_ID IN ( nPvId )
20156
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20157
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20158
	 								) qry,
20159
									PACKAGES pkg,
20160
									PACKAGE_VERSIONS pv,
20161
									RELEASE_CONTENT rc
20162
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20163
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20164
 
20165
					 );	 	   
20166
 
20167
	END IF;
20168
 
20169
	--IF PvIdList IS NOT NULL THEN
20170
 
20171
	 --  nIdCollector := IN_LIST_NUMBER ( PvIdList );
20172
 
20173
	 --  FOR i IN 1..nIdCollector.COUNT
20174
	 --  LOOP
20175
	--	   PvId := nIdCollector(i);
20176
 
20177
 
20178
 
20179
	--		Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );
20180
	--		END LOOP;
20181
	--END IF;
20182
 
20183
	Rebuild_environment(nRtagId);			 
20184
 
20185
 
20186
 
20187
END Undeprecate_Package;
1374 dpurdie 20188
/
20189
--------------------------------------------------------
20190
--  DDL for Procedure REMOVE_PACKAGE_INTEREST
20191
--------------------------------------------------------
1373 dpurdie 20192
 
20193
  CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
20194
	   	  		  								  	nPkgId IN PACKAGES.PKG_ID%TYPE,
20195
												  	nUserId IN NUMBER
20196
	   	  		  									) IS
20197
 
20198
/******************************************************************************
20199
   NAME:       REMOVE_PACKAGE_INTEREST
20200
   PURPOSE:    To remove interest in a given package per project
20201
 
20202
   REVISIONS:
20203
   Ver        Date        Author           Description
20204
   ---------  ----------  ---------------  ------------------------------------
20205
   1.0        12/05/2006  Rupesh Solanki      1. Created this procedure.
20206
 
20207
   NOTES:
20208
 
20209
   Automatically available Auto Replace Keywords:
20210
      Object Name:     REMOVE_PACKAGE_INTEREST
20211
      Sysdate:         12/05/2006
20212
      Date and Time:   12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AM
20213
      Username:         (set in TOAD Options, Procedure Editor)
20214
      Table Name:       (set in the "New PL/SQL Object" dialog)
20215
 
20216
******************************************************************************/
20217
BEGIN
20218
 
20219
	 --Delete from PACKAGE_INTEREST
20220
	 DELETE FROM PACKAGE_INTEREST
20221
	 WHERE PROJ_ID = nProjId
20222
	 AND PKG_ID = nPkgId
20223
	 AND USER_ID = nUserId;
20224
 
20225
END REMOVE_PACKAGE_INTEREST;
1374 dpurdie 20226
/
20227
--------------------------------------------------------
20228
--  DDL for Procedure RELEASE_MANAGER_MAILOUT
20229
--------------------------------------------------------
1373 dpurdie 20230
 
20231
  CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (
20232
  sender      IN VARCHAR2,
20233
  recipient   IN VARCHAR2,
20234
  ccrecipient IN VARCHAR2,
20235
  subject     IN VARCHAR2,
20236
  message     IN VARCHAR2
20237
  ) IS
20238
 
20239
  crlf VARCHAR2(2):= UTL_TCP.CRLF;
20240
  connection utl_smtp.connection;
20241
  mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';
20242
  header VARCHAR2(1000);
20243
 
20244
BEGIN
20245
 
20246
  --
20247
  -- Start the connection.
20248
  --
20249
  connection := utl_smtp.open_connection(mailhost,25);
20250
 
20251
  header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
20252
     'From: '||sender||''||crlf||
20253
  'Subject: '||subject||crlf||
20254
       'To: '||recipient||crlf||
20255
       'CC: '||ccrecipient;
20256
 
20257
  --
20258
  -- Handshake with the SMTP server
20259
  --
20260
  utl_smtp.helo(connection, mailhost);
20261
  utl_smtp.mail(connection, sender);
20262
  utl_smtp.rcpt(connection, recipient);
20263
  utl_smtp.rcpt(connection, ccrecipient);
20264
  utl_smtp.open_data(connection);
20265
  --
20266
  -- Write the header
20267
  --
20268
  utl_smtp.write_data(connection, header);
20269
  --
20270
  -- The crlf is required to distinguish that what comes next is not simply part of the header..
20271
  --
20272
  utl_smtp.write_data(connection, crlf ||message);
20273
  utl_smtp.close_data(connection);
20274
  utl_smtp.quit(connection);
20275
 
20276
EXCEPTION
20277
  WHEN UTL_SMTP.INVALID_OPERATION THEN
20278
    dbms_output.put_line(' Invalid Operation in SMTP transaction.');
20279
  WHEN UTL_SMTP.TRANSIENT_ERROR THEN
20280
    dbms_output.put_line(' Temporary problems with sending email - try again later.');
20281
  WHEN UTL_SMTP.PERMANENT_ERROR THEN
20282
    dbms_output.put_line(' Errors in code for SMTP transaction.');
20283
 
20284
END RELEASE_MANAGER_MAILOUT;
1374 dpurdie 20285
/
20286
--------------------------------------------------------
20287
--  DDL for Procedure SET_PACKAGE_BUILD_ENV
20288
--------------------------------------------------------
1373 dpurdie 20289
 
20290
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
20291
	   	  		  								  	sBuildEnvIdList IN VARCHAR2 ) IS
20292
/* ---------------------------------------------------------------------------
20293
    Last Modified: Rupesh Solanki
20294
	Version: 3.0.1
20295
   --------------------------------------------------------------------------- */
20296
 
20297
 
20298
BEGIN
20299
 
20300
   -- Delete Current Build Env settings
20301
   DELETE FROM PACKAGE_BUILD_ENV
20302
   WHERE pv_id = nPvId;
20303
 
20304
   -- Delet Current Package Build Info Settings
20305
   DELETE FROM PACKAGE_BUILD_INFO
20306
   WHERE pv_id = nPvId;
20307
 
20308
   -- Reset flag to N
20309
   UPDATE PACKAGE_VERSIONS SET
20310
	   IS_BUILD_ENV_REQUIRED = 'N'
20311
   WHERE PV_ID = nPvId;
20312
 
20313
 
20314
   -- Set new Build Env
20315
   IF NOT sBuildEnvIdList IS NULL THEN
20316
   	  -- Insert into PACKAGE_BUILD_ENV
20317
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
20318
	  SELECT nPvId AS PV_ID,
20319
	  		 be.BE_ID
20320
	    FROM BUILD_ENVIRONMENTS be
20321
	   WHERE be.BE_ID IN (
20322
	   		 		  	   SELECT *
20323
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20324
	   		 		  	 );
20325
 
20326
   	  -- Insert into PACKAGE_BUILD_INFO
20327
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
20328
	  SELECT nPvId AS PV_ID,
20329
	  		 be.BM_ID
20330
	    FROM BUILD_MACHINES be
20331
	   WHERE be.BM_ID IN (
20332
	   		 		  	   SELECT *
20333
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20334
	   		 		  	 );						 
20335
 
20336
	   -- Set flag to Y
20337
	   UPDATE PACKAGE_VERSIONS SET
20338
		   IS_BUILD_ENV_REQUIRED = 'Y'
20339
	   WHERE PV_ID = nPvId;
20340
 
20341
   END IF;
20342
 
20343
 
20344
END Set_Package_Build_Env;
1374 dpurdie 20345
/
20346
--------------------------------------------------------
20347
--  DDL for Procedure SHIFT_INSTALL_ORDER
20348
--------------------------------------------------------
1373 dpurdie 20349
 
20350
  CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
20351
												  nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
20352
                                                  nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS
20353
/* ---------------------------------------------------------------------------
20354
    Version: 3.0
20355
   --------------------------------------------------------------------------- */
20356
 
20357
currInstallOrder NUMBER;
20358
FromInstallOrder NUMBER;
20359
 
20360
BEGIN
20361
 
20362
	 -- Get Current Install Order
20363
     SELECT pp.INSTALL_ORDER INTO currInstallOrder
20364
       FROM PACKAGE_PATCHES pp
20365
      WHERE pp.PV_ID = nPvId
20366
        AND pp.PATCH_ID = nPatchId;
20367
 
20368
 
20369
	 IF currInstallOrder > nToInstallOrder
20370
	 THEN
20371
 
20372
		FromInstallOrder := nToInstallOrder;
20373
 
20374
	    -- Shift others Up
20375
		UPDATE PACKAGE_PATCHES pp SET
20376
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER + 1
20377
		 WHERE pp.PV_ID = nPvId
20378
           AND pp.PATCH_ID != nPatchId
20379
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  currInstallOrder - 1;
20380
 
20381
 
20382
	 ELSIF currInstallOrder < nToInstallOrder
20383
	 THEN
20384
 
20385
		FromInstallOrder := currInstallOrder + 1;
20386
 
20387
		-- Shift others Down
20388
        UPDATE PACKAGE_PATCHES pp SET
20389
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER - 1
20390
		 WHERE pp.PV_ID = nPvId
20391
           AND pp.PATCH_ID != nPatchId
20392
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  nToInstallOrder;
20393
 
20394
	 END IF;
20395
 
20396
 
20397
	 -- Move Patch to new install order
20398
     UPDATE PACKAGE_PATCHES pp SET
20399
		    pp.INSTALL_ORDER = nToInstallOrder
20400
	  WHERE pp.PV_ID = nPvId
20401
	    AND pp.PATCH_ID = nPatchId;
20402
 
20403
 
20404
END Shift_Install_Order;
1374 dpurdie 20405
/
20406
--------------------------------------------------------
20407
--  DDL for Procedure NEW_PACKAGE_NAME
20408
--------------------------------------------------------
1373 dpurdie 20409
 
20410
  CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
20411
                                               retPKG_ID OUT NUMBER ) IS
20412
/* ---------------------------------------------------------------------------
20413
    Version: 3.0.0
20414
   --------------------------------------------------------------------------- */
20415
 
20416
    CURSOR packages_cur IS
20417
        SELECT pkg.pkg_id
20418
          FROM packages pkg
20419
         WHERE pkg.pkg_name = SSpkg_name;
20420
    packages_rec packages_cur%ROWTYPE;
20421
 
20422
 
20423
BEGIN
20424
 
20425
    /* ---------------------------------------------------- */
20426
    /* Find if package name exists                          */
20427
    /* ---------------------------------------------------- */
20428
 
20429
    OPEN packages_cur;
20430
    FETCH packages_cur INTO packages_rec;
20431
 
20432
    IF packages_cur%NOTFOUND
20433
    THEN
20434
        -- Create new pkg_name --
20435
        SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;
20436
 
20437
        INSERT INTO packages ( pkg_id, pkg_name )
20438
        VALUES ( retPKG_ID, SSpkg_name );
20439
 
20440
    ELSE
20441
        retPKG_ID := packages_rec.pkg_id;
20442
 
20443
    END IF;
20444
 
20445
 
20446
    CLOSE packages_cur;
20447
 
20448
END New_Package_Name;
1374 dpurdie 20449
/
20450
--------------------------------------------------------
20451
--  DDL for Procedure REMOVE_RUNTIME
20452
--------------------------------------------------------
1373 dpurdie 20453
 
20454
  CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20455
											 nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,
20456
                                             nUserId IN NUMBER ) IS
20457
/* ---------------------------------------------------------------------------
20458
    Version: 3.0
20459
   --------------------------------------------------------------------------- */
20460
 
20461
   RuntimeDependency VARCHAR2(4000);
20462
 
20463
BEGIN
20464
 
20465
	-- Get Runtime dependency
20466
    SELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION  INTO RuntimeDependency
20467
	  FROM RUNTIME_DEPENDENCIES rtd,
20468
	  	   PACKAGES pkg,
20469
	       PACKAGE_VERSIONS pv
20470
	 WHERE rtd.PV_ID = nPvId
20471
	   AND pv.PKG_ID = pkg.PKG_ID
20472
	   AND rtd.RTD_ID = pv.PV_ID
20473
	   AND rtd.RTD_ID = nRuntimeId;
20474
 
20475
 
20476
	-- Delete Document
20477
    DELETE
20478
      FROM RUNTIME_DEPENDENCIES rtd
20479
     WHERE rtd.PV_ID = nPvId
20480
       AND rtd.RTD_ID = nRuntimeId;
20481
 
20482
 
20483
    /* LOG ACTION */
20484
   	Log_Action ( nPvId, 'runtime_remove', nUserId,
20485
   			     'Runtime package: '|| RuntimeDependency );
20486
 
20487
 
20488
END Remove_Runtime;
1374 dpurdie 20489
/
20490
--------------------------------------------------------
20491
--  DDL for Procedure CHANGE_PACKAGE_STATE
20492
--------------------------------------------------------
1373 dpurdie 20493
 
20494
  CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20495
											 nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
20496
/* ---------------------------------------------------------------------------
20497
    Version: 4.0
20498
   --------------------------------------------------------------------------- */
20499
 
20500
BEGIN
20501
 
20502
    -- Unlock Package
20503
    UPDATE RELEASE_CONTENT rc SET
20504
    	rc.PKG_STATE = 0
20505
    WHERE rc.PV_ID = nPvId
20506
	AND rc.RTAG_ID = nRtagId;
20507
 
20508
    /* LOG ACTION */
20509
   /*	Log_Action ( nPvId, 'unlock_package', nUserId );*/
20510
 
20511
END Change_Package_State;
20512
/