Subversion Repositories DevTools

Rev

Rev 1374 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1373 dpurdie 1
--------------------------------------------------------
2
--  File created - Thursday-September-06-2012   
3
--------------------------------------------------------
4
 
5
--------------------------------------------------------
6
--  DDL for Function ORA_SYSDATE
7
--------------------------------------------------------
8
 
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;
19
/
20
--------------------------------------------------------
21
--  DDL for Function GET_AUTOMATED_LABEL
22
--------------------------------------------------------
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;
47
/
48
--------------------------------------------------------
49
--  DDL for Function CAN_EDIT_PKG_IN_PROJECT
50
--------------------------------------------------------
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;
156
/
157
--------------------------------------------------------
158
--  DDL for Function GET_PV_FIRST_MODIFIED
159
--------------------------------------------------------
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;
178
/
179
--------------------------------------------------------
180
--  DDL for Function GET_BUILD_NUMBER
181
--------------------------------------------------------
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;
196
/
197
--------------------------------------------------------
198
--  DDL for Function ORA_SYSDATETIME
199
--------------------------------------------------------
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;
211
/
212
--------------------------------------------------------
213
--  DDL for Function IS_VERSION_EXTENSION
214
--------------------------------------------------------
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;
231
/
232
--------------------------------------------------------
233
--  DDL for Function IS_NUMBER
234
--------------------------------------------------------
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;
248
/
249
--------------------------------------------------------
250
--  DDL for Function GET_PATCH_VERSION
251
--------------------------------------------------------
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;
266
/
267
--------------------------------------------------------
268
--  DDL for Function IN_LIST_NUMBER2
269
--------------------------------------------------------
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;
296
/
297
--------------------------------------------------------
298
--  DDL for Function DT_ADDUSEROBJECT
299
--------------------------------------------------------
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;
302
/
303
--------------------------------------------------------
304
--  DDL for Function IN_LIST_NUMBER
305
--------------------------------------------------------
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;
332
/
333
--------------------------------------------------------
334
--  DDL for Function RELEASE_MODE
335
--------------------------------------------------------
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;
358
/
359
--------------------------------------------------------
360
--  DDL for Function PERL_DBD_TESTFUNC
361
--------------------------------------------------------
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;
364
/
365
--------------------------------------------------------
366
--  DDL for Function GET_V_EXT
367
--------------------------------------------------------
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;
399
/
400
--------------------------------------------------------
401
--  DDL for Function IN_LIST_VARCHAR2
402
--------------------------------------------------------
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;
435
/
436
--------------------------------------------------------
437
--  DDL for Package PK_PROJECT
438
--------------------------------------------------------
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;
458
/
459
--------------------------------------------------------
460
--  DDL for Package PK_PACKAGE
461
--------------------------------------------------------
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;
579
/
580
--------------------------------------------------------
581
--  DDL for Package RM_ISSUES
582
--------------------------------------------------------
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;
598
/
599
--------------------------------------------------------
600
--  DDL for Package PK_APP_UTILS
601
--------------------------------------------------------
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;
621
/
622
--------------------------------------------------------
623
--  DDL for Package PK_RMAPI_TEST
624
--------------------------------------------------------
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;
715
/
716
--------------------------------------------------------
717
--  DDL for Package PK_RMAPI
718
--------------------------------------------------------
719
 
720
  CREATE OR REPLACE PACKAGE "PK_RMAPI" 
721
IS
722
   TYPE typecur IS REF CURSOR;
723
 
724
/*================================================================================================*/
725
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
726
      RETURN typecur;
727
 
728
   FUNCTION wip_iteration_package (
729
      projname        VARCHAR2,
730
      iterationname   VARCHAR2,
731
      pkgname         VARCHAR2
732
   )
733
      RETURN typecur;
734
 
735
/* This version is to be deprecated when auto_make_vcsrelease is used */
736
   FUNCTION auto_make_release (
737
      rtagid                   IN   NUMBER,
738
      pkgname                  IN   VARCHAR2,
739
      vext                     IN   VARCHAR2,
740
      newpkgversion            IN   VARCHAR2,
741
      label                    IN   VARCHAR2,
742
      dependenciesimportlist   IN   VARCHAR2,
743
      isrippled                IN   NUMBER,
744
      username                 IN   VARCHAR2
745
   )
746
      RETURN NUMBER;
747
 
748
   FUNCTION auto_make_vcsrelease (
749
      rtagid                   IN   NUMBER,
750
      pkgname                  IN   VARCHAR2,
751
      vext                     IN   VARCHAR2,
752
      newpkgversion            IN   VARCHAR2,
753
      vcstag                   IN   VARCHAR2,
754
      dependenciesimportlist   IN   VARCHAR2,
755
      isrippled                IN   NUMBER,
756
      username                 IN   VARCHAR2
757
   )
758
      RETURN NUMBER;
759
 
760
 
761
   PROCEDURE import_dependencies (
762
      pvid                     IN   NUMBER,
763
      dependenciesimportlist   IN   VARCHAR2,
764
      userid                   IN   NUMBER
765
   );
766
 
767
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
768
      RETURN VARCHAR2;
769
 
770
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
771
      RETURN VARCHAR2;
772
 
773
   PROCEDURE update_dash_board (rtagid IN NUMBER);
774
 
775
   FUNCTION exclude_from_build (
776
      pvid          IN   NUMBER,
777
      spkgversion   IN   VARCHAR2,
778
      rtagid        IN   NUMBER,
779
      username      IN   VARCHAR2
780
   )
781
      RETURN NUMBER;
782
 
783
   FUNCTION exclude_indirect_from_build (
784
      pvid          IN   NUMBER,
785
      spkgversion   IN   VARCHAR2,
786
      rtagid        IN   NUMBER,
787
      username      IN   VARCHAR2,
788
      rootpvid      IN   NUMBER,
789
      rootcause     IN   VARCHAR2,
790
      rootfile      IN   VARCHAR2
791
   )
792
      RETURN NUMBER;
793
/*================================================================================================*/
794
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);
795
 
796
   FUNCTION insert_package_metrics (
797
      rtagid IN NUMBER,
798
      pkgname IN VARCHAR2,
799
      vext IN VARCHAR2,
800
      metricstring IN VARCHAR2
801
   )
802
      RETURN NUMBER;
803
 
804
   PROCEDURE update_release_metrics (rtagid IN NUMBER);
805
 
806
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;
807
 
808
END pk_rmapi;
809
/
810
--------------------------------------------------------
811
--  DDL for Package PK_BUILDAPI
812
--------------------------------------------------------
813
 
814
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI" 
815
IS
816
   /*================================================================================================*/
817
   PROCEDURE add_product_component (
818
      npvid           IN   NUMBER,
819
      sosname         IN   VARCHAR2,
820
      sorigfilepath   IN   VARCHAR2,
821
      sfilename       IN   VARCHAR2,
822
      sdestfilepath   IN   VARCHAR2,
823
      nbytesize       IN   NUMBER,
824
      scrccksum       IN   VARCHAR2
825
   );
826
 
827
   PROCEDURE remove_all_product_components (
828
      npvid     IN   NUMBER,
829
      sosname   IN   VARCHAR2
830
   );
831
 
832
   /*================================================================================================*/
833
   FUNCTION get_osid (sosname IN VARCHAR2)
834
      RETURN NUMBER;
835
 
836
   /*================================================================================================*/
837
   PROCEDURE update_build_service (
838
      sdatabaseserver   IN   VARCHAR2,
839
      swebserver        IN   VARCHAR2,
840
      smailserver       IN   VARCHAR2,
841
      smailsender       IN   VARCHAR2,
842
      sdiskspace        IN   VARCHAR2,
843
      ssbommanagement   IN   VARCHAR2
844
   );
845
 
846
   /*================================================================================================*/
847
   PROCEDURE update_build_service_info (
848
      sdatabaseserver   IN   VARCHAR2,
849
      sarchiveserver    IN   VARCHAR2,
850
      smailserver       IN   VARCHAR2,
851
      smailsender       IN   VARCHAR2,
852
      sdiskspace        IN   VARCHAR2,
853
      ssbommanagement   IN   VARCHAR2
854
   );
855
 
856
   /*================================================================================================*/
857
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2);
858
 
859
   /*================================================================================================*/
860
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER);
861
 
862
   /*================================================================================================*/
863
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2);
864
 
865
   /*================================================================================================*/
866
   PROCEDURE add_daemon (
867
      sdaemonhostname   IN   VARCHAR2,
868
      nrtagid           IN   NUMBER,
869
      ngbeid            IN   NUMBER,
870
      sgbebuildfilter   IN   VARCHAR2
871
   );
872
 
873
   /*================================================================================================*/
874
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2);
875
 
876
   /*================================================================================================*/
877
   PROCEDURE update_daemon (
878
      sdaemonhostname   IN   VARCHAR2,
879
      nrconid           IN   NUMBER,
880
      ngbeid            IN   NUMBER,
881
      sgbebuildfilter   IN   VARCHAR2
882
   );
883
 
884
   /*================================================================================================*/
885
   PROCEDURE insert_schedule_info (
886
      dschedulepause     IN   DATE,
887
      dscheduleresume    IN   DATE,
888
      crepeat            IN   VARCHAR2,
889
      cindefinitepause   IN   VARCHAR2
890
   );
891
 
892
   /*================================================================================================*/
893
   PROCEDURE delete_schedule (nscheduleid IN NUMBER);
894
 
895
   /*================================================================================================*/
896
   PROCEDURE set_infinite_pause;
897
 
898
   /*================================================================================================*/
899
   PROCEDURE set_resume;
900
 
901
   /*================================================================================================*/
902
   PROCEDURE delete_out_of_date_schedule;
903
 
904
   /*================================================================================================*/
905
   PROCEDURE set_daemon_resume (nrconid IN NUMBER);
906
 
907
   /*================================================================================================*/
908
   PROCEDURE set_daemon_pause (nrconid IN NUMBER);
909
 
910
   /*================================================================================================*/
911
   PROCEDURE set_daemon_disable (nrconid NUMBER);
912
 
913
   /*================================================================================================*/
914
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER);
915
 
916
   /*================================================================================================*/
917
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER );
918
   /*================================================================================================*/
919
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER );
920
   /*================================================================================================*/
921
   FUNCTION get_daemon_inst(
922
      nRtag_id IN NUMBER,
923
      nInst_id IN OUT NUMBER,
924
      nOp_code IN OUT NUMBER,
925
      nPv_id OUT NUMBER,
926
      nUser_id OUT NUMBER,
927
      nInProgress OUT NUMBER
928
   ) RETURN NUMBER;
929
   /*================================================================================================*/
930
   PROCEDURE cleanup_stranded_daemon_insts;
931
   /*================================================================================================*/
932
   PROCEDURE insert_daemon_inst(
933
      nOp_code IN NUMBER,
934
      nRtag_id IN NUMBER,
935
      nPv_id IN NUMBER,
936
      nSchedDate IN DATE,
937
      nRepeatSecs IN NUMBER,
938
      nAddedDate IN DATE,
939
      nUser_id IN NUMBER
940
   );
941
   /*================================================================================================*/
942
   PROCEDURE del_daemon_inst( nInstId IN NUMBER );
943
   /*================================================================================================*/
944
   PROCEDURE del_daemon_inst_by_rtag_pvid(
945
      nOp_code IN NUMBER,
946
      nRtag_id IN NUMBER,
947
      nPv_id IN NUMBER
948
   );
949
   /*================================================================================================*/
950
   PROCEDURE update_daemon_inst(
951
      nInstId IN NUMBER,
952
      nOp_code IN NUMBER,
953
      nRtag_id IN NUMBER,
954
      nPv_id IN NUMBER,
955
      nSchedDate IN DATE,
956
      nRepeatSecs IN NUMBER,
957
      nAddedDate IN DATE,
958
      nUser_id IN NUMBER
959
   );
960
   /*================================================================================================*/
961
   FUNCTION daemon_ops_for_rtag_pvid(
962
      nRtag_id IN NUMBER,
963
      nPv_id IN NUMBER
964
   ) RETURN VARCHAR2;
965
   /*================================================================================================*/
966
   FUNCTION daemon_ops_for_rtag(
967
      nRtag_id IN NUMBER
968
   ) RETURN VARCHAR2;
969
   /*================================================================================================*/
970
   PROCEDURE add_daemon_config (
971
      nrtagid           IN   NUMBER,
972
      nbmcon_id         IN   NUMBER,
973
      sdaemon_mode      IN   VARCHAR2,
974
      sgbebuildfilter   IN   VARCHAR2
975
   );
976
   /*================================================================================================*/
977
   PROCEDURE update_daemon_config (
978
      nrconid           IN   NUMBER,
979
      nbmcon_id         IN   NUMBER,
980
      sdaemon_mode      IN   VARCHAR2,
981
      sgbebuildfilter   IN   VARCHAR2
982
   );
983
 
984
   /*================================================================================================*/
985
   PROCEDURE add_build_machine (
986
      sdisplay_name          IN   VARCHAR2,
987
      smachine_hostname      IN   VARCHAR2,
988
      ngbeid                 IN   NUMBER,
989
      sdescription           IN   VARCHAR2
990
   );
991
   /*================================================================================================*/
992
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2);
993
   /*================================================================================================*/
994
   PROCEDURE update_build_machine (
995
      nbmcon_id              IN   NUMBER,
996
      sdisplay_name          IN   VARCHAR2,
997
      smachine_hostname      IN   VARCHAR2,
998
      ngbeid                 IN   NUMBER,
999
      sdescription           IN   VARCHAR2
1000
   );
1001
END pk_buildapi;
1002
/
1003
--------------------------------------------------------
1004
--  DDL for Package PK_BUILDAPI_TEST
1005
--------------------------------------------------------
1006
 
1007
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI_TEST" IS
1008
/*
1009
------------------------------
1010
||  Last Modified:  S.Vukovic
1011
||  Modified Date:  30/Mar/2005
1012
||  Spec Version:   1.0
1013
------------------------------
1014
*/
1015
 
1016
	/*================================================================================================*/
1017
	PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
1018
								  sOsName IN VARCHAR2,
1019
								  sOrigFilePath IN VARCHAR2,
1020
								  sFileName IN VARCHAR2,
1021
								  sDestFilePath IN VARCHAR2,
1022
								  nByteSize IN NUMBER,
1023
								  sCRCcksum IN VARCHAR2 );
1024
 
1025
	PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 );
1026
    /*================================================================================================*/
1027
	FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER;
1028
	/*================================================================================================*/
1029
 
1030
	PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
1031
			  					   	 sWebServer IN VARCHAR2,
1032
									 sMailServer IN VARCHAR2,
1033
									 sMailSender IN VARCHAR2);
1034
	/*================================================================================================*/
1035
 
1036
	PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue IN VARCHAR2 );
1037
	/*================================================================================================*/
1038
 
1039
	PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER );
1040
	/*================================================================================================*/
1041
	PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 );
1042
	/*================================================================================================*/	        
1043
    PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER );
1044
	/*================================================================================================*/	
1045
 
1046
END PK_BUILDAPI_TEST;
1047
/
1048
--------------------------------------------------------
1049
--  DDL for Package PK_PACKAGE_TEST
1050
--------------------------------------------------------
1051
 
1052
  CREATE OR REPLACE PACKAGE "PK_PACKAGE_TEST" 
1053
IS
1054
/*
1055
------------------------------
1056
||  Last Modified:  Rupesh Solanki
1057
||  Modified Date:  18/05/2006
1058
||
1059
------------------------------
1060
*/
1061
   TYPE typecur IS REF CURSOR;
1062
 
1063
/*================================================================================================*/
1064
   PROCEDURE new_version (
1065
      nlastpvid                   IN       NUMBER,
1066
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
1067
      cbuildtype                  IN       CHAR,
1068
      nsettopvid                  IN       NUMBER DEFAULT NULL,
1069
      nrtagid                     IN       NUMBER,
1070
      nuserid                     IN       NUMBER,
1071
      enumissues_state_imported   IN       NUMBER,
1072
      returnpvid                  OUT      NUMBER
1073
   );
1074
 
1075
   PROCEDURE change_state (
1076
      pvid       IN   NUMBER,
1077
      newstate   IN   package_versions.dlocked%TYPE,
1078
      userid     IN   NUMBER
1079
   );
1080
 
1081
   PROCEDURE new_patch (
1082
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
1083
      nparentpvid        IN       NUMBER,
1084
      spatchidlist       IN       VARCHAR2,
1085
      nuserid            IN       NUMBER,
1086
      returnpatchid      OUT      NUMBER
1087
   );
1088
 
1089
   PROCEDURE obsolete_patch (
1090
      patchid            IN   NUMBER,
1091
      isobsolete         IN   CHAR,
1092
      obsoletecomments   IN   VARCHAR2,
1093
      userid             IN   NUMBER
1094
   );
1095
 
1096
   PROCEDURE obsolete_patches (
1097
      spatchidlist       IN   VARCHAR2,
1098
      isobsolete         IN   CHAR,
1099
      obsoletecomments   IN   VARCHAR2,
1100
      userid             IN   NUMBER
1101
   );
1102
 
1103
   PROCEDURE destroy_package (
1104
      pvid               IN       NUMBER,
1105
      overridewarnings   IN       CHAR DEFAULT 'N',
1106
      problemstring      OUT      VARCHAR2
1107
   );
1108
 
1109
   PROCEDURE add_process (
1110
      nprocid         IN   processes.proc_id%TYPE,
1111
      shealthtag      IN   processes.proc_name%TYPE,
1112
      sprocdesc       IN   processes.proc_description%TYPE,
1113
      scmdinterface   IN   processes.run_as%TYPE,
1114
      spkgowner       IN   processes.pkg_owner%TYPE,
1115
      sisinterface    IN   processes.is_interface%TYPE,
1116
      npvid           IN   package_processes.pv_id%TYPE,
1117
      nuserid         IN   NUMBER
1118
   );
1119
 
1120
   PROCEDURE add_package_process (
1121
      nprocidlist   IN   VARCHAR2,
1122
      npvid         IN   package_processes.pv_id%TYPE,
1123
      nuserid       IN   NUMBER
1124
   );
1125
 
1126
 
1127
 
1128
   PROCEDURE remove_process (
1129
      nprocid   IN   package_processes.proc_id%TYPE,
1130
      npvid     IN   package_processes.pv_id%TYPE,
1131
      nuserid   IN   NUMBER
1132
   );
1133
 
1134
   PROCEDURE move_package (
1135
   	  npvid  			  IN package_versions.pv_id%TYPE,
1136
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
1137
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
1138
	  nuserid			  IN NUMBER		 
1139
   ); 
1140
 
1141
PROCEDURE modify_product_state (
1142
   	  npvid IN package_versions.pv_id%TYPE,
1143
	  nstateid IN product_states.state_id%TYPE,
1144
	  nuserid IN NUMBER
1145
   );
1146
/*================================================================================================*/
1147
END pk_package_Test;
1148
/
1149
--------------------------------------------------------
1150
--  DDL for Package PK_PLANNED
1151
--------------------------------------------------------
1152
 
1153
  CREATE OR REPLACE PACKAGE "PK_PLANNED" IS
1154
/*
1155
------------------------------
1156
||  Last Modified:  G.Huddy
1157
||  Modified Date:  28/May/2008
1158
||  Spec Version:   1.1
1159
------------------------------
1160
*/
1161
 
1162
	TYPE typeCur IS REF CURSOR;
1163
 
1164
    /*================================================================================================*/
1165
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1166
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1167
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1168
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
1169
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1170
	PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR);
1171
	/*================================================================================================*/
1172
 
1173
END PK_PLANNED;
1174
/
1175
--------------------------------------------------------
1176
--  DDL for Package PK_ENVIRONMENT_TEST
1177
--------------------------------------------------------
1178
 
1179
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT_TEST" IS
1180
/*
1181
------------------------------
1182
||  Last Modified:  Rupesh Solanki
1183
||  Modified Date:  29/Jan/2007
1184
||  Spec Version:   1.1
1185
------------------------------
1186
*/
1187
 
1188
	TYPE typeCur IS REF CURSOR;
1189
 
1190
    /*================================================================================================*/
1191
 
1192
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
1193
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1194
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1195
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1196
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1197
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1198
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
1199
 
1200
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1201
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1202
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1203
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1204
 
1205
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1206
 
1207
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1208
 
1209
 
1210
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1211
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1212
 
1213
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1214
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1215
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1216
 
1217
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1218
 
1219
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
1220
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
1221
 
1222
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN 
1223
			  			   	 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE, 
1224
							 CloneFromPvId IN NUMBER );
1225
 
1226
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1227
 
1228
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );							 
1229
 
1230
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1231
 
1232
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );								 							 
1233
 
1234
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );	
1235
	/*================================================================================================*/
1236
 
1237
END PK_ENVIRONMENT_test;
1238
/
1239
--------------------------------------------------------
1240
--  DDL for Package PK_ENVIRONMENT
1241
--------------------------------------------------------
1242
 
1243
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT" IS
1244
/*
1245
------------------------------
1246
||  Last Modified:  G.Huddy
1247
||  Modified Date:  28/May/2008
1248
||  Spec Version:   1.2
1249
------------------------------
1250
*/
1251
 
1252
	TYPE typeCur IS REF CURSOR;
1253
 
1254
	/*================================================================================================*/
1255
 
1256
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
1257
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1258
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1259
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1260
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1261
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1262
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
1263
 
1264
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1265
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1266
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1267
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1268
 
1269
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
1270
 
1271
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1272
 
1273
 
1274
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1275
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1276
 
1277
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1278
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1279
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1280
	PROCEDURE APPROVE_MERGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1281
 
1282
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1283
 
1284
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
1285
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
1286
 
1287
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN
1288
							 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE,
1289
							 CloneFromPvId IN NUMBER );
1290
 
1291
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1292
 
1293
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1294
 
1295
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1296
 
1297
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1298
 
1299
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1300
	/*================================================================================================*/
1301
 
1302
END PK_ENVIRONMENT;
1303
/
1304
--------------------------------------------------------
1305
--  DDL for Package PK_RELEASE
1306
--------------------------------------------------------
1307
 
1308
  CREATE OR REPLACE PACKAGE "PK_RELEASE" IS
1309
/*
1310
------------------------------
1311
||  Last Modified:  S.Vukovic
1312
||  Modified Date:  12/Sep/2005
1313
||  Body Version:   3.0
1314
------------------------------
1315
*/
1316
 
1317
	TYPE typeCur IS REF CURSOR;
1318
 
1319
    /*================================================================================================*/
1320
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
1321
	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 );
1322
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
1323
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
1324
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
1325
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
1326
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
1327
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
1328
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
1329
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1330
	--PROCEDURE ADD_DEPRECATE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, nPkgId IN NUMBER );
1331
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1332
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1333
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1334
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1335
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
1336
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
1337
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1338
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
1339
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
1340
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
1341
 
1342
	/*================================================================================================*/
1343
 
1344
END PK_RELEASE;
1345
/
1346
--------------------------------------------------------
1347
--  DDL for Package PK_WORK_IN_PROGRESS
1348
--------------------------------------------------------
1349
 
1350
  CREATE OR REPLACE PACKAGE "PK_WORK_IN_PROGRESS" IS
1351
/*
1352
------------------------------
1353
||  Last Modified:  S.Vukovic
1354
||  Modified Date:  2/May/2005
1355
||  Spec Version:   1.0
1356
------------------------------
1357
*/
1358
 
1359
	TYPE typeCur IS REF CURSOR;
1360
 
1361
    /*================================================================================================*/
1362
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1363
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1364
	PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER );
1365
 
1366
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1367
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1368
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1369
	/*================================================================================================*/
1370
 
1371
END PK_WORK_IN_PROGRESS;
1372
/
1373
--------------------------------------------------------
1374
--  DDL for Package PK_LICENCING
1375
--------------------------------------------------------
1376
 
1377
  CREATE OR REPLACE PACKAGE "PK_LICENCING" IS
1378
/*
1379
------------------------------
1380
||  Last Modified:  G.Huddy
1381
||  Modified Date:  19/Aug/2008
1382
||  Spec Version:   1.0
1383
------------------------------
1384
*/
1385
 
1386
   TYPE typeCur IS REF CURSOR;
1387
 
1388
    /*================================================================================================*/
1389
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
1390
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
1391
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER );
1392
   FUNCTION  IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER;
1393
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER );
1394
   /*================================================================================================*/
1395
 
1396
END PK_LICENCING;
1397
/
1398
--------------------------------------------------------
1399
--  DDL for Package PK_ARCHIVE
1400
--------------------------------------------------------
1401
 
1402
  CREATE OR REPLACE PACKAGE "PK_ARCHIVE" 
1403
IS
1404
/*
1405
------------------------------
1406
||  Author:  Rupesh Solanki
1407
||  Date:    26 October 2006
1408
||  Version:   1.0
1409
------------------------------
1410
*/
1411
 
1412
   /*================================================================================================*/
1413
   PROCEDURE populate_packages_table;
1414
 
1415
   PROCEDURE populate_archive_data_table (
1416
      nrtagid   IN   release_tags.rtag_id%TYPE
1417
   );
1418
 
1419
   PROCEDURE migrate_pv_to_archive_SCHEMA (nrtagid IN release_tags.rtag_id%TYPE);
1420
 
1421
   PROCEDURE migrate_rtag_to_archive_schema (
1422
      nrtagid   IN   release_tags.rtag_id%TYPE
1423
   );
1424
 
1425
   PROCEDURE clean_up_archive_data_table (
1426
      nrtagid   IN   release_tags.rtag_id%TYPE
1427
   );
1428
 
1429
   PROCEDURE write_action_log (
1430
      nuserid   IN   NUMBER,
1431
      nrtagid   IN   release_tags.rtag_id%TYPE
1432
   );
1433
/*================================================================================================*/
1434
END pk_archive;
1435
/
1436
--------------------------------------------------------
1437
--  DDL for Package PK_RELEASE_TEST
1438
--------------------------------------------------------
1439
 
1440
  CREATE OR REPLACE PACKAGE "PK_RELEASE_TEST" IS
1441
/*
1442
------------------------------
1443
||  Last Modified:  S.Vukovic
1444
||  Modified Date:  12/Sep/2005
1445
||  Body Version:   3.0
1446
------------------------------
1447
*/
1448
 
1449
	TYPE typeCur IS REF CURSOR;
1450
 
1451
    /*================================================================================================*/
1452
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
1453
	PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, nUserId IN NUMBER );
1454
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
1455
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
1456
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
1457
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
1458
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
1459
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
1460
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
1461
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1462
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1463
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1464
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1465
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1466
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
1467
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
1468
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1469
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
1470
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
1471
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
1472
	/*================================================================================================*/
1473
 
1474
END PK_RELEASE_TEST;
1475
/
1476
--------------------------------------------------------
1477
--  DDL for Package Body PK_PLANNED
1478
--------------------------------------------------------
1479
 
1480
  CREATE OR REPLACE PACKAGE BODY "PK_PLANNED" IS
1481
 
1482
/*
1483
------------------------------
1484
||  Last Modified:  G.Huddy
1485
||  Modified Date:  05/Aug/2008
1486
||  Body Version:   1.2
1487
------------------------------
1488
*/
1489
 
1490
 
1491
/*-------------------------------------------------------------------------------------------------------*/
1492
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1493
 
1494
    oldPvId NUMBER;
1495
    ReleaseLocation VARCHAR2(4000);
1496
    IsPatch CHAR(1) := NULL;
1497
    sLocation VARCHAR2(4000) := NULL;
1498
    nRtagIdLocation NUMBER;
1499
 
1500
 
1501
 
1502
BEGIN
1503
    /*--------------- Business Rules Here -------------------*/
1504
    /*-------------------------------------------------------*/
1505
 
1506
    BEGIN
1507
        -- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
1508
        SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME, rt.RTAG_ID  INTO sLocation, nRtagIdLocation
1509
          FROM PLANNED pl,
1510
               RELEASE_TAGS rt,
1511
               PROJECTS proj
1512
         WHERE pl.PV_ID = newPvId
1513
           AND pl.RTAG_ID = rt.RTAG_ID
1514
           AND rt.OFFICIAL != 'Y'
1515
           AND rt.PROJ_ID = proj.PROJ_ID;
1516
 
1517
        EXCEPTION
1518
            WHEN NO_DATA_FOUND THEN
1519
                sLocation := NULL;
1520
    END;
1521
 
1522
 
1523
 
1524
    IF (sLocation IS NULL) OR (nRtagIdLocation = RtagId) THEN
1525
 
1526
        -- Add to "Pending" area
1527
        INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
1528
        VALUES( RtagId, newPvId, ViewId, 'R' );
1529
 
1530
 
1531
        /* LOG ACTION */
1532
        SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1533
          FROM PROJECTS proj,
1534
               RELEASE_TAGS rt
1535
         WHERE rt.PROJ_ID = proj.PROJ_ID
1536
           AND rt.RTAG_ID = RtagId;
1537
 
1538
        Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1539
 
1540
    ELSE
1541
 
1542
        RAISE_APPLICATION_ERROR (-20000, 'This version is already in Pending Area at '|| sLocation ||'.' );
1543
 
1544
    END IF;
1545
 
1546
END;
1547
/*-------------------------------------------------------------------------------------------------------*/
1548
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1549
 
1550
    ReleaseLocation VARCHAR2(4000);
1551
 
1552
BEGIN
1553
 
1554
    /*--------------- Business Rules Here -------------------*/
1555
    /*-------------------------------------------------------*/
1556
 
1557
 
1558
    -- Get release location for logging pusposes
1559
    SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1560
      FROM PROJECTS proj,
1561
           RELEASE_TAGS rt
1562
     WHERE rt.PROJ_ID = proj.PROJ_ID
1563
       AND rt.RTAG_ID = RtagId;
1564
 
1565
 
1566
    -- Delete from Work In Progress
1567
    DELETE
1568
      FROM PLANNED pl
1569
     WHERE pl.RTAG_ID = RtagId
1570
       AND pl.PV_ID = PvId;
1571
 
1572
    Log_Action ( PvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1573
 
1574
 
1575
 
1576
 
1577
END;
1578
/*-------------------------------------------------------------------------------------------------------*/
1579
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
1580
 
1581
    ReturnValue NUMBER;
1582
 
1583
BEGIN
1584
    SELECT pl.VIEW_ID INTO ReturnValue
1585
      FROM PLANNED pl
1586
     WHERE pl.RTAG_ID = RtagId
1587
       AND pl.PV_ID = PvId;
1588
 
1589
    RETURN ReturnValue;
1590
END;
1591
/*-------------------------------------------------------------------------------------------------------*/
1592
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
1593
 
1594
    IsBaseView CHAR(1);
1595
 
1596
BEGIN
1597
 
1598
    -- Check if the view is BASE VIEW
1599
    SELECT vi.BASE_VIEW INTO IsBaseView
1600
      FROM VIEWS vi
1601
     WHERE vi.VIEW_ID = ViewId;
1602
 
1603
 
1604
    IF (IsBaseView = 'Y') THEN
1605
        -- Get Base view content
1606
        OPEN RecordSet FOR
1607
        SELECT 0 AS PKG_STATE,
1608
               NULL AS DEPRECATED_STATE,
1609
               pv.pv_id,
1610
               pkg.pkg_name,
1611
               pv.pkg_version,
1612
               pv.dlocked,
1613
               pv.pv_description,
1614
               pv.BUILD_TYPE,
1615
               rel.operation
1616
          FROM PLANNED rel,
1617
               packages pkg,
1618
               package_versions pv
1619
         WHERE pv.pkg_id = pkg.pkg_id
1620
           AND rel.pv_id = pv.pv_id
1621
           AND rel.VIEW_ID = ViewId
1622
           AND rel.RTAG_ID = RtagId
1623
         ORDER BY UPPER(pkg.PKG_NAME);
1624
 
1625
    ELSE
1626
 
1627
        -- Get non base view content
1628
        OPEN RecordSet FOR
1629
        SELECT 0 AS PKG_STATE,
1630
               NULL AS DEPRECATED_STATE,
1631
               pv.pv_id,
1632
               pkg.pkg_name,
1633
               pv.pkg_version,
1634
               pv.dlocked,
1635
               pv.pv_description,
1636
               pv.BUILD_TYPE,
1637
               rel.operation
1638
          FROM PLANNED rel,
1639
               packages pkg,
1640
               package_versions pv,
1641
               VIEW_DEF vd
1642
         WHERE pv.pkg_id = pkg.pkg_id
1643
           AND rel.pv_id = pv.pv_id
1644
           AND rel.RTAG_ID = RtagId
1645
           AND vd.VIEW_ID = ViewId
1646
           AND vd.PKG_ID = pv.PKG_ID
1647
         ORDER BY UPPER(pkg.PKG_NAME);
1648
 
1649
    END IF;
1650
 
1651
 
1652
END;
1653
/*-------------------------------------------------------------------------------------------------------*/
1654
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
1655
 
1656
BEGIN
1657
 
1658
    UPDATE PLANNED pl SET
1659
    pl.VIEW_ID = NewViewId
1660
    WHERE pl.PV_ID = PvId
1661
      AND pl.RTAG_ID = RtagId;
1662
 
1663
END;
1664
/*-------------------------------------------------------------------------------------------------------*/
1665
-- DEVI-45275 This new function supports the ability to insert into the planned table, and existing
1666
-- version of a package as part of a release-to-release merge operation carried out within release manager.
1667
-- DEVI-49594 This function has subsequently been changed to allow a merge operation to cancel its
1668
-- opposite operation, if the opposite already exists in the planned table. This supports user activity
1669
-- via the Release Manager merge manager display
1670
 
1671
PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR ) IS
1672
 
1673
    ReleaseLocation VARCHAR2(4000);
1674
 
1675
        entryExists NUMBER;
1676
        existingOperation CHAR;
1677
BEGIN
1678
    /*--------------- Business Rules Here -------------------*/
1679
    /*-------------------------------------------------------*/
1680
 
1681
      -- Determine if the specified PV_ID already exists in the planned table....
1682
      SELECT COUNT (pl.pv_id) INTO entryExists
1683
      FROM PLANNED pl
1684
      WHERE pl.pv_id = newPvId
1685
      AND pl.rtag_id = RtagId
1686
      AND pl.view_id = ViewId;
1687
 
1688
      -- If the specified PV_ID already exists in the planned table....
1689
      IF entryExists = 1 THEN
1690
 
1691
         -- Get the operation for the existing entry
1692
         SELECT pl.operation INTO existingOperation
1693
         FROM PLANNED pl
1694
         WHERE pl.pv_id = newPvId
1695
         AND pl.rtag_id = RtagId
1696
         AND pl.view_id = ViewId;
1697
 
1698
         -- Is the specified merge operation the opposite of the existing entry?
1699
         -- If it is not, then there is nothing to do, otherwise...
1700
         -- NOTE: A = Add, S = Subtract
1701
         IF (mergeOperation = 'S' AND existingOperation = 'A')
1702
            OR (mergeOperation = 'A' AND existingOperation = 'S') THEN
1703
 
1704
           -- It is the opposite, so effectively it cancels the existing entry
1705
           -- Remove the entry from the planned table
1706
           DELETE
1707
            FROM PLANNED pl
1708
           WHERE pl.pv_id = newPvId
1709
             AND pl.rtag_id = RtagId
1710
             AND pl.view_id = ViewId;
1711
 
1712
           -- Log action
1713
           SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1714
             FROM PROJECTS proj,
1715
                  RELEASE_TAGS rt
1716
            WHERE rt.PROJ_ID = proj.PROJ_ID
1717
              AND rt.RTAG_ID = RtagId;
1718
 
1719
           Log_Action ( newPvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1720
         END IF;
1721
      ELSE
1722
         -- Add to Planned tabled
1723
         INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
1724
         VALUES( RtagId, newPvId, ViewId, mergeOperation );
1725
 
1726
         -- Log Action
1727
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1728
          FROM PROJECTS proj,
1729
               RELEASE_TAGS rt
1730
         WHERE rt.PROJ_ID = proj.PROJ_ID
1731
         AND   rt.RTAG_ID = RtagId;
1732
 
1733
         Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1734
      END IF;
1735
 
1736
END;
1737
/*-------------------------------------------------------------------------------------------------------*/
1738
END PK_PLANNED;
1739
/
1740
--------------------------------------------------------
1741
--  DDL for Package Body PK_RMAPI
1742
--------------------------------------------------------
1743
 
1744
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI" 
1745
IS
1746
 
1747
   /*-------------------------------------------------------------------------------------------------------*/
1748
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
1749
      RETURN typecur
1750
   IS
1751
      npvid     NUMBER  := 0;
1752
      RECORDS   typecur;
1753
   BEGIN
1754
      BEGIN
1755
         -- Get PV_ID --
1756
         SELECT pv.pv_id
1757
           INTO npvid
1758
           FROM PACKAGES pkg, package_versions pv
1759
          WHERE pv.pkg_id = pkg.pkg_id
1760
            AND pkg.pkg_name = pkgname
1761
            AND pv.pkg_version = pkgversion;
1762
      EXCEPTION
1763
         WHEN NO_DATA_FOUND
1764
         THEN
1765
            raise_application_error (-20000, 'Package Not Found!');
1766
            --WHEN OTHERS THEN
1767
                  -- Consider logging the error and then re-raise
1768
            RAISE;
1769
      END;
1770
 
1771
      -- Finally get package dependencies --
1772
      OPEN RECORDS FOR
1773
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
1774
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
1775
          WHERE dep.pv_id = npvid
1776
            AND dpv.pkg_id = dpkg.pkg_id
1777
            AND dpv.pv_id = dep.dpv_id;
1778
 
1779
      RETURN RECORDS;
1780
   END;
1781
 
1782
/*-------------------------------------------------------------------------------------------------------*/
1783
   FUNCTION wip_iteration_package (
1784
      projname        VARCHAR2,
1785
      iterationname   VARCHAR2,
1786
      pkgname         VARCHAR2
1787
   )
1788
      RETURN typecur
1789
   IS
1790
      nrtagid   NUMBER  := 0;
1791
      RECORDS   typecur;
1792
   BEGIN
1793
      BEGIN
1794
         -- Get latest rtag_id --
1795
         SELECT rt.rtag_id
1796
           INTO nrtagid
1797
           FROM projects proj, release_tags rt
1798
          WHERE rt.proj_id = proj.proj_id
1799
            AND UPPER (proj.proj_name) = UPPER (projname)
1800
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
1801
 
1802
         IF (nrtagid IS NULL)
1803
         THEN
1804
            raise_application_error (-20000,
1805
                                     'Work In Progress is Not Found!');
1806
         END IF;
1807
      EXCEPTION
1808
         WHEN NO_DATA_FOUND
1809
         THEN
1810
            raise_application_error (-20000,
1811
                                     'Work In Progress is Not Found!');
1812
            RAISE;
1813
      END;
1814
 
1815
      -- Finally get package dependencies --
1816
      OPEN RECORDS FOR
1817
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
1818
                pv.src_path
1819
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
1820
          WHERE pv.pkg_id = pkg.pkg_id
1821
            AND wip.pv_id = pv.pv_id
1822
            AND wip.rtag_id = nrtagid
1823
            AND pkg.pkg_name = pkgname;
1824
 
1825
      RETURN RECORDS;
1826
   END;
1827
 
1828
/*-------------------------------------------------------------------------------------------------------*/
1829
   FUNCTION auto_make_release (
1830
      rtagid                   IN   NUMBER,
1831
      pkgname                  IN   VARCHAR2,
1832
      vext                     IN   VARCHAR2,
1833
      newpkgversion            IN   VARCHAR2,
1834
      label                    IN   VARCHAR2,
1835
      dependenciesimportlist   IN   VARCHAR2,
1836
      isrippled                IN   NUMBER,
1837
      username                 IN   VARCHAR2
1838
   )
1839
      RETURN NUMBER
1840
   IS
1841
      pkgid                           NUMBER;
1842
      pvid                            NUMBER                        := 0;
1843
      userid                          NUMBER;
1844
      dlocked                         VARCHAR2 (20)                 := NULL;
1845
      clonefrompvid                   NUMBER;
1846
      ssv_mm                          package_versions.v_mm%TYPE;
1847
      ssv_nmm                         package_versions.v_nmm%TYPE;
1848
      ssv_ext                         package_versions.v_ext%TYPE;
1849
      return_package_not_found        NUMBER                        := -1;
1850
      return_package_already_exists   NUMBER                        := -2;
1851
      return_not_approved             NUMBER                        := -3;
1852
   BEGIN
1853
      /*--------------- Business Rules Here -------------------*/
1854
      IF (rtagid IS NULL)
1855
      THEN
1856
         raise_application_error (-20000, 'RtagId must be supplied.');
1857
      END IF;
1858
 
1859
      IF (pkgname IS NULL)
1860
      THEN
1861
         raise_application_error (-20000, 'PkgName must be supplied.');
1862
      END IF;
1863
 
1864
      IF (newpkgversion IS NULL)
1865
      THEN
1866
         raise_application_error (-20000, 'PkgVersion must be supplied.');
1867
      END IF;
1868
 
1869
      IF (label IS NULL)
1870
      THEN
1871
         raise_application_error (-20000, 'Label must be supplied.');
1872
      END IF;
1873
 
1874
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
1875
      THEN
1876
         raise_application_error
1877
            (-20000,
1878
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
1879
            );
1880
      END IF;
1881
 
1882
      IF (username IS NULL)
1883
      THEN
1884
         raise_application_error (-20000, 'UserName must be supplied.');
1885
      END IF;
1886
 
1887
      -- Get user_id
1888
      BEGIN
1889
         SELECT usr.user_id
1890
           INTO userid
1891
           FROM users usr
1892
          WHERE UPPER (usr.user_name) = UPPER (username)
1893
            AND usr.is_disabled IS NULL;
1894
      EXCEPTION
1895
         WHEN NO_DATA_FOUND
1896
         THEN
1897
            raise_application_error (-20000,
1898
                                        'UserName '
1899
                                     || username
1900
                                     || ' is not valid or disabled.'
1901
                                    );
1902
      END;
1903
 
1904
/*-------------------------------------------------------*/
1905
 
1906
      -- Create package if necessary
1907
      IF isrippled = 1
1908
      THEN
1909
         /* Ripple Build */
1910
         BEGIN
1911
            -- Make sure that package does not exist
1912
            SELECT pv.pv_id
1913
              INTO pvid
1914
              FROM package_versions pv, PACKAGES pkg
1915
             WHERE pv.pkg_id = pkg.pkg_id
1916
               AND pkg.pkg_name = pkgname
1917
               AND pv.pkg_version = newpkgversion;
1918
         EXCEPTION
1919
            WHEN NO_DATA_FOUND
1920
            THEN
1921
               pvid := 0;
1922
         END;
1923
 
1924
         IF (pvid = 0)
1925
         THEN
1926
            -- Split current version in parts
1927
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
1928
 
1929
            BEGIN
1930
               -- Find package to be replaced with thie ripple package
1931
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
1932
               THEN
1933
                  SELECT pv.pv_id
1934
                    INTO clonefrompvid
1935
                    FROM PACKAGES pkg, package_versions pv,
1936
                         release_content rc
1937
                   WHERE rc.pv_id = pv.pv_id
1938
                     AND pv.pkg_id = pkg.pkg_id
1939
                     AND rc.rtag_id = rtagid
1940
                     AND pkg.pkg_name = pkgname
1941
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
1942
               ELSE
1943
                  SELECT pv.pv_id
1944
                    INTO clonefrompvid
1945
                    FROM PACKAGES pkg, package_versions pv,
1946
                         release_content rc
1947
                   WHERE rc.pv_id = pv.pv_id
1948
                     AND pv.pkg_id = pkg.pkg_id
1949
                     AND rc.rtag_id = rtagid
1950
                     AND pkg.pkg_name = pkgname
1951
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
1952
               END IF;
1953
            EXCEPTION
1954
               WHEN NO_DATA_FOUND
1955
               THEN
1956
                  raise_application_error
1957
                                        (-20000,
1958
                                            'Cannot get CloneFromPvId. VExt='
1959
                                         || vext
1960
                                         || ', RtagId='
1961
                                         || rtagid
1962
                                         || ', PkgName='
1963
                                         || pkgname
1964
                                         || ', SSV_EXT='
1965
                                         || ssv_ext
1966
                                        );
1967
            END;
1968
 
1969
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
1970
            THEN
1971
               -- Create package
1972
               seed_package_names_versions (pkgname,
1973
                                            newpkgversion,
1974
                                            userid,
1975
                                            pvid,
1976
                                            clonefrompvid
1977
                                           );
1978
            ELSE
1979
               -- Create package
1980
               seed_package_names_versions2 (pkgname,
1981
                                             newpkgversion,
1982
                                             userid,
1983
                                             pvid,
1984
                                             clonefrompvid
1985
                                            );
1986
            END IF;
1987
 
1988
            -- Update Package reason for release
1989
            UPDATE package_versions pv
1990
               SET pv.comments = 'Rippled Build.',
1991
                   pv.build_type = 'Y'
1992
             WHERE pv.pv_id = pvid;
1993
         ELSE
1994
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
1995
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
1996
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
1997
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
1998
            UPDATE package_versions pv
1999
               SET pv.release_notes_info = null,
2000
                   pv.modified_stamp = ora_sysdatetime
2001
             WHERE pv.pv_id = pvid;
2002
 
2003
            RETURN return_package_already_exists;
2004
         END IF;
2005
      ELSE
2006
         /* Auto build from Pending area */
2007
 
2008
         -- Find package in pending area
2009
         BEGIN
2010
            SELECT pv.pv_id, pv.dlocked
2011
              INTO pvid, dlocked
2012
              FROM planned pl, package_versions pv, PACKAGES pkg
2013
             WHERE pl.pv_id = pv.pv_id
2014
               AND pv.pkg_id = pkg.pkg_id
2015
               AND pl.rtag_id = rtagid
2016
               AND pkg.pkg_name = pkgname
2017
               AND pv.dlocked = 'A'
2018
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
2019
               AND rownum = 1
2020
             ORDER BY pv.modified_stamp;
2021
         EXCEPTION
2022
            WHEN NO_DATA_FOUND
2023
            THEN
2024
               pvid := 0;
2025
         END;
2026
 
2027
         IF (pvid = 0)
2028
         THEN
2029
            -- Package does not exist in pending area, hence report it
2030
            RETURN return_package_not_found;
2031
         ELSIF (dlocked != 'A')
2032
         THEN
2033
            -- Package is not approved for autobuild
2034
            RETURN return_not_approved;
2035
         END IF;
2036
      END IF;
2037
 
2038
      BEGIN
2039
         -- Import Dependencies
2040
         import_dependencies (pvid, dependenciesimportlist, userid);
2041
      END;
2042
 
2043
      BEGIN
2044
         -- Split current version in parts
2045
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2046
 
2047
         -- Update Package Details
2048
         UPDATE package_versions pv
2049
            SET pv.pkg_version = newpkgversion,
2050
                pv.v_ext = ssv_ext,
2051
                pv.v_mm = ssv_mm,
2052
                pv.v_nmm = ssv_nmm,
2053
                pv.pkg_label = label
2054
          WHERE pv.pv_id = pvid;
2055
      EXCEPTION
2056
         WHEN DUP_VAL_ON_INDEX
2057
         THEN
2058
            -- Package already exists, hence cannot be used for ripple build
2059
            RETURN return_package_already_exists;
2060
      END;
2061
 
2062
      -- Update the is_autobuildable
2063
      UPDATE package_versions
2064
         SET is_autobuildable = 'Y'
2065
       WHERE pv_id = pvid;
2066
 
2067
      -- Now release package
2068
      pk_environment.auto_make_release (pvid,
2069
                                        rtagid,
2070
                                        userid,
2071
                                        vext,
2072
                                        ssv_ext,
2073
                                        clonefrompvid
2074
                                       );
2075
 
2076
      --Now clean the PLANNED_VERSIONS table
2077
      SELECT pkg_id
2078
        INTO pkgid
2079
        FROM PACKAGES
2080
       WHERE pkg_name = pkgname;
2081
 
2082
      DELETE FROM planned_versions
2083
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
2084
 
2085
      RETURN pvid;
2086
   END;
2087
 
2088
/*-------------------------------------------------------------------------------------------------------*/
2089
   FUNCTION auto_make_vcsrelease (
2090
      rtagid                   IN   NUMBER,
2091
      pkgname                  IN   VARCHAR2,
2092
      vext                     IN   VARCHAR2,
2093
      newpkgversion            IN   VARCHAR2,
2094
      vcstag             IN   VARCHAR2,
2095
      dependenciesimportlist   IN   VARCHAR2,
2096
      isrippled                IN   NUMBER,
2097
      username                 IN   VARCHAR2
2098
   )
2099
      RETURN NUMBER
2100
   IS
2101
      pkgid                           NUMBER;
2102
      pvid                            NUMBER                        := 0;
2103
      userid                          NUMBER;
2104
      dlocked                         VARCHAR2 (20)                 := NULL;
2105
      clonefrompvid                   NUMBER;
2106
      ssv_mm                          package_versions.v_mm%TYPE;
2107
      ssv_nmm                         package_versions.v_nmm%TYPE;
2108
      ssv_ext                         package_versions.v_ext%TYPE;
2109
      return_package_not_found        NUMBER                        := -1;
2110
      return_package_already_exists   NUMBER                        := -2;
2111
      return_not_approved             NUMBER                        := -3;
2112
 
2113
      x_vcstypeid                     NUMBER;
2114
      x_tag                           VARCHAR2(32);
2115
      x_label                         VARCHAR2(60);
2116
      x_srcpath                       VARCHAR2(2000);
2117
 
2118
      -- Regular expression constituents
2119
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
2120
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
2121
      BOL           VARCHAR2(4)  := '^';
2122
      Anything      VARCHAR2(4)  := '.*';
2123
      ReplaceToken1 VARCHAR2(4)  := '\1';
2124
      ReplaceToken2 VARCHAR2(4)  := '\2';
2125
      ReplaceToken3 VARCHAR2(4)  := '\3';
2126
      iprev_modifier_id               NUMBER;
2127
 
2128
   BEGIN
2129
      /*--------------- Business Rules Here -------------------*/
2130
      IF (rtagid IS NULL)
2131
      THEN
2132
         raise_application_error (-20000, 'RtagId must be supplied.');
2133
      END IF;
2134
 
2135
      IF (pkgname IS NULL)
2136
      THEN
2137
         raise_application_error (-20000, 'PkgName must be supplied.');
2138
      END IF;
2139
 
2140
      IF (newpkgversion IS NULL)
2141
      THEN
2142
         raise_application_error (-20000, 'PkgVersion must be supplied.');
2143
      END IF;
2144
 
2145
      IF (vcstag IS NULL)
2146
      THEN
2147
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
2148
      END IF;
2149
 
2150
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
2151
      THEN
2152
         raise_application_error
2153
            (-20000,
2154
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
2155
            );
2156
      END IF;
2157
 
2158
      IF (username IS NULL)
2159
      THEN
2160
         raise_application_error (-20000, 'UserName must be supplied.');
2161
      END IF;
2162
 
2163
      -- Parse the PkgVcsTag
2164
      -- Sets up
2165
      --   x_tag, x_label, x_srcpath
2166
 
2167
       BEGIN
2168
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
2169
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
2170
 
2171
          -- Decode the short tag
2172
          CASE x_tag
2173
             WHEN 'CC' THEN
2174
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
2175
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
2176
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
2177
 
2178
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
2179
                -- check for that error as well as the obvious zero-length string conditions.
2180
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
2181
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
2182
                END IF;
2183
 
2184
             WHEN 'SVN' THEN
2185
                -- extract the 2nd token, that being the subversion tag
2186
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);
2187
                x_label   := 'N/A';
2188
 
2189
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
2190
                -- check for that error as well as the obvious zero-length string conditions.
2191
                IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THEN
2192
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
2193
                END IF;
2194
 
2195
             WHEN 'UC' THEN
2196
                -- nothing to extract, just assign defaults
2197
                x_srcpath := '';
2198
                x_label   := 'N/A';
2199
             ELSE
2200
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
2201
          END CASE;
2202
       END;
2203
 
2204
      -- Get the VCS_TYPE_ID for the version control system.
2205
      BEGIN
2206
         SELECT vt.vcs_type_id
2207
         INTO x_vcstypeid
2208
         FROM VCS_TYPE vt
2209
         WHERE vt.tag = x_tag;
2210
         EXCEPTION
2211
            WHEN NO_DATA_FOUND THEN
2212
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
2213
      END;
2214
 
2215
 
2216
      -- Get user_id
2217
      BEGIN
2218
         SELECT usr.user_id
2219
           INTO userid
2220
           FROM users usr
2221
          WHERE UPPER (usr.user_name) = UPPER (username)
2222
            AND usr.is_disabled IS NULL;
2223
      EXCEPTION
2224
         WHEN NO_DATA_FOUND
2225
         THEN
2226
            raise_application_error (-20000,
2227
                                        'UserName '
2228
                                     || username
2229
                                     || ' is not valid or disabled.'
2230
                                    );
2231
      END;
2232
 
2233
/*-------------------------------------------------------*/
2234
 
2235
      -- Create package if necessary
2236
      IF isrippled = 1
2237
      THEN
2238
         /* Ripple Build */
2239
         BEGIN
2240
            -- Make sure that package does not exist
2241
            SELECT pv.pv_id
2242
              INTO pvid
2243
              FROM package_versions pv, PACKAGES pkg
2244
             WHERE pv.pkg_id = pkg.pkg_id
2245
               AND pkg.pkg_name = pkgname
2246
               AND pv.pkg_version = newpkgversion;
2247
         EXCEPTION
2248
            WHEN NO_DATA_FOUND
2249
            THEN
2250
               pvid := 0;
2251
         END;
2252
 
2253
         IF (pvid = 0)
2254
         THEN
2255
            -- Split current version in parts
2256
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2257
 
2258
            BEGIN
2259
               -- Find package to be replaced with thie ripple package
2260
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2261
               THEN
2262
                  SELECT pv.pv_id
2263
                    INTO clonefrompvid
2264
                    FROM PACKAGES pkg, package_versions pv,
2265
                         release_content rc
2266
                   WHERE rc.pv_id = pv.pv_id
2267
                     AND pv.pkg_id = pkg.pkg_id
2268
                     AND rc.rtag_id = rtagid
2269
                     AND pkg.pkg_name = pkgname
2270
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
2271
               ELSE
2272
                  SELECT pv.pv_id
2273
                    INTO clonefrompvid
2274
                    FROM PACKAGES pkg, package_versions pv,
2275
                         release_content rc
2276
                   WHERE rc.pv_id = pv.pv_id
2277
                     AND pv.pkg_id = pkg.pkg_id
2278
                     AND rc.rtag_id = rtagid
2279
                     AND pkg.pkg_name = pkgname
2280
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2281
               END IF;
2282
            EXCEPTION
2283
               WHEN NO_DATA_FOUND
2284
               THEN
2285
                  raise_application_error
2286
                                        (-20000,
2287
                                            'Cannot get CloneFromPvId. VExt='
2288
                                         || vext
2289
                                         || ', RtagId='
2290
                                         || rtagid
2291
                                         || ', PkgName='
2292
                                         || pkgname
2293
                                         || ', SSV_EXT='
2294
                                         || ssv_ext
2295
                                        );
2296
            END;
2297
 
2298
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2299
            THEN
2300
               -- Create package
2301
               seed_package_names_versions (pkgname,
2302
                                            newpkgversion,
2303
                                            userid,
2304
                                            pvid,
2305
                                            clonefrompvid
2306
                                           );
2307
            ELSE
2308
               -- Create package
2309
               seed_package_names_versions2 (pkgname,
2310
                                             newpkgversion,
2311
                                             userid,
2312
                                             pvid,
2313
                                             clonefrompvid
2314
                                            );
2315
            END IF;
2316
 
2317
            -- Update Package reason for release
2318
            UPDATE package_versions pv
2319
               SET pv.comments = 'Rippled Build.',
2320
                   pv.build_type = 'Y'
2321
             WHERE pv.pv_id = pvid;
2322
         ELSE
2323
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
2324
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
2325
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
2326
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
2327
            UPDATE package_versions pv
2328
               SET pv.release_notes_info = null,
2329
                   pv.modified_stamp = ora_sysdatetime
2330
             WHERE pv.pv_id = pvid;
2331
 
2332
            --DEVI-066151
2333
            log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');
2334
 
2335
            RETURN return_package_already_exists;
2336
         END IF;
2337
      ELSE
2338
         /* Auto build from Pending area */
2339
 
2340
         -- Find package in pending area
2341
         BEGIN
2342
            SELECT pv.pv_id, pv.dlocked
2343
              INTO pvid, dlocked
2344
              FROM planned pl, package_versions pv, PACKAGES pkg
2345
             WHERE pl.pv_id = pv.pv_id
2346
               AND pv.pkg_id = pkg.pkg_id
2347
               AND pl.rtag_id = rtagid
2348
               AND pkg.pkg_name = pkgname
2349
               AND pv.dlocked = 'A'
2350
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
2351
               AND rownum = 1
2352
             ORDER BY pv.modified_stamp;
2353
         EXCEPTION
2354
            WHEN NO_DATA_FOUND
2355
            THEN
2356
               pvid := 0;
2357
         END;
2358
 
2359
         IF (pvid = 0)
2360
         THEN
2361
            -- Package does not exist in pending area, hence report it
2362
            RETURN return_package_not_found;
2363
         ELSIF (dlocked != 'A')
2364
         THEN
2365
            -- Package is not approved for autobuild
2366
            RETURN return_not_approved;
2367
         END IF;
2368
      END IF;
2369
 
2370
      BEGIN
2371
         -- Import Dependencies
2372
         import_dependencies (pvid, dependenciesimportlist, userid);
2373
      END;
2374
 
2375
 
2376
      BEGIN
2377
         -- Split current version in parts
2378
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2379
 
2380
         -- Update Package Details
2381
         UPDATE package_versions pv
2382
            SET pv.pkg_version = newpkgversion,
2383
                pv.v_ext = ssv_ext,
2384
                pv.v_mm = ssv_mm,
2385
                pv.v_nmm = ssv_nmm,
2386
                pv.src_path = x_srcpath,
2387
                pv.pkg_label = x_label,
2388
                pv.vcs_type_id = x_vcstypeid
2389
          WHERE pv.pv_id = pvid;
2390
      EXCEPTION
2391
         WHEN DUP_VAL_ON_INDEX
2392
         THEN
2393
            -- Package already exists, hence cannot be used for ripple build
2394
            RETURN return_package_already_exists;
2395
      END;
2396
 
2397
      -- Update the is_autobuildable
2398
      UPDATE package_versions
2399
         SET is_autobuildable = 'Y'
2400
       WHERE pv_id = pvid;
2401
 
2402
      -- DEVI-063601
2403
      -- For planned builds the modifier_id shouldn't be set to buildadm.
2404
      -- To ensure this the modifier_id is obtained so it can be restored after
2405
      -- the function pk_environment.auto_make_release is called.
2406
      -- This function calls, change_state, which sets the modifier_id to the
2407
      -- specified userid, which for auto builds is buildadm.
2408
      SELECT pv.modifier_id INTO iprev_modifier_id
2409
      FROM package_versions pv WHERE pv.pv_id = pvid;
2410
 
2411
      -- Now release package
2412
      pk_environment.auto_make_release (pvid,
2413
                                        rtagid,
2414
                                        userid,
2415
                                        vext,
2416
                                        ssv_ext,
2417
                                        clonefrompvid
2418
                                       );
2419
 
2420
      -- DEVI-063601
2421
      -- if it is a planned build then restore the modifier_id to the previous modifier
2422
      UPDATE package_versions pv SET pv.modifier_id = iprev_modifier_id
2423
      WHERE pv.pv_id = pvid;
2424
 
2425
      --Now clean the PLANNED_VERSIONS table
2426
      SELECT pkg_id
2427
        INTO pkgid
2428
        FROM PACKAGES
2429
       WHERE pkg_name = pkgname;
2430
 
2431
      DELETE FROM planned_versions
2432
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
2433
 
2434
      RETURN pvid;
2435
   END;
2436
 
2437
/*-------------------------------------------------------------------------------------------------------*/
2438
   PROCEDURE import_dependencies (
2439
      pvid                     IN   NUMBER,
2440
      dependenciesimportlist   IN   VARCHAR2,
2441
      userid                   IN   NUMBER
2442
   )
2443
   IS
2444
/*
2445
|| DependenciesImportList Format:
2446
|| "pkgA","1.0.0";"pkgB","2.0.0";
2447
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
2448
*/
2449
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
2450
         INDEX BY VARCHAR2 (4000);
2451
 
2452
      seperator         VARCHAR2 (2)           := '||';
2453
      pkgname           VARCHAR2 (4000);
2454
      pkgversion        VARCHAR2 (4000);
2455
      buildtype         VARCHAR2 (50);
2456
      pkgid             NUMBER;
2457
      vext              VARCHAR2 (4000);
2458
      dpvid             NUMBER;
2459
      slist             VARCHAR2 (4000);
2460
      cbuildtypes       tdictionary;
2461
      dependencyrow     NUMBER;
2462
      sdependency       VARCHAR2 (4000);
2463
      first_pos         VARCHAR2 (4000);
2464
      second_pos        VARCHAR2 (4000);
2465
      third_pos         VARCHAR2 (4000);
2466
      forth_pos         VARCHAR2 (4000);
2467
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2468
 
2469
      CURSOR curbuildtype
2470
      IS
2471
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
2472
                dep.build_type
2473
           FROM package_dependencies dep, package_versions dpv
2474
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
2475
 
2476
      recbuildtype      curbuildtype%ROWTYPE;
2477
   BEGIN
2478
      slist := dependenciesimportlist;
2479
 
2480
      -- Preformat String
2481
      IF NOT slist IS NULL
2482
      THEN
2483
         slist := REPLACE (slist, ' ');                      -- Remove spaces
2484
         slist := REPLACE (slist, UTL_TCP.crlf);
2485
         -- Remove new line and carriage-return characters
2486
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
2487
      END IF;
2488
 
2489
      -- Get Current Dependencies
2490
      OPEN curbuildtype;
2491
 
2492
      FETCH curbuildtype
2493
       INTO recbuildtype;
2494
 
2495
      WHILE curbuildtype%FOUND
2496
      LOOP
2497
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
2498
 
2499
         FETCH curbuildtype
2500
          INTO recbuildtype;
2501
      END LOOP;
2502
 
2503
      CLOSE curbuildtype;
2504
 
2505
      -- Separate dependencies with ; separator
2506
      citemcollection := in_list_varchar2 (slist, ';');
2507
 
2508
      BEGIN
2509
         -- Remove old dependencies
2510
         DELETE FROM package_dependencies dep
2511
               WHERE dep.pv_id = pvid;
2512
 
2513
         -- Loop through dependencies
2514
         FOR dependencyrow IN 1 .. citemcollection.COUNT
2515
         LOOP
2516
            -- Extract pkg_name and pkg_version
2517
            sdependency := citemcollection (dependencyrow);
2518
            first_pos := INSTR (sdependency, '"', 1, 1);
2519
            second_pos := INSTR (sdependency, '"', 1, 2);
2520
            third_pos := INSTR (sdependency, '"', 1, 3);
2521
            forth_pos := INSTR (sdependency, '"', 1, 4);
2522
            pkgname :=
2523
               SUBSTR (sdependency,
2524
                       (first_pos + 1),
2525
                       (second_pos - first_pos - 1)
2526
                      );
2527
            pkgversion :=
2528
               SUBSTR (sdependency,
2529
                       (third_pos + 1),
2530
                       (forth_pos - third_pos - 1)
2531
                      );
2532
 
2533
            -- Dependency must exits to be linked against
2534
            BEGIN
2535
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
2536
                 INTO dpvid, pkgid, vext
2537
                 FROM package_versions pv, PACKAGES pkg
2538
                WHERE pv.pkg_id = pkg.pkg_id
2539
                  AND pkg.pkg_name = pkgname
2540
                  AND pv.pkg_version = pkgversion;
2541
            EXCEPTION
2542
               WHEN NO_DATA_FOUND
2543
               THEN
2544
                  raise_application_error
2545
                                  (-20000,
2546
                                      'Dependency ['
2547
                                   || pkgname
2548
                                   || ' '
2549
                                   || pkgversion
2550
                                   || '] does not exist yet and cannot be used!'
2551
                                  );
2552
            END;
2553
 
2554
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
2555
            BEGIN
2556
               buildtype := cbuildtypes (pkgid || seperator || vext);
2557
 
2558
               IF buildtype IS NULL
2559
               THEN
2560
                  -- Set build type to LinkPackageArchive by default
2561
                  buildtype := 'L';
2562
               END IF;
2563
            EXCEPTION
2564
               WHEN NO_DATA_FOUND
2565
               THEN
2566
                  buildtype := 'L';
2567
            END;
2568
 
2569
            -- Insert Dependencies
2570
            update_package_dependency (pvid,
2571
                                       pkgname,
2572
                                       pkgversion,
2573
                                       buildtype,
2574
                                       userid,
2575
 
2576
                                      );
2577
         END LOOP;
2578
      END;
2579
   END;
2580
 
2581
/*-------------------------------------------------------------------------------------------------------*/
2582
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
2583
      RETURN VARCHAR2
2584
   IS
2585
      pkgversion   VARCHAR2 (4000);
2586
   BEGIN
2587
      BEGIN
2588
         SELECT pv.pkg_version
2589
           INTO pkgversion
2590
           FROM PACKAGES pkg, release_content rc, package_versions pv
2591
          WHERE pv.pv_id = rc.pv_id
2592
            AND pkg.pkg_id = pv.pkg_id
2593
            AND pkg.pkg_name = pkgname
2594
            AND rc.rtag_id = rtagid;
2595
 
2596
         RETURN pkgversion;
2597
      END;
2598
   END;
2599
 
2600
/*-------------------------------------------------------------------------------------------------------*/
2601
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
2602
      RETURN VARCHAR2
2603
   IS
2604
      pkgversion   VARCHAR2 (4000);
2605
   BEGIN
2606
      BEGIN
2607
         SELECT pv.pkg_version
2608
           INTO pkgversion
2609
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
2610
          WHERE pv.pv_id = wip.pv_id
2611
            AND pkg.pkg_id = pv.pkg_id
2612
            AND pkg.pkg_name = pkgname
2613
            AND wip.rtag_id = rtagid;
2614
 
2615
         IF pkgversion IS NULL
2616
         THEN
2617
            SELECT pv.pkg_version
2618
              INTO pkgversion
2619
              FROM PACKAGES pkg, planned pl, package_versions pv
2620
             WHERE pv.pv_id = pl.pv_id
2621
               AND pkg.pkg_id = pv.pkg_id
2622
               AND pkg.pkg_name = pkgname
2623
               AND pl.rtag_id = rtagid;
2624
         END IF;
2625
 
2626
         RETURN pkgversion;
2627
      END;
2628
   END;
2629
 
2630
/*-------------------------------------------------------------------------------------------------------*/
2631
   PROCEDURE update_dash_board (rtagid IN NUMBER)
2632
   IS
2633
      projid       NUMBER;
2634
      projiddb     NUMBER;
2635
      total        NUMBER;
2636
      auto_total   NUMBER;
2637
      rtagiddb     NUMBER;
2638
   BEGIN
2639
      SELECT COUNT (*)
2640
        INTO total
2641
        FROM release_content rc, package_versions pv
2642
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
2643
 
2644
      SELECT COUNT (*)
2645
        INTO auto_total
2646
        FROM release_content rc, package_versions pv
2647
       WHERE pv.pv_id = rc.pv_id
2648
         AND pv.is_autobuildable = 'Y'
2649
         AND rc.rtag_id = rtagid;
2650
 
2651
      BEGIN
2652
         SELECT rtag_id
2653
           INTO rtagiddb
2654
           FROM dash_board
2655
          WHERE rtag_id = rtagid;
2656
 
2657
         SELECT proj_id
2658
           INTO projiddb
2659
           FROM dash_board
2660
          WHERE rtag_id = rtagid;
2661
      EXCEPTION
2662
         WHEN NO_DATA_FOUND
2663
         THEN
2664
            rtagiddb := '';
2665
      END;
2666
 
2667
      IF rtagiddb IS NULL
2668
      THEN
2669
         SELECT proj_id
2670
           INTO projid
2671
           FROM release_tags
2672
          WHERE rtag_id = rtagid;
2673
 
2674
         INSERT INTO dash_board
2675
                     (proj_id, rtag_id, last_build_time, automated_packages,
2676
                      total_packages
2677
                     )
2678
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
2679
                      total
2680
                     );
2681
      ELSE
2682
         UPDATE dash_board
2683
            SET last_build_time = ora_sysdatetime,
2684
                automated_packages = auto_total,
2685
                total_packages = total
2686
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
2687
      END IF;
2688
   END;
2689
 
2690
/*-------------------------------------------------------------------------------------------------------*/
2691
   FUNCTION exclude_from_build (
2692
      pvid          IN   NUMBER,
2693
      spkgversion   IN   VARCHAR2,
2694
      rtagid        IN   NUMBER,
2695
      username      IN   VARCHAR2
2696
   )
2697
      RETURN NUMBER
2698
   IS
2699
      userid              NUMBER;
2700
      outerrcode          NUMBER;
2701
      pkgid               NUMBER;
2702
 
2703
      CURSOR dnr_duplicate_cur
2704
      IS
2705
         SELECT *
2706
           FROM do_not_ripple
2707
          WHERE pv_id = pvid AND rtag_id = rtagid;
2708
 
2709
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2710
   BEGIN
2711
      outerrcode := -1;       -- Set default return error code to ERROR state
2712
 
2713
      /*--------------- Business Rules Here -------------------*/
2714
      IF (rtagid IS NULL)
2715
      THEN
2716
         RETURN outerrcode;
2717
--         raise_application_error (-20000, 'RtagId must be supplied.');
2718
      END IF;
2719
 
2720
      IF (pvid IS NULL)
2721
      THEN
2722
         RETURN outerrcode;
2723
--         raise_application_error (-20000, 'PvId must be supplied.');
2724
      END IF;
2725
 
2726
      IF (username IS NULL)
2727
      THEN
2728
         RETURN outerrcode;
2729
--         raise_application_error (-20000, 'UserName must be supplied.');
2730
      END IF;
2731
 
2732
      -- Get user_id
2733
      BEGIN
2734
         SELECT usr.user_id
2735
           INTO userid
2736
           FROM users usr
2737
          WHERE UPPER (usr.user_name) = UPPER (username)
2738
            AND usr.is_disabled IS NULL;
2739
      EXCEPTION
2740
         WHEN NO_DATA_FOUND
2741
         THEN
2742
            RETURN outerrcode;
2743
--            raise_application_error (-20000,
2744
--                                        'UserName '
2745
--                                     || username
2746
--                                     || ' is not valid or disabled.'
2747
--                                    );
2748
      END;
2749
 
2750
      OPEN dnr_duplicate_cur;
2751
 
2752
      FETCH dnr_duplicate_cur
2753
       INTO dnr_duplicate_rec;
2754
 
2755
      IF dnr_duplicate_cur%FOUND
2756
      THEN
2757
         outerrcode := 0;
2758
      END IF;
2759
 
2760
      IF dnr_duplicate_cur%NOTFOUND
2761
      THEN
2762
         /* No duplicate recordset */
2763
         unripple_package (pvid, rtagid, userid);
2764
         outerrcode := 0;                            -- Set return to SUCCESS
2765
      END IF;
2766
 
2767
      CLOSE dnr_duplicate_cur;
2768
 
2769
      SELECT pkg_id
2770
        INTO pkgid
2771
        FROM package_versions
2772
       WHERE pv_id = pvid;
2773
 
2774
      DELETE FROM planned_versions
2775
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2776
 
2777
      RETURN outerrcode;
2778
   END;
2779
 
2780
/*-------------------------------------------------------------------------------------------------------*/
2781
   FUNCTION exclude_indirect_from_build (
2782
      pvid          IN   NUMBER,
2783
      spkgversion   IN   VARCHAR2,
2784
      rtagid        IN   NUMBER,
2785
      username      IN   VARCHAR2,
2786
      rootpvid      IN   NUMBER,
2787
      rootcause     IN   VARCHAR2,
2788
      rootfile      IN   VARCHAR2
2789
   )
2790
      RETURN NUMBER
2791
   IS
2792
      userid              NUMBER;
2793
      outerrcode          NUMBER;
2794
      pkgid               NUMBER;
2795
 
2796
      CURSOR dnr_duplicate_cur
2797
      IS
2798
         SELECT *
2799
           FROM do_not_ripple
2800
          WHERE pv_id = pvid AND rtag_id = rtagid;
2801
 
2802
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2803
   BEGIN
2804
      outerrcode := -1;       -- Set default return error code to ERROR state
2805
 
2806
      /*--------------- Business Rules Here -------------------*/
2807
      IF (rtagid IS NULL)
2808
      THEN
2809
         RETURN outerrcode;
2810
--         raise_application_error (-20000, 'RtagId must be supplied.');
2811
      END IF;
2812
 
2813
      IF (pvid IS NULL)
2814
      THEN
2815
         RETURN outerrcode;
2816
--         raise_application_error (-20000, 'PvId must be supplied.');
2817
      END IF;
2818
 
2819
      IF (username IS NULL)
2820
      THEN
2821
         RETURN outerrcode;
2822
--         raise_application_error (-20000, 'UserName must be supplied.');
2823
      END IF;
2824
 
2825
      -- Get user_id
2826
      BEGIN
2827
         SELECT usr.user_id
2828
           INTO userid
2829
           FROM users usr
2830
          WHERE UPPER (usr.user_name) = UPPER (username)
2831
            AND usr.is_disabled IS NULL;
2832
      EXCEPTION
2833
         WHEN NO_DATA_FOUND
2834
         THEN
2835
            RETURN outerrcode;
2836
--            raise_application_error (-20000,
2837
--                                        'UserName '
2838
--                                     || username
2839
--                                     || ' is not valid or disabled.'
2840
--                                    );
2841
      END;
2842
 
2843
     /* No duplicate recordset */
2844
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
2845
     outerrcode := 0;                            -- Set return to SUCCESS
2846
 
2847
      SELECT pkg_id
2848
        INTO pkgid
2849
        FROM package_versions
2850
       WHERE pv_id = pvid;
2851
 
2852
      DELETE FROM planned_versions
2853
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2854
 
2855
      RETURN outerrcode;
2856
   END;
2857
/*-------------------------------------------------------------------------------------------------------*/
2858
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
2859
   IS
2860
   BEGIN
2861
      INSERT INTO abt_action_log
2862
                  (rcon_id, action_datetime, action
2863
                  )
2864
           VALUES (rconid, ora_sysdatetime, action
2865
                  );
2866
   END;
2867
 
2868
/*-------------------------------------------------------------------------------------------------------*/
2869
   FUNCTION insert_package_metrics (
2870
      rtagid                   IN   NUMBER,
2871
      pkgname                  IN   VARCHAR2,
2872
      vext                     IN   VARCHAR2,
2873
      metricstring             IN   VARCHAR2
2874
   )
2875
      RETURN NUMBER
2876
   IS
2877
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2878
      lv_pvid                  NUMBER                 := 0;
2879
      rownumber                NUMBER;
2880
      rowcontent               VARCHAR2(4000);
2881
      metricname               VARCHAR2(1000);
2882
      metricvalue              VARCHAR2(4000);
2883
      return_insert_error      NUMBER                 := -1;
2884
      return_insert_success    NUMBER                 := 0;
2885
 
2886
      /* Metrics */
2887
      lv_branches                 NUMBER;
2888
      lv_branchlist               VARCHAR2(4000);
2889
      lv_codefiles                NUMBER;
2890
      lv_ignoredfiles             NUMBER;
2891
      lv_directories              NUMBER;
2892
      lv_directorydepth           NUMBER;
2893
      lv_totalfiles               NUMBER;
2894
      lv_makefiles                NUMBER;
2895
      lv_blanklines               NUMBER;
2896
      lv_codelines                NUMBER;
2897
      lv_commentlines             NUMBER;
2898
 
2899
   BEGIN
2900
      /*--------------- Business Rules Here -------------------*/
2901
      IF (rtagid IS NULL)
2902
      THEN
2903
         RETURN return_insert_error;
2904
      END IF;
2905
 
2906
      IF (pkgname IS NULL)
2907
      THEN
2908
         RETURN return_insert_error;
2909
      END IF;
2910
 
2911
      IF (metricstring IS NULL)
2912
      THEN
2913
         RETURN return_insert_error;
2914
      END IF;
2915
 
2916
      BEGIN
2917
         SELECT pv.pv_id
2918
           INTO lv_pvid
2919
           FROM package_versions pv, packages pkg, release_content rc
2920
          WHERE pv.pkg_id = pkg.pkg_id
2921
            AND rc.rtag_id = rtagid
2922
            AND pv.pv_id = rc.pv_id
2923
            AND pkg.pkg_name = pkgname
2924
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2925
      EXCEPTION
2926
           WHEN NO_DATA_FOUND
2927
           THEN
2928
                lv_pvid := 0;
2929
      END;
2930
 
2931
      citemcollection := in_list_varchar2 (metricstring, ';');
2932
 
2933
      FOR rownumber IN 1 .. citemcollection.COUNT
2934
      LOOP
2935
         rowcontent := citemcollection(rownumber);
2936
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
2937
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
2938
 
2939
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
2940
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
2941
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
2942
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
2943
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
2944
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
2945
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
2946
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
2947
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
2948
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
2949
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
2950
         END IF;
2951
      END LOOP;
2952
 
2953
      IF (lv_pvid > 0)
2954
      THEN
2955
         -- Delete any existing entries for this package version to makes sure our data is untainted
2956
         DELETE FROM package_metrics pm
2957
         WHERE pm.pv_id = lv_pvid;
2958
 
2959
         -- Insert the new data into the metrics table
2960
         INSERT INTO package_metrics
2961
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
2962
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
2963
                     )
2964
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
2965
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
2966
                     );
2967
 
2968
         -- Now update the Release_Metrics Table
2969
         update_release_metrics(rtagid);
2970
 
2971
         RETURN return_insert_success;
2972
      ELSE
2973
         RETURN return_insert_error;
2974
      END IF;
2975
   END;
2976
 
2977
/*-------------------------------------------------------------------------------------------------------*/
2978
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
2979
   IS
2980
      lv_totalpackages       NUMBER;
2981
      lv_autobuilt           NUMBER;
2982
      lv_linesofcode         NUMBER;
2983
      lv_unittested          NUMBER;
2984
      lv_autotested          NUMBER;
2985
      lv_numOfbranches       NUMBER;
2986
      lv_lastbuildtime       DATE;
2987
   BEGIN
2988
      IF (rtagid > 0)
2989
      THEN
2990
         -- Get the total number of packages in this release and the number of
2991
         -- those that are autobuilt
2992
         SELECT COUNT (DISTINCT rc.pv_id),
2993
                COUNT (DISTINCT autobuilt_qry.pv_id)
2994
           INTO lv_totalpackages, lv_autobuilt
2995
           FROM release_content rc,
2996
                package_versions pv,
2997
                (
2998
                 SELECT rc.pv_id
2999
                   FROM release_content rc,
3000
                        package_versions pv
3001
                  WHERE pv.is_autobuildable = 'Y'
3002
                    AND pv.pv_id = rc.pv_id
3003
                    AND rc.rtag_id = rtagid
3004
                ) autobuilt_qry
3005
          WHERE pv.pv_id = rc.pv_id
3006
            AND rc.rtag_id = rtagid
3007
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
3008
 
3009
         -- Get the build time of the last package built in this release and the
3010
         -- total number of lines of code
3011
         SELECT MAX(pm.created_stamp),
3012
                SUM(pm.code_lines)
3013
           INTO lv_lastbuildtime, lv_linesofcode
3014
           FROM package_metrics pm, release_content rc
3015
          WHERE pm.pv_id = rc.pv_id
3016
            AND rc.rtag_id = rtagid;
3017
 
3018
         -- Get the number of packages with unit tests in this release and the
3019
         -- number of those that are autotested
3020
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
3021
           FROM unit_tests ut,
3022
                release_content rc
3023
          WHERE ut.pv_id = rc.pv_id
3024
            AND rc.rtag_id = rtagid
3025
        AND ut.test_types_fk != 1;
3026
 
3027
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
3028
          FROM unit_tests ut,
3029
               release_content rc
3030
         WHERE ut.pv_id = rc.pv_id
3031
           AND rc.rtag_id = rtagid
3032
           AND ut.test_types_fk = 7;
3033
 
3034
 
3035
         -- Count the number of unique branches in the packages in this release.
3036
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
3037
--           FROM (
3038
--                SELECT pv_id,
3039
--                       regexp_substr(str, '[^,]+', 1, level) branch,
3040
--                       level lv,
3041
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
3042
--                  FROM (
3043
--                       SELECT pm.pv_id,
3044
--                              ','||pm.branch_list str
3045
--                         FROM package_metrics pm,
3046
--                              release_content rc
3047
--                        WHERE pm.pv_id = rc.pv_id
3048
--                          AND rc.rtag_id = rtagid
3049
--                       )
3050
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
3051
--                )
3052
--          WHERE lv != lg;
3053
 
3054
         UPDATE release_metrics rm
3055
            SET rm.total_packages = lv_totalpackages,
3056
                rm.autobuilt = lv_autobuilt,
3057
                rm.lines_of_code = lv_linesofcode,
3058
                rm.unit_tested = lv_unittested,
3059
                rm.autotested = lv_autotested,
3060
--                rm.branches = lv_numOfbranches,
3061
                rm.last_build_time = lv_lastbuildtime
3062
          WHERE rtag_id = rtagid;
3063
 
3064
         IF (SQL%ROWCOUNT = 0)
3065
         THEN
3066
            INSERT INTO release_metrics
3067
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
3068
                         autotested, last_build_time
3069
                        )
3070
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
3071
                         lv_autotested, lv_lastbuildtime
3072
                        );
3073
         END IF;
3074
--         IF (SQL%ROWCOUNT = 0)
3075
--         THEN
3076
--            INSERT INTO release_metrics
3077
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
3078
--                         autotested, branches, last_build_time
3079
--                        )
3080
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
3081
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
3082
--                        );
3083
--         END IF;
3084
--      ELSE
3085
--         raise_application_error (-20000, 'RtagId must be supplied.');
3086
      END IF;
3087
   END;
3088
/*-------------------------------------------------------------------------------------------------------*/
3089
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
3090
   IS
3091
      vcstypeid    NUMBER;
3092
      vcstag       VARCHAR2(32);
3093
      label        VARCHAR2(60);
3094
      srcpath      VARCHAR2(2000);
3095
      vcstypeid_cc NUMBER;
3096
      vcstypeid_uc NUMBER;
3097
   BEGIN
3098
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
3099
      -- what the primary key value is for the ClearCase VCS entry.
3100
      BEGIN
3101
         SELECT vt.vcs_type_id
3102
         INTO vcstypeid_cc
3103
         FROM VCS_TYPE vt
3104
         WHERE vt.tag = 'CC';
3105
         EXCEPTION
3106
            WHEN NO_DATA_FOUND THEN
3107
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
3108
      END;
3109
 
3110
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
3111
      -- what the primary key value is for the Uncontrolled VCS entry.
3112
      BEGIN
3113
         SELECT vt.vcs_type_id
3114
         INTO vcstypeid_uc
3115
         FROM VCS_TYPE vt
3116
         WHERE vt.tag = 'UC';
3117
         EXCEPTION
3118
            WHEN NO_DATA_FOUND THEN
3119
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
3120
      END;
3121
 
3122
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
3123
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
3124
      BEGIN
3125
         SELECT pv.pkg_label, pv.src_path,
3126
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
3127
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
3128
                 ELSE pv.vcs_type_id END) AS vcs_type_id
3129
         INTO label, srcpath, vcstypeid
3130
         FROM PACKAGE_VERSIONS pv
3131
         WHERE pv.pv_id = pvid;
3132
         EXCEPTION
3133
            WHEN NO_DATA_FOUND THEN
3134
               raise_application_error (-20000, 'Package Version Not Found!');
3135
      END;
3136
 
3137
      -- Get the VCS TAG for the VCS_TYPE_ID.
3138
      BEGIN
3139
         SELECT vt.tag
3140
         INTO vcstag
3141
         FROM VCS_TYPE vt
3142
         WHERE vt.vcs_type_id = vcstypeid;
3143
         EXCEPTION
3144
            WHEN NO_DATA_FOUND THEN
3145
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
3146
      END;
3147
 
3148
      -- Return value depending upon which VCS Tag is being used.
3149
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
3150
      CASE vcstag
3151
         WHEN 'CC' THEN
3152
            RETURN vcstag || '::' || srcpath || '::' || label;
3153
         WHEN 'SVN' THEN
3154
            RETURN vcstag || '::' || srcpath;
3155
         ELSE
3156
            RETURN vcstag || '::';
3157
      END CASE;
3158
 
3159
   END;
3160
/*-------------------------------------------------------------------------------------------------------*/
3161
 
3162
END pk_rmapi;
3163
/
3164
--------------------------------------------------------
3165
--  DDL for Package Body PK_BUILDAPI
3166
--------------------------------------------------------
3167
 
3168
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI" 
3169
IS
3170
   /*-------------------------------------------------------------------------------------------------------*/
3171
   PROCEDURE add_product_component (
3172
      npvid           IN   NUMBER,
3173
      sosname         IN   VARCHAR2,
3174
      sorigfilepath   IN   VARCHAR2,
3175
      sfilename       IN   VARCHAR2,
3176
      sdestfilepath   IN   VARCHAR2,
3177
      nbytesize       IN   NUMBER,
3178
      scrccksum       IN   VARCHAR2
3179
   )
3180
   IS
3181
      nosid   NUMBER;
3182
   BEGIN
3183
      /*--------------- Business Rules Here -------------------*/
3184
      -- OS Name Requirements --
3185
      IF (sosname IS NULL)
3186
      THEN
3187
         raise_application_error (-20000, 'OsName cannot be NULL.');
3188
      END IF;
3189
 
3190
      -- File Requirements --
3191
      IF (NOT sfilename IS NULL)
3192
      THEN
3193
         IF (nbytesize IS NULL)
3194
         THEN
3195
            raise_application_error (-20000, 'Byte Size cannot be NULL.');
3196
         ELSIF (scrccksum IS NULL)
3197
         THEN
3198
            raise_application_error (-20000, 'CRC CKSUM cannot be NULL.');
3199
         END IF;
3200
      END IF;
3201
 
3202
      -- Folder Requirements --
3203
      -- No requirements for now.
3204
 
3205
      /*-------------------------------------------------------*/
3206
 
3207
      -- Get OsId
3208
      nosid := get_osid (sosname);
3209
 
3210
      -- Insert component entry
3211
      INSERT INTO product_components
3212
                  (pv_id, os_id, file_path, file_name, destination_path,
3213
                  byte_size, crc_cksum
3214
                  )
3215
         VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,
3216
                  nbytesize, scrccksum
3217
                  );
3218
   EXCEPTION
3219
      WHEN DUP_VAL_ON_INDEX
3220
      THEN
3221
         raise_application_error (-20000,
3222
                                 'Cannot have duplicate product components.'
3223
                                 );
3224
   END;
3225
 
3226
/*-------------------------------------------------------------------------------------------------------*/
3227
   PROCEDURE remove_all_product_components (
3228
      npvid     IN   NUMBER,
3229
      sosname   IN   VARCHAR2
3230
   )
3231
   IS
3232
      nosid   NUMBER;
3233
   BEGIN
3234
/*--------------- Business Rules Here -------------------*/
3235
/*-------------------------------------------------------*/
3236
 
3237
      -- Get OsId
3238
      nosid := get_osid (sosname);
3239
 
3240
      -- Delete component entry
3241
      DELETE FROM product_components pc
3242
            WHERE pc.pv_id = npvid AND pc.os_id = nosid;
3243
   END;
3244
 
3245
/*-------------------------------------------------------------------------------------------------------*/
3246
   FUNCTION get_osid (sosname IN VARCHAR2)
3247
      RETURN NUMBER
3248
   IS
3249
      code   NUMBER;
3250
   BEGIN
3251
      -- Get Platform Code --
3252
      SELECT pf.code
3253
      INTO code
3254
      FROM platforms pf
3255
      WHERE UPPER (pf.NAME) = UPPER (sosname);
3256
 
3257
      RETURN code;
3258
   EXCEPTION
3259
      WHEN NO_DATA_FOUND
3260
      THEN
3261
         raise_application_error
3262
            (-20000,
3263
               'Platform '
3264
            || sosname
3265
            || ' is not valid. It needs to be added to PLATFORMS table in Release Manager.'
3266
            );
3267
         RAISE;
3268
   END;
3269
 
3270
/*-------------------------------------------------------------------------------------------------------
3271
Obsolete - Superseded by update_build_service_info
3272
*/
3273
 
3274
   PROCEDURE update_build_service (
3275
      sdatabaseserver   IN   VARCHAR2,
3276
      swebserver        IN   VARCHAR2,
3277
      smailserver       IN   VARCHAR2,
3278
      smailsender       IN   VARCHAR2,
3279
      sdiskspace        IN   VARCHAR2,
3280
      ssbommanagement   IN   VARCHAR2
3281
   )
3282
   IS
3283
   BEGIN
3284
      UPDATE build_service_config
3285
         SET config = sdatabaseserver
3286
      WHERE service = 'DATABASE SERVER';
3287
 
3288
      UPDATE build_service_config
3289
         SET config = swebserver
3290
      WHERE service = 'WEB SERVER';
3291
 
3292
      UPDATE build_service_config
3293
         SET config = smailserver
3294
      WHERE service = 'MAIL SERVER';
3295
 
3296
      UPDATE build_service_config
3297
         SET config = smailsender
3298
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3299
 
3300
      UPDATE build_service_config
3301
         SET config = sdiskspace
3302
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3303
 
3304
      UPDATE build_service_config
3305
         SET config = ssbommanagement
3306
      WHERE service = 'SBOM MANAGEMENT';
3307
   END;
3308
 
3309
/*-------------------------------------------------------------------------------------------------------*/
3310
   PROCEDURE update_build_service_info (
3311
      sdatabaseserver   IN   VARCHAR2,
3312
      sarchiveserver    IN   VARCHAR2,
3313
      smailserver       IN   VARCHAR2,
3314
      smailsender       IN   VARCHAR2,
3315
      sdiskspace        IN   VARCHAR2,
3316
      ssbommanagement   IN   VARCHAR2
3317
   )
3318
   IS
3319
   BEGIN
3320
      UPDATE build_service_config
3321
         SET config = sdatabaseserver
3322
      WHERE service = 'DATABASE SERVER';
3323
 
3324
      UPDATE build_service_config
3325
         SET config = sarchiveserver
3326
      WHERE service = 'ARCHIVE SERVER';
3327
 
3328
      UPDATE build_service_config
3329
         SET config = smailserver
3330
      WHERE service = 'MAIL SERVER';
3331
 
3332
      UPDATE build_service_config
3333
         SET config = smailsender
3334
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3335
 
3336
      UPDATE build_service_config
3337
         SET config = sdiskspace
3338
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3339
 
3340
      UPDATE build_service_config
3341
         SET config = ssbommanagement
3342
      WHERE service = 'SBOM MANAGEMENT';
3343
   END;
3344
 
3345
 
3346
/*-------------------------------------------------------------------------------------------------------*/
3347
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)
3348
   IS
3349
      gbe_id   NUMBER;
3350
   BEGIN
3351
      -- Get GBE_ID
3352
      SELECT seq_gbe_id.NEXTVAL
3353
      INTO gbe_id
3354
      FROM DUAL;
3355
 
3356
      INSERT INTO gbe_machtype
3357
                  (gbe_id, gbe_value
3358
                  )
3359
         VALUES (gbe_id, sgbevalue
3360
                  );
3361
   END;
3362
 
3363
/*-------------------------------------------------------------------------------------------------------*/
3364
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)
3365
   IS
3366
   BEGIN
3367
      DELETE FROM gbe_machtype
3368
            WHERE gbe_id = ngbe_id;
3369
   END;
3370
 
3371
/*-------------------------------------------------------------------------------------------------------*/
3372
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)
3373
   IS
3374
   BEGIN
3375
      UPDATE gbe_machtype
3376
         SET gbe_value = sgbevalue
3377
      WHERE gbe_id = ngbe_id;
3378
   END;
3379
 
3380
/*-------------------------------------------------------------------------------------------------------*/
3381
  --This function is obsolete.  It was replaced by add_daemon_config. Done for DEVI-046806
3382
   PROCEDURE add_daemon (
3383
      sdaemonhostname   IN   VARCHAR2,
3384
      nrtagid           IN   NUMBER,
3385
      ngbeid            IN   NUMBER,
3386
      sgbebuildfilter   IN   VARCHAR2
3387
   )
3388
   IS
3389
      nrecordnumber   NUMBER;
3390
      nrconid         NUMBER;
3391
   BEGIN
3392
      -- Get RCON_ID
3393
      SELECT seq_rcon_id.NEXTVAL
3394
      INTO nrconid
3395
      FROM DUAL;
3396
 
3397
      SELECT COUNT (*)
3398
      INTO nrecordnumber
3399
      FROM release_config
3400
      WHERE rtag_id = nrtagid;
3401
 
3402
      IF nrecordnumber = 0
3403
      THEN
3404
         INSERT INTO release_config
3405
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3406
                     gbe_id, gbe_buildfilter
3407
                     )
3408
            VALUES (nrconid, nrtagid, sdaemonhostname, 'M',
3409
                     ngbeid, sgbebuildfilter
3410
                     );
3411
      ELSE
3412
         INSERT INTO release_config
3413
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3414
                     gbe_id, gbe_buildfilter
3415
                     )
3416
            VALUES (nrconid, nrtagid, sdaemonhostname, 'S',
3417
                     ngbeid, sgbebuildfilter
3418
                     );
3419
      END IF;
3420
 
3421
      -- A newly configured daemon should initially be paused (DEVI-047277)
3422
      INSERT INTO run_level
3423
                  (rcon_id, pause)
3424
           VALUES (nrconid, 1);
3425
   END;
3426
 
3427
/*-------------------------------------------------------------------------------------------------------*/
3428
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2)
3429
   IS
3430
   BEGIN
3431
      -- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.
3432
      DELETE FROM daemon_action_log
3433
            WHERE rcon_id IN (
3434
                     SELECT *
3435
                     FROM THE
3436
                              (SELECT CAST
3437
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3438
                                          )
3439
                                 FROM DUAL
3440
                              ));
3441
 
3442
      DELETE FROM run_level
3443
            WHERE rcon_id IN (
3444
                     SELECT *
3445
                     FROM THE
3446
                              (SELECT CAST
3447
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3448
                                          )
3449
                                 FROM DUAL
3450
                              ));
3451
 
3452
      DELETE FROM abt_action_log
3453
            WHERE rcon_id IN (
3454
                     SELECT *
3455
                     FROM THE
3456
                              (SELECT CAST
3457
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3458
                                          )
3459
                                 FROM DUAL
3460
                              ));
3461
 
3462
      -- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.
3463
      DELETE FROM release_config
3464
            WHERE rcon_id IN (
3465
                     SELECT *
3466
                     FROM THE
3467
                              (SELECT CAST
3468
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3469
                                          )
3470
                                 FROM DUAL
3471
                              ));
3472
   END;
3473
 
3474
/*-------------------------------------------------------------------------------------------------------*/
3475
  --This function is obsolete.  It was replaced by update_daemon_config for DEVI-046806
3476
   PROCEDURE update_daemon (
3477
      sdaemonhostname   IN   VARCHAR2,
3478
      nrconid           IN   NUMBER,
3479
      ngbeid            IN   NUMBER,
3480
      sgbebuildfilter   IN   VARCHAR2
3481
   )
3482
   IS
3483
   BEGIN
3484
      UPDATE release_config
3485
         SET daemon_hostname = sdaemonhostname,
3486
            gbe_id = ngbeid,
3487
            gbe_buildfilter = sgbebuildfilter
3488
      WHERE rcon_id = nrconid;
3489
   END;
3490
 
3491
/*-------------------------------------------------------------------------------------------------------*/
3492
   PROCEDURE insert_schedule_info (
3493
      dschedulepause     IN   DATE,
3494
      dscheduleresume    IN   DATE,
3495
      crepeat            IN   VARCHAR2,
3496
      cindefinitepause   IN   VARCHAR2
3497
   )
3498
   IS
3499
      nscheduledid   NUMBER;
3500
   BEGIN
3501
      -- Get Next Available Scheduled Id
3502
      SELECT seq_scheduled_id.NEXTVAL
3503
      INTO nscheduledid
3504
      FROM DUAL;
3505
 
3506
      INSERT INTO run_level_schedule
3507
         VALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,
3508
                  cindefinitepause);
3509
   END;
3510
 
3511
/*-------------------------------------------------------------------------------------------------------*/
3512
   PROCEDURE delete_schedule (nscheduleid IN NUMBER)
3513
   IS
3514
   BEGIN
3515
      DELETE FROM run_level_schedule
3516
            WHERE scheduled_id = nscheduleid;
3517
   END;
3518
 
3519
/*-------------------------------------------------------------------------------------------------------*/
3520
   PROCEDURE set_infinite_pause
3521
   IS
3522
      nscheduledid   NUMBER;
3523
   BEGIN
3524
      -- Get Next Available Scheduled Id
3525
      SELECT seq_scheduled_id.NEXTVAL
3526
      INTO nscheduledid
3527
      FROM DUAL;
3528
 
3529
      INSERT INTO run_level_schedule
3530
         VALUES (nscheduledid, NULL, NULL, NULL, 'P');
3531
   END;
3532
 
3533
/*-------------------------------------------------------------------------------------------------------*/
3534
   PROCEDURE set_resume
3535
   IS
3536
   BEGIN
3537
      DELETE FROM run_level_schedule
3538
            WHERE indefinite_pause = 'P';
3539
   END;
3540
 
3541
/*-------------------------------------------------------------------------------------------------------*/
3542
   PROCEDURE delete_out_of_date_schedule
3543
   IS
3544
   BEGIN
3545
      DELETE FROM run_level_schedule
3546
            WHERE scheduled_resume < ora_sysdatetime AND repeat = 0;
3547
   END;
3548
 
3549
/*-------------------------------------------------------------------------------------------------------*/
3550
   PROCEDURE set_daemon_resume (nrconid IN NUMBER)
3551
   IS
3552
   BEGIN
3553
      UPDATE run_level
3554
         SET PAUSE = NULL
3555
      WHERE rcon_id = nrconid;
3556
   END;
3557
 
3558
/*-------------------------------------------------------------------------------------------------------*/
3559
   PROCEDURE set_daemon_pause (nrconid IN NUMBER)
3560
   IS
3561
   BEGIN
3562
      UPDATE run_level
3563
         SET PAUSE = 1
3564
      WHERE rcon_id = nrconid;
3565
   END;
3566
/*-------------------------------------------------------------------------------------------------------*/
3567
   PROCEDURE set_daemon_disable (nrconid NUMBER)
3568
   IS
3569
   BEGIN
3570
      UPDATE run_level
3571
         SET PAUSE = 2
3572
      WHERE rcon_id = nrconid;
3573
   END;
3574
 
3575
/*-------------------------------------------------------------------------------------------------------*/
3576
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)
3577
   IS
3578
   BEGIN
3579
     UPDATE run_level
3580
     SET pause = nstate
3581
     WHERE rcon_id IN
3582
     (SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);
3583
   END;
3584
 
3585
/*-------------------------------------------------------------------------------------------------------*/
3586
   -- inserts a new daemon instruction
3587
   -- This is for use by the Release Manager Website code.
3588
   --
3589
   PROCEDURE insert_daemon_inst
3590
   ( nOp_code IN NUMBER
3591
   , nRtag_id IN NUMBER
3592
   , nPv_id IN NUMBER
3593
   , nSchedDate IN DATE
3594
   , nRepeatSecs IN NUMBER
3595
   , nAddedDate IN DATE
3596
   , nUser_id IN NUMBER
3597
   ) IS
3598
      nInstId   NUMBER;
3599
   BEGIN
3600
      -- Get Next Available Scheduled Id
3601
      SELECT seq_daemon_instruction_id.NEXTVAL
3602
      INTO nInstId
3603
      FROM DUAL;
3604
 
3605
      INSERT INTO Daemon_Instructions
3606
         VALUES (nInstId, nOp_code, nRtag_id,
3607
                  nPv_id, nSchedDate, nRepeatSecs,
3608
                  nAddedDate, nUser_id, '0');
3609
   EXCEPTION
3610
      WHEN DUP_VAL_ON_INDEX
3611
      THEN
3612
         raise_application_error (-20000,
3613
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3614
                                 );
3615
      WHEN OTHERS
3616
      THEN
3617
         raise;
3618
   END insert_daemon_inst;
3619
 
3620
/*-------------------------------------------------------------------------------------------------------*/
3621
   -- Deletes a daemon instruction matching the specified instruction ID
3622
   --
3623
   PROCEDURE del_daemon_inst
3624
   ( nInstId IN NUMBER
3625
   ) IS
3626
 
3627
   BEGIN
3628
      DELETE FROM Daemon_Instructions
3629
      WHERE DAEMON_INSTRUCTIONS_ID = nInstId;
3630
 
3631
   END del_daemon_inst;
3632
 
3633
/*-------------------------------------------------------------------------------------------------------*/
3634
   -- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id
3635
   --
3636
   PROCEDURE del_daemon_inst_by_rtag_pvid(
3637
      nOp_code IN NUMBER,
3638
      nRtag_id IN NUMBER,
3639
      nPv_id IN NUMBER
3640
   ) IS
3641
   BEGIN
3642
      DELETE FROM Daemon_Instructions
3643
      WHERE OP_CODE = nOp_code
3644
      AND RTAG_ID = nRtag_id
3645
      AND PV_ID   = nPv_id;
3646
 
3647
   END del_daemon_inst_by_rtag_pvid;
3648
 
3649
/*-------------------------------------------------------------------------------------------------------*/
3650
   -- Updates a daemon instruction
3651
   -- This is for use by the Release Manager Website code.
3652
   --
3653
   PROCEDURE update_daemon_inst
3654
   ( nInstId IN NUMBER
3655
   , nOp_code IN NUMBER
3656
   , nRtag_id IN NUMBER
3657
   , nPv_id IN NUMBER
3658
   , nSchedDate IN DATE
3659
   , nRepeatSecs IN NUMBER
3660
   , nAddedDate IN DATE
3661
   , nUser_id IN NUMBER
3662
   ) IS
3663
      CURSOR daemon_inst_cur IS
3664
         SELECT *
3665
         FROM daemon_instructions di
3666
         WHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;
3667
 
3668
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3669
 
3670
      exc_inst_removed EXCEPTION;
3671
   BEGIN
3672
      OPEN daemon_inst_cur;
3673
 
3674
      FETCH daemon_inst_cur
3675
      INTO daemon_inst_rec;
3676
 
3677
      IF daemon_inst_cur%FOUND THEN
3678
 
3679
         UPDATE Daemon_Instructions
3680
         SET op_code = nOp_code,
3681
            rtag_id = nRtag_id,
3682
            pv_id   = nPv_id,
3683
            scheduled_datetime = nSchedDate,
3684
            repeat_secs = nRepeatSecs,
3685
            added_datetime = nAddedDate,
3686
            user_id = nUser_id,
3687
            in_progress = '0'
3688
         WHERE daemon_instructions_id = nInstId;
3689
      ELSE
3690
         raise exc_inst_removed;
3691
      END IF;
3692
 
3693
      CLOSE daemon_inst_cur;
3694
   EXCEPTION
3695
      WHEN DUP_VAL_ON_INDEX
3696
      THEN
3697
         raise_application_error (-20000,
3698
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3699
                                 );
3700
      WHEN exc_inst_removed
3701
      THEN
3702
         raise_application_error (-20000,
3703
                                 'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.'
3704
                                 );
3705
      WHEN OTHERS
3706
      THEN
3707
         raise;
3708
   END update_daemon_inst;
3709
 
3710
/*-------------------------------------------------------------------------------------------------------*/
3711
   -- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination
3712
   -- This is for use by the Release Manager Website code.
3713
   --
3714
   FUNCTION daemon_ops_for_rtag_pvid(
3715
      nRtag_id IN NUMBER,
3716
      nPv_id IN NUMBER
3717
   ) RETURN VARCHAR2
3718
   IS
3719
      CURSOR daemon_inst_cur IS
3720
         SELECT di.OP_CODE
3721
         FROM daemon_instructions di
3722
         WHERE di.RTAG_ID = nRtag_id
3723
            AND di.PV_ID = nPv_id;
3724
 
3725
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3726
 
3727
      sRetList VARCHAR2(4000) := '';
3728
 
3729
   BEGIN
3730
      OPEN daemon_inst_cur;
3731
 
3732
      FETCH daemon_inst_cur
3733
      INTO daemon_inst_rec;
3734
 
3735
      WHILE daemon_inst_cur%FOUND
3736
      LOOP
3737
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3738
 
3739
         FETCH daemon_inst_cur
3740
         INTO daemon_inst_rec;
3741
      END LOOP;
3742
 
3743
      CLOSE daemon_inst_cur;
3744
 
3745
      RETURN sRetList;
3746
   END daemon_ops_for_rtag_pvid;
3747
/*-------------------------------------------------------------------------------------------------------*/
3748
   -- Returns a comma-separated list of operation codes found for a given rtag
3749
   -- This is for use by the Release Manager Website code.
3750
   --
3751
   FUNCTION daemon_ops_for_rtag(
3752
      nRtag_id IN NUMBER
3753
   ) RETURN VARCHAR2
3754
   IS
3755
      CURSOR daemon_inst_cur IS
3756
         SELECT di.OP_CODE
3757
         FROM daemon_instructions di
3758
         WHERE di.RTAG_ID = nRtag_id;
3759
 
3760
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3761
 
3762
      sRetList VARCHAR2(4000) := '';
3763
 
3764
   BEGIN
3765
      OPEN daemon_inst_cur;
3766
 
3767
      FETCH daemon_inst_cur
3768
      INTO daemon_inst_rec;
3769
 
3770
      WHILE daemon_inst_cur%FOUND
3771
      LOOP
3772
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3773
 
3774
         FETCH daemon_inst_cur
3775
         INTO daemon_inst_rec;
3776
      END LOOP;
3777
 
3778
      CLOSE daemon_inst_cur;
3779
 
3780
      RETURN sRetList;
3781
   END daemon_ops_for_rtag;
3782
/*-------------------------------------------------------------------------------------------------------*/
3783
   -- Gets a record from the daemon instruction table that can be carried out now and returns the fields
3784
   -- in the record a daemon will need
3785
   -- The Buildtool should use this to find a job to do for a particular release. It should then call
3786
   -- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call
3787
   -- mark_daemon_inst_completed(inst_id) to signal its completion.
3788
   -- Can be called repeatedly to get a full list of all instructions for a release, by passing back in
3789
   -- the instruction ID obtained from the previous call (the 1st call should use 0)
3790
   -- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,
3791
   -- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)
3792
   -- Returns 1 if a record was found, else 0.
3793
   --
3794
   FUNCTION get_daemon_inst(
3795
      nRtag_id IN NUMBER,
3796
      nInst_id IN OUT NUMBER,
3797
      nOp_code IN OUT NUMBER,
3798
      nPv_id OUT NUMBER,
3799
      nUser_id OUT NUMBER,
3800
      nInProgress OUT NUMBER
3801
   ) RETURN NUMBER
3802
   IS
3803
      CURSOR daemon_inst_cur IS
3804
         SELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progress
3805
           FROM daemon_instructions di
3806
          WHERE di.rtag_id = nRtag_id
3807
            AND di.daemon_instructions_id > nInst_id
3808
            AND di.scheduled_datetime <= ora_sysdatetime
3809
            AND ((nOp_code = -1) OR (nOp_code = di.op_code))
3810
            AND rownum <= 1
3811
       ORDER BY di.daemon_instructions_id;
3812
 
3813
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3814
   BEGIN
3815
      OPEN daemon_inst_cur;
3816
 
3817
      FETCH daemon_inst_cur
3818
      INTO daemon_inst_rec;
3819
 
3820
      -- If we found a record, return it.
3821
      IF daemon_inst_cur%FOUND THEN
3822
         nInst_id := daemon_inst_rec.daemon_instructions_id;
3823
         nOp_code := daemon_inst_rec.op_code;
3824
         nPv_id   := daemon_inst_rec.pv_id;
3825
         nUser_id := daemon_inst_rec.user_id;
3826
         IF daemon_inst_rec.in_progress = '1' THEN
3827
            nInProgress := 1;
3828
         ELSE
3829
            nInProgress := 0;
3830
         END IF;
3831
         CLOSE daemon_inst_cur;
3832
         RETURN 1;
3833
      END IF;
3834
 
3835
      CLOSE daemon_inst_cur;
3836
      RETURN 0;
3837
 
3838
   END get_daemon_inst;
3839
/*-------------------------------------------------------------------------------------------------------*/
3840
   -- Marks a daemon instruction as being processed by a daemon
3841
   -- The Buildtool should use this before it embarks on the work the instruction commands
3842
   --
3843
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )
3844
   IS
3845
   BEGIN
3846
      UPDATE Daemon_Instructions
3847
      SET in_progress = '1'
3848
      WHERE daemon_instructions_id = nInstId;
3849
 
3850
   END mark_daemon_inst_in_progress;
3851
 
3852
/*-------------------------------------------------------------------------------------------------------*/
3853
   -- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored
3854
   -- procedure in order to either delete the instruction or update it in the case where it is a repeating
3855
   -- instruction.
3856
   --
3857
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )
3858
   IS
3859
      repSecs NUMBER;
3860
      schedDate  DATE;
3861
 
3862
      CURSOR daemon_inst_cur IS
3863
         SELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDate
3864
         FROM daemon_instructions di
3865
         WHERE di.daemon_instructions_id = nInstId;
3866
 
3867
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3868
   BEGIN
3869
      OPEN daemon_inst_cur;
3870
 
3871
      FETCH daemon_inst_cur
3872
      INTO daemon_inst_rec;
3873
 
3874
      IF daemon_inst_cur%FOUND THEN
3875
 
3876
         -- if instruction repeats daily, add 1 day to the scheduled time and update the record
3877
         IF daemon_inst_rec.repSecs = 86400 THEN
3878
            UPDATE Daemon_Instructions
3879
               SET scheduled_datetime = daemon_inst_rec.schedDate + 1,
3880
                  in_progress = '0'
3881
            WHERE daemon_instructions_id = nInstId;
3882
         ELSE
3883
            -- Delete the daemon instruction, we are done with it
3884
            del_daemon_inst(nInstId);
3885
         END IF;
3886
      END IF;
3887
 
3888
      CLOSE daemon_inst_cur;
3889
 
3890
   EXCEPTION
3891
      WHEN OTHERS
3892
      THEN
3893
         raise;
3894
 
3895
   END mark_daemon_inst_completed;
3896
/*-------------------------------------------------------------------------------------------------------*/
3897
   -- This function deletes any old daemon instruction that appears stranded due to a problem that might
3898
   -- have occured during buildtool operation such as might occur if the buildtool or the machine it was
3899
   -- hosted on came down whilst it was processing a daemon instruction.
3900
   PROCEDURE cleanup_stranded_daemon_insts
3901
   IS
3902
   BEGIN
3903
      -- delete records at least two days old
3904
      DELETE FROM daemon_instructions di
3905
      WHERE  (di.scheduled_datetime + 5) <= ora_sysdatetime;
3906
 
3907
   END cleanup_stranded_daemon_insts;
3908
/*-------------------------------------------------------------------------------------------------------*/
3909
  --This function supersedes function, add_daemon. Done for DEVI-046806
3910
   PROCEDURE add_daemon_config (
3911
      nrtagid           IN   NUMBER,
3912
      nbmcon_id         IN   NUMBER,
3913
      sdaemon_mode      IN   VARCHAR2,
3914
      sgbebuildfilter   IN   VARCHAR2
3915
   )
3916
   IS
3917
      nrecordnumber   NUMBER;
3918
      nrconid         NUMBER;
3919
      sdaemonhostname VARCHAR2(50);
3920
      ngbeid         NUMBER;
3921
   BEGIN
3922
      -- Get RCON_ID
3923
      SELECT seq_rcon_id.NEXTVAL
3924
      INTO nrconid
3925
      FROM DUAL;
3926
 
3927
      SELECT COUNT (*)
3928
      INTO nrecordnumber
3929
      FROM release_config
3930
      WHERE rtag_id = nrtagid;
3931
 
3932
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3933
      FROM build_machine_config
3934
      WHERE bmcon_id = nbmcon_id;
3935
 
3936
      INSERT INTO release_config
3937
             (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3938
                gbe_id, gbe_buildfilter)
3939
      VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,
3940
                ngbeid, sgbebuildfilter);
3941
 
3942
      -- A newly configured daemon should initially be paused (DEVI-047277)
3943
      INSERT INTO run_level
3944
                  (rcon_id, pause)
3945
           VALUES (nrconid, 2);
3946
 
3947
   END;
3948
 
3949
/*-------------------------------------------------------------------------------------------------------*/
3950
  --This function supersedes function, update_daemon. Done for DEVI-046806
3951
   PROCEDURE update_daemon_config (
3952
      nrconid           IN   NUMBER,
3953
      nbmcon_id         IN   NUMBER,
3954
      sdaemon_mode      IN   VARCHAR2,
3955
      sgbebuildfilter   IN   VARCHAR2
3956
   )
3957
   IS
3958
      sdaemonhostname VARCHAR2(50);
3959
      ngbeid         NUMBER;
3960
   BEGIN
3961
 
3962
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3963
      FROM build_machine_config
3964
      WHERE bmcon_id = nbmcon_id;
3965
 
3966
      UPDATE release_config
3967
         SET daemon_hostname = sdaemonhostname,
3968
            gbe_id = ngbeid,
3969
            daemon_mode = sdaemon_mode,
3970
            gbe_buildfilter = sgbebuildfilter
3971
      WHERE rcon_id = nrconid;
3972
   END;
3973
 
3974
 
3975
/*-------------------------------------------------------------------------------------------------------*/
3976
   PROCEDURE add_build_machine (
3977
      sdisplay_name          IN   VARCHAR2,
3978
      smachine_hostname      IN   VARCHAR2,
3979
      ngbeid                 IN   NUMBER,
3980
      sdescription           IN   VARCHAR2
3981
   )
3982
   IS
3983
      nrecordnumber   NUMBER;
3984
      nbmcon_id       NUMBER;
3985
   BEGIN
3986
      -- Get BMCON_ID
3987
      SELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;
3988
 
3989
      INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)
3990
            VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);
3991
 
3992
   EXCEPTION
3993
      WHEN DUP_VAL_ON_INDEX
3994
      THEN
3995
         raise_application_error (-20000,
3996
                                 'Cannot have duplicate machines.'
3997
                                 );
3998
 
3999
   END;
4000
 
4001
/*-------------------------------------------------------------------------------------------------------*/
4002
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)
4003
   IS
4004
   BEGIN
4005
      DELETE FROM build_machine_config
4006
            WHERE bmcon_id IN (
4007
                     SELECT * FROM THE
4008
                              (SELECT CAST
4009
                                          (in_list_number (sbmcon_id_list) AS relmgr_number_tab_t
4010
                                          )
4011
                                 FROM DUAL
4012
                              ));
4013
   END;
4014
 
4015
 
4016
/*-------------------------------------------------------------------------------------------------------*/
4017
   PROCEDURE update_build_machine (
4018
      nbmcon_id              IN   NUMBER,
4019
      sdisplay_name          IN   VARCHAR2,
4020
      smachine_hostname      IN   VARCHAR2,
4021
      ngbeid                 IN   NUMBER,
4022
      sdescription           IN   VARCHAR2
4023
   )
4024
   IS
4025
   BEGIN
4026
      UPDATE build_machine_config
4027
         SET display_name = sdisplay_name,
4028
             machine_hostname = smachine_hostname,
4029
             gbe_id = ngbeid,
4030
             description = sdescription
4031
      WHERE bmcon_id = nbmcon_id;
4032
   EXCEPTION
4033
      WHEN DUP_VAL_ON_INDEX
4034
      THEN
4035
         raise_application_error (-20000,
4036
                                 'Cannot have duplicate machines.'
4037
                                 );
4038
   END;
4039
END pk_buildapi;
4040
/
4041
--------------------------------------------------------
4042
--  DDL for Package Body PK_PACKAGE
4043
--------------------------------------------------------
4044
 
4045
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE" 
4046
IS
4047
   /*-------------------------------------------------------------------------------------------------------*/
4048
   PROCEDURE new_version (
4049
      nlastpvid                   IN       NUMBER,
4050
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
4051
      cbuildtype                  IN       CHAR,
4052
      nsettopvid                  IN       NUMBER DEFAULT NULL,
4053
      nrtagid                     IN       NUMBER,
4054
      nuserid                     IN       NUMBER,
4055
      enumissues_state_imported   IN       NUMBER,
4056
      returnpvid                  OUT      NUMBER
4057
   )
4058
   IS
4059
      origpkg_id                  package_versions.pkg_id%TYPE;
4060
      origdlocked                 package_versions.dlocked%TYPE;
4061
      ssv_mm                      package_versions.v_mm%TYPE;
4062
      ssv_nmm                     package_versions.v_nmm%TYPE;
4063
      ssv_ext                     package_versions.v_ext%TYPE;
4064
      spackageversion             VARCHAR2 (4000);
4065
      nissuestypes                NUMBER;
4066
      nviewid                     NUMBER;
4067
      reccount                    NUMBER;
4068
      isreleased                  package_versions.dlocked%TYPE := 'N';
4069
      slabel                      VARCHAR2 (4000)               := NULL;
4070
 
4071
      CURSOR package_versions_cur
4072
      IS
4073
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
4074
           FROM package_versions pv
4075
          WHERE pv.pkg_version = snewpkgversion
4076
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
4077
                                         FROM package_versions origpv
4078
                                        WHERE origpv.pv_id = nlastpvid);
4079
 
4080
      package_versions_rec package_versions_cur%ROWTYPE;
4081
 
4082
      CURSOR clone_package_versions_cur
4083
      IS
4084
         SELECT DISTINCT pkg_id, dlocked
4085
                    FROM package_versions
4086
                   WHERE pv_id = nlastpvid;
4087
 
4088
      clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
4089
   BEGIN
4090
      spackageversion := snewpkgversion;
4091
 
4092
      IF nsettopvid IS NULL
4093
      THEN
4094
         -- SetToPv_id is not supplied, hence proceed.
4095
 
4096
         /* ---------------------------------------------------- */
4097
         /* Find id package_version exists                       */
4098
         /* ---------------------------------------------------- */
4099
         OPEN package_versions_cur;
4100
 
4101
         FETCH package_versions_cur
4102
          INTO package_versions_rec;
4103
 
4104
         IF package_versions_cur%NOTFOUND
4105
         THEN
4106
            ---  Create brand new package ---
4107
            SELECT seq_pv_id.NEXTVAL
4108
              INTO returnpvid
4109
              FROM DUAL;
4110
 
4111
            -- Split Version to get extention + other
4112
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
4113
 
4114
            -- Get previous package to clone from
4115
            OPEN clone_package_versions_cur;
4116
 
4117
            FETCH clone_package_versions_cur
4118
             INTO clone_package_versions_rec;
4119
 
4120
            origpkg_id := clone_package_versions_rec.pkg_id;
4121
            origdlocked := clone_package_versions_rec.dlocked;
4122
 
4123
            CLOSE clone_package_versions_cur;
4124
 
4125
            -- Automated built config
4126
            IF (cbuildtype = 'A')
4127
            THEN
4128
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
4129
               -- Make sure that version is still unique
4130
            END IF;
4131
 
4132
            -- Clone Package Version Details --
4133
            INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,
4134
                                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
4135
                                         v_ext, src_path, pv_description, pv_overview,
4136
                                         last_pv_id, owner_id, is_deployable,
4137
                                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
4138
                 SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
4139
                        spackageversion AS pkg_version, 'N' AS dlocked,
4140
                        ora_sysdate AS created_stamp, nuserid AS creator_id,
4141
                        ora_sysdatetime AS modified_stamp,
4142
                        nuserid AS modifier_id, ssv_mm AS v_mm,
4143
                        ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
4144
                        pv.pv_description, pv.pv_overview,
4145
                        nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
4146
                        pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
4147
                   FROM package_versions pv
4148
                  WHERE pv.pv_id = nlastpvid;
4149
 
4150
            -- Set Issues Type for cloning ---
4151
            IF origdlocked = 'Y'
4152
            THEN
4153
               nissuestypes := enumissues_state_imported;
4154
            ELSE
4155
               nissuestypes := NULL;
4156
            END IF;
4157
 
4158
            -- Update Label for automated built
4159
            IF (cbuildtype = 'A')
4160
            THEN
4161
               slabel := get_automated_label (returnpvid);
4162
 
4163
               UPDATE package_versions pv
4164
                  SET pv.pkg_label = slabel
4165
                WHERE pv.pv_id = returnpvid;
4166
            END IF;
4167
 
4168
            basic_clone (nlastpvid,
4169
                         returnpvid,
4170
                         nrtagid,
4171
                         nuserid,
4172
                         origpkg_id,
4173
                         nissuestypes
4174
                        );
4175
         ELSE
4176
            --- Package already exists, hence reuse ---
4177
            returnpvid := package_versions_rec.pv_id;
4178
            isreleased := package_versions_rec.dlocked;
4179
         END IF;
4180
 
4181
         CLOSE package_versions_cur;
4182
      ELSE
4183
         returnpvid := nsettopvid;
4184
      END IF;
4185
   END new_version;
4186
 
4187
/*-------------------------------------------------------------------------------------------------------*/
4188
   PROCEDURE change_state (
4189
      pvid       IN   NUMBER,
4190
      newstate   IN   package_versions.dlocked%TYPE,
4191
      userid     IN   NUMBER
4192
   )
4193
   IS
4194
   BEGIN
4195
      -- Set package in Released mode
4196
      UPDATE package_versions pv
4197
         SET pv.dlocked = newstate,
4198
             pv.modified_stamp = ora_sysdatetime,
4199
             pv.modifier_id = userid
4200
       WHERE pv.pv_id = pvid;
4201
 
4202
      -- Log action --
4203
      IF newstate = 'Y'
4204
      THEN
4205
         -- RELEASED --
4206
         log_action (pvid,
4207
                     'makeofficial',
4208
                     userid,
4209
                     'Package state change to: Released'
4210
                    );
4211
      ELSIF newstate = 'N'
4212
      THEN
4213
         -- UNLOCKED --
4214
         log_action (pvid,
4215
                     'makeunofficial',
4216
                     userid,
4217
                     'Package state change to: Ulocked'
4218
                    );
4219
      ELSIF newstate = 'P'
4220
      THEN
4221
         -- PENDING APPROVAL --
4222
         log_action (pvid,
4223
                     'add_to_planned',
4224
                     userid,
4225
                     'Package state change to: Pending Approval'
4226
                    );
4227
      ELSIF newstate = 'R'
4228
      THEN
4229
         -- REJECTED --
4230
         log_action (pvid,
4231
                     'reject_package',
4232
                     userid,
4233
                     'Package state change to: Rejected'
4234
                    );
4235
      ELSIF newstate = 'A'
4236
      THEN
4237
         -- APPROVED --
4238
         log_action (pvid,
4239
                     'approve_package',
4240
                     userid,
4241
                     'Package state change to: Approved'
4242
                    );
4243
      END IF;
4244
   END;
4245
 
4246
/*-------------------------------------------------------------------------------------------------------*/
4247
   PROCEDURE destroy_package (
4248
      pvid               IN       NUMBER,
4249
      overridewarnings   IN       CHAR DEFAULT 'N',
4250
      problemstring      OUT      VARCHAR2
4251
   )
4252
   IS
4253
      LOCKED     CHAR;
4254
      pkgid      NUMBER;
4255
      ROWCOUNT   NUMBER;
4256
   BEGIN
4257
      /*
4258
      || This will destroy all package details from database.
4259
      || It will only be used to remove unwanted work in progress packages,
4260
      || or mestaken versions
4261
      */
4262
 
4263
      /*--------------- Business Rules Here -------------------*/
4264
      problemstring := NULL;
4265
 
4266
      IF overridewarnings = 'N'
4267
      THEN
4268
         -- Package must not be official
4269
         SELECT pv.dlocked
4270
           INTO LOCKED
4271
           FROM package_versions pv
4272
          WHERE pv.pv_id = pvid;
4273
 
4274
         IF LOCKED = 'Y'
4275
         THEN
4276
            problemstring :=
4277
                  problemstring
4278
               || '- Package is locked and released.'
4279
               || UTL_TCP.crlf;
4280
         END IF;
4281
 
4282
         -- Cannot remove if used in BOMs
4283
         SELECT COUNT (osc.prod_id)
4284
           INTO ROWCOUNT
4285
           FROM deployment_manager.os_contents osc
4286
          WHERE osc.prod_id = pvid;
4287
 
4288
         IF ROWCOUNT > 0
4289
         THEN
4290
            problemstring :=
4291
                  problemstring
4292
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
4293
               || UTL_TCP.crlf;
4294
         END IF;
4295
 
4296
         -- Cannot remove if Referenced as build dependency
4297
         SELECT COUNT (dep.pv_id)
4298
           INTO ROWCOUNT
4299
           FROM package_dependencies dep
4300
          WHERE dep.dpv_id = pvid;
4301
 
4302
         IF ROWCOUNT > 0
4303
         THEN
4304
            problemstring :=
4305
                  problemstring
4306
               || '- Package is referenced by other package as build dependency.'
4307
               || UTL_TCP.crlf;
4308
         END IF;
4309
 
4310
         -- Cannot remove if Referenced as runtime dependency
4311
         SELECT COUNT (rd.pv_id)
4312
           INTO ROWCOUNT
4313
           FROM runtime_dependencies rd
4314
          WHERE rd.rtd_id = pvid;
4315
 
4316
         IF ROWCOUNT > 0
4317
         THEN
4318
            problemstring :=
4319
                  problemstring
4320
               || '- Package is referenced by other package as runtime dependency.'
4321
               || UTL_TCP.crlf;
4322
         END IF;
4323
 
4324
         -- Cannot remove if Referenced as patch
4325
         SELECT COUNT (pp.pv_id)
4326
           INTO ROWCOUNT
4327
           FROM package_patches pp
4328
          WHERE pp.patch_id = pvid;
4329
 
4330
         IF ROWCOUNT > 0
4331
         THEN
4332
            problemstring :=
4333
                  problemstring
4334
               || '- Package is used as patch by other package.'
4335
               || UTL_TCP.crlf;
4336
         END IF;
4337
      END IF;
4338
 
4339
/*-------------------------------------------------------*/
4340
      IF (problemstring IS NULL)
4341
      THEN
4342
         --- Remove From Work in Progress
4343
         DELETE FROM work_in_progress wip
4344
               WHERE wip.pv_id = pvid;
4345
 
4346
         --- Remove From Pending
4347
         DELETE FROM planned pl
4348
               WHERE pl.pv_id = pvid;
4349
 
4350
         --- Remove From Released area
4351
         DELETE FROM release_content rc
4352
               WHERE rc.pv_id = pvid;
4353
 
4354
         ---Remove From Package Processes
4355
         DELETE FROM package_processes pp
4356
               WHERE pp.pv_id = pvid;
4357
 
4358
         --- Remove Dependencies
4359
         DELETE FROM package_dependencies dep
4360
               WHERE dep.pv_id = pvid;
4361
 
4362
         DELETE FROM package_dependencies dep
4363
               WHERE dep.dpv_id = pvid;
4364
 
4365
         --- Remove Runtime dependencies
4366
         DELETE FROM runtime_dependencies rtd
4367
               WHERE rtd.pv_id = pvid;
4368
 
4369
         DELETE FROM runtime_dependencies rtd
4370
               WHERE rtd.rtd_id = pvid;
4371
 
4372
         --- Remove components
4373
         DELETE FROM product_components pc
4374
               WHERE pc.pv_id = pvid;
4375
 
4376
         DELETE FROM release_components rc
4377
               WHERE rc.pv_id = pvid;
4378
 
4379
         --- Remove From Notification History
4380
         DELETE FROM notification_history nh
4381
               WHERE nh.pv_id = pvid;
4382
 
4383
         --- Remove From Ignore Warnings
4384
         DELETE FROM ignore_warnings iw
4385
               WHERE iw.pv_id = pvid;
4386
 
4387
         --- Remove From Additional Notes
4388
         DELETE FROM additional_notes an
4389
               WHERE an.pv_id = pvid;
4390
 
4391
         --- Remove From CQ Issues
4392
         DELETE FROM cq_issues cq
4393
               WHERE cq.pv_id = pvid;
4394
 
4395
         --- Remove from Package Patches
4396
         DELETE FROM package_patches pp
4397
               WHERE pp.pv_id = pvid;
4398
 
4399
         DELETE FROM package_patches pp
4400
               WHERE pp.patch_id = pvid;
4401
 
4402
         --- Remove From Package Documents
4403
         DELETE FROM package_documents pd
4404
               WHERE pd.pv_id = pvid;
4405
 
4406
         --- Remove from Code Review
4407
         DELETE FROM code_reviews cr
4408
               WHERE cr.pv_id = pvid;
4409
 
4410
         --- Remove from Code Review URL
4411
         DELETE FROM code_review_url cru
4412
               WHERE cru.pv_id = pvid;
4413
 
4414
         --- Remove from Unit Tests
4415
         DELETE FROM unit_tests ut
4416
               WHERE ut.pv_id = pvid;
4417
 
4418
         --- Remove from Package BuildEnv
4419
         DELETE FROM package_build_env pbe
4420
               WHERE pbe.pv_id = pvid;
4421
 
4422
         --- Remove from Package Build Info
4423
         DELETE FROM package_build_info pbi
4424
               WHERE pbi.pv_id = pvid;
4425
 
4426
         --- Remove from Build Order
4427
         DELETE FROM build_order bo
4428
               WHERE bo.pv_id = pvid;
4429
 
4430
         --- Remove from Licencing
4431
         PK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );
4432
 
4433
         --- Remove from Note Manager
4434
         DELETE FROM note_manager nm
4435
               WHERE nm.nid = pvid;
4436
 
4437
         --- Remove from Action log
4438
         DELETE FROM action_log al
4439
               WHERE al.pv_id = pvid;
4440
 
4441
         --- Remove from Do Not Ripple
4442
         DELETE FROM DO_NOT_RIPPLE dnr
4443
               WHERE dnr.PV_ID = pvid;
4444
 
4445
         --- Remove from Advisory Ripple
4446
         DELETE FROM ADVISORY_RIPPLE ar
4447
               WHERE ar.PV_ID = pvid;
4448
 
4449
         --- Remove from Jira Issues
4450
         DELETE FROM JIRA_ISSUES jira
4451
               WHERE jira.PV_ID = pvid;
4452
 
4453
         --- Remove from Package Metrics
4454
         DELETE FROM package_metrics pm
4455
              WHERE pm.pv_id = pvid;
4456
 
4457
         -- Delete from Pegged Versions
4458
         DELETE FROM pegged_versions pegv
4459
              WHERE pegv.pv_id = pvid;
4460
 
4461
         --- Finally Remove From Package Versions
4462
         --- Get Package name
4463
         SELECT pv.pkg_id
4464
           INTO pkgid
4465
           FROM package_versions pv
4466
          WHERE pv.pv_id = pvid;
4467
 
4468
         DELETE FROM package_versions pv
4469
               WHERE pv.pv_id = pvid;
4470
 
4471
         --- Remove package name if not used any more
4472
         SELECT COUNT (pv.pv_id)
4473
           INTO ROWCOUNT
4474
           FROM package_versions pv
4475
          WHERE pv.pkg_id = pkgid;
4476
 
4477
         IF ROWCOUNT < 1
4478
         THEN
4479
            DELETE FROM PACKAGES pkg
4480
                  WHERE pkg.pkg_id = pkgid;
4481
         END IF;
4482
      END IF;
4483
   END;
4484
 
4485
/*-------------------------------------------------------------------------------------------------------*/
4486
   PROCEDURE new_patch (
4487
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
4488
      nparentpvid        IN       NUMBER,
4489
      spatchidlist       IN       VARCHAR2,
4490
      nuserid            IN       NUMBER,
4491
      returnpatchid      OUT      NUMBER
4492
   )
4493
   IS
4494
      patchpv_id           NUMBER;
4495
      parpkg_id            NUMBER;
4496
      lastinstallorder     NUMBER;
4497
      ispatchdlocked       package_versions.dlocked%TYPE;
4498
      ssv_mm               package_versions.v_mm%TYPE;
4499
      ssv_nmm              package_versions.v_nmm%TYPE;
4500
      ssv_ext              package_versions.v_ext%TYPE;
4501
      opatchdepcollector   relmgr_number_tab_t  := relmgr_number_tab_t ();
4502
 
4503
      CURSOR parent_cur
4504
      IS
4505
         SELECT pv.*, pkg.pkg_name
4506
           FROM package_versions pv, PACKAGES pkg
4507
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
4508
 
4509
      parent_rec parent_cur%ROWTYPE;
4510
 
4511
      CURSOR patch_cur
4512
      IS
4513
         SELECT pv.*, pg.pkg_name
4514
           FROM package_versions pv, PACKAGES pg
4515
          WHERE pv.pkg_id = parpkg_id
4516
            AND pv.pkg_version = snewpatchversion
4517
            AND pv.pkg_id = pg.pkg_id;
4518
 
4519
      patch_rec  patch_cur%ROWTYPE;
4520
 
4521
      CURSOR releases_cur
4522
      IS
4523
         SELECT rc.pv_id
4524
           FROM release_content rc
4525
          WHERE rc.pv_id = patch_rec.pv_id;
4526
 
4527
      releases_rec releases_cur%ROWTYPE;
4528
   BEGIN
4529
      -- Get Last Install Order
4530
      SELECT COUNT (*)
4531
        INTO lastinstallorder
4532
        FROM package_patches pp
4533
       WHERE pp.pv_id = nparentpvid;
4534
 
4535
      -- Get parent details
4536
      OPEN parent_cur;
4537
 
4538
      FETCH parent_cur
4539
       INTO parent_rec;
4540
 
4541
      parpkg_id := parent_rec.pkg_id;
4542
 
4543
      -- Find if patch exists in database
4544
      OPEN patch_cur;
4545
 
4546
      FETCH patch_cur
4547
       INTO patch_rec;
4548
 
4549
      -- Parent must be official
4550
      IF parent_rec.dlocked = 'Y'
4551
      THEN
4552
         IF patch_cur%NOTFOUND
4553
         THEN
4554
            ispatchdlocked := 'N';
4555
 
4556
            -- Create new patch version --
4557
            SELECT seq_pv_id.NEXTVAL
4558
              INTO patchpv_id
4559
              FROM DUAL;
4560
 
4561
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
4562
 
4563
            INSERT INTO package_versions
4564
                        (pv_id, pkg_id, pkg_version,
4565
                         dlocked, created_stamp, creator_id,
4566
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
4567
                         src_path,
4568
                         pv_description,
4569
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
4570
                         is_autobuildable, ripple_field
4571
                        )
4572
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
4573
                         ispatchdlocked, ora_sysdate, nuserid,
4574
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
4575
                         parent_rec.src_path,
4576
                            'This is a patch to '
4577
                         || parent_rec.pkg_name
4578
                         || ' '
4579
                         || parent_rec.pkg_version,
4580
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
4581
                        );
4582
 
4583
            INSERT INTO package_patches
4584
                        (pv_id, patch_id, install_order)
4585
                (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4586
                        lastinstallorder + 1 AS install_order
4587
                   FROM package_versions pv
4588
                  WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4589
 
4590
            /* LOG ACTION */
4591
            log_action (patchpv_id,
4592
                        'new_version',
4593
                        nuserid,
4594
                        'Patch version created: ' || snewpatchversion
4595
                       );
4596
            log_action (nparentpvid,
4597
                        'patch_add',
4598
                        nuserid,
4599
                        'New patch created and attached: ' || snewpatchversion
4600
                       );
4601
         ELSE
4602
            patchpv_id := patch_rec.pv_id;
4603
            ispatchdlocked := patch_rec.dlocked;
4604
 
4605
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
4606
            OPEN releases_cur;
4607
 
4608
            FETCH releases_cur
4609
             INTO releases_rec;
4610
 
4611
            IF releases_cur%NOTFOUND
4612
            THEN
4613
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
4614
               UPDATE package_versions
4615
                  SET is_patch = 'Y'
4616
                WHERE pv_id = patchpv_id;
4617
 
4618
               INSERT INTO package_patches
4619
                           (pv_id, patch_id, install_order)
4620
                   (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4621
                           lastinstallorder + 1 AS install_order
4622
                      FROM package_versions pv
4623
                     WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4624
            END IF;
4625
 
4626
            CLOSE releases_cur;
4627
 
4628
            /* LOG ACTION */
4629
            log_action (nparentpvid,
4630
                        'patch_add',
4631
                        nuserid,
4632
                           'Patch version was found and attached: '
4633
                        || snewpatchversion
4634
                       );
4635
         END IF;
4636
      END IF;
4637
 
4638
      /* Create Patch Dependencies */
4639
      opatchdepcollector := in_list_number (spatchidlist);
4640
 
4641
      -- Make sure patch is unofficial before altering its dependencies
4642
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
4643
      THEN
4644
         -- Delete Existing Dependencies
4645
         DELETE FROM package_dependencies dep
4646
               WHERE dep.pv_id = patchpv_id;
4647
 
4648
         -- Insert new dependencies
4649
         INSERT INTO package_dependencies
4650
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
4651
              SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
4652
                     parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
4653
                     'L' AS build_type
4654
                FROM package_versions pv
4655
               WHERE pv.pv_id IN (
4656
                      SELECT *
4657
                        FROM TABLE
4658
                                (CAST
4659
                                    (opatchdepcollector AS relmgr_number_tab_t)
4660
                                ));
4661
      END IF;
4662
 
4663
      -- Return patch_id
4664
      returnpatchid := patchpv_id;
4665
 
4666
      CLOSE parent_cur;
4667
 
4668
      CLOSE patch_cur;
4669
   EXCEPTION
4670
      WHEN DUP_VAL_ON_INDEX
4671
      THEN
4672
         raise_application_error (-20000,
4673
                                     'Patch version '
4674
                                  || snewpatchversion
4675
                                  || ' already exist.'
4676
                                 );
4677
   END;
4678
 
4679
/*-------------------------------------------------------------------------------------------------------*/
4680
   PROCEDURE obsolete_patch (
4681
      patchid            IN   NUMBER,
4682
      isobsolete         IN   CHAR,
4683
      obsoletecomments   IN   VARCHAR2,
4684
      userid             IN   NUMBER
4685
   )
4686
   IS
4687
   BEGIN
4688
      -- Update patch
4689
      UPDATE package_versions pv
4690
         SET pv.is_obsolete = isobsolete,
4691
             pv.obsolete_comments = obsoletecomments
4692
       WHERE pv.pv_id = patchid;
4693
 
4694
      /*
4695
      -- Update patch children
4696
      UPDATE PACKAGE_VERSIONS pv SET
4697
      pv.IS_OBSOLETE = IsObsolete,
4698
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4699
      WHERE pv.PV_ID IN (
4700
                     SELECT DISTINCT dep.DPV_ID
4701
                       FROM PACKAGE_DEPENDENCIES dep
4702
                      WHERE dep.PV_ID = PatchId
4703
                     );
4704
 
4705
 
4706
      -- Update patch parent
4707
      UPDATE PACKAGE_VERSIONS pv SET
4708
      pv.IS_OBSOLETE = IsObsolete,
4709
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4710
      WHERE pv.PV_ID IN (
4711
                     SELECT DISTINCT dep.PV_ID
4712
                       FROM PACKAGE_DEPENDENCIES dep
4713
                      WHERE dep.DPV_ID = PatchId
4714
                     );
4715
 
4716
      */
4717
 
4718
      /* LOG ACTION */
4719
      IF isobsolete IS NOT NULL
4720
      THEN
4721
         log_action (patchid,
4722
                     'patch_obsolete',
4723
                     userid,
4724
                     'Obsolete patch. ' || obsoletecomments
4725
                    );
4726
      ELSE
4727
         log_action (patchid,
4728
                     'patch_obsolete',
4729
                     userid,
4730
                     'Undo patch obsolete.'
4731
                    );
4732
      END IF;
4733
   END;
4734
 
4735
/*-------------------------------------------------------------------------------------------------------*/
4736
   PROCEDURE obsolete_patches (
4737
      spatchidlist       IN   VARCHAR2,
4738
      isobsolete         IN   CHAR,
4739
      obsoletecomments   IN   VARCHAR2,
4740
      userid             IN   NUMBER
4741
   )
4742
   IS
4743
   BEGIN
4744
      /*--------------- Business Rules Here -------------------*/
4745
      IF spatchidlist IS NULL
4746
      THEN
4747
         raise_application_error (-20000,
4748
                                  'Please select one or more Patches.'
4749
                                 );
4750
      END IF;
4751
 
4752
/*-------------------------------------------------------*/
4753
 
4754
      -- Update patch
4755
      UPDATE package_versions pv
4756
         SET pv.is_obsolete = isobsolete,
4757
             pv.obsolete_comments = obsoletecomments
4758
       WHERE pv.pv_id IN (
4759
                SELECT *
4760
                  FROM THE
4761
                          (SELECT CAST
4762
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
4763
                                     )
4764
                             FROM DUAL
4765
                          ));
4766
      /*
4767
      -- Update patch children
4768
      UPDATE PACKAGE_VERSIONS pv SET
4769
      pv.IS_OBSOLETE = IsObsolete,
4770
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4771
      WHERE pv.PV_ID IN (
4772
                     SELECT DISTINCT dep.DPV_ID
4773
                       FROM PACKAGE_DEPENDENCIES dep
4774
                      WHERE dep.PV_ID = PatchId
4775
                     );
4776
 
4777
 
4778
      -- Update patch parent
4779
      UPDATE PACKAGE_VERSIONS pv SET
4780
      pv.IS_OBSOLETE = IsObsolete,
4781
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4782
      WHERE pv.PV_ID IN (
4783
                     SELECT DISTINCT dep.PV_ID
4784
                       FROM PACKAGE_DEPENDENCIES dep
4785
                      WHERE dep.DPV_ID = PatchId
4786
                     );
4787
 
4788
      */
4789
 
4790
      /* LOG ACTION
4791
      IF IsObsolete IS NOT NULL THEN
4792
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4793
                     'Obsolete patch. '|| ObsoleteComments );
4794
      ELSE
4795
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4796
                     'Undo patch obsolete.' );
4797
      END IF;  */
4798
   END;
4799
 
4800
/*-------------------------------------------------------------------------------------------------------*/
4801
   PROCEDURE add_process (
4802
      nprocid         IN   processes.proc_id%TYPE,
4803
      shealthtag      IN   processes.proc_name%TYPE,
4804
      sprocdesc       IN   processes.proc_description%TYPE,
4805
      scmdinterface   IN   processes.run_as%TYPE,
4806
      spkgowner       IN   processes.pkg_owner%TYPE,
4807
      sisinterface    IN   processes.is_interface%TYPE,
4808
      npvid           IN   package_processes.pv_id%TYPE,
4809
      nuserid         IN   NUMBER
4810
   )
4811
   IS
4812
      pkgname   VARCHAR2 (100);
4813
 
4814
   BEGIN
4815
      INSERT INTO processes
4816
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
4817
                   is_interface
4818
                  )
4819
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
4820
                   sisinterface
4821
                  );
4822
 
4823
      pk_package.add_package_process (nprocid, npvid, nuserid);
4824
   END;
4825
 
4826
/*-------------------------------------------------------------------------------------------------------*/
4827
   PROCEDURE add_package_process (
4828
      nprocidlist   IN   VARCHAR2,
4829
      npvid         IN   package_processes.pv_id%TYPE,
4830
      nuserid       IN   NUMBER
4831
   )
4832
   IS
4833
      processname   VARCHAR2 (4000);
4834
 
4835
      CURSOR proc_cur
4836
      IS
4837
         SELECT prc.proc_id
4838
           FROM processes prc
4839
          WHERE prc.proc_id IN (
4840
                   SELECT *
4841
                     FROM THE
4842
                             (SELECT CAST
4843
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
4844
                                        )
4845
                                FROM DUAL
4846
                             ));
4847
 
4848
      proc_rec  proc_cur%ROWTYPE;
4849
   BEGIN
4850
      OPEN proc_cur;
4851
 
4852
      FETCH proc_cur
4853
       INTO proc_rec;
4854
 
4855
      WHILE proc_cur%FOUND
4856
      LOOP
4857
         INSERT INTO package_processes (proc_id, pv_id)
4858
              VALUES (proc_rec.proc_id, npvid);
4859
 
4860
         SELECT prc.proc_name
4861
           INTO processname
4862
           FROM processes prc
4863
          WHERE prc.proc_id = proc_rec.proc_id;
4864
 
4865
         -- Log Action --
4866
         log_action (npvid,
4867
                     'process_add',
4868
                     nuserid,
4869
                     'Added process with health tag ' || processname
4870
                    );
4871
 
4872
         FETCH proc_cur
4873
          INTO proc_rec;
4874
      END LOOP;
4875
 
4876
      CLOSE proc_cur;
4877
   END;
4878
 
4879
/*-------------------------------------------------------------------------------------------------------*/
4880
   PROCEDURE remove_process (
4881
      nprocid   IN   package_processes.proc_id%TYPE,
4882
      npvid     IN   package_processes.pv_id%TYPE,
4883
      nuserid   IN   NUMBER
4884
   )
4885
   IS
4886
      processname   VARCHAR2 (4000);
4887
   BEGIN
4888
      SELECT prc.proc_name
4889
        INTO processname
4890
        FROM processes prc
4891
       WHERE prc.proc_id = nprocid;
4892
 
4893
      DELETE FROM package_processes
4894
            WHERE proc_id = nprocid AND pv_id = npvid;
4895
 
4896
      -- Log Action --
4897
      log_action (npvid,
4898
                  'process_remove',
4899
                  nuserid,
4900
                  'Removed process with health tag ' || processname
4901
                 );
4902
   END;
4903
/*-------------------------------------------------------------------------------------------------------*/
4904
   /*
4905
   ** Author: Rupesh Solanki
4906
   ** Purpose: To move package versions from one release to another
4907
   ** Release: 4th September 2006
4908
   */
4909
   PROCEDURE move_package (
4910
      npvid        IN package_versions.pv_id%TYPE,
4911
      nrtagid      IN release_tags.rtag_id%TYPE,
4912
      nnewrtagid   IN release_tags.rtag_id%TYPE,
4913
      nuserid      IN NUMBER
4914
   )
4915
   IS
4916
 
4917
      oldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);
4918
 
4919
   BEGIN
4920
      SELECT rtag_name into oldrtag_name
4921
      FROM RELEASE_TAGS
4922
      WHERE rtag_id = nrtagid;
4923
 
4924
      SELECT rtag_name into newrtag_name
4925
      FROM RELEASE_TAGS
4926
      WHERE rtag_id = nnewrtagid;
4927
 
4928
      /* Table Work In Progress*/
4929
      UPDATE WORK_IN_PROGRESS
4930
      SET RTAG_ID = nnewrtagid
4931
      WHERE RTAG_ID = nrtagid
4932
      AND PV_ID = npvid;
4933
 
4934
      /* Table PLANNED*/
4935
      UPDATE PLANNED
4936
      SET RTAG_ID = nnewrtagid
4937
      WHERE RTAG_ID = nrtagid
4938
      AND PV_ID = npvid;
4939
 
4940
      /* Table PEGGED_VERSIONS */
4941
      DELETE FROM PEGGED_VERSIONS pegv
4942
      WHERE pegv.RTAG_ID = nrtagid
4943
      AND pegv.PV_ID = npvid;
4944
 
4945
      /* Table ADVISORY_RIPPLE*/
4946
      DELETE FROM ADVISORY_RIPPLE
4947
      WHERE RTAG_ID = nrtagid
4948
      AND PV_ID = npvid;
4949
 
4950
 
4951
      -- Log Action --
4952
      log_action (npvid,
4953
                  'move_package_version',
4954
                  nuserid,
4955
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
4956
                 );
4957
   END;
4958
 
4959
/*-------------------------------------------------------------------------------------------------------*/
4960
   /*
4961
   ** Author: Rupesh Solanki
4962
   ** Purpose: To modify the product state from integration to test to deployment
4963
   ** Release: 25th January 2006
4964
   */
4965
   PROCEDURE modify_product_state (
4966
      npvid    IN package_versions.pv_id%TYPE,
4967
      nrtagid  IN release_tags.rtag_id%TYPE,
4968
      nstateid IN product_states.state_id%TYPE,
4969
      nuserid  IN NUMBER
4970
   ) IS
4971
 
4972
      sStateName VARCHAR2(4000);
4973
      sRtagName VARCHAR2(4000);
4974
 
4975
   BEGIN
4976
 
4977
      UPDATE RELEASE_CONTENT
4978
      SET PRODUCT_STATE = nstateid
4979
      WHERE PV_ID = npvid
4980
      AND RTAG_ID = nrtagid;
4981
 
4982
 
4983
      SELECT STATE INTO sStateName
4984
      FROM PRODUCT_STATES
4985
      WHERE STATE_ID = nstateid;
4986
 
4987
      SELECT RTAG_NAME into sRtagName
4988
      FROM RELEASE_TAGS
4989
      WHERE RTAG_ID = nrtagid;
4990
 
4991
 
4992
      -- Log Action --
4993
      log_action (npvid,
4994
                  'modify_product_state',
4995
                     nuserid,
4996
                     sStateName || ' in '|| sRtagName
4997
                  );
4998
   END;
4999
/*-------------------------------------------------------------------------------------------------------*/
5000
   /*
5001
   ** Author: Jeremy Tweddle
5002
   ** Date: 24/Aug/2007
5003
   */
5004
   PROCEDURE add_code_review_url (
5005
      npvid           IN    NUMBER,
5006
      nprojid         IN    NUMBER,
5007
      surl            IN    VARCHAR2,
5008
      sreason         IN    VARCHAR2,
5009
      ddateofreview   IN    DATE
5010
   ) IS
5011
 
5012
      ncrid NUMBER;
5013
 
5014
   BEGIN
5015
 
5016
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
5017
 
5018
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
5019
                                    last_modified )
5020
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
5021
 
5022
   END;
5023
/*-------------------------------------------------------------------------------------------------------*/
5024
   /*
5025
   ** Author: Jeremy Tweddle
5026
   ** Date: 22/Aug/2007
5027
   */
5028
   PROCEDURE update_code_review_url (
5029
      ncrid           IN    NUMBER,
5030
      nprojid         IN    NUMBER,
5031
      surl            IN    VARCHAR2,
5032
      sreason         IN    VARCHAR2
5033
   ) IS
5034
 
5035
   BEGIN
5036
 
5037
      UPDATE code_review_url
5038
      SET url = surl,
5039
          proj_id = nprojid,
5040
          reason = sreason,
5041
          last_modified = ora_sysdate
5042
      WHERE cr_id = ncrid;
5043
 
5044
   END;
5045
/*-------------------------------------------------------------------------------------------------------*/
5046
   /*
5047
   ** Author: Jeremy Tweddle
5048
   ** Date: 22/Aug/2007
5049
   */
5050
   PROCEDURE remove_code_review_url (
5051
      ncrid  IN    NUMBER
5052
   ) IS
5053
 
5054
   BEGIN
5055
      DELETE FROM code_review_url
5056
      WHERE cr_id = ncrid;
5057
   END;
5058
/*-------------------------------------------------------------------------------------------------------*/
5059
END pk_package;
5060
/
5061
--------------------------------------------------------
5062
--  DDL for Package Body PK_RMAPI_TEST
5063
--------------------------------------------------------
5064
 
5065
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI_TEST" 
5066
IS
5067
 
5068
   /*-------------------------------------------------------------------------------------------------------*/
5069
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
5070
      RETURN typecur
5071
   IS
5072
      npvid     NUMBER  := 0;
5073
      RECORDS   typecur;
5074
   BEGIN
5075
      BEGIN
5076
         -- Get PV_ID --
5077
         SELECT pv.pv_id
5078
           INTO npvid
5079
           FROM PACKAGES pkg, package_versions pv
5080
          WHERE pv.pkg_id = pkg.pkg_id
5081
            AND pkg.pkg_name = pkgname
5082
            AND pv.pkg_version = pkgversion;
5083
      EXCEPTION
5084
         WHEN NO_DATA_FOUND
5085
         THEN
5086
            raise_application_error (-20000, 'Package Not Found!');
5087
            --WHEN OTHERS THEN
5088
                  -- Consider logging the error and then re-raise
5089
            RAISE;
5090
      END;
5091
 
5092
      -- Finally get package dependencies --
5093
      OPEN RECORDS FOR
5094
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
5095
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
5096
          WHERE dep.pv_id = npvid
5097
            AND dpv.pkg_id = dpkg.pkg_id
5098
            AND dpv.pv_id = dep.dpv_id;
5099
 
5100
      RETURN RECORDS;
5101
   END;
5102
 
5103
/*-------------------------------------------------------------------------------------------------------*/
5104
   FUNCTION wip_iteration_package (
5105
      projname        VARCHAR2,
5106
      iterationname   VARCHAR2,
5107
      pkgname         VARCHAR2
5108
   )
5109
      RETURN typecur
5110
   IS
5111
      nrtagid   NUMBER  := 0;
5112
      RECORDS   typecur;
5113
   BEGIN
5114
      BEGIN
5115
         -- Get latest rtag_id --
5116
         SELECT rt.rtag_id
5117
           INTO nrtagid
5118
           FROM projects proj, release_tags rt
5119
          WHERE rt.proj_id = proj.proj_id
5120
            AND UPPER (proj.proj_name) = UPPER (projname)
5121
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
5122
 
5123
         IF (nrtagid IS NULL)
5124
         THEN
5125
            raise_application_error (-20000,
5126
                                     'Work In Progress is Not Found!');
5127
         END IF;
5128
      EXCEPTION
5129
         WHEN NO_DATA_FOUND
5130
         THEN
5131
            raise_application_error (-20000,
5132
                                     'Work In Progress is Not Found!');
5133
            RAISE;
5134
      END;
5135
 
5136
      -- Finally get package dependencies --
5137
      OPEN RECORDS FOR
5138
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
5139
                pv.src_path
5140
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
5141
          WHERE pv.pkg_id = pkg.pkg_id
5142
            AND wip.pv_id = pv.pv_id
5143
            AND wip.rtag_id = nrtagid
5144
            AND pkg.pkg_name = pkgname;
5145
 
5146
      RETURN RECORDS;
5147
   END;
5148
 
5149
/*-------------------------------------------------------------------------------------------------------*/
5150
   FUNCTION auto_make_release (
5151
      rtagid                   IN   NUMBER,
5152
      pkgname                  IN   VARCHAR2,
5153
      vext                     IN   VARCHAR2,
5154
      newpkgversion            IN   VARCHAR2,
5155
      label                    IN   VARCHAR2,
5156
      dependenciesimportlist   IN   VARCHAR2,
5157
      isrippled                IN   NUMBER,
5158
      username                 IN   VARCHAR2
5159
   )
5160
      RETURN NUMBER
5161
   IS
5162
      pkgid                           NUMBER;
5163
      pvid                            NUMBER                        := 0;
5164
      userid                          NUMBER;
5165
      dlocked                         VARCHAR2 (20)                 := NULL;
5166
      clonefrompvid                   NUMBER;
5167
      ssv_mm                          package_versions.v_mm%TYPE;
5168
      ssv_nmm                         package_versions.v_nmm%TYPE;
5169
      ssv_ext                         package_versions.v_ext%TYPE;
5170
      return_package_not_found        NUMBER                        := -1;
5171
      return_package_already_exists   NUMBER                        := -2;
5172
      return_not_approved             NUMBER                        := -3;
5173
   BEGIN
5174
      /*--------------- Business Rules Here -------------------*/
5175
      IF (rtagid IS NULL)
5176
      THEN
5177
         raise_application_error (-20000, 'RtagId must be supplied.');
5178
      END IF;
5179
 
5180
      IF (pkgname IS NULL)
5181
      THEN
5182
         raise_application_error (-20000, 'PkgName must be supplied.');
5183
      END IF;
5184
 
5185
      IF (newpkgversion IS NULL)
5186
      THEN
5187
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5188
      END IF;
5189
 
5190
      IF (label IS NULL)
5191
      THEN
5192
         raise_application_error (-20000, 'Label must be supplied.');
5193
      END IF;
5194
 
5195
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5196
      THEN
5197
         raise_application_error
5198
            (-20000,
5199
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5200
            );
5201
      END IF;
5202
 
5203
      IF (username IS NULL)
5204
      THEN
5205
         raise_application_error (-20000, 'UserName must be supplied.');
5206
      END IF;
5207
 
5208
      -- Get user_id
5209
      BEGIN
5210
         SELECT usr.user_id
5211
           INTO userid
5212
           FROM users usr
5213
          WHERE UPPER (usr.user_name) = UPPER (username)
5214
            AND usr.is_disabled IS NULL;
5215
      EXCEPTION
5216
         WHEN NO_DATA_FOUND
5217
         THEN
5218
            raise_application_error (-20000,
5219
                                        'UserName '
5220
                                     || username
5221
                                     || ' is not valid or disabled.'
5222
                                    );
5223
      END;
5224
 
5225
/*-------------------------------------------------------*/
5226
 
5227
      -- Create package if necessary
5228
      IF isrippled = 1
5229
      THEN
5230
         /* Ripple Build */
5231
         BEGIN
5232
            -- Make sure that package does not exist
5233
            SELECT pv.pv_id
5234
              INTO pvid
5235
              FROM package_versions pv, PACKAGES pkg
5236
             WHERE pv.pkg_id = pkg.pkg_id
5237
               AND pkg.pkg_name = pkgname
5238
               AND pv.pkg_version = newpkgversion;
5239
         EXCEPTION
5240
            WHEN NO_DATA_FOUND
5241
            THEN
5242
               pvid := 0;
5243
         END;
5244
 
5245
         IF (pvid = 0)
5246
         THEN
5247
            -- Split current version in parts
5248
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5249
 
5250
            BEGIN
5251
               -- Find package to be replaced with thie ripple package
5252
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5253
               THEN
5254
                  SELECT pv.pv_id
5255
                    INTO clonefrompvid
5256
                    FROM PACKAGES pkg, package_versions pv,
5257
                         release_content rc
5258
                   WHERE rc.pv_id = pv.pv_id
5259
                     AND pv.pkg_id = pkg.pkg_id
5260
                     AND rc.rtag_id = rtagid
5261
                     AND pkg.pkg_name = pkgname
5262
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5263
               ELSE
5264
                  SELECT pv.pv_id
5265
                    INTO clonefrompvid
5266
                    FROM PACKAGES pkg, package_versions pv,
5267
                         release_content rc
5268
                   WHERE rc.pv_id = pv.pv_id
5269
                     AND pv.pkg_id = pkg.pkg_id
5270
                     AND rc.rtag_id = rtagid
5271
                     AND pkg.pkg_name = pkgname
5272
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5273
               END IF;
5274
            EXCEPTION
5275
               WHEN NO_DATA_FOUND
5276
               THEN
5277
                  raise_application_error
5278
                                        (-20000,
5279
                                            'Cannot get CloneFromPvId. VExt='
5280
                                         || vext
5281
                                         || ', RtagId='
5282
                                         || rtagid
5283
                                         || ', PkgName='
5284
                                         || pkgname
5285
                                         || ', SSV_EXT='
5286
                                         || ssv_ext
5287
                                        );
5288
            END;
5289
 
5290
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5291
            THEN
5292
               -- Create package
5293
               seed_package_names_versions (pkgname,
5294
                                            newpkgversion,
5295
                                            userid,
5296
                                            pvid,
5297
                                            clonefrompvid
5298
                                           );
5299
            ELSE
5300
               -- Create package
5301
               seed_package_names_versions2 (pkgname,
5302
                                             newpkgversion,
5303
                                             userid,
5304
                                             pvid,
5305
                                             clonefrompvid
5306
                                            );
5307
            END IF;
5308
 
5309
            -- Update Package reason for release
5310
            UPDATE package_versions pv
5311
               SET pv.comments = 'Rippled Build.',
5312
                   pv.build_type = 'Y'
5313
             WHERE pv.pv_id = pvid;
5314
         ELSE
5315
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5316
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5317
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5318
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5319
            UPDATE package_versions pv
5320
               SET pv.release_notes_info = null,
5321
                   pv.modified_stamp = ora_sysdatetime
5322
             WHERE pv.pv_id = pvid;
5323
 
5324
            RETURN return_package_already_exists;
5325
         END IF;
5326
      ELSE
5327
         /* Auto build from Pending area */
5328
 
5329
         -- Find package in pending area
5330
         BEGIN
5331
            SELECT pv.pv_id, pv.dlocked
5332
              INTO pvid, dlocked
5333
              FROM planned pl, package_versions pv, PACKAGES pkg
5334
             WHERE pl.pv_id = pv.pv_id
5335
               AND pv.pkg_id = pkg.pkg_id
5336
               AND pl.rtag_id = rtagid
5337
               AND pkg.pkg_name = pkgname
5338
               AND pv.dlocked = 'A'
5339
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5340
               AND rownum = 1
5341
             ORDER BY pv.modified_stamp;
5342
         EXCEPTION
5343
            WHEN NO_DATA_FOUND
5344
            THEN
5345
               pvid := 0;
5346
         END;
5347
 
5348
         IF (pvid = 0)
5349
         THEN
5350
            -- Package does not exist in pending area, hence report it
5351
            RETURN return_package_not_found;
5352
         ELSIF (dlocked != 'A')
5353
         THEN
5354
            -- Package is not approved for autobuild
5355
            RETURN return_not_approved;
5356
         END IF;
5357
      END IF;
5358
 
5359
      BEGIN
5360
         -- Import Dependencies
5361
         import_dependencies (pvid, dependenciesimportlist, userid);
5362
      END;
5363
 
5364
      BEGIN
5365
         -- Split current version in parts
5366
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5367
 
5368
         -- Update Package Details
5369
         UPDATE package_versions pv
5370
            SET pv.pkg_version = newpkgversion,
5371
                pv.v_ext = ssv_ext,
5372
                pv.v_mm = ssv_mm,
5373
                pv.v_nmm = ssv_nmm,
5374
                pv.pkg_label = label
5375
          WHERE pv.pv_id = pvid;
5376
      EXCEPTION
5377
         WHEN DUP_VAL_ON_INDEX
5378
         THEN
5379
            -- Package already exists, hence cannot be used for ripple build
5380
            RETURN return_package_already_exists;
5381
      END;
5382
 
5383
      -- Update the is_autobuildable
5384
      UPDATE package_versions
5385
         SET is_autobuildable = 'Y'
5386
       WHERE pv_id = pvid;
5387
 
5388
      -- Now release package
5389
      pk_environment.auto_make_release (pvid,
5390
                                        rtagid,
5391
                                        userid,
5392
                                        vext,
5393
                                        ssv_ext,
5394
                                        clonefrompvid
5395
                                       );
5396
 
5397
      --Now clean the PLANNED_VERSIONS table
5398
      SELECT pkg_id
5399
        INTO pkgid
5400
        FROM PACKAGES
5401
       WHERE pkg_name = pkgname;
5402
 
5403
      DELETE FROM planned_versions
5404
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5405
 
5406
      RETURN pvid;
5407
   END;
5408
 
5409
/*-------------------------------------------------------------------------------------------------------*/
5410
   FUNCTION auto_make_vcsrelease (
5411
      rtagid                   IN   NUMBER,
5412
      pkgname                  IN   VARCHAR2,
5413
      vext                     IN   VARCHAR2,
5414
      newpkgversion            IN   VARCHAR2,
5415
      vcstag             IN   VARCHAR2,
5416
      dependenciesimportlist   IN   VARCHAR2,
5417
      isrippled                IN   NUMBER,
5418
      username                 IN   VARCHAR2
5419
   )
5420
      RETURN NUMBER
5421
   IS
5422
      pkgid                           NUMBER;
5423
      pvid                            NUMBER                        := 0;
5424
      userid                          NUMBER;
5425
      dlocked                         VARCHAR2 (20)                 := NULL;
5426
      clonefrompvid                   NUMBER;
5427
      ssv_mm                          package_versions.v_mm%TYPE;
5428
      ssv_nmm                         package_versions.v_nmm%TYPE;
5429
      ssv_ext                         package_versions.v_ext%TYPE;
5430
      return_package_not_found        NUMBER                        := -1;
5431
      return_package_already_exists   NUMBER                        := -2;
5432
      return_not_approved             NUMBER                        := -3;
5433
 
5434
      x_vcstypeid                     NUMBER;
5435
      x_tag                           VARCHAR2(32);
5436
      x_label                         VARCHAR2(60);
5437
      x_srcpath                       VARCHAR2(2000);
5438
 
5439
      -- Regular expression constituents
5440
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
5441
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
5442
      BOL           VARCHAR2(4)  := '^';
5443
      Anything      VARCHAR2(4)  := '.*';
5444
      ReplaceToken1 VARCHAR2(4)  := '\1';
5445
      ReplaceToken2 VARCHAR2(4)  := '\2';
5446
      ReplaceToken3 VARCHAR2(4)  := '\3';
5447
 
5448
 
5449
   BEGIN
5450
      /*--------------- Business Rules Here -------------------*/
5451
      IF (rtagid IS NULL)
5452
      THEN
5453
         raise_application_error (-20000, 'RtagId must be supplied.');
5454
      END IF;
5455
 
5456
      IF (pkgname IS NULL)
5457
      THEN
5458
         raise_application_error (-20000, 'PkgName must be supplied.');
5459
      END IF;
5460
 
5461
      IF (newpkgversion IS NULL)
5462
      THEN
5463
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5464
      END IF;
5465
 
5466
      IF (vcstag IS NULL)
5467
      THEN
5468
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
5469
      END IF;
5470
 
5471
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5472
      THEN
5473
         raise_application_error
5474
            (-20000,
5475
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5476
            );
5477
      END IF;
5478
 
5479
      IF (username IS NULL)
5480
      THEN
5481
         raise_application_error (-20000, 'UserName must be supplied.');
5482
      END IF;
5483
 
5484
      -- Parse the PkgVcsTag
5485
      -- Sets up
5486
      --   x_tag, x_label, x_srcpath
5487
 
5488
       BEGIN
5489
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
5490
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
5491
 
5492
          -- Decode the short tag
5493
          CASE x_tag
5494
             WHEN 'CC' THEN
5495
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
5496
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
5497
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
5498
 
5499
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5500
                -- check for that error as well as the obvious zero-length string conditions.
5501
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
5502
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5503
                END IF;
5504
 
5505
             WHEN 'SVN' THEN
5506
                -- extract the 2nd token, that being the subversion tag
5507
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);
5508
                x_label   := 'N/A';
5509
 
5510
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5511
                -- check for that error as well as the obvious zero-length string conditions.
5512
                IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THEN
5513
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5514
                END IF;
5515
 
5516
             WHEN 'UC' THEN
5517
                -- nothing to extract, just assign defaults
5518
                x_srcpath := '';
5519
                x_label   := 'N/A';
5520
             ELSE
5521
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
5522
          END CASE;
5523
       END;
5524
 
5525
      -- Get the VCS_TYPE_ID for the version control system.
5526
      BEGIN
5527
         SELECT vt.vcs_type_id
5528
         INTO x_vcstypeid
5529
         FROM VCS_TYPE vt
5530
         WHERE vt.tag = x_tag;
5531
         EXCEPTION
5532
            WHEN NO_DATA_FOUND THEN
5533
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
5534
      END;
5535
 
5536
 
5537
      -- Get user_id
5538
      BEGIN
5539
         SELECT usr.user_id
5540
           INTO userid
5541
           FROM users usr
5542
          WHERE UPPER (usr.user_name) = UPPER (username)
5543
            AND usr.is_disabled IS NULL;
5544
      EXCEPTION
5545
         WHEN NO_DATA_FOUND
5546
         THEN
5547
            raise_application_error (-20000,
5548
                                        'UserName '
5549
                                     || username
5550
                                     || ' is not valid or disabled.'
5551
                                    );
5552
      END;
5553
 
5554
/*-------------------------------------------------------*/
5555
 
5556
      -- Create package if necessary
5557
      IF isrippled = 1
5558
      THEN
5559
         /* Ripple Build */
5560
         BEGIN
5561
            -- Make sure that package does not exist
5562
            SELECT pv.pv_id
5563
              INTO pvid
5564
              FROM package_versions pv, PACKAGES pkg
5565
             WHERE pv.pkg_id = pkg.pkg_id
5566
               AND pkg.pkg_name = pkgname
5567
               AND pv.pkg_version = newpkgversion;
5568
         EXCEPTION
5569
            WHEN NO_DATA_FOUND
5570
            THEN
5571
               pvid := 0;
5572
         END;
5573
 
5574
         IF (pvid = 0)
5575
         THEN
5576
            -- Split current version in parts
5577
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5578
 
5579
            BEGIN
5580
               -- Find package to be replaced with thie ripple package
5581
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5582
               THEN
5583
                  SELECT pv.pv_id
5584
                    INTO clonefrompvid
5585
                    FROM PACKAGES pkg, package_versions pv,
5586
                         release_content rc
5587
                   WHERE rc.pv_id = pv.pv_id
5588
                     AND pv.pkg_id = pkg.pkg_id
5589
                     AND rc.rtag_id = rtagid
5590
                     AND pkg.pkg_name = pkgname
5591
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5592
               ELSE
5593
                  SELECT pv.pv_id
5594
                    INTO clonefrompvid
5595
                    FROM PACKAGES pkg, package_versions pv,
5596
                         release_content rc
5597
                   WHERE rc.pv_id = pv.pv_id
5598
                     AND pv.pkg_id = pkg.pkg_id
5599
                     AND rc.rtag_id = rtagid
5600
                     AND pkg.pkg_name = pkgname
5601
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5602
               END IF;
5603
            EXCEPTION
5604
               WHEN NO_DATA_FOUND
5605
               THEN
5606
                  raise_application_error
5607
                                        (-20000,
5608
                                            'Cannot get CloneFromPvId. VExt='
5609
                                         || vext
5610
                                         || ', RtagId='
5611
                                         || rtagid
5612
                                         || ', PkgName='
5613
                                         || pkgname
5614
                                         || ', SSV_EXT='
5615
                                         || ssv_ext
5616
                                        );
5617
            END;
5618
 
5619
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5620
            THEN
5621
               -- Create package
5622
               seed_package_names_versions (pkgname,
5623
                                            newpkgversion,
5624
                                            userid,
5625
                                            pvid,
5626
                                            clonefrompvid
5627
                                           );
5628
            ELSE
5629
               -- Create package
5630
               seed_package_names_versions2 (pkgname,
5631
                                             newpkgversion,
5632
                                             userid,
5633
                                             pvid,
5634
                                             clonefrompvid
5635
                                            );
5636
            END IF;
5637
 
5638
            -- Update Package reason for release
5639
            UPDATE package_versions pv
5640
               SET pv.comments = 'Rippled Build.',
5641
                   pv.build_type = 'Y'
5642
             WHERE pv.pv_id = pvid;
5643
         ELSE
5644
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5645
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5646
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5647
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5648
            UPDATE package_versions pv
5649
               SET pv.release_notes_info = null,
5650
                   pv.modified_stamp = ora_sysdatetime
5651
             WHERE pv.pv_id = pvid;
5652
 
5653
            RETURN return_package_already_exists;
5654
         END IF;
5655
      ELSE
5656
         /* Auto build from Pending area */
5657
 
5658
         -- Find package in pending area
5659
         BEGIN
5660
            SELECT pv.pv_id, pv.dlocked
5661
              INTO pvid, dlocked
5662
              FROM planned pl, package_versions pv, PACKAGES pkg
5663
             WHERE pl.pv_id = pv.pv_id
5664
               AND pv.pkg_id = pkg.pkg_id
5665
               AND pl.rtag_id = rtagid
5666
               AND pkg.pkg_name = pkgname
5667
               AND pv.dlocked = 'A'
5668
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5669
               AND rownum = 1
5670
             ORDER BY pv.modified_stamp;
5671
         EXCEPTION
5672
            WHEN NO_DATA_FOUND
5673
            THEN
5674
               pvid := 0;
5675
         END;
5676
 
5677
         IF (pvid = 0)
5678
         THEN
5679
            -- Package does not exist in pending area, hence report it
5680
            RETURN return_package_not_found;
5681
         ELSIF (dlocked != 'A')
5682
         THEN
5683
            -- Package is not approved for autobuild
5684
            RETURN return_not_approved;
5685
         END IF;
5686
      END IF;
5687
 
5688
      BEGIN
5689
         -- Import Dependencies
5690
         import_dependencies (pvid, dependenciesimportlist, userid);
5691
      END;
5692
 
5693
      BEGIN
5694
         -- Split current version in parts
5695
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5696
 
5697
         -- Update Package Details
5698
         UPDATE package_versions pv
5699
            SET pv.pkg_version = newpkgversion,
5700
                pv.v_ext = ssv_ext,
5701
                pv.v_mm = ssv_mm,
5702
                pv.v_nmm = ssv_nmm,
5703
                pv.src_path = x_srcpath,
5704
                pv.pkg_label = x_label,
5705
                pv.vcs_type_id = x_vcstypeid
5706
          WHERE pv.pv_id = pvid;
5707
      EXCEPTION
5708
         WHEN DUP_VAL_ON_INDEX
5709
         THEN
5710
            -- Package already exists, hence cannot be used for ripple build
5711
            RETURN return_package_already_exists;
5712
      END;
5713
 
5714
      -- Update the is_autobuildable
5715
      UPDATE package_versions
5716
         SET is_autobuildable = 'Y'
5717
       WHERE pv_id = pvid;
5718
 
5719
      -- Now release package
5720
      pk_environment.auto_make_release (pvid,
5721
                                        rtagid,
5722
                                        userid,
5723
                                        vext,
5724
                                        ssv_ext,
5725
                                        clonefrompvid
5726
                                       );
5727
 
5728
      --Now clean the PLANNED_VERSIONS table
5729
      SELECT pkg_id
5730
        INTO pkgid
5731
        FROM PACKAGES
5732
       WHERE pkg_name = pkgname;
5733
 
5734
      DELETE FROM planned_versions
5735
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5736
 
5737
      RETURN pvid;
5738
   END;
5739
 
5740
/*-------------------------------------------------------------------------------------------------------*/
5741
   PROCEDURE import_dependencies (
5742
      pvid                     IN   NUMBER,
5743
      dependenciesimportlist   IN   VARCHAR2,
5744
      userid                   IN   NUMBER
5745
   )
5746
   IS
5747
/*
5748
|| DependenciesImportList Format:
5749
|| "pkgA","1.0.0";"pkgB","2.0.0";
5750
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
5751
*/
5752
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
5753
         INDEX BY VARCHAR2 (4000);
5754
 
5755
      seperator         VARCHAR2 (2)           := '||';
5756
      pkgname           VARCHAR2 (4000);
5757
      pkgversion        VARCHAR2 (4000);
5758
      buildtype         VARCHAR2 (50);
5759
      pkgid             NUMBER;
5760
      vext              VARCHAR2 (4000);
5761
      dpvid             NUMBER;
5762
      slist             VARCHAR2 (4000);
5763
      cbuildtypes       tdictionary;
5764
      dependencyrow     NUMBER;
5765
      sdependency       VARCHAR2 (4000);
5766
      first_pos         VARCHAR2 (4000);
5767
      second_pos        VARCHAR2 (4000);
5768
      third_pos         VARCHAR2 (4000);
5769
      forth_pos         VARCHAR2 (4000);
5770
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
5771
 
5772
      CURSOR curbuildtype
5773
      IS
5774
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
5775
                dep.build_type
5776
           FROM package_dependencies dep, package_versions dpv
5777
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
5778
 
5779
      recbuildtype      curbuildtype%ROWTYPE;
5780
   BEGIN
5781
      slist := dependenciesimportlist;
5782
 
5783
      -- Preformat String
5784
      IF NOT slist IS NULL
5785
      THEN
5786
         slist := REPLACE (slist, ' ');                      -- Remove spaces
5787
         slist := REPLACE (slist, UTL_TCP.crlf);
5788
         -- Remove new line and carriage-return characters
5789
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
5790
      END IF;
5791
 
5792
      -- Get Current Dependencies
5793
      OPEN curbuildtype;
5794
 
5795
      FETCH curbuildtype
5796
       INTO recbuildtype;
5797
 
5798
      WHILE curbuildtype%FOUND
5799
      LOOP
5800
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
5801
 
5802
         FETCH curbuildtype
5803
          INTO recbuildtype;
5804
      END LOOP;
5805
 
5806
      CLOSE curbuildtype;
5807
 
5808
      -- Separate dependencies with ; separator
5809
      citemcollection := in_list_varchar2 (slist, ';');
5810
 
5811
      BEGIN
5812
         -- Remove old dependencies
5813
         DELETE FROM package_dependencies dep
5814
               WHERE dep.pv_id = pvid;
5815
 
5816
         -- Loop through dependencies
5817
         FOR dependencyrow IN 1 .. citemcollection.COUNT
5818
         LOOP
5819
            -- Extract pkg_name and pkg_version
5820
            sdependency := citemcollection (dependencyrow);
5821
            first_pos := INSTR (sdependency, '"', 1, 1);
5822
            second_pos := INSTR (sdependency, '"', 1, 2);
5823
            third_pos := INSTR (sdependency, '"', 1, 3);
5824
            forth_pos := INSTR (sdependency, '"', 1, 4);
5825
            pkgname :=
5826
               SUBSTR (sdependency,
5827
                       (first_pos + 1),
5828
                       (second_pos - first_pos - 1)
5829
                      );
5830
            pkgversion :=
5831
               SUBSTR (sdependency,
5832
                       (third_pos + 1),
5833
                       (forth_pos - third_pos - 1)
5834
                      );
5835
 
5836
            -- Dependency must exits to be linked against
5837
            BEGIN
5838
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
5839
                 INTO dpvid, pkgid, vext
5840
                 FROM package_versions pv, PACKAGES pkg
5841
                WHERE pv.pkg_id = pkg.pkg_id
5842
                  AND pkg.pkg_name = pkgname
5843
                  AND pv.pkg_version = pkgversion;
5844
            EXCEPTION
5845
               WHEN NO_DATA_FOUND
5846
               THEN
5847
                  raise_application_error
5848
                                  (-20000,
5849
                                      'Dependency ['
5850
                                   || pkgname
5851
                                   || ' '
5852
                                   || pkgversion
5853
                                   || '] does not exist yet and cannot be used!'
5854
                                  );
5855
            END;
5856
 
5857
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
5858
            BEGIN
5859
               buildtype := cbuildtypes (pkgid || seperator || vext);
5860
 
5861
               IF buildtype IS NULL
5862
               THEN
5863
                  -- Set build type to LinkPackageArchive by default
5864
                  buildtype := 'L';
5865
               END IF;
5866
            EXCEPTION
5867
               WHEN NO_DATA_FOUND
5868
               THEN
5869
                  buildtype := 'L';
5870
            END;
5871
 
5872
            -- Insert Dependencies
5873
            update_package_dependency (pvid,
5874
                                       pkgname,
5875
                                       pkgversion,
5876
                                       buildtype,
5877
                                       userid,
5878
 
5879
                                      );
5880
         END LOOP;
5881
      END;
5882
   END;
5883
 
5884
/*-------------------------------------------------------------------------------------------------------*/
5885
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
5886
      RETURN VARCHAR2
5887
   IS
5888
      pkgversion   VARCHAR2 (4000);
5889
   BEGIN
5890
      BEGIN
5891
         SELECT pv.pkg_version
5892
           INTO pkgversion
5893
           FROM PACKAGES pkg, release_content rc, package_versions pv
5894
          WHERE pv.pv_id = rc.pv_id
5895
            AND pkg.pkg_id = pv.pkg_id
5896
            AND pkg.pkg_name = pkgname
5897
            AND rc.rtag_id = rtagid;
5898
 
5899
         RETURN pkgversion;
5900
      END;
5901
   END;
5902
 
5903
/*-------------------------------------------------------------------------------------------------------*/
5904
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
5905
      RETURN VARCHAR2
5906
   IS
5907
      pkgversion   VARCHAR2 (4000);
5908
   BEGIN
5909
      BEGIN
5910
         SELECT pv.pkg_version
5911
           INTO pkgversion
5912
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
5913
          WHERE pv.pv_id = wip.pv_id
5914
            AND pkg.pkg_id = pv.pkg_id
5915
            AND pkg.pkg_name = pkgname
5916
            AND wip.rtag_id = rtagid;
5917
 
5918
         IF pkgversion IS NULL
5919
         THEN
5920
            SELECT pv.pkg_version
5921
              INTO pkgversion
5922
              FROM PACKAGES pkg, planned pl, package_versions pv
5923
             WHERE pv.pv_id = pl.pv_id
5924
               AND pkg.pkg_id = pv.pkg_id
5925
               AND pkg.pkg_name = pkgname
5926
               AND pl.rtag_id = rtagid;
5927
         END IF;
5928
 
5929
         RETURN pkgversion;
5930
      END;
5931
   END;
5932
 
5933
/*-------------------------------------------------------------------------------------------------------*/
5934
   PROCEDURE update_dash_board (rtagid IN NUMBER)
5935
   IS
5936
      projid       NUMBER;
5937
      projiddb     NUMBER;
5938
      total        NUMBER;
5939
      auto_total   NUMBER;
5940
      rtagiddb     NUMBER;
5941
   BEGIN
5942
      SELECT COUNT (*)
5943
        INTO total
5944
        FROM release_content rc, package_versions pv
5945
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
5946
 
5947
      SELECT COUNT (*)
5948
        INTO auto_total
5949
        FROM release_content rc, package_versions pv
5950
       WHERE pv.pv_id = rc.pv_id
5951
         AND pv.is_autobuildable = 'Y'
5952
         AND rc.rtag_id = rtagid;
5953
 
5954
      BEGIN
5955
         SELECT rtag_id
5956
           INTO rtagiddb
5957
           FROM dash_board
5958
          WHERE rtag_id = rtagid;
5959
 
5960
         SELECT proj_id
5961
           INTO projiddb
5962
           FROM dash_board
5963
          WHERE rtag_id = rtagid;
5964
      EXCEPTION
5965
         WHEN NO_DATA_FOUND
5966
         THEN
5967
            rtagiddb := '';
5968
      END;
5969
 
5970
      IF rtagiddb IS NULL
5971
      THEN
5972
         SELECT proj_id
5973
           INTO projid
5974
           FROM release_tags
5975
          WHERE rtag_id = rtagid;
5976
 
5977
         INSERT INTO dash_board
5978
                     (proj_id, rtag_id, last_build_time, automated_packages,
5979
                      total_packages
5980
                     )
5981
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
5982
                      total
5983
                     );
5984
      ELSE
5985
         UPDATE dash_board
5986
            SET last_build_time = ora_sysdatetime,
5987
                automated_packages = auto_total,
5988
                total_packages = total
5989
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
5990
      END IF;
5991
   END;
5992
 
5993
/*-------------------------------------------------------------------------------------------------------*/
5994
   FUNCTION exclude_from_build (
5995
      pvid          IN   NUMBER,
5996
      spkgversion   IN   VARCHAR2,
5997
      rtagid        IN   NUMBER,
5998
      username      IN   VARCHAR2
5999
   )
6000
      RETURN NUMBER
6001
   IS
6002
      userid              NUMBER;
6003
      outerrcode          NUMBER;
6004
      pkgid               NUMBER;
6005
 
6006
      CURSOR dnr_duplicate_cur
6007
      IS
6008
         SELECT *
6009
           FROM do_not_ripple
6010
          WHERE pv_id = pvid AND rtag_id = rtagid;
6011
 
6012
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
6013
   BEGIN
6014
      outerrcode := -1;       -- Set default return error code to ERROR state
6015
 
6016
      /*--------------- Business Rules Here -------------------*/
6017
      IF (rtagid IS NULL)
6018
      THEN
6019
         RETURN outerrcode;
6020
--         raise_application_error (-20000, 'RtagId must be supplied.');
6021
      END IF;
6022
 
6023
      IF (pvid IS NULL)
6024
      THEN
6025
         RETURN outerrcode;
6026
--         raise_application_error (-20000, 'PvId must be supplied.');
6027
      END IF;
6028
 
6029
      IF (username IS NULL)
6030
      THEN
6031
         RETURN outerrcode;
6032
--         raise_application_error (-20000, 'UserName must be supplied.');
6033
      END IF;
6034
 
6035
      -- Get user_id
6036
      BEGIN
6037
         SELECT usr.user_id
6038
           INTO userid
6039
           FROM users usr
6040
          WHERE UPPER (usr.user_name) = UPPER (username)
6041
            AND usr.is_disabled IS NULL;
6042
      EXCEPTION
6043
         WHEN NO_DATA_FOUND
6044
         THEN
6045
            RETURN outerrcode;
6046
--            raise_application_error (-20000,
6047
--                                        'UserName '
6048
--                                     || username
6049
--                                     || ' is not valid or disabled.'
6050
--                                    );
6051
      END;
6052
 
6053
      OPEN dnr_duplicate_cur;
6054
 
6055
      FETCH dnr_duplicate_cur
6056
       INTO dnr_duplicate_rec;
6057
 
6058
      IF dnr_duplicate_cur%FOUND
6059
      THEN
6060
         outerrcode := 0;
6061
      END IF;
6062
 
6063
      IF dnr_duplicate_cur%NOTFOUND
6064
      THEN
6065
         /* No duplicate recordset */
6066
         unripple_package (pvid, rtagid, userid);
6067
         outerrcode := 0;                            -- Set return to SUCCESS
6068
      END IF;
6069
 
6070
      CLOSE dnr_duplicate_cur;
6071
 
6072
      SELECT pkg_id
6073
        INTO pkgid
6074
        FROM package_versions
6075
       WHERE pv_id = pvid;
6076
 
6077
      DELETE FROM planned_versions
6078
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6079
 
6080
      RETURN outerrcode;
6081
   END;
6082
 
6083
/*-------------------------------------------------------------------------------------------------------*/
6084
   FUNCTION exclude_indirect_from_build (
6085
      pvid          IN   NUMBER,
6086
      spkgversion   IN   VARCHAR2,
6087
      rtagid        IN   NUMBER,
6088
      username      IN   VARCHAR2,
6089
      rootpvid      IN   NUMBER,
6090
      rootcause     IN   VARCHAR2,
6091
      rootfile      IN   VARCHAR2
6092
   )
6093
      RETURN NUMBER
6094
   IS
6095
      userid              NUMBER;
6096
      outerrcode          NUMBER;
6097
      pkgid               NUMBER;
6098
 
6099
      CURSOR dnr_duplicate_cur
6100
      IS
6101
         SELECT *
6102
           FROM do_not_ripple
6103
          WHERE pv_id = pvid AND rtag_id = rtagid;
6104
 
6105
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
6106
   BEGIN
6107
      outerrcode := -1;       -- Set default return error code to ERROR state
6108
 
6109
      /*--------------- Business Rules Here -------------------*/
6110
      IF (rtagid IS NULL)
6111
      THEN
6112
         RETURN outerrcode;
6113
--         raise_application_error (-20000, 'RtagId must be supplied.');
6114
      END IF;
6115
 
6116
      IF (pvid IS NULL)
6117
      THEN
6118
         RETURN outerrcode;
6119
--         raise_application_error (-20000, 'PvId must be supplied.');
6120
      END IF;
6121
 
6122
      IF (username IS NULL)
6123
      THEN
6124
         RETURN outerrcode;
6125
--         raise_application_error (-20000, 'UserName must be supplied.');
6126
      END IF;
6127
 
6128
      -- Get user_id
6129
      BEGIN
6130
         SELECT usr.user_id
6131
           INTO userid
6132
           FROM users usr
6133
          WHERE UPPER (usr.user_name) = UPPER (username)
6134
            AND usr.is_disabled IS NULL;
6135
      EXCEPTION
6136
         WHEN NO_DATA_FOUND
6137
         THEN
6138
            RETURN outerrcode;
6139
--            raise_application_error (-20000,
6140
--                                        'UserName '
6141
--                                     || username
6142
--                                     || ' is not valid or disabled.'
6143
--                                    );
6144
      END;
6145
 
6146
     /* No duplicate recordset */
6147
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
6148
     outerrcode := 0;                            -- Set return to SUCCESS
6149
 
6150
      SELECT pkg_id
6151
        INTO pkgid
6152
        FROM package_versions
6153
       WHERE pv_id = pvid;
6154
 
6155
      DELETE FROM planned_versions
6156
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6157
 
6158
      RETURN outerrcode;
6159
   END;
6160
/*-------------------------------------------------------------------------------------------------------*/
6161
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
6162
   IS
6163
   BEGIN
6164
      INSERT INTO abt_action_log
6165
                  (rcon_id, action_datetime, action
6166
                  )
6167
           VALUES (rconid, ora_sysdatetime, action
6168
                  );
6169
   END;
6170
 
6171
/*-------------------------------------------------------------------------------------------------------*/
6172
   FUNCTION insert_package_metrics (
6173
      rtagid                   IN   NUMBER,
6174
      pkgname                  IN   VARCHAR2,
6175
      vext                     IN   VARCHAR2,
6176
      metricstring             IN   VARCHAR2
6177
   )
6178
      RETURN NUMBER
6179
   IS
6180
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
6181
      lv_pvid                  NUMBER                 := 0;
6182
      rownumber                NUMBER;
6183
      rowcontent               VARCHAR2(4000);
6184
      metricname               VARCHAR2(1000);
6185
      metricvalue              VARCHAR2(4000);
6186
      return_insert_error      NUMBER                 := -1;
6187
      return_insert_success    NUMBER                 := 0;
6188
 
6189
      /* Metrics */
6190
      lv_branches                 NUMBER;
6191
      lv_branchlist               VARCHAR2(4000);
6192
      lv_codefiles                NUMBER;
6193
      lv_ignoredfiles             NUMBER;
6194
      lv_directories              NUMBER;
6195
      lv_directorydepth           NUMBER;
6196
      lv_totalfiles               NUMBER;
6197
      lv_makefiles                NUMBER;
6198
      lv_blanklines               NUMBER;
6199
      lv_codelines                NUMBER;
6200
      lv_commentlines             NUMBER;
6201
 
6202
   BEGIN
6203
      /*--------------- Business Rules Here -------------------*/
6204
      IF (rtagid IS NULL)
6205
      THEN
6206
         RETURN return_insert_error;
6207
      END IF;
6208
 
6209
      IF (pkgname IS NULL)
6210
      THEN
6211
         RETURN return_insert_error;
6212
      END IF;
6213
 
6214
      IF (metricstring IS NULL)
6215
      THEN
6216
         RETURN return_insert_error;
6217
      END IF;
6218
 
6219
      BEGIN
6220
         SELECT pv.pv_id
6221
           INTO lv_pvid
6222
           FROM package_versions pv, packages pkg, release_content rc
6223
          WHERE pv.pkg_id = pkg.pkg_id
6224
            AND rc.rtag_id = rtagid
6225
            AND pv.pv_id = rc.pv_id
6226
            AND pkg.pkg_name = pkgname
6227
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
6228
      EXCEPTION
6229
           WHEN NO_DATA_FOUND
6230
           THEN
6231
                lv_pvid := 0;
6232
      END;
6233
 
6234
      citemcollection := in_list_varchar2 (metricstring, ';');
6235
 
6236
      FOR rownumber IN 1 .. citemcollection.COUNT
6237
      LOOP
6238
         rowcontent := citemcollection(rownumber);
6239
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
6240
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
6241
 
6242
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
6243
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
6244
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
6245
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
6246
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
6247
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
6248
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
6249
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
6250
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
6251
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
6252
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
6253
         END IF;
6254
      END LOOP;
6255
 
6256
      IF (lv_pvid > 0)
6257
      THEN
6258
         -- Delete any existing entries for this package version to makes sure our data is untainted
6259
         DELETE FROM package_metrics pm
6260
         WHERE pm.pv_id = lv_pvid;
6261
 
6262
         -- Insert the new data into the metrics table
6263
         INSERT INTO package_metrics
6264
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
6265
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
6266
                     )
6267
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
6268
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
6269
                     );
6270
 
6271
         -- Now update the Release_Metrics Table
6272
         update_release_metrics(rtagid);
6273
 
6274
         RETURN return_insert_success;
6275
      ELSE
6276
         RETURN return_insert_error;
6277
      END IF;
6278
   END;
6279
 
6280
/*-------------------------------------------------------------------------------------------------------*/
6281
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
6282
   IS
6283
      lv_totalpackages       NUMBER;
6284
      lv_autobuilt           NUMBER;
6285
      lv_linesofcode         NUMBER;
6286
      lv_unittested          NUMBER;
6287
      lv_autotested          NUMBER;
6288
      lv_numOfbranches       NUMBER;
6289
      lv_lastbuildtime       DATE;
6290
   BEGIN
6291
      IF (rtagid > 0)
6292
      THEN
6293
         -- Get the total number of packages in this release and the number of
6294
         -- those that are autobuilt
6295
         SELECT COUNT (DISTINCT rc.pv_id),
6296
                COUNT (DISTINCT autobuilt_qry.pv_id)
6297
           INTO lv_totalpackages, lv_autobuilt
6298
           FROM release_content rc,
6299
                package_versions pv,
6300
                (
6301
                 SELECT rc.pv_id
6302
                   FROM release_content rc,
6303
                        package_versions pv
6304
                  WHERE pv.is_autobuildable = 'Y'
6305
                    AND pv.pv_id = rc.pv_id
6306
                    AND rc.rtag_id = rtagid
6307
                ) autobuilt_qry
6308
          WHERE pv.pv_id = rc.pv_id
6309
            AND rc.rtag_id = rtagid
6310
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
6311
 
6312
         -- Get the build time of the last package built in this release and the
6313
         -- total number of lines of code
6314
         SELECT MAX(pm.created_stamp),
6315
                SUM(pm.code_lines)
6316
           INTO lv_lastbuildtime, lv_linesofcode
6317
           FROM package_metrics pm, release_content rc
6318
          WHERE pm.pv_id = rc.pv_id
6319
            AND rc.rtag_id = rtagid;
6320
 
6321
         -- Get the number of packages with unit tests in this release and the
6322
         -- number of those that are autotested
6323
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
6324
           FROM unit_tests ut,
6325
                release_content rc
6326
          WHERE ut.pv_id = rc.pv_id
6327
            AND rc.rtag_id = rtagid
6328
        AND ut.test_types_fk != 1;
6329
 
6330
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
6331
          FROM unit_tests ut,
6332
               release_content rc
6333
         WHERE ut.pv_id = rc.pv_id
6334
           AND rc.rtag_id = rtagid
6335
           AND ut.test_types_fk = 7;
6336
 
6337
 
6338
         -- Count the number of unique branches in the packages in this release.
6339
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
6340
--           FROM (
6341
--                SELECT pv_id,
6342
--                       regexp_substr(str, '[^,]+', 1, level) branch,
6343
--                       level lv,
6344
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
6345
--                  FROM (
6346
--                       SELECT pm.pv_id,
6347
--                              ','||pm.branch_list str
6348
--                         FROM package_metrics pm,
6349
--                              release_content rc
6350
--                        WHERE pm.pv_id = rc.pv_id
6351
--                          AND rc.rtag_id = rtagid
6352
--                       )
6353
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
6354
--                )
6355
--          WHERE lv != lg;
6356
 
6357
         UPDATE release_metrics rm
6358
            SET rm.total_packages = lv_totalpackages,
6359
                rm.autobuilt = lv_autobuilt,
6360
                rm.lines_of_code = lv_linesofcode,
6361
                rm.unit_tested = lv_unittested,
6362
                rm.autotested = lv_autotested,
6363
--                rm.branches = lv_numOfbranches,
6364
                rm.last_build_time = lv_lastbuildtime
6365
          WHERE rtag_id = rtagid;
6366
 
6367
         IF (SQL%ROWCOUNT = 0)
6368
         THEN
6369
            INSERT INTO release_metrics
6370
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6371
                         autotested, last_build_time
6372
                        )
6373
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6374
                         lv_autotested, lv_lastbuildtime
6375
                        );
6376
         END IF;
6377
--         IF (SQL%ROWCOUNT = 0)
6378
--         THEN
6379
--            INSERT INTO release_metrics
6380
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6381
--                         autotested, branches, last_build_time
6382
--                        )
6383
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6384
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
6385
--                        );
6386
--         END IF;
6387
--      ELSE
6388
--         raise_application_error (-20000, 'RtagId must be supplied.');
6389
      END IF;
6390
   END;
6391
/*-------------------------------------------------------------------------------------------------------*/
6392
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
6393
   IS
6394
      vcstypeid    NUMBER;
6395
      vcstag       VARCHAR2(32);
6396
      label        VARCHAR2(60);
6397
      srcpath      VARCHAR2(2000);
6398
      vcstypeid_cc NUMBER;
6399
      vcstypeid_uc NUMBER;
6400
   BEGIN
6401
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
6402
      -- what the primary key value is for the ClearCase VCS entry.
6403
      BEGIN
6404
         SELECT vt.vcs_type_id
6405
         INTO vcstypeid_cc
6406
         FROM VCS_TYPE vt
6407
         WHERE vt.tag = 'CC';
6408
         EXCEPTION
6409
            WHEN NO_DATA_FOUND THEN
6410
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
6411
      END;
6412
 
6413
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
6414
      -- what the primary key value is for the Uncontrolled VCS entry.
6415
      BEGIN
6416
         SELECT vt.vcs_type_id
6417
         INTO vcstypeid_uc
6418
         FROM VCS_TYPE vt
6419
         WHERE vt.tag = 'UC';
6420
         EXCEPTION
6421
            WHEN NO_DATA_FOUND THEN
6422
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
6423
      END;
6424
 
6425
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
6426
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
6427
      BEGIN
6428
         SELECT pv.pkg_label, pv.src_path,
6429
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
6430
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
6431
                 ELSE pv.vcs_type_id END) AS vcs_type_id
6432
         INTO label, srcpath, vcstypeid
6433
         FROM PACKAGE_VERSIONS pv
6434
         WHERE pv.pv_id = pvid;
6435
         EXCEPTION
6436
            WHEN NO_DATA_FOUND THEN
6437
               raise_application_error (-20000, 'Package Version Not Found!');
6438
      END;
6439
 
6440
      -- Get the VCS TAG for the VCS_TYPE_ID.
6441
      BEGIN
6442
         SELECT vt.tag
6443
         INTO vcstag
6444
         FROM VCS_TYPE vt
6445
         WHERE vt.vcs_type_id = vcstypeid;
6446
         EXCEPTION
6447
            WHEN NO_DATA_FOUND THEN
6448
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
6449
      END;
6450
 
6451
      -- Return value depending upon which VCS Tag is being used.
6452
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
6453
      CASE vcstag
6454
         WHEN 'CC' THEN
6455
            RETURN vcstag || '::' || srcpath || '::' || label;
6456
         WHEN 'SVN' THEN
6457
            RETURN vcstag || '::' || srcpath;
6458
         ELSE
6459
            RETURN vcstag || '::';
6460
      END CASE;
6461
 
6462
   END;
6463
/*-------------------------------------------------------------------------------------------------------*/
6464
 
6465
END pk_rmapi_test;
6466
/
6467
--------------------------------------------------------
6468
--  DDL for Package Body PK_LICENCING
6469
--------------------------------------------------------
6470
 
6471
  CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS
6472
 
6473
/*
6474
------------------------------
6475
||  Last Modified:  G.Huddy
6476
||  Modified Date:  19/Aug/2008
6477
||  Body Version:   1.0
6478
------------------------------
6479
*/
6480
 
6481
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6482
   BEGIN
6483
      IF IS_LICENCED(PvId, licenceId) = 0 THEN
6484
         -- Add entry to licencing table
6485
         INSERT INTO licencing (pv_id, licence)
6486
         VALUES (PvId, licenceId);
6487
 
6488
         -- log action
6489
         -- TODO
6490
      END IF;
6491
 
6492
   END;
6493
 
6494
/*-------------------------------------------------------------------------------------------------------*/
6495
 
6496
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6497
   BEGIN
6498
      IF NOT IS_LICENCED(PvId, licenceId) = 0 THEN
6499
         -- Delete entry from licencing table
6500
         DELETE FROM licencing
6501
         WHERE pv_id = PvId
6502
         AND licence = licenceId;
6503
 
6504
         -- log action
6505
         -- TODO
6506
      END IF;
6507
   END;
6508
 
6509
/*-------------------------------------------------------------------------------------------------------*/
6510
 
6511
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) IS
6512
 
6513
      CURSOR licencing_cur
6514
      IS
6515
         SELECT *
6516
         FROM licencing
6517
         WHERE pv_id = fromPvId;
6518
 
6519
      licencing_rec licencing_cur%ROWTYPE;
6520
 
6521
   BEGIN
6522
      -- For each licence association that the Last PV_ID had, create a similar
6523
      -- arrangement for the new PV_ID
6524
      -- NOTE that any additional licencing associations the new PV_ID has that the old one
6525
      -- does not have, are retained. The assumption is that the user has made those and so we do not
6526
      -- have any right to destroy them without asking them.
6527
      OPEN licencing_cur;
6528
 
6529
      FETCH licencing_cur
6530
      INTO licencing_rec;
6531
 
6532
      WHILE licencing_cur%FOUND
6533
      LOOP
6534
         ADD_LICENCE ( toPvId, licencing_rec.licence, UserId );
6535
 
6536
         FETCH licencing_cur
6537
         INTO licencing_rec;
6538
      END LOOP;
6539
   END;
6540
 
6541
/*-------------------------------------------------------------------------------------------------------*/
6542
 
6543
   FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER IS
6544
      found NUMBER;
6545
   BEGIN
6546
 
6547
      SELECT COUNT(*) INTO found
6548
      FROM licencing
6549
      WHERE pv_id = PvId
6550
      AND licence = LicenceId;
6551
 
6552
      RETURN found;
6553
   END;
6554
 
6555
/*-------------------------------------------------------------------------------------------------------*/
6556
 
6557
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) IS
6558
 
6559
      CURSOR licencing_cur
6560
      IS
6561
         SELECT *
6562
         FROM licencing
6563
         WHERE pv_id = PvId;
6564
 
6565
      licencing_rec licencing_cur%ROWTYPE;
6566
   BEGIN
6567
      -- For each licence association that the PV_ID had, remove it
6568
      OPEN licencing_cur;
6569
 
6570
      FETCH licencing_cur
6571
      INTO licencing_rec;
6572
 
6573
      WHILE licencing_cur%FOUND
6574
      LOOP
6575
         REMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );
6576
 
6577
         FETCH licencing_cur
6578
         INTO licencing_rec;
6579
      END LOOP;
6580
   END;
6581
 
6582
/*-------------------------------------------------------------------------------------------------------*/
6583
END PK_LICENCING;
6584
/
6585
--------------------------------------------------------
6586
--  DDL for Package Body RM_ISSUES
6587
--------------------------------------------------------
6588
 
6589
  CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS
6590
 
6591
-- Private Implementation -----------------------------------------------------
6592
 
6593
 
6594
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6595
	AS
6596
 
6597
	BEGIN
6598
		-- start boundary case
6599
		IF ( XXstart < XX ) THEN
6600
			RETURN 1;
6601
 
6602
		ELSIF ( XXstart = XX ) THEN
6603
 
6604
			-- need to consider YY
6605
			IF ( YYstart < YY ) THEN
6606
				RETURN 1;
6607
 
6608
			ELSIF ( YYstart = YY ) THEN
6609
 
6610
					-- need to consider ZZ
6611
					IF ( ZZstart <= ZZ ) THEN
6612
						RETURN 1;
6613
 
6614
					ELSE
6615
						RETURN 0;
6616
					END IF;
6617
 
6618
			ELSE
6619
				RETURN 0;
6620
			END IF;
6621
		ELSE
6622
			RETURN 0;
6623
		END IF;
6624
	EXCEPTION
6625
		WHEN OTHERS THEN
6626
			RETURN -1;
6627
	END;
6628
 
6629
 
6630
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6631
	AS
6632
 
6633
	BEGIN
6634
		-- end boundary case
6635
		IF ( XX < XXend ) THEN
6636
			RETURN 1;
6637
 
6638
		ELSIF ( XX = XXend ) THEN
6639
 
6640
			-- need to consider YY
6641
			IF ( YY < YYend ) THEN
6642
				RETURN 1;
6643
 
6644
			ELSIF ( YY = YYend ) THEN
6645
 
6646
					-- need to consider ZZ
6647
					IF ( ZZ <= ZZend ) THEN
6648
						RETURN 1;
6649
 
6650
					ELSE
6651
						RETURN 0;
6652
					END IF;
6653
			ELSE
6654
 
6655
				RETURN 0;
6656
			END IF;
6657
		ELSE
6658
			RETURN 0;
6659
		END IF;
6660
	EXCEPTION
6661
		WHEN OTHERS THEN
6662
			RETURN -1;
6663
	END;
6664
 
6665
	/*
6666
	-	version format:		XX.YY.ZZ.abc
6667
	*/
6668
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER
6669
	AS
6670
		XXstart		NUMBER	:=	0;
6671
		XXend		NUMBER	:=	0;
6672
		XX			NUMBER	:=	0;
6673
		YYstart		NUMBER	:=	0;
6674
		YYend		NUMBER	:=	0;
6675
		YY			NUMBER	:=	0;
6676
		ZZstart		NUMBER	:=	0;
6677
		ZZend		NUMBER	:=	0;
6678
		ZZ			NUMBER	:=	0;
6679
		first_dot	NUMBER	:=	0;
6680
		second_dot	NUMBER	:=	0;
6681
		third_dot	NUMBER	:=	0;
6682
 
6683
		ProjExtstart	VARCHAR2(10);
6684
		ProjExtend		VARCHAR2(10);
6685
		ProjExt			VARCHAR2(10);
6686
 
6687
	BEGIN
6688
		-- strip the version number
6689
		first_dot :=  INSTR(version_start, '.', 1, 1);
6690
		second_dot :=  INSTR(version_start, '.', 1, 2);
6691
		third_dot :=  INSTR(version_start, '.', 1, 3);
6692
 
6693
		XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );
6694
		YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6695
		ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6696
		ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );
6697
 
6698
		first_dot :=  INSTR(version_end, '.', 1, 1);
6699
		second_dot :=  INSTR(version_end, '.', 1, 2);
6700
		third_dot :=  INSTR(version_end, '.', 1, 3);
6701
 
6702
		XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );
6703
		YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6704
		ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6705
		ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );
6706
 
6707
		first_dot :=  INSTR(version, '.', 1, 1);
6708
		second_dot :=  INSTR(version, '.', 1, 2);
6709
		third_dot :=  INSTR(version, '.', 1, 3);
6710
 
6711
		XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );
6712
		YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6713
		ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6714
		ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );
6715
 
6716
		-- only include versions if all project extensions are the same
6717
		IF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THEN
6718
 
6719
			IF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THEN
6720
				RETURN 1;
6721
			ELSE
6722
				RETURN 0;
6723
			END IF;
6724
		ELSE
6725
			RETURN 0;
6726
		END IF;
6727
 
6728
	EXCEPTION
6729
		WHEN OTHERS THEN
6730
			RETURN -1;
6731
	END;
6732
 
6733
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER
6734
	AS
6735
	    pkg_id NUMBER;
6736
	BEGIN
6737
		SELECT
6738
			p.PKG_ID
6739
		INTO
6740
			pkg_id
6741
		FROM
6742
			PACKAGES p
6743
		WHERE
6744
			p.PKG_NAME = pkgName;
6745
 
6746
		RETURN pkg_id;
6747
	EXCEPTION
6748
	    WHEN OTHERS THEN
6749
			dbms_output.put_line('GetPkgId exception: ' || SQLERRM );
6750
			RETURN -1;
6751
	END;
6752
 
6753
 
6754
-- Public Implementation ------------------------------------------------------
6755
 
6756
	/*
6757
	-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep
6758
	--
6759
	-- INPUT PARAMETERS:
6760
	--
6761
	--		pkg_name  	-  	The name of the top level package to get issues for
6762
	--		version_start	-	The start version for the comparison
6763
	--		version_end	-	The end version for the comparison
6764
	*/
6765
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6766
	AS
6767
		pkgId	NUMBER;
6768
	BEGIN
6769
		-- get pkg_id of the input package:
6770
		pkgId := GetPkgId( pkg_name );
6771
 
6772
		OPEN vCursor FOR
6773
		SELECT
6774
			  pv.PKG_ID,
6775
			  pv.PKG_VERSION,
6776
			  pv.PV_ID,
6777
			  i_pkg.ISS_ID,
6778
			  ( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,
6779
			  pd.DPKG_ID,
6780
			  ( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,
6781
			  pd.DPV_ID,
6782
			  i_dpkg.ISS_ID AS ISSUE_ID
6783
		FROM
6784
			 PACKAGE_VERSIONS pv
6785
							  LEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_ID
6786
							  LEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_ID
6787
							  LEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_ID
6788
		WHERE
6789
   			 pv.PKG_ID = pkgId
6790
		AND
6791
			VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1
6792
		AND
6793
			 ( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )
6794
		ORDER BY
6795
			 pv.PKG_ID,
6796
			 pv.PV_ID,
6797
			 pd.DPKG_ID,
6798
			 pd.DPV_ID;
6799
	EXCEPTION
6800
		WHEN OTHERS THEN
6801
			dbms_output.put_line('AllIssues exception: ' || SQLERRM );
6802
	END;
6803
 
6804
 
6805
	-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok
6806
 
6807
	/*
6808
	-- Proc: LoadIssuesTable
6809
	--
6810
	-- Populates Package_Issues table with details of issues from all dependent packages.
6811
	-- This will be for all package versions of the input pkg_name between the
6812
	-- version_start and version_end.
6813
	--
6814
	-- INPUT PARAMETERS:
6815
	--
6816
	--		pkg_name  	-  	The name of the top level package to get issues for
6817
	--		version_start	-	The start version for the comparison
6818
	--		version_end	-	The end version for the comparison
6819
	*/
6820
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6821
	AS
6822
		pkgId	NUMBER;
6823
 
6824
		CURSOR pack_vers_cur IS
6825
			SELECT
6826
				pv.PV_ID,
6827
				pv.PKG_VERSION,
6828
				pv.PKG_ID,
6829
				p.PKG_NAME
6830
			FROM
6831
				PACKAGE_VERSIONS pv
6832
					JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6833
			WHERE
6834
   				 pv.PKG_ID = pkgId
6835
			AND
6836
				VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;
6837
 
6838
	BEGIN
6839
		DELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6840
 
6841
		-- get the pkg_id we are finding issues for
6842
		pkgId := GetPkgId( pkg_name );
6843
 
6844
		-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.
6845
		FOR pack_ver_rec IN  pack_vers_cur
6846
		LOOP
6847
			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 );
6848
			COMMIT;
6849
		END LOOP;
6850
 
6851
		-- The output cursor - shows the individual versions of the top level package then were reported on
6852
		OPEN vCursor FOR
6853
		SELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6854
/*removed
6855
		SELECT
6856
			PKG_VERSION
6857
		FROM
6858
			RELEASE_MANAGER.RM_PACKAGE_ISSUES;
6859
*/
6860
 
6861
 
6862
	EXCEPTION
6863
		WHEN OTHERS THEN
6864
			dbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );
6865
	END;
6866
 
6867
 
6868
	/*
6869
	-- Proc: InsertIssuesForDepends
6870
	--
6871
	-- Used by LoadIssuesTable to recursively find issues for all dependent packages
6872
	--
6873
	-- INPUT PARAMETERS:
6874
	--
6875
	--		pvID  		-  	The package version id of the package to get issues for
6876
	--		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)
6877
	--		top_pkgName -  	The package name of the top level package
6878
	--		top_pvID  	-  	The package version id of the top level package
6879
	--		top_pkgVer  -  	The package version description of the top level package
6880
	*/
6881
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )
6882
	AS
6883
		pkgId		NUMBER;
6884
		issCnt		NUMBER := 0;
6885
		pkgCheck	NUMBER := 0;
6886
		depCheck	NUMBER := 0;
6887
 
6888
		dpkgName	VARCHAR(50);
6889
		dpkgVersion	VARCHAR(50);
6890
 
6891
		CURSOR dep_packs_cur IS
6892
			SELECT
6893
				DPV_ID
6894
			FROM
6895
				PACKAGE_DEPENDENCIES
6896
			WHERE
6897
				PV_ID = pvID;
6898
 
6899
	BEGIN
6900
 
6901
		-- check to see if the package has been processed previously
6902
		SELECT
6903
			COUNT(*)
6904
		INTO
6905
			pkgCheck
6906
		FROM
6907
			RM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6908
		WHERE
6909
			DPV_ID = pvID;
6910
 
6911
		dbms_output.put_line('pkgCheck: ' || pkgCheck );
6912
 
6913
		-- Package not already processed (no cyclic dependency) - process it
6914
		IF ( pkgCheck = 0 ) THEN
6915
 
6916
			-- check to see if this package version has any issues assigned to it
6917
			SELECT
6918
				COUNT(*)
6919
			INTO
6920
				issCnt
6921
			FROM
6922
				CQ_ISSUES i
6923
			WHERE
6924
				i.PV_ID = pvID;
6925
 
6926
			dbms_output.put_line('issCnt: ' || issCnt );
6927
 
6928
			-- Always enter a marker row into the table even if there are no issues for the package.
6929
			-- This allows us to pick up any cyclic dependencies.
6930
			IF ( issCnt > 0 ) THEN
6931
				-- get issues and insert into RM_PACKAGE_ISSUES
6932
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6933
 
6934
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6935
					SELECT DISTINCT
6936
						top_pkgID		AS PKG_ID,
6937
						top_pkgName		AS PKG_NAME,
6938
						top_pvID		AS PV_ID,
6939
						top_pkgVer		AS PKG_VERSION,
6940
						pv.PV_ID		AS DPV_ID,
6941
						p.PKG_NAME		AS DPKG_NAME,
6942
						pv.PKG_VERSION	AS DPKG_VERSION,
6943
						ci.ISS_DB,
6944
						ci.ISS_ID
6945
					FROM
6946
						PACKAGE_VERSIONS pv
6947
							JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6948
							JOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_ID
6949
					WHERE
6950
						pv.PV_ID = pvID;
6951
 
6952
			ELSE
6953
				-- get the dpkg details - there will always be a row returned here
6954
				SELECT
6955
					p.PKG_NAME
6956
				INTO
6957
					dpkgName
6958
				FROM
6959
					PACKAGE_VERSIONS pv
6960
						JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6961
				WHERE
6962
	   				 pv.PV_ID = pvID;
6963
 
6964
				SELECT
6965
					pv.PKG_VERSION
6966
				INTO
6967
					dpkgVersion
6968
				FROM
6969
					PACKAGE_VERSIONS pv
6970
				WHERE
6971
	   				 pv.PV_ID = pvID;
6972
 
6973
				-- enter a marker row
6974
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6975
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6976
				VALUES (
6977
					top_pkgID,
6978
					top_pkgName,
6979
					top_pvID,
6980
					top_pkgVer,
6981
					pvID,
6982
					dpkgName,
6983
					dpkgVersion,
6984
					NULL,
6985
					NULL );
6986
 
6987
			END IF;
6988
 
6989
			-- If this package version has dependencies then recurse
6990
			SELECT
6991
				COUNT(*)
6992
			INTO
6993
				depCheck
6994
			FROM
6995
				PACKAGE_DEPENDENCIES
6996
			WHERE
6997
				PV_ID = pvID;
6998
 
6999
			IF ( depCheck > 0 ) THEN
7000
				-- get dependencies and call this function recursively for each one
7001
				FOR dep_rec IN  dep_packs_cur
7002
				LOOP
7003
					InsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );
7004
				END LOOP;
7005
 
7006
			END IF;
7007
 
7008
		END IF;
7009
 
7010
	/*EXCEPTION
7011
		WHEN OTHERS THEN
7012
			no exception handling required
7013
	*/
7014
	END;
7015
 
7016
END Rm_Issues;
7017
/
7018
--------------------------------------------------------
7019
--  DDL for Package Body PK_RELEASE_TEST
7020
--------------------------------------------------------
7021
 
7022
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE_TEST" IS
7023
 
7024
 
7025
/*
7026
------------------------------
7027
||  Last Modified:  S.Vukovic
7028
||  Modified Date:  12/Sep/2005
7029
||  Body Version:   3.0
7030
------------------------------
7031
*/
7032
 
7033
 
7034
/*-------------------------------------------------------------------------------------------------------*/
7035
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
7036
 
7037
RtagId NUMBER;
7038
ParentRtagId NUMBER;
7039
RecCount NUMBER := 0;
7040
 
7041
 
7042
BEGIN
7043
	/*--------------- Business Rules Here -------------------*/
7044
	-- Check for missing parameters
7045
	IF (sReleaseName IS NULL) OR (nUserId IS NULL)
7046
	THEN
7047
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
7048
 
7049
	END IF;
7050
 
7051
 
7052
	-- Check for duplicate Release Names
7053
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
7054
	  FROM RELEASE_TAGS rt
7055
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
7056
	   AND rt.PROJ_ID = nProjId;
7057
 
7058
	IF (RecCount > 0) THEN
7059
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7060
	END IF;
7061
	/*-------------------------------------------------------*/
7062
 
7063
 
7064
	-- Get rtag_id
7065
	SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
7066
 
7067
 
7068
 
7069
	-- Get Parent RtagId
7070
	ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
7071
 
7072
 
7073
	-- Create new release
7074
	INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID, 
7075
							   OFFICIAL, REBUILD_ENV, REBUILD_STAMP, 
7076
							   PARENT_RTAG_ID, PROJ_ID )
7077
	VALUES ( RtagId, 
7078
			 sReleaseName, 
7079
			 sReleaseComments,
7080
			 ORA_SYSDATE,
7081
			 nUserId,
7082
			 'N',
7083
			 'N',
7084
			 0,
7085
			 ParentRtagId,
7086
			 nProjId );
7087
 
7088
	-- Update display Order
7089
	UPDATE_DISPLAY_ORDER ( nProjId );
7090
 
7091
	/* Log Project Action */
7092
	Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
7093
 
7094
 
7095
	-- Import Release Contents
7096
	IF (NOT nSourceRtagId IS NULL) THEN
7097
		Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
7098
 
7099
	END IF;
7100
 
7101
 
7102
 
7103
END;
7104
/*-------------------------------------------------------------------------------------------------------*/
7105
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
7106
 
7107
 
7108
BEGIN
7109
 
7110
 
7111
	/*--------------- Business Rules Here -------------------*/
7112
	/*-------------------------------------------------------*/
7113
 
7114
	UPDATE RELEASE_TAGS urt SET
7115
	urt.DISPLAY_ORDER = (
7116
						SELECT qry.REC_NUM
7117
						  FROM (	
7118
								SELECT rel.*, ROWNUM AS REC_NUM
7119
								  FROM (
7120
 
7121
								  		SELECT rt.RTAG_ID, 
7122
											   rt.DISPLAY_ORDER,
7123
										       DECODE( rt.PARENT_RTAG_ID, 
7124
											   		   rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
7125
										  FROM RELEASE_TAGS rt
7126
										 WHERE rt.PROJ_ID = nProjId 
7127
 
7128
								  		) rel
7129
								START WITH rel.PARENT_RTAG_ID = 0
7130
								CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID   
7131
								ORDER SIBLINGS BY rel.DISPLAY_ORDER
7132
								) qry
7133
					      WHERE qry.RTAG_ID = urt.RTAG_ID 								
7134
						)
7135
	WHERE urt.PROJ_ID = nProjId;
7136
 
7137
END;
7138
/*-------------------------------------------------------------------------------------------------------*/
7139
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
7140
 
7141
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();						 
7142
	SeqNum NUMBER;
7143
 
7144
BEGIN
7145
 
7146
 
7147
	/*--------------- Business Rules Here -------------------*/
7148
	/*-------------------------------------------------------*/
7149
 
7150
	nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
7151
 
7152
	-- Set start sequence number
7153
	SeqNum := 1;
7154
 
7155
	FOR i IN 1..nIdCollector.COUNT
7156
	LOOP
7157
 
7158
		-- Update new display order
7159
		UPDATE RELEASE_TAGS rt SET
7160
			rt.DISPLAY_ORDER = SeqNum
7161
		 WHERE rt.PROJ_ID = nProjId
7162
		   AND rt.RTAG_ID = nIdCollector(i);
7163
 
7164
		SeqNum := SeqNum + 1;
7165
 
7166
	END LOOP;
7167
 
7168
END;
7169
/*-------------------------------------------------------------------------------------------------------*/
7170
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
7171
 
7172
RecCount NUMBER := 0;
7173
ProjId NUMBER;
7174
 
7175
BEGIN
7176
 
7177
 
7178
	/*--------------- Business Rules Here -------------------*/
7179
	-- Check for missing parameters
7180
	IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
7181
	THEN
7182
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
7183
 
7184
	END IF;
7185
 
7186
 
7187
	-- Check for duplicate Release Names
7188
	SELECT rt.PROJ_ID INTO ProjId
7189
	  FROM RELEASE_TAGS rt
7190
	 WHERE rt.RTAG_ID = nRtagId;
7191
 
7192
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
7193
	  FROM RELEASE_TAGS rt
7194
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
7195
	   AND rt.RTAG_ID != nRtagId
7196
	   AND rt.PROJ_ID = ProjId;
7197
 
7198
 
7199
	IF (RecCount > 0) THEN
7200
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7201
	END IF;
7202
	/*-------------------------------------------------------*/
7203
 
7204
 
7205
 
7206
	-- Update release details
7207
	UPDATE RELEASE_TAGS rt SET
7208
	rt.RTAG_NAME = sReleaseName,
7209
	rt.DESCRIPTION = sReleaseComments,
7210
	rt.PARENT_RTAG_ID = nParentRtagId,
7211
	rt.ASSOC_MASS_REF = nMASSRtagId,
7212
	rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch
7213
	WHERE rt.RTAG_ID = nRtagId; 
7214
 
7215
	-- Update display Order
7216
	UPDATE_DISPLAY_ORDER ( ProjId );
7217
 
7218
	/* Log Project Action */
7219
	Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
7220
 
7221
 
7222
 
7223
 
7224
END;
7225
/*-------------------------------------------------------------------------------------------------------*/
7226
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7227
 
7228
	RecCount NUMBER := 0;
7229
	sReleaseId VARCHAR2(4000);
7230
	ProjId NUMBER;
7231
 
7232
BEGIN
7233
	/*--------------- Business Rules Here -------------------*/
7234
	IF (nRtagId IS NULL) 
7235
	THEN
7236
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7237
	END IF;
7238
 
7239
 
7240
 
7241
	-- Check for any kids
7242
	SELECT COUNT( rt.RTAG_ID ) INTO RecCount
7243
	  FROM RELEASE_TAGS rt
7244
	 WHERE rt.PARENT_RTAG_ID = nRtagId
7245
	   AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
7246
 
7247
	IF (RecCount > 0) THEN
7248
		RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
7249
	END IF; 
7250
	/*-------------------------------------------------------*/
7251
 
7252
	-- Clear the release contents
7253
	Clean_Release_Contents ( nRtagId, nUserId );
7254
 
7255
	/* Log Project Action */
7256
	SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
7257
	  FROM RELEASE_TAGS rt
7258
	 WHERE rt.RTAG_ID = nRtagId;
7259
 
7260
	Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
7261
 
7262
 
7263
	-- Remove Release
7264
	DELETE 
7265
	  FROM RELEASE_TAGS rt
7266
	 WHERE rt.RTAG_ID = nRtagId;
7267
 
7268
 
7269
 
7270
END;
7271
/*-------------------------------------------------------------------------------------------------------*/
7272
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
7273
 
7274
	sSourceLocation VARCHAR2(4000);
7275
	sTargetLocation VARCHAR2(4000);
7276
	ProjId NUMBER;
7277
	cReleaseMode CHAR(1);
7278
 
7279
 
7280
BEGIN
7281
	/*--------------- Business Rules Here -------------------*/
7282
	IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
7283
	THEN
7284
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
7285
	END IF;
7286
 
7287
	IF (nSourceRtagId = nTargetRtagId) THEN
7288
		RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
7289
	END IF;
7290
 
7291
 
7292
	-- Check if Target release is in OPEN mode
7293
	SELECT rt.OFFICIAL  INTO  cReleaseMode
7294
	  FROM RELEASE_TAGS rt
7295
	 WHERE rt.RTAG_ID = nTargetRtagId;
7296
 
7297
	IF (cReleaseMode != 'N') THEN
7298
		RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
7299
	END IF;	 
7300
 
7301
	/*-------------------------------------------------------*/
7302
 
7303
	-- Clean target contents
7304
	Clean_Release_Contents ( nTargetRtagId, nUserId );
7305
 
7306
 
7307
	-- Import Released Area Contents
7308
	INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE ) 
7309
	SELECT nTargetRtagId AS RTAG_ID, 
7310
		   rc.PV_ID, 
7311
		   rc.BASE_VIEW_ID, 
7312
		   rc.INSERT_STAMP, 
7313
		   rc.INSERTOR_ID, 
7314
		   rc.PKG_STATE
7315
	  FROM RELEASE_CONTENT rc
7316
	 WHERE rc.RTAG_ID = nSourceRtagId;
7317
 
7318
 
7319
	-- Import Ignore Warning states
7320
	INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
7321
	SELECT nTargetRtagId AS RTAG_ID,
7322
	       igw.PV_ID,
7323
	       igw.DPV_ID
7324
	  FROM IGNORE_WARNINGS igw
7325
	 WHERE igw.rtag_id = nSourceRtagId;
7326
 
7327
 
7328
	/* Log Project Action */
7329
	-- Get Source Location
7330
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
7331
	  FROM RELEASE_TAGS rt,
7332
	  	   PROJECTS pr
7333
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7334
	   AND rt.RTAG_ID = nSourceRtagId;
7335
 
7336
	-- Get Target Location
7337
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
7338
	  FROM RELEASE_TAGS rt,
7339
	  	   PROJECTS pr
7340
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7341
	   AND rt.RTAG_ID = nTargetRtagId;	   
7342
 
7343
	-- Get project id   
7344
	SELECT rt.PROJ_ID  INTO  ProjId
7345
	  FROM RELEASE_TAGS rt
7346
	 WHERE rt.RTAG_ID = nTargetRtagId;   
7347
 
7348
	Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );	
7349
 
7350
 
7351
END;
7352
/*-------------------------------------------------------------------------------------------------------*/
7353
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7354
 
7355
	RecCount NUMBER;
7356
 
7357
BEGIN
7358
	/*--------------- Business Rules Here -------------------*/
7359
	IF (nRtagId IS NULL) 
7360
	THEN
7361
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7362
	END IF;
7363
 
7364
 
7365
	-- Check if other release references this release
7366
	SELECT COUNT( rl.RTAG_ID ) INTO RecCount
7367
	  FROM RELEASE_LINKS rl
7368
	 WHERE rl.REF_RTAG_ID = nRtagId;
7369
 
7370
	IF (RecCount > 0) THEN
7371
		RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
7372
	END IF; 	
7373
	/*-------------------------------------------------------*/
7374
 
7375
	-- Delete Release links
7376
	DELETE 
7377
	  FROM RELEASE_LINKS rl
7378
	 WHERE rl.RTAG_ID = nRtagId;
7379
 
7380
	-- Delete ignore warning
7381
	DELETE 
7382
	  FROM IGNORE_WARNINGS iw
7383
	 WHERE iw.RTAG_ID = nRtagId;
7384
 
7385
 
7386
	-- Delete Build Order cached calculations	  
7387
	DELETE
7388
	  FROM BUILD_ORDER bo
7389
	 WHERE bo.RTAG_ID = nRtagId;
7390
 
7391
 
7392
	-- Delete Notification History
7393
	DELETE
7394
	  FROM NOTIFICATION_HISTORY nh
7395
	 WHERE nh.RTAG_ID = nRtagId;
7396
 
7397
 
7398
	-- Delete Released Area Contents
7399
	DELETE
7400
	  FROM RELEASE_CONTENT rc
7401
	 WHERE rc.RTAG_ID = nRtagId;
7402
 
7403
 
7404
	-- Delete Work In Progress Area Contents
7405
	DELETE
7406
	  FROM WORK_IN_PROGRESS wip
7407
	 WHERE wip.RTAG_ID = nRtagId;
7408
 
7409
 
7410
	-- Delete Pending Area Contents
7411
	DELETE 
7412
	  FROM PLANNED pl
7413
	 WHERE pl.RTAG_ID = nRtagId;
7414
 
7415
 
7416
END;
7417
/*-------------------------------------------------------------------------------------------------------*/
7418
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
7419
 
7420
	nSourceParentRtagId NUMBER;
7421
 
7422
BEGIN
7423
	/*--------------- Business Rules Here -------------------*/
7424
	IF (nRtagId IS NULL) OR (cIsBranch IS NULL)  
7425
	THEN
7426
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
7427
	END IF;
7428
	/*-------------------------------------------------------*/
7429
 
7430
 
7431
	IF ( nSourceRtagId IS NULL ) THEN
7432
		-- Create new on main branch
7433
		RETURN nRtagId;
7434
 
7435
	ELSE
7436
		-- Create from source rtag_id
7437
 
7438
		-- Find parent of Source RtagId
7439
		SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
7440
		  FROM RELEASE_TAGS rt
7441
		 WHERE rt.RTAG_ID = nSourceRtagId;
7442
 
7443
		IF (UPPER(cIsBranch) = 'Y') THEN
7444
			RETURN nSourceRtagId;
7445
		ELSE
7446
			IF (nSourceRtagId = nSourceParentRtagId) THEN
7447
				RETURN nRtagId;
7448
			ELSE
7449
				RETURN nSourceParentRtagId;
7450
			END IF;
7451
		END IF;	
7452
 
7453
 
7454
	END IF;
7455
 
7456
 
7457
END;
7458
/*-------------------------------------------------------------------------------------------------------*/
7459
 
7460
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
7461
-- 							 sNextVersion OUT VARCHAR2,
7462
-- 							 nNextLifeCycle OUT NUMBER,
7463
-- 							 nParentRtagId OUT NUMBER,
7464
-- 							 nProjId IN NUMBER ) IS
7465
-- 							
7466
-- SourceBranchCount NUMBER;
7467
-- ProjRootVersion VARCHAR2(4000);
7468
-- LastLifeCycle NUMBER;
7469
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
7470
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
7471
-- 
7472
-- SourceProjId NUMBER; 
7473
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
7474
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
7475
-- 
7476
-- BEGIN
7477
-- 	/*--------------- Business Rules Here -------------------*/
7478
-- 	/*-------------------------------------------------------*/
7479
-- 	
7480
-- 	   
7481
-- 	BEGIN
7482
-- 		-- Get Project root version
7483
-- 		SELECT rt.RTAG_VERSION INTO ProjRootVersion
7484
-- 		  FROM RELEASE_TAGS rt
7485
-- 		 WHERE rt.PROJ_ID = nProjId
7486
-- 		   AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
7487
-- 	   
7488
-- 		EXCEPTION
7489
-- 		WHEN NO_DATA_FOUND THEN
7490
-- 		ProjRootVersion := ROOT_VERSION_NOT_FOUND;
7491
-- 	END;		   
7492
-- 	
7493
-- 	
7494
-- 	
7495
-- 	 
7496
-- 	BEGIN
7497
-- 		-- Get info for source rtagid
7498
-- 		SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
7499
-- 		  FROM RELEASE_TAGS rt
7500
-- 		 WHERE rt.RTAG_ID = nSourceRtagId;	
7501
-- 	   
7502
-- 		EXCEPTION
7503
-- 		WHEN NO_DATA_FOUND THEN
7504
-- 		SourceProjId := NULL;
7505
-- 		SourceVersion := NULL;
7506
-- 		SourceLifeCycle := NULL;
7507
-- 	END;	  
7508
-- 	
7509
-- 	
7510
-- 	IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
7511
-- 	
7512
-- 		/* Blank Release Required  OR  Release imported from other project */
7513
-- 		
7514
-- 		IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
7515
-- 			/* No Releases found in the project, hence calculate next version available.  */
7516
-- 			
7517
-- 			-- Set parent rtag
7518
-- 			nParentRtagId := SET_PARENT_AS_YOURSELF;
7519
-- 			
7520
-- 			
7521
-- 			BEGIN
7522
-- 				-- Get Next Available Global Root Version 
7523
-- 				SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
7524
-- 				  FROM RELEASE_TAGS rt
7525
-- 				 WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
7526
-- 				
7527
-- 				-- Set Next Rtag Version
7528
-- 				sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
7529
-- 				
7530
-- 				-- Restart Lifecycle
7531
-- 				nNextLifeCycle := 0;
7532
-- 				
7533
-- 				
7534
-- 				EXCEPTION
7535
-- 				WHEN NO_DATA_FOUND THEN
7536
-- 				-- Release Manager has no releases, hence start from 1
7537
-- 				sNextVersion := '1';
7538
-- 				nNextLifeCycle := 0;
7539
-- 				
7540
-- 			END;
7541
-- 			
7542
-- 			
7543
-- 					
7544
-- 		ELSE
7545
-- 			/* Releases found in this project. */
7546
-- 							   
7547
-- 			SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
7548
-- 			  FROM (
7549
-- 					SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
7550
-- 					  FROM RELEASE_TAGS rt
7551
-- 					 WHERE rt.PROJ_ID = nProjId
7552
-- 					   AND rt.RTAG_VERSION = ProjRootVersion 
7553
-- 					 ORDER BY rt.RTAG_LIFE_CYCLE DESC
7554
-- 			  		) qry
7555
-- 			 WHERE ROWNUM = 1;		
7556
-- 
7557
-- 			
7558
-- 			-- Set same Rtag Version
7559
-- 			sNextVersion := ProjRootVersion;
7560
-- 			
7561
-- 			-- Increase Lifecycle
7562
-- 			nNextLifeCycle := LastLifeCycle + 1;
7563
-- 		
7564
-- 		END IF;
7565
-- 				
7566
-- 	
7567
-- 		
7568
-- 	ELSE
7569
-- 		/* Create Release From other release within this project */
7570
-- 		
7571
-- 		-- Set parent id
7572
-- 		nParentRtagId := nSourceRtagId;
7573
-- 		
7574
-- 		
7575
-- 		-- Get number of source branches
7576
-- 		SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
7577
-- 		  FROM RELEASE_TAGS rt
7578
-- 		 WHERE rt.PROJ_ID = nProjId
7579
-- 		   AND rt.PARENT_RTAG_ID = nSourceRtagId;		   
7580
-- 		   
7581
-- 		   
7582
-- 		IF SourceBranchCount = 0 THEN
7583
-- 			/* Release is Head (i.e. Tip on its branch ) */
7584
-- 			
7585
-- 			-- Set Next Rtag Version
7586
-- 			sNextVersion := SourceVersion;
7587
-- 			
7588
-- 			-- Increase Lifecycle
7589
-- 			nNextLifeCycle := SourceLifeCycle + 1;
7590
-- 			
7591
-- 			
7592
-- 		ELSIF SourceBranchCount = 1 THEN
7593
-- 			/* Release IS NOT Head, but can be branched */
7594
-- 			
7595
-- 			-- Set Next Rtag Version
7596
-- 			sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
7597
-- 			
7598
-- 			-- Reset Lifecycle to 1
7599
-- 			nNextLifeCycle := 1;
7600
-- 			
7601
-- 			
7602
-- 		ELSE	
7603
-- 			-- Limit of two branches is reached
7604
-- 			RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');		
7605
-- 			
7606
-- 		END IF;	
7607
-- 			
7608
-- 			
7609
-- 		
7610
-- 		
7611
-- 		
7612
-- 	
7613
-- 	END IF;
7614
-- 	
7615
-- 		
7616
-- END;
7617
 
7618
/*-------------------------------------------------------------------------------------------------------*/
7619
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
7620
 
7621
	IsBaseView CHAR(1);
7622
 
7623
BEGIN
7624
 
7625
	-- Check if the view is BASE VIEW
7626
	SELECT vi.BASE_VIEW INTO IsBaseView
7627
	  FROM VIEWS vi
7628
	 WHERE vi.VIEW_ID = ViewId;
7629
 
7630
	IF (IsBaseView = 'Y') THEN 
7631
		-- Get Base view content
7632
		OPEN RecordSet FOR
7633
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7634
			   pv.pv_id, 
7635
			   pkg.pkg_name, 
7636
			   pv.pkg_version, 
7637
			   pv.dlocked, 
7638
			   pv.pv_description,
7639
			   pv.BUILD_TYPE
7640
		  FROM release_content rel,
7641
		       packages pkg,
7642
		       package_versions pv
7643
		 WHERE pv.pkg_id = pkg.pkg_id
7644
		   AND rel.pv_id = pv.pv_id
7645
		   AND rel.BASE_VIEW_ID = ViewId
7646
		   AND rel.RTAG_ID = RtagId
7647
		 ORDER BY UPPER(pkg.PKG_NAME);
7648
 
7649
	ELSE	 
7650
 
7651
	 	-- Get non base view content
7652
		OPEN RecordSet FOR
7653
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7654
			   pv.pv_id, 
7655
			   pkg.pkg_name, 
7656
			   pv.pkg_version, 
7657
			   pv.dlocked, 
7658
			   pv.pv_description,
7659
			   pv.BUILD_TYPE
7660
		  FROM release_content rel,
7661
		       packages pkg,
7662
		       package_versions pv,
7663
			   VIEW_DEF vd
7664
		 WHERE pv.pkg_id = pkg.pkg_id
7665
		   AND rel.pv_id = pv.pv_id
7666
		   AND vd.VIEW_ID = ViewId
7667
		   AND vd.PKG_ID = pv.PKG_ID
7668
		   AND rel.RTAG_ID = RtagId
7669
		 ORDER BY UPPER(pkg.PKG_NAME);		 
7670
 
7671
	END IF;	 	 
7672
 
7673
 
7674
 
7675
 
7676
END;
7677
/*-------------------------------------------------------------------------------------------------------*/
7678
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7679
 
7680
	ReleaseLocation VARCHAR2(4000);
7681
	sPkgVersion VARCHAR2(4000);
7682
	nPkgId NUMBER;
7683
	sVExt VARCHAR2(4000);
7684
	IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
7685
 
7686
	-- Find package for replacement
7687
	CURSOR curReplacePkg IS
7688
    SELECT pv.PV_ID
7689
	  FROM RELEASE_CONTENT rc,
7690
	  	   PACKAGE_VERSIONS pv
7691
	 WHERE rc.PV_ID = pv.PV_ID
7692
	   AND rc.RTAG_ID = RtagId
7693
	   AND pv.PKG_ID = nPkgId
7694
	   AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
7695
    recReplacePkg curReplacePkg%ROWTYPE;
7696
 
7697
BEGIN
7698
 
7699
	-- Get is_patch, pkg_id and v_ext
7700
	SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
7701
	  FROM PACKAGE_VERSIONS pv
7702
	 WHERE pv.PV_ID = newPvId;
7703
 
7704
 
7705
	-- Never put patch in relesed area
7706
	IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
7707
 
7708
		-- Try to get a package to be replaced with this new one.
7709
		-- Use unique constraint of PKG_ID and V_EXT
7710
		OPEN curReplacePkg;
7711
	    FETCH curReplacePkg INTO recReplacePkg;
7712
 
7713
	    IF curReplacePkg%FOUND THEN
7714
			-- Replace package
7715
			REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
7716
 
7717
		ELSE
7718
			-- Add new package
7719
			INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
7720
			VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
7721
 
7722
 
7723
		    /* LOG ACTION */
7724
			SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7725
			  FROM PROJECTS proj,
7726
			  	   RELEASE_TAGS rt
7727
			 WHERE rt.PROJ_ID = proj.PROJ_ID
7728
			   AND rt.RTAG_ID = RtagId;
7729
 
7730
			SELECT pv.PKG_VERSION INTO sPkgVersion
7731
			  FROM PACKAGE_VERSIONS pv
7732
			 WHERE pv.PV_ID = newPvId;
7733
 
7734
			Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7735
 
7736
 
7737
		END IF;
7738
 
7739
		CLOSE curReplacePkg;
7740
 
7741
	END IF;
7742
 
7743
END;
7744
/*-------------------------------------------------------------------------------------------------------*/
7745
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7746
 
7747
	ReleaseLocation VARCHAR2(4000);
7748
	sPkgVersion VARCHAR2(4000);
7749
 
7750
BEGIN
7751
 
7752
	-- Replace Package
7753
    UPDATE RELEASE_CONTENT
7754
       SET pv_id = newPvId,
7755
           insert_stamp = Ora_Sysdate,
7756
           insertor_id = UserId
7757
     WHERE rtag_id = RtagId
7758
       AND pv_id = oldPvId;
7759
 
7760
 
7761
    /* LOG ACTION */
7762
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7763
	  FROM PROJECTS proj,
7764
	  	   RELEASE_TAGS rt
7765
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7766
	   AND rt.RTAG_ID = RtagId;
7767
 
7768
	SELECT pv.PKG_VERSION INTO sPkgVersion
7769
	  FROM PACKAGE_VERSIONS pv
7770
	 WHERE pv.PV_ID = newPvId;
7771
 
7772
	Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
7773
	Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7774
 
7775
END;
7776
/*-------------------------------------------------------------------------------------------------------*/
7777
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7778
	ReleaseLocation VARCHAR2(4000);
7779
 
7780
BEGIN
7781
 
7782
 
7783
	-- Delete old package
7784
	DELETE
7785
	  FROM RELEASE_CONTENT rc
7786
	 WHERE rc.PV_ID = PvId
7787
	   AND rc.RTAG_ID = RtagId;
7788
 
7789
 
7790
	/* LOG ACTION */
7791
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7792
	  FROM PROJECTS proj,
7793
	       RELEASE_TAGS rt
7794
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7795
	   AND rt.RTAG_ID = RtagId;
7796
 
7797
	Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7798
 
7799
 
7800
END;
7801
/*-------------------------------------------------------------------------------------------------------*/
7802
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7803
	ReleaseLocation VARCHAR2(4000);
7804
 
7805
	CURSOR curMatchingPackage IS
7806
    SELECT mpv.PV_ID
7807
	  FROM RELEASE_CONTENT rc,
7808
	  	   PACKAGE_VERSIONS mpv,
7809
		   PACKAGE_VERSIONS pv
7810
	 WHERE rc.PV_ID = mpv.PV_ID
7811
	   AND rc.RTAG_ID = RtagId
7812
	   AND pv.PV_ID = PvId
7813
	   AND pv.PKG_ID = mpv.PKG_ID
7814
	   AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
7815
    recMatchingPackage curMatchingPackage%ROWTYPE;
7816
 
7817
BEGIN
7818
 
7819
	OPEN curMatchingPackage;
7820
    FETCH curMatchingPackage INTO recMatchingPackage;
7821
 
7822
    IF curMatchingPackage%FOUND THEN
7823
		-- Delete old package
7824
		DELETE
7825
		  FROM RELEASE_CONTENT rc
7826
		 WHERE rc.PV_ID = recMatchingPackage.PV_ID
7827
		   AND rc.RTAG_ID = RtagId;
7828
 
7829
 
7830
		/* LOG ACTION */
7831
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7832
		  FROM PROJECTS proj,
7833
		  	   RELEASE_TAGS rt
7834
		 WHERE rt.PROJ_ID = proj.PROJ_ID
7835
		   AND rt.RTAG_ID = RtagId;
7836
 
7837
		Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7838
 
7839
	END IF;
7840
 
7841
 
7842
	CLOSE curMatchingPackage;
7843
 
7844
 
7845
 
7846
 
7847
END;
7848
/*-------------------------------------------------------------------------------------------------------*/
7849
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
7850
 
7851
	ReturnValue NUMBER;
7852
 
7853
BEGIN
7854
	SELECT rc.BASE_VIEW_ID INTO ReturnValue
7855
	  FROM RELEASE_CONTENT rc
7856
	 WHERE rc.RTAG_ID = RtagId
7857
	   AND rc.PV_ID = PvId;
7858
 
7859
	RETURN ReturnValue;
7860
END;
7861
/*-------------------------------------------------------------------------------------------------------*/
7862
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
7863
 
7864
BEGIN
7865
	-- Reset Ignore warnings up-the-tree
7866
	RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
7867
 
7868
	-- Refresh Package states
7869
	TOUCH_RELEASE ( RtagId );
7870
 
7871
END;
7872
/*-------------------------------------------------------------------------------------------------------*/
7873
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
7874
	CURSOR curReleases IS
7875
    SELECT rc.RTAG_ID
7876
	  FROM RELEASE_CONTENT rc
7877
	 WHERE rc.PV_ID = PvId;
7878
    recReleases curReleases%ROWTYPE;
7879
 
7880
BEGIN
7881
 
7882
	OPEN curReleases;
7883
    FETCH curReleases INTO recReleases;
7884
 
7885
	WHILE curReleases%FOUND
7886
	LOOP
7887
 
7888
		RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
7889
 
7890
		FETCH curReleases INTO recReleases;
7891
	END LOOP;
7892
 
7893
	CLOSE curReleases;	
7894
 
7895
END;
7896
/*-------------------------------------------------------------------------------------------------------*/
7897
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
7898
 
7899
BEGIN
7900
 
7901
	UPDATE RELEASE_CONTENT rc SET
7902
	rc.BASE_VIEW_ID = NewViewId
7903
	WHERE rc.PV_ID = PvId
7904
	  AND rc.RTAG_ID = RtagId;
7905
 
7906
END;
7907
/*-------------------------------------------------------------------------------------------------------*/
7908
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
7909
 
7910
	RowCount NUMBER;
7911
 
7912
 
7913
	CURSOR curPackageClash IS
7914
	SELECT pkg.PKG_NAME,
7915
		   er.*
7916
	  FROM (
7917
 
7918
	  		/* Get existing referenced packages */
7919
			SELECT pv.PKG_ID,
7920
			       pv.V_EXT
7921
			  FROM RELEASE_LINKS rl,
7922
			  	   RELEASE_CONTENT rc,
7923
			  	   PACKAGE_VERSIONS pv
7924
			 WHERE rl.RTAG_ID = nRtagId
7925
			   AND rl.REF_RTAG_ID = rc.RTAG_ID
7926
			   AND rc.PV_ID = pv.PV_ID
7927
 
7928
	  	    ) er,
7929
			(
7930
 
7931
			/* Get current reference packages */
7932
			SELECT pv.PKG_ID,
7933
			       pv.V_EXT
7934
			  FROM RELEASE_CONTENT rc,
7935
			  	   PACKAGE_VERSIONS pv
7936
			 WHERE rc.RTAG_ID = nRefRtagId
7937
			   AND rc.PV_ID = pv.PV_ID    
7938
 
7939
			) cr,
7940
			PACKAGES PKG
7941
	 WHERE er.PKG_ID = cr.PKG_ID
7942
	   AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7943
	   AND er.PKG_ID = pkg.PKG_ID;
7944
 
7945
	recPackageClash curPackageClash%ROWTYPE;	   
7946
 
7947
BEGIN
7948
	/*--------------- Business Rules Here -------------------*/
7949
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7950
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7951
	END IF;
7952
 
7953
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7954
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7955
	END IF;
7956
	/*-------------------------------------------------------*/
7957
	ProblemString := NULL;
7958
 
7959
 
7960
	-- Check if release already has references
7961
	SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
7962
	  FROM RELEASE_LINKS rl
7963
	 WHERE rl.RTAG_ID = nRtagId;	
7964
 
7965
 
7966
	IF RowCount > 0 THEN
7967
		-- Found existing references
7968
 
7969
		-- Make sure there is no package clashes
7970
		OPEN curPackageClash;
7971
	    FETCH curPackageClash INTO recPackageClash;
7972
 
7973
		IF curPackageClash%FOUND THEN
7974
 
7975
			ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
7976
 
7977
			WHILE curPackageClash%FOUND
7978
			LOOP
7979
				EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;	-- Do not allow variable overflow 
7980
 
7981
				ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
7982
 
7983
				FETCH curPackageClash INTO recPackageClash;
7984
			END LOOP;
7985
 
7986
		END IF;
7987
 
7988
		CLOSE curPackageClash;
7989
 
7990
 
7991
	ELSE
7992
		-- No references found, hence reference a release
7993
 
7994
 
7995
		-- Remove exising package from this release to be referenced
7996
		REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);	
7997
 
7998
 
7999
		-- Add new linked packages to release
8000
		INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
8001
		SELECT nRtagId,
8002
			   rc.PV_ID,
8003
			   rc.BASE_VIEW_ID, 
8004
			   rc.INSERT_STAMP, 
8005
			   rc.INSERTOR_ID, 
8006
			   rc.PKG_STATE
8007
		  FROM RELEASE_CONTENT rc
8008
		 WHERE rc.RTAG_ID = nRefRtagId;
8009
 
8010
 
8011
 
8012
		-- Copy ignore warnings for referenced packages
8013
		INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
8014
		SELECT nRtagId, 
8015
			   iw.PV_ID, 
8016
			   iw.DPV_ID, 
8017
			   iw.IS_PATCH_IGNORE
8018
		  FROM IGNORE_WARNINGS iw,
8019
		  	   RELEASE_CONTENT rc
8020
		 WHERE iw.RTAG_ID = rc.RTAG_ID 
8021
		   AND iw.PV_ID = rc.PV_ID
8022
		   AND rc.RTAG_ID = nRefRtagId;	 
8023
 
8024
 
8025
 
8026
		-- Reference release 
8027
		INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
8028
		VALUES ( nRtagId, nRefRtagId );		 
8029
 
8030
 
8031
		-- Refresh Package states
8032
		TOUCH_RELEASE ( nRtagId );
8033
 
8034
	END IF;	 
8035
 
8036
 
8037
END;
8038
/*-------------------------------------------------------------------------------------------------------*/
8039
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
8040
 
8041
 
8042
BEGIN
8043
	/*--------------- Business Rules Here -------------------*/
8044
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
8045
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
8046
	END IF;
8047
 
8048
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
8049
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
8050
	END IF;
8051
 
8052
	/*-------------------------------------------------------*/
8053
 
8054
 
8055
	-- Remove ignore warnings for those packages who use referenced packages
8056
	DELETE FROM IGNORE_WARNINGS iw
8057
	 WHERE iw.RTAG_ID = nRtagId
8058
	   AND iw.DPV_ID IN (
8059
	   						SELECT dep.DPV_ID
8060
							  FROM (
8061
 
8062
									/* Get referenced packages */
8063
									SELECT pv.PKG_ID,
8064
									       pv.V_EXT
8065
									  FROM RELEASE_CONTENT rc,
8066
									  	   PACKAGE_VERSIONS pv
8067
									 WHERE rc.RTAG_ID = nRefRtagId
8068
									   AND rc.PV_ID = pv.PV_ID    
8069
 
8070
									) cr,
8071
									(
8072
 
8073
									/* Get all dependencies for current release */
8074
									SELECT DISTINCT 
8075
										   pv.PKG_ID,
8076
										   pv.V_EXT,
8077
										   dep.DPV_ID
8078
									  FROM RELEASE_CONTENT rc,
8079
										   PACKAGE_DEPENDENCIES dep,
8080
										   PACKAGE_VERSIONS pv
8081
									 WHERE rc.RTAG_ID = nRtagId
8082
									   AND rc.PV_ID = dep.PV_ID		
8083
									   AND dep.PV_ID = pv.PV_ID	   
8084
 
8085
									) dep
8086
							 WHERE dep.PKG_ID = cr.PKG_ID
8087
							   AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8088
	   					);  
8089
 
8090
 
8091
 
8092
 
8093
	-- Remove ignore warnings for those package which are going to be replaced with the reference
8094
	DELETE FROM IGNORE_WARNINGS iw
8095
	 WHERE iw.RTAG_ID = nRtagId
8096
	   AND iw.PV_ID IN (
8097
						SELECT pv.PV_ID
8098
						  FROM (
8099
 
8100
								/* Get referenced packages */
8101
								SELECT pv.PKG_ID,
8102
								       pv.V_EXT
8103
								  FROM RELEASE_CONTENT rc,
8104
								  	   PACKAGE_VERSIONS pv
8105
								 WHERE rc.RTAG_ID = nRefRtagId
8106
								   AND rc.PV_ID = pv.PV_ID    
8107
 
8108
								) cr,
8109
								RELEASE_CONTENT rc,
8110
								PACKAGE_VERSIONS pv
8111
						 WHERE pv.PKG_ID = cr.PKG_ID
8112
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8113
						   AND rc.RTAG_ID = nRtagId
8114
						   AND rc.PV_ID = pv.PV_ID
8115
						);			
8116
 
8117
 
8118
 
8119
 
8120
 
8121
	-- Remove matching packages from release
8122
	DELETE FROM RELEASE_CONTENT rc
8123
	 WHERE rc.RTAG_ID = nRtagId
8124
	   AND rc.PV_ID IN (
8125
						SELECT pv.PV_ID
8126
						  FROM (
8127
 
8128
								/* Get referenced packages */
8129
								SELECT pv.PKG_ID,
8130
								       pv.V_EXT
8131
								  FROM RELEASE_CONTENT rc,
8132
								  	   PACKAGE_VERSIONS pv
8133
								 WHERE rc.RTAG_ID = nRefRtagId
8134
								   AND rc.PV_ID = pv.PV_ID    
8135
 
8136
								) cr,
8137
								RELEASE_CONTENT rc,
8138
								PACKAGE_VERSIONS pv
8139
						 WHERE pv.PKG_ID = cr.PKG_ID
8140
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8141
						   AND rc.RTAG_ID = nRtagId
8142
						   AND rc.PV_ID = pv.PV_ID
8143
						);	
8144
 
8145
 
8146
 
8147
 
8148
 
8149
	-- Remove Reference release 
8150
	DELETE 
8151
	  FROM RELEASE_LINKS rl
8152
	 WHERE rl.RTAG_ID = nRtagId
8153
	   AND rl.REF_RTAG_ID = nRefRtagId;
8154
 
8155
 
8156
	-- Refresh Package states
8157
	TOUCH_RELEASE ( nRtagId );
8158
 
8159
 
8160
END;
8161
/*-------------------------------------------------------------------------------------------------------*/
8162
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
8163
 
8164
	cReleaseMode CHAR(1);
8165
	cPvMode CHAR(1);
8166
 
8167
BEGIN
8168
 
8169
	-- Get Release Mode
8170
	SELECT rt.OFFICIAL INTO cReleaseMode
8171
	  FROM RELEASE_TAGS rt
8172
	 WHERE rt.RTAG_ID = RtagId;
8173
 
8174
 
8175
	-- Get Package Mode
8176
	SELECT pv.DLOCKED INTO cPvMode
8177
	  FROM PACKAGE_VERSIONS pv
8178
	 WHERE pv.PV_ID = PvId;	 
8179
 
8180
	-- Only check if package is locked 
8181
	IF (cPvMode = 'Y') THEN
8182
 
8183
		IF (cReleaseMode != 'N') AND (Permission != 'Y')
8184
		THEN
8185
			RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
8186
 
8187
		END IF;
8188
 
8189
	END IF;	
8190
 
8191
 
8192
END;
8193
/*-------------------------------------------------------------------------------------------------------*/
8194
END PK_RELEASE_TEST;
8195
/
8196
--------------------------------------------------------
8197
--  DDL for Package Body PK_APP_UTILS
8198
--------------------------------------------------------
8199
 
8200
  CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS
8201
 
8202
/*
8203
------------------------------
8204
||  Last Modified:  S.Vukovic
8205
||  Modified Date:  26/Apr/2005
8206
||  Body Version:   1.0
8207
------------------------------
8208
*/
8209
 
8210
 
8211
/*-------------------------------------------------------------------------------------------------------*/
8212
PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur)   IS
8213
 
8214
 
8215
BEGIN
8216
 
8217
 
8218
	IF (NOT RtagId IS NULL) THEN
8219
		-- Case with RTAG_ID present
8220
		OPEN records FOR
8221
		SELECT rt.PROJ_ID,
8222
			   rt.RTAG_ID AS RTAG_ID
8223
		  FROM RELEASE_TAGS rt
8224
		 WHERE rt.RTAG_ID = TO_NUMBER(RtagId);
8225
 
8226
	ELSIF (NOT ProjId IS NULL) THEN
8227
		-- Case with PROJ_ID present
8228
		OPEN records FOR
8229
		SELECT TO_NUMBER(ProjId) AS PROJ_ID,
8230
			   -1 AS RTAG_ID
8231
		  FROM DUAL;
8232
 
8233
	ELSE
8234
		-- Case with none present
8235
		OPEN records FOR
8236
		SELECT -1 AS PROJ_ID,
8237
			   -1 AS RTAG_ID
8238
		  FROM DUAL;
8239
 
8240
	END IF;
8241
 
8242
 
8243
 
8244
 
8245
   	--RETURN records;
8246
 
8247
END;
8248
/*-------------------------------------------------------------------------------------------------------*/
8249
END PK_APP_UTILS;
8250
/
8251
--------------------------------------------------------
8252
--  DDL for Package Body PK_RELEASE
8253
--------------------------------------------------------
8254
 
8255
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS
8256
 
8257
/*-------------------------------------------------------------------------------------------------------*/
8258
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
8259
 
8260
RtagId NUMBER;
8261
ParentRtagId NUMBER;
8262
RecCount NUMBER := 0;
8263
VtreeId NUMBER;
8264
 
8265
BEGIN
8266
   /*--------------- Business Rules Here -------------------*/
8267
   -- Check for missing parameters
8268
   IF (sReleaseName IS NULL) OR (nUserId IS NULL)
8269
   THEN
8270
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
8271
 
8272
   END IF;
8273
 
8274
 
8275
   -- Check for duplicate Release Names
8276
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8277
     FROM RELEASE_TAGS rt
8278
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8279
      AND rt.PROJ_ID = nProjId;
8280
 
8281
   IF (RecCount > 0) THEN
8282
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8283
   END IF;
8284
   /*-------------------------------------------------------*/
8285
 
8286
 
8287
   -- Get rtag_id
8288
   SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
8289
 
8290
   SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;
8291
 
8292
 
8293
 
8294
   -- Get Parent RtagId
8295
   ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
8296
 
8297
   -- If the parent RTAG is NOT in this project then we cannot use it.
8298
   -- We must re-assign the parent to be the new release's RTAG_ID instead
8299
   -- else it will not show up in the projects release tree (DEVI-55480)
8300
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8301
     FROM RELEASE_TAGS rt
8302
    WHERE rt.RTAG_ID = ParentRtagId
8303
      AND rt.PROJ_ID = nProjId;
8304
 
8305
   IF (RecCount = 0) THEN
8306
     ParentRtagId := RtagId;
8307
   END IF;
8308
 
8309
   -- Create new release
8310
   INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,
8311
                        OFFICIAL, REBUILD_ENV, REBUILD_STAMP,
8312
                        PARENT_RTAG_ID, PROJ_ID, VTREE_ID )
8313
   VALUES ( RtagId,
8314
          sReleaseName,
8315
          sReleaseComments,
8316
          ORA_SYSDATE,
8317
          nUserId,
8318
          'N',
8319
          'N',
8320
          0,
8321
          ParentRtagId,
8322
          nProjId,
8323
          VtreeId );
8324
 
8325
   -- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)
8326
   IF (NOT nSourceRtagId IS NULL)
8327
   THEN
8328
      UPDATE RELEASE_TAGS rtd
8329
      SET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)
8330
      WHERE rtd.RTAG_ID = RtagId;
8331
   END IF;
8332
 
8333
   -- Update display Order
8334
   UPDATE_DISPLAY_ORDER ( nProjId );
8335
 
8336
   /* Log Project Action */
8337
   Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
8338
 
8339
 
8340
   -- Import Release Contents
8341
   IF (NOT nSourceRtagId IS NULL) THEN
8342
      Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
8343
   END IF;
8344
 
8345
END;
8346
/*-------------------------------------------------------------------------------------------------------*/
8347
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
8348
 
8349
 
8350
BEGIN
8351
 
8352
 
8353
   /*--------------- Business Rules Here -------------------*/
8354
   /*-------------------------------------------------------*/
8355
 
8356
   UPDATE RELEASE_TAGS urt SET
8357
   urt.DISPLAY_ORDER = (
8358
                  SELECT qry.REC_NUM
8359
                    FROM (
8360
                        SELECT rel.*, ROWNUM AS REC_NUM
8361
                          FROM (
8362
 
8363
                                SELECT rt.RTAG_ID,
8364
                                    rt.DISPLAY_ORDER,
8365
                                     DECODE( rt.PARENT_RTAG_ID,
8366
                                             rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
8367
                                FROM RELEASE_TAGS rt
8368
                               WHERE rt.PROJ_ID = nProjId
8369
 
8370
                                ) rel
8371
                        START WITH rel.PARENT_RTAG_ID = 0
8372
                        CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID
8373
                        ORDER SIBLINGS BY rel.DISPLAY_ORDER
8374
                        ) qry
8375
                     WHERE qry.RTAG_ID = urt.RTAG_ID
8376
                  )
8377
   WHERE urt.PROJ_ID = nProjId;
8378
 
8379
END;
8380
/*-------------------------------------------------------------------------------------------------------*/
8381
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
8382
 
8383
   nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
8384
   SeqNum NUMBER;
8385
 
8386
BEGIN
8387
 
8388
 
8389
   /*--------------- Business Rules Here -------------------*/
8390
   /*-------------------------------------------------------*/
8391
 
8392
   nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
8393
 
8394
   -- Set start sequence number
8395
   SeqNum := 1;
8396
 
8397
   FOR i IN 1..nIdCollector.COUNT
8398
   LOOP
8399
 
8400
      -- Update new display order
8401
      UPDATE RELEASE_TAGS rt SET
8402
         rt.DISPLAY_ORDER = SeqNum
8403
       WHERE rt.PROJ_ID = nProjId
8404
         AND rt.RTAG_ID = nIdCollector(i);
8405
 
8406
      SeqNum := SeqNum + 1;
8407
 
8408
   END LOOP;
8409
 
8410
END;
8411
/*-------------------------------------------------------------------------------------------------------*/
8412
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
8413
 
8414
RecCount NUMBER := 0;
8415
ProjId NUMBER;
8416
 
8417
BEGIN
8418
 
8419
 
8420
   /*--------------- Business Rules Here -------------------*/
8421
   -- Check for missing parameters
8422
   IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
8423
   THEN
8424
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
8425
 
8426
   END IF;
8427
 
8428
 
8429
   -- Check for duplicate Release Names
8430
   SELECT rt.PROJ_ID INTO ProjId
8431
     FROM RELEASE_TAGS rt
8432
    WHERE rt.RTAG_ID = nRtagId;
8433
 
8434
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8435
     FROM RELEASE_TAGS rt
8436
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8437
      AND rt.RTAG_ID != nRtagId
8438
      AND rt.PROJ_ID = ProjId;
8439
 
8440
 
8441
   IF (RecCount > 0) THEN
8442
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8443
   END IF;
8444
   /*-------------------------------------------------------*/
8445
 
8446
 
8447
 
8448
   -- Update release details
8449
   UPDATE RELEASE_TAGS rt SET
8450
   rt.RTAG_NAME = sReleaseName,
8451
   rt.DESCRIPTION = sReleaseComments,
8452
   rt.PARENT_RTAG_ID = nParentRtagId,
8453
   rt.ASSOC_MASS_REF = nMASSRtagId,
8454
   rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,
8455
   rt.OWNER_EMAIL = sOwnerEmail,
8456
   rt.PRODUCT_STATE_USED = cState
8457
   WHERE rt.RTAG_ID = nRtagId;
8458
 
8459
   -- Update display Order
8460
   UPDATE_DISPLAY_ORDER ( ProjId );
8461
 
8462
   /* Log Project Action */
8463
   Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
8464
 
8465
 
8466
 
8467
 
8468
END;
8469
/*-------------------------------------------------------------------------------------------------------*/
8470
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8471
 
8472
   RecCount NUMBER := 0;
8473
   sReleaseId VARCHAR2(4000);
8474
   ProjId NUMBER;
8475
 
8476
BEGIN
8477
   /*--------------- Business Rules Here -------------------*/
8478
   IF (nRtagId IS NULL)
8479
   THEN
8480
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8481
   END IF;
8482
 
8483
 
8484
 
8485
   -- Check for any kids
8486
   SELECT COUNT( rt.RTAG_ID ) INTO RecCount
8487
     FROM RELEASE_TAGS rt
8488
    WHERE rt.PARENT_RTAG_ID = nRtagId
8489
      AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
8490
 
8491
   IF (RecCount > 0) THEN
8492
      RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
8493
   END IF;
8494
   /*-------------------------------------------------------*/
8495
 
8496
   -- Clear the release contents
8497
   Clean_Release_Contents ( nRtagId, nUserId );
8498
 
8499
   /* Log Project Action */
8500
   SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
8501
     FROM RELEASE_TAGS rt
8502
    WHERE rt.RTAG_ID = nRtagId;
8503
 
8504
   Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
8505
 
8506
 
8507
   -- Remove Release
8508
   DELETE
8509
     FROM RELEASE_TAGS rt
8510
    WHERE rt.RTAG_ID = nRtagId;
8511
 
8512
 
8513
 
8514
END;
8515
/*-------------------------------------------------------------------------------------------------------*/
8516
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
8517
 
8518
   sSourceLocation VARCHAR2(4000);
8519
   sTargetLocation VARCHAR2(4000);
8520
   ProjId NUMBER;
8521
   cReleaseMode CHAR(1);
8522
   RconId NUMBER;
8523
 
8524
   -- this cursor gets the source release daemon configurations, ensuring that the
8525
   -- first record will be the master daemon, and subsequent records will be the slaves.
8526
   CURSOR curSrcReleaseConfigs IS
8527
    SELECT daemon_hostname, gbe_id, gbe_buildfilter
8528
     FROM RELEASE_CONFIG rc
8529
    WHERE rc.RTAG_ID = nSourceRtagId
8530
    ORDER BY rc.daemon_mode;
8531
    recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;
8532
 
8533
    -- this cursor looks for target release daemons
8534
   CURSOR curTgtReleaseConfigs IS
8535
    SELECT rcon_id
8536
     FROM RELEASE_CONFIG rc
8537
    WHERE rc.RTAG_ID = nTargetRtagId;
8538
    recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;
8539
 
8540
    -- this cursor looks for target release daemon run level entries
8541
   CURSOR curTgtReleaseConfigRunLevel IS
8542
    SELECT current_run_level
8543
     FROM RUN_LEVEL rl
8544
    WHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;
8545
    recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;
8546
 
8547
BEGIN
8548
   /*--------------- Business Rules Here -------------------*/
8549
   IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
8550
   THEN
8551
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
8552
   END IF;
8553
 
8554
   IF (nSourceRtagId = nTargetRtagId) THEN
8555
      RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
8556
   END IF;
8557
 
8558
 
8559
   -- Check if Target release is in OPEN mode
8560
   SELECT rt.OFFICIAL  INTO  cReleaseMode
8561
     FROM RELEASE_TAGS rt
8562
    WHERE rt.RTAG_ID = nTargetRtagId;
8563
 
8564
   IF (cReleaseMode != 'N') THEN
8565
      RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
8566
   END IF;
8567
 
8568
   -- check that the target release's daemons are all paused before we allow an import operation
8569
   OPEN curTgtReleaseConfigs;
8570
   FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;
8571
 
8572
   WHILE curTgtReleaseConfigs%FOUND
8573
   LOOP
8574
      OPEN curTgtReleaseConfigRunLevel;
8575
      FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;
8576
      IF curTgtReleaseConfigRunLevel%FOUND THEN
8577
         IF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR
8578
            (recTgtReleaseConfigRunLevel.current_run_level <> 2) THEN
8579
            RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8580
         END IF;
8581
      ELSE
8582
         -- we don't know what the daemon run level is so err on the side of caution
8583
         RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8584
      END IF;
8585
      CLOSE curTgtReleaseConfigRunLevel;
8586
 
8587
      FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;
8588
   END LOOP;
8589
 
8590
   CLOSE curTgtReleaseConfigs;
8591
 
8592
 
8593
   /*-------------------------------------------------------*/
8594
 
8595
   -- Clean target contents
8596
   Clean_Release_Contents ( nTargetRtagId, nUserId );
8597
 
8598
 
8599
   -- Import Released Area Contents
8600
   INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )
8601
   SELECT nTargetRtagId AS RTAG_ID,
8602
         rc.PV_ID,
8603
         rc.BASE_VIEW_ID,
8604
         rc.INSERT_STAMP,
8605
         rc.INSERTOR_ID,
8606
         rc.PKG_STATE,
8607
         rc.PKG_ID,
8608
         rc.DEPRECATED_STATE
8609
     FROM RELEASE_CONTENT rc
8610
    WHERE rc.RTAG_ID = nSourceRtagId;
8611
 
8612
 
8613
   -- Import any Pegged Version settings from the source release
8614
   INSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )
8615
   SELECT nTargetRtagId AS RTAG_ID,
8616
          pegv.PV_ID
8617
     FROM PEGGED_VERSIONS pegv
8618
    WHERE pegv.RTAG_ID = nSourceRtagId;
8619
 
8620
   -- Import any Advisory Ripple settings from the source release
8621
   INSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )
8622
   SELECT nTargetRtagId AS RTAG_ID,
8623
          avr.PV_ID
8624
     FROM ADVISORY_RIPPLE avr
8625
    WHERE avr.RTAG_ID = nSourceRtagId;
8626
 
8627
 
8628
   --Import Release Configuration Information
8629
   OPEN curSrcReleaseConfigs;
8630
   FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8631
 
8632
   WHILE curSrcReleaseConfigs%FOUND
8633
   LOOP
8634
      -- add a daemon to the target release
8635
      PK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );
8636
 
8637
      FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8638
   END LOOP;
8639
 
8640
   CLOSE curSrcReleaseConfigs;
8641
 
8642
 
8643
 
8644
   -- Import Ignore Warning states
8645
   INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
8646
   SELECT nTargetRtagId AS RTAG_ID,
8647
          igw.PV_ID,
8648
          igw.DPV_ID
8649
     FROM IGNORE_WARNINGS igw
8650
    WHERE igw.rtag_id = nSourceRtagId;
8651
 
8652
 
8653
   /* Log Project Action */
8654
   -- Get Source Location
8655
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
8656
     FROM RELEASE_TAGS rt,
8657
           PROJECTS pr
8658
    WHERE rt.PROJ_ID = pr.PROJ_ID
8659
      AND rt.RTAG_ID = nSourceRtagId;
8660
 
8661
   -- Get Target Location
8662
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
8663
     FROM RELEASE_TAGS rt,
8664
           PROJECTS pr
8665
    WHERE rt.PROJ_ID = pr.PROJ_ID
8666
      AND rt.RTAG_ID = nTargetRtagId;
8667
 
8668
   -- Get project id
8669
   SELECT rt.PROJ_ID  INTO  ProjId
8670
     FROM RELEASE_TAGS rt
8671
    WHERE rt.RTAG_ID = nTargetRtagId;
8672
 
8673
   Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );
8674
END;
8675
 
8676
 
8677
 
8678
/*-------------------------------------------------------------------------------------------------------*/
8679
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8680
 
8681
   RecCount NUMBER;
8682
        rconIdList VARCHAR2(4000);
8683
 
8684
BEGIN
8685
   /*--------------- Business Rules Here -------------------*/
8686
   IF (nRtagId IS NULL)
8687
   THEN
8688
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8689
   END IF;
8690
 
8691
 
8692
   -- Check if other release references this release
8693
   SELECT COUNT( rl.RTAG_ID ) INTO RecCount
8694
     FROM RELEASE_LINKS rl
8695
    WHERE rl.REF_RTAG_ID = nRtagId;
8696
 
8697
   IF (RecCount > 0) THEN
8698
      RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
8699
   END IF;
8700
   /*-------------------------------------------------------*/
8701
 
8702
   -- Delete Release links
8703
   DELETE
8704
     FROM RELEASE_LINKS rl
8705
    WHERE rl.RTAG_ID = nRtagId;
8706
 
8707
   -- Delete ignore warning
8708
   DELETE
8709
     FROM IGNORE_WARNINGS iw
8710
    WHERE iw.RTAG_ID = nRtagId;
8711
 
8712
 
8713
   -- Delete Build Order cached calculations
8714
   DELETE
8715
     FROM BUILD_ORDER bo
8716
    WHERE bo.RTAG_ID = nRtagId;
8717
 
8718
 
8719
   -- Delete Notification History
8720
   DELETE
8721
     FROM NOTIFICATION_HISTORY nh
8722
    WHERE nh.RTAG_ID = nRtagId;
8723
 
8724
 
8725
   -- Delete Released Area Contents
8726
   DELETE
8727
     FROM RELEASE_CONTENT rc
8728
    WHERE rc.RTAG_ID = nRtagId;
8729
 
8730
 
8731
   -- Delete Work In Progress Area Contents
8732
   DELETE
8733
     FROM WORK_IN_PROGRESS wip
8734
    WHERE wip.RTAG_ID = nRtagId;
8735
 
8736
 
8737
   -- Delete Pending Area Contents
8738
   DELETE
8739
     FROM PLANNED pl
8740
    WHERE pl.RTAG_ID = nRtagId;
8741
 
8742
   -- Delete Deprecated Packages
8743
   DELETE
8744
     FROM DEPRECATED_PACKAGES dp
8745
    WHERE dp.RTAG_ID = nRtagId;
8746
 
8747
   -- Delete Project Action Log
8748
   DELETE
8749
     FROM PROJECT_ACTION_LOG pal
8750
    WHERE pal.RTAG_ID = nRtagId;
8751
 
8752
   -- Delete Do Not Ripple Contents
8753
   DELETE
8754
     FROM DO_NOT_RIPPLE dnr
8755
    WHERE dnr.RTAG_ID = nRtagId;
8756
 
8757
   -- Delete Dash Board Contents
8758
   DELETE
8759
     FROM DASH_BOARD db
8760
    WHERE db.RTAG_ID = nRtagId;
8761
 
8762
   -- Delete Advisory Ripple Contents
8763
   DELETE
8764
     FROM ADVISORY_RIPPLE adr
8765
    WHERE adr.RTAG_ID = nRtagId;
8766
 
8767
   -- Delete Archive Action Log
8768
   DELETE
8769
     FROM ARCHIVE_ACTION_LOG aal
8770
    WHERE aal.RTAG_ID = nRtagId;
8771
 
8772
   -- Delete Daemons For This Release
8773
   FOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )
8774
   LOOP
8775
      rconIdList := rconIdList || rcon.RCON_ID || ',';
8776
   END LOOP;
8777
 
8778
   pk_buildapi.DELETE_DAEMON(rconIdList);
8779
 
8780
   -- Delete Release Metrics Contents
8781
   DELETE
8782
     FROM RELEASE_METRICS rm
8783
    WHERE rm.RTAG_ID = nRtagId;
8784
 
8785
   -- Delete Release Configuration Contents
8786
   DELETE
8787
     FROM RELEASE_CONFIG rc
8788
    WHERE rc.RTAG_ID = nRtagId;
8789
 
8790
   -- Delete Pegged Version Contents
8791
   DELETE
8792
     FROM PEGGED_VERSIONS pegv
8793
    WHERE pegv.RTAG_ID = nRtagId;
8794
 
8795
END;
8796
/*-------------------------------------------------------------------------------------------------------*/
8797
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
8798
 
8799
   nSourceParentRtagId NUMBER;
8800
 
8801
BEGIN
8802
   /*--------------- Business Rules Here -------------------*/
8803
   IF (nRtagId IS NULL) OR (cIsBranch IS NULL)
8804
   THEN
8805
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
8806
   END IF;
8807
   /*-------------------------------------------------------*/
8808
 
8809
 
8810
   IF ( nSourceRtagId IS NULL ) THEN
8811
      -- Create new on main branch
8812
      RETURN nRtagId;
8813
 
8814
   ELSE
8815
      -- Create from source rtag_id
8816
 
8817
      -- Find parent of Source RtagId
8818
      SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
8819
        FROM RELEASE_TAGS rt
8820
       WHERE rt.RTAG_ID = nSourceRtagId;
8821
 
8822
      IF (UPPER(cIsBranch) = 'Y') THEN
8823
         RETURN nSourceRtagId;
8824
      ELSE
8825
         IF (nSourceRtagId = nSourceParentRtagId) THEN
8826
            RETURN nRtagId;
8827
         ELSE
8828
            RETURN nSourceParentRtagId;
8829
         END IF;
8830
      END IF;
8831
 
8832
 
8833
   END IF;
8834
 
8835
 
8836
END;
8837
/*-------------------------------------------------------------------------------------------------------*/
8838
 
8839
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
8840
--                       sNextVersion OUT VARCHAR2,
8841
--                       nNextLifeCycle OUT NUMBER,
8842
--                       nParentRtagId OUT NUMBER,
8843
--                       nProjId IN NUMBER ) IS
8844
--
8845
-- SourceBranchCount NUMBER;
8846
-- ProjRootVersion VARCHAR2(4000);
8847
-- LastLifeCycle NUMBER;
8848
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
8849
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
8850
--
8851
-- SourceProjId NUMBER;
8852
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
8853
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
8854
--
8855
-- BEGIN
8856
--    /*--------------- Business Rules Here -------------------*/
8857
--    /*-------------------------------------------------------*/
8858
--
8859
--
8860
--    BEGIN
8861
--       -- Get Project root version
8862
--       SELECT rt.RTAG_VERSION INTO ProjRootVersion
8863
--         FROM RELEASE_TAGS rt
8864
--        WHERE rt.PROJ_ID = nProjId
8865
--          AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
8866
--
8867
--       EXCEPTION
8868
--       WHEN NO_DATA_FOUND THEN
8869
--       ProjRootVersion := ROOT_VERSION_NOT_FOUND;
8870
--    END;
8871
--
8872
--
8873
--
8874
--
8875
--    BEGIN
8876
--       -- Get info for source rtagid
8877
--       SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
8878
--         FROM RELEASE_TAGS rt
8879
--        WHERE rt.RTAG_ID = nSourceRtagId;
8880
--
8881
--       EXCEPTION
8882
--       WHEN NO_DATA_FOUND THEN
8883
--       SourceProjId := NULL;
8884
--       SourceVersion := NULL;
8885
--       SourceLifeCycle := NULL;
8886
--    END;
8887
--
8888
--
8889
--    IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
8890
--
8891
--       /* Blank Release Required  OR  Release imported from other project */
8892
--
8893
--       IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
8894
--          /* No Releases found in the project, hence calculate next version available.  */
8895
--
8896
--          -- Set parent rtag
8897
--          nParentRtagId := SET_PARENT_AS_YOURSELF;
8898
--
8899
--
8900
--          BEGIN
8901
--             -- Get Next Available Global Root Version
8902
--             SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
8903
--               FROM RELEASE_TAGS rt
8904
--              WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
8905
--
8906
--             -- Set Next Rtag Version
8907
--             sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
8908
--
8909
--             -- Restart Lifecycle
8910
--             nNextLifeCycle := 0;
8911
--
8912
--
8913
--             EXCEPTION
8914
--             WHEN NO_DATA_FOUND THEN
8915
--             -- Release Manager has no releases, hence start from 1
8916
--             sNextVersion := '1';
8917
--             nNextLifeCycle := 0;
8918
--
8919
--          END;
8920
--
8921
--
8922
--
8923
--       ELSE
8924
--          /* Releases found in this project. */
8925
--
8926
--          SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
8927
--            FROM (
8928
--                SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
8929
--                  FROM RELEASE_TAGS rt
8930
--                 WHERE rt.PROJ_ID = nProjId
8931
--                   AND rt.RTAG_VERSION = ProjRootVersion
8932
--                 ORDER BY rt.RTAG_LIFE_CYCLE DESC
8933
--                  ) qry
8934
--           WHERE ROWNUM = 1;
8935
--
8936
--
8937
--          -- Set same Rtag Version
8938
--          sNextVersion := ProjRootVersion;
8939
--
8940
--          -- Increase Lifecycle
8941
--          nNextLifeCycle := LastLifeCycle + 1;
8942
--
8943
--       END IF;
8944
--
8945
--
8946
--
8947
--    ELSE
8948
--       /* Create Release From other release within this project */
8949
--
8950
--       -- Set parent id
8951
--       nParentRtagId := nSourceRtagId;
8952
--
8953
--
8954
--       -- Get number of source branches
8955
--       SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
8956
--         FROM RELEASE_TAGS rt
8957
--        WHERE rt.PROJ_ID = nProjId
8958
--          AND rt.PARENT_RTAG_ID = nSourceRtagId;
8959
--
8960
--
8961
--       IF SourceBranchCount = 0 THEN
8962
--          /* Release is Head (i.e. Tip on its branch ) */
8963
--
8964
--          -- Set Next Rtag Version
8965
--          sNextVersion := SourceVersion;
8966
--
8967
--          -- Increase Lifecycle
8968
--          nNextLifeCycle := SourceLifeCycle + 1;
8969
--
8970
--
8971
--       ELSIF SourceBranchCount = 1 THEN
8972
--          /* Release IS NOT Head, but can be branched */
8973
--
8974
--          -- Set Next Rtag Version
8975
--          sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
8976
--
8977
--          -- Reset Lifecycle to 1
8978
--          nNextLifeCycle := 1;
8979
--
8980
--
8981
--       ELSE
8982
--          -- Limit of two branches is reached
8983
--          RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');
8984
--
8985
--       END IF;
8986
--
8987
--
8988
--
8989
--
8990
--
8991
--
8992
--    END IF;
8993
--
8994
--
8995
-- END;
8996
 
8997
/*-------------------------------------------------------------------------------------------------------*/
8998
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
8999
 
9000
   IsBaseView CHAR(1);
9001
 
9002
BEGIN
9003
 
9004
   -- Check if the view is BASE VIEW
9005
   SELECT vi.BASE_VIEW INTO IsBaseView
9006
     FROM VIEWS vi
9007
    WHERE vi.VIEW_ID = ViewId;
9008
 
9009
   IF (IsBaseView = 'Y') THEN
9010
      -- Get Base view content
9011
      OPEN RecordSet FOR
9012
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
9013
            rel.deprecated_state,
9014
            pv.pv_id,
9015
            pkg.pkg_name,
9016
            pv.pkg_version,
9017
            pv.dlocked,
9018
            pv.pv_description,
9019
            pv.BUILD_TYPE
9020
        FROM release_content rel,
9021
             packages pkg,
9022
             package_versions pv
9023
       WHERE pv.pkg_id = pkg.pkg_id
9024
         AND rel.pv_id = pv.pv_id
9025
         AND rel.BASE_VIEW_ID = ViewId
9026
         AND rel.RTAG_ID = RtagId
9027
       ORDER BY UPPER(pkg.PKG_NAME);
9028
 
9029
   ELSE
9030
 
9031
       -- Get non base view content
9032
      OPEN RecordSet FOR
9033
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
9034
            rel.deprecated_state,
9035
            pv.pv_id,
9036
            pkg.pkg_name,
9037
            pv.pkg_version,
9038
            pv.dlocked,
9039
            pv.pv_description,
9040
            pv.BUILD_TYPE
9041
        FROM release_content rel,
9042
             packages pkg,
9043
             package_versions pv,
9044
            VIEW_DEF vd
9045
       WHERE pv.pkg_id = pkg.pkg_id
9046
         AND rel.pv_id = pv.pv_id
9047
         AND vd.VIEW_ID = ViewId
9048
         AND vd.PKG_ID = pv.PKG_ID
9049
         AND rel.RTAG_ID = RtagId
9050
       ORDER BY UPPER(pkg.PKG_NAME);
9051
 
9052
   END IF;
9053
 
9054
 
9055
 
9056
 
9057
END;
9058
/*-------------------------------------------------------------------------------------------------------*/
9059
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9060
 
9061
   ReleaseLocation VARCHAR2(4000);
9062
   sPkgVersion VARCHAR2(4000);
9063
   nPkgId NUMBER;
9064
   sVExt VARCHAR2(4000);
9065
   IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
9066
 
9067
   -- Find package for replacement
9068
   CURSOR curReplacePkg IS
9069
    SELECT pv.PV_ID
9070
     FROM RELEASE_CONTENT rc,
9071
           PACKAGE_VERSIONS pv
9072
    WHERE rc.PV_ID = pv.PV_ID
9073
      AND rc.RTAG_ID = RtagId
9074
      AND pv.PKG_ID = nPkgId
9075
      AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
9076
    recReplacePkg curReplacePkg%ROWTYPE;
9077
 
9078
BEGIN
9079
 
9080
   -- Get is_patch, pkg_id and v_ext
9081
   SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
9082
     FROM PACKAGE_VERSIONS pv
9083
    WHERE pv.PV_ID = newPvId;
9084
 
9085
 
9086
   -- Never put patch in relesed area
9087
   IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
9088
 
9089
      -- Try to get a package to be replaced with this new one.
9090
      -- Use unique constraint of PKG_ID and V_EXT
9091
      OPEN curReplacePkg;
9092
       FETCH curReplacePkg INTO recReplacePkg;
9093
 
9094
       IF curReplacePkg%FOUND THEN
9095
         -- Replace package
9096
         REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
9097
 
9098
      ELSE
9099
         -- Add new package
9100
         INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
9101
         VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
9102
 
9103
 
9104
          /* LOG ACTION */
9105
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9106
           FROM PROJECTS proj,
9107
                 RELEASE_TAGS rt
9108
          WHERE rt.PROJ_ID = proj.PROJ_ID
9109
            AND rt.RTAG_ID = RtagId;
9110
 
9111
         SELECT pv.PKG_VERSION INTO sPkgVersion
9112
           FROM PACKAGE_VERSIONS pv
9113
          WHERE pv.PV_ID = newPvId;
9114
 
9115
         Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9116
 
9117
 
9118
      END IF;
9119
 
9120
      CLOSE curReplacePkg;
9121
 
9122
   END IF;
9123
 
9124
END;
9125
/*-------------------------------------------------------------------------------------------------------*/
9126
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9127
 
9128
   ReleaseLocation VARCHAR2(4000);
9129
   sPkgVersion VARCHAR2(4000);
9130
 
9131
BEGIN
9132
 
9133
   -- Replace Package
9134
    UPDATE RELEASE_CONTENT
9135
       SET pv_id = newPvId,
9136
           insert_stamp = Ora_Sysdate,
9137
           insertor_id = UserId,
9138
         product_state = NULL
9139
     WHERE rtag_id = RtagId
9140
       AND pv_id = oldPvId;
9141
 
9142
   -- update the pegging table
9143
   UPDATE PEGGED_VERSIONS
9144
      SET pv_id = newPvId
9145
     WHERE rtag_id = RtagId
9146
       AND pv_id = oldPvId;
9147
 
9148
   -- update the advisory_ripple table
9149
   UPDATE ADVISORY_RIPPLE
9150
      SET pv_id = newPvId
9151
     WHERE rtag_id = RtagId
9152
       AND pv_id = oldPvId;
9153
 
9154
    /* LOG ACTION */
9155
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9156
     FROM PROJECTS proj,
9157
           RELEASE_TAGS rt
9158
    WHERE rt.PROJ_ID = proj.PROJ_ID
9159
      AND rt.RTAG_ID = RtagId;
9160
 
9161
   SELECT pv.PKG_VERSION INTO sPkgVersion
9162
     FROM PACKAGE_VERSIONS pv
9163
    WHERE pv.PV_ID = newPvId;
9164
 
9165
   Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
9166
   Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9167
 
9168
END;
9169
/*-------------------------------------------------------------------------------------------------------*/
9170
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9171
   ReleaseLocation VARCHAR2(4000);
9172
 
9173
BEGIN
9174
 
9175
 
9176
   -- Delete old package
9177
   DELETE
9178
     FROM RELEASE_CONTENT rc
9179
    WHERE rc.PV_ID = PvId
9180
      AND rc.RTAG_ID = RtagId;
9181
 
9182
 
9183
   /* LOG ACTION */
9184
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9185
     FROM PROJECTS proj,
9186
          RELEASE_TAGS rt
9187
    WHERE rt.PROJ_ID = proj.PROJ_ID
9188
      AND rt.RTAG_ID = RtagId;
9189
 
9190
   Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9191
 
9192
 
9193
END;
9194
/*-------------------------------------------------------------------------------------------------------*/
9195
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9196
   ReleaseLocation VARCHAR2(4000);
9197
 
9198
   CURSOR curMatchingPackage IS
9199
    SELECT mpv.PV_ID
9200
     FROM RELEASE_CONTENT rc,
9201
           PACKAGE_VERSIONS mpv,
9202
         PACKAGE_VERSIONS pv
9203
    WHERE rc.PV_ID = mpv.PV_ID
9204
      AND rc.RTAG_ID = RtagId
9205
      AND pv.PV_ID = PvId
9206
      AND pv.PKG_ID = mpv.PKG_ID
9207
      AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
9208
    recMatchingPackage curMatchingPackage%ROWTYPE;
9209
 
9210
BEGIN
9211
 
9212
   OPEN curMatchingPackage;
9213
    FETCH curMatchingPackage INTO recMatchingPackage;
9214
 
9215
    IF curMatchingPackage%FOUND THEN
9216
      -- Delete old package
9217
      DELETE
9218
        FROM RELEASE_CONTENT rc
9219
       WHERE rc.PV_ID = recMatchingPackage.PV_ID
9220
         AND rc.RTAG_ID = RtagId;
9221
 
9222
 
9223
      /* LOG ACTION */
9224
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9225
        FROM PROJECTS proj,
9226
              RELEASE_TAGS rt
9227
       WHERE rt.PROJ_ID = proj.PROJ_ID
9228
         AND rt.RTAG_ID = RtagId;
9229
 
9230
      Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9231
 
9232
   END IF;
9233
 
9234
 
9235
   CLOSE curMatchingPackage;
9236
 
9237
 
9238
 
9239
 
9240
END;
9241
/*-------------------------------------------------------------------------------------------------------*/
9242
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
9243
 
9244
   ReturnValue NUMBER;
9245
 
9246
BEGIN
9247
   SELECT rc.BASE_VIEW_ID INTO ReturnValue
9248
     FROM RELEASE_CONTENT rc
9249
    WHERE rc.RTAG_ID = RtagId
9250
      AND rc.PV_ID = PvId;
9251
 
9252
   RETURN ReturnValue;
9253
END;
9254
/*-------------------------------------------------------------------------------------------------------*/
9255
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
9256
 
9257
BEGIN
9258
   -- Reset Ignore warnings up-the-tree
9259
   RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
9260
 
9261
   -- Refresh Package states
9262
   TOUCH_RELEASE ( RtagId );
9263
 
9264
END;
9265
/*-------------------------------------------------------------------------------------------------------*/
9266
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
9267
   CURSOR curReleases IS
9268
    SELECT rc.RTAG_ID
9269
     FROM RELEASE_CONTENT rc
9270
    WHERE rc.PV_ID = PvId;
9271
    recReleases curReleases%ROWTYPE;
9272
 
9273
BEGIN
9274
 
9275
   OPEN curReleases;
9276
    FETCH curReleases INTO recReleases;
9277
 
9278
   WHILE curReleases%FOUND
9279
   LOOP
9280
 
9281
      RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
9282
 
9283
      FETCH curReleases INTO recReleases;
9284
   END LOOP;
9285
 
9286
   CLOSE curReleases;
9287
 
9288
END;
9289
/*-------------------------------------------------------------------------------------------------------*/
9290
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
9291
 
9292
BEGIN
9293
 
9294
   UPDATE RELEASE_CONTENT rc SET
9295
   rc.BASE_VIEW_ID = NewViewId
9296
   WHERE rc.PV_ID = PvId
9297
     AND rc.RTAG_ID = RtagId;
9298
 
9299
END;
9300
/*-------------------------------------------------------------------------------------------------------*/
9301
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
9302
 
9303
   RowCount NUMBER;
9304
 
9305
 
9306
   CURSOR curPackageClash IS
9307
   SELECT pkg.PKG_NAME,
9308
         er.*
9309
     FROM (
9310
 
9311
           /* Get existing referenced packages */
9312
         SELECT pv.PKG_ID,
9313
                pv.V_EXT
9314
           FROM RELEASE_LINKS rl,
9315
                 RELEASE_CONTENT rc,
9316
                 PACKAGE_VERSIONS pv
9317
          WHERE rl.RTAG_ID = nRtagId
9318
            AND rl.REF_RTAG_ID = rc.RTAG_ID
9319
            AND rc.PV_ID = pv.PV_ID
9320
 
9321
            ) er,
9322
         (
9323
 
9324
         /* Get current reference packages */
9325
         SELECT pv.PKG_ID,
9326
                pv.V_EXT
9327
           FROM RELEASE_CONTENT rc,
9328
                 PACKAGE_VERSIONS pv
9329
          WHERE rc.RTAG_ID = nRefRtagId
9330
            AND rc.PV_ID = pv.PV_ID
9331
 
9332
         ) cr,
9333
         PACKAGES PKG
9334
    WHERE er.PKG_ID = cr.PKG_ID
9335
      AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9336
      AND er.PKG_ID = pkg.PKG_ID;
9337
 
9338
   recPackageClash curPackageClash%ROWTYPE;
9339
 
9340
BEGIN
9341
   /*--------------- Business Rules Here -------------------*/
9342
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9343
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9344
   END IF;
9345
 
9346
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9347
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9348
   END IF;
9349
   /*-------------------------------------------------------*/
9350
   ProblemString := NULL;
9351
 
9352
 
9353
   -- Check if release already has references
9354
   SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
9355
     FROM RELEASE_LINKS rl
9356
    WHERE rl.RTAG_ID = nRtagId;
9357
 
9358
 
9359
   IF RowCount > 0 THEN
9360
      -- Found existing references
9361
 
9362
      -- Make sure there is no package clashes
9363
      OPEN curPackageClash;
9364
       FETCH curPackageClash INTO recPackageClash;
9365
 
9366
      IF curPackageClash%FOUND THEN
9367
 
9368
         ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
9369
 
9370
         WHILE curPackageClash%FOUND
9371
         LOOP
9372
            EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;   -- Do not allow variable overflow
9373
 
9374
            ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
9375
 
9376
            FETCH curPackageClash INTO recPackageClash;
9377
         END LOOP;
9378
 
9379
      END IF;
9380
 
9381
      CLOSE curPackageClash;
9382
 
9383
 
9384
   ELSE
9385
      -- No references found, hence reference a release
9386
 
9387
 
9388
      -- Remove exising package from this release to be referenced
9389
      REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);
9390
 
9391
 
9392
      -- Add new linked packages to release
9393
      INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
9394
      SELECT nRtagId,
9395
            rc.PV_ID,
9396
            rc.BASE_VIEW_ID,
9397
            rc.INSERT_STAMP,
9398
            rc.INSERTOR_ID,
9399
            rc.PKG_STATE
9400
        FROM RELEASE_CONTENT rc
9401
       WHERE rc.RTAG_ID = nRefRtagId;
9402
 
9403
 
9404
 
9405
      -- Copy ignore warnings for referenced packages
9406
      INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
9407
      SELECT nRtagId,
9408
            iw.PV_ID,
9409
            iw.DPV_ID,
9410
            iw.IS_PATCH_IGNORE
9411
        FROM IGNORE_WARNINGS iw,
9412
              RELEASE_CONTENT rc
9413
       WHERE iw.RTAG_ID = rc.RTAG_ID
9414
         AND iw.PV_ID = rc.PV_ID
9415
         AND rc.RTAG_ID = nRefRtagId;
9416
 
9417
 
9418
 
9419
      -- Reference release
9420
      INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
9421
      VALUES ( nRtagId, nRefRtagId );
9422
 
9423
 
9424
      -- Refresh Package states
9425
      TOUCH_RELEASE ( nRtagId );
9426
 
9427
   END IF;
9428
 
9429
 
9430
END;
9431
/*-------------------------------------------------------------------------------------------------------*/
9432
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
9433
 
9434
 
9435
BEGIN
9436
   /*--------------- Business Rules Here -------------------*/
9437
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9438
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9439
   END IF;
9440
 
9441
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9442
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9443
   END IF;
9444
 
9445
   /*-------------------------------------------------------*/
9446
 
9447
 
9448
   -- Remove ignore warnings for those packages who use referenced packages
9449
   DELETE FROM IGNORE_WARNINGS iw
9450
    WHERE iw.RTAG_ID = nRtagId
9451
      AND iw.DPV_ID IN (
9452
                        SELECT dep.DPV_ID
9453
                       FROM (
9454
 
9455
                           /* Get referenced packages */
9456
                           SELECT pv.PKG_ID,
9457
                                  pv.V_EXT
9458
                             FROM RELEASE_CONTENT rc,
9459
                                   PACKAGE_VERSIONS pv
9460
                            WHERE rc.RTAG_ID = nRefRtagId
9461
                              AND rc.PV_ID = pv.PV_ID
9462
 
9463
                           ) cr,
9464
                           (
9465
 
9466
                           /* Get all dependencies for current release */
9467
                           SELECT DISTINCT
9468
                                 pv.PKG_ID,
9469
                                 pv.V_EXT,
9470
                                 dep.DPV_ID
9471
                             FROM RELEASE_CONTENT rc,
9472
                                 PACKAGE_DEPENDENCIES dep,
9473
                                 PACKAGE_VERSIONS pv
9474
                            WHERE rc.RTAG_ID = nRtagId
9475
                              AND rc.PV_ID = dep.PV_ID
9476
                              AND dep.PV_ID = pv.PV_ID
9477
 
9478
                           ) dep
9479
                      WHERE dep.PKG_ID = cr.PKG_ID
9480
                        AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9481
                     );
9482
 
9483
 
9484
 
9485
 
9486
   -- Remove ignore warnings for those package which are going to be replaced with the reference
9487
   DELETE FROM IGNORE_WARNINGS iw
9488
    WHERE iw.RTAG_ID = nRtagId
9489
      AND iw.PV_ID IN (
9490
                  SELECT pv.PV_ID
9491
                    FROM (
9492
 
9493
                        /* Get referenced packages */
9494
                        SELECT pv.PKG_ID,
9495
                               pv.V_EXT
9496
                          FROM RELEASE_CONTENT rc,
9497
                                PACKAGE_VERSIONS pv
9498
                         WHERE rc.RTAG_ID = nRefRtagId
9499
                           AND rc.PV_ID = pv.PV_ID
9500
 
9501
                        ) cr,
9502
                        RELEASE_CONTENT rc,
9503
                        PACKAGE_VERSIONS pv
9504
                   WHERE pv.PKG_ID = cr.PKG_ID
9505
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9506
                     AND rc.RTAG_ID = nRtagId
9507
                     AND rc.PV_ID = pv.PV_ID
9508
                  );
9509
 
9510
 
9511
 
9512
 
9513
 
9514
   -- Remove matching packages from release
9515
   DELETE FROM RELEASE_CONTENT rc
9516
    WHERE rc.RTAG_ID = nRtagId
9517
      AND rc.PV_ID IN (
9518
                  SELECT pv.PV_ID
9519
                    FROM (
9520
 
9521
                        /* Get referenced packages */
9522
                        SELECT pv.PKG_ID,
9523
                               pv.V_EXT
9524
                          FROM RELEASE_CONTENT rc,
9525
                                PACKAGE_VERSIONS pv
9526
                         WHERE rc.RTAG_ID = nRefRtagId
9527
                           AND rc.PV_ID = pv.PV_ID
9528
 
9529
                        ) cr,
9530
                        RELEASE_CONTENT rc,
9531
                        PACKAGE_VERSIONS pv
9532
                   WHERE pv.PKG_ID = cr.PKG_ID
9533
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9534
                     AND rc.RTAG_ID = nRtagId
9535
                     AND rc.PV_ID = pv.PV_ID
9536
                  );
9537
 
9538
 
9539
 
9540
 
9541
 
9542
   -- Remove Reference release
9543
   DELETE
9544
     FROM RELEASE_LINKS rl
9545
    WHERE rl.RTAG_ID = nRtagId
9546
      AND rl.REF_RTAG_ID = nRefRtagId;
9547
 
9548
 
9549
   -- Refresh Package states
9550
   TOUCH_RELEASE ( nRtagId );
9551
 
9552
 
9553
END;
9554
/*-------------------------------------------------------------------------------------------------------*/
9555
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
9556
 
9557
   cReleaseMode CHAR(1);
9558
   cPvMode CHAR(1);
9559
 
9560
BEGIN
9561
 
9562
   -- Get Release Mode
9563
   SELECT rt.OFFICIAL INTO cReleaseMode
9564
     FROM RELEASE_TAGS rt
9565
    WHERE rt.RTAG_ID = RtagId;
9566
 
9567
 
9568
   -- Get Package Mode
9569
   SELECT pv.DLOCKED INTO cPvMode
9570
     FROM PACKAGE_VERSIONS pv
9571
    WHERE pv.PV_ID = PvId;
9572
 
9573
   -- Only check if package is locked
9574
   IF (cPvMode = 'Y') THEN
9575
 
9576
      IF (cReleaseMode != 'N') AND (Permission != 'Y')
9577
      THEN
9578
         RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
9579
 
9580
      END IF;
9581
 
9582
   END IF;
9583
 
9584
 
9585
END;
9586
 
9587
/*-------------------------------------------------------------------------------------------------------*/
9588
END PK_RELEASE;
9589
/
9590
--------------------------------------------------------
9591
--  DDL for Package Body PK_PROJECT
9592
--------------------------------------------------------
9593
 
9594
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS
9595
 
9596
    /*------------------------------------------------------------------------*/
9597
    PROCEDURE update_base_url (
9598
    nprojid   IN  projects.proj_id%TYPE,
9599
    sbaseurl  IN  VARCHAR2
9600
    ) IS
9601
    BEGIN
9602
 
9603
    UPDATE projects
9604
    SET base_url = sbaseurl
9605
    WHERE proj_id = nprojid;
9606
 
9607
    END update_base_url;
9608
 
9609
/*------------------------------------------------------------------------*/
9610
    PROCEDURE update_project_config (
9611
    nprojid   IN  projects.proj_id%TYPE,
9612
    sbaseurl  IN  VARCHAR2,
9613
    sjirakey  IN  VARCHAR2
9614
    ) IS
9615
    BEGIN
9616
 
9617
    UPDATE projects
9618
    SET base_url = sbaseurl,
9619
        jira_key = sjirakey
9620
    WHERE proj_id = nprojid;
9621
 
9622
    END update_project_config;
9623
    /*------------------------------------------------------------------------*/
9624
 
9625
    END pk_project;
9626
/
9627
--------------------------------------------------------
9628
--  DDL for Package Body PK_ENVIRONMENT
9629
--------------------------------------------------------
9630
 
9631
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT" 
9632
IS
9633
 
9634
   /*-------------------------------------------------------------------------------------------------------*/
9635
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
9636
     RETURN NUMBER
9637
   IS
9638
   BEGIN
9639
      /*
9640
     || N - unlocked
9641
     || Y - release and locked
9642
     || P - penging approval
9643
     || A - approved package ready for auto-build
9644
     */
9645
     IF cdlock = 'N' OR cdlock = 'R'
9646
     THEN
9647
       -- WORK IN PROGRESS --
9648
       RETURN 0;
9649
     ELSIF cdlock = 'P' OR cdlock = 'A'
9650
     THEN
9651
       -- PENDING --
9652
       RETURN 1;
9653
     ELSIF cdlock = 'Y'
9654
     THEN
9655
       -- RELEASED --
9656
       RETURN 2;
9657
     ELSE
9658
       -- NOT FOUND --
9659
       raise_application_error
9660
                   (-20000,
9661
                      'Cannot decide where to place package. [cDlock='
9662
                    || cdlock
9663
                    || ']'
9664
                   );
9665
     END IF;
9666
   END;
9667
 
9668
/*-------------------------------------------------------------------------------------------------------*/
9669
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
9670
     RETURN NUMBER
9671
   IS
9672
     envtab   NUMBER         := -1;
9673
 
9674
     CURSOR curarea
9675
     IS
9676
       SELECT 2 AS envtab
9677
         FROM release_content rc
9678
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9679
       UNION
9680
       SELECT 0 AS envtab
9681
         FROM work_in_progress wip
9682
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9683
       UNION
9684
       SELECT 1 AS envtab
9685
         FROM planned pl
9686
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9687
 
9688
     recarea   curarea%ROWTYPE;
9689
   BEGIN
9690
     OPEN curarea;
9691
 
9692
     FETCH curarea
9693
      INTO recarea;
9694
 
9695
     IF curarea%FOUND
9696
     THEN
9697
       envtab := recarea.envtab;
9698
     END IF;
9699
 
9700
     CLOSE curarea;
9701
 
9702
     RETURN envtab;
9703
   END;
9704
 
9705
/*-------------------------------------------------------------------------------------------------------*/
9706
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
9707
     RETURN NUMBER
9708
   IS
9709
     ispatch   package_versions.dlocked%TYPE;
9710
     viewid   NUMBER                    := -1;
9711
 
9712
     CURSOR curview
9713
     IS
9714
       SELECT rc.base_view_id AS view_id
9715
         FROM release_content rc
9716
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9717
       UNION
9718
       SELECT wip.view_id AS view_id
9719
         FROM work_in_progress wip
9720
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9721
       UNION
9722
       SELECT pl.view_id AS view_id
9723
         FROM planned pl
9724
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9725
 
9726
     recview   curview%ROWTYPE;
9727
   BEGIN
9728
     -- Get dlock state
9729
     SELECT pv.is_patch
9730
      INTO ispatch
9731
      FROM package_versions pv
9732
      WHERE pv.pv_id = pvid;
9733
 
9734
     -- Decide which view id should package go under.
9735
     IF (ispatch != 'Y') OR (ispatch IS NULL)
9736
     THEN
9737
       -- Get VIEW ID of Package
9738
       OPEN curview;
9739
 
9740
       FETCH curview
9741
        INTO recview;
9742
 
9743
       IF curview%FOUND
9744
       THEN
9745
         viewid := recview.view_id;
9746
       ELSE
9747
         raise_application_error
9748
            (-20000,
9749
               'Cannot find view_id to proceed. [PvId='
9750
            || pvid
9751
            || ']. The current version may not exist in the release anymore.'
9752
            );
9753
       END IF;
9754
 
9755
       CLOSE curview;
9756
     ELSE
9757
       -- Get VIEW ID of Patch (view id of parent package)
9758
       SELECT rc.base_view_id
9759
         INTO viewid
9760
         FROM release_content rc, package_patches ppv
9761
        WHERE rc.rtag_id = rtagid
9762
         AND rc.pv_id = ppv.pv_id
9763
         AND ppv.patch_id = pvid;
9764
     END IF;
9765
 
9766
     RETURN viewid;
9767
   END;
9768
 
9769
/*-------------------------------------------------------------------------------------------------------*/
9770
   PROCEDURE add_package (
9771
     pvid    IN   NUMBER,
9772
     viewid   IN   NUMBER,
9773
     rtagid   IN   NUMBER,
9774
     userid   IN   NUMBER
9775
   )
9776
   IS
9777
     dlocked   package_versions.dlocked%TYPE;
9778
     envtab   NUMBER;
9779
   BEGIN
9780
     IF can_edit_pkg_in_project (pvid, rtagid) = 1
9781
     THEN
9782
       -- Get dlock state
9783
       SELECT pv.dlocked
9784
         INTO dlocked
9785
         FROM package_versions pv
9786
        WHERE pv.pv_id = pvid;
9787
 
9788
       -- Get which area should go under
9789
       envtab := select_environment_area (dlocked);
9790
       -- Log
9791
       log_action (pvid, 'action', userid, 'Start of Package Add...');
9792
 
9793
       -- Remove Package
9794
       IF envtab = 0
9795
       THEN
9796
         -- WORK IN PROGRESS --
9797
         pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
9798
       ELSIF envtab = 1
9799
       THEN
9800
         -- PENDING --
9801
         pk_planned.add_package (pvid, viewid, rtagid, userid);
9802
       ELSIF envtab = 2
9803
       THEN
9804
         -- RELEASED --
9805
         -- NOTE: this package will be replaced with matching package
9806
         pk_release.add_package (pvid, viewid, rtagid, userid);
9807
         -- Now do post Release Actions
9808
         pk_release.run_post_actions (pvid, rtagid);
9809
       END IF;
9810
 
9811
       -- Log
9812
       log_action (pvid, 'action', userid, 'End of Package Add...');
9813
     END IF;
9814
   END;
9815
 
9816
/*-------------------------------------------------------------------------------------------------------*/
9817
   PROCEDURE add_package_bulk (
9818
     pvidlist   IN   VARCHAR2,
9819
     viewid    IN   NUMBER,
9820
     rtagid    IN   NUMBER,
9821
     userid    IN   NUMBER
9822
   )
9823
   IS
9824
     nidcollector   relmgr_number_tab_t         := relmgr_number_tab_t
9825
                                                        ();
9826
     dlocked      package_versions.dlocked%TYPE;
9827
     pvid         NUMBER;
9828
     envtab       NUMBER;
9829
   BEGIN
9830
     /*--------------- Business Rules Here -------------------*/
9831
     IF (pvidlist IS NULL)
9832
     THEN
9833
       raise_application_error (-20000,
9834
                          'Please select at least one package.'
9835
                         );
9836
     END IF;
9837
 
9838
/*-------------------------------------------------------*/
9839
     nidcollector := in_list_number (pvidlist);
9840
 
9841
     FOR i IN 1 .. nidcollector.COUNT
9842
     LOOP
9843
       pvid := nidcollector (i);
9844
       add_package (pvid, viewid, rtagid, userid);
9845
     END LOOP;
9846
   END;
9847
 
9848
/*-------------------------------------------------------------------------------------------------------*/
9849
   PROCEDURE replace_package (
9850
     newpvid  IN   NUMBER,
9851
     oldpvid  IN   NUMBER,
9852
     rtagid   IN   NUMBER,
9853
     userid   IN   NUMBER
9854
   )
9855
   IS
9856
     dlocked      package_versions.dlocked%TYPE;
9857
     viewid       NUMBER;
9858
     envtab       NUMBER;
9859
     ROWCOUNT     NUMBER;
9860
     creleasemode CHAR (1);
9861
     npkgid       NUMBER;
9862
   BEGIN
9863
     /*--------------- Business Rules Here -------------------*/
9864
     -- Check if oldPvId exists. It could have been removed
9865
     SELECT COUNT (pv.pv_id)
9866
       INTO ROWCOUNT
9867
       FROM package_versions pv
9868
      WHERE pv.pv_id = oldpvid;
9869
 
9870
/*-------------------------------------------------------*/
9871
 
9872
     /* This procedure is usually used by "History" option in Release Manager */
9873
 
9874
     -- Get dlock state
9875
     SELECT pv.dlocked
9876
       INTO dlocked
9877
       FROM package_versions pv
9878
      WHERE pv.pv_id = newpvid;
9879
 
9880
     -- Get VIEW_ID ---
9881
     IF ROWCOUNT = 1
9882
     THEN
9883
       viewid := get_view_location (oldpvid, rtagid);
9884
     ELSE
9885
       -- Set ViewID to default
9886
       viewid := 7;
9887
     END IF;
9888
 
9889
     -- Get which area should go under
9890
     envtab := select_environment_area (dlocked);
9891
     -- Log
9892
     log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
9893
 
9894
     -- Replace package
9895
     IF envtab = 0
9896
     THEN
9897
       -- WORK IN PROGRESS --
9898
 
9899
       -- Delete old package
9900
       pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
9901
 
9902
       -- Add new package
9903
       pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
9904
     ELSIF envtab = 1
9905
     THEN
9906
       -- PENDING --
9907
 
9908
       -- Delete old package
9909
       pk_planned.remove_package (oldpvid, rtagid, userid);
9910
 
9911
       -- Add new package
9912
       pk_planned.add_package (newpvid, viewid, rtagid, userid);
9913
     ELSIF envtab = 2
9914
     THEN
9915
       -- RELEASED --
9916
 
9917
       -- Delete old package
9918
       pk_release.remove_package (oldpvid, rtagid, userid);
9919
       -- Add new package
9920
       pk_release.add_package (newpvid, viewid, rtagid, userid);
9921
 
9922
       -- update the pegging table
9923
       UPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9924
 
9925
       -- update the advisory ripple table
9926
       UPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9927
 
9928
       -- Now do post Release Actions
9929
       pk_release.run_post_actions (newpvid, rtagid);
9930
     END IF;
9931
 
9932
     -- Log
9933
     log_action (oldpvid, 'action', userid, 'End of Package Replace...');
9934
   END;
9935
 
9936
/*-------------------------------------------------------------------------------------------------------*/
9937
   FUNCTION remove_package (
9938
     pvid        IN   NUMBER,
9939
     rtagid      IN   NUMBER,
9940
     userid      IN   NUMBER,
9941
     forceremove IN   CHAR
9942
   )
9943
     RETURN NUMBER
9944
   IS
9945
     envtab      NUMBER;
9946
     isused      BOOLEAN;
9947
     recordcount   NUMBER;
9948
   BEGIN
9949
/*--------------- Business Rules Here -------------------*/
9950
/*-------------------------------------------------------*/
9951
 
9952
     -- Find location of package
9953
     envtab := get_package_area (pvid, rtagid);
9954
 
9955
     -- Remove Package
9956
     IF envtab = 0
9957
     THEN
9958
       -- WORK IN PROGRESS --
9959
       -- Delete package
9960
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
9961
 
9962
       RETURN 0;
9963
     ELSIF envtab = 1
9964
     THEN
9965
       -- PENDING --
9966
       -- Delete package
9967
       pk_planned.remove_package (pvid, rtagid, userid);
9968
 
9969
       RETURN 0;
9970
     ELSIF envtab = 2
9971
     THEN
9972
       -- RELEASED --
9973
 
9974
       -- Check if is used by other packages
9975
       isused := TRUE;
9976
 
9977
       IF forceremove = 'N'
9978
       THEN
9979
         SELECT COUNT (pv.pv_id)
9980
           INTO recordcount
9981
           FROM (SELECT dpv.pkg_id, dpv.v_ext
9982
                 FROM release_content rc,
9983
                     package_dependencies dep,
9984
                     package_versions dpv
9985
                WHERE rc.rtag_id = rtagid
9986
                  AND rc.pv_id = dep.pv_id
9987
                  AND dep.dpv_id = dpv.pv_id) rdep,
9988
               package_versions pv
9989
          WHERE pv.pkg_id = rdep.pkg_id
9990
            AND NVL (pv.v_ext, '|LINK_A_NULL|') =
9991
                                  NVL (rdep.v_ext, '|LINK_A_NULL|')
9992
            AND pv.pv_id = pvid;
9993
 
9994
         IF recordcount > 0
9995
         THEN
9996
            RETURN 1;               -- Return 1 as package being used
9997
         ELSE
9998
            isused := FALSE;
9999
         END IF;
10000
       END IF;
10001
 
10002
       IF forceremove = 'Y' OR NOT isused
10003
       THEN
10004
         -- Delete old package
10005
         pk_release.remove_package (pvid, rtagid, userid);
10006
 
10007
         -- Delete old package's pegging info
10008
         DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;
10009
 
10010
         -- Delete old package's advisory ripple info
10011
         DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;
10012
 
10013
         -- Now do post Release Actions
10014
         pk_release.run_post_actions (pvid, rtagid);
10015
         RETURN 0;
10016
       END IF;
10017
     END IF;
10018
   END;
10019
 
10020
/*-------------------------------------------------------------------------------------------------------*/
10021
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
10022
 
10023
   PROCEDURE get_environment_items (
10024
     viewtype         IN      NUMBER,
10025
     userid           IN      NUMBER,
10026
     rtagid           IN      NUMBER,
10027
     sviewidshowlist  IN      VARCHAR2,
10028
     ntruerecordcount OUT     NUMBER,
10029
     recordset        OUT     typecur
10030
   )
10031
   IS
10032
   BEGIN
10033
     -- Get true record count because views can give false count
10034
     SELECT COUNT (pl.pv_id)
10035
      INTO ntruerecordcount
10036
      FROM environment_view pl
10037
      WHERE pl.rtag_id = rtagid;
10038
 
10039
     IF viewtype = 1
10040
     THEN
10041
       /*--- GUEST VIEW ---*/
10042
       OPEN recordset FOR
10043
         SELECT   *
10044
            FROM (
10045
                 /* Base Views collapsed */
10046
                 SELECT DISTINCT vi.view_id, vi.view_name,
10047
                             TO_NUMBER (NULL) AS pkg_state,
10048
                             TO_NUMBER (NULL) AS deprecated_state,
10049
                             TO_NUMBER (NULL) AS pv_id,
10050
                             NULL AS pkg_name, NULL AS pkg_version,
10051
                             NULL AS dlocked, NULL AS pv_description,
10052
                             rel.operation
10053
                         FROM environment_view rel, views vi
10054
                        WHERE rel.view_id = vi.view_id
10055
                          AND rtag_id = rtagid
10056
                          AND rel.view_id NOT IN (
10057
                               SELECT *
10058
                                 FROM THE
10059
                                       (SELECT CAST
10060
                                               (in_list_number
10061
                                                  (sviewidshowlist
10062
                                                  ) AS relmgr_number_tab_t
10063
                                               )
10064
                                         FROM DUAL
10065
                                       ))
10066
                 UNION
10067
                 /* Base Views expanded */
10068
                 SELECT vi.view_id, vi.view_name,
10069
                      DECODE (rel.pkg_state,
10070
                            NULL, 0,
10071
                            rel.pkg_state
10072
                           ) AS pkg_state,
10073
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10074
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10075
                      rel.operation
10076
                  FROM environment_view rel,
10077
                      PACKAGES pkg,
10078
                      package_versions pv,
10079
                      views vi
10080
                  WHERE pv.pkg_id = pkg.pkg_id
10081
                   AND rel.pv_id = pv.pv_id
10082
                   AND rel.view_id = vi.view_id
10083
                   AND rel.view_id IN (
10084
                        SELECT *
10085
                          FROM THE
10086
                                (SELECT CAST
10087
                                        (in_list_number
10088
                                               (sviewidshowlist) AS relmgr_number_tab_t
10089
                                        )
10090
                                  FROM DUAL
10091
                                ))
10092
                   AND rtag_id = rtagid) ord
10093
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10094
     ELSIF viewtype = 2
10095
     THEN
10096
       /*--- PERSONAL VIEW ---*/
10097
       OPEN recordset FOR
10098
         SELECT   *
10099
            FROM (
10100
                 /* Base Views collapsed */
10101
                 SELECT DISTINCT vi.view_id, vi.view_name,
10102
                             TO_NUMBER (NULL) AS pkg_state,
10103
                             TO_NUMBER (NULL) AS deprecated_state,
10104
                             TO_NUMBER (NULL) AS pv_id,
10105
                             NULL AS pkg_name, NULL AS pkg_version,
10106
                             NULL AS dlocked, NULL AS pv_description,
10107
                             rel.operation
10108
                         FROM environment_view rel,
10109
                             view_settings vs,
10110
                             views vi
10111
                        WHERE rel.view_id = vi.view_id
10112
                          AND vs.view_id = rel.view_id
10113
                          AND vs.user_id = userid
10114
                          AND rtag_id = rtagid
10115
                          AND rel.view_id NOT IN (
10116
                               SELECT *
10117
                                 FROM THE
10118
                                       (SELECT CAST
10119
                                               (in_list_number
10120
                                                  (sviewidshowlist
10121
                                                  ) AS relmgr_number_tab_t
10122
                                               )
10123
                                         FROM DUAL
10124
                                       ))
10125
                 UNION
10126
                 /* Base Views expanded */
10127
                 SELECT vi.view_id, vi.view_name,
10128
                      DECODE (rel.pkg_state,
10129
                            NULL, 0,
10130
                            rel.pkg_state
10131
                           ) AS pkg_state,
10132
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10133
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10134
                      rel.operation
10135
                  FROM environment_view rel,
10136
                      PACKAGES pkg,
10137
                      package_versions pv,
10138
                      views vi,
10139
                      view_settings vs
10140
                  WHERE pv.pkg_id = pkg.pkg_id
10141
                   AND rel.pv_id = pv.pv_id
10142
                   AND rel.view_id = vi.view_id
10143
                   AND vs.view_id = vi.view_id
10144
                   AND vs.user_id = userid
10145
                   AND rel.view_id IN (
10146
                        SELECT *
10147
                          FROM THE
10148
                                (SELECT CAST
10149
                                        (in_list_number
10150
                                               (sviewidshowlist) AS relmgr_number_tab_t
10151
                                        )
10152
                                  FROM DUAL
10153
                                ))
10154
                   AND rtag_id = rtagid
10155
                 UNION
10156
                 /* Private Views collapsed */
10157
                 SELECT vi.view_id, vi.view_name,
10158
                      TO_NUMBER (NULL) AS pkg_state,
10159
                      TO_NUMBER (NULL) AS deprecated_state,
10160
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10161
                      NULL AS pkg_version, NULL AS dlocked,
10162
                      NULL AS pv_description,
10163
                      rel.operation
10164
                  FROM view_settings vs,
10165
                      view_def vd,
10166
                      views vi,
10167
                      environment_view rel,
10168
                      package_versions pv
10169
                  WHERE vs.view_id = vi.view_id
10170
                   AND rel.pv_id = pv.pv_id
10171
                   AND vd.pkg_id = pv.pkg_id
10172
                   AND vd.view_id = vi.view_id
10173
                   AND vi.base_view = 'N'
10174
                   AND rel.rtag_id = rtagid
10175
                   AND vs.user_id = userid
10176
                   AND vi.view_id NOT IN (
10177
                        SELECT *
10178
                          FROM THE
10179
                                (SELECT CAST
10180
                                        (in_list_number
10181
                                               (sviewidshowlist) AS relmgr_number_tab_t
10182
                                        )
10183
                                  FROM DUAL
10184
                                ))
10185
                 UNION
10186
                 /* Private Views expanded */
10187
                 SELECT vi.view_id, vi.view_name,
10188
                      DECODE (rel.pkg_state,
10189
                            NULL, 0,
10190
                            rel.pkg_state
10191
                           ) AS pkg_state,
10192
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10193
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10194
                      rel.operation
10195
                  FROM users usr,
10196
                      view_settings vs,
10197
                      view_def vd,
10198
                      views vi,
10199
                      environment_view rel,
10200
                      PACKAGES pkg,
10201
                      package_versions pv
10202
                  WHERE vs.user_id = usr.user_id
10203
                   AND vs.view_id = vi.view_id
10204
                   AND vd.view_id = vi.view_id
10205
                   AND pv.pkg_id = pkg.pkg_id
10206
                   AND rel.pv_id = pv.pv_id
10207
                   AND rel.rtag_id = rtagid
10208
                   AND vd.pkg_id = pkg.pkg_id
10209
                   AND vi.base_view = 'N'
10210
                   AND vi.view_id IN (
10211
                        SELECT *
10212
                          FROM THE
10213
                                (SELECT CAST
10214
                                        (in_list_number
10215
                                               (sviewidshowlist) AS relmgr_number_tab_t
10216
                                        )
10217
                                  FROM DUAL
10218
                                ))
10219
                   AND usr.user_id = userid) ord
10220
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10221
     END IF;
10222
   END;
10223
 
10224
/*-------------------------------------------------------------------------------------------------------*/
10225
   PROCEDURE get_released_items (
10226
     viewtype         IN      NUMBER,
10227
     userid           IN      NUMBER,
10228
     rtagid           IN      NUMBER,
10229
     sviewidshowlist  IN      VARCHAR2,
10230
     ntruerecordcount OUT     NUMBER,
10231
     recordset        OUT     typecur
10232
   )
10233
   IS
10234
   BEGIN
10235
     -- Get true record count because views can give false count
10236
     SELECT COUNT (rc.pv_id)
10237
      INTO ntruerecordcount
10238
      FROM release_content rc
10239
      WHERE rc.rtag_id = rtagid;
10240
 
10241
     IF viewtype = 1
10242
     THEN
10243
       /*--- GUEST VIEW ---*/
10244
       OPEN recordset FOR
10245
         SELECT   *
10246
            FROM (
10247
                 /* Base Views collapsed */
10248
                 SELECT DISTINCT vi.view_id, vi.view_name,
10249
                             TO_NUMBER (NULL) AS pkg_state,
10250
                             TO_NUMBER (NULL) AS deprecated_state,
10251
                             TO_NUMBER (NULL) AS pv_id,
10252
                             NULL AS pkg_name, NULL AS pkg_version,
10253
                             NULL AS dlocked, NULL AS pv_description
10254
                         FROM release_content rel, views vi
10255
                        WHERE rel.base_view_id = vi.view_id
10256
                          AND rtag_id = rtagid
10257
                          AND rel.base_view_id NOT IN (
10258
                               SELECT *
10259
                                 FROM THE
10260
                                       (SELECT CAST
10261
                                               (in_list_number
10262
                                                  (sviewidshowlist
10263
                                                  ) AS relmgr_number_tab_t
10264
                                               )
10265
                                         FROM DUAL
10266
                                       ))
10267
                 UNION
10268
                 /* Base Views expanded */
10269
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10270
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10271
                      pv.pkg_version, pv.dlocked, pv.pv_description
10272
                  FROM release_content rel,
10273
                      PACKAGES pkg,
10274
                      package_versions pv,
10275
                      views vi
10276
                  WHERE pv.pkg_id = pkg.pkg_id
10277
                   AND rel.pv_id = pv.pv_id
10278
                   AND rel.base_view_id = vi.view_id
10279
                   AND rel.base_view_id IN (
10280
                        SELECT *
10281
                          FROM THE
10282
                                (SELECT CAST
10283
                                        (in_list_number
10284
                                               (sviewidshowlist) AS relmgr_number_tab_t
10285
                                        )
10286
                                  FROM DUAL
10287
                                ))
10288
                   AND rtag_id = rtagid) ord
10289
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10290
     ELSIF viewtype = 2
10291
     THEN
10292
       /*--- PERSONAL VIEW ---*/
10293
       OPEN recordset FOR
10294
         SELECT   *
10295
            FROM (
10296
                 /* Base Views collapsed */
10297
                 SELECT DISTINCT vi.view_id, vi.view_name,
10298
                             TO_NUMBER (NULL) AS pkg_state,
10299
                             TO_NUMBER (NULL) AS deprecated_state,
10300
                             TO_NUMBER (NULL) AS pv_id,
10301
                             NULL AS pkg_name, NULL AS pkg_version,
10302
                             NULL AS dlocked, NULL AS pv_description
10303
                         FROM release_content rel,
10304
                             view_settings vs,
10305
                             views vi
10306
                        WHERE rel.base_view_id = vi.view_id
10307
                          AND vs.view_id = rel.base_view_id
10308
                          AND vs.user_id = userid
10309
                          AND rtag_id = rtagid
10310
                          AND rel.base_view_id NOT IN (
10311
                               SELECT *
10312
                                 FROM THE
10313
                                       (SELECT CAST
10314
                                               (in_list_number
10315
                                                  (sviewidshowlist
10316
                                                  ) AS relmgr_number_tab_t
10317
                                               )
10318
                                         FROM DUAL
10319
                                       ))
10320
                 UNION
10321
                 /* Base Views expanded */
10322
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10323
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10324
                      pv.pkg_version, pv.dlocked, pv.pv_description
10325
                  FROM release_content rel,
10326
                      PACKAGES pkg,
10327
                      package_versions pv,
10328
                      views vi,
10329
                      view_settings vs
10330
                  WHERE pv.pkg_id = pkg.pkg_id
10331
                   AND rel.pv_id = pv.pv_id
10332
                   AND rel.base_view_id = vi.view_id
10333
                   AND vs.view_id = vi.view_id
10334
                   AND vs.user_id = userid
10335
                   AND rel.base_view_id IN (
10336
                        SELECT *
10337
                          FROM THE
10338
                                (SELECT CAST
10339
                                        (in_list_number
10340
                                               (sviewidshowlist) AS relmgr_number_tab_t
10341
                                        )
10342
                                  FROM DUAL
10343
                                ))
10344
                   AND rtag_id = rtagid
10345
                 UNION
10346
                 /* Private Views collapsed */
10347
                 SELECT vi.view_id, vi.view_name,
10348
                      TO_NUMBER (NULL) AS pkg_state,
10349
                      TO_NUMBER (NULL) AS deprecated_state,
10350
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10351
                      NULL AS pkg_version, NULL AS dlocked,
10352
                      NULL AS pv_description
10353
                  FROM view_settings vs,
10354
                      view_def vd,
10355
                      views vi,
10356
                      release_content rel,
10357
                      package_versions pv
10358
                  WHERE vs.view_id = vi.view_id
10359
                   AND rel.pv_id = pv.pv_id
10360
                   AND vd.pkg_id = pv.pkg_id
10361
                   AND vd.view_id = vi.view_id
10362
                   AND vi.base_view = 'N'
10363
                   AND rel.rtag_id = rtagid
10364
                   AND vs.user_id = userid
10365
                   AND vi.view_id NOT IN (
10366
                        SELECT *
10367
                          FROM THE
10368
                                (SELECT CAST
10369
                                        (in_list_number
10370
                                               (sviewidshowlist) AS relmgr_number_tab_t
10371
                                        )
10372
                                  FROM DUAL
10373
                                ))
10374
                 UNION
10375
                 /* Private Views expanded */
10376
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10377
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10378
                      pv.pkg_version, pv.dlocked, pv.pv_description
10379
                  FROM users usr,
10380
                      view_settings vs,
10381
                      view_def vd,
10382
                      views vi,
10383
                      release_content rel,
10384
                      PACKAGES pkg,
10385
                      package_versions pv
10386
                  WHERE vs.user_id = usr.user_id
10387
                   AND vs.view_id = vi.view_id
10388
                   AND vd.view_id = vi.view_id
10389
                   AND pv.pkg_id = pkg.pkg_id
10390
                   AND rel.pv_id = pv.pv_id
10391
                   AND rel.rtag_id = rtagid
10392
                   AND vd.pkg_id = pkg.pkg_id
10393
                   AND vi.base_view = 'N'
10394
                   AND vi.view_id IN (
10395
                        SELECT *
10396
                          FROM THE
10397
                                (SELECT CAST
10398
                                        (in_list_number
10399
                                               (sviewidshowlist) AS relmgr_number_tab_t
10400
                                        )
10401
                                  FROM DUAL
10402
                                ))
10403
                   AND usr.user_id = userid) ord
10404
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10405
     END IF;
10406
   END;
10407
 
10408
/*-------------------------------------------------------------------------------------------------------*/
10409
   PROCEDURE get_work_in_progress_items (
10410
     viewtype         IN      NUMBER,
10411
     userid           IN      NUMBER,
10412
     rtagid           IN      NUMBER,
10413
     sviewidshowlist  IN      VARCHAR2,
10414
     ntruerecordcount OUT     NUMBER,
10415
     recordset        OUT     typecur
10416
   )
10417
   IS
10418
   BEGIN
10419
     -- Get true record count because views can give false count
10420
     SELECT COUNT (wip.pv_id)
10421
      INTO ntruerecordcount
10422
      FROM work_in_progress wip
10423
      WHERE wip.rtag_id = rtagid;
10424
 
10425
     IF viewtype = 1
10426
     THEN
10427
       /*--- GUEST VIEW ---*/
10428
       OPEN recordset FOR
10429
         SELECT   *
10430
            FROM (
10431
                 /* Base Views collapsed */
10432
                 SELECT DISTINCT vi.view_id, vi.view_name,
10433
                             TO_NUMBER (NULL) AS pkg_state,
10434
                             TO_NUMBER (NULL) AS deprecated_state,
10435
                             TO_NUMBER (NULL) AS pv_id,
10436
                             NULL AS pkg_name, NULL AS pkg_version,
10437
                             NULL AS dlocked, NULL AS pv_description
10438
                         FROM work_in_progress rel, views vi
10439
                        WHERE rel.view_id = vi.view_id
10440
                          AND rtag_id = rtagid
10441
                          AND rel.view_id NOT IN (
10442
                               SELECT *
10443
                                 FROM THE
10444
                                       (SELECT CAST
10445
                                               (in_list_number
10446
                                                  (sviewidshowlist
10447
                                                  ) AS relmgr_number_tab_t
10448
                                               )
10449
                                         FROM DUAL
10450
                                       ))
10451
                 UNION
10452
                 /* Base Views expanded */
10453
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10454
 
10455
                      --rel.pkg_state,
10456
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10457
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10458
                      pv.pv_description
10459
                  FROM work_in_progress rel,
10460
                      PACKAGES pkg,
10461
                      package_versions pv,
10462
                      views vi
10463
                  WHERE pv.pkg_id = pkg.pkg_id
10464
                   AND rel.pv_id = pv.pv_id
10465
                   AND rel.view_id = vi.view_id
10466
                   AND rel.view_id IN (
10467
                        SELECT *
10468
                          FROM THE
10469
                                (SELECT CAST
10470
                                        (in_list_number
10471
                                               (sviewidshowlist) AS relmgr_number_tab_t
10472
                                        )
10473
                                  FROM DUAL
10474
                                ))
10475
                   AND rtag_id = rtagid) ord
10476
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10477
     ELSIF viewtype = 2
10478
     THEN
10479
       /*--- PERSONAL VIEW ---*/
10480
       OPEN recordset FOR
10481
         SELECT   *
10482
            FROM (
10483
                 /* Base Views collapsed */
10484
                 SELECT DISTINCT vi.view_id, vi.view_name,
10485
                             TO_NUMBER (NULL) AS pkg_state,
10486
                             TO_NUMBER (NULL) AS deprecated_state,
10487
                             TO_NUMBER (NULL) AS pv_id,
10488
                             NULL AS pkg_name, NULL AS pkg_version,
10489
                             NULL AS dlocked, NULL AS pv_description
10490
                         FROM work_in_progress rel,
10491
                             view_settings vs,
10492
                             views vi
10493
                        WHERE rel.view_id = vi.view_id
10494
                          AND vs.view_id = rel.view_id
10495
                          AND vs.user_id = userid
10496
                          AND rtag_id = rtagid
10497
                          AND rel.view_id NOT IN (
10498
                               SELECT *
10499
                                 FROM THE
10500
                                       (SELECT CAST
10501
                                               (in_list_number
10502
                                                  (sviewidshowlist
10503
                                                  ) AS relmgr_number_tab_t
10504
                                               )
10505
                                         FROM DUAL
10506
                                       ))
10507
                 UNION
10508
                 /* Base Views expanded */
10509
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10510
 
10511
                      --rel.pkg_state,
10512
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10513
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10514
                      pv.pv_description
10515
                  FROM work_in_progress rel,
10516
                      PACKAGES pkg,
10517
                      package_versions pv,
10518
                      views vi,
10519
                      view_settings vs
10520
                  WHERE pv.pkg_id = pkg.pkg_id
10521
                   AND rel.pv_id = pv.pv_id
10522
                   AND rel.view_id = vi.view_id
10523
                   AND vs.view_id = vi.view_id
10524
                   AND vs.user_id = userid
10525
                   AND rel.view_id IN (
10526
                        SELECT *
10527
                          FROM THE
10528
                                (SELECT CAST
10529
                                        (in_list_number
10530
                                               (sviewidshowlist) AS relmgr_number_tab_t
10531
                                        )
10532
                                  FROM DUAL
10533
                                ))
10534
                   AND rtag_id = rtagid
10535
                 UNION
10536
                 /* Private Views collapsed */
10537
                 SELECT vi.view_id, vi.view_name,
10538
                      TO_NUMBER (NULL) AS pkg_state,
10539
                      TO_NUMBER (NULL) AS deprecated_state,
10540
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10541
                      NULL AS pkg_version, NULL AS dlocked,
10542
                      NULL AS pv_description
10543
                  FROM view_settings vs,
10544
                      view_def vd,
10545
                      views vi,
10546
                      work_in_progress rel,
10547
                      package_versions pv
10548
                  WHERE vs.view_id = vi.view_id
10549
                   AND rel.pv_id = pv.pv_id
10550
                   AND vd.pkg_id = pv.pkg_id
10551
                   AND vd.view_id = vi.view_id
10552
                   AND vi.base_view = 'N'
10553
                   AND rel.rtag_id = rtagid
10554
                   AND vs.user_id = userid
10555
                   AND vi.view_id NOT IN (
10556
                        SELECT *
10557
                          FROM THE
10558
                                (SELECT CAST
10559
                                        (in_list_number
10560
                                               (sviewidshowlist) AS relmgr_number_tab_t
10561
                                        )
10562
                                  FROM DUAL
10563
                                ))
10564
                 UNION
10565
                 /* Private Views expanded */
10566
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10567
 
10568
                      --rel.pkg_state,
10569
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10570
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10571
                      pv.pv_description
10572
                  FROM users usr,
10573
                      view_settings vs,
10574
                      view_def vd,
10575
                      views vi,
10576
                      work_in_progress rel,
10577
                      PACKAGES pkg,
10578
                      package_versions pv
10579
                  WHERE vs.user_id = usr.user_id
10580
                   AND vs.view_id = vi.view_id
10581
                   AND vd.view_id = vi.view_id
10582
                   AND pv.pkg_id = pkg.pkg_id
10583
                   AND rel.pv_id = pv.pv_id
10584
                   AND rel.rtag_id = rtagid
10585
                   AND vd.pkg_id = pkg.pkg_id
10586
                   AND vi.base_view = 'N'
10587
                   AND vi.view_id IN (
10588
                        SELECT *
10589
                          FROM THE
10590
                                (SELECT CAST
10591
                                        (in_list_number
10592
                                               (sviewidshowlist) AS relmgr_number_tab_t
10593
                                        )
10594
                                  FROM DUAL
10595
                                ))
10596
                   AND usr.user_id = userid) ord
10597
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10598
     END IF;
10599
   END;
10600
 
10601
/*-------------------------------------------------------------------------------------------------------*/
10602
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
10603
 
10604
   PROCEDURE get_pending_items (
10605
     viewtype         IN      NUMBER,
10606
     userid           IN      NUMBER,
10607
     rtagid           IN      NUMBER,
10608
     sviewidshowlist  IN      VARCHAR2,
10609
     ntruerecordcount OUT     NUMBER,
10610
     recordset        OUT     typecur
10611
   )
10612
   IS
10613
   BEGIN
10614
     -- Get true record count because views can give false count
10615
     SELECT COUNT (pl.pv_id)
10616
      INTO ntruerecordcount
10617
      FROM planned pl
10618
      WHERE pl.rtag_id = rtagid;
10619
 
10620
     IF viewtype = 1
10621
     THEN
10622
       /*--- GUEST VIEW ---*/
10623
       OPEN recordset FOR
10624
         SELECT   *
10625
            FROM (
10626
                 /* Base Views collapsed */
10627
                 SELECT DISTINCT vi.view_id, vi.view_name,
10628
                             TO_NUMBER (NULL) AS pkg_state,
10629
                             TO_NUMBER (NULL) AS deprecated_state,
10630
                             TO_NUMBER (NULL) AS pv_id,
10631
                             NULL AS pkg_name, NULL AS pkg_version,
10632
                             NULL AS dlocked, NULL AS pv_description,
10633
                             rel.operation
10634
                         FROM planned rel, views vi
10635
                        WHERE rel.view_id = vi.view_id
10636
                          AND rtag_id = rtagid
10637
                          AND rel.view_id NOT IN (
10638
                               SELECT *
10639
                                 FROM THE
10640
                                       (SELECT CAST
10641
                                               (in_list_number
10642
                                                  (sviewidshowlist
10643
                                                  ) AS relmgr_number_tab_t
10644
                                               )
10645
                                         FROM DUAL
10646
                                       ))
10647
                 UNION
10648
                 /* Base Views expanded */
10649
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10650
 
10651
                      --rel.pkg_state,
10652
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10653
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10654
                      pv.pv_description,
10655
                      rel.operation
10656
                  FROM planned rel,
10657
                      PACKAGES pkg,
10658
                      package_versions pv,
10659
                      views vi
10660
                  WHERE pv.pkg_id = pkg.pkg_id
10661
                   AND rel.pv_id = pv.pv_id
10662
                   AND rel.view_id = vi.view_id
10663
                   AND rel.view_id IN (
10664
                        SELECT *
10665
                          FROM THE
10666
                                (SELECT CAST
10667
                                        (in_list_number
10668
                                               (sviewidshowlist) AS relmgr_number_tab_t
10669
                                        )
10670
                                  FROM DUAL
10671
                                ))
10672
                   AND rtag_id = rtagid) ord
10673
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10674
     ELSIF viewtype = 2
10675
     THEN
10676
       /*--- PERSONAL VIEW ---*/
10677
       OPEN recordset FOR
10678
         SELECT   *
10679
            FROM (
10680
                 /* Base Views collapsed */
10681
                 SELECT DISTINCT vi.view_id, vi.view_name,
10682
                             TO_NUMBER (NULL) AS pkg_state,
10683
                             TO_NUMBER (NULL) AS deprecated_state,
10684
                             TO_NUMBER (NULL) AS pv_id,
10685
                             NULL AS pkg_name, NULL AS pkg_version,
10686
                             NULL AS dlocked, NULL AS pv_description,
10687
                             rel.operation
10688
                         FROM planned rel, view_settings vs, views vi
10689
                        WHERE rel.view_id = vi.view_id
10690
                          AND vs.view_id = rel.view_id
10691
                          AND vs.user_id = userid
10692
                          AND rtag_id = rtagid
10693
                          AND rel.view_id NOT IN (
10694
                               SELECT *
10695
                                 FROM THE
10696
                                       (SELECT CAST
10697
                                               (in_list_number
10698
                                                  (sviewidshowlist
10699
                                                  ) AS relmgr_number_tab_t
10700
                                               )
10701
                                         FROM DUAL
10702
                                       ))
10703
                 UNION
10704
                 /* Base Views expanded */
10705
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10706
 
10707
                      --rel.pkg_state,
10708
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10709
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10710
                      pv.pv_description,
10711
                      rel.operation
10712
                  FROM planned rel,
10713
                      PACKAGES pkg,
10714
                      package_versions pv,
10715
                      views vi,
10716
                      view_settings vs
10717
                  WHERE pv.pkg_id = pkg.pkg_id
10718
                   AND rel.pv_id = pv.pv_id
10719
                   AND rel.view_id = vi.view_id
10720
                   AND vs.view_id = vi.view_id
10721
                   AND vs.user_id = userid
10722
                   AND rel.view_id IN (
10723
                        SELECT *
10724
                          FROM THE
10725
                                (SELECT CAST
10726
                                        (in_list_number
10727
                                               (sviewidshowlist) AS relmgr_number_tab_t
10728
                                        )
10729
                                  FROM DUAL
10730
                                ))
10731
                   AND rtag_id = rtagid
10732
                 UNION
10733
                 /* Private Views collapsed */
10734
                 SELECT vi.view_id, vi.view_name,
10735
                      TO_NUMBER (NULL) AS pkg_state,
10736
                      TO_NUMBER (NULL) AS deprecated_state,
10737
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10738
                      NULL AS pkg_version, NULL AS dlocked,
10739
                      NULL AS pv_description,
10740
                      rel.operation
10741
                  FROM view_settings vs,
10742
                      view_def vd,
10743
                      views vi,
10744
                      planned rel,
10745
                      package_versions pv
10746
                  WHERE vs.view_id = vi.view_id
10747
                   AND rel.pv_id = pv.pv_id
10748
                   AND vd.pkg_id = pv.pkg_id
10749
                   AND vd.view_id = vi.view_id
10750
                   AND vi.base_view = 'N'
10751
                   AND rel.rtag_id = rtagid
10752
                   AND vs.user_id = userid
10753
                   AND vi.view_id NOT IN (
10754
                        SELECT *
10755
                          FROM THE
10756
                                (SELECT CAST
10757
                                        (in_list_number
10758
                                               (sviewidshowlist) AS relmgr_number_tab_t
10759
                                        )
10760
                                  FROM DUAL
10761
                                ))
10762
                 UNION
10763
                 /* Private Views expanded */
10764
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10765
 
10766
                      --rel.pkg_state,
10767
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10768
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10769
                      pv.pv_description,
10770
                      rel.operation
10771
                  FROM users usr,
10772
                      view_settings vs,
10773
                      view_def vd,
10774
                      views vi,
10775
                      planned rel,
10776
                      PACKAGES pkg,
10777
                      package_versions pv
10778
                  WHERE vs.user_id = usr.user_id
10779
                   AND vs.view_id = vi.view_id
10780
                   AND vd.view_id = vi.view_id
10781
                   AND pv.pkg_id = pkg.pkg_id
10782
                   AND rel.pv_id = pv.pv_id
10783
                   AND rel.rtag_id = rtagid
10784
                   AND vd.pkg_id = pkg.pkg_id
10785
                   AND vi.base_view = 'N'
10786
                   AND vi.view_id IN (
10787
                        SELECT *
10788
                          FROM THE
10789
                                (SELECT CAST
10790
                                        (in_list_number
10791
                                               (sviewidshowlist) AS relmgr_number_tab_t
10792
                                        )
10793
                                  FROM DUAL
10794
                                ))
10795
                   AND usr.user_id = userid) ord
10796
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10797
     END IF;
10798
   END;
10799
 
10800
/*-------------------------------------------------------------------------------------------------------*/
10801
   PROCEDURE get_view_content (
10802
     rtagid     IN      NUMBER,
10803
     viewid     IN      NUMBER,
10804
     recordset OUT     typecur
10805
   )
10806
   IS
10807
     isbaseview   CHAR (1);
10808
   BEGIN
10809
     -- Check if the view is BASE VIEW
10810
     SELECT vi.base_view
10811
      INTO isbaseview
10812
      FROM views vi
10813
      WHERE vi.view_id = viewid;
10814
 
10815
     IF (isbaseview = 'Y')
10816
     THEN
10817
       -- Get Base view content
10818
       OPEN recordset FOR
10819
         SELECT   DECODE (rel.pkg_state,
10820
                      NULL, 0,
10821
                      rel.pkg_state
10822
                     ) AS pkg_state,
10823
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10824
                pv.pkg_version, pv.dlocked, pv.pv_description,
10825
                pv.build_type,
10826
                rel.operation
10827
            FROM environment_view rel, PACKAGES pkg, package_versions pv
10828
            WHERE pv.pkg_id = pkg.pkg_id
10829
             AND rel.pv_id = pv.pv_id
10830
             AND rel.view_id = viewid
10831
             AND rel.rtag_id = rtagid
10832
         ORDER BY UPPER (pkg.pkg_name);
10833
     ELSE
10834
       -- Get non base view content
10835
       OPEN recordset FOR
10836
         SELECT   DECODE (rel.pkg_state,
10837
                      NULL, 0,
10838
                      rel.pkg_state
10839
                     ) AS pkg_state,
10840
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10841
                pv.pkg_version, pv.dlocked, pv.pv_description,
10842
                pv.build_type,
10843
                rel.operation
10844
            FROM environment_view rel,
10845
                PACKAGES pkg,
10846
                package_versions pv,
10847
                view_def vd
10848
            WHERE pv.pkg_id = pkg.pkg_id
10849
             AND rel.pv_id = pv.pv_id
10850
             AND rel.rtag_id = rtagid
10851
             AND vd.view_id = viewid
10852
             AND vd.pkg_id = pv.pkg_id
10853
         ORDER BY UPPER (pkg.pkg_name);
10854
     END IF;
10855
   END;
10856
 
10857
/*-------------------------------------------------------------------------------------------------------*/
10858
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
10859
     RETURN NUMBER
10860
   IS
10861
     envtab           NUMBER;
10862
     returnvalue      NUMBER;
10863
     return_not_found NUMBER := -1;
10864
   BEGIN
10865
     envtab := get_package_area (pvid, rtagid);
10866
 
10867
     IF envtab = 0
10868
     THEN
10869
       -- WORK IN PROGRESS --
10870
       returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
10871
     ELSIF envtab = 1
10872
     THEN
10873
       -- PENDING --
10874
       returnvalue := pk_planned.get_package_view (pvid, rtagid);
10875
     ELSIF envtab = 2
10876
     THEN
10877
       -- RELEASED --
10878
       returnvalue := pk_release.get_package_view (pvid, rtagid);
10879
     ELSE
10880
       -- This may be a Patch not located anywhere but unlocked
10881
       returnvalue := return_not_found;
10882
     END IF;
10883
 
10884
     RETURN returnvalue;
10885
   END;
10886
 
10887
/*-------------------------------------------------------------------------------------------------------*/
10888
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
10889
   IS
10890
     viewid        NUMBER;
10891
     envtab        NUMBER;
10892
     ispatch       CHAR (1) := NULL;
10893
     buildtype     CHAR (1) := NULL;
10894
   BEGIN
10895
     -- Check if package is patch
10896
     SELECT pv.is_patch, pv.build_type
10897
      INTO ispatch, buildtype
10898
      FROM package_versions pv
10899
      WHERE pv.pv_id = pvid;
10900
 
10901
     -- Get ViewId
10902
     viewid := get_package_view (pvid, rtagid);
10903
     -- Remove from current area
10904
     envtab := pk_environment.get_package_area (pvid, rtagid);
10905
 
10906
     -- Make sure that package was in work-in-progress or pending before makeing it release
10907
     -- Exclude patches, ripple builds
10908
     IF (envtab < 0)
10909
     THEN
10910
       -- Not found in work-in-progress or pending
10911
       IF (ispatch IS NULL) AND (buildtype = 'M')
10912
       THEN
10913
         raise_application_error (-20000,
10914
                            'This package cannot be released here.'
10915
                           );
10916
       END IF;
10917
     END IF;
10918
 
10919
     -- Log
10920
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10921
 
10922
     IF envtab = 0
10923
     THEN
10924
       -- WORK IN PROGRESS --
10925
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
10926
     ELSIF envtab = 1
10927
     THEN
10928
       -- PENDING --
10929
       pk_planned.remove_package (pvid, rtagid, userid);
10930
     END IF;
10931
 
10932
     -- Change package state
10933
     pk_package.change_state (pvid, 'Y', userid);
10934
 
10935
     -- Make sure it is valid BASE VIEW
10936
     IF viewid < 1
10937
     THEN
10938
       viewid := 7;                     -- This is default base view
10939
     END IF;
10940
 
10941
     IF (ispatch IS NULL)
10942
     THEN
10943
       -- Add package to new area
10944
       pk_release.add_package (pvid, viewid, rtagid, userid);
10945
     END IF;
10946
 
10947
     -- Now do post Release Actions
10948
     pk_release.run_post_actions (pvid, rtagid);
10949
 
10950
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10951
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10952
     clean_do_not_ripple(rtagid);
10953
     clean_advisory_ripple(rtagid);
10954
 
10955
     -- Log
10956
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
10957
   END;
10958
 
10959
/*-------------------------------------------------------------------------------------------------------*/
10960
   PROCEDURE auto_make_release (
10961
     pvid          IN   NUMBER,
10962
     rtagid        IN   NUMBER,
10963
     userid        IN   NUMBER,
10964
     vext          IN   package_versions.v_ext%TYPE,
10965
     ssv_ext       IN   package_versions.v_ext%TYPE,
10966
     clonefrompvid IN   NUMBER
10967
   )
10968
   IS
10969
     viewid        NUMBER;
10970
     envtab        NUMBER;
10971
     ispatch       CHAR (1) := NULL;
10972
     buildtype      CHAR (1) := NULL;
10973
   BEGIN
10974
     -- Check if package is patch
10975
     SELECT pv.is_patch, pv.build_type
10976
      INTO ispatch, buildtype
10977
      FROM package_versions pv
10978
      WHERE pv.pv_id = pvid;
10979
 
10980
     IF vext <> ssv_ext
10981
     THEN
10982
       -- Get ViewId
10983
       viewid := get_package_view (clonefrompvid, rtagid);
10984
       -- Remove from current area
10985
       envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
10986
     ELSE
10987
       -- Get ViewId
10988
       viewid := get_package_view (pvid, rtagid);
10989
       -- Remove from current area
10990
       envtab := pk_environment.get_package_area (pvid, rtagid);
10991
     END IF;
10992
 
10993
     -- Make sure that package was in work-in-progress or pending before makeing it release
10994
     -- Exclude patches, ripple builds
10995
     IF (envtab < 0)
10996
     THEN
10997
       -- Not found in work-in-progress or pending
10998
       IF (ispatch IS NULL) AND (buildtype = 'M')
10999
       THEN
11000
         raise_application_error (-20000,
11001
                            'This package cannot be released here.'
11002
                           );
11003
       END IF;
11004
     END IF;
11005
 
11006
     -- Log
11007
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
11008
 
11009
     IF vext <> ssv_ext
11010
     THEN
11011
       IF envtab = 0
11012
       THEN
11013
         -- WORK IN PROGRESS --
11014
         pk_work_in_progress.remove_package (clonefrompvid, rtagid,
11015
                                    userid);
11016
       ELSIF envtab = 1
11017
       THEN
11018
         -- PENDING --
11019
         pk_planned.remove_package (clonefrompvid, rtagid, userid);
11020
       ELSIF envtab = 2
11021
       THEN
11022
         -- RELEASED --
11023
         pk_release.remove_package (clonefrompvid, rtagid, userid);
11024
       END IF;
11025
     ELSE
11026
       IF envtab = 0
11027
       THEN
11028
         -- WORK IN PROGRESS --
11029
         pk_work_in_progress.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
     END IF;
11036
 
11037
     -- Change package state
11038
     pk_package.change_state (pvid, 'Y', userid);
11039
 
11040
     -- Make sure it is valid BASE VIEW
11041
     IF viewid < 1
11042
     THEN
11043
       viewid := 7;                     -- This is default base view
11044
     END IF;
11045
 
11046
     IF (ispatch IS NULL)
11047
     THEN
11048
       -- Add package to new area
11049
       pk_release.add_package (pvid, viewid, rtagid, userid);
11050
     END IF;
11051
 
11052
     -- Now do post Release Actions
11053
     pk_release.run_post_actions (pvid, rtagid);
11054
     -- Now update the Dash_Board Table (DEPRECATED)
11055
     pk_rmapi.update_dash_board (rtagid);
11056
 
11057
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
11058
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
11059
     clean_do_not_ripple(rtagid);
11060
     clean_advisory_ripple(rtagid);
11061
 
11062
     -- Log
11063
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
11064
   END;
11065
 
11066
/*-------------------------------------------------------------------------------------------------------*/
11067
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11068
   IS
11069
     viewid   NUMBER;
11070
     envtab   NUMBER;
11071
   BEGIN
11072
     -- Get ViewId
11073
     --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
11074
     viewid := get_package_view (pvid, rtagid);
11075
     -- Remove from current area
11076
     envtab := pk_environment.get_package_area (pvid, rtagid);
11077
     -- Log
11078
     log_action (pvid,
11079
              'action',
11080
              userid,
11081
              'Start of Make Package UnRelease...'
11082
             );
11083
 
11084
     IF envtab = 2
11085
     THEN
11086
       -- RELEASE AREA --
11087
       pk_release.remove_package (pvid, rtagid, userid);
11088
     ELSIF envtab = 1
11089
     THEN
11090
       -- PENDING --
11091
       pk_planned.remove_package (pvid, rtagid, userid);
11092
     END IF;
11093
 
11094
     -- Change package state
11095
     pk_package.change_state (pvid, 'N', userid);
11096
 
11097
     -- Make sure it is valid BASE VIEW
11098
     IF viewid < 1
11099
     THEN
11100
       viewid := 7;                     -- This is default base view
11101
     END IF;
11102
 
11103
     -- Add package to new area
11104
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11105
     -- Now do post Release Actions
11106
     pk_release.run_post_actions (pvid, rtagid);
11107
     -- Log
11108
     log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
11109
   END;
11110
 
11111
/*-------------------------------------------------------------------------------------------------------*/
11112
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11113
   IS
11114
     viewid     NUMBER;
11115
     ispatch    CHAR (1) := NULL;
11116
     buildtype  CHAR (1) := NULL;
11117
   BEGIN
11118
     -- Check if package is patch
11119
     SELECT pv.is_patch, pv.build_type
11120
      INTO ispatch, buildtype
11121
      FROM package_versions pv
11122
      WHERE pv.pv_id = pvid;
11123
 
11124
     -- Get ViewId
11125
     viewid := get_package_view (pvid, rtagid);
11126
     --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
11127
 
11128
     -- Log
11129
     log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
11130
 
11131
     IF (ispatch IS NULL)
11132
     THEN
11133
       -- Remove from current area
11134
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
11135
       -- Change package state
11136
       pk_package.change_state (pvid, 'P', userid);
11137
       -- Add package to new area
11138
       pk_planned.add_package (pvid, viewid, rtagid, userid);
11139
     END IF;
11140
 
11141
     -- Log
11142
     log_action (pvid, 'action', userid, 'End of Make Package Pending...');
11143
   END;
11144
 
11145
/*-------------------------------------------------------------------------------------------------------*/
11146
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11147
   IS
11148
   BEGIN
11149
     -- Log
11150
     log_action (pvid,
11151
                 'action',
11152
                 userid,
11153
                 'Start of Package Pending Approval...'
11154
                 );
11155
     -- Change package state
11156
     pk_package.change_state (pvid, 'A', userid);
11157
     -- Log
11158
     log_action (pvid, 'action', userid,
11159
                 'End of Package Pending Approval...');
11160
   END;
11161
 
11162
/*-------------------------------------------------------------------------------------------------------*/
11163
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11164
   IS
11165
     viewid   NUMBER;
11166
     operation CHAR;
11167
   BEGIN
11168
     -- Get ViewId
11169
     viewid := get_package_view (pvid, rtagid);
11170
     -- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
11171
 
11172
     -- DEVI-45275
11173
     -- If the package version is an official version that is to be rejected from a merge operation
11174
     -- then find out in order to prevent it being added back to work-in-progress table . This will
11175
     -- be denoted by the operation field in the planned table being A or S
11176
     operation := ' ';
11177
     SELECT
11178
     (CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operation
11179
     FROM planned pl
11180
     WHERE pl.PV_ID = pvid
11181
     AND pl.RTAG_ID = rtagid;
11182
 
11183
     -- Log
11184
     log_action (pvid, 'action', userid, 'Start of Reject Package...');
11185
     -- Remove from current area
11186
     pk_planned.remove_package (pvid, rtagid, userid);
11187
 
11188
     -- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .
11189
     IF operation <> 'A' AND operation <> 'S'
11190
     THEN
11191
     -- Change package state
11192
     pk_package.change_state (pvid, 'R', userid);
11193
     -- Add package to new area
11194
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11195
     ELSE
11196
      log_action (pvid, 'action', userid, 'Rejected Package Merge');
11197
     END IF;
11198
     -- Log
11199
     log_action (pvid, 'action', userid, 'End of Reject Package...');
11200
   END;
11201
 
11202
/*-------------------------------------------------------------------------------------------------------*/
11203
   PROCEDURE change_package_view (
11204
     pvid       IN   NUMBER,
11205
     rtagid     IN   NUMBER,
11206
     newviewid  IN   NUMBER
11207
   )
11208
   IS
11209
     envtab   NUMBER;
11210
   BEGIN
11211
     envtab := pk_environment.get_package_area (pvid, rtagid);
11212
 
11213
     IF envtab = 0
11214
     THEN
11215
       -- WORK IN PROGRESS --
11216
       pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
11217
     ELSIF envtab = 1
11218
     THEN
11219
       -- PENDING --
11220
       pk_planned.change_package_view (pvid, rtagid, newviewid);
11221
     ELSIF envtab = 2
11222
     THEN
11223
       -- RELEASED --
11224
       pk_release.change_package_view (pvid, rtagid, newviewid);
11225
     END IF;
11226
   END;
11227
 
11228
/*-------------------------------------------------------------------------------------------------------*/
11229
   PROCEDURE find_package (
11230
     skeyword     IN      VARCHAR2,
11231
     nrtagid      IN      NUMBER,
11232
     nsearcharea  IN      NUMBER,
11233
     recordset    OUT     typecur
11234
   )
11235
   IS
11236
   BEGIN
11237
     IF nsearcharea = 0
11238
     THEN
11239
       /* Search Work In Progress */
11240
       OPEN recordset FOR
11241
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11242
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11243
                pv.modified_stamp, usr.full_name, usr.user_email
11244
           FROM views vi,
11245
                work_in_progress rc,
11246
                PACKAGES pkg,
11247
                package_versions pv,
11248
                users usr
11249
          WHERE rc.view_id = vi.view_id
11250
            AND rc.pv_id = pv.pv_id
11251
            AND pkg.pkg_id = pv.pkg_id
11252
            AND pv.modifier_id = usr.user_id
11253
            AND rc.rtag_id = nrtagid
11254
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11255
       ORDER BY UPPER (pkg.pkg_name);
11256
     ELSIF nsearcharea = 1
11257
     THEN
11258
       /* Search Pending */
11259
       OPEN recordset FOR
11260
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11261
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11262
                pv.modified_stamp, usr.full_name, usr.user_email
11263
           FROM views vi,
11264
                planned rc,
11265
                PACKAGES pkg,
11266
                package_versions pv,
11267
                users usr
11268
          WHERE rc.view_id = vi.view_id
11269
            AND rc.pv_id = pv.pv_id
11270
            AND pkg.pkg_id = pv.pkg_id
11271
            AND pv.modifier_id = usr.user_id
11272
            AND rc.rtag_id = nrtagid
11273
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11274
       ORDER BY UPPER (pkg.pkg_name);
11275
     ELSIF nsearcharea = 2
11276
     THEN
11277
       /* Search Released */
11278
       OPEN recordset FOR
11279
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11280
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11281
                pv.modified_stamp, usr.full_name, usr.user_email
11282
           FROM views vi,
11283
                release_content rc,
11284
                PACKAGES pkg,
11285
                package_versions pv,
11286
                users usr
11287
          WHERE rc.base_view_id = vi.view_id
11288
            AND rc.pv_id = pv.pv_id
11289
            AND pkg.pkg_id = pv.pkg_id
11290
            AND pv.modifier_id = usr.user_id
11291
            AND rc.rtag_id = nrtagid
11292
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11293
         ORDER BY UPPER (pkg.pkg_name);
11294
     ELSIF nsearcharea = 3
11295
     THEN
11296
       /* Search ALL */
11297
       OPEN recordset FOR
11298
         SELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
11299
                pv.pv_id, pv.pkg_version, pv.comments,
11300
                pv.modified_stamp, usr.full_name, usr.user_email
11301
           FROM views vi,
11302
                environment_view rc,
11303
                PACKAGES pkg,
11304
                package_versions pv,
11305
                users usr
11306
          WHERE rc.view_id = vi.view_id
11307
            AND rc.pv_id = pv.pv_id
11308
            AND pkg.pkg_id = pv.pkg_id
11309
            AND pv.modifier_id = usr.user_id
11310
            AND rc.rtag_id = nrtagid
11311
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11312
         ORDER BY UPPER (pkg.pkg_name);
11313
     END IF;
11314
   END;
11315
 
11316
/*-------------------------------------------------------------------------------------------------------*/
11317
   PROCEDURE find_file (
11318
     skeyword     IN      VARCHAR2,
11319
     nrtagid      IN      NUMBER,
11320
     nsearcharea  IN      NUMBER,
11321
     npagesize    IN      NUMBER,
11322
     recordset    OUT     typecur
11323
   )
11324
   IS
11325
   BEGIN
11326
     IF nsearcharea = 0
11327
     THEN
11328
       /* Search Work In Progress */
11329
       OPEN recordset FOR
11330
         SELECT   qry.*
11331
            FROM (
11332
                 /* File search on Packages */
11333
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11334
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11335
                   FROM work_in_progress rc,
11336
                        PACKAGES pkg,
11337
                        package_versions pv,
11338
                        release_components art
11339
                  WHERE rc.pv_id = art.pv_id
11340
                    AND pv.pkg_id = pkg.pkg_id
11341
                    AND rc.pv_id = pv.pv_id
11342
                    AND rc.rtag_id = nrtagid
11343
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11344
                 UNION ALL
11345
                 /* File search on Products */
11346
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11347
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11348
                   FROM work_in_progress rc,
11349
                        PACKAGES pkg,
11350
                        package_versions pv,
11351
                        product_components art
11352
                  WHERE rc.pv_id = art.pv_id
11353
                    AND pv.pkg_id = pkg.pkg_id
11354
                    AND rc.pv_id = pv.pv_id
11355
                    AND rc.rtag_id = nrtagid
11356
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11357
            WHERE ROWNUM <= npagesize
11358
         ORDER BY UPPER (qry.pkg_name);
11359
     ELSIF nsearcharea = 1
11360
     THEN
11361
       /* Search Pending */
11362
       OPEN recordset FOR
11363
         SELECT   qry.*
11364
            FROM (
11365
                 /* File search on Packages */
11366
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11367
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11368
                   FROM planned rc,
11369
                        PACKAGES pkg,
11370
                        package_versions pv,
11371
                        release_components art
11372
                  WHERE rc.pv_id = art.pv_id
11373
                    AND pv.pkg_id = pkg.pkg_id
11374
                    AND rc.pv_id = pv.pv_id
11375
                    AND rc.rtag_id = nrtagid
11376
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11377
                 UNION ALL
11378
                 /* File search on Products */
11379
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11380
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11381
                   FROM planned rc,
11382
                        PACKAGES pkg,
11383
                        package_versions pv,
11384
                        product_components art
11385
                  WHERE rc.pv_id = art.pv_id
11386
                    AND pv.pkg_id = pkg.pkg_id
11387
                    AND rc.pv_id = pv.pv_id
11388
                    AND rc.rtag_id = nrtagid
11389
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11390
            WHERE ROWNUM <= npagesize
11391
         ORDER BY UPPER (qry.pkg_name);
11392
     ELSIF nsearcharea = 2
11393
     THEN
11394
       /* Search Released */
11395
       OPEN recordset FOR
11396
         SELECT   qry.*
11397
            FROM (
11398
                 /* File search on Packages */
11399
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11400
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11401
                        NULL AS patch_id
11402
                   FROM release_content rc,
11403
                        PACKAGES pkg,
11404
                        package_versions pv,
11405
                        release_components art
11406
                  WHERE rc.pv_id = art.pv_id
11407
                    AND pv.pkg_id = pkg.pkg_id
11408
                    AND rc.pv_id = pv.pv_id
11409
                    AND rc.rtag_id = nrtagid
11410
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11411
                 UNION ALL
11412
                 /* File search on Products */
11413
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11414
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11415
                        NULL AS patch_id
11416
                   FROM release_content rc,
11417
                        PACKAGES pkg,
11418
                        package_versions pv,
11419
                        product_components art
11420
                  WHERE rc.pv_id = art.pv_id
11421
                    AND pv.pkg_id = pkg.pkg_id
11422
                    AND rc.pv_id = pv.pv_id
11423
                    AND rc.rtag_id = nrtagid
11424
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11425
                 UNION ALL
11426
                 /* File search on Patches */
11427
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11428
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11429
                        DECODE (art.file_path,
11430
                                NULL, pp.patch_id,
11431
                                NULL
11432
                                ) AS patch_id
11433
                   FROM release_content rc,
11434
                        PACKAGES pkg,
11435
                        package_versions pv,
11436
                        release_components art,
11437
                        package_patches pp
11438
                  WHERE pv.pv_id = pp.pv_id
11439
                    AND pv.pkg_id = pkg.pkg_id
11440
                    AND rc.rtag_id = nrtagid
11441
                    AND art.pv_id = pp.patch_id
11442
                    AND rc.pv_id = pp.pv_id
11443
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11444
            WHERE ROWNUM <= npagesize
11445
         ORDER BY UPPER (qry.pkg_name);
11446
     ELSIF nsearcharea = 3
11447
     THEN
11448
       /* Search ALL */
11449
       OPEN recordset FOR
11450
         SELECT   qry.*
11451
            FROM (
11452
                 /* File search on Packages */
11453
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11454
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11455
                        NULL AS patch_id
11456
                   FROM environment_view rc,
11457
                        PACKAGES pkg,
11458
                        package_versions pv,
11459
                        release_components art
11460
                  WHERE rc.pv_id = art.pv_id
11461
                    AND pv.pkg_id = pkg.pkg_id
11462
                    AND rc.pv_id = pv.pv_id
11463
                    AND rc.rtag_id = nrtagid
11464
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11465
                 UNION ALL
11466
                 /* File search on Products */
11467
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11468
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11469
                        NULL AS patch_id
11470
                   FROM environment_view rc,
11471
                        PACKAGES pkg,
11472
                        package_versions pv,
11473
                        product_components art
11474
                  WHERE rc.pv_id = art.pv_id
11475
                    AND pv.pkg_id = pkg.pkg_id
11476
                    AND rc.pv_id = pv.pv_id
11477
                    AND rc.rtag_id = nrtagid
11478
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11479
                 UNION ALL
11480
                 /* File search on Patches */
11481
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11482
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11483
                        DECODE (art.file_path,
11484
                                NULL, pp.patch_id,
11485
                                NULL
11486
                               ) AS patch_id
11487
                   FROM release_content rc,
11488
                        PACKAGES pkg,
11489
                        package_versions pv,
11490
                        release_components art,
11491
                        package_patches pp
11492
                  WHERE pv.pv_id = pp.pv_id
11493
                    AND pv.pkg_id = pkg.pkg_id
11494
                    AND rc.rtag_id = nrtagid
11495
                    AND art.pv_id = pp.patch_id
11496
                    AND rc.pv_id = pp.pv_id
11497
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11498
            WHERE ROWNUM <= npagesize
11499
         ORDER BY UPPER (qry.pkg_name);
11500
     END IF;
11501
   END;
11502
 
11503
/*-------------------------------------------------------------------------------------------------------*/
11504
   PROCEDURE get_prodrelease_items (
11505
     rtagid           IN      NUMBER,
11506
     ntruerecordcount OUT     NUMBER,
11507
     recordset        OUT     typecur
11508
   )
11509
   IS
11510
   BEGIN
11511
     -- Get true record count n the number of integration products
11512
     SELECT COUNT (rc.pv_id)
11513
      INTO ntruerecordcount
11514
      FROM release_content rc
11515
      WHERE rc.rtag_id = rtagid;
11516
 
11517
     OPEN recordset FOR
11518
       SELECT vi.view_id, vi.view_name, rel.pkg_state,   --rel.pkg_state,
11519
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11520
              pv.pkg_version, pv.dlocked, pv.pv_description
11521
         FROM release_content rel,
11522
              PACKAGES pkg,
11523
              package_versions pv,
11524
              views vi
11525
        WHERE pv.pkg_id = pkg.pkg_id
11526
          AND rel.pv_id = pv.pv_id
11527
          AND rel.base_view_id = vi.view_id
11528
          AND pv.is_deployable = 'Y'
11529
          AND rtag_id = rtagid
11530
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11531
                                 FROM deployment_manager.os_contents)
11532
          AND rel.product_state IS NULL
11533
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11534
   END;
11535
 
11536
/*-------------------------------------------------------------------------------------------------------*/
11537
   PROCEDURE get_integration_items (
11538
     rtagid           IN      NUMBER,
11539
     ntruerecordcount OUT     NUMBER,
11540
     recordset        OUT     typecur
11541
   )
11542
   IS
11543
   BEGIN
11544
     -- Get true record count n the number of integration products
11545
     SELECT COUNT (rc.pv_id)
11546
      INTO ntruerecordcount
11547
      FROM release_content rc
11548
      WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
11549
 
11550
     OPEN recordset FOR
11551
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11552
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11553
              pv.pkg_version, pv.dlocked, pv.pv_description
11554
         FROM release_content rel,
11555
              PACKAGES pkg,
11556
              package_versions pv,
11557
              views vi
11558
        WHERE pv.pkg_id = pkg.pkg_id
11559
          AND rel.pv_id = pv.pv_id
11560
          AND rel.base_view_id = vi.view_id
11561
          AND pv.is_deployable = 'Y'
11562
          AND rtag_id = rtagid
11563
          AND rel.product_state IN (1, 5)
11564
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11565
   END;
11566
 
11567
/*-------------------------------------------------------------------------------------------------------*/
11568
   PROCEDURE get_test_items (
11569
     rtagid           IN      NUMBER,
11570
     ntruerecordcount OUT     NUMBER,
11571
     recordset        OUT     typecur
11572
   )
11573
   IS
11574
   BEGIN
11575
     -- Get true record count n the number of test products
11576
     SELECT COUNT (rc.pv_id)
11577
      INTO ntruerecordcount
11578
      FROM release_content rc
11579
      WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
11580
 
11581
     OPEN recordset FOR
11582
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11583
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11584
              pv.pkg_version, pv.dlocked, pv.pv_description
11585
         FROM release_content rel,
11586
              PACKAGES pkg,
11587
              package_versions pv,
11588
              views vi
11589
        WHERE pv.pkg_id = pkg.pkg_id
11590
          AND rel.pv_id = pv.pv_id
11591
          AND rel.base_view_id = vi.view_id
11592
          AND pv.is_deployable = 'Y'
11593
          AND rtag_id = rtagid
11594
          AND rel.product_state = 2
11595
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11596
   END;
11597
 
11598
/*-------------------------------------------------------------------------------------------------------*/
11599
   PROCEDURE get_deploy_items (
11600
     rtagid           IN      NUMBER,
11601
     ntruerecordcount OUT     NUMBER,
11602
     recordset        OUT     typecur
11603
   )
11604
   IS
11605
   BEGIN
11606
     -- Get true record count n the number of deploy products
11607
     SELECT COUNT (rc.pv_id)
11608
      INTO ntruerecordcount
11609
      FROM release_content rc
11610
      WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
11611
 
11612
     OPEN recordset FOR
11613
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11614
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11615
              pv.pkg_version, pv.dlocked, pv.pv_description
11616
         FROM release_content rel,
11617
              PACKAGES pkg,
11618
              package_versions pv,
11619
              views vi
11620
        WHERE pv.pkg_id = pkg.pkg_id
11621
          AND rel.pv_id = pv.pv_id
11622
          AND rel.base_view_id = vi.view_id
11623
          AND pv.is_deployable = 'Y'
11624
          AND rtag_id = rtagid
11625
          AND rel.product_state IN (3, 5)
11626
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11627
                                 FROM deployment_manager.os_contents)
11628
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11629
   END;
11630
 
11631
/*-------------------------------------------------------------------------------------------------------*/
11632
   PROCEDURE get_reject_items (
11633
     rtagid           IN      NUMBER,
11634
     ntruerecordcount OUT     NUMBER,
11635
     recordset        OUT     typecur
11636
   )
11637
   IS
11638
   BEGIN
11639
     -- Get true record count n the number of reject products
11640
     SELECT COUNT (rc.pv_id)
11641
       INTO ntruerecordcount
11642
       FROM release_content rc
11643
      WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
11644
 
11645
     OPEN recordset FOR
11646
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11647
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11648
              pv.pkg_version, pv.dlocked, pv.pv_description
11649
         FROM release_content rel,
11650
              PACKAGES pkg,
11651
              package_versions pv,
11652
              views vi
11653
        WHERE pv.pkg_id = pkg.pkg_id
11654
          AND rel.pv_id = pv.pv_id
11655
          AND rel.base_view_id = vi.view_id
11656
          AND pv.is_deployable = 'Y'
11657
          AND rtag_id = rtagid
11658
          AND rel.product_state = 4
11659
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11660
   END;
11661
/*-------------------------------------------------------------------------------------------------------*/
11662
   -- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table
11663
   -- to the release_content table.
11664
 
11665
  PROCEDURE approve_merge (
11666
   PvId    IN NUMBER,
11667
   RtagId  IN NUMBER,
11668
   UserId  IN NUMBER
11669
  )
11670
  IS
11671
   viewid        NUMBER;
11672
   envtab        NUMBER;
11673
   oper         CHAR;
11674
  BEGIN
11675
      -- Get ViewId
11676
     viewid := get_package_view (pvid, rtagid);
11677
 
11678
     -- Get the view tab
11679
     envtab := pk_environment.get_package_area (pvid, rtagid);
11680
 
11681
     -- Make sure that package was in pending before merging it to released
11682
     IF (envtab <> 1)
11683
     THEN
11684
       -- Not found in pending
11685
       raise_application_error (-20000,
11686
                          'This package cannot be released here.'
11687
                         );
11688
     END IF;
11689
 
11690
     -- Log
11691
     log_action (pvid, 'action', userid, 'Start of Package Merge...');
11692
 
11693
     -- Get the planned operation type A=Add, S=Subtract
11694
     SELECT ev.operation INTO oper
11695
       FROM environment_view ev
11696
      WHERE ev.rtag_id = RtagId
11697
        AND ev.pv_id = PvId
11698
        AND (ev.operation = 'A' OR ev.operation = 'S');
11699
 
11700
     -- Remove from Pending
11701
     pk_planned.remove_package (PvId, RtagId, UserId);
11702
 
11703
     -- Either add to the release, or remove from the release as the operation commands
11704
     IF oper = 'A'
11705
     THEN
11706
       pk_release.add_package(PvId, viewId, RtagId, UserId);
11707
 
11708
     ELSIF oper = 'S'
11709
     THEN
11710
       pk_release.remove_package(PvId, RtagId, UserId);
11711
 
11712
       -- Delete old package's pegging info
11713
       DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;
11714
 
11715
       -- Delete old package's advisory ripple info
11716
       DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;
11717
     END IF;
11718
 
11719
     touch_release(RtagId);
11720
 
11721
     -- Log
11722
     log_action (pvid, 'action', userid, 'End of Package Merge...');
11723
  END;
11724
/*-------------------------------------------------------------------------------------------------------*/
11725
END pk_environment;
11726
/
11727
--------------------------------------------------------
11728
--  DDL for Package Body PK_WORK_IN_PROGRESS
11729
--------------------------------------------------------
11730
 
11731
  CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS
11732
 
11733
/*
11734
------------------------------
11735
||  Last Modified:  S.Vukovic
11736
||  Modified Date:  2/May/2005
11737
||  Body Version:   1.0
11738
------------------------------
11739
*/
11740
 
11741
 
11742
/*-------------------------------------------------------------------------------------------------------*/
11743
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11744
 
11745
	oldPvId NUMBER;
11746
	ReleaseLocation VARCHAR2(4000);
11747
	sLocation VARCHAR2(4000) := NULL;
11748
 
11749
 
11750
BEGIN
11751
	/*--------------- Business Rules Here -------------------*/
11752
	/*-------------------------------------------------------*/
11753
 
11754
	BEGIN
11755
		-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
11756
		SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
11757
		  FROM WORK_IN_PROGRESS wip,
11758
		  	   RELEASE_TAGS rt,
11759
			   PROJECTS proj
11760
		 WHERE wip.PV_ID = newPvId
11761
		   AND wip.RTAG_ID = rt.RTAG_ID
11762
		   AND rt.OFFICIAL != 'Y'
11763
		   AND rt.PROJ_ID = proj.PROJ_ID;
11764
 
11765
		EXCEPTION
11766
	    	WHEN NO_DATA_FOUND THEN
11767
	       		sLocation := NULL;
11768
 
11769
	END;	   	   
11770
 
11771
 
11772
 
11773
	IF (sLocation IS NULL)  THEN
11774
 
11775
		-- Add to "Work in progress"
11776
		INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
11777
		VALUES( RtagId, newPvId, ViewId );
11778
 
11779
 
11780
	    /* LOG ACTION */
11781
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11782
		  FROM PROJECTS proj,
11783
		  	   RELEASE_TAGS rt
11784
		 WHERE rt.PROJ_ID = proj.PROJ_ID
11785
		   AND rt.RTAG_ID = RtagId;
11786
 
11787
		Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11788
 
11789
	ELSE
11790
 
11791
		RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
11792
 
11793
	END IF;
11794
 
11795
END;
11796
/*-------------------------------------------------------------------------------------------------------*/
11797
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11798
 
11799
	ReleaseLocation VARCHAR2(4000);
11800
 
11801
BEGIN
11802
 
11803
	/*--------------- Business Rules Here -------------------*/
11804
	/*-------------------------------------------------------*/
11805
 
11806
 
11807
	-- Get release location for logging pusposes
11808
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11809
	  FROM PROJECTS proj,
11810
	  	   RELEASE_TAGS rt
11811
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11812
	   AND rt.RTAG_ID = RtagId;
11813
 
11814
 
11815
	-- Delete from Work In Progress
11816
	DELETE
11817
	  FROM WORK_IN_PROGRESS wip
11818
	 WHERE wip.RTAG_ID = RtagId
11819
	   AND wip.PV_ID = PvId;
11820
 
11821
	Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );
11822
 
11823
 
11824
 
11825
 
11826
END;
11827
/*-------------------------------------------------------------------------------------------------------*/
11828
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS
11829
 
11830
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
11831
	ReleaseLocation VARCHAR2(4000);
11832
	PvId NUMBER;
11833
 
11834
BEGIN
11835
 
11836
	/*--------------- Business Rules Here -------------------*/
11837
	IF (PvIdList IS NULL)
11838
	THEN
11839
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
11840
	END IF;
11841
	/*-------------------------------------------------------*/
11842
 
11843
 
11844
	nIdCollector := IN_LIST_NUMBER ( PvIdList );
11845
 
11846
 
11847
	-- Get release location for logging pusposes
11848
	SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11849
	  FROM PROJECTS proj,
11850
	  	   RELEASE_TAGS rt
11851
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11852
	   AND rt.RTAG_ID = RtagId;
11853
 
11854
 
11855
	FOR i IN 1..nIdCollector.COUNT
11856
	LOOP
11857
		PvId := nIdCollector(i);
11858
 
11859
		-- Delete from Work In Progress
11860
		DELETE
11861
		  FROM WORK_IN_PROGRESS wip
11862
		 WHERE wip.RTAG_ID = RtagId
11863
		   AND wip.PV_ID = PvId;
11864
 
11865
		Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11866
 
11867
	END LOOP;
11868
 
11869
 
11870
END;
11871
/*-------------------------------------------------------------------------------------------------------*/
11872
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
11873
 
11874
	ReturnValue NUMBER;
11875
 
11876
BEGIN
11877
	SELECT wip.VIEW_ID INTO ReturnValue
11878
	  FROM WORK_IN_PROGRESS wip
11879
	 WHERE wip.RTAG_ID = RtagId
11880
	   AND wip.PV_ID = PvId;
11881
 
11882
	RETURN ReturnValue;
11883
END;
11884
/*-------------------------------------------------------------------------------------------------------*/
11885
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
11886
 
11887
	IsBaseView CHAR(1);
11888
 
11889
BEGIN
11890
 
11891
	-- Check if the view is BASE VIEW
11892
	SELECT vi.BASE_VIEW INTO IsBaseView
11893
	  FROM VIEWS vi
11894
	 WHERE vi.VIEW_ID = ViewId;
11895
 
11896
	IF (IsBaseView = 'Y') THEN 
11897
		-- Get Base view content
11898
		OPEN RecordSet FOR
11899
		SELECT 0 AS PKG_STATE,
11900
			   NULL AS DEPRECATED_STATE,
11901
			   pv.pv_id, 
11902
			   pkg.pkg_name, 
11903
			   pv.pkg_version, 
11904
			   pv.dlocked, 
11905
			   pv.pv_description,
11906
			   pv.BUILD_TYPE
11907
		  FROM WORK_IN_PROGRESS rel,
11908
		       packages pkg,
11909
		       package_versions pv
11910
		 WHERE pv.pkg_id = pkg.pkg_id
11911
		   AND rel.pv_id = pv.pv_id
11912
		   AND rel.VIEW_ID = ViewId
11913
		   AND rel.RTAG_ID = RtagId
11914
		 ORDER BY UPPER(pkg.PKG_NAME);
11915
 
11916
 
11917
	ELSE	 
11918
 
11919
	 	-- Get non base view content
11920
		OPEN RecordSet FOR
11921
		SELECT 0 AS PKG_STATE,
11922
			   NULL AS DEPRECATED_STATE,
11923
			   pv.pv_id, 
11924
			   pkg.pkg_name, 
11925
			   pv.pkg_version, 
11926
			   pv.dlocked, 
11927
			   pv.pv_description,
11928
			   pv.BUILD_TYPE
11929
		  FROM WORK_IN_PROGRESS rel,
11930
		       packages pkg,
11931
		       package_versions pv,
11932
			   VIEW_DEF vd
11933
		 WHERE pv.pkg_id = pkg.pkg_id
11934
		   AND rel.pv_id = pv.pv_id
11935
		   AND vd.VIEW_ID = ViewId
11936
		   AND vd.PKG_ID = pv.PKG_ID
11937
		   AND rel.RTAG_ID = RtagId
11938
		 ORDER BY UPPER(pkg.PKG_NAME);
11939
 
11940
 
11941
	END IF;	 	
11942
 
11943
 
11944
END;
11945
/*-------------------------------------------------------------------------------------------------------*/
11946
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
11947
 
11948
BEGIN
11949
 
11950
	UPDATE WORK_IN_PROGRESS wip SET
11951
	wip.VIEW_ID = NewViewId
11952
	WHERE wip.PV_ID = PvId
11953
	  AND wip.RTAG_ID = RtagId;
11954
 
11955
END;
11956
/*-------------------------------------------------------------------------------------------------------*/
11957
END PK_WORK_IN_PROGRESS;
11958
/
11959
--------------------------------------------------------
11960
--  DDL for Package Body PK_ARCHIVE
11961
--------------------------------------------------------
11962
 
11963
  CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE" 
11964
IS
11965
/*
11966
------------------------------
11967
||  Author:  Rupesh Solanki
11968
||  Date:    26 October 2006
11969
||  Version:   1.0
11970
------------------------------
11971
*/
11972
/*---------------------------*/
11973
PROCEDURE populate_packages_table IS
11974
 
11975
BEGIN
11976
		  INSERT INTO archive_manager.PACKAGES
11977
		  (
11978
		  select * from packages where pkg_id not in 
11979
		  		  (select pkg_id from archive_manager.packages)
11980
		  );
11981
 
11982
          INSERT INTO archive_manager.PROCESSES
11983
          (
11984
          select * from processes where proc_id not in 
11985
            (select proc_id from archive_manager.processes)
11986
          );
11987
 
11988
 
11989
 
11990
END;
11991
/*-------------------------------------------------------------------------------------------------------*/
11992
   PROCEDURE populate_archive_data_table (
11993
      nrtagid   IN   release_tags.rtag_id%TYPE
11994
   )
11995
   IS
11996
/*
11997
Reason: To populate the archive_data table with information regarding the
11998
         number of package versions that exist in other releases.
11999
*/
12000
      numcount      NUMBER;
12001
      numusedby     NUMBER;
12002
      numruntime    NUMBER;
12003
 
12004
      /* Get all the package versions in the release */
12005
      CURSOR archive_cur
12006
      IS
12007
         SELECT pv_id
12008
           FROM release_content
12009
          WHERE rtag_id = nrtagid;
12010
 
12011
      archive_rec   archive_cur%ROWTYPE;
12012
   BEGIN
12013
/*--------------- Business Rules Here -------------------*/
12014
/*-------------------------------------------------------*/
12015
      OPEN archive_cur;
12016
 
12017
      FETCH archive_cur
12018
       INTO archive_rec;
12019
 
12020
      WHILE archive_cur%FOUND
12021
      LOOP
12022
        /* How many packages depend on this package version? */
12023
         SELECT COUNT (*)
12024
           INTO numusedby
12025
           FROM package_dependencies
12026
          WHERE dpv_id = archive_rec.pv_id;
12027
 
12028
        /* How many project releases use this package version?  */
12029
         SELECT COUNT (*)
12030
           INTO numcount
12031
           FROM release_content
12032
          WHERE pv_id = archive_rec.pv_id;
12033
 
12034
        /* How many packages have this package version as runtime
12035
        dependency? */
12036
         SELECT COUNT (*)
12037
           INTO numruntime
12038
           FROM runtime_dependencies
12039
          WHERE rtd_id = archive_rec.pv_id;
12040
 
12041
        /* Insert into the archive_data table if they are not runtime dependant
12042
        and package dependant and they exist in that particular release only*/
12043
         IF numusedby = 0 AND numcount = 1 AND numruntime = 0
12044
         THEN
12045
            INSERT INTO archive_data
12046
                        (rtag_id, pv_id
12047
                        )
12048
                 VALUES (nrtagid, archive_rec.pv_id
12049
                        );
12050
         END IF;
12051
 
12052
         FETCH archive_cur
12053
          INTO archive_rec;
12054
      END LOOP;
12055
   END;
12056
 
12057
/*-------------------------------------------------------------------------------------------------------*/
12058
   PROCEDURE migrate_pv_to_archive_schema (
12059
      nrtagid   IN   release_tags.rtag_id%TYPE
12060
   )
12061
   IS
12062
   BEGIN
12063
 
12064
      /* MIGRATION - PACKAGE_VERSIONS */
12065
      INSERT INTO archive_manager.package_versions
12066
         SELECT *
12067
           FROM package_versions
12068
          WHERE pv_id IN (SELECT pv_id
12069
                            FROM archive_data);
12070
 
12071
      /* MIGRATION - PACKAGE_BUILD_ENV */
12072
      INSERT INTO archive_manager.package_build_env
12073
         SELECT *
12074
           FROM package_build_env
12075
          WHERE pv_id IN (SELECT pv_id
12076
                            FROM archive_data);
12077
 
12078
      /* PURGE DATA FROM PACKAGE_BUILD_ENV */
12079
      DELETE FROM package_build_env
12080
            WHERE pv_id IN (SELECT pv_id
12081
                              FROM archive_data);
12082
 
12083
      /* MIGRATION - PACKAGE_BUILD_INFO */
12084
      INSERT INTO archive_manager.package_build_info
12085
         SELECT *
12086
           FROM package_build_info
12087
          WHERE pv_id IN (SELECT pv_id
12088
                            FROM archive_data);
12089
 
12090
      /* PURGE DATA FROM PACKAGE_BUILD_info */
12091
      DELETE FROM package_build_info
12092
            WHERE pv_id IN (SELECT pv_id
12093
                              FROM archive_data);							  
12094
 
12095
      /* MIGRATION - UNIT_TESTS  */
12096
      INSERT INTO archive_manager.unit_tests
12097
         SELECT *
12098
           FROM unit_tests
12099
          WHERE pv_id IN (SELECT pv_id
12100
                            FROM archive_data);
12101
 
12102
      /* PURGE DATA FROM UNIT_TESTS*/
12103
      DELETE FROM unit_tests
12104
            WHERE pv_id IN (SELECT pv_id
12105
                              FROM archive_data);
12106
 
12107
      /* MIGRATION - PACKAGE_PROCESSES */
12108
      INSERT INTO archive_manager.package_processes
12109
         SELECT *
12110
           FROM package_processes
12111
          WHERE pv_id IN (SELECT pv_id
12112
                            FROM archive_data);
12113
 
12114
      /* PURGE DATA FROM PACKAGE_PROCESSES*/
12115
      DELETE FROM package_processes
12116
            WHERE pv_id IN (SELECT pv_id
12117
                              FROM archive_data);
12118
 
12119
      /* MIGRATION - PACKAGE_DEPENDENCIES */
12120
      INSERT INTO archive_manager.package_dependencies
12121
         SELECT *
12122
           FROM package_dependencies
12123
          WHERE pv_id IN (SELECT pv_id
12124
                            FROM archive_data);
12125
 
12126
      /* PURGE DATA FROM PACKAGE_DEPENDENCIES*/
12127
      DELETE FROM package_dependencies
12128
            WHERE pv_id IN (SELECT pv_id
12129
                              FROM archive_data);
12130
 
12131
      /* MIGRATION - CODE_REVIEWS */
12132
      INSERT INTO archive_manager.code_reviews
12133
         SELECT *
12134
           FROM code_reviews
12135
          WHERE pv_id IN (SELECT pv_id
12136
                            FROM archive_data);
12137
 
12138
      /* PURGE DATA FROM CODE_REVIEWS*/
12139
      DELETE FROM code_reviews
12140
            WHERE pv_id IN (SELECT pv_id
12141
                              FROM archive_data);
12142
 
12143
      /* MIGRATION - RUNTIME_DEPENDENCIES*/
12144
      INSERT INTO archive_manager.runtime_dependencies
12145
         SELECT *
12146
           FROM runtime_dependencies
12147
          WHERE pv_id IN (SELECT pv_id
12148
                            FROM archive_data);
12149
 
12150
      /* PURGE DATA FROM RUNTIME_DEPENDENCIES*/
12151
      DELETE FROM runtime_dependencies
12152
            WHERE pv_id IN (SELECT pv_id
12153
                              FROM archive_data);
12154
 
12155
      /* MIGRATION - PACKAGE_DOCUMENTS */
12156
      INSERT INTO archive_manager.package_documents
12157
         SELECT *
12158
           FROM package_documents
12159
          WHERE pv_id IN (SELECT pv_id
12160
                            FROM archive_data);
12161
 
12162
      /* PURGE DATA FROM PACKAGE_DOCUMENTS*/
12163
      DELETE FROM package_documents
12164
            WHERE pv_id IN (SELECT pv_id
12165
                              FROM archive_data);
12166
 
12167
      /* MIGRATION - PACKAGE_PATCHES */
12168
      INSERT INTO archive_manager.package_patches
12169
         SELECT *
12170
           FROM package_patches
12171
          WHERE pv_id IN (SELECT pv_id
12172
                            FROM archive_data);
12173
 
12174
      /* PURGE DATA FROM PACKAGE_PATCHES*/
12175
      DELETE FROM package_patches
12176
            WHERE pv_id IN (SELECT pv_id
12177
                              FROM archive_data);
12178
 
12179
      /* MIGRATION - CQ_ISSUES */
12180
      INSERT INTO archive_manager.cq_issues
12181
         SELECT *
12182
           FROM cq_issues
12183
          WHERE pv_id IN (SELECT pv_id
12184
                            FROM archive_data);
12185
 
12186
      /* PURGE DATA FROM CQ_ISSUES*/
12187
      DELETE FROM cq_issues
12188
            WHERE pv_id IN (SELECT pv_id
12189
                              FROM archive_data);
12190
 
12191
      /* MIGRATION - ADDITIONAL_NOTES */
12192
      INSERT INTO archive_manager.additional_notes
12193
         SELECT *
12194
           FROM additional_notes
12195
          WHERE pv_id IN (SELECT pv_id
12196
                            FROM archive_data);
12197
 
12198
      /* PURGE DATA FROM ADDITIONAL_NOTES*/
12199
      DELETE FROM additional_notes
12200
            WHERE pv_id IN (SELECT pv_id
12201
                              FROM archive_data);
12202
 
12203
      /* MIGRATION - RELEASE_COMPONENTS */
12204
      INSERT INTO archive_manager.release_components
12205
         SELECT *
12206
           FROM release_components
12207
          WHERE pv_id IN (SELECT pv_id
12208
                            FROM archive_data);
12209
 
12210
      /* PURGE DATA FROM RELEASE_COMPONENTS*/
12211
      DELETE FROM release_components
12212
            WHERE pv_id IN (SELECT pv_id
12213
                              FROM archive_data);
12214
 
12215
      /* MIGRATION - IGNORE_WARNINGS */
12216
      INSERT INTO archive_manager.ignore_warnings
12217
         SELECT *
12218
           FROM ignore_warnings
12219
          WHERE pv_id IN (SELECT pv_id
12220
                            FROM archive_data);
12221
 
12222
      /* PURGE DATA FROM IGNORE_WARNINGS*/
12223
      DELETE FROM ignore_warnings
12224
            WHERE pv_id IN (SELECT pv_id
12225
                              FROM archive_data);
12226
 
12227
      /* PURGE DATA FROM WORK_IN_PROGRESS */
12228
      DELETE FROM work_in_progress
12229
            WHERE rtag_id = nrtagid;
12230
 
12231
      /* PURGE DATA FROM PLANNED */
12232
      DELETE FROM planned
12233
            WHERE rtag_id = nrtagid;
12234
 
12235
      /* MIGRATION - JIRA_ISSUES */
12236
      INSERT INTO archive_manager.jira_issues
12237
         SELECT *
12238
           FROM jira_issues
12239
          WHERE pv_id IN (SELECT pv_id
12240
                            FROM archive_data);
12241
 
12242
      /* PURGE DATA FROM JIRA_ISSUES*/
12243
      DELETE FROM jira_issues
12244
            WHERE pv_id IN (SELECT pv_id
12245
                              FROM archive_data);
12246
 
12247
      /* MIGRATION - PRODUCT_COMPONENTS */
12248
      INSERT INTO archive_manager.product_components
12249
         SELECT *
12250
           FROM product_components
12251
          WHERE pv_id IN (SELECT pv_id
12252
                            FROM archive_data);
12253
 
12254
      /* PURGE DATA FROM PRODUCT_COMPONENTS*/
12255
      DELETE FROM product_components
12256
            WHERE pv_id IN (SELECT pv_id
12257
                              FROM archive_data);
12258
 
12259
      /* MIGRATION - ACTION_LOG */
12260
      INSERT INTO archive_manager.action_log
12261
         SELECT *
12262
           FROM action_log
12263
          WHERE pv_id IN (SELECT pv_id
12264
                            FROM archive_data);
12265
 
12266
      /* PURGE DATA FROM ACTION_LOG*/
12267
      DELETE FROM action_log
12268
            WHERE pv_id IN (SELECT pv_id
12269
                              FROM archive_data);
12270
 
12271
 
12272
   END;
12273
 
12274
/*-------------------------------------------------------------------------------------------------------*/
12275
   PROCEDURE migrate_rtag_to_archive_schema (
12276
      nrtagid   IN   release_tags.rtag_id%TYPE
12277
   )
12278
   IS
12279
   BEGIN
12280
      /* MIGRATION - DO_NOT_RIPPLE */
12281
      INSERT INTO archive_manager.do_not_ripple
12282
         SELECT *
12283
           FROM do_not_ripple dnp
12284
          WHERE rtag_id = nrtagid;
12285
 
12286
      /* PURGE DATA FROM DO_NOT_RIPPLE */
12287
      DELETE FROM do_not_ripple
12288
            WHERE rtag_id = nrtagid;
12289
 
12290
      /* MIGRATION - ADVISORY_RIPPLES*/
12291
      INSERT INTO archive_manager.advisory_ripples
12292
         SELECT *
12293
           FROM advisory_ripple dnp
12294
          WHERE rtag_id = nrtagid;
12295
 
12296
      /* PURGE DATA FROM ADVISORY_RIPPLES*/
12297
      DELETE FROM advisory_ripple
12298
            WHERE rtag_id = nrtagid;			
12299
 
12300
      /* MIGRATION - RELEASE_CONTENT */
12301
      INSERT INTO archive_manager.release_content
12302
         SELECT *
12303
           FROM release_content
12304
          WHERE rtag_id = nrtagid;
12305
 
12306
      /* PURGE DATA FROM RELEASE_CONTENT*/
12307
      DELETE FROM release_content
12308
            WHERE rtag_id = nrtagid;
12309
 
12310
      /* MIGRATION - NOTIFICATION_HISTORY */
12311
      INSERT INTO archive_manager.notification_history
12312
         SELECT *
12313
           FROM notification_history
12314
          WHERE rtag_id = nrtagid;
12315
 
12316
      /* PURGE DATA FROM NOTIFICATION_HISTORY*/
12317
      DELETE FROM notification_history
12318
            WHERE rtag_id = nrtagid;
12319
 
12320
      /* MIGRATION - BUILD_ORDER   */
12321
      INSERT INTO archive_manager.build_order
12322
         SELECT *
12323
           FROM build_order
12324
          WHERE rtag_id = nrtagid;
12325
 
12326
      /* PURGE DATA FROM BUILD_ORDER*/
12327
      DELETE FROM build_order
12328
            WHERE rtag_id = nrtagid;
12329
 
12330
      /* MIGRATION - PROJECT_ACTION_LOG */
12331
      INSERT INTO archive_manager.project_action_log
12332
         SELECT *
12333
           FROM project_action_log
12334
          WHERE rtag_id = nrtagid;
12335
 
12336
      /* PURGE DATA FROM PROJECT_ACTION_LOG */
12337
      DELETE FROM project_action_log
12338
            WHERE rtag_id = nrtagid;
12339
 
12340
      /* MIGRATION - DEPRECATED_PACKAGES */
12341
      INSERT INTO archive_manager.deprecated_packages
12342
         SELECT *
12343
           FROM deprecated_packages
12344
          WHERE rtag_id = nrtagid;
12345
 
12346
      /* PURGE DATA FROM DEPRECATED_PACKAGES */
12347
      DELETE FROM deprecated_packages
12348
            WHERE rtag_id = nrtagid;
12349
 
12350
      /* MIGRATION - RELEASE_TAGS */
12351
      INSERT INTO archive_manager.release_tags
12352
         SELECT *
12353
           FROM release_tags
12354
          WHERE rtag_id = nrtagid;
12355
 
12356
 
12357
      /* PURGE DATA FROM PACKAGE_VERSIONS*/
12358
      DELETE FROM package_versions
12359
            WHERE pv_id IN (SELECT pv_id
12360
                              FROM archive_data);
12361
 
12362
 
12363
   END;
12364
 
12365
/*-------------------------------------------------------------------------------------------------------*/
12366
   PROCEDURE clean_up_archive_data_table (
12367
      nrtagid   IN   release_tags.rtag_id%TYPE
12368
   )
12369
   IS
12370
   BEGIN
12371
      /* Cleaning Up The Archive_Data Table */
12372
      DELETE FROM archive_data
12373
            WHERE rtag_id = nrtagid;
12374
   END;
12375
 
12376
/*-------------------------------------------------------------------------------------------------------*/
12377
   PROCEDURE write_action_log (
12378
      nuserid   IN   NUMBER,
12379
      nrtagid   IN   release_tags.rtag_id%TYPE
12380
   )
12381
   IS
12382
   BEGIN
12383
      /* Write Into Archive_Action_Log Table */
12384
      INSERT INTO archive_action_log
12385
                  (user_id, date_time_stamp, rtag_id,
12386
                   description
12387
                  )
12388
           VALUES (nuserid, ora_sysdatetime, nrtagid,
12389
                   'Release has been archived to the ARCHIVE_MANAGER schema'
12390
                  );
12391
   END;
12392
/*-------------------------------------------------------------------------------------------------------*/
12393
END pk_archive; 
12394
/
12395
--------------------------------------------------------
12396
--  DDL for Package Body PK_PACKAGE_TEST
12397
--------------------------------------------------------
12398
 
12399
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE_TEST" 
12400
IS
12401
/*
12402
------------------------------
12403
||  Last Modified:  R. Solanki
12404
||  Modified Date:  09/03/2006
12405
||  Body Version:   1.7
12406
------------------------------
12407
*/
12408
 
12409
   /*-------------------------------------------------------------------------------------------------------*/
12410
   PROCEDURE new_version (
12411
      nlastpvid                   IN       NUMBER,
12412
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
12413
      cbuildtype                  IN       CHAR,
12414
      nsettopvid                  IN       NUMBER DEFAULT NULL,
12415
      nrtagid                     IN       NUMBER,
12416
      nuserid                     IN       NUMBER,
12417
      enumissues_state_imported   IN       NUMBER,
12418
      returnpvid                  OUT      NUMBER
12419
   )
12420
   IS
12421
      origpkg_id                   package_versions.pkg_id%TYPE;
12422
      origdlocked                  package_versions.dlocked%TYPE;
12423
      ssv_mm                       package_versions.v_mm%TYPE;
12424
      ssv_nmm                      package_versions.v_nmm%TYPE;
12425
      ssv_ext                      package_versions.v_ext%TYPE;
12426
      spackageversion              VARCHAR2 (4000);
12427
      nissuestypes                 NUMBER;
12428
      nviewid                      NUMBER;
12429
      reccount                     NUMBER;
12430
      isreleased                   package_versions.dlocked%TYPE       := 'N';
12431
      slabel                       VARCHAR2 (4000)                    := NULL;
12432
 
12433
      CURSOR package_versions_cur
12434
      IS
12435
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
12436
           FROM package_versions pv
12437
          WHERE pv.pkg_version = snewpkgversion
12438
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
12439
                                         FROM package_versions origpv
12440
                                        WHERE origpv.pv_id = nlastpvid);
12441
 
12442
      package_versions_rec         package_versions_cur%ROWTYPE;
12443
 
12444
      CURSOR clone_package_versions_cur
12445
      IS
12446
         SELECT DISTINCT pkg_id, dlocked
12447
                    FROM package_versions
12448
                   WHERE pv_id = nlastpvid;
12449
 
12450
      clone_package_versions_rec   clone_package_versions_cur%ROWTYPE;
12451
   BEGIN
12452
      spackageversion := snewpkgversion;
12453
 
12454
      IF nsettopvid IS NULL
12455
      THEN
12456
         -- SetToPv_id is not supplied, hence proceed.
12457
 
12458
         /* ---------------------------------------------------- */
12459
/* Find id package_version exists                       */
12460
/* ---------------------------------------------------- */
12461
         OPEN package_versions_cur;
12462
 
12463
         FETCH package_versions_cur
12464
          INTO package_versions_rec;
12465
 
12466
         IF package_versions_cur%NOTFOUND
12467
         THEN
12468
            ---  Create brand new package ---
12469
            SELECT seq_pv_id.NEXTVAL
12470
              INTO returnpvid
12471
              FROM DUAL;
12472
 
12473
            -- Split Version to get extention + other
12474
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
12475
 
12476
            -- Get previous package to clone from
12477
            OPEN clone_package_versions_cur;
12478
 
12479
            FETCH clone_package_versions_cur
12480
             INTO clone_package_versions_rec;
12481
 
12482
            origpkg_id := clone_package_versions_rec.pkg_id;
12483
            origdlocked := clone_package_versions_rec.dlocked;
12484
 
12485
            CLOSE clone_package_versions_cur;
12486
 
12487
            -- Automated built config
12488
            IF (cbuildtype = 'A')
12489
            THEN
12490
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
12491
                                    -- Make sure that version is still unique
12492
            END IF;
12493
 
12494
            -- Clone Package Version Details --
12495
            INSERT INTO package_versions
12496
                        (pv_id, pkg_id, pkg_version, dlocked, created_stamp,
12497
                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
12498
                         v_ext, src_path, pv_description, pv_overview,
12499
                         last_pv_id, owner_id, is_deployable,
12500
                         is_build_env_required, build_type, bs_id, is_autobuildable)
12501
               SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
12502
                      spackageversion AS pkg_version, 'N' AS dlocked,
12503
                      ora_sysdate AS created_stamp, nuserid AS creator_id,
12504
                      ora_sysdatetime AS modified_stamp,
12505
                      nuserid AS modifier_id, ssv_mm AS v_mm,
12506
                      ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
12507
                      pv.pv_description, pv.pv_overview,
12508
                      nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
12509
                      pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable
12510
                 FROM package_versions pv
12511
                WHERE pv.pv_id = nlastpvid;
12512
 
12513
            -- Set Issues Type for cloning ---
12514
            IF origdlocked = 'Y'
12515
            THEN
12516
               nissuestypes := enumissues_state_imported;
12517
            ELSE
12518
               nissuestypes := NULL;
12519
            END IF;
12520
 
12521
            -- Update Label for automated built
12522
            IF (cbuildtype = 'A')
12523
            THEN
12524
               slabel := get_automated_label (returnpvid);
12525
 
12526
               UPDATE package_versions pv
12527
                  SET pv.pkg_label = slabel
12528
                WHERE pv.pv_id = returnpvid;
12529
            END IF;
12530
 
12531
            basic_clone (nlastpvid,
12532
                         returnpvid,
12533
                         nrtagid,
12534
                         nuserid,
12535
                         origpkg_id,
12536
                         nissuestypes
12537
                        );
12538
         ELSE
12539
            --- Package already exists, hence reuse ---
12540
            returnpvid := package_versions_rec.pv_id;
12541
            isreleased := package_versions_rec.dlocked;
12542
         END IF;
12543
 
12544
         CLOSE package_versions_cur;
12545
      ELSE
12546
         returnpvid := nsettopvid;
12547
      END IF;
12548
   END new_version;
12549
 
12550
/*-------------------------------------------------------------------------------------------------------*/
12551
   PROCEDURE change_state (
12552
      pvid       IN   NUMBER,
12553
      newstate   IN   package_versions.dlocked%TYPE,
12554
      userid     IN   NUMBER
12555
   )
12556
   IS
12557
   BEGIN
12558
      -- Set package in Released mode
12559
      UPDATE package_versions pv
12560
         SET pv.dlocked = newstate,
12561
             pv.modified_stamp = ora_sysdatetime,
12562
             pv.modifier_id = userid
12563
       WHERE pv.pv_id = pvid;
12564
 
12565
      -- Log action --
12566
      IF newstate = 'Y'
12567
      THEN
12568
         -- RELEASED --
12569
         log_action (pvid,
12570
                     'makeofficial',
12571
                     userid,
12572
                     'Package state change to: Released'
12573
                    );
12574
      ELSIF newstate = 'N'
12575
      THEN
12576
         -- UNLOCKED --
12577
         log_action (pvid,
12578
                     'makeunofficial',
12579
                     userid,
12580
                     'Package state change to: Ulocked'
12581
                    );
12582
      ELSIF newstate = 'P'
12583
      THEN
12584
         -- PENDING APPROVAL --
12585
         log_action (pvid,
12586
                     'add_to_planned',
12587
                     userid,
12588
                     'Package state change to: Pending Approval'
12589
                    );
12590
      ELSIF newstate = 'R'
12591
      THEN
12592
         -- REJECTED --
12593
         log_action (pvid,
12594
                     'reject_package',
12595
                     userid,
12596
                     'Package state change to: Rejected'
12597
                    );
12598
      ELSIF newstate = 'A'
12599
      THEN
12600
         -- APPROVED --
12601
         log_action (pvid,
12602
                     'approve_package',
12603
                     userid,
12604
                     'Package state change to: Approved'
12605
                    );
12606
      END IF;
12607
   END;
12608
 
12609
/*-------------------------------------------------------------------------------------------------------*/
12610
   PROCEDURE destroy_package (
12611
      pvid               IN       NUMBER,
12612
      overridewarnings   IN       CHAR DEFAULT 'N',
12613
      problemstring      OUT      VARCHAR2
12614
   )
12615
   IS
12616
      LOCKED     CHAR;
12617
      pkgid      NUMBER;
12618
      ROWCOUNT   NUMBER;
12619
   BEGIN
12620
      /*
12621
      || This will destroy all package details from database.
12622
      || It will only be used to remove unwanted work in progress packages,
12623
      || or mestaken versions
12624
      */
12625
 
12626
      /*--------------- Business Rules Here -------------------*/
12627
      problemstring := NULL;
12628
 
12629
      IF overridewarnings = 'N'
12630
      THEN
12631
         -- Package must not be official
12632
         SELECT pv.dlocked
12633
           INTO LOCKED
12634
           FROM package_versions pv
12635
          WHERE pv.pv_id = pvid;
12636
 
12637
         IF LOCKED = 'Y'
12638
         THEN
12639
            problemstring :=
12640
                  problemstring
12641
               || '- Package is locked and released.'
12642
               || UTL_TCP.crlf;
12643
         END IF;
12644
 
12645
         -- Cannot remove if used in BOMs
12646
         SELECT COUNT (osc.prod_id)
12647
           INTO ROWCOUNT
12648
           FROM deployment_manager.os_contents osc
12649
          WHERE osc.prod_id = pvid;
12650
 
12651
         IF ROWCOUNT > 0
12652
         THEN
12653
            problemstring :=
12654
                  problemstring
12655
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
12656
               || UTL_TCP.crlf;
12657
         END IF;
12658
 
12659
         -- Cannot remove if Referenced as build dependency
12660
         SELECT COUNT (dep.pv_id)
12661
           INTO ROWCOUNT
12662
           FROM package_dependencies dep
12663
          WHERE dep.dpv_id = pvid;
12664
 
12665
         IF ROWCOUNT > 0
12666
         THEN
12667
            problemstring :=
12668
                  problemstring
12669
               || '- Package is referenced by other package as build dependency.'
12670
               || UTL_TCP.crlf;
12671
         END IF;
12672
 
12673
         -- Cannot remove if Referenced as runtime dependency
12674
         SELECT COUNT (rd.pv_id)
12675
           INTO ROWCOUNT
12676
           FROM runtime_dependencies rd
12677
          WHERE rd.rtd_id = pvid;
12678
 
12679
         IF ROWCOUNT > 0
12680
         THEN
12681
            problemstring :=
12682
                  problemstring
12683
               || '- Package is referenced by other package as runtime dependency.'
12684
               || UTL_TCP.crlf;
12685
         END IF;
12686
 
12687
         -- Cannot remove if Referenced as patch
12688
         SELECT COUNT (pp.pv_id)
12689
           INTO ROWCOUNT
12690
           FROM package_patches pp
12691
          WHERE pp.patch_id = pvid;
12692
 
12693
         IF ROWCOUNT > 0
12694
         THEN
12695
            problemstring :=
12696
                  problemstring
12697
               || '- Package is used as patch by other package.'
12698
               || UTL_TCP.crlf;
12699
         END IF;
12700
      END IF;
12701
 
12702
/*-------------------------------------------------------*/
12703
      IF (problemstring IS NULL)
12704
      THEN
12705
         --- Remove From Work in Progress
12706
         DELETE FROM work_in_progress wip
12707
               WHERE wip.pv_id = pvid;
12708
 
12709
         --- Remove From Pending
12710
         DELETE FROM planned pl
12711
               WHERE pl.pv_id = pvid;
12712
 
12713
         --- Remove From Released area
12714
         DELETE FROM release_content rc
12715
               WHERE rc.pv_id = pvid;
12716
 
12717
         ---Remove From Package Processes
12718
         DELETE FROM package_processes pp
12719
               WHERE pp.pv_id = pvid;
12720
 
12721
         --- Remove Dependencies
12722
         DELETE FROM package_dependencies dep
12723
               WHERE dep.pv_id = pvid;
12724
 
12725
         DELETE FROM package_dependencies dep
12726
               WHERE dep.dpv_id = pvid;
12727
 
12728
         --- Remove Runtime dependencies
12729
         DELETE FROM runtime_dependencies rtd
12730
               WHERE rtd.pv_id = pvid;
12731
 
12732
         DELETE FROM runtime_dependencies rtd
12733
               WHERE rtd.rtd_id = pvid;
12734
 
12735
         --- Remove components
12736
         DELETE FROM product_components pc
12737
               WHERE pc.pv_id = pvid;
12738
 
12739
         DELETE FROM release_components rc
12740
               WHERE rc.pv_id = pvid;
12741
 
12742
         --- Remove From Notification History
12743
         DELETE FROM notification_history nh
12744
               WHERE nh.pv_id = pvid;
12745
 
12746
         --- Remove From Ignore Warnings
12747
         DELETE FROM ignore_warnings iw
12748
               WHERE iw.pv_id = pvid;
12749
 
12750
         --- Remove From Additional Notes
12751
         DELETE FROM additional_notes an
12752
               WHERE an.pv_id = pvid;
12753
 
12754
         --- Remove From CQ Issues
12755
         DELETE FROM cq_issues cq
12756
               WHERE cq.pv_id = pvid;
12757
 
12758
         --- Remove from Package Patches
12759
         DELETE FROM package_patches pp
12760
               WHERE pp.pv_id = pvid;
12761
 
12762
         DELETE FROM package_patches pp
12763
               WHERE pp.patch_id = pvid;
12764
 
12765
         --- Remove From Package Documents
12766
         DELETE FROM package_documents pd
12767
               WHERE pd.pv_id = pvid;
12768
 
12769
         --- Remove from Code Review
12770
         DELETE FROM code_reviews cr
12771
               WHERE cr.pv_id = pvid;
12772
 
12773
         --- Remove from Unit Tests
12774
         DELETE FROM unit_tests ut
12775
               WHERE ut.pv_id = pvid;
12776
 
12777
         --- Remove from Package BuildEnv
12778
         DELETE FROM package_build_env pbe
12779
               WHERE pbe.pv_id = pvid;
12780
 
12781
		 --- Remove from Package Build Info
12782
		 DELETE FROM package_build_info pbi
12783
		 	   WHERE pbi.pv_id = pvid;    
12784
 
12785
 
12786
         --- Remove from Build Order
12787
         DELETE FROM build_order bo
12788
               WHERE bo.pv_id = pvid;
12789
 
12790
         --- Remove from Note Manager
12791
         DELETE FROM note_manager nm
12792
               WHERE nm.nid = pvid;
12793
 
12794
         --- Remove from Action log
12795
         DELETE FROM action_log al
12796
               WHERE al.pv_id = pvid;
12797
 
12798
		 --- Remove from Do Not Ripple 
12799
		 DELETE FROM DO_NOT_RIPPLE dnr
12800
		 	   WHERE dnr.PV_ID = pvid;
12801
 
12802
		 --- Remove from Jira Issues 
12803
		 DELETE FROM JIRA_ISSUES jira
12804
		 	   WHERE jira.PV_ID = pvid;
12805
 
12806
         --- Finally Remove From Package Versions
12807
         --- Get Package name
12808
         SELECT pv.pkg_id
12809
           INTO pkgid
12810
           FROM package_versions pv
12811
          WHERE pv.pv_id = pvid;
12812
 
12813
         DELETE FROM package_versions pv
12814
               WHERE pv.pv_id = pvid;
12815
 
12816
         --- Remove package name if not used any more
12817
         SELECT COUNT (pv.pv_id)
12818
           INTO ROWCOUNT
12819
           FROM package_versions pv
12820
          WHERE pv.pkg_id = pkgid;
12821
 
12822
         IF ROWCOUNT < 1
12823
         THEN
12824
            DELETE FROM PACKAGES pkg
12825
                  WHERE pkg.pkg_id = pkgid;
12826
         END IF;
12827
      END IF;
12828
   END;
12829
 
12830
/*-------------------------------------------------------------------------------------------------------*/
12831
   PROCEDURE new_patch (
12832
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
12833
      nparentpvid        IN       NUMBER,
12834
      spatchidlist       IN       VARCHAR2,
12835
      nuserid            IN       NUMBER,
12836
      returnpatchid      OUT      NUMBER
12837
   )
12838
   IS
12839
      patchpv_id           NUMBER;
12840
      parpkg_id            NUMBER;
12841
      lastinstallorder     NUMBER;
12842
      ispatchdlocked       package_versions.dlocked%TYPE;
12843
      ssv_mm               package_versions.v_mm%TYPE;
12844
      ssv_nmm              package_versions.v_nmm%TYPE;
12845
      ssv_ext              package_versions.v_ext%TYPE;
12846
      opatchdepcollector   relmgr_number_tab_t      := relmgr_number_tab_t
12847
                                                                          ();
12848
 
12849
      CURSOR parent_cur
12850
      IS
12851
         SELECT pv.*, pkg.pkg_name
12852
           FROM package_versions pv, PACKAGES pkg
12853
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
12854
 
12855
      parent_rec           parent_cur%ROWTYPE;
12856
 
12857
      CURSOR patch_cur
12858
      IS
12859
         SELECT pv.*, pg.pkg_name
12860
           FROM package_versions pv, PACKAGES pg
12861
          WHERE pv.pkg_id = parpkg_id
12862
            AND pv.pkg_version = snewpatchversion
12863
            AND pv.pkg_id = pg.pkg_id;
12864
 
12865
      patch_rec            patch_cur%ROWTYPE;
12866
 
12867
      CURSOR releases_cur
12868
      IS
12869
         SELECT rc.pv_id
12870
           FROM release_content rc
12871
          WHERE rc.pv_id = patch_rec.pv_id;
12872
 
12873
      releases_rec         releases_cur%ROWTYPE;
12874
   BEGIN
12875
      -- Get Last Install Order
12876
      SELECT COUNT (*)
12877
        INTO lastinstallorder
12878
        FROM package_patches pp
12879
       WHERE pp.pv_id = nparentpvid;
12880
 
12881
      -- Get parent details
12882
      OPEN parent_cur;
12883
 
12884
      FETCH parent_cur
12885
       INTO parent_rec;
12886
 
12887
      parpkg_id := parent_rec.pkg_id;
12888
 
12889
      -- Find if patch exists in database
12890
      OPEN patch_cur;
12891
 
12892
      FETCH patch_cur
12893
       INTO patch_rec;
12894
 
12895
      -- Parent must be official
12896
      IF parent_rec.dlocked = 'Y'
12897
      THEN
12898
         IF patch_cur%NOTFOUND
12899
         THEN
12900
            ispatchdlocked := 'N';
12901
 
12902
            -- Create new patch version --
12903
            SELECT seq_pv_id.NEXTVAL
12904
              INTO patchpv_id
12905
              FROM DUAL;
12906
 
12907
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
12908
 
12909
            INSERT INTO package_versions
12910
                        (pv_id, pkg_id, pkg_version,
12911
                         dlocked, created_stamp, creator_id,
12912
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
12913
                         src_path,
12914
                         pv_description,
12915
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
12916
						 is_autobuildable
12917
                        )
12918
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
12919
                         ispatchdlocked, ora_sysdate, nuserid,
12920
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
12921
                         parent_rec.src_path,
12922
                            'This is a patch to '
12923
                         || parent_rec.pkg_name
12924
                         || ' '
12925
                         || parent_rec.pkg_version,
12926
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N'
12927
                        );
12928
 
12929
            INSERT INTO package_patches
12930
                        (pv_id, patch_id, install_order)
12931
               (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12932
                       lastinstallorder + 1 AS install_order
12933
                  FROM package_versions pv
12934
                 WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12935
 
12936
            /* LOG ACTION */
12937
            log_action (patchpv_id,
12938
                        'new_version',
12939
                        nuserid,
12940
                        'Patch version created: ' || snewpatchversion
12941
                       );
12942
            log_action (nparentpvid,
12943
                        'patch_add',
12944
                        nuserid,
12945
                        'New patch created and attached: ' || snewpatchversion
12946
                       );
12947
         ELSE
12948
            patchpv_id := patch_rec.pv_id;
12949
            ispatchdlocked := patch_rec.dlocked;
12950
 
12951
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
12952
            OPEN releases_cur;
12953
 
12954
            FETCH releases_cur
12955
             INTO releases_rec;
12956
 
12957
            IF releases_cur%NOTFOUND
12958
            THEN
12959
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
12960
               UPDATE package_versions
12961
                  SET is_patch = 'Y'
12962
                WHERE pv_id = patchpv_id;
12963
 
12964
               INSERT INTO package_patches
12965
                           (pv_id, patch_id, install_order)
12966
                  (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12967
                          lastinstallorder + 1 AS install_order
12968
                     FROM package_versions pv
12969
                    WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12970
            END IF;
12971
 
12972
            CLOSE releases_cur;
12973
 
12974
            /* LOG ACTION */
12975
            log_action (nparentpvid,
12976
                        'patch_add',
12977
                        nuserid,
12978
                           'Patch version was found and attached: '
12979
                        || snewpatchversion
12980
                       );
12981
         END IF;
12982
      END IF;
12983
 
12984
      /* Create Patch Dependencies */
12985
      opatchdepcollector := in_list_number (spatchidlist);
12986
 
12987
      -- Make sure patch is unofficial before altering its dependencies
12988
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
12989
      THEN
12990
         -- Delete Existing Dependencies
12991
         DELETE FROM package_dependencies dep
12992
               WHERE dep.pv_id = patchpv_id;
12993
 
12994
         -- Insert new dependencies
12995
         INSERT INTO package_dependencies
12996
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
12997
            SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
12998
                   parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
12999
                   'L' AS build_type
13000
              FROM package_versions pv
13001
             WHERE pv.pv_id IN (
13002
                      SELECT *
13003
                        FROM TABLE
13004
                                (CAST
13005
                                    (opatchdepcollector AS relmgr_number_tab_t)
13006
                                ));
13007
      END IF;
13008
 
13009
      -- Return patch_id
13010
      returnpatchid := patchpv_id;
13011
 
13012
      CLOSE parent_cur;
13013
 
13014
      CLOSE patch_cur;
13015
   EXCEPTION
13016
      WHEN DUP_VAL_ON_INDEX
13017
      THEN
13018
         raise_application_error (-20000,
13019
                                     'Patch version '
13020
                                  || snewpatchversion
13021
                                  || ' already exist.'
13022
                                 );
13023
   END;
13024
 
13025
/*-------------------------------------------------------------------------------------------------------*/
13026
   PROCEDURE obsolete_patch (
13027
      patchid            IN   NUMBER,
13028
      isobsolete         IN   CHAR,
13029
      obsoletecomments   IN   VARCHAR2,
13030
      userid             IN   NUMBER
13031
   )
13032
   IS
13033
   BEGIN
13034
      -- Update patch
13035
      UPDATE package_versions pv
13036
         SET pv.is_obsolete = isobsolete,
13037
             pv.obsolete_comments = obsoletecomments
13038
       WHERE pv.pv_id = patchid;
13039
 
13040
      /*
13041
      -- Update patch children
13042
      UPDATE PACKAGE_VERSIONS pv SET
13043
      pv.IS_OBSOLETE = IsObsolete,
13044
      pv.OBSOLETE_COMMENTS = ObsoleteComments
13045
      WHERE pv.PV_ID IN (
13046
                     SELECT DISTINCT dep.DPV_ID
13047
                       FROM PACKAGE_DEPENDENCIES dep
13048
                      WHERE dep.PV_ID = PatchId
13049
                     );
13050
 
13051
 
13052
      -- Update patch parent
13053
      UPDATE PACKAGE_VERSIONS pv SET
13054
      pv.IS_OBSOLETE = IsObsolete,
13055
      pv.OBSOLETE_COMMENTS = ObsoleteComments
13056
      WHERE pv.PV_ID IN (
13057
                     SELECT DISTINCT dep.PV_ID
13058
                       FROM PACKAGE_DEPENDENCIES dep
13059
                      WHERE dep.DPV_ID = PatchId
13060
                     );
13061
 
13062
         */
13063
 
13064
      /* LOG ACTION */
13065
      IF isobsolete IS NOT NULL
13066
      THEN
13067
         log_action (patchid,
13068
                     'patch_obsolete',
13069
                     userid,
13070
                     'Obsolete patch. ' || obsoletecomments
13071
                    );
13072
      ELSE
13073
         log_action (patchid,
13074
                     'patch_obsolete',
13075
                     userid,
13076
                     'Undo patch obsolete.'
13077
                    );
13078
      END IF;
13079
   END;
13080
 
13081
/*-------------------------------------------------------------------------------------------------------*/
13082
   PROCEDURE obsolete_patches (
13083
      spatchidlist       IN   VARCHAR2,
13084
      isobsolete         IN   CHAR,
13085
      obsoletecomments   IN   VARCHAR2,
13086
      userid             IN   NUMBER
13087
   )
13088
   IS
13089
   BEGIN
13090
      /*--------------- Business Rules Here -------------------*/
13091
      IF spatchidlist IS NULL
13092
      THEN
13093
         raise_application_error (-20000,
13094
                                  'Please select one or more Patches.'
13095
                                 );
13096
      END IF;
13097
 
13098
/*-------------------------------------------------------*/
13099
 
13100
      -- Update patch
13101
      UPDATE package_versions pv
13102
         SET pv.is_obsolete = isobsolete,
13103
             pv.obsolete_comments = obsoletecomments
13104
       WHERE pv.pv_id IN (
13105
                SELECT *
13106
                  FROM THE
13107
                          (SELECT CAST
13108
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
13109
                                     )
13110
                             FROM DUAL
13111
                          ));
13112
   /*
13113
   -- Update patch children
13114
   UPDATE PACKAGE_VERSIONS pv SET
13115
   pv.IS_OBSOLETE = IsObsolete,
13116
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13117
   WHERE pv.PV_ID IN (
13118
                  SELECT DISTINCT dep.DPV_ID
13119
                    FROM PACKAGE_DEPENDENCIES dep
13120
                   WHERE dep.PV_ID = PatchId
13121
                  );
13122
 
13123
 
13124
   -- Update patch parent
13125
   UPDATE PACKAGE_VERSIONS pv SET
13126
   pv.IS_OBSOLETE = IsObsolete,
13127
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13128
   WHERE pv.PV_ID IN (
13129
                  SELECT DISTINCT dep.PV_ID
13130
                    FROM PACKAGE_DEPENDENCIES dep
13131
                   WHERE dep.DPV_ID = PatchId
13132
                  );
13133
 
13134
      */
13135
 
13136
   /* LOG ACTION
13137
   IF IsObsolete IS NOT NULL THEN
13138
         Log_Action ( PatchId, 'patch_obsolete', UserId,
13139
                  'Obsolete patch. '|| ObsoleteComments );
13140
   ELSE
13141
      Log_Action ( PatchId, 'patch_obsolete', UserId,
13142
                  'Undo patch obsolete.' );
13143
   END IF;  */
13144
   END;
13145
 
13146
/*-------------------------------------------------------------------------------------------------------*/
13147
   PROCEDURE add_process (
13148
      nprocid         IN   processes.proc_id%TYPE,
13149
      shealthtag      IN   processes.proc_name%TYPE,
13150
      sprocdesc       IN   processes.proc_description%TYPE,
13151
      scmdinterface   IN   processes.run_as%TYPE,
13152
      spkgowner       IN   processes.pkg_owner%TYPE,
13153
      sisinterface    IN   processes.is_interface%TYPE,
13154
      npvid           IN   package_processes.pv_id%TYPE,
13155
      nuserid         IN   NUMBER
13156
   )
13157
   IS
13158
      pkgname   VARCHAR2 (100);
13159
/*Rupesh Release on 17/05/2006*/
13160
   BEGIN
13161
      INSERT INTO processes
13162
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
13163
                   is_interface
13164
                  )
13165
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
13166
                   sisinterface
13167
                  );
13168
 
13169
      pk_package.add_package_process (nprocid, npvid, nuserid);
13170
   END;
13171
 
13172
/*-------------------------------------------------------------------------------------------------------*/
13173
   PROCEDURE add_package_process (
13174
      nprocidlist   IN   VARCHAR2,
13175
      npvid         IN   package_processes.pv_id%TYPE,
13176
      nuserid       IN   NUMBER
13177
   )
13178
   IS
13179
      processname   VARCHAR2 (4000);
13180
 
13181
/*Rupesh Release on 17/05/2006*/
13182
      CURSOR proc_cur
13183
      IS
13184
         SELECT prc.proc_id
13185
           FROM processes prc
13186
          WHERE prc.proc_id IN (
13187
                   SELECT *
13188
                     FROM THE
13189
                             (SELECT CAST
13190
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
13191
                                        )
13192
                                FROM DUAL
13193
                             ));
13194
 
13195
      proc_rec      proc_cur%ROWTYPE;
13196
   BEGIN
13197
      OPEN proc_cur;
13198
 
13199
      FETCH proc_cur
13200
       INTO proc_rec;
13201
 
13202
      WHILE proc_cur%FOUND
13203
      LOOP
13204
         INSERT INTO package_processes
13205
                     (proc_id, pv_id
13206
                     )
13207
              VALUES (proc_rec.proc_id, npvid
13208
                     );
13209
 
13210
         SELECT prc.proc_name
13211
           INTO processname
13212
           FROM processes prc
13213
          WHERE prc.proc_id = proc_rec.proc_id;
13214
 
13215
         -- Log Action --
13216
         log_action (npvid,
13217
                     'process_add',
13218
                     nuserid,
13219
                     'Added process with health tag ' || processname
13220
                    );
13221
 
13222
         FETCH proc_cur
13223
          INTO proc_rec;
13224
      END LOOP;
13225
   END;
13226
 
13227
/*-------------------------------------------------------------------------------------------------------*/
13228
   PROCEDURE remove_process (
13229
      nprocid   IN   package_processes.proc_id%TYPE,
13230
      npvid     IN   package_processes.pv_id%TYPE,
13231
      nuserid   IN   NUMBER
13232
   )
13233
   IS
13234
      processname   VARCHAR2 (4000);
13235
/* Rupesh Release on 17/05/2006*/
13236
   BEGIN
13237
      SELECT prc.proc_name
13238
        INTO processname
13239
        FROM processes prc
13240
       WHERE prc.proc_id = nprocid;
13241
 
13242
      DELETE FROM package_processes
13243
            WHERE proc_id = nprocid AND pv_id = npvid;
13244
 
13245
      -- Log Action --
13246
      log_action (npvid,
13247
                  'process_remove',
13248
                  nuserid,
13249
                  'Removed process with health tag ' || processname
13250
                 );
13251
   END;
13252
/*-------------------------------------------------------------------------------------------------------*/
13253
  /* 
13254
  Author: Rupesh Solanki
13255
  Purpose: To move package versions from one release to another
13256
  Release: 4th September 2006 
13257
 
13258
  */
13259
  PROCEDURE move_package (
13260
   	  npvid  			  IN package_versions.pv_id%TYPE,
13261
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
13262
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
13263
	  nuserid			  IN NUMBER	
13264
  )	
13265
  IS	
13266
 
13267
  oldrtag_name VARCHAR2(4000);
13268
  newrtag_name VARCHAR2(4000);
13269
 
13270
 
13271
 
13272
  BEGIN
13273
 
13274
 
13275
  SELECT rtag_name into oldrtag_name
13276
  FROM RELEASE_TAGS
13277
  WHERE rtag_id = nrtagid;
13278
 
13279
  SELECT rtag_name into newrtag_name
13280
  FROM RELEASE_TAGS
13281
  WHERE rtag_id = nnewrtagid;
13282
 
13283
  /* Table Work In Progress*/
13284
  	   UPDATE WORK_IN_PROGRESS
13285
	   SET RTAG_ID = nnewrtagid
13286
	   WHERE RTAG_ID = nrtagid
13287
	   AND PV_ID = npvid;
13288
 
13289
  /* Table PLANNED*/	
13290
  	   UPDATE PLANNED
13291
	   SET RTAG_ID = nnewrtagid
13292
	   WHERE RTAG_ID = nrtagid
13293
	   AND PV_ID = npvid;   
13294
 
13295
      -- Log Action --
13296
      log_action (npvid,
13297
                  'move_package_version',
13298
                  nuserid,
13299
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
13300
                 );  	   	     
13301
 
13302
 
13303
  END;
13304
 
13305
/*-------------------------------------------------------------------------------------------------------*/
13306
PROCEDURE modify_product_state (
13307
   	  npvid IN package_versions.pv_id%TYPE,
13308
	  nstateid IN product_states.state_id%TYPE,
13309
	  nuserid IN NUMBER
13310
   ) IS
13311
 
13312
   sStateName VARCHAR(4000);
13313
 
13314
  /* 
13315
  Author: Rupesh Solanki
13316
  Purpose: To modify the product state from integration to test to deployment
13317
  Release: 25th January 2006 
13318
  */   
13319
 
13320
  BEGIN
13321
 
13322
  UPDATE PACKAGE_VERSIONS
13323
  SET PRODUCT_STATE = nstateid
13324
  WHERE PV_ID = npvid;
13325
 
13326
 
13327
  SELECT STATE INTO sStateName
13328
  FROM PRODUCT_STATES 
13329
  WHERE STATE_ID = nstateid;
13330
 
13331
  -- Log Action --
13332
  log_action (npvid,
13333
              'modify_product_state',
13334
               nuserid,
13335
               sStateName
13336
              );  
13337
 
13338
 
13339
  END;			  	   	     
13340
/*-------------------------------------------------------------------------------------------------------*/   
13341
END pk_package_Test;
13342
/
13343
--------------------------------------------------------
13344
--  DDL for Package Body PK_ENVIRONMENT_TEST
13345
--------------------------------------------------------
13346
 
13347
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT_TEST" 
13348
IS
13349
/*
13350
------------------------------
13351
||  Last Modified:  Rupesh Solanki
13352
||  Modified Date:  29/Jan/2007
13353
||  Body Version:   1.1
13354
------------------------------
13355
*/
13356
 
13357
   /*-------------------------------------------------------------------------------------------------------*/
13358
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
13359
      RETURN NUMBER
13360
   IS
13361
   BEGIN
13362
       /*
13363
      || N - unlocked
13364
      || Y - release and locked
13365
      || P - penging approval
13366
      || A - approved package ready for auto-build
13367
      */
13368
      IF cdlock = 'N' OR cdlock = 'R'
13369
      THEN
13370
         -- WORK IN PROGRESS --
13371
         RETURN 0;
13372
      ELSIF cdlock = 'P' OR cdlock = 'A'
13373
      THEN
13374
         -- PENDING --
13375
         RETURN 1;
13376
      ELSIF cdlock = 'Y'
13377
      THEN
13378
         -- RELEASED --
13379
         RETURN 2;
13380
      ELSE
13381
         -- NOT FOUND --
13382
         raise_application_error
13383
                         (-20000,
13384
                             'Cannot decide where to place package. [cDlock='
13385
                          || cdlock
13386
                          || ']'
13387
                         );
13388
      END IF;
13389
   END;
13390
 
13391
/*-------------------------------------------------------------------------------------------------------*/
13392
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
13393
      RETURN NUMBER
13394
   IS
13395
      envtab    NUMBER            := -1;
13396
 
13397
      CURSOR curarea
13398
      IS
13399
         SELECT 2 AS envtab
13400
           FROM release_content rc
13401
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13402
         UNION
13403
         SELECT 0 AS envtab
13404
           FROM work_in_progress wip
13405
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13406
         UNION
13407
         SELECT 1 AS envtab
13408
           FROM planned pl
13409
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13410
 
13411
      recarea   curarea%ROWTYPE;
13412
   BEGIN
13413
      OPEN curarea;
13414
 
13415
      FETCH curarea
13416
       INTO recarea;
13417
 
13418
      IF curarea%FOUND
13419
      THEN
13420
         envtab := recarea.envtab;
13421
      END IF;
13422
 
13423
      CLOSE curarea;
13424
 
13425
      RETURN envtab;
13426
   END;
13427
 
13428
/*-------------------------------------------------------------------------------------------------------*/
13429
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
13430
      RETURN NUMBER
13431
   IS
13432
      ispatch   package_versions.dlocked%TYPE;
13433
      viewid    NUMBER                          := -1;
13434
 
13435
      CURSOR curview
13436
      IS
13437
         SELECT rc.base_view_id AS view_id
13438
           FROM release_content rc
13439
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13440
         UNION
13441
         SELECT wip.view_id AS view_id
13442
           FROM work_in_progress wip
13443
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13444
         UNION
13445
         SELECT pl.view_id AS view_id
13446
           FROM planned pl
13447
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13448
 
13449
      recview   curview%ROWTYPE;
13450
   BEGIN
13451
      -- Get dlock state
13452
      SELECT pv.is_patch
13453
        INTO ispatch
13454
        FROM package_versions pv
13455
       WHERE pv.pv_id = pvid;
13456
 
13457
      -- Decide which view id should package go under.
13458
      IF (ispatch != 'Y') OR (ispatch IS NULL)
13459
      THEN
13460
         -- Get VIEW ID of Package
13461
         OPEN curview;
13462
 
13463
         FETCH curview
13464
          INTO recview;
13465
 
13466
         IF curview%FOUND
13467
         THEN
13468
            viewid := recview.view_id;
13469
         ELSE
13470
            raise_application_error
13471
               (-20000,
13472
                   'Cannot find view_id to proceed. [PvId='
13473
                || pvid
13474
                || ']. The current version may not exist in the release anymore.'
13475
               );
13476
         END IF;
13477
 
13478
         CLOSE curview;
13479
      ELSE
13480
         -- Get VIEW ID of Patch (view id of parent package)
13481
         SELECT rc.base_view_id
13482
           INTO viewid
13483
           FROM release_content rc, package_patches ppv
13484
          WHERE rc.rtag_id = rtagid
13485
            AND rc.pv_id = ppv.pv_id
13486
            AND ppv.patch_id = pvid;
13487
      END IF;
13488
 
13489
      RETURN viewid;
13490
   END;
13491
 
13492
/*-------------------------------------------------------------------------------------------------------*/
13493
   PROCEDURE add_package (
13494
      pvid     IN   NUMBER,
13495
      viewid   IN   NUMBER,
13496
      rtagid   IN   NUMBER,
13497
      userid   IN   NUMBER
13498
   )
13499
   IS
13500
      dlocked   package_versions.dlocked%TYPE;
13501
      envtab    NUMBER;
13502
   BEGIN
13503
      IF can_edit_pkg_in_project (pvid, rtagid) = 1
13504
      THEN
13505
         -- Get dlock state
13506
         SELECT pv.dlocked
13507
           INTO dlocked
13508
           FROM package_versions pv
13509
          WHERE pv.pv_id = pvid;
13510
 
13511
         -- Get which area should go under
13512
         envtab := select_environment_area (dlocked);
13513
         -- Log
13514
         log_action (pvid, 'action', userid, 'Start of Package Add...');
13515
 
13516
         -- Remove Package
13517
         IF envtab = 0
13518
         THEN
13519
            -- WORK IN PROGRESS --
13520
            pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
13521
         ELSIF envtab = 1
13522
         THEN
13523
            -- PENDING --
13524
            pk_planned.add_package (pvid, viewid, rtagid, userid);
13525
         ELSIF envtab = 2
13526
         THEN
13527
            -- RELEASED --
13528
            -- NOTE: this package will be replaced with matching package
13529
            pk_release.add_package (pvid, viewid, rtagid, userid);
13530
            -- Now do post Release Actions
13531
            pk_release.run_post_actions (pvid, rtagid);
13532
         END IF;
13533
 
13534
         -- Log
13535
         log_action (pvid, 'action', userid, 'End of Package Add...');
13536
      END IF;
13537
   END;
13538
 
13539
/*-------------------------------------------------------------------------------------------------------*/
13540
   PROCEDURE add_package_bulk (
13541
      pvidlist   IN   VARCHAR2,
13542
      viewid     IN   NUMBER,
13543
      rtagid     IN   NUMBER,
13544
      userid     IN   NUMBER
13545
   )
13546
   IS
13547
      nidcollector   relmgr_number_tab_t            := relmgr_number_tab_t
13548
                                                                          ();
13549
      dlocked        package_versions.dlocked%TYPE;
13550
      pvid           NUMBER;
13551
      envtab         NUMBER;
13552
   BEGIN
13553
      /*--------------- Business Rules Here -------------------*/
13554
      IF (pvidlist IS NULL)
13555
      THEN
13556
         raise_application_error (-20000,
13557
                                  'Please select at least one package.'
13558
                                 );
13559
      END IF;
13560
 
13561
/*-------------------------------------------------------*/
13562
      nidcollector := in_list_number (pvidlist);
13563
 
13564
      FOR i IN 1 .. nidcollector.COUNT
13565
      LOOP
13566
         pvid := nidcollector (i);
13567
         add_package (pvid, viewid, rtagid, userid);
13568
      END LOOP;
13569
   END;
13570
 
13571
/*-------------------------------------------------------------------------------------------------------*/
13572
   PROCEDURE replace_package (
13573
      newpvid   IN   NUMBER,
13574
      oldpvid   IN   NUMBER,
13575
      rtagid    IN   NUMBER,
13576
      userid    IN   NUMBER
13577
   )
13578
   IS
13579
      dlocked        package_versions.dlocked%TYPE;
13580
      viewid         NUMBER;
13581
      envtab         NUMBER;
13582
      ROWCOUNT       NUMBER;
13583
      creleasemode   CHAR (1);
13584
      npkgid         NUMBER;
13585
   BEGIN
13586
      /*--------------- Business Rules Here -------------------*/
13587
      -- Check if oldPvId exists. It could have been removed
13588
      SELECT COUNT (pv.pv_id)
13589
        INTO ROWCOUNT
13590
        FROM package_versions pv
13591
       WHERE pv.pv_id = oldpvid;
13592
 
13593
/*-------------------------------------------------------*/
13594
 
13595
      /* This procedure is usually used by "History" option in Release Manager */
13596
 
13597
      -- Get dlock state
13598
      SELECT pv.dlocked
13599
        INTO dlocked
13600
        FROM package_versions pv
13601
       WHERE pv.pv_id = newpvid;
13602
 
13603
      -- Get VIEW_ID ---
13604
      IF ROWCOUNT = 1
13605
      THEN
13606
         viewid := get_view_location (oldpvid, rtagid);
13607
      ELSE
13608
         -- Set ViewID to default
13609
         viewid := 7;
13610
      END IF;
13611
 
13612
      -- Get which area should go under
13613
      envtab := select_environment_area (dlocked);
13614
      -- Log
13615
      log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
13616
 
13617
      -- Replace package
13618
      IF envtab = 0
13619
      THEN
13620
         -- WORK IN PROGRESS --
13621
 
13622
         -- Delete old package
13623
         pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
13624
         -- Add new package
13625
         pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
13626
      ELSIF envtab = 1
13627
      THEN
13628
         -- PENDING --
13629
 
13630
         -- Delete old package
13631
         pk_planned.remove_package (oldpvid, rtagid, userid);
13632
         -- Add new package
13633
         pk_planned.add_package (newpvid, viewid, rtagid, userid);
13634
      ELSIF envtab = 2
13635
      THEN
13636
         -- RELEASED --
13637
 
13638
         -- Delete old package
13639
         pk_release.remove_package (oldpvid, rtagid, userid);
13640
         -- Add new package
13641
         pk_release.add_package (newpvid, viewid, rtagid, userid);
13642
         -- Now do post Release Actions
13643
         pk_release.run_post_actions (newpvid, rtagid);
13644
      END IF;
13645
 
13646
      -- Log
13647
      log_action (oldpvid, 'action', userid, 'End of Package Replace...');
13648
   END;
13649
 
13650
/*-------------------------------------------------------------------------------------------------------*/
13651
   FUNCTION remove_package (
13652
      pvid          IN   NUMBER,
13653
      rtagid        IN   NUMBER,
13654
      userid        IN   NUMBER,
13655
      forceremove   IN   CHAR
13656
   )
13657
      RETURN NUMBER
13658
   IS
13659
      envtab        NUMBER;
13660
      isused        BOOLEAN;
13661
      recordcount   NUMBER;
13662
   BEGIN
13663
/*--------------- Business Rules Here -------------------*/
13664
/*-------------------------------------------------------*/
13665
 
13666
      -- Find location of package
13667
      envtab := get_package_area (pvid, rtagid);
13668
 
13669
      -- Remove Package
13670
      IF envtab = 0
13671
      THEN
13672
         -- WORK IN PROGRESS --
13673
         -- Delete package
13674
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
13675
         RETURN 0;
13676
      ELSIF envtab = 1
13677
      THEN
13678
         -- PENDING --
13679
         -- Delete package
13680
         pk_planned.remove_package (pvid, rtagid, userid);
13681
         RETURN 0;
13682
      ELSIF envtab = 2
13683
      THEN
13684
         -- RELEASED --
13685
 
13686
         -- Check if is used by other packages
13687
         isused := TRUE;
13688
 
13689
         IF forceremove = 'N'
13690
         THEN
13691
            SELECT COUNT (pv.pv_id)
13692
              INTO recordcount
13693
              FROM (SELECT dpv.pkg_id, dpv.v_ext
13694
                      FROM release_content rc,
13695
                           package_dependencies dep,
13696
                           package_versions dpv
13697
                     WHERE rc.rtag_id = rtagid
13698
                       AND rc.pv_id = dep.pv_id
13699
                       AND dep.dpv_id = dpv.pv_id) rdep,
13700
                   package_versions pv
13701
             WHERE pv.pkg_id = rdep.pkg_id
13702
               AND NVL (pv.v_ext, '|LINK_A_NULL|') =
13703
                                             NVL (rdep.v_ext, '|LINK_A_NULL|')
13704
               AND pv.pv_id = pvid;
13705
 
13706
            IF recordcount > 0
13707
            THEN
13708
               RETURN 1;                    -- Return 1 as package being used
13709
            ELSE
13710
               isused := FALSE;
13711
            END IF;
13712
         END IF;
13713
 
13714
         IF forceremove = 'Y' OR NOT isused
13715
         THEN
13716
            -- Delete old package
13717
            pk_release.remove_package (pvid, rtagid, userid);
13718
            -- Now do post Release Actions
13719
            pk_release.run_post_actions (pvid, rtagid);
13720
            RETURN 0;
13721
         END IF;
13722
      END IF;
13723
   END;
13724
 
13725
/*-------------------------------------------------------------------------------------------------------*/
13726
   PROCEDURE get_environment_items (
13727
      viewtype           IN       NUMBER,
13728
      userid             IN       NUMBER,
13729
      rtagid             IN       NUMBER,
13730
      sviewidshowlist    IN       VARCHAR2,
13731
      ntruerecordcount   OUT      NUMBER,
13732
      recordset          OUT      typecur
13733
   )
13734
   IS
13735
   BEGIN
13736
      -- Get true record count because views can give false count
13737
      SELECT COUNT (pl.pv_id)
13738
        INTO ntruerecordcount
13739
        FROM environment_view pl
13740
       WHERE pl.rtag_id = rtagid;
13741
 
13742
      IF viewtype = 1
13743
      THEN
13744
         /*--- GUEST VIEW ---*/
13745
         OPEN recordset FOR
13746
            SELECT   *
13747
                FROM (
13748
                      /* Base Views collapsed */
13749
                      SELECT DISTINCT vi.view_id, vi.view_name,
13750
                                      TO_NUMBER (NULL) AS pkg_state,
13751
                                      TO_NUMBER (NULL) AS deprecated_state,
13752
                                      TO_NUMBER (NULL) AS pv_id,
13753
                                      NULL AS pkg_name, NULL AS pkg_version,
13754
                                      NULL AS dlocked, NULL AS pv_description
13755
                                 FROM environment_view rel, views vi
13756
                                WHERE rel.view_id = vi.view_id
13757
                                  AND rtag_id = rtagid
13758
                                  AND rel.view_id NOT IN (
13759
                                         SELECT *
13760
                                           FROM THE
13761
                                                   (SELECT CAST
13762
                                                              (in_list_number
13763
                                                                  (sviewidshowlist
13764
                                                                  ) AS relmgr_number_tab_t
13765
                                                              )
13766
                                                      FROM DUAL
13767
                                                   ))
13768
                      UNION
13769
                      /* Base Views expanded */
13770
                      SELECT vi.view_id, vi.view_name,
13771
                             DECODE (rel.pkg_state,
13772
                                     NULL, 0,
13773
                                     rel.pkg_state
13774
                                    ) AS pkg_state,
13775
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13776
                             pv.pkg_version, pv.dlocked, pv.pv_description
13777
                        FROM environment_view rel,
13778
                             PACKAGES pkg,
13779
                             package_versions pv,
13780
                             views vi
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 rel.view_id IN (
13785
                                SELECT *
13786
                                  FROM THE
13787
                                          (SELECT CAST
13788
                                                     (in_list_number
13789
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13790
                                                     )
13791
                                             FROM DUAL
13792
                                          ))
13793
                         AND rtag_id = rtagid) ord
13794
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13795
      ELSIF viewtype = 2
13796
      THEN
13797
         /*--- PERSONAL VIEW ---*/
13798
         OPEN recordset FOR
13799
            SELECT   *
13800
                FROM (
13801
                      /* Base Views collapsed */
13802
                      SELECT DISTINCT vi.view_id, vi.view_name,
13803
                                      TO_NUMBER (NULL) AS pkg_state,
13804
                                      TO_NUMBER (NULL) AS deprecated_state,
13805
                                      TO_NUMBER (NULL) AS pv_id,
13806
                                      NULL AS pkg_name, NULL AS pkg_version,
13807
                                      NULL AS dlocked, NULL AS pv_description
13808
                                 FROM environment_view rel,
13809
                                      view_settings vs,
13810
                                      views vi
13811
                                WHERE rel.view_id = vi.view_id
13812
                                  AND vs.view_id = rel.view_id
13813
                                  AND vs.user_id = userid
13814
                                  AND rtag_id = rtagid
13815
                                  AND rel.view_id NOT IN (
13816
                                         SELECT *
13817
                                           FROM THE
13818
                                                   (SELECT CAST
13819
                                                              (in_list_number
13820
                                                                  (sviewidshowlist
13821
                                                                  ) AS relmgr_number_tab_t
13822
                                                              )
13823
                                                      FROM DUAL
13824
                                                   ))
13825
                      UNION
13826
                      /* Base 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 environment_view rel,
13835
                             PACKAGES pkg,
13836
                             package_versions pv,
13837
                             views vi,
13838
                             view_settings vs
13839
                       WHERE pv.pkg_id = pkg.pkg_id
13840
                         AND rel.pv_id = pv.pv_id
13841
                         AND rel.view_id = vi.view_id
13842
                         AND vs.view_id = vi.view_id
13843
                         AND vs.user_id = userid
13844
                         AND rel.view_id IN (
13845
                                SELECT *
13846
                                  FROM THE
13847
                                          (SELECT CAST
13848
                                                     (in_list_number
13849
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13850
                                                     )
13851
                                             FROM DUAL
13852
                                          ))
13853
                         AND rtag_id = rtagid
13854
                      UNION
13855
                      /* Private Views collapsed */
13856
                      SELECT vi.view_id, vi.view_name,
13857
                             TO_NUMBER (NULL) AS pkg_state,
13858
                             TO_NUMBER (NULL) AS deprecated_state,
13859
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13860
                             NULL AS pkg_version, NULL AS dlocked,
13861
                             NULL AS pv_description
13862
                        FROM view_settings vs,
13863
                             view_def vd,
13864
                             views vi,
13865
                             environment_view rel,
13866
                             package_versions pv
13867
                       WHERE vs.view_id = vi.view_id
13868
                         AND rel.pv_id = pv.pv_id
13869
                         AND vd.pkg_id = pv.pkg_id
13870
                         AND vd.view_id = vi.view_id
13871
                         AND vi.base_view = 'N'
13872
                         AND rel.rtag_id = rtagid
13873
                         AND vs.user_id = userid
13874
                         AND vi.view_id NOT IN (
13875
                                SELECT *
13876
                                  FROM THE
13877
                                          (SELECT CAST
13878
                                                     (in_list_number
13879
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13880
                                                     )
13881
                                             FROM DUAL
13882
                                          ))
13883
                      UNION
13884
                      /* Private Views expanded */
13885
                      SELECT vi.view_id, vi.view_name,
13886
                             DECODE (rel.pkg_state,
13887
                                     NULL, 0,
13888
                                     rel.pkg_state
13889
                                    ) AS pkg_state,
13890
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13891
                             pv.pkg_version, pv.dlocked, pv.pv_description
13892
                        FROM users usr,
13893
                             view_settings vs,
13894
                             view_def vd,
13895
                             views vi,
13896
                             environment_view rel,
13897
                             PACKAGES pkg,
13898
                             package_versions pv
13899
                       WHERE vs.user_id = usr.user_id
13900
                         AND vs.view_id = vi.view_id
13901
                         AND vd.view_id = vi.view_id
13902
                         AND pv.pkg_id = pkg.pkg_id
13903
                         AND rel.pv_id = pv.pv_id
13904
                         AND rel.rtag_id = rtagid
13905
                         AND vd.pkg_id = pkg.pkg_id
13906
                         AND vi.base_view = 'N'
13907
                         AND vi.view_id IN (
13908
                                SELECT *
13909
                                  FROM THE
13910
                                          (SELECT CAST
13911
                                                     (in_list_number
13912
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13913
                                                     )
13914
                                             FROM DUAL
13915
                                          ))
13916
                         AND usr.user_id = userid) ord
13917
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13918
      END IF;
13919
   END;
13920
 
13921
/*-------------------------------------------------------------------------------------------------------*/
13922
   PROCEDURE get_released_items (
13923
      viewtype           IN       NUMBER,
13924
      userid             IN       NUMBER,
13925
      rtagid             IN       NUMBER,
13926
      sviewidshowlist    IN       VARCHAR2,
13927
      ntruerecordcount   OUT      NUMBER,
13928
      recordset          OUT      typecur
13929
   )
13930
   IS
13931
   BEGIN
13932
      -- Get true record count because views can give false count
13933
      SELECT COUNT (rc.pv_id)
13934
        INTO ntruerecordcount
13935
        FROM release_content rc
13936
       WHERE rc.rtag_id = rtagid;
13937
 
13938
      IF viewtype = 1
13939
      THEN
13940
         /*--- GUEST VIEW ---*/
13941
         OPEN recordset FOR
13942
            SELECT   *
13943
                FROM (
13944
                      /* Base Views collapsed */
13945
                      SELECT DISTINCT vi.view_id, vi.view_name,
13946
                                      TO_NUMBER (NULL) AS pkg_state,
13947
                                      TO_NUMBER (NULL) AS deprecated_state,
13948
                                      TO_NUMBER (NULL) AS pv_id,
13949
                                      NULL AS pkg_name, NULL AS pkg_version,
13950
                                      NULL AS dlocked, NULL AS pv_description
13951
                                 FROM release_content rel, views vi
13952
                                WHERE rel.base_view_id = vi.view_id
13953
                                  AND rtag_id = rtagid
13954
                                  AND rel.base_view_id NOT IN (
13955
                                         SELECT *
13956
                                           FROM THE
13957
                                                   (SELECT CAST
13958
                                                              (in_list_number
13959
                                                                  (sviewidshowlist
13960
                                                                  ) AS relmgr_number_tab_t
13961
                                                              )
13962
                                                      FROM DUAL
13963
                                                   ))
13964
                      UNION
13965
                      /* Base Views expanded */
13966
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13967
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13968
                             pv.pkg_version, pv.dlocked, pv.pv_description
13969
                        FROM release_content rel,
13970
                             PACKAGES pkg,
13971
                             package_versions pv,
13972
                             views vi
13973
                       WHERE pv.pkg_id = pkg.pkg_id
13974
                         AND rel.pv_id = pv.pv_id
13975
                         AND rel.base_view_id = vi.view_id
13976
                         AND rel.base_view_id IN (
13977
                                SELECT *
13978
                                  FROM THE
13979
                                          (SELECT CAST
13980
                                                     (in_list_number
13981
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13982
                                                     )
13983
                                             FROM DUAL
13984
                                          ))
13985
                         AND rtag_id = rtagid) ord
13986
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13987
      ELSIF viewtype = 2
13988
      THEN
13989
         /*--- PERSONAL VIEW ---*/
13990
         OPEN recordset FOR
13991
            SELECT   *
13992
                FROM (
13993
                      /* Base Views collapsed */
13994
                      SELECT DISTINCT vi.view_id, vi.view_name,
13995
                                      TO_NUMBER (NULL) AS pkg_state,
13996
                                      TO_NUMBER (NULL) AS deprecated_state,
13997
                                      TO_NUMBER (NULL) AS pv_id,
13998
                                      NULL AS pkg_name, NULL AS pkg_version,
13999
                                      NULL AS dlocked, NULL AS pv_description
14000
                                 FROM release_content rel,
14001
                                      view_settings vs,
14002
                                      views vi
14003
                                WHERE rel.base_view_id = vi.view_id
14004
                                  AND vs.view_id = rel.base_view_id
14005
                                  AND vs.user_id = userid
14006
                                  AND rtag_id = rtagid
14007
                                  AND rel.base_view_id NOT IN (
14008
                                         SELECT *
14009
                                           FROM THE
14010
                                                   (SELECT CAST
14011
                                                              (in_list_number
14012
                                                                  (sviewidshowlist
14013
                                                                  ) AS relmgr_number_tab_t
14014
                                                              )
14015
                                                      FROM DUAL
14016
                                                   ))
14017
                      UNION
14018
                      /* Base Views expanded */
14019
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
14020
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14021
                             pv.pkg_version, pv.dlocked, pv.pv_description
14022
                        FROM release_content rel,
14023
                             PACKAGES pkg,
14024
                             package_versions pv,
14025
                             views vi,
14026
                             view_settings vs
14027
                       WHERE pv.pkg_id = pkg.pkg_id
14028
                         AND rel.pv_id = pv.pv_id
14029
                         AND rel.base_view_id = vi.view_id
14030
                         AND vs.view_id = vi.view_id
14031
                         AND vs.user_id = userid
14032
                         AND rel.base_view_id IN (
14033
                                SELECT *
14034
                                  FROM THE
14035
                                          (SELECT CAST
14036
                                                     (in_list_number
14037
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14038
                                                     )
14039
                                             FROM DUAL
14040
                                          ))
14041
                         AND rtag_id = rtagid
14042
                      UNION
14043
                      /* Private Views collapsed */
14044
                      SELECT vi.view_id, vi.view_name,
14045
                             TO_NUMBER (NULL) AS pkg_state,
14046
                             TO_NUMBER (NULL) AS deprecated_state,
14047
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14048
                             NULL AS pkg_version, NULL AS dlocked,
14049
                             NULL AS pv_description
14050
                        FROM view_settings vs,
14051
                             view_def vd,
14052
                             views vi,
14053
                             release_content rel,
14054
                             package_versions pv
14055
                       WHERE vs.view_id = vi.view_id
14056
                         AND rel.pv_id = pv.pv_id
14057
                         AND vd.pkg_id = pv.pkg_id
14058
                         AND vd.view_id = vi.view_id
14059
                         AND vi.base_view = 'N'
14060
                         AND rel.rtag_id = rtagid
14061
                         AND vs.user_id = userid
14062
                         AND vi.view_id NOT IN (
14063
                                SELECT *
14064
                                  FROM THE
14065
                                          (SELECT CAST
14066
                                                     (in_list_number
14067
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14068
                                                     )
14069
                                             FROM DUAL
14070
                                          ))
14071
                      UNION
14072
                      /* Private Views expanded */
14073
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
14074
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14075
                             pv.pkg_version, pv.dlocked, pv.pv_description
14076
                        FROM users usr,
14077
                             view_settings vs,
14078
                             view_def vd,
14079
                             views vi,
14080
                             release_content rel,
14081
                             PACKAGES pkg,
14082
                             package_versions pv
14083
                       WHERE vs.user_id = usr.user_id
14084
                         AND vs.view_id = vi.view_id
14085
                         AND vd.view_id = vi.view_id
14086
                         AND pv.pkg_id = pkg.pkg_id
14087
                         AND rel.pv_id = pv.pv_id
14088
                         AND rel.rtag_id = rtagid
14089
                         AND vd.pkg_id = pkg.pkg_id
14090
                         AND vi.base_view = 'N'
14091
                         AND vi.view_id IN (
14092
                                SELECT *
14093
                                  FROM THE
14094
                                          (SELECT CAST
14095
                                                     (in_list_number
14096
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14097
                                                     )
14098
                                             FROM DUAL
14099
                                          ))
14100
                         AND usr.user_id = userid) ord
14101
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14102
      END IF;
14103
   END;
14104
 
14105
/*-------------------------------------------------------------------------------------------------------*/
14106
   PROCEDURE get_work_in_progress_items (
14107
      viewtype           IN       NUMBER,
14108
      userid             IN       NUMBER,
14109
      rtagid             IN       NUMBER,
14110
      sviewidshowlist    IN       VARCHAR2,
14111
      ntruerecordcount   OUT      NUMBER,
14112
      recordset          OUT      typecur
14113
   )
14114
   IS
14115
   BEGIN
14116
      -- Get true record count because views can give false count
14117
      SELECT COUNT (wip.pv_id)
14118
        INTO ntruerecordcount
14119
        FROM work_in_progress wip
14120
       WHERE wip.rtag_id = rtagid;
14121
 
14122
      IF viewtype = 1
14123
      THEN
14124
         /*--- GUEST VIEW ---*/
14125
         OPEN recordset FOR
14126
            SELECT   *
14127
                FROM (
14128
                      /* Base Views collapsed */
14129
                      SELECT DISTINCT vi.view_id, vi.view_name,
14130
                                      TO_NUMBER (NULL) AS pkg_state,
14131
                                      TO_NUMBER (NULL) AS deprecated_state,
14132
                                      TO_NUMBER (NULL) AS pv_id,
14133
                                      NULL AS pkg_name, NULL AS pkg_version,
14134
                                      NULL AS dlocked, NULL AS pv_description
14135
                                 FROM work_in_progress rel, views vi
14136
                                WHERE rel.view_id = vi.view_id
14137
                                  AND rtag_id = rtagid
14138
                                  AND rel.view_id NOT IN (
14139
                                         SELECT *
14140
                                           FROM THE
14141
                                                   (SELECT CAST
14142
                                                              (in_list_number
14143
                                                                  (sviewidshowlist
14144
                                                                  ) AS relmgr_number_tab_t
14145
                                                              )
14146
                                                      FROM DUAL
14147
                                                   ))
14148
                      UNION
14149
                      /* Base Views expanded */
14150
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14151
 
14152
                             --rel.pkg_state,
14153
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14154
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14155
                             pv.pv_description
14156
                        FROM work_in_progress rel,
14157
                             PACKAGES pkg,
14158
                             package_versions pv,
14159
                             views vi
14160
                       WHERE pv.pkg_id = pkg.pkg_id
14161
                         AND rel.pv_id = pv.pv_id
14162
                         AND rel.view_id = vi.view_id
14163
                         AND rel.view_id IN (
14164
                                SELECT *
14165
                                  FROM THE
14166
                                          (SELECT CAST
14167
                                                     (in_list_number
14168
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14169
                                                     )
14170
                                             FROM DUAL
14171
                                          ))
14172
                         AND rtag_id = rtagid) ord
14173
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14174
      ELSIF viewtype = 2
14175
      THEN
14176
         /*--- PERSONAL VIEW ---*/
14177
         OPEN recordset FOR
14178
            SELECT   *
14179
                FROM (
14180
                      /* Base Views collapsed */
14181
                      SELECT DISTINCT vi.view_id, vi.view_name,
14182
                                      TO_NUMBER (NULL) AS pkg_state,
14183
                                      TO_NUMBER (NULL) AS deprecated_state,
14184
                                      TO_NUMBER (NULL) AS pv_id,
14185
                                      NULL AS pkg_name, NULL AS pkg_version,
14186
                                      NULL AS dlocked, NULL AS pv_description
14187
                                 FROM work_in_progress rel,
14188
                                      view_settings vs,
14189
                                      views vi
14190
                                WHERE rel.view_id = vi.view_id
14191
                                  AND vs.view_id = rel.view_id
14192
                                  AND vs.user_id = userid
14193
                                  AND rtag_id = rtagid
14194
                                  AND rel.view_id NOT IN (
14195
                                         SELECT *
14196
                                           FROM THE
14197
                                                   (SELECT CAST
14198
                                                              (in_list_number
14199
                                                                  (sviewidshowlist
14200
                                                                  ) AS relmgr_number_tab_t
14201
                                                              )
14202
                                                      FROM DUAL
14203
                                                   ))
14204
                      UNION
14205
                      /* Base Views expanded */
14206
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14207
 
14208
                             --rel.pkg_state,
14209
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14210
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14211
                             pv.pv_description
14212
                        FROM work_in_progress rel,
14213
                             PACKAGES pkg,
14214
                             package_versions pv,
14215
                             views vi,
14216
                             view_settings vs
14217
                       WHERE pv.pkg_id = pkg.pkg_id
14218
                         AND rel.pv_id = pv.pv_id
14219
                         AND rel.view_id = vi.view_id
14220
                         AND vs.view_id = vi.view_id
14221
                         AND vs.user_id = userid
14222
                         AND rel.view_id IN (
14223
                                SELECT *
14224
                                  FROM THE
14225
                                          (SELECT CAST
14226
                                                     (in_list_number
14227
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14228
                                                     )
14229
                                             FROM DUAL
14230
                                          ))
14231
                         AND rtag_id = rtagid
14232
                      UNION
14233
                      /* Private Views collapsed */
14234
                      SELECT vi.view_id, vi.view_name,
14235
                             TO_NUMBER (NULL) AS pkg_state,
14236
                             TO_NUMBER (NULL) AS deprecated_state,
14237
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14238
                             NULL AS pkg_version, NULL AS dlocked,
14239
                             NULL AS pv_description
14240
                        FROM view_settings vs,
14241
                             view_def vd,
14242
                             views vi,
14243
                             work_in_progress rel,
14244
                             package_versions pv
14245
                       WHERE vs.view_id = vi.view_id
14246
                         AND rel.pv_id = pv.pv_id
14247
                         AND vd.pkg_id = pv.pkg_id
14248
                         AND vd.view_id = vi.view_id
14249
                         AND vi.base_view = 'N'
14250
                         AND rel.rtag_id = rtagid
14251
                         AND vs.user_id = userid
14252
                         AND vi.view_id NOT IN (
14253
                                SELECT *
14254
                                  FROM THE
14255
                                          (SELECT CAST
14256
                                                     (in_list_number
14257
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14258
                                                     )
14259
                                             FROM DUAL
14260
                                          ))
14261
                      UNION
14262
                      /* Private Views expanded */
14263
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14264
 
14265
                             --rel.pkg_state,
14266
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14267
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14268
                             pv.pv_description
14269
                        FROM users usr,
14270
                             view_settings vs,
14271
                             view_def vd,
14272
                             views vi,
14273
                             work_in_progress rel,
14274
                             PACKAGES pkg,
14275
                             package_versions pv
14276
                       WHERE vs.user_id = usr.user_id
14277
                         AND vs.view_id = vi.view_id
14278
                         AND vd.view_id = vi.view_id
14279
                         AND pv.pkg_id = pkg.pkg_id
14280
                         AND rel.pv_id = pv.pv_id
14281
                         AND rel.rtag_id = rtagid
14282
                         AND vd.pkg_id = pkg.pkg_id
14283
                         AND vi.base_view = 'N'
14284
                         AND vi.view_id IN (
14285
                                SELECT *
14286
                                  FROM THE
14287
                                          (SELECT CAST
14288
                                                     (in_list_number
14289
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14290
                                                     )
14291
                                             FROM DUAL
14292
                                          ))
14293
                         AND usr.user_id = userid) ord
14294
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14295
      END IF;
14296
   END;
14297
 
14298
/*-------------------------------------------------------------------------------------------------------*/
14299
   PROCEDURE get_pending_items (
14300
      viewtype           IN       NUMBER,
14301
      userid             IN       NUMBER,
14302
      rtagid             IN       NUMBER,
14303
      sviewidshowlist    IN       VARCHAR2,
14304
      ntruerecordcount   OUT      NUMBER,
14305
      recordset          OUT      typecur
14306
   )
14307
   IS
14308
   BEGIN
14309
      -- Get true record count because views can give false count
14310
      SELECT COUNT (pl.pv_id)
14311
        INTO ntruerecordcount
14312
        FROM planned pl
14313
       WHERE pl.rtag_id = rtagid;
14314
 
14315
      IF viewtype = 1
14316
      THEN
14317
         /*--- GUEST VIEW ---*/
14318
         OPEN recordset FOR
14319
            SELECT   *
14320
                FROM (
14321
                      /* Base Views collapsed */
14322
                      SELECT DISTINCT vi.view_id, vi.view_name,
14323
                                      TO_NUMBER (NULL) AS pkg_state,
14324
                                      TO_NUMBER (NULL) AS deprecated_state,
14325
                                      TO_NUMBER (NULL) AS pv_id,
14326
                                      NULL AS pkg_name, NULL AS pkg_version,
14327
                                      NULL AS dlocked, NULL AS pv_description
14328
                                 FROM planned rel, views vi
14329
                                WHERE rel.view_id = vi.view_id
14330
                                  AND rtag_id = rtagid
14331
                                  AND rel.view_id NOT IN (
14332
                                         SELECT *
14333
                                           FROM THE
14334
                                                   (SELECT CAST
14335
                                                              (in_list_number
14336
                                                                  (sviewidshowlist
14337
                                                                  ) AS relmgr_number_tab_t
14338
                                                              )
14339
                                                      FROM DUAL
14340
                                                   ))
14341
                      UNION
14342
                      /* Base Views expanded */
14343
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14344
 
14345
                             --rel.pkg_state,
14346
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14347
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14348
                             pv.pv_description
14349
                        FROM planned rel,
14350
                             PACKAGES pkg,
14351
                             package_versions pv,
14352
                             views vi
14353
                       WHERE pv.pkg_id = pkg.pkg_id
14354
                         AND rel.pv_id = pv.pv_id
14355
                         AND rel.view_id = vi.view_id
14356
                         AND rel.view_id IN (
14357
                                SELECT *
14358
                                  FROM THE
14359
                                          (SELECT CAST
14360
                                                     (in_list_number
14361
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14362
                                                     )
14363
                                             FROM DUAL
14364
                                          ))
14365
                         AND rtag_id = rtagid) ord
14366
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14367
      ELSIF viewtype = 2
14368
      THEN
14369
         /*--- PERSONAL VIEW ---*/
14370
         OPEN recordset FOR
14371
            SELECT   *
14372
                FROM (
14373
                      /* Base Views collapsed */
14374
                      SELECT DISTINCT vi.view_id, vi.view_name,
14375
                                      TO_NUMBER (NULL) AS pkg_state,
14376
                                      TO_NUMBER (NULL) AS deprecated_state,
14377
                                      TO_NUMBER (NULL) AS pv_id,
14378
                                      NULL AS pkg_name, NULL AS pkg_version,
14379
                                      NULL AS dlocked, NULL AS pv_description
14380
                                 FROM planned rel, view_settings vs, views vi
14381
                                WHERE rel.view_id = vi.view_id
14382
                                  AND vs.view_id = rel.view_id
14383
                                  AND vs.user_id = userid
14384
                                  AND rtag_id = rtagid
14385
                                  AND rel.view_id NOT IN (
14386
                                         SELECT *
14387
                                           FROM THE
14388
                                                   (SELECT CAST
14389
                                                              (in_list_number
14390
                                                                  (sviewidshowlist
14391
                                                                  ) AS relmgr_number_tab_t
14392
                                                              )
14393
                                                      FROM DUAL
14394
                                                   ))
14395
                      UNION
14396
                      /* Base Views expanded */
14397
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14398
 
14399
                             --rel.pkg_state,
14400
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14401
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14402
                             pv.pv_description
14403
                        FROM planned rel,
14404
                             PACKAGES pkg,
14405
                             package_versions pv,
14406
                             views vi,
14407
                             view_settings vs
14408
                       WHERE pv.pkg_id = pkg.pkg_id
14409
                         AND rel.pv_id = pv.pv_id
14410
                         AND rel.view_id = vi.view_id
14411
                         AND vs.view_id = vi.view_id
14412
                         AND vs.user_id = userid
14413
                         AND rel.view_id IN (
14414
                                SELECT *
14415
                                  FROM THE
14416
                                          (SELECT CAST
14417
                                                     (in_list_number
14418
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14419
                                                     )
14420
                                             FROM DUAL
14421
                                          ))
14422
                         AND rtag_id = rtagid
14423
                      UNION
14424
                      /* Private Views collapsed */
14425
                      SELECT vi.view_id, vi.view_name,
14426
                             TO_NUMBER (NULL) AS pkg_state,
14427
                             TO_NUMBER (NULL) AS deprecated_state,
14428
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14429
                             NULL AS pkg_version, NULL AS dlocked,
14430
                             NULL AS pv_description
14431
                        FROM view_settings vs,
14432
                             view_def vd,
14433
                             views vi,
14434
                             planned rel,
14435
                             package_versions pv
14436
                       WHERE vs.view_id = vi.view_id
14437
                         AND rel.pv_id = pv.pv_id
14438
                         AND vd.pkg_id = pv.pkg_id
14439
                         AND vd.view_id = vi.view_id
14440
                         AND vi.base_view = 'N'
14441
                         AND rel.rtag_id = rtagid
14442
                         AND vs.user_id = userid
14443
                         AND vi.view_id NOT IN (
14444
                                SELECT *
14445
                                  FROM THE
14446
                                          (SELECT CAST
14447
                                                     (in_list_number
14448
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14449
                                                     )
14450
                                             FROM DUAL
14451
                                          ))
14452
                      UNION
14453
                      /* Private Views expanded */
14454
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14455
 
14456
                             --rel.pkg_state,
14457
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14458
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14459
                             pv.pv_description
14460
                        FROM users usr,
14461
                             view_settings vs,
14462
                             view_def vd,
14463
                             views vi,
14464
                             planned rel,
14465
                             PACKAGES pkg,
14466
                             package_versions pv
14467
                       WHERE vs.user_id = usr.user_id
14468
                         AND vs.view_id = vi.view_id
14469
                         AND vd.view_id = vi.view_id
14470
                         AND pv.pkg_id = pkg.pkg_id
14471
                         AND rel.pv_id = pv.pv_id
14472
                         AND rel.rtag_id = rtagid
14473
                         AND vd.pkg_id = pkg.pkg_id
14474
                         AND vi.base_view = 'N'
14475
                         AND vi.view_id IN (
14476
                                SELECT *
14477
                                  FROM THE
14478
                                          (SELECT CAST
14479
                                                     (in_list_number
14480
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14481
                                                     )
14482
                                             FROM DUAL
14483
                                          ))
14484
                         AND usr.user_id = userid) ord
14485
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14486
      END IF;
14487
   END;
14488
 
14489
/*-------------------------------------------------------------------------------------------------------*/
14490
   PROCEDURE get_view_content (
14491
      rtagid      IN       NUMBER,
14492
      viewid      IN       NUMBER,
14493
      recordset   OUT      typecur
14494
   )
14495
   IS
14496
      isbaseview   CHAR (1);
14497
   BEGIN
14498
      -- Check if the view is BASE VIEW
14499
      SELECT vi.base_view
14500
        INTO isbaseview
14501
        FROM views vi
14502
       WHERE vi.view_id = viewid;
14503
 
14504
      IF (isbaseview = 'Y')
14505
      THEN
14506
         -- Get Base view content
14507
         OPEN recordset FOR
14508
            SELECT   DECODE (rel.pkg_state,
14509
                             NULL, 0,
14510
                             rel.pkg_state
14511
                            ) AS pkg_state,
14512
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14513
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14514
                     pv.build_type
14515
                FROM environment_view rel, PACKAGES pkg, package_versions pv
14516
               WHERE pv.pkg_id = pkg.pkg_id
14517
                 AND rel.pv_id = pv.pv_id
14518
                 AND rel.view_id = viewid
14519
                 AND rel.rtag_id = rtagid
14520
            ORDER BY UPPER (pkg.pkg_name);
14521
      ELSE
14522
         -- Get non base view content
14523
         OPEN recordset FOR
14524
            SELECT   DECODE (rel.pkg_state,
14525
                             NULL, 0,
14526
                             rel.pkg_state
14527
                            ) AS pkg_state,
14528
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14529
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14530
                     pv.build_type
14531
                FROM environment_view rel,
14532
                     PACKAGES pkg,
14533
                     package_versions pv,
14534
                     view_def vd
14535
               WHERE pv.pkg_id = pkg.pkg_id
14536
                 AND rel.pv_id = pv.pv_id
14537
                 AND rel.rtag_id = rtagid
14538
                 AND vd.view_id = viewid
14539
                 AND vd.pkg_id = pv.pkg_id
14540
            ORDER BY UPPER (pkg.pkg_name);
14541
      END IF;
14542
   END;
14543
 
14544
/*-------------------------------------------------------------------------------------------------------*/
14545
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
14546
      RETURN NUMBER
14547
   IS
14548
      envtab             NUMBER;
14549
      returnvalue        NUMBER;
14550
      return_not_found   NUMBER := -1;
14551
   BEGIN
14552
      envtab := get_package_area (pvid, rtagid);
14553
 
14554
      IF envtab = 0
14555
      THEN
14556
         -- WORK IN PROGRESS --
14557
         returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
14558
      ELSIF envtab = 1
14559
      THEN
14560
         -- PENDING --
14561
         returnvalue := pk_planned.get_package_view (pvid, rtagid);
14562
      ELSIF envtab = 2
14563
      THEN
14564
         -- RELEASED --
14565
         returnvalue := pk_release.get_package_view (pvid, rtagid);
14566
      ELSE
14567
         -- This may be a Patch not located anywhere but unlocked
14568
         returnvalue := return_not_found;
14569
      END IF;
14570
 
14571
      RETURN returnvalue;
14572
   END;
14573
 
14574
/*-------------------------------------------------------------------------------------------------------*/
14575
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14576
   IS
14577
      viewid          NUMBER;
14578
      envtab          NUMBER;
14579
      ispatch         CHAR (1) := NULL;
14580
      buildtype       CHAR (1) := NULL;
14581
      lastversionid   NUMBER;
14582
   BEGIN
14583
      -- Check if package is patch
14584
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14585
        INTO ispatch, buildtype, lastversionid
14586
        FROM package_versions pv
14587
       WHERE pv.pv_id = pvid;
14588
 
14589
      -- Get ViewId
14590
      viewid := get_package_view (pvid, rtagid);
14591
      -- Remove from current area
14592
      envtab := pk_environment.get_package_area (pvid, rtagid);
14593
 
14594
      -- Make sure that package was in work-in-progress or pending before makeing it release
14595
      -- Exclude patches, ripple builds
14596
      IF (envtab < 0)
14597
      THEN
14598
         -- Not found in work-in-progress or pending
14599
         IF (ispatch IS NULL) AND (buildtype = 'M')
14600
         THEN
14601
            raise_application_error (-20000,
14602
                                     'This package cannot be released here.'
14603
                                    );
14604
         END IF;
14605
      END IF;
14606
 
14607
      -- Log
14608
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14609
 
14610
      IF envtab = 0
14611
      THEN
14612
         -- WORK IN PROGRESS --
14613
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14614
      ELSIF envtab = 1
14615
      THEN
14616
         -- PENDING --
14617
         pk_planned.remove_package (pvid, rtagid, userid);
14618
      END IF;
14619
 
14620
      -- Change package state
14621
      pk_package.change_state (pvid, 'Y', userid);
14622
 
14623
      -- Make sure it is valid BASE VIEW
14624
      IF viewid < 1
14625
      THEN
14626
         viewid := 7;                            -- This is default base view
14627
      END IF;
14628
 
14629
      IF (ispatch IS NULL)
14630
      THEN
14631
         -- Add package to new area
14632
         pk_release.add_package (pvid, viewid, rtagid, userid);
14633
      END IF;
14634
 
14635
      -- Now do post Release Actions
14636
      pk_release.run_post_actions (pvid, rtagid);
14637
 
14638
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14639
      DELETE FROM do_not_ripple
14640
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14641
 
14642
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14643
      DELETE FROM advisory_ripple
14644
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14645
 
14646
      -- Log
14647
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14648
   END;
14649
 
14650
/*-------------------------------------------------------------------------------------------------------*/
14651
   PROCEDURE auto_make_release (
14652
      pvid            IN   NUMBER,
14653
      rtagid          IN   NUMBER,
14654
      userid          IN   NUMBER,
14655
      vext            IN   package_versions.v_ext%TYPE,
14656
      ssv_ext         IN   package_versions.v_ext%TYPE,
14657
      clonefrompvid   IN   NUMBER
14658
   )
14659
   IS
14660
      viewid          NUMBER;
14661
      envtab          NUMBER;
14662
      ispatch         CHAR (1) := NULL;
14663
      buildtype       CHAR (1) := NULL;
14664
      lastversionid   NUMBER;
14665
   BEGIN
14666
      -- Check if package is patch
14667
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14668
        INTO ispatch, buildtype, lastversionid
14669
        FROM package_versions pv
14670
       WHERE pv.pv_id = pvid;
14671
 
14672
      IF vext <> ssv_ext
14673
      THEN
14674
         -- Get ViewId
14675
         viewid := get_package_view (clonefrompvid, rtagid);
14676
         -- Remove from current area
14677
         envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
14678
      ELSE
14679
         -- Get ViewId
14680
         viewid := get_package_view (pvid, rtagid);
14681
         -- Remove from current area
14682
         envtab := pk_environment.get_package_area (pvid, rtagid);
14683
      END IF;
14684
 
14685
      -- Make sure that package was in work-in-progress or pending before makeing it release
14686
      -- Exclude patches, ripple builds
14687
      IF (envtab < 0)
14688
      THEN
14689
         -- Not found in work-in-progress or pending
14690
         IF (ispatch IS NULL) AND (buildtype = 'M')
14691
         THEN
14692
            raise_application_error (-20000,
14693
                                     'This package cannot be released here.'
14694
                                    );
14695
         END IF;
14696
      END IF;
14697
 
14698
      -- Log
14699
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14700
 
14701
      IF vext <> ssv_ext
14702
      THEN
14703
         IF envtab = 0
14704
         THEN
14705
            -- WORK IN PROGRESS --
14706
            pk_work_in_progress.remove_package (clonefrompvid, rtagid,
14707
                                                userid);
14708
         ELSIF envtab = 1
14709
         THEN
14710
            -- PENDING --
14711
            pk_planned.remove_package (clonefrompvid, rtagid, userid);
14712
         ELSIF envtab = 2
14713
         THEN
14714
            -- RELEASED --
14715
            pk_release.remove_package (clonefrompvid, rtagid, userid);
14716
         END IF;
14717
      ELSE
14718
         IF envtab = 0
14719
         THEN
14720
            -- WORK IN PROGRESS --
14721
            pk_work_in_progress.remove_package (pvid, rtagid, userid);
14722
         ELSIF envtab = 1
14723
         THEN
14724
            -- PENDING --
14725
            pk_planned.remove_package (pvid, rtagid, userid);
14726
         END IF;
14727
      END IF;
14728
 
14729
      -- Change package state
14730
      pk_package.change_state (pvid, 'Y', userid);
14731
 
14732
      -- Make sure it is valid BASE VIEW
14733
      IF viewid < 1
14734
      THEN
14735
         viewid := 7;                            -- This is default base view
14736
      END IF;
14737
 
14738
      IF (ispatch IS NULL)
14739
      THEN
14740
         -- Add package to new area
14741
         pk_release.add_package (pvid, viewid, rtagid, userid);
14742
      END IF;
14743
 
14744
      -- Now do post Release Actions
14745
      pk_release.run_post_actions (pvid, rtagid);
14746
      -- Now update the Dash_Board Table
14747
      pk_rmapi.update_dash_board (rtagid);
14748
 
14749
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14750
      DELETE FROM do_not_ripple
14751
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14752
 
14753
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14754
      DELETE FROM advisory_ripple
14755
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14756
 
14757
      -- Log
14758
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14759
   END;
14760
 
14761
/*-------------------------------------------------------------------------------------------------------*/
14762
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14763
   IS
14764
      viewid   NUMBER;
14765
      envtab   NUMBER;
14766
   BEGIN
14767
      -- Get ViewId
14768
      --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
14769
      viewid := get_package_view (pvid, rtagid);
14770
      -- Remove from current area
14771
      envtab := pk_environment.get_package_area (pvid, rtagid);
14772
      -- Log
14773
      log_action (pvid,
14774
                  'action',
14775
                  userid,
14776
                  'Start of Make Package UnRelease...'
14777
                 );
14778
 
14779
      IF envtab = 2
14780
      THEN
14781
         -- RELEASE AREA --
14782
         pk_release.remove_package (pvid, rtagid, userid);
14783
      ELSIF envtab = 1
14784
      THEN
14785
         -- PENDING --
14786
         pk_planned.remove_package (pvid, rtagid, userid);
14787
      END IF;
14788
 
14789
      -- Change package state
14790
      pk_package.change_state (pvid, 'N', userid);
14791
 
14792
      -- Make sure it is valid BASE VIEW
14793
      IF viewid < 1
14794
      THEN
14795
         viewid := 7;                            -- This is default base view
14796
      END IF;
14797
 
14798
      -- Add package to new area
14799
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14800
      -- Now do post Release Actions
14801
      pk_release.run_post_actions (pvid, rtagid);
14802
      -- Log
14803
      log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
14804
   END;
14805
 
14806
/*-------------------------------------------------------------------------------------------------------*/
14807
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14808
   IS
14809
      viewid      NUMBER;
14810
      ispatch     CHAR (1) := NULL;
14811
      buildtype   CHAR (1) := NULL;
14812
   BEGIN
14813
      -- Check if package is patch
14814
      SELECT pv.is_patch, pv.build_type
14815
        INTO ispatch, buildtype
14816
        FROM package_versions pv
14817
       WHERE pv.pv_id = pvid;
14818
 
14819
      -- Get ViewId
14820
      viewid := get_package_view (pvid, rtagid);
14821
      --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
14822
 
14823
      -- Log
14824
      log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
14825
 
14826
      IF (ispatch IS NULL)
14827
      THEN
14828
         -- Remove from current area
14829
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14830
         -- Change package state
14831
         pk_package.change_state (pvid, 'P', userid);
14832
         -- Add package to new area
14833
         pk_planned.add_package (pvid, viewid, rtagid, userid);
14834
      END IF;
14835
 
14836
      -- Log
14837
      log_action (pvid, 'action', userid, 'End of Make Package Pending...');
14838
   END;
14839
 
14840
/*-------------------------------------------------------------------------------------------------------*/
14841
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14842
   IS
14843
   BEGIN
14844
      -- Log
14845
      log_action (pvid,
14846
                  'action',
14847
                  userid,
14848
                  'Start of Package Pending Approval...'
14849
                 );
14850
      -- Change package state
14851
      pk_package.change_state (pvid, 'A', userid);
14852
      -- Log
14853
      log_action (pvid, 'action', userid,
14854
                  'End of Package Pending Approval...');
14855
   END;
14856
 
14857
/*-------------------------------------------------------------------------------------------------------*/
14858
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14859
   IS
14860
      viewid   NUMBER;
14861
   BEGIN
14862
      -- Get ViewId
14863
      viewid := get_package_view (pvid, rtagid);
14864
-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
14865
 
14866
      -- Log
14867
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14868
      -- Remove from current area
14869
      pk_planned.remove_package (pvid, rtagid, userid);
14870
      -- Change package state
14871
      pk_package.change_state (pvid, 'R', userid);
14872
      -- Add package to new area
14873
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14874
      -- Log
14875
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14876
   END;
14877
 
14878
/*-------------------------------------------------------------------------------------------------------*/
14879
   PROCEDURE change_package_view (
14880
      pvid        IN   NUMBER,
14881
      rtagid      IN   NUMBER,
14882
      newviewid   IN   NUMBER
14883
   )
14884
   IS
14885
      envtab   NUMBER;
14886
   BEGIN
14887
      envtab := pk_environment.get_package_area (pvid, rtagid);
14888
 
14889
      IF envtab = 0
14890
      THEN
14891
         -- WORK IN PROGRESS --
14892
         pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
14893
      ELSIF envtab = 1
14894
      THEN
14895
         -- PENDING --
14896
         pk_planned.change_package_view (pvid, rtagid, newviewid);
14897
      ELSIF envtab = 2
14898
      THEN
14899
         -- RELEASED --
14900
         pk_release.change_package_view (pvid, rtagid, newviewid);
14901
      END IF;
14902
   END;
14903
 
14904
/*-------------------------------------------------------------------------------------------------------*/
14905
   PROCEDURE find_package (
14906
      skeyword      IN       VARCHAR2,
14907
      nrtagid       IN       NUMBER,
14908
      nsearcharea   IN       NUMBER,
14909
      recordset     OUT      typecur
14910
   )
14911
   IS
14912
   BEGIN
14913
      IF nsearcharea = 0
14914
      THEN
14915
         /* Search Work In Progress */
14916
         OPEN recordset FOR
14917
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14918
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14919
                     pv.modified_stamp, usr.full_name, usr.user_email
14920
                FROM views vi,
14921
                     work_in_progress rc,
14922
                     PACKAGES pkg,
14923
                     package_versions pv,
14924
                     users usr
14925
               WHERE rc.view_id = vi.view_id
14926
                 AND rc.pv_id = pv.pv_id
14927
                 AND pkg.pkg_id = pv.pkg_id
14928
                 AND pv.modifier_id = usr.user_id
14929
                 AND rc.rtag_id = nrtagid
14930
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14931
            ORDER BY UPPER (pkg.pkg_name);
14932
      ELSIF nsearcharea = 1
14933
      THEN
14934
         /* Search Pending */
14935
         OPEN recordset FOR
14936
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14937
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14938
                     pv.modified_stamp, usr.full_name, usr.user_email
14939
                FROM views vi,
14940
                     planned rc,
14941
                     PACKAGES pkg,
14942
                     package_versions pv,
14943
                     users usr
14944
               WHERE rc.view_id = vi.view_id
14945
                 AND rc.pv_id = pv.pv_id
14946
                 AND pkg.pkg_id = pv.pkg_id
14947
                 AND pv.modifier_id = usr.user_id
14948
                 AND rc.rtag_id = nrtagid
14949
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14950
            ORDER BY UPPER (pkg.pkg_name);
14951
      ELSIF nsearcharea = 2
14952
      THEN
14953
         /* Search Released */
14954
         OPEN recordset FOR
14955
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14956
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14957
                     pv.modified_stamp, usr.full_name, usr.user_email
14958
                FROM views vi,
14959
                     release_content rc,
14960
                     PACKAGES pkg,
14961
                     package_versions pv,
14962
                     users usr
14963
               WHERE rc.base_view_id = vi.view_id
14964
                 AND rc.pv_id = pv.pv_id
14965
                 AND pkg.pkg_id = pv.pkg_id
14966
                 AND pv.modifier_id = usr.user_id
14967
                 AND rc.rtag_id = nrtagid
14968
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14969
            ORDER BY UPPER (pkg.pkg_name);
14970
      ELSIF nsearcharea = 3
14971
      THEN
14972
         /* Search ALL */
14973
         OPEN recordset FOR
14974
            SELECT   rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
14975
                     pv.pv_id, pv.pkg_version, pv.comments,
14976
                     pv.modified_stamp, usr.full_name, usr.user_email
14977
                FROM views vi,
14978
                     environment_view rc,
14979
                     PACKAGES pkg,
14980
                     package_versions pv,
14981
                     users usr
14982
               WHERE rc.view_id = vi.view_id
14983
                 AND rc.pv_id = pv.pv_id
14984
                 AND pkg.pkg_id = pv.pkg_id
14985
                 AND pv.modifier_id = usr.user_id
14986
                 AND rc.rtag_id = nrtagid
14987
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14988
            ORDER BY UPPER (pkg.pkg_name);
14989
      END IF;
14990
   END;
14991
 
14992
/*-------------------------------------------------------------------------------------------------------*/
14993
   PROCEDURE find_file (
14994
      skeyword      IN       VARCHAR2,
14995
      nrtagid       IN       NUMBER,
14996
      nsearcharea   IN       NUMBER,
14997
      npagesize     IN       NUMBER,
14998
      recordset     OUT      typecur
14999
   )
15000
   IS
15001
   BEGIN
15002
      IF nsearcharea = 0
15003
      THEN
15004
         /* Search Work In Progress */
15005
         OPEN recordset FOR
15006
            SELECT   qry.*
15007
                FROM (
15008
                      /* File search on Packages */
15009
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15010
                             pv.pv_id, pv.pkg_version, art.crc_cksum
15011
                        FROM work_in_progress rc,
15012
                             PACKAGES pkg,
15013
                             package_versions pv,
15014
                             release_components art
15015
                       WHERE rc.pv_id = art.pv_id
15016
                         AND pv.pkg_id = pkg.pkg_id
15017
                         AND rc.pv_id = pv.pv_id
15018
                         AND rc.rtag_id = nrtagid
15019
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15020
                      UNION ALL
15021
                      /* File search on Products */
15022
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15023
                             pv.pv_id, pv.pkg_version, art.crc_cksum
15024
                        FROM work_in_progress rc,
15025
                             PACKAGES pkg,
15026
                             package_versions pv,
15027
                             product_components art
15028
                       WHERE rc.pv_id = art.pv_id
15029
                         AND pv.pkg_id = pkg.pkg_id
15030
                         AND rc.pv_id = pv.pv_id
15031
                         AND rc.rtag_id = nrtagid
15032
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15033
               WHERE ROWNUM <= npagesize
15034
            ORDER BY UPPER (qry.pkg_name);
15035
      ELSIF nsearcharea = 1
15036
      THEN
15037
         /* Search Pending */
15038
         OPEN recordset FOR
15039
            SELECT   qry.*
15040
                FROM (
15041
                      /* File search on Packages */
15042
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15043
                             pv.pv_id, pv.pkg_version, art.crc_cksum
15044
                        FROM planned rc,
15045
                             PACKAGES pkg,
15046
                             package_versions pv,
15047
                             release_components art
15048
                       WHERE rc.pv_id = art.pv_id
15049
                         AND pv.pkg_id = pkg.pkg_id
15050
                         AND rc.pv_id = pv.pv_id
15051
                         AND rc.rtag_id = nrtagid
15052
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15053
                      UNION ALL
15054
                      /* File search on Products */
15055
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15056
                             pv.pv_id, pv.pkg_version, art.crc_cksum
15057
                        FROM planned rc,
15058
                             PACKAGES pkg,
15059
                             package_versions pv,
15060
                             product_components art
15061
                       WHERE rc.pv_id = art.pv_id
15062
                         AND pv.pkg_id = pkg.pkg_id
15063
                         AND rc.pv_id = pv.pv_id
15064
                         AND rc.rtag_id = nrtagid
15065
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15066
               WHERE ROWNUM <= npagesize
15067
            ORDER BY UPPER (qry.pkg_name);
15068
      ELSIF nsearcharea = 2
15069
      THEN
15070
         /* Search Released */
15071
         OPEN recordset FOR
15072
            SELECT   qry.*
15073
                FROM (
15074
                      /* File search on Packages */
15075
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15076
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15077
                             NULL AS patch_id
15078
                        FROM release_content rc,
15079
                             PACKAGES pkg,
15080
                             package_versions pv,
15081
                             release_components art
15082
                       WHERE rc.pv_id = art.pv_id
15083
                         AND pv.pkg_id = pkg.pkg_id
15084
                         AND rc.pv_id = pv.pv_id
15085
                         AND rc.rtag_id = nrtagid
15086
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15087
                      UNION ALL
15088
                      /* File search on Products */
15089
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15090
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15091
                             NULL AS patch_id
15092
                        FROM release_content rc,
15093
                             PACKAGES pkg,
15094
                             package_versions pv,
15095
                             product_components art
15096
                       WHERE rc.pv_id = art.pv_id
15097
                         AND pv.pkg_id = pkg.pkg_id
15098
                         AND rc.pv_id = pv.pv_id
15099
                         AND rc.rtag_id = nrtagid
15100
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15101
                      UNION ALL
15102
                      /* File search on Patches */
15103
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15104
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15105
                             DECODE (art.file_path,
15106
                                     NULL, pp.patch_id,
15107
                                     NULL
15108
                                    ) AS patch_id
15109
                        FROM release_content rc,
15110
                             PACKAGES pkg,
15111
                             package_versions pv,
15112
                             release_components art,
15113
                             package_patches pp
15114
                       WHERE pv.pv_id = pp.pv_id
15115
                         AND pv.pkg_id = pkg.pkg_id
15116
                         AND rc.rtag_id = nrtagid
15117
                         AND art.pv_id = pp.patch_id
15118
                         AND rc.pv_id = pp.pv_id
15119
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15120
               WHERE ROWNUM <= npagesize
15121
            ORDER BY UPPER (qry.pkg_name);
15122
      ELSIF nsearcharea = 3
15123
      THEN
15124
         /* Search ALL */
15125
         OPEN recordset FOR
15126
            SELECT   qry.*
15127
                FROM (
15128
                      /* File search on Packages */
15129
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15130
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15131
                             NULL AS patch_id
15132
                        FROM environment_view rc,
15133
                             PACKAGES pkg,
15134
                             package_versions pv,
15135
                             release_components art
15136
                       WHERE rc.pv_id = art.pv_id
15137
                         AND pv.pkg_id = pkg.pkg_id
15138
                         AND rc.pv_id = pv.pv_id
15139
                         AND rc.rtag_id = nrtagid
15140
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15141
                      UNION ALL
15142
                      /* File search on Products */
15143
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15144
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15145
                             NULL AS patch_id
15146
                        FROM environment_view rc,
15147
                             PACKAGES pkg,
15148
                             package_versions pv,
15149
                             product_components art
15150
                       WHERE rc.pv_id = art.pv_id
15151
                         AND pv.pkg_id = pkg.pkg_id
15152
                         AND rc.pv_id = pv.pv_id
15153
                         AND rc.rtag_id = nrtagid
15154
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15155
                      UNION ALL
15156
                      /* File search on Patches */
15157
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15158
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15159
                             DECODE (art.file_path,
15160
                                     NULL, pp.patch_id,
15161
                                     NULL
15162
                                    ) AS patch_id
15163
                        FROM release_content rc,
15164
                             PACKAGES pkg,
15165
                             package_versions pv,
15166
                             release_components art,
15167
                             package_patches pp
15168
                       WHERE pv.pv_id = pp.pv_id
15169
                         AND pv.pkg_id = pkg.pkg_id
15170
                         AND rc.rtag_id = nrtagid
15171
                         AND art.pv_id = pp.patch_id
15172
                         AND rc.pv_id = pp.pv_id
15173
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15174
               WHERE ROWNUM <= npagesize
15175
            ORDER BY UPPER (qry.pkg_name);
15176
      END IF;
15177
   END;
15178
 
15179
/*-------------------------------------------------------------------------------------------------------*/
15180
   PROCEDURE get_prodrelease_items (
15181
      rtagid             IN       NUMBER,
15182
      ntruerecordcount   OUT      NUMBER,
15183
      recordset          OUT      typecur
15184
   )
15185
   IS
15186
   BEGIN
15187
      -- Get true record count n the number of integration products
15188
      SELECT COUNT (rc.pv_id)
15189
        INTO ntruerecordcount
15190
        FROM release_content rc
15191
       WHERE rc.rtag_id = rtagid;
15192
 
15193
      OPEN recordset FOR
15194
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,    --rel.pkg_state,
15195
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15196
                  pv.pkg_version, pv.dlocked, pv.pv_description
15197
             FROM release_content rel,
15198
                  PACKAGES pkg,
15199
                  package_versions pv,
15200
                  views vi
15201
            WHERE pv.pkg_id = pkg.pkg_id
15202
              AND rel.pv_id = pv.pv_id
15203
              AND rel.base_view_id = vi.view_id
15204
              AND pv.is_deployable = 'Y'
15205
              AND rtag_id = rtagid
15206
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15207
                                              FROM deployment_manager.os_contents)
15208
              AND rel.product_state IS NULL
15209
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15210
   END;
15211
 
15212
/*-------------------------------------------------------------------------------------------------------*/
15213
   PROCEDURE get_integration_items (
15214
      rtagid             IN       NUMBER,
15215
      ntruerecordcount   OUT      NUMBER,
15216
      recordset          OUT      typecur
15217
   )
15218
   IS
15219
   BEGIN
15220
      -- Get true record count n the number of integration products
15221
      SELECT COUNT (rc.pv_id)
15222
        INTO ntruerecordcount
15223
        FROM release_content rc
15224
       WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
15225
 
15226
      OPEN recordset FOR
15227
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15228
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15229
                  pv.pkg_version, pv.dlocked, pv.pv_description
15230
             FROM release_content rel,
15231
                  PACKAGES pkg,
15232
                  package_versions pv,
15233
                  views vi
15234
            WHERE pv.pkg_id = pkg.pkg_id
15235
              AND rel.pv_id = pv.pv_id
15236
              AND rel.base_view_id = vi.view_id
15237
              AND pv.is_deployable = 'Y'
15238
              AND rtag_id = rtagid
15239
              AND rel.product_state IN (1, 5)
15240
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15241
   END;
15242
 
15243
/*-------------------------------------------------------------------------------------------------------*/
15244
   PROCEDURE get_test_items (
15245
      rtagid             IN       NUMBER,
15246
      ntruerecordcount   OUT      NUMBER,
15247
      recordset          OUT      typecur
15248
   )
15249
   IS
15250
   BEGIN
15251
      -- Get true record count n the number of test products
15252
      SELECT COUNT (rc.pv_id)
15253
        INTO ntruerecordcount
15254
        FROM release_content rc
15255
       WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
15256
 
15257
      OPEN recordset FOR
15258
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15259
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15260
                  pv.pkg_version, pv.dlocked, pv.pv_description
15261
             FROM release_content rel,
15262
                  PACKAGES pkg,
15263
                  package_versions pv,
15264
                  views vi
15265
            WHERE pv.pkg_id = pkg.pkg_id
15266
              AND rel.pv_id = pv.pv_id
15267
              AND rel.base_view_id = vi.view_id
15268
              AND pv.is_deployable = 'Y'
15269
              AND rtag_id = rtagid
15270
              AND rel.product_state = 2
15271
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15272
   END;
15273
 
15274
/*-------------------------------------------------------------------------------------------------------*/
15275
   PROCEDURE get_deploy_items (
15276
      rtagid             IN       NUMBER,
15277
      ntruerecordcount   OUT      NUMBER,
15278
      recordset          OUT      typecur
15279
   )
15280
   IS
15281
   BEGIN
15282
      -- Get true record count n the number of deploy products
15283
      SELECT COUNT (rc.pv_id)
15284
        INTO ntruerecordcount
15285
        FROM release_content rc
15286
       WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
15287
 
15288
      OPEN recordset FOR
15289
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15290
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15291
                  pv.pkg_version, pv.dlocked, pv.pv_description
15292
             FROM release_content rel,
15293
                  PACKAGES pkg,
15294
                  package_versions pv,
15295
                  views vi
15296
            WHERE pv.pkg_id = pkg.pkg_id
15297
              AND rel.pv_id = pv.pv_id
15298
              AND rel.base_view_id = vi.view_id
15299
              AND pv.is_deployable = 'Y'
15300
              AND rtag_id = rtagid
15301
              AND rel.product_state IN (3, 5)
15302
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15303
                                              FROM deployment_manager.os_contents)
15304
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15305
   END;
15306
 
15307
/*-------------------------------------------------------------------------------------------------------*/
15308
   PROCEDURE get_reject_items (
15309
      rtagid             IN       NUMBER,
15310
      ntruerecordcount   OUT      NUMBER,
15311
      recordset          OUT      typecur
15312
   )
15313
   IS
15314
   BEGIN
15315
      -- Get true record count n the number of reject products
15316
      SELECT COUNT (rc.pv_id)
15317
        INTO ntruerecordcount
15318
        FROM release_content rc
15319
       WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
15320
 
15321
      OPEN recordset FOR
15322
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15323
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15324
                  pv.pkg_version, pv.dlocked, pv.pv_description
15325
             FROM release_content rel,
15326
                  PACKAGES pkg,
15327
                  package_versions pv,
15328
                  views vi
15329
            WHERE pv.pkg_id = pkg.pkg_id
15330
              AND rel.pv_id = pv.pv_id
15331
              AND rel.base_view_id = vi.view_id
15332
              AND pv.is_deployable = 'Y'
15333
              AND rtag_id = rtagid
15334
              AND rel.product_state = 4
15335
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15336
   END;
15337
/*-------------------------------------------------------------------------------------------------------*/
15338
END pk_environment_test;
15339
/
15340
--------------------------------------------------------
15341
--  DDL for Package Body PK_BUILDAPI_TEST
15342
--------------------------------------------------------
15343
 
15344
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI_TEST" IS
15345
 
15346
/*
15347
------------------------------
15348
||  Last Modified:  S.Vukovic
15349
||  Modified Date:  30/Mar/2005
15350
||  Body Version:   1.0
15351
------------------------------
15352
*/
15353
 
15354
 
15355
/*-------------------------------------------------------------------------------------------------------*/
15356
PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
15357
								  sOsName IN VARCHAR2,
15358
								  sOrigFilePath IN VARCHAR2,
15359
								  sFileName IN VARCHAR2,
15360
								  sDestFilePath IN VARCHAR2,
15361
								  nByteSize IN NUMBER,
15362
								  sCRCcksum IN VARCHAR2 ) IS
15363
 
15364
	nOsId NUMBER;
15365
 
15366
BEGIN
15367
	/*--------------- Business Rules Here -------------------*/
15368
	-- OS Name Requirements --
15369
	IF (sOsName IS NULL) THEN
15370
		RAISE_APPLICATION_ERROR (-20000, 'OsName cannot be NULL.');
15371
	END IF;
15372
 
15373
 
15374
	-- File Requirements --
15375
	IF (NOT sFileName IS NULL) THEN
15376
 
15377
		IF (nByteSize IS NULL) THEN
15378
			RAISE_APPLICATION_ERROR (-20000, 'Byte Size cannot be NULL.');
15379
 
15380
		ELSIF (sCRCcksum IS NULL) THEN
15381
			RAISE_APPLICATION_ERROR (-20000, 'CRC CKSUM cannot be NULL.');
15382
 
15383
		END IF;
15384
 
15385
	END IF;
15386
 
15387
 
15388
	-- Folder Requirements --
15389
	-- No requirements for now.
15390
 
15391
	/*-------------------------------------------------------*/
15392
 
15393
	-- Get OsId
15394
	nOsId := Get_OsId ( sOsName );
15395
 
15396
 
15397
	-- Insert component entry
15398
	INSERT INTO PRODUCT_COMPONENTS ( PV_ID, OS_ID, FILE_PATH, FILE_NAME, DESTINATION_PATH, BYTE_SIZE, CRC_CKSUM )
15399
    VALUES (
15400
			  nPvId,
15401
			  nOsId,
15402
			  sOrigFilePath,
15403
			  sFileName,
15404
			  sDestFilePath,
15405
			  nByteSize,
15406
			  sCRCcksum
15407
			);
15408
 
15409
 
15410
	EXCEPTION
15411
    WHEN DUP_VAL_ON_INDEX
15412
	THEN
15413
		RAISE_APPLICATION_ERROR (-20000, 'Cannot have duplicate product components.');
15414
 
15415
END;
15416
/*-------------------------------------------------------------------------------------------------------*/
15417
PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 ) IS
15418
 
15419
	nOsId NUMBER;
15420
 
15421
BEGIN
15422
	/*--------------- Business Rules Here -------------------*/
15423
	/*-------------------------------------------------------*/
15424
 
15425
	-- Get OsId
15426
	nOsId := Get_OsId ( sOsName );
15427
 
15428
 
15429
	-- Delete component entry
15430
	DELETE
15431
	  FROM PRODUCT_COMPONENTS pc
15432
	 WHERE pc.PV_ID = nPvId
15433
	   AND pc.OS_ID = nOsId;
15434
 
15435
 
15436
END;
15437
/*-------------------------------------------------------------------------------------------------------*/
15438
FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER IS
15439
	Code NUMBER;
15440
 
15441
BEGIN
15442
 
15443
	-- Get Platform Code --
15444
	SELECT pf.CODE INTO Code
15445
	  FROM PLATFORMS pf
15446
	 WHERE UPPER( pf.NAME ) = UPPER( sOsName );
15447
 
15448
 
15449
	RETURN Code;	   
15450
 
15451
	EXCEPTION
15452
    	WHEN NO_DATA_FOUND THEN
15453
       		RAISE_APPLICATION_ERROR (-20000, 'Platform '|| sOsName ||' is not valid. It needs to be added to PLATFORMS table in Release Manager.' );
15454
   	RAISE;
15455
END;
15456
/*-------------------------------------------------------------------------------------------------------*/
15457
PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
15458
			  					 sWebServer IN VARCHAR2,
15459
								 sMailServer IN VARCHAR2,
15460
								 sMailSender IN VARCHAR2) IS
15461
 
15462
BEGIN
15463
 
15464
 
15465
	 UPDATE BUILD_SERVICE_CONFIG
15466
	 SET CONFIG = sDatabaseServer
15467
	 WHERE SERVICE = 'DATABASE SERVER'; 
15468
 
15469
	 UPDATE BUILD_SERVICE_CONFIG
15470
	 SET CONFIG = sWebServer
15471
	 WHERE SERVICE = 'WEB SERVER'; 
15472
 
15473
	 UPDATE BUILD_SERVICE_CONFIG
15474
	 SET CONFIG = sMailServer
15475
	 WHERE SERVICE = 'MAIL SERVER'; 
15476
 
15477
	 UPDATE BUILD_SERVICE_CONFIG
15478
	 SET CONFIG = sMailSender
15479
	 WHERE SERVICE = 'BUILD FAILURE MAIL SENDER'; 	 	 									 
15480
 
15481
 
15482
 
15483
END;
15484
/*-------------------------------------------------------------------------------------------------------*/
15485
PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue in VARCHAR2 ) IS
15486
 
15487
GBE_ID NUMBER;
15488
 
15489
BEGIN
15490
 
15491
	-- Get GBE_ID
15492
	SELECT SEQ_GBE_ID.NEXTVAL INTO GBE_ID FROM DUAL;
15493
 
15494
	INSERT INTO GBE_MACHTYPE (GBE_ID, GBE_VALUE)
15495
	VALUES( GBE_ID, sGBEValue);
15496
 
15497
 
15498
END;
15499
/*-------------------------------------------------------------------------------------------------------*/
15500
PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER ) IS
15501
 
15502
BEGIN
15503
 
15504
	 DELETE FROM GBE_MACHTYPE WHERE GBE_ID = nGBE_ID;
15505
 
15506
END;
15507
/*-------------------------------------------------------------------------------------------------------*/
15508
PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 ) IS
15509
 
15510
BEGIN
15511
 
15512
	 UPDATE GBE_MACHTYPE
15513
	 SET GBE_VALUE = sGBEValue 
15514
	 WHERE GBE_ID = nGBE_ID;
15515
 
15516
 
15517
END;
15518
/*-------------------------------------------------------------------------------------------------------*/
15519
PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER ) IS
15520
 
15521
nRecordNumber NUMBER;
15522
nRconId NUMBER;
15523
BEGIN
15524
	-- Get RCON_ID
15525
	SELECT SEQ_RCON_ID.NEXTVAL INTO nRconId FROM DUAL; 
15526
 
15527
        SELECT count(*) INTO nRecordNumber 
15528
        FROM RELEASE_CONFIG
15529
        WHERE RTAG_ID = nRtagId;
15530
 
15531
        IF nRecordNumber = 0 THEN
15532
       	   INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15533
           VALUES (nRconId, nRtagId, sDaemonHostname, 'M', nGbeId);
15534
        ELSE
15535
        	INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15536
        	VALUES (nRconId, nRtagId, sDaemonHostname, 'S', nGbeId);
15537
        END IF;
15538
 
15539
 
15540
 
15541
END;
15542
/*-------------------------------------------------------------------------------------------------------*/        
15543
END PK_BUILDAPI_TEST;
15544
/
15545
--------------------------------------------------------
15546
--  DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO
15547
--------------------------------------------------------
15548
 
15549
  CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (
15550
   nprojid     IN   NUMBER,
15551
   nviewid     IN   NUMBER,
15552
   suserlist   IN   VARCHAR2
15553
)
15554
IS
15555
   groupid   NUMBER;
15556
/******************************************************************************
15557
   NAME:       ADD_AUTOBUILD_FAILURE
15558
   PURPOSE:
15559
 
15560
   REVISIONS:
15561
   Ver        Date        Author           Description
15562
   ---------  ----------  ---------------  ------------------------------------
15563
   1.0        11/04/2006   Rupesh Solanki Created this procedure.
15564
 
15565
   NOTES:
15566
 
15567
   Automatically available Auto Replace Keywords:
15568
      Object Name:     ADD_AUTOBUILD_FAILURE
15569
      Sysdate:         11/04/2006
15570
      Date and Time:   11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AM
15571
      Username:         (set in TOAD Options, Procedure Editor)
15572
      Table Name:       (set in the "New PL/SQL Object" dialog)
15573
 
15574
******************************************************************************/
15575
BEGIN
15576
   BEGIN
15577
      SELECT group_email_id
15578
        INTO groupid
15579
        FROM autobuild_failure
15580
       WHERE proj_id = nprojid AND view_id = nviewid;
15581
   EXCEPTION
15582
      WHEN NO_DATA_FOUND
15583
      THEN
15584
         --  Create Next Sequence Id ---
15585
         SELECT seq_group_email_id.NEXTVAL
15586
           INTO groupid
15587
           FROM DUAL;
15588
 
15589
         INSERT INTO autobuild_failure
15590
                     (group_email_id, proj_id, view_id
15591
                     )
15592
              VALUES (groupid, nprojid, nviewid
15593
                     );
15594
   END;
15595
 
15596
   add_view_members (groupid, suserlist);
15597
END add_autobuild_failure_info;
15598
/
15599
--------------------------------------------------------
15600
--  DDL for Procedure DEPRECATE_PACKAGE
15601
--------------------------------------------------------
15602
 
15603
  CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
15604
	   	  		  							   nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
15605
	   	  		  							   nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
15606
											   sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,
15607
											   nUserId IN NUMBER) IS
15608
ext VARCHAR2(50);
15609
 
15610
 
15611
 
15612
 
15613
BEGIN
15614
 
15615
	--Extract the package version extension
15616
	SELECT V_EXT into ext
15617
	FROM PACKAGE_VERSIONS
15618
	WHERE PV_ID = nPvId; 
15619
 
15620
    -- Deprecate Package
15621
    INSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)
15622
	VALUES (nRtagId, nPkgId, sComments, ext);
15623
 
15624
	IF ext IS NOT NULL THEN
15625
	   UPDATE RELEASE_CONTENT 
15626
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15627
	   WHERE RTAG_ID = nRtagId
15628
	   AND PV_ID IN (SELECT PV.PV_ID 
15629
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15630
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15631
				  	AND PV.V_EXT = ext
15632
				  	AND PKG.PKG_ID = nPkgId
15633
				 	);						
15634
	ELSE
15635
	   UPDATE RELEASE_CONTENT 
15636
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15637
	   WHERE RTAG_ID = nRtagId
15638
	   AND PV_ID IN (SELECT PV.PV_ID 
15639
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15640
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15641
				  	AND PV.V_EXT IS NULL
15642
				  	AND PKG.PKG_ID = nPkgId
15643
				 	);
15644
	END IF;
15645
 
15646
	UPDATE RELEASE_CONTENT
15647
	SET PKG_ID = nPkgId, DEPRECATED_STATE = 7
15648
	WHERE RTAG_ID = nRtagId
15649
	AND PV_ID IN (		   SELECT DISTINCT
15650
 	 		  	 		   qry.PV_ID
15651
						        FROM (
15652
								 	  SELECT dep.*,
15653
									  LEVEL AS LEVEL_NUM
15654
									  FROM PACKAGE_DEPENDENCIES dep 
15655
 								START WITH dep.DPV_ID IN ( nPvId ) 
15656
								CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
15657
 								) qry,
15658
								PACKAGES pkg,
15659
								PACKAGE_VERSIONS pv,
15660
								RELEASE_CONTENT rc
15661
						 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
15662
							 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
15663
							 AND rc.DEPRECATED_STATE IS NULL
15664
				 );			 
15665
 
15666
    /* LOG ACTION */
15667
   	/*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/
15668
 
15669
 
15670
END Deprecate_Package;
15671
/
15672
--------------------------------------------------------
15673
--  DDL for Procedure LOG_PROJECT_ACTION
15674
--------------------------------------------------------
15675
 
15676
  CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,
15677
												 enumActionTypeName IN VARCHAR2,
15678
		                                         nUserId IN NUMBER,
15679
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL,
15680
												 nRtagId IN NUMBER  ) IS
15681
/* ---------------------------------------------------------------------------
15682
    Version: 3.0
15683
   --------------------------------------------------------------------------- */
15684
 
15685
    ActionTypeId NUMBER;
15686
 
15687
BEGIN
15688
 
15689
    -- Get Action Type FK
15690
    SELECT act.ACTTYPE_ID INTO ActionTypeId
15691
      FROM ACTION_TYPE act
15692
     WHERE act.NAME = enumActionTypeName;
15693
 
15694
 
15695
    INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)
15696
    VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);
15697
 
15698
 
15699
END Log_Project_Action;
15700
/
15701
--------------------------------------------------------
15702
--  DDL for Procedure RIPPLE_PACKAGE
15703
--------------------------------------------------------
15704
 
15705
  CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (
15706
        sPvIdList IN VARCHAR2,
15707
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
15708
        nUserId IN NUMBER
15709
    ) IS
15710
/* ---------------------------------------------------------------------------
15711
    Version: 4.1
15712
   --------------------------------------------------------------------------- */
15713
 
15714
BEGIN
15715
 
15716
    IF (sPvIdList IS NULL) THEN
15717
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
15718
    END IF;
15719
 
15720
    -- Ripple Package
15721
    DELETE FROM DO_NOT_RIPPLE
15722
    WHERE RTAG_ID = nRtagId
15723
    AND PV_ID IN (
15724
        SELECT *
15725
        FROM THE (
15726
            SELECT CAST( IN_LIST_NUMBER( sPvIdList )
15727
            AS RELMGR_NUMBER_TAB_t )
15728
            FROM DUAL
15729
        )
15730
    );
15731
 
15732
    /* LOG ACTION */
15733
    Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );
15734
 
15735
END Ripple_Package;
15736
/
15737
--------------------------------------------------------
15738
--  DDL for Procedure DT_SETPROPERTYBYID
15739
--------------------------------------------------------
15740
 
15741
  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;
15742
/
15743
--------------------------------------------------------
15744
--  DDL for Procedure BASIC_CLONE
15745
--------------------------------------------------------
15746
 
15747
  CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,
15748
                        nTOpv_id IN NUMBER,
15749
                        nRtag_id IN NUMBER,
15750
                        nUser_id IN NUMBER,
15751
                        nTOpkg_id IN NUMBER DEFAULT NULL,
15752
                        enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) IS
15753
 
15754
   FromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
15755
   major NUMBER;
15756
   minor NUMBER;
15757
   patch NUMBER;
15758
   buildn NUMBER;
15759
   from_vcs_type_id NUMBER;
15760
BEGIN
15761
------------------------------ Version Control System ------------------------------------------
15762
   SELECT vcs_type_id
15763
      INTO from_vcs_type_id
15764
      FROM package_versions WHERE pv_id = nFROMpv_id;
15765
 
15766
   UPDATE package_versions
15767
      SET vcs_type_id = from_vcs_type_id
15768
      WHERE pv_id = nTOpv_id;
15769
------------------------------------- Limits ---------------------------------------------------
15770
   select major_limit, minor_limit, patch_limit, build_number_limit
15771
   into major, minor, patch, buildn
15772
   from package_versions where pv_id=nFROMpv_id;
15773
    UPDATE package_versions SET
15774
           major_limit = major,
15775
           minor_limit = minor,
15776
           patch_limit = patch,
15777
           build_number_limit = buildn
15778
     WHERE PV_ID = nTOpv_id;
15779
------------------------------------- Clone Dependencies ---------------------------------------------------
15780
   IF NOT nRtag_id IS NULL
15781
   THEN
15782
      -- Auto Update Dependencies --
15783
      INSERT INTO PACKAGE_DEPENDENCIES
15784
           SELECT nTOpv_id AS pv_id,
15785
                  DECODE(nUser_id,
15786
                         frc.modifier_id,
15787
                         frc.pv_id,
15788
                         DECODE(frc.dlocked,
15789
                                'Y',
15790
                                frc.pv_id,
15791
                                dep.dpv_id)
15792
                         ) AS dpv_id,
15793
                  nTOpkg_id AS pkg_id,
15794
                  dep.dpkg_id,
15795
                  dep.build_type,
15796
                  dep.display_order
15797
             FROM PACKAGE_DEPENDENCIES dep,
15798
                  PACKAGE_VERSIONS pv,
15799
                  (
15800
                  /* Full Release Contents used for reference*/
15801
                  SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlocked
15802
                  FROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpv
15803
                  WHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id
15804
                  ) frc
15805
            WHERE dep.pv_id = nFROMpv_id
15806
              AND dep.dpv_id = pv.pv_id
15807
              AND pv.pkg_id = frc.pkg_id(+)
15808
              AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);
15809
   ELSE
15810
      -- Clone Dependencies --
15811
      INSERT INTO PACKAGE_DEPENDENCIES
15812
           SELECT nTOpv_id         AS pv_id,
15813
                  dep.dpv_id,
15814
                  nTOpkg_id        AS pkg_id,
15815
                  dep.dpkg_id,
15816
                  dep.build_type,
15817
                  dep.display_order
15818
             FROM PACKAGE_DEPENDENCIES dep
15819
            WHERE dep.pv_id = nFROMpv_id;
15820
 
15821
   END IF;
15822
 
15823
----------------------------------------- Clone Issues -------------------------------------------------------
15824
   IF enumISSUES_STATE_IMPORTED IS NULL
15825
   THEN
15826
        /* All Issues */
15827
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15828
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15829
              FROM CQ_ISSUES
15830
             WHERE pv_id = nFROMpv_id;
15831
   ELSE
15832
       /* Outstanding Issues Only */
15833
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15834
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15835
              FROM CQ_ISSUES
15836
             WHERE pv_id = nFROMpv_id
15837
               AND iss_state = enumISSUES_STATE_IMPORTED;
15838
   END IF;
15839
 
15840
------------------------------------ Clone Runtime Dependencies -----------------------------------------------
15841
   INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)
15842
       SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user
15843
       FROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;
15844
 
15845
--------------------------------------- Clone Additional Notes ------------------------------------------------
15846
   INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )
15847
        SELECT an.NOTE_ID,
15848
               nTOpv_id AS PV_ID,
15849
               an.NOTE_TITLE,
15850
               an.NOTE_BODY,
15851
               an.MOD_DATE,
15852
               an.MOD_USER
15853
          FROM ADDITIONAL_NOTES an
15854
         WHERE an.PV_ID = nFROMpv_id;
15855
 
15856
-------------------------------------------- Clone Unit Tests -------------------------------------------------
15857
   -- Clone only Automatic unit tests --
15858
   INSERT INTO UNIT_TESTS (
15859
                           TEST_ID,
15860
                           PV_ID,
15861
                           TEST_TYPES_FK,
15862
                           TEST_SUMMARY,
15863
                           COMPLETION_DATE,
15864
                           COMPLETED_BY,
15865
                           RESULTS_URL,
15866
                           RESULTS_ATTACHMENT_NAME,
15867
                           NUMOF_TEST
15868
                          )
15869
        SELECT ut.TEST_ID,
15870
               nTOpv_id AS PV_ID,
15871
               ut.TEST_TYPES_FK,
15872
               ut.TEST_SUMMARY,
15873
               Ora_Sysdate AS COMPLETION_DATE,
15874
               nUser_id AS COMPLETED_BY,
15875
               ut.RESULTS_URL,
15876
               ut.RESULTS_ATTACHMENT_NAME,
15877
               ut.NUMOF_TEST
15878
          FROM UNIT_TESTS ut
15879
         WHERE ut.PV_ID = nFROMpv_id
15880
           AND ut.TEST_TYPES_FK IN ( 5, 7 );
15881
 
15882
    -- Clone only Interactive Unit Tests --
15883
    INSERT INTO UNIT_TESTS (
15884
                            TEST_ID,
15885
                            PV_ID,
15886
                            TEST_TYPES_FK,
15887
                            TEST_SUMMARY
15888
                           )
15889
       SELECT ut.TEST_ID,
15890
              nTOpv_id AS PV_ID,
15891
              ut.TEST_TYPES_FK,
15892
              ut.TEST_SUMMARY
15893
         FROM UNIT_TESTS ut
15894
        WHERE ut.PV_ID = nFROMpv_id
15895
          AND ut.TEST_TYPES_FK IN (6);
15896
 
15897
-------------------------------------------- Clone Package Documents ------------------------------------------
15898
   INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )
15899
        SELECT nTOpv_id AS PV_ID,
15900
               pd.test_id,
15901
               pd.doc_num,
15902
               pd.doc_id,
15903
               pd.IS_LATEST
15904
          FROM PACKAGE_DOCUMENTS pd
15905
         WHERE pd.PV_ID = nFROMpv_id;
15906
 
15907
-------------------------------------------- Clone Build Environments -----------------------------------------
15908
    INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )
15909
    SELECT nTOpv_id AS PV_ID,
15910
           pkgbe.BE_ID,
15911
           pkgbe.BUILD_TYPE
15912
      FROM PACKAGE_BUILD_ENV pkgbe
15913
     WHERE pkgbe.PV_ID = nFROMpv_id;
15914
---------------------------------------------Clone Package Build Info------------------------------------------
15915
    INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)
15916
    SELECT nTOpv_id AS PV_ID,
15917
           pkgbinfo.BM_ID,
15918
           pkgbinfo.BSA_ID
15919
      FROM PACKAGE_BUILD_INFO pkgbinfo
15920
     WHERE pkgbinfo.PV_ID = nFROMpv_id;
15921
---------------------------------------------Clone Package Version Processes-----------------------------------
15922
    INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )
15923
    SELECT nTOpv_id AS PV_ID,
15924
           pp.PROC_ID
15925
      FROM PACKAGE_PROCESSES pp
15926
     WHERE pp.PV_ID = nFROMpv_id;
15927
---------------------------------------------Clone Licencing Associations-----------------------------------
15928
    PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);
15929
---------------------------------------------------------------------------------------------------------------
15930
 
15931
    /* LOG ACTION */
15932
    SELECT pv.PKG_VERSION INTO FromVersion
15933
      FROM PACKAGE_VERSIONS pv
15934
     WHERE pv.PV_ID = nFROMpv_id;
15935
 
15936
    Log_Action ( nTOpv_id, 'clone_from', nUser_id,
15937
                 'Details cloned from: '|| FromVersion );
15938
 
15939
---------------------------------------------------------------------------------------------------------------
15940
 
15941
END Basic_Clone;
15942
/
15943
--------------------------------------------------------
15944
--  DDL for Procedure UPDATE_UNIT_TEST
15945
--------------------------------------------------------
15946
 
15947
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,
15948
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
15949
											   nPv_id IN NUMBER,
15950
											   nUserId IN NUMBER,
15951
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
15952
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
15953
	                                           sCompletion_date IN VARCHAR2,
15954
											   sDpkg_path IN VARCHAR2,
15955
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
15956
											   sResults IN VARCHAR2,
15957
											   outFileName OUT VARCHAR2
15958
                                              ) IS
15959
/* ---------------------------------------------------------------------------
15960
    Version: 3.1.0
15961
   --------------------------------------------------------------------------- */
15962
 
15963
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
15964
 
15965
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
15966
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
15967
 
15968
 
15969
BEGIN
15970
 
15971
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
15972
       	ResultsURL := sResults;
15973
       ELSE
15974
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
15975
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
15976
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
15977
           END IF;
15978
       END IF;
15979
 
15980
	--- Update Unit Test ---
15981
    UPDATE UNIT_TESTS SET
15982
           TEST_SUMMARY = sTest_summary,
15983
		   NUMOF_TEST = sNumof_test,
15984
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
15985
		   COMPLETED_BY = nUserId,
15986
		   RESULTS_URL = ResultsURL,
15987
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
15988
     WHERE TEST_ID = nTest_id
15989
       AND PV_ID = nPv_id;
15990
 
15991
END Update_Unit_Test;
15992
/
15993
--------------------------------------------------------
15994
--  DDL for Procedure SET_TO_AUTOBUILDABLE
15995
--------------------------------------------------------
15996
 
15997
  CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (
15998
   nrtagid     IN   NUMBER,
15999
   spvidlist   IN   VARCHAR2
16000
)
16001
IS
16002
/******************************************************************************
16003
   NAME:       SET_TO_AUTOBUILDABLE
16004
   PURPOSE:
16005
 
16006
   REVISIONS:
16007
   Ver        Date        Author           Description
16008
   ---------  ----------  ---------------  ------------------------------------
16009
   1.0        15/12/2006   Rupesh Solanki       1. Created this procedure.
16010
 
16011
   NOTES:
16012
 
16013
   Automatically available Auto Replace Keywords:
16014
      Object Name:     SET_TO_AUTOBUILDABLE
16015
      Sysdate:         15/12/2006
16016
      Date and Time:   15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AM
16017
      Username:         (set in TOAD Options, Procedure Editor)
16018
      Table Name:       (set in the "New PL/SQL Object" dialog)
16019
 
16020
******************************************************************************/
16021
   npvidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
16022
   PvId NUMBER;
16023
BEGIN
16024
 
16025
   npvidcollector := in_list_number2 (spvidlist);
16026
 
16027
   UPDATE package_versions
16028
      SET is_autobuildable = 'N'
16029
    WHERE pv_id IN (SELECT pv_id
16030
                      FROM release_content
16031
                     WHERE rtag_id = nrtagid);
16032
 
16033
 
16034
 
16035
   	FOR i IN 1..npvidcollector.COUNT
16036
	LOOP
16037
		PvId := npvidcollector(i);
16038
 
16039
		UPDATE package_versions
16040
		set is_autobuildable = 'Y'
16041
		where pv_id = PvId;
16042
 
16043
	END LOOP;
16044
 
16045
 
16046
END set_to_autobuildable;
16047
/
16048
--------------------------------------------------------
16049
--  DDL for Procedure LEVEL_N_CONFLICTS
16050
--------------------------------------------------------
16051
 
16052
  CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (
16053
   nnrtag_id       IN       NUMBER,
16054
   nnsession_num   IN       NUMBER,
16055
   nnrowcnt        OUT      NUMBER,
16056
   nniteration     IN       NUMBER
16057
)
16058
IS
16059
/* ---------------------------------------------------------------------------
16060
    Version: 3.0.1
16061
   --------------------------------------------------------------------------- */
16062
   previteration   NUMBER := nniteration - 1;
16063
BEGIN
16064
   /* ---------  LEVEL 1 CONFILCTS -----------
16065
   || Following states are used:
16066
   || 0 -> NOT FOUND
16067
   || 1 -> MAJOR
16068
   || 2 -> MINOR MINOR
16069
   */
16070
   INSERT INTO temp_env_states
16071
      SELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,
16072
                      pv.pv_id, pv.pkg_id, pv.v_ext,
16073
                      DECODE (tes.tes_state, 2, 2, 1) AS MESSAGE
16074
                 FROM package_dependencies dep,
16075
                      package_versions dpv,
16076
                      package_versions pv,
16077
                      release_content rel,
16078
                      temp_env_states tes
16079
                WHERE rel.pv_id = dep.pv_id
16080
                  AND rel.rtag_id = nnrtag_id
16081
                  AND dep.pv_id = pv.pv_id
16082
                  AND dep.dpv_id = dpv.pv_id
16083
                  AND dpv.pkg_id = tes.pkg_id
16084
                  AND NVL (dpv.v_ext, '|LINK_A_NULL|') =
16085
                                              NVL (tes.v_ext, '|LINK_A_NULL|')
16086
                  AND tes.session_num = nnsession_num
16087
                  AND tes.level_num = previteration
16088
                  AND (dep.pv_id, dep.dpv_id) IN 
16089
                                                   /* Remove packages listed in IGNORE_WARNINGS table and
16090
                                                 || packages already stored in Temp Table.
16091
                                                 */
16092
                      (
16093
                         SELECT pd.pv_id, pd.dpv_id
16094
                           FROM package_dependencies pd, release_content rc
16095
                          WHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id
16096
                         --AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )
16097
                         MINUS
16098
                         SELECT igw.pv_id, igw.dpv_id
16099
                           FROM ignore_warnings igw
16100
                          WHERE igw.rtag_id = nnrtag_id);
16101
 
16102
   nnrowcnt := SQL%ROWCOUNT;
16103
END level_n_conflicts;
16104
/
16105
--------------------------------------------------------
16106
--  DDL for Procedure REMOVE_COMPONENTS
16107
--------------------------------------------------------
16108
 
16109
  CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS
16110
/* ---------------------------------------------------------------------------
16111
    Version: 3.0.0
16112
   --------------------------------------------------------------------------- */
16113
 
16114
 
16115
BEGIN
16116
 
16117
	 --- Delete From RELEASE_COMPONENTS
16118
	 DELETE FROM RELEASE_COMPONENTS
16119
	 WHERE PV_ID = nPvId;
16120
 
16121
END Remove_Components;
16122
/
16123
--------------------------------------------------------
16124
--  DDL for Procedure ADD_COMPONENT
16125
--------------------------------------------------------
16126
 
16127
  CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,
16128
	   	  		  						  	sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,
16129
											sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,
16130
											nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,
16131
											sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,
16132
											sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL
16133
                                           ) IS
16134
/* ---------------------------------------------------------------------------
16135
    Version: 3.0.0
16136
   --------------------------------------------------------------------------- */
16137
 
16138
 
16139
BEGIN
16140
 
16141
	 --- Insert into RELEASE_COMPONENTS
16142
	 INSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )
16143
	 VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc  );
16144
 
16145
 
16146
 
16147
 
16148
END Add_Component;
16149
/
16150
--------------------------------------------------------
16151
--  DDL for Procedure ADD_PACKAGE_INTEREST
16152
--------------------------------------------------------
16153
 
16154
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
16155
	   	  		  								  nPkgIdList IN VARCHAR2,
16156
												  nUserId IN NUMBER
16157
	   	  		  								  ) IS
16158
 
16159
/******************************************************************************
16160
   NAME:       ADD_PACKAGE_INTEREST
16161
   PURPOSE:    
16162
 
16163
   REVISIONS:
16164
   Ver        Date        Author           Description
16165
   ---------  ----------  ---------------  ------------------------------------
16166
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
16167
 
16168
   NOTES:
16169
 
16170
   Automatically available Auto Replace Keywords:
16171
      Object Name:     ADD_PACKAGE_INTEREST
16172
      Sysdate:         12/05/2006
16173
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
16174
      Username:         (set in TOAD Options, Procedure Editor)
16175
      Table Name:       (set in the "New PL/SQL Object" dialog)
16176
 
16177
******************************************************************************/
16178
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
16179
   nPkgId NUMBER;
16180
BEGIN
16181
 
16182
	 npkgidcollector := in_list_number2 (nPkgIdList);
16183
 
16184
	FOR i IN 1..npkgidcollector.COUNT
16185
	LOOP
16186
		nPkgId := npkgidcollector(i);
16187
 
16188
	 --- Insert into PACKAGE_INTEREST TABLE
16189
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
16190
	 VALUES(nProjId, nPkgId, nUserId);
16191
	END LOOP;	 
16192
 
16193
 
16194
END ADD_PACKAGE_INTEREST;
16195
/
16196
--------------------------------------------------------
16197
--  DDL for Procedure UNLOCK_PACKAGE
16198
--------------------------------------------------------
16199
 
16200
  CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16201
											 nUserId IN NUMBER ) IS
16202
/* ---------------------------------------------------------------------------
16203
    Author: Rupesh Solanki
16204
 
16205
	Version: 4.0
16206
   --------------------------------------------------------------------------- */
16207
   STATE CHAR;
16208
 
16209
BEGIN
16210
 
16211
	SELECT DLOCKED INTO STATE
16212
	FROM PACKAGE_VERSIONS
16213
	WHERE PV_ID = nPvId; 
16214
 
16215
	IF STATE = 'A' THEN --It was made official for autobuilds
16216
		-- Unlock Package
16217
		UPDATE PACKAGE_VERSIONS pv SET
16218
		pv.DLOCKED = 'P'
16219
		WHERE pv.PV_ID = nPvId;	
16220
	ELSE
16221
		-- Unlock Package
16222
		UPDATE PACKAGE_VERSIONS pv SET
16223
		pv.DLOCKED = 'N'
16224
		WHERE pv.PV_ID = nPvId;	
16225
 
16226
	END IF;	   
16227
 
16228
    /* LOG ACTION */
16229
   	Log_Action ( nPvId, 'unlock_package', nUserId );
16230
 
16231
END Unlock_Package;
16232
/
16233
--------------------------------------------------------
16234
--  DDL for Procedure REMOVE_PROJECT_VIEW_OWNER
16235
--------------------------------------------------------
16236
 
16237
  CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,
16238
	   	  		  						 			  nViewId IN NUMBER,
16239
										 			  sUserIdList IN VARCHAR2,
16240
										 			  nUserId IN NUMBER ) IS
16241
 
16242
GroupId NUMBER;													  
16243
 
16244
 
16245
 
16246
/******************************************************************************
16247
   NAME:       UPDATE_VIEW
16248
   PURPOSE:    
16249
 
16250
   REVISIONS:
16251
   Ver        Date        Author           		Description
16252
   ---------  ----------  ---------------  ------------------------------------
16253
   1.0        10/04/2006     Rupesh Solanki     1. Created this procedure.
16254
 
16255
   NOTES:
16256
 
16257
   Automatically available Auto Replace Keywords:
16258
      Object Name:     UPDATE_VIEW
16259
      Sysdate:         10/04/2006
16260
      Date and Time:   10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PM
16261
      Username:         (set in TOAD Options, Procedure Editor)
16262
      Table Name:       (set in the "New PL/SQL Object" dialog)
16263
 
16264
******************************************************************************/
16265
 
16266
BEGIN
16267
	 SELECT GROUP_EMAIL_ID into GroupId
16268
	 FROM AUTOBUILD_FAILURE
16269
	 WHERE PROJ_ID = nProjId
16270
	 AND VIEW_ID = nViewId;
16271
 
16272
	 DELETE FROM MEMBERS_GROUP
16273
	 WHERE GROUP_EMAIL_ID = GroupId
16274
	 AND USER_ID IN (
16275
	 SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
16276
	 );
16277
 
16278
 
16279
 
16280
END REMOVE_PROJECT_VIEW_OWNER;
16281
/
16282
--------------------------------------------------------
16283
--  DDL for Procedure DEPLOY_TO_RELEASE
16284
--------------------------------------------------------
16285
 
16286
  CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS
16287
 
16288
/******************************************************************************
16289
 
16290
 
16291
******************************************************************************/
16292
 
16293
	CURSOR curInfo IS
16294
    SELECT DISTINCT
16295
        qry.DPV_ID
16296
     FROM (
16297
             SELECT dep.*,
16298
                    LEVEL AS LEVEL_NUM
16299
               FROM PACKAGE_DEPENDENCIES dep
16300
             START WITH dep.PV_ID IN ( 
16301
 
16302
                        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
16303
 
16304
                        ) 
16305
 			CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID
16306
 		) qry,
16307
 		PACKAGES pkg,
16308
		PACKAGE_VERSIONS pv
16309
 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
16310
         and (pv.is_patch is null or pv.is_patch = 'N');
16311
    recInfo curInfo%ROWTYPE;
16312
 
16313
 
16314
BEGIN
16315
 
16316
	OPEN curInfo;
16317
    FETCH curInfo INTO recInfo;
16318
 
16319
	WHILE curInfo%FOUND
16320
	LOOP
16321
 
16322
	insert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
16323
    VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);
16324
 
16325
    FETCH curInfo INTO recInfo;
16326
 
16327
	END LOOP;
16328
 
16329
	CLOSE curInfo;
16330
 
16331
 
16332
 
16333
 
16334
END DEPLOY_TO_RELEASE; 
16335
/
16336
--------------------------------------------------------
16337
--  DDL for Procedure TOUCH_RELEASE
16338
--------------------------------------------------------
16339
 
16340
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
16341
/* ---------------------------------------------------------------------------
16342
    The purpose of this procedure is to flag in the database that the specified
16343
    release has changed to an extent that the procedure Rebuild_Environment
16344
    should be called at the next opportunity in order that the package state
16345
    icons are all re-evaluated.
16346
    The package state icons are controlled using the pkg_state column in the
16347
    release_content table, and Rebuild_Environment updates that column.
16348
    It will be through user action in the website that Rebuild_Environment will
16349
    be called, for example:
16350
      a) when setting/clearing ignore warnings checkboxes
16351
      b) when someone opens a page upon a rtag/pvid and rebuild_en flag is set
16352
      c) when someone opens the build order report form
16353
      d) when someone modifies dependencies of a package
16354
      + other scenarios (?)
16355
   --------------------------------------------------------------------------- */
16356
BEGIN
16357
   -- Touch Release for Rebuild
16358
   UPDATE RELEASE_TAGS rt SET
16359
          rt.REBUILD_ENV = 'Y',
16360
          rt.REBUILD_STAMP = 0
16361
    WHERE rt.RTAG_ID = nRtagId;
16362
 
16363
END Touch_Release;
16364
/
16365
--------------------------------------------------------
16366
--  DDL for Procedure UNRIPPLE_PACKAGE
16367
--------------------------------------------------------
16368
 
16369
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (
16370
        sPvIdList IN VARCHAR2,
16371
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
16372
        nUserId IN NUMBER
16373
    ) IS
16374
/* ---------------------------------------------------------------------------
16375
    Version: 4.1
16376
   --------------------------------------------------------------------------- */
16377
 
16378
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
16379
 
16380
BEGIN
16381
 
16382
    IF (sPvIdList IS NULL) THEN
16383
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
16384
    END IF;
16385
 
16386
    oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
16387
 
16388
    -- UnRipple Package
16389
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )
16390
    SELECT nRtagId, pv.PV_ID
16391
    FROM PACKAGE_VERSIONS pv
16392
    WHERE pv.PV_ID IN (
16393
        SELECT *
16394
        FROM TABLE (
16395
            CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )
16396
        )
16397
    );
16398
 
16399
    /* LOG ACTION */
16400
    Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );
16401
 
16402
END UnRipple_Package;
16403
/
16404
--------------------------------------------------------
16405
--  DDL for Procedure DT_DROPUSEROBJECTBYID
16406
--------------------------------------------------------
16407
 
16408
  CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;
16409
/
16410
--------------------------------------------------------
16411
--  DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT
16412
--------------------------------------------------------
16413
 
16414
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (
16415
        nPvId IN NUMBER,
16416
        nRtagId IN NUMBER,
16417
        nUserId IN NUMBER,
16418
        nrootCausePvId IN NUMBER,
16419
        srootCause IN VARCHAR2,
16420
        srootFile IN VARCHAR2
16421
    ) IS
16422
    ReleaseLocation VARCHAR2(4000);
16423
BEGIN
16424
 
16425
    -- UnRipple Package
16426
    delete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;
16427
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);
16428
 
16429
    /* LOG ACTION */
16430
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16431
              FROM PROJECTS proj,
16432
                   RELEASE_TAGS rt
16433
             WHERE rt.RTAG_ID = nRtagId
16434
               AND rt.PROJ_ID = proj.PROJ_ID;
16435
 
16436
    /* LOG ACTION */
16437
    Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );
16438
 
16439
END UnRipple_Package_Indirect;
16440
/
16441
--------------------------------------------------------
16442
--  DDL for Procedure TO_INSERT_VTREE_ID
16443
--------------------------------------------------------
16444
 
16445
  CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS
16446
 
16447
/******************************************************************************
16448
   NAME:       TO_INSERT_VTREE_ID
16449
   PURPOSE:    
16450
 
16451
   REVISIONS:
16452
   Ver        Date        Author           Description
16453
   ---------  ----------  ---------------  ------------------------------------
16454
   1.0        2/02/2007          1. Created this procedure.
16455
 
16456
   NOTES:
16457
 
16458
   Automatically available Auto Replace Keywords:
16459
      Object Name:     TO_INSERT_VTREE_ID
16460
      Sysdate:         2/02/2007
16461
      Date and Time:   2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AM
16462
      Username:         (set in TOAD Options, Procedure Editor)
16463
      Table Name:       (set in the "New PL/SQL Object" dialog)
16464
 
16465
******************************************************************************/
16466
VTreeId NUMBER;																			  																	   
16467
 
16468
 
16469
	CURSOR curInfo IS
16470
    SELECT RTAG_ID
16471
	FROM RELEASE_TAGS
16472
	WHERE VTREE_ID IS NULL;
16473
    recInfo curInfo%ROWTYPE;
16474
 
16475
 
16476
BEGIN
16477
 
16478
	OPEN curInfo;
16479
    FETCH curInfo INTO recInfo;
16480
 
16481
	WHILE curInfo%FOUND
16482
	LOOP
16483
		SELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;
16484
 
16485
		UPDATE RELEASE_TAGS
16486
		SET VTREE_ID = VTreeId
16487
		WHERE RTAG_ID = recInfo.RTAG_ID;
16488
 
16489
		FETCH curInfo INTO recInfo;
16490
	END LOOP;
16491
 
16492
	CLOSE curInfo;
16493
 
16494
END TO_INSERT_VTREE_ID;
16495
/
16496
--------------------------------------------------------
16497
--  DDL for Procedure CHANGE_RELEASE_MODE
16498
--------------------------------------------------------
16499
 
16500
  CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS
16501
/* ---------------------------------------------------------------------------
16502
    Version: 3.0.0
16503
   --------------------------------------------------------------------------- */
16504
 
16505
	cMode CHAR(1) := NULL;  
16506
	nProjId NUMBER; 
16507
 
16508
BEGIN
16509
 
16510
 
16511
	/*
16512
	Author: Rupesh Solanki
16513
	Modified: 24th October 2006
16514
	Reason: Added the archive mode state into Release Manager 
16515
	||	1 - Open Mode
16516
	||	2 - Restrictive Mode
16517
	||	3 - Closed Mode
16518
	||	4 - CCB Mode
16519
	||	5 - Archive Mode
16520
	*/	
16521
	-- Get project Id
16522
	SELECT rt.PROJ_ID INTO nProjId
16523
	  FROM RELEASE_TAGS rt
16524
	 WHERE rt.RTAG_ID = nRtagId; 
16525
 
16526
	IF nModeCode = 1 THEN
16527
		-- Open Mode
16528
		cMode := 'N';
16529
 
16530
		/* LOG ACTION */
16531
   		Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );
16532
 
16533
	ELSIF nModeCode = 2 THEN
16534
		-- Restrictive Mode
16535
		cMode := 'R';
16536
 
16537
		/* LOG ACTION */
16538
   		Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );
16539
 
16540
	ELSIF nModeCode = 3 THEN
16541
		-- Closed Mode
16542
		cMode := 'Y';
16543
 
16544
		/* LOG ACTION */
16545
   		Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId  );
16546
 
16547
	ELSIF nModeCode = 4 THEN
16548
		-- CCB Mode
16549
		cMode := 'C';
16550
 
16551
		/* LOG ACTION */
16552
   		Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId  );
16553
 
16554
	ELSIF nModeCode = 5 THEN
16555
		-- Archive Mode
16556
		cMode := 'A';
16557
 
16558
		/* LOG ACTION */
16559
   		Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId  );	
16560
 
16561
 
16562
	END IF;
16563
 
16564
 
16565
 
16566
	-- Now update table
16567
	IF NOT cMode IS NULL THEN
16568
		UPDATE RELEASE_TAGS rt SET
16569
		rt.OFFICIAL = cMode
16570
		WHERE rt.RTAG_ID = nRtagId;
16571
 
16572
	END IF;
16573
 
16574
 
16575
END CHANGE_RELEASE_MODE;
16576
/
16577
--------------------------------------------------------
16578
--  DDL for Procedure UPDATE_UNIT_TEST_TEST
16579
--------------------------------------------------------
16580
 
16581
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,
16582
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
16583
											   nPv_id IN NUMBER,
16584
											   nUserId IN NUMBER,
16585
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
16586
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
16587
	                                           sCompletion_date IN VARCHAR2,
16588
											   sDpkg_path IN VARCHAR2,
16589
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
16590
											   sResults IN VARCHAR2,
16591
											   outFileName OUT VARCHAR2
16592
                                              ) IS
16593
/* ---------------------------------------------------------------------------
16594
    Version: 3.1.0
16595
   --------------------------------------------------------------------------- */
16596
 
16597
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
16598
 
16599
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
16600
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
16601
 
16602
 
16603
BEGIN
16604
 
16605
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
16606
       	ResultsURL := sResults;
16607
       ELSE
16608
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16609
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
16610
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
16611
           END IF;
16612
       END IF;
16613
 
16614
       /*	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16615
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
16616
    		sResults_url:= 'doc' || '/' || 
16617
			;
16618
        END IF;*/
16619
	--- Update Unit Test ---
16620
    UPDATE UNIT_TESTS SET
16621
           TEST_SUMMARY = sTest_summary,
16622
		   NUMOF_TEST = sNumof_test,
16623
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
16624
		   COMPLETED_BY = nUserId,
16625
		   RESULTS_URL = ResultsURL,
16626
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
16627
     WHERE TEST_ID = nTest_id
16628
       AND PV_ID = nPv_id;
16629
 
16630
END Update_Unit_Test_Test;
16631
/
16632
--------------------------------------------------------
16633
--  DDL for Procedure NEW_VERSION
16634
--------------------------------------------------------
16635
 
16636
  CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,
16637
                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,
16638
                                          NNsetto_pv_id IN NUMBER DEFAULT NULL,
16639
                                          NNrtag_id IN NUMBER,
16640
                                          NNuser_id IN NUMBER,
16641
                                          enumISSUES_STATE_IMPORTED IN NUMBER,
16642
                                          retPv_id OUT NUMBER ) IS
16643
 
16644
 
16645
  TO BE REMOVED   !!!										  
16646
 
16647
 
16648
 
16649
 
16650
/* ---------------------------------------------------------------------------
16651
    Version: 3.3
16652
   --------------------------------------------------------------------------- */
16653
 
16654
    ReleaseLocation VARCHAR2(4000);
16655
    origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;
16656
    origDlocked PACKAGE_VERSIONS.dlocked%TYPE;
16657
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
16658
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
16659
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
16660
    nIssuesTypes NUMBER;
16661
 
16662
    CURSOR package_versions_cur IS
16663
        SELECT pv.pv_id, pv.is_patch
16664
          FROM PACKAGE_VERSIONS pv
16665
         WHERE pv.pkg_version = SSpkg_version
16666
           AND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );
16667
    package_versions_rec package_versions_cur%ROWTYPE;
16668
 
16669
    CURSOR clone_package_versions_cur IS
16670
        SELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;
16671
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
16672
 
16673
BEGIN
16674
	IF NNsetto_pv_id IS NULL
16675
    THEN
16676
		-- SetToPv_id is not supplied, hence proceed.
16677
 
16678
	    /* ---------------------------------------------------- */
16679
	    /* Find id package_version exists                       */
16680
	    /* ---------------------------------------------------- */
16681
 
16682
	    OPEN package_versions_cur;
16683
	    FETCH package_versions_cur INTO package_versions_rec;
16684
 
16685
	    IF package_versions_cur%NOTFOUND
16686
	    THEN
16687
	        SELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;
16688
	        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
16689
 
16690
	        OPEN clone_package_versions_cur;
16691
	        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
16692
	        origPkg_id := clone_package_versions_rec.pkg_id;
16693
	        origDlocked := clone_package_versions_rec.dlocked;
16694
	        CLOSE clone_package_versions_cur;
16695
 
16696
	        -- Clone Package Version Details --
16697
	        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,
16698
	                                       src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )
16699
	            SELECT retPv_id         AS pv_id,
16700
	                   origPkg_id       AS pkg_id,
16701
	                   SSpkg_version    AS pkg_version,
16702
	                   'N'              AS dlocked,
16703
	                   Ora_Sysdate      AS created_stamp,
16704
	                   NNuser_id        AS creator_id,
16705
	                   Ora_Sysdatetime  AS modified_stamp,
16706
	                   NNuser_id        AS modifier_id,
16707
	                   SSV_MM           AS V_MM,
16708
	                   SSV_NMM          AS V_NMM,
16709
	                   SSV_EXT          AS V_EXT,
16710
	                   pv.src_path,
16711
	                   pv.pv_description,
16712
                       pv.PV_OVERVIEW,
16713
                       NNorig_pv_id 	AS LAST_PV_ID,
16714
	                   pv.owner_id,
16715
					   pv.IS_DEPLOYABLE,
16716
					   pv.IS_BUILD_ENV_REQUIRED
16717
	              FROM PACKAGE_VERSIONS pv
16718
	             WHERE pv.pv_id = NNorig_pv_id;
16719
 
16720
 
16721
	        -- Set Issues Type for cloning ---
16722
	        IF origDlocked = 'Y'
16723
	        THEN
16724
            	nIssuesTypes := enumISSUES_STATE_IMPORTED;
16725
	        ELSE
16726
            	nIssuesTypes := NULL;
16727
	        END IF;
16728
 
16729
			Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );
16730
 
16731
 
16732
 
16733
	    ELSE
16734
	        retPv_id := package_versions_rec.pv_id;
16735
 
16736
	    END IF;
16737
 
16738
        CLOSE package_versions_cur;
16739
 
16740
	ELSE
16741
    	retPv_id := NNsetto_pv_id;
16742
    END IF;
16743
 
16744
 
16745
    /* ---------------------------------------------------- */
16746
    /* Insert into Release Contents (EXCLUDE PATCHES)       */
16747
    /* ---------------------------------------------------- */
16748
	IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THEN
16749
	    UPDATE RELEASE_CONTENT
16750
	       SET pv_id = retPv_id,
16751
	           insert_stamp = Ora_Sysdate,
16752
	           insertor_id = NNuser_id
16753
	     WHERE rtag_id = NNrtag_id
16754
	       AND pv_id = NNorig_pv_id;
16755
 
16756
        /* LOG ACTION */
16757
        SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16758
		  FROM PROJECTS proj,
16759
		  	   VTREES vt,
16760
		       RELEASE_TAGS rt
16761
		 WHERE rt.VTREE_ID = vt.VTREE_ID
16762
		   AND vt.PROJ_ID = proj.PROJ_ID
16763
		   AND rt.RTAG_ID = NNrtag_id;
16764
 
16765
        Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );
16766
   		Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );
16767
 
16768
	END IF;
16769
 
16770
 
16771
END New_Version;
16772
/
16773
--------------------------------------------------------
16774
--  DDL for Procedure ADD_RUNTIME_DEPENDENCY
16775
--------------------------------------------------------
16776
 
16777
  CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,
16778
                                                     SSrtd_name IN PACKAGES.pkg_name%TYPE,
16779
                                                     SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
16780
                                                     NNuser_id IN NUMBER
16781
                                                    ) IS
16782
/* ---------------------------------------------------------------------------
16783
    Version: 3.1
16784
   --------------------------------------------------------------------------- */
16785
 
16786
    retRTD_ID NUMBER;
16787
 
16788
	CURSOR rtd_cur IS
16789
        SELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;
16790
    rtd_rec rtd_cur%ROWTYPE;
16791
 
16792
BEGIN
16793
    --- Seed database with package_name and version if required ---
16794
    Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );
16795
 
16796
	OPEN rtd_cur;
16797
    FETCH rtd_cur INTO rtd_rec;
16798
 
16799
    IF rtd_cur%NOTFOUND
16800
    THEN
16801
		/* Make sure it does not exists already as runtime dependency */
16802
 
16803
		--- Add new Runtime Dependency ---
16804
	    INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )
16805
	    VALUES (  NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );
16806
 
16807
    	/* LOG ACTION */
16808
        Log_Action ( NNpv_id, 'runtime_add', NNuser_id,
16809
    			     'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );
16810
 
16811
	END IF;
16812
 
16813
 
16814
END Add_Runtime_Dependency;
16815
/
16816
--------------------------------------------------------
16817
--  DDL for Procedure LEVEL_ONE_CONFLICTS
16818
--------------------------------------------------------
16819
 
16820
  CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (
16821
   nnrtag_id       IN   NUMBER,
16822
   nnsession_num   IN   NUMBER
16823
)
16824
IS
16825
BEGIN
16826
   /* ---------  LEVEL 1 CONFILCTS -----------
16827
   || Following states are used:
16828
   || 0 -> NOT FOUND
16829
   || 1 -> MAJOR
16830
   || 2 -> MINOR MINOR
16831
   */
16832
   INSERT INTO temp_env_states
16833
      SELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,
16834
                      err.pv_id, errpkg.pkg_id, errpkg.v_ext,
16835
                      DECODE (frc.v_nmm,
16836
                              NULL, 0,
16837
                              errpv.v_nmm, DECODE (frc.v_mm,
16838
                                                   errpv.v_mm, NULL,
16839
                                                   2
16840
                                                  ),
16841
                              1
16842
                             ) AS MESSAGE
16843
                 FROM (
16844
                       /* Full Release Contents used for reference*/
16845
                        SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,
16846
                                NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,
16847
                                rpv.pkg_version, rpv.v_nmm, rpv.v_mm,
16848
                                (SELECT COUNT(*)
16849
                                   FROM ADVISORY_RIPPLE avr
16850
                                  WHERE avr.rtag_id = rel.rtag_id
16851
                                    AND avr.pv_id = rel.pv_id
16852
                                ) AS IsAvr
16853
                          FROM release_content rel,
16854
                                package_versions rpv
16855
                          WHERE rel.pv_id = rpv.pv_id
16856
                             AND rtag_id = nnrtag_id
16857
                      ) frc,
16858
 
16859
                      (
16860
                       /* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will not
16861
                          necessarily be satisfied in the release) */
16862
                       SELECT dep.pv_id, dep.dpv_id AS err_dpv
16863
                         FROM package_dependencies dep,
16864
                              package_versions dep_dpv
16865
                        WHERE dep.dpv_id = dep_dpv.pv_id
16866
                          AND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16867
                          AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)
16868
                          AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16869
                       MINUS
16870
                       /* MINUS Dependencies to be ignored */
16871
                       SELECT igw.pv_id, igw.dpv_id AS err_dpv
16872
                         FROM ignore_warnings igw,
16873
                              package_versions igw_dpv
16874
                        WHERE igw.dpv_id = igw_dpv.pv_id
16875
                          AND igw.rtag_id = nnrtag_id
16876
                      ) err,
16877
                      package_versions errpkg,
16878
                      package_versions errpv
16879
                WHERE err.err_dpv = errpv.pv_id
16880
                  AND errpv.pkg_id = frc.pkg_id(+)
16881
                  AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
16882
                  AND err.pv_id = errpkg.pv_id
16883
                  AND frc.IsAvr = 0;
16884
END level_one_conflicts;
16885
/
16886
--------------------------------------------------------
16887
--  DDL for Procedure OLE
16888
--------------------------------------------------------
16889
 
16890
  CREATE OR REPLACE PROCEDURE "OLE" 
16891
IS retval VARCHAR2(40);   
16892
BEGIN   retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 ) 
16893
DBMS_OUTPUT.PUT_LINE(retval);
16894
/
16895
--------------------------------------------------------
16896
--  DDL for Procedure SYNC_PROJECTS_NEW_VERSION
16897
--------------------------------------------------------
16898
 
16899
  CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id 				IN NUMBER,
16900
														  sSyncRtagsInList		IN VARCHAR2,
16901
				                                          nUser_id 				IN NUMBER ) IS
16902
/* ---------------------------------------------------------------------------
16903
    Version: 3.0.0
16904
   --------------------------------------------------------------------------- */
16905
 
16906
	CURSOR sync_rtags_cur IS
16907
        SELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_id
16908
		  FROM release_content rc,
16909
		  	   package_versions pv,
16910
		       package_versions opv
16911
		 WHERE rc.pv_id = pv.pv_id
16912
		   AND opv.pkg_id = pv.pkg_id
16913
		   AND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')
16914
		   AND opv.pv_id = nPv_id
16915
		   AND rtag_id IN ( SELECT *
16916
		   	   		   	      FROM THE (
16917
					   	   		   	    SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )
16918
					       		   	    FROM dual
16919
									   )
16920
						  );
16921
    sync_rtags_rec sync_rtags_cur%ROWTYPE;
16922
 
16923
BEGIN
16924
 
16925
	OPEN sync_rtags_cur;
16926
	FETCH sync_rtags_cur INTO sync_rtags_rec;
16927
 
16928
	WHILE sync_rtags_cur%FOUND
16929
	LOOP
16930
		DELETE FROM RELEASE_CONTENT
16931
		 WHERE rtag_id = sync_rtags_rec.rtag_id
16932
	       AND pv_id = sync_rtags_rec.pv_id;
16933
 
16934
		INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
16935
	   		   VALUES ( sync_rtags_rec.rtag_id,
16936
		       		  	nPv_id,
16937
						sync_rtags_rec.BASE_VIEW_ID,
16938
	           			Ora_Sysdate,
16939
	           			nUser_id,
16940
 
16941
	      	   		   );
16942
 
16943
-- 		UPDATE RELEASE_CONTENT
16944
-- 	       SET pv_id = nPv_id,
16945
-- 	           insert_stamp = Ora_Sysdate,
16946
-- 	           insertor_id = nUser_id
16947
-- 	     WHERE rtag_id = sync_rtags_rec.rtag_id
16948
-- 	       AND pv_id = sync_rtags_rec.pv_id;
16949
 
16950
		FETCH sync_rtags_cur INTO sync_rtags_rec;
16951
	END LOOP;
16952
 
16953
	CLOSE sync_rtags_cur;
16954
 
16955
END Sync_Projects_New_Version;
16956
/
16957
--------------------------------------------------------
16958
--  DDL for Procedure LOCK_PACKAGE
16959
--------------------------------------------------------
16960
 
16961
  CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16962
											 nUserId IN NUMBER ) IS
16963
/* ---------------------------------------------------------------------------
16964
    Version: 4.0
16965
   --------------------------------------------------------------------------- */
16966
 
16967
BEGIN
16968
 
16969
    -- Lock Package
16970
    UPDATE PACKAGE_VERSIONS pv SET
16971
    	pv.DLOCKED = 'Y'
16972
    WHERE pv.PV_ID = nPvId;
16973
 
16974
    /* LOG ACTION */
16975
   	Log_Action ( nPvId, 'lock_package', nUserId );
16976
 
16977
END Lock_Package;
16978
/
16979
--------------------------------------------------------
16980
--  DDL for Procedure UPDATE_PACKAGE_STATES
16981
--------------------------------------------------------
16982
 
16983
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,
16984
                                                    NNsession_num IN NUMBER ) IS
16985
/* =============  STATE RULES =================== */
16986
/*
16987
   MNR   MRR   MN   MR    |   pkg_state
16988
   ------------------------------------
16989
 
16990
 
16991
 
16992
 
16993
   ------------------------------------
16994
 
16995
 
16996
 
16997
 
16998
   ------------------------------------
16999
    1     0     0     0   |      MINOR_READY
17000
    1     0     0     1   |      MAJOR
17001
    1     0     1     0   |      MINOR
17002
    1     0     1     1   |      MAJOR
17003
   ------------------------------------
17004
    1     1     0     0   |      MAJOR_READY
17005
    1     1     0     1   |      MAJOR
17006
    1     1     1     0   |      MAJOR
17007
    1     1     1     1   |      MAJOR
17008
   ------------------------------------
17009
*/
17010
BEGIN
17011
    /*----------------------------------------------
17012
    ||              MINOR READY
17013
    */----------------------------------------------
17014
 
17015
    UPDATE release_content
17016
       SET pkg_state = 4
17017
     WHERE rtag_id = NNrtag_id
17018
       AND pv_id IN
17019
           (
17020
           SELECT DISTINCT pv_id
17021
           FROM temp_env_states
17022
           WHERE session_num = NNsession_num
17023
             AND level_num = 1
17024
             AND tes_state = 2
17025
           );
17026
 
17027
    /*----------------------------------------------
17028
    ||              MAJOR READY
17029
    */----------------------------------------------
17030
    UPDATE release_content
17031
       SET pkg_state = 3
17032
     WHERE rtag_id = NNrtag_id
17033
       AND pv_id IN
17034
           (
17035
           SELECT DISTINCT pv_id
17036
           FROM temp_env_states
17037
           WHERE session_num = NNsession_num
17038
             AND level_num = 1
17039
             AND tes_state IN (0,1)
17040
           );
17041
 
17042
    /*----------------------------------------------
17043
    ||                MINOR
17044
    */----------------------------------------------
17045
    UPDATE release_content
17046
       SET pkg_state = 2
17047
     WHERE rtag_id = NNrtag_id
17048
       AND pv_id IN
17049
           (
17050
           SELECT DISTINCT pv_id
17051
            FROM temp_env_states
17052
            WHERE session_num = NNsession_num
17053
              AND level_num >= 2
17054
              AND tes_state = 2
17055
            MINUS
17056
           SELECT pv_id
17057
             FROM release_content
17058
            WHERE rtag_id = NNrtag_id
17059
              AND pkg_state = 3
17060
           );
17061
 
17062
    /*----------------------------------------------
17063
    ||                MAJOR
17064
    */----------------------------------------------
17065
    UPDATE release_content
17066
       SET pkg_state = 1
17067
     WHERE rtag_id = NNrtag_id
17068
       AND pv_id IN
17069
           (
17070
           SELECT DISTINCT pv_id
17071
           FROM temp_env_states
17072
           WHERE session_num = NNsession_num
17073
             AND level_num >= 2
17074
             AND tes_state IN (0,1)
17075
           /* MAJOR EXCEPTION - When package has Major Ready and Minor */
17076
           UNION
17077
           SELECT DISTINCT tes.pv_id
17078
           FROM temp_env_states tes,
17079
                release_content rc
17080
           WHERE tes.session_num = NNsession_num
17081
             AND tes.level_num >= 2
17082
             AND tes.tes_state = 2
17083
             AND rtag_id = NNrtag_id
17084
             AND rc.pv_id = tes.pv_id
17085
             AND rc.pkg_state = 3
17086
           );
17087
 
17088
    /*----------------------------------------------
17089
    ||                 OK
17090
    */----------------------------------------------
17091
    UPDATE release_content
17092
       SET pkg_state = 0
17093
     WHERE rtag_id = NNrtag_id
17094
       AND pv_id IN
17095
           (
17096
           SELECT rc.pv_id
17097
             FROM release_content rc
17098
            WHERE rc.rtag_id = NNrtag_id
17099
              AND NOT rc.pv_id IN
17100
                    (
17101
                     SELECT DISTINCT pv_id
17102
                     FROM temp_env_states WHERE session_num = NNsession_num
17103
                    )
17104
           );
17105
 
17106
      Update_Deprecation_State (NNrtag_id);
17107
 
17108
    /*----------------------------------------------
17109
    ||              PEGGED VERSIONS DEPENDENT
17110
    */----------------------------------------------
17111
    UPDATE release_content
17112
       SET pkg_state = 10
17113
     WHERE rtag_id = NNrtag_id
17114
       AND pv_id IN
17115
           (
17116
           SELECT DISTINCT pv_id
17117
           FROM pegged_versions pegv
17118
           WHERE pegv.rtag_id = NNrtag_id
17119
           );
17120
 
17121
    /*----------------------------------------------
17122
    ||              ADVISORY RIPPLE
17123
    */----------------------------------------------
17124
    UPDATE release_content
17125
       SET pkg_state = 8
17126
     WHERE rtag_id = NNrtag_id
17127
       AND pv_id IN
17128
           (
17129
           SELECT DISTINCT pv_id
17130
           FROM advisory_ripple ar
17131
           WHERE ar.rtag_id = NNrtag_id
17132
           )
17133
       AND pv_id IN
17134
           (
17135
           SELECT DISTINCT pv_id
17136
           FROM release_content rc
17137
           WHERE rc.rtag_id = NNrtag_id
17138
           );
17139
 
17140
END Update_Package_States;
17141
/
17142
--------------------------------------------------------
17143
--  DDL for Procedure UPDATE_VCS_DETAILS
17144
--------------------------------------------------------
17145
 
17146
  CREATE OR REPLACE PROCEDURE "UPDATE_VCS_DETAILS" (ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)
17147
/*-------------------------------------------------------------------------------------------------------
17148
Name:        update_vcs_details
17149
Description: Updates the Version Control System (vcs) details specified in the vcstag
17150
             parameter for the specified package version.
17151
             The specified package vcstag is parsed and split into 3 fields:
17152
                vcs type, src path, label
17153
             These fields are then stored for the specified pv_id in the package_versions, table.
17154
             An action is recorded in the action log and provides information for tracking and
17155
             for restoring the previous vcs settings if a recovery is required.
17156
Paramters:
17157
             ipv_id:     Package version identifier
17158
             vcstag:     Full version control tag.
17159
                         For example: "SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr@1234"
17160
                                      "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
17161
             user_id:    Identifier of the user that is performing this function.
17162
*/
17163
   IS
17164
      ivcs_type_id   NUMBER;
17165
      svcs_type      VARCHAR2(128);
17166
      ssrc_path      VARCHAR2(512);
17167
      spkg_label     VARCHAR2(512);
17168
      spattern       VARCHAR2(64);
17169
      saction_desc   VARCHAR2(2048);
17170
      old_vcs_type   VARCHAR2(128);
17171
      old_src_path   VARCHAR2(512);
17172
      old_pkg_label  VARCHAR2(512);
17173
      old_pkg_vcstag VARCHAR2(1024);
17174
      i              NUMBER;
17175
      vcount         NUMBER;
17176
   BEGIN
17177
     -- Split vcs tag into fields: vcs type, src path, label
17178
     -- Fields are separated by '::'
17179
     -- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
17180
     -- The below regular expression pattern has groups to achieve this.
17181
 
17182
     spattern:= '^([^:]*)::([^:]*)(::(.*))?$';
17183
 
17184
     --As Oracle 10g does not allow REGEXP_SUBSTR to return a group,
17185
     --REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).
17186
     SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type  FROM DUAL;
17187
     SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path  FROM DUAL;
17188
     SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;
17189
 
17190
     -- Validate vcs type
17191
     BEGIN
17192
       SELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);
17193
     EXCEPTION
17194
       WHEN NO_DATA_FOUND THEN
17195
         raise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
17196
       --RAISE;
17197
     END;      
17198
 
17199
     -- If Clearcase           
17200
     IF (ivcs_type_id = 2) THEN
17201
       -- Validate source path
17202
       IF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THEN
17203
         raise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
17204
       END IF;
17205
 
17206
       -- Validate label
17207
       -- For clearcase the label must be specified. For subversion it is not required.
17208
       IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THEN
17209
         raise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
17210
       END IF;
17211
     -- if Subversion
17212
     ELSIF (ivcs_type_id = 23) THEN
17213
       -- general validity
17214
       IF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))*(@[0-9]+|\/|)$','i') THEN
17215
         raise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
17216
       END IF;
17217
       -- invalid trunk. ie .../trunk  or   .../trunk/...
17218
       IF REGEXP_LIKE(ssrc_path,'^.*\/trunk(\/.*)?$','i') THEN
17219
         raise_application_error (-20000, ' Invalid trunk. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
17220
       END IF;
17221
 
17222
       -- Check for combined use of tags, branches, trunk@<number> or repeats of each 
17223
       -- Count occurrences of /tags/ or /branches/ or /trunk@<number>
17224
       vcount:=0;
17225
       i:=1;
17226
       WHILE i > 0 LOOP
17227
         i:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk@[0-9]+$)',i,1,1,'i');
17228
         IF i > 0 THEN
17229
           -- if found then increment count
17230
           vcount:=vcount+1;
17231
           i:=i-1;  -- move index back to "/"
17232
         END IF;
17233
       END LOOP;
17234
 
17235
       IF vcount = 0  THEN
17236
         raise_application_error (-20000, 'Must contain exactly one of the keywords trunk@<number>, /tags/, /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
17237
       END IF;
17238
 
17239
       IF vcount > 1  THEN
17240
         raise_application_error (-20000, 'Combined use of trunk@<number>, /tags/, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
17241
       END IF;
17242
 
17243
     END IF;
17244
 
17245
     BEGIN
17246
       -- Get current vcs tag for specified package version
17247
       SELECT pv.src_path, pv.pkg_label, vc.tag as vcs_type
17248
       INTO old_src_path, old_pkg_label, old_vcs_type
17249
       FROM package_versions pv, vcs_type vc
17250
       WHERE pv.pv_id = ipv_id
17251
       AND pv.vcs_type_id = vc.vcs_type_id (+);
17252
 
17253
     EXCEPTION
17254
       WHEN NO_DATA_FOUND THEN
17255
         raise_application_error (-20000, 'Package version not found: ' || ipv_id);
17256
     END;      
17257
 
17258
     old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;
17259
     IF (old_pkg_label IS NOT NULL) THEN
17260
       old_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;
17261
     END IF;
17262
 
17263
     -- Create action description
17264
     -- This description will contain the old and new tags.
17265
     -- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.
17266
     -- An example of the action description is below:
17267
     --   OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr
17268
     saction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;
17269
 
17270
     -- Store new vcs details
17271
     UPDATE package_versions SET
17272
       src_path = ssrc_path,
17273
       pkg_label = spkg_label,
17274
       vcs_type_id = ivcs_type_id
17275
     WHERE
17276
       pv_id = ipv_id;
17277
 
17278
     -- Store action in action log so that we can back track and also restore vcs settings if required.
17279
     log_action (ipv_id,'VcsConversion',user_id,saction_desc);
17280
 
17281
   END update_vcs_details;
17282
 
17283
/
17284
--------------------------------------------------------
17285
--  DDL for Procedure REMOVE_DOCUMENT
17286
--------------------------------------------------------
17287
 
17288
  CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
17289
											  nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,
17290
                                              nUserId IN NUMBER ) IS
17291
/* ---------------------------------------------------------------------------
17292
    Version: 3.0
17293
   --------------------------------------------------------------------------- */
17294
 
17295
   DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;
17296
 
17297
BEGIN
17298
 
17299
	-- Get Doc Num
17300
    SELECT pd.DOC_NUM INTO DocNumber
17301
      FROM PACKAGE_DOCUMENTS pd
17302
     WHERE pd.PV_ID = nPvId
17303
       AND pd.DOC_ID = nDocId;
17304
 
17305
 
17306
	-- Delete Document
17307
    DELETE
17308
      FROM PACKAGE_DOCUMENTS pd
17309
     WHERE pd.PV_ID = nPvId
17310
       AND pd.DOC_ID = nDocId;
17311
 
17312
 
17313
    /* LOG ACTION */
17314
   	Log_Action ( nPvId, 'document_remove', nUserId,
17315
   			     'Document number: '|| DocNumber );
17316
 
17317
 
17318
END Remove_Document;
17319
/
17320
--------------------------------------------------------
17321
--  DDL for Procedure SPLIT_VERSION
17322
--------------------------------------------------------
17323
 
17324
  CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17325
                                            SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,
17326
                                            SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,
17327
                                            SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE  ) IS
17328
/* ---------------------------------------------------------------------------
17329
    Version: 3.0.0
17330
   --------------------------------------------------------------------------- */
17331
 
17332
    TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)
17333
        INDEX BY BINARY_INTEGER;
17334
 
17335
    version_components VERSION_COMPONENTS_TYPE;
17336
    lastDot NUMBER := 0;
17337
    currDot NUMBER := 0;
17338
 
17339
BEGIN
17340
    currDot := INSTR ( SSpkg_version, '.', -1 );      -- Find 1st dot from the right
17341
 
17342
    IF ( currDot > 0 )
17343
    THEN
17344
        -- YES dot separator found --
17345
        SSV_EXT := GET_V_EXT( SSpkg_version );
17346
 
17347
        IF NOT SSV_EXT IS NULL
17348
        THEN
17349
            lastDot := currDot;
17350
            currDot := INSTR ( SSpkg_version, '.', -1, 2 );   -- Find 2nd dot from the right
17351
 
17352
            IF ( currDot > 0 )
17353
            THEN
17354
                -- XXXX.M.E
17355
                SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);
17356
                SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;
17357
            ELSE
17358
                -- XXXX.E
17359
                SSV_MM := NULL;
17360
                SSV_NMM := SSpkg_version;
17361
            END IF;
17362
 
17363
        ELSE
17364
            -- XXXX.M
17365
            SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );
17366
            SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );
17367
 
17368
        END IF;
17369
 
17370
    ELSE
17371
        -- NO dot separator found --
17372
        -- XXXXXX
17373
        SSV_MM  := NULL;
17374
        SSV_NMM := SSpkg_version;
17375
        SSV_EXT := NULL;
17376
 
17377
    END IF;
17378
 
17379
END Split_Version;
17380
/
17381
--------------------------------------------------------
17382
--  DDL for Procedure ADD_PACKAGE_INTEREST_TEST
17383
--------------------------------------------------------
17384
 
17385
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
17386
	   	  		  								  nPkgIdList IN VARCHAR2,
17387
												  nUserId IN NUMBER
17388
	   	  		  								  ) IS
17389
 
17390
/******************************************************************************
17391
   NAME:       ADD_PACKAGE_INTEREST
17392
   PURPOSE:    
17393
 
17394
   REVISIONS:
17395
   Ver        Date        Author           Description
17396
   ---------  ----------  ---------------  ------------------------------------
17397
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
17398
 
17399
   NOTES:
17400
 
17401
   Automatically available Auto Replace Keywords:
17402
      Object Name:     ADD_PACKAGE_INTEREST
17403
      Sysdate:         12/05/2006
17404
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
17405
      Username:         (set in TOAD Options, Procedure Editor)
17406
      Table Name:       (set in the "New PL/SQL Object" dialog)
17407
 
17408
******************************************************************************/
17409
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
17410
   nPkgId NUMBER;
17411
BEGIN
17412
 
17413
	 npkgidcollector := in_list_number2 (nPkgIdList);
17414
 
17415
	FOR i IN 1..npkgidcollector.COUNT
17416
	LOOP
17417
		nPkgId := npkgidcollector(i);
17418
 
17419
	 --- Insert into PACKAGE_INTEREST TABLE
17420
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
17421
	 VALUES(nProjId, nPkgId, nUserId);
17422
	END LOOP;	 
17423
 
17424
 
17425
END ADD_PACKAGE_INTEREST_TEST;
17426
/
17427
--------------------------------------------------------
17428
--  DDL for Procedure CLONED_PROCESSES
17429
--------------------------------------------------------
17430
 
17431
  CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES" 
17432
IS
17433
 
17434
proc_id NUMBER;
17435
/******************************************************************************
17436
   NAME:       DELETE_DO_NOT_RIPPLE
17437
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
17438
               IS RELEASED
17439
 
17440
   REVISIONS:
17441
   Ver        Date        Author           Description
17442
   ---------  ----------  ---------------  ------------------------------------
17443
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
17444
 
17445
   NOTES:
17446
 
17447
   Automatically available Auto Replace Keywords:
17448
      Object Name:     DELETE_DO_NOT_RIPPLE
17449
      Sysdate:         21/04/2006
17450
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
17451
      Username:         (set in TOAD Options, Procedure Editor)
17452
      Table Name:       (set in the "New PL/SQL Object" dialog)
17453
 
17454
******************************************************************************/
17455
   CURSOR ripple_cur
17456
   IS
17457
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
17458
 
17459
   ripple_rec   ripple_cur%ROWTYPE;
17460
BEGIN
17461
   OPEN ripple_cur;
17462
 
17463
   FETCH ripple_cur
17464
    INTO ripple_rec;
17465
 
17466
   WHILE ripple_cur%FOUND
17467
   LOOP
17468
 
17469
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
17470
 
17471
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
17472
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
17473
 
17474
      FETCH ripple_cur
17475
       INTO ripple_rec;
17476
   END LOOP;
17477
END CLONED_PROCESSES;
17478
/
17479
--------------------------------------------------------
17480
--  DDL for Procedure ADD_VIEW_MEMBERS
17481
--------------------------------------------------------
17482
 
17483
  CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS
17484
 
17485
/******************************************************************************
17486
   NAME:       ADD_VIEW_MEMBERS
17487
   PURPOSE:    
17488
 
17489
   REVISIONS:
17490
   Ver        Date        Author           Description
17491
   ---------  ----------  ---------------  ------------------------------------
17492
   1.0        11/04/2006          1. Created this procedure.
17493
 
17494
   NOTES:
17495
 
17496
   Automatically available Auto Replace Keywords:
17497
      Object Name:     ADD_VIEW_MEMBERS
17498
      Sysdate:         11/04/2006
17499
      Date and Time:   11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AM
17500
      Username:         (set in TOAD Options, Procedure Editor)
17501
      Table Name:       (set in the "New PL/SQL Object" dialog)
17502
 
17503
******************************************************************************/
17504
CURSOR user_cur IS
17505
	SELECT u.USER_ID
17506
	  FROM USERS u
17507
	 WHERE u.USER_ID IN (
17508
	 	   			   	SELECT * 
17509
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
17510
						);
17511
user_rec user_cur%ROWTYPE;
17512
 
17513
 
17514
BEGIN
17515
 
17516
	 OPEN user_cur;
17517
	 FETCH user_cur INTO user_rec;
17518
 
17519
	 WHILE user_cur%FOUND
17520
	 LOOP
17521
	 	 INSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)
17522
	 	 VALUES ( nGroupId, user_rec.USER_ID);
17523
 
17524
	 	 FETCH user_cur INTO user_rec;	 
17525
	 END LOOP;	 
17526
 
17527
 
17528
 
17529
END ADD_VIEW_MEMBERS;
17530
/
17531
--------------------------------------------------------
17532
--  DDL for Procedure RESET_IGNORE_WARNINGS
17533
--------------------------------------------------------
17534
 
17535
  CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,
17536
                                                    nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
17537
/* ---------------------------------------------------------------------------
17538
    Version: 5.0
17539
   --------------------------------------------------------------------------- */
17540
 
17541
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17542
 
17543
BEGIN
17544
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
17545
 
17546
    -- Remove Ignore Warnings
17547
     DELETE
17548
       FROM ignore_warnings
17549
	  WHERE (rtag_id, pv_id, dpv_id) IN
17550
	     (
17551
	      SELECT igw.rtag_id, igw.pv_id, igw.dpv_id
17552
	        FROM ignore_warnings igw,
17553
	             package_versions dpv,
17554
	             package_versions pv
17555
	       WHERE igw.dpv_id = dpv.pv_id
17556
	         AND igw.rtag_id = nRTagId
17557
	         AND dpv.pkg_id = pv.pkg_id
17558
	         AND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')
17559
	         AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
17560
         );
17561
 
17562
END Reset_Ignore_Warnings;
17563
/
17564
--------------------------------------------------------
17565
--  DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO
17566
--------------------------------------------------------
17567
 
17568
  CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS
17569
 
17570
/******************************************************************************
17571
   NAME:       INSERT_INTO_PACKAGE_BUILD_INFO
17572
   PURPOSE:    
17573
 
17574
   REVISIONS:
17575
   Ver        Date        Author           Description
17576
   ---------  ----------  ---------------  ------------------------------------
17577
   1.0        6/12/2006          1. Created this procedure.
17578
 
17579
   NOTES:
17580
 
17581
   Automatically available Auto Replace Keywords:
17582
      Object Name:     INSERT_INTO_PACKAGE_BUILD_INFO
17583
      Sysdate:         6/12/2006
17584
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
17585
      Username:         (set in TOAD Options, Procedure Editor)
17586
      Table Name:       (set in the "New PL/SQL Object" dialog)
17587
 
17588
******************************************************************************/
17589
 
17590
	CURSOR curInfo IS
17591
    SELECT PV_ID
17592
	FROM PACKAGE_BUILD_ENV
17593
	WHERE BE_ID IN (11, 12);
17594
    recInfo curInfo%ROWTYPE;
17595
 
17596
 
17597
BEGIN
17598
 
17599
	OPEN curInfo;
17600
    FETCH curInfo INTO recInfo;
17601
 
17602
	WHILE curInfo%FOUND
17603
	LOOP
17604
 
17605
		INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )
17606
		VALUES( recInfo.PV_ID, 2, 5);
17607
 
17608
		UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;
17609
 
17610
		FETCH curInfo INTO recInfo;
17611
 
17612
	END LOOP;
17613
 
17614
	CLOSE curInfo;
17615
 
17616
 
17617
 
17618
 
17619
END INSERT_INTO_PACKAGE_BUILD_INFO;
17620
/
17621
--------------------------------------------------------
17622
--  DDL for Procedure UPDATE_ADDITIONAL_NOTE
17623
--------------------------------------------------------
17624
 
17625
  CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,
17626
													 pnPv_id IN NUMBER,
17627
                                                     psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
17628
                                                     psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
17629
                                                     pnUser_id IN NUMBER,
17630
                                                     outErrCode OUT NUMBER
17631
                                                    ) IS
17632
/* ---------------------------------------------------------------------------
17633
    Version: 3.0.1
17634
   --------------------------------------------------------------------------- */
17635
 
17636
    newID NUMBER;
17637
 
17638
    /* Disallow duplicate Note Titles */
17639
	CURSOR an_duplicate_cur IS
17640
        SELECT COUNT(*) AS cnt_note
17641
          FROM ADDITIONAL_NOTES
17642
         WHERE pv_id = pnPv_id
17643
           AND note_id != pnNote_id
17644
           AND note_title = psNote_title;
17645
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
17646
 
17647
BEGIN
17648
	outErrCode := -1;		-- Set default return error code to ERROR state
17649
 
17650
	OPEN an_duplicate_cur;
17651
    FETCH an_duplicate_cur INTO an_duplicate_rec;
17652
 
17653
    IF an_duplicate_rec.cnt_note < 1
17654
    THEN
17655
		--- Update Additional Note ---
17656
	    UPDATE ADDITIONAL_NOTES SET
17657
		       note_title = psNote_title,
17658
		       note_body = psNote_body,
17659
		       mod_date = Ora_Sysdate,
17660
		       mod_user = pnUser_id
17661
         WHERE note_id = pnNote_id
17662
           AND pv_id = pnPv_id;
17663
		outErrCode := 0;		-- Set return to SUCCESS
17664
	END IF;
17665
 
17666
	CLOSE an_duplicate_cur;
17667
END Update_Additional_Note;
17668
/
17669
--------------------------------------------------------
17670
--  DDL for Procedure NEW_UNIT_TEST
17671
--------------------------------------------------------
17672
 
17673
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
17674
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
17675
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
17676
                                            sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,
17677
                                            sDpkg_path IN VARCHAR2,
17678
                                            sResults IN VARCHAR2,
17679
                                            sCompletion_date IN VARCHAR2,
17680
                                            nCompleted_by IN NUMBER,
17681
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
17682
											enumTEST_TYPE_NOT_DONE IN NUMBER,
17683
											outFileName OUT VARCHAR2
17684
                                           ) IS
17685
/* ---------------------------------------------------------------------------
17686
    Version: 3.2.0
17687
   --------------------------------------------------------------------------- */
17688
 
17689
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
17690
 
17691
    newID NUMBER;
17692
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
17693
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
17694
 
17695
BEGIN
17696
 
17697
	-- Get new ID --
17698
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
17699
 
17700
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
17701
       	ResultsURL := sResults;
17702
       ELSE
17703
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
17704
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
17705
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
17706
           END IF;
17707
       END IF;
17708
 
17709
	-- Remove NOT_DONE entry if exists
17710
	DELETE FROM UNIT_TESTS
17711
	 WHERE pv_id = nPv_id
17712
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
17713
 
17714
	--- Add Additional Note ---
17715
    INSERT INTO UNIT_TESTS ( TEST_ID,
17716
								PV_ID,
17717
								TEST_TYPES_FK,
17718
								TEST_SUMMARY,
17719
								COMPLETION_DATE,
17720
								COMPLETED_BY,
17721
								RESULTS_URL,
17722
								RESULTS_ATTACHMENT_NAME,
17723
								NUMOF_TEST )
17724
    VALUES (
17725
       	newID,
17726
           nPv_id,
17727
           nTestTypeId,
17728
           sTest_summary,
17729
           TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
17730
           nCompleted_by,
17731
           ResultsURL,
17732
           ResultsAttachment,
17733
		   sNumOfTest );
17734
 
17735
END New_Unit_Test;
17736
/
17737
--------------------------------------------------------
17738
--  DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE
17739
--------------------------------------------------------
17740
 
17741
  CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)IS
17742
Auto CHAR;
17743
/******************************************************************************
17744
   NAME:       SWITCH_REPRODUCIBLE_PACKAGE
17745
   PURPOSE:    
17746
 
17747
   REVISIONS:
17748
   Ver        Date        Author           Description
17749
   ---------  ----------  ---------------  ------------------------------------
17750
   1.0        14/12/2006   Rupesh Solanki       1. Created this procedure.
17751
 
17752
   NOTES:
17753
 
17754
   Automatically available Auto Replace Keywords:
17755
      Object Name:     SWITCH_REPRODUCIBLE_PACKAGE
17756
      Sysdate:         14/12/2006
17757
      Date and Time:   14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AM
17758
      Username:         (set in TOAD Options, Procedure Editor)
17759
      Table Name:       (set in the "New PL/SQL Object" dialog)
17760
 
17761
******************************************************************************/
17762
BEGIN
17763
 
17764
	 SELECT IS_AUTOBUILDABLE into Auto
17765
	 FROM PACKAGE_VERSIONS 
17766
	 WHERE PV_ID = nPvId;
17767
 
17768
	 IF Auto = 'N' Then
17769
 
17770
	 	UPDATE PACKAGE_VERSIONS
17771
	 	SET IS_AUTOBUILDABLE = 'Y'
17772
	 	WHERE PV_ID = nPvId;
17773
 
17774
 
17775
	 	/* LOG ACTION */
17776
   		Log_Action ( nPvId, 'reproducible_package', nUserId );	 
17777
 
17778
	 Else
17779
 
17780
		 UPDATE PACKAGE_VERSIONS
17781
		 SET IS_AUTOBUILDABLE = 'N'
17782
		 WHERE PV_ID = nPvId;
17783
 
17784
 
17785
	 	 /* LOG ACTION */
17786
   	 	 Log_Action ( nPvId, 'unreproducible_package', nUserId );	 
17787
 
17788
	 End If;
17789
 
17790
 
17791
 
17792
 
17793
 
17794
 
17795
 
17796
 
17797
END SWITCH_REPRODUCIBLE_PACKAGE;
17798
/
17799
--------------------------------------------------------
17800
--  DDL for Procedure LOG_DAEMON_ACTION
17801
--------------------------------------------------------
17802
 
17803
  CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,
17804
												 enumActionTypeName IN VARCHAR2,
17805
		                                         nUserId IN NUMBER,
17806
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL  ) IS
17807
/* ---------------------------------------------------------------------------
17808
    Version: 3.0
17809
   --------------------------------------------------------------------------- */
17810
 
17811
    ActionTypeId NUMBER;
17812
 
17813
BEGIN
17814
 
17815
    -- Get Action Type FK
17816
    SELECT act.ACTTYPE_ID INTO ActionTypeId
17817
      FROM ACTION_TYPE act
17818
     WHERE act.NAME = enumActionTypeName;
17819
 
17820
 
17821
    INSERT INTO DAEMON_ACTION_LOG
17822
    VALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );
17823
 
17824
 
17825
END Log_Daemon_Action;
17826
/
17827
--------------------------------------------------------
17828
--  DDL for Procedure UPDATE_MISC_VIEW
17829
--------------------------------------------------------
17830
 
17831
  CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS
17832
/******************************************************************************
17833
   NAME:       UPDATE_MISC_VIEW
17834
   PURPOSE:    
17835
 
17836
   REVISIONS:
17837
   Ver        Date        Author           Description
17838
   ---------  ----------  ---------------  ------------------------------------
17839
   1.0        16/03/2007          1. Created this procedure.
17840
 
17841
   NOTES:
17842
 
17843
   Automatically available Auto Replace Keywords:
17844
      Object Name:     UPDATE_MISC_VIEW
17845
      Sysdate:         16/03/2007
17846
      Date and Time:   16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AM
17847
      Username:         (set in TOAD Options, Procedure Editor)
17848
      Table Name:       (set in the "New PL/SQL Object" dialog)
17849
 
17850
******************************************************************************/
17851
   CURSOR view_cur /*Create a record set to store the ripple data*/
17852
   IS
17853
   	 SELECT pkg.pkg_id, rc.base_view_id 
17854
	 FROM package_versions pv, packages pkg, release_content rc
17855
	 where rc.rtag_id = 2362
17856
	 and rc.pv_id = pv.pv_id
17857
	 and pv.pkg_id = pkg.pkg_id;
17858
   view_rec   view_cur%ROWTYPE;
17859
 
17860
 
17861
 
17862
BEGIN
17863
   OPEN view_cur;
17864
 
17865
   FETCH view_cur
17866
    INTO view_rec;
17867
 
17868
   WHILE view_cur%FOUND
17869
   LOOP
17870
 
17871
 
17872
	   update release_content
17873
	   set base_view_id = view_rec.base_view_id
17874
	   where rtag_id = 8027
17875
	   and pv_id IN 
17876
	   (
17877
	   	select pv.pv_id from release_content rc, package_versions pv
17878
		where rc.rtag_id = 8027
17879
		and pv.pv_id = rc.pv_id
17880
		and pv.pkg_id = view_rec.pkg_id 
17881
 
17882
	   );
17883
 
17884
 
17885
 
17886
 
17887
 
17888
 
17889
 
17890
 
17891
 
17892
   FETCH view_cur
17893
   		 INTO view_rec;
17894
   END LOOP;	 
17895
 
17896
 
17897
 
17898
 
17899
 
17900
END UPDATE_MISC_VIEW; 
17901
/
17902
--------------------------------------------------------
17903
--  DDL for Procedure CHECK_NEW_PATCHES
17904
--------------------------------------------------------
17905
 
17906
  CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (
17907
   nrtagid   IN   release_content.rtag_id%TYPE
17908
)
17909
IS
17910
/* ---------------------------------------------------------------------------
17911
    Version: 3.0
17912
   --------------------------------------------------------------------------- */
17913
BEGIN
17914
   /*--------------- Business Rules Here -------------------*/
17915
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
17916
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
17917
   END IF
17918
 
17919
   /*-------------------------------------------------------*/
17920
   UPDATE release_content rc
17921
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
17922
    WHERE rc.pv_id IN (
17923
             SELECT prod.pv_id
17924
               FROM (SELECT   pp.pv_id AS orig_parent_id,
17925
                              COUNT (*) AS num_of_patches
17926
                         FROM release_content rc, package_patches pp
17927
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17928
                     GROUP BY pp.pv_id) orig,
17929
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
17930
                              COUNT (*) AS num_of_patches
17931
                         FROM release_content rc,
17932
                              package_patches pp,
17933
                              package_dependencies dep,
17934
                              package_versions pv,
17935
                              package_patches prodpp
17936
                        WHERE rc.pv_id = pp.pv_id
17937
                          AND rc.rtag_id = nrtagid
17938
                          AND pp.patch_id = dep.dpv_id
17939
                          AND dep.pv_id = pv.pv_id
17940
                          AND pv.is_patch = 'Y'
17941
                          AND pv.dlocked = 'Y'
17942
                          AND prodpp.patch_id = dep.pv_id
17943
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
17944
                    release_content rc
17945
              WHERE orig.orig_parent_id = prod.pv_id
17946
                AND orig.num_of_patches != prod.num_of_patches
17947
                AND rc.rtag_id = nrtagid
17948
                AND rc.pv_id = prod.pv_id
17949
                AND rc.pkg_state = 0
17950
             UNION
17951
             SELECT   prodpp.pv_id
17952
                 FROM release_content rc,
17953
                      package_patches pp,
17954
                      package_dependencies dep,
17955
                      package_versions pv,
17956
                      package_patches prodpp
17957
                WHERE rc.pv_id = pp.pv_id
17958
                  AND rc.rtag_id = nrtagid
17959
                  AND pp.patch_id = dep.dpv_id
17960
                  AND dep.pv_id = pv.pv_id
17961
                  AND pv.is_patch = 'Y'
17962
                  AND pv.dlocked = 'Y'
17963
                  AND prodpp.patch_id = dep.pv_id
17964
             GROUP BY prodpp.pv_id, pp.pv_id
17965
             MINUS
17966
             SELECT   pp.pv_id
17967
                 FROM release_content rc, package_patches pp
17968
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17969
             GROUP BY pp.pv_id);
17970
END check_new_patches;
17971
/
17972
--------------------------------------------------------
17973
--  DDL for Procedure CLEAN_ADVISORY_RIPPLE
17974
--------------------------------------------------------
17975
 
17976
  CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)
17977
IS
17978
/******************************************************************************
17979
   NAME:       clean_advisory_ripple
17980
 
17981
   PURPOSE:    To delete entries from the advisory_ripple table based upon
17982
               an RTAG_ID only
17983
 
17984
               This is a tidy-up operation performed against the advisory_ripple
17985
               table, ensuring that the table does not have rtag_id/pv_id
17986
               combinations that cannot be found in the release's wip/pending/release
17987
               tabs.
17988
 
17989
******************************************************************************/
17990
BEGIN
17991
   -- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.
17992
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
17993
   -- work_in_progress, planned, or release_content table.
17994
   -- NOTE: Planned operations that represent pending additive/subtractive merge
17995
   -- operations are ignored because they have not been approved yet and so
17996
   -- cannot be said to be "in the release".
17997
   DELETE FROM advisory_ripple
17998
         WHERE rtag_id = nrtagid
17999
           AND pv_id not in
18000
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
18001
                 UNION
18002
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
18003
                 UNION
18004
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
18005
               );
18006
END clean_advisory_ripple;
18007
/
18008
--------------------------------------------------------
18009
--  DDL for Procedure NEW_PATCH
18010
--------------------------------------------------------
18011
 
18012
  CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18013
 	   	  		  					  	NNparent_id IN NUMBER,
18014
                                        sPatchIdList IN VARCHAR2,
18015
										NNuser_id IN NUMBER ) IS
18016
/* ---------------------------------------------------------------------------
18017
    Version: 3.5
18018
   --------------------------------------------------------------------------- */
18019
 
18020
    patchPv_id    NUMBER;
18021
	parPkg_id	  NUMBER;
18022
    LastInstallOrder NUMBER;
18023
    isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
18024
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18025
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18026
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18027
	oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18028
 
18029
	CURSOR parent_cur IS
18030
        SELECT pv.*, pkg.pkg_name
18031
          FROM package_versions pv,
18032
		       packages pkg
18033
         WHERE pv.pv_id = NNparent_id
18034
		   AND pv.pkg_id = pkg.pkg_id;
18035
    parent_rec parent_cur%ROWTYPE;
18036
 
18037
    CURSOR patch_cur IS
18038
        SELECT pv.*, pg.pkg_name
18039
          FROM package_versions pv,
18040
		       packages pg
18041
         WHERE pv.pkg_id = parPkg_id
18042
		   AND pv.pkg_version = SSpatch_version
18043
		   AND pv.pkg_id = pg.pkg_id;
18044
    patch_rec patch_cur%ROWTYPE;
18045
 
18046
	CURSOR releases_cur IS
18047
        SELECT rc.pv_id
18048
		  FROM release_content rc
18049
		 WHERE rc.pv_id = patch_rec.pv_id;
18050
    releases_rec releases_cur%ROWTYPE;
18051
 
18052
 
18053
BEGIN
18054
 
18055
	-- Get Last Install Order
18056
    SELECT Count(*) INTO LastInstallOrder
18057
	  FROM PACKAGE_PATCHES pp
18058
	 WHERE pp.PV_ID = NNparent_id;
18059
 
18060
 
18061
    -- Get parent details
18062
	OPEN parent_cur;
18063
    FETCH parent_cur INTO parent_rec;
18064
	parPkg_id := parent_rec.pkg_id;
18065
 
18066
 
18067
	-- Find if patch exists in database
18068
    OPEN patch_cur;
18069
    FETCH patch_cur INTO patch_rec;
18070
 
18071
 
18072
    -- Parent must be official
18073
    IF parent_rec.dlocked = 'Y' THEN
18074
 
18075
	    IF patch_cur%NOTFOUND
18076
	    THEN
18077
        	isPatchDlocked := 'N';
18078
 
18079
	        -- Create new patch version --
18080
	        SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
18081
 
18082
 
18083
	        Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
18084
 
18085
	        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 )
18086
				   VALUES (
18087
						   patchPv_id,
18088
	                       parPkg_id,
18089
	                       SSpatch_version,
18090
	                       isPatchDlocked,
18091
	                       ORA_SYSDATE,
18092
	                       NNuser_id,
18093
	                       ORA_SYSDATETIME,
18094
	                       NNuser_id,
18095
	                       SSV_MM,
18096
	                       SSV_NMM,
18097
	                       SSV_EXT,
18098
	                       parent_rec.src_path,
18099
	                       'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
18100
	                       NNuser_id,
18101
						   'Y',
18102
                           patchPv_id,
18103
						   parent_rec.bs_id,
18104
						   parent_rec.is_autobuildable,
18105
						   parent_rec.ripple_field
18106
 
18107
						   );
18108
 
18109
			INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
18110
		    	   ( SELECT NNparent_id AS pv_id,
18111
				            pv.pv_id AS patch_id,
18112
	                        LastInstallOrder + 1 AS INSTALL_ORDER
18113
				       FROM package_versions pv
18114
					  WHERE pv.pv_id = patchPv_id
18115
					    AND pv.is_patch = 'Y' );
18116
 
18117
	        /* LOG ACTION */
18118
            Log_Action ( patchPv_id, 'new_version', NNuser_id,
18119
        			     'Patch version created: '|| SSpatch_version );
18120
 
18121
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
18122
        			     'New patch created and attached: '|| SSpatch_version );
18123
 
18124
 
18125
	    ELSE
18126
 
18127
		    patchPv_id := patch_rec.pv_id;
18128
	    	isPatchDlocked := patch_rec.dlocked;
18129
 
18130
			-- Find if pv_id exists in release content (i.e. it cannot be a patch)
18131
		    OPEN releases_cur;
18132
		    FETCH releases_cur INTO releases_rec;
18133
 
18134
			IF releases_cur%NOTFOUND
18135
	   		THEN
18136
				-- This pv_id is trully a patch, hence add Y to column IS_PATCH
18137
				UPDATE package_versions SET
18138
					   is_patch = 'Y'
18139
					   WHERE pv_id = patchPv_id;
18140
 
18141
				INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
18142
			    	   ( SELECT NNparent_id AS pv_id,
18143
					            pv.pv_id AS patch_id,
18144
	                            LastInstallOrder + 1 AS INSTALL_ORDER
18145
					       FROM package_versions pv
18146
						  WHERE pv.pv_id = patchPv_id
18147
						    AND pv.is_patch = 'Y' );
18148
 
18149
			END IF;
18150
 
18151
			CLOSE releases_cur;
18152
 
18153
            /* LOG ACTION */
18154
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
18155
        			     'Patch version was found and attached: '|| SSpatch_version );
18156
 
18157
	    END IF;
18158
 
18159
 
18160
 
18161
 
18162
    END IF;
18163
 
18164
 
18165
 
18166
    /* Create Patch Dependencies */
18167
    oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
18168
 
18169
 
18170
    -- Make sure patch is unofficial before altering its dependencies
18171
    IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
18172
    	-- Delete Existing Dependencies
18173
        DELETE
18174
          FROM PACKAGE_DEPENDENCIES dep
18175
         WHERE dep.PV_ID = patchPv_id;
18176
 
18177
 
18178
        -- Insert new dependencies
18179
        INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
18180
        SELECT patchPv_id AS PV_ID,
18181
        	   pv.PV_ID AS DPV_ID,
18182
               parPkg_id AS PKG_ID,
18183
               pv.PKG_ID AS DPKG_ID,
18184
               'L' AS BUILD_TYPE
18185
          FROM PACKAGE_VERSIONS pv
18186
         WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
18187
 
18188
 
18189
    END IF;
18190
 
18191
 
18192
    CLOSE parent_cur;
18193
    CLOSE patch_cur;
18194
END New_Patch;
18195
/
18196
--------------------------------------------------------
18197
--  DDL for Procedure UPDATE_PROCESSES
18198
--------------------------------------------------------
18199
 
18200
  CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES" 
18201
IS
18202
 
18203
proc_id NUMBER;
18204
/******************************************************************************
18205
   NAME:       DELETE_DO_NOT_RIPPLE
18206
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18207
               IS RELEASED
18208
 
18209
   REVISIONS:
18210
   Ver        Date        Author           Description
18211
   ---------  ----------  ---------------  ------------------------------------
18212
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18213
 
18214
   NOTES:
18215
 
18216
   Automatically available Auto Replace Keywords:
18217
      Object Name:     DELETE_DO_NOT_RIPPLE
18218
      Sysdate:         21/04/2006
18219
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18220
      Username:         (set in TOAD Options, Procedure Editor)
18221
      Table Name:       (set in the "New PL/SQL Object" dialog)
18222
 
18223
******************************************************************************/
18224
   CURSOR ripple_cur
18225
   IS
18226
      select proc_id,  proc_name, run_as, pkg_owner, is_interface from processes;
18227
 
18228
   ripple_rec   ripple_cur%ROWTYPE;
18229
BEGIN
18230
   OPEN ripple_cur;
18231
 
18232
   FETCH ripple_cur
18233
    INTO ripple_rec;
18234
 
18235
   WHILE ripple_cur%FOUND
18236
   LOOP
18237
 
18238
 
18239
update deployment_manager.processes_config 
18240
set proc_id = ripple_rec.proc_id
18241
where pkg_health_tag = ripple_rec.proc_name
18242
and cmd_interface IS NULL
18243
and pkg_owner IS NULL
18244
and is_interface IS NULL; 
18245
 
18246
 
18247
      FETCH ripple_cur
18248
       INTO ripple_rec;
18249
   END LOOP;
18250
END UPDATE_PROCESSES;
18251
/
18252
--------------------------------------------------------
18253
--  DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO
18254
--------------------------------------------------------
18255
 
18256
  CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO" 
18257
IS
18258
/******************************************************************************
18259
   NAME:       DELETE_AUTOBUILD_FAILURE_INFO
18260
   PURPOSE:
18261
 
18262
   REVISIONS:
18263
   Ver        Date        Author           Description
18264
   ---------  ----------  ---------------  ------------------------------------
18265
   1.0        2/06/2006    Rupesh Solanki      1. Created this procedure.
18266
 
18267
   NOTES:
18268
 
18269
   Automatically available Auto Replace Keywords:
18270
      Object Name:     DELETE_AUTOBUILD_FAILURE_INFO
18271
      Sysdate:         2/06/2006
18272
      Date and Time:   2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AM
18273
      Username:         (set in TOAD Options, Procedure Editor)
18274
      Table Name:       (set in the "New PL/SQL Object" dialog)
18275
 
18276
******************************************************************************/
18277
BEGIN
18278
   DELETE FROM autobuild_failure
18279
         WHERE group_email_id NOT IN (SELECT group_email_id
18280
                                        FROM members_group);
18281
END delete_autobuild_failure_info;
18282
/
18283
--------------------------------------------------------
18284
--  DDL for Procedure TEST
18285
--------------------------------------------------------
18286
 
18287
  CREATE OR REPLACE PROCEDURE "TEST" 
18288
IS
18289
 
18290
proc_id NUMBER;
18291
/******************************************************************************
18292
   NAME:       DELETE_DO_NOT_RIPPLE
18293
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18294
               IS RELEASED
18295
 
18296
   REVISIONS:
18297
   Ver        Date        Author           Description
18298
   ---------  ----------  ---------------  ------------------------------------
18299
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18300
 
18301
   NOTES:
18302
 
18303
   Automatically available Auto Replace Keywords:
18304
      Object Name:     DELETE_DO_NOT_RIPPLE
18305
      Sysdate:         21/04/2006
18306
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18307
      Username:         (set in TOAD Options, Procedure Editor)
18308
      Table Name:       (set in the "New PL/SQL Object" dialog)
18309
 
18310
******************************************************************************/
18311
   CURSOR ripple_cur
18312
   IS
18313
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
18314
 
18315
   ripple_rec   ripple_cur%ROWTYPE;
18316
BEGIN
18317
   OPEN ripple_cur;
18318
 
18319
   FETCH ripple_cur
18320
    INTO ripple_rec;
18321
 
18322
   WHILE ripple_cur%FOUND
18323
   LOOP
18324
 
18325
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
18326
 
18327
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
18328
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
18329
 
18330
      FETCH ripple_cur
18331
       INTO ripple_rec;
18332
   END LOOP;
18333
END test;
18334
/
18335
--------------------------------------------------------
18336
--  DDL for Procedure CLEAN_DO_NOT_RIPPLE
18337
--------------------------------------------------------
18338
 
18339
  CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)
18340
IS
18341
/******************************************************************************
18342
   NAME:       clean_do_not_ripple
18343
 
18344
   PURPOSE:    To delete entries from the do_not_ripple table based upon
18345
               an RTAG_ID only
18346
 
18347
               This is a tidy-up operation performed against the do_not_ripple
18348
               table, ensuring that the table does not have rtag_id/pv_id
18349
               combinations that cannot be found in the release's wip/pending/release
18350
               tabs.
18351
 
18352
******************************************************************************/
18353
BEGIN
18354
   -- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.
18355
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
18356
   -- work_in_progress, planned, or release_content table.
18357
   -- NOTE: Planned operations that represent pending additive/subtractive merge
18358
   -- operations are ignored because they have not been approved yet and so
18359
   -- cannot be said to be "in the release".
18360
   DELETE FROM do_not_ripple
18361
         WHERE rtag_id = nrtagid
18362
           AND pv_id not in
18363
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
18364
                 UNION
18365
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
18366
                 UNION
18367
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
18368
               );
18369
END clean_do_not_ripple;
18370
/
18371
--------------------------------------------------------
18372
--  DDL for Procedure REBUILD_ENVIRONMENT
18373
--------------------------------------------------------
18374
 
18375
  CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS
18376
 
18377
/* ---------------------------------------------------------------------------
18378
    Version: 3.3
18379
   --------------------------------------------------------------------------- */
18380
    rowCnt NUMBER := 0;
18381
    iteration NUMBER := 2;          -- Iterations counter
18382
    maxIterations NUMBER := 50;    -- Maximum number of iterations allowed.
18383
                                    -- This will prevent infinite loops if cyrcular dependencies are found
18384
    sessionNum NUMBER;
18385
BEGIN
18386
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18387
 
18388
 
18389
    -- Redo Patch Ignore warnings
18390
    Ignore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );
18391
 
18392
 
18393
    Level_One_Conflicts ( NNrtag_id, sessionNum );
18394
 
18395
    LOOP
18396
        Level_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );
18397
        iteration := iteration + 1;
18398
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18399
    END LOOP;
18400
 
18401
    Update_Package_States ( NNrtag_id, sessionNum );
18402
 
18403
    DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;
18404
 
18405
    -- Flag Packages with New Patches Available
18406
    Check_New_Patches ( NNrtag_id );
18407
 
18408
	Clean_Do_Not_Ripple( NNrtag_id );
18409
 
18410
 
18411
	/* Circular Dependency Flag */
18412
    /*
18413
	IF iteration > maxIterations
18414
	THEN
18415
		UPDATE release_tags SET
18416
		   	   circular_dependency = 'Y'
18417
		 WHERE rtag_id = NNrtag_id;
18418
	ELSE
18419
		UPDATE release_tags SET
18420
		   	   circular_dependency = NULL
18421
		 WHERE rtag_id = NNrtag_id;
18422
	END IF;
18423
    */
18424
END Rebuild_Environment;
18425
/
18426
--------------------------------------------------------
18427
--  DDL for Procedure TEST_MARCO
18428
--------------------------------------------------------
18429
 
18430
  CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS
18431
/******************************************************************************
18432
   NAME:       TEST_MARCO
18433
   PURPOSE:    
18434
 
18435
   REVISIONS:
18436
   Ver        Date        Author           Description
18437
   ---------  ----------  ---------------  ------------------------------------
18438
   1.0        2/03/2007          1. Created this procedure.
18439
 
18440
   NOTES:
18441
 
18442
   Automatically available Auto Replace Keywords:
18443
      Object Name:     TEST_MARCO
18444
      Sysdate:         2/03/2007
18445
      Date and Time:   2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PM
18446
      Username:         (set in TOAD Options, Procedure Editor)
18447
      Table Name:       (set in the "New PL/SQL Object" dialog)
18448
 
18449
******************************************************************************/
18450
 
18451
parPv_id    NUMBER;
18452
parPkg_id   NUMBER;
18453
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18454
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18455
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18456
BEGIN
18457
 
18458
SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18459
 
18460
        /* LOG ACTION */
18461
        Log_Action ( parPv_id, 'new_version', 3764,
18462
        			 'New package version: '|| parPv_id || '.' );
18463
 
18464
        Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );
18465
 
18466
     -- Clone Package Version Details --
18467
            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,
18468
                                           src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )
18469
                SELECT parPv_id         AS pv_id,
18470
                       pv.pkg_id        AS pkg_id,
18471
                       parPv_id || '.'    AS pkg_version,
18472
                       'N'              AS dlocked,
18473
                       Ora_Sysdate      AS created_stamp,
18474
                       3764        AS creator_id,
18475
                       Ora_Sysdatetime  AS modified_stamp,
18476
                       3764        AS modifier_id,
18477
                       SSV_MM          AS V_MM,
18478
                       SSV_NMM         AS V_NMM,
18479
                       SSV_EXT          AS V_EXT,
18480
                       pv.src_path,
18481
                       pv.pv_description,
18482
                       pv.PV_OVERVIEW,
18483
                       112982 	AS LAST_PV_ID,
18484
                       pv.owner_id,
18485
					   pv.BUILD_TYPE,
18486
					   pv.IS_BUILD_ENV_REQUIRED,
18487
					   pv.bs_id,
18488
					   pv.is_autobuildable,
18489
					   pv.IS_DEPLOYABLE
18490
                  FROM PACKAGE_VERSIONS pv
18491
                 WHERE pv.pv_id = 112982;		
18492
 
18493
Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );
18494
 
18495
 
18496
END TEST_MARCO;
18497
/
18498
--------------------------------------------------------
18499
--  DDL for Procedure LOG_ACTION_BULK
18500
--------------------------------------------------------
18501
 
18502
  CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,
18503
										 	  enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18504
                                         	  nUserId IN ACTION_LOG.USER_ID%TYPE,
18505
										 	  sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18506
/* ---------------------------------------------------------------------------
18507
    Version: 3.0
18508
   --------------------------------------------------------------------------- */
18509
 
18510
    ActionTypeId NUMBER;
18511
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18512
 
18513
BEGIN
18514
 
18515
    oPvIdCollector := IN_LIST_NUMBER ( nPvIdList );
18516
 
18517
    -- Get Action Type FK
18518
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18519
      FROM ACTION_TYPE act
18520
     WHERE act.NAME = enumActionTypeName;
18521
 
18522
    -- Log Action
18523
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18524
    SELECT nUserId,
18525
    	   ORA_SYSDATETIME,
18526
           pv.PV_ID,
18527
           sAdditionalComments,
18528
           ActionTypeId
18529
      FROM PACKAGE_VERSIONS pv
18530
     WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18531
 
18532
 
18533
END Log_Action_Bulk;
18534
/
18535
--------------------------------------------------------
18536
--  DDL for Procedure CLONED_PACKAGE_PROCESSES
18537
--------------------------------------------------------
18538
 
18539
  CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES" 
18540
IS
18541
 
18542
proc_id NUMBER;
18543
/******************************************************************************
18544
   NAME:       DELETE_DO_NOT_RIPPLE
18545
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18546
               IS RELEASED
18547
 
18548
   REVISIONS:
18549
   Ver        Date        Author           Description
18550
   ---------  ----------  ---------------  ------------------------------------
18551
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18552
 
18553
   NOTES:
18554
 
18555
   Automatically available Auto Replace Keywords:
18556
      Object Name:     DELETE_DO_NOT_RIPPLE
18557
      Sysdate:         21/04/2006
18558
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18559
      Username:         (set in TOAD Options, Procedure Editor)
18560
      Table Name:       (set in the "New PL/SQL Object" dialog)
18561
 
18562
******************************************************************************/
18563
   CURSOR ripple_cur
18564
   IS
18565
      select distinct proc_id, prod_id from deployment_manager.processes_config;
18566
 
18567
   ripple_rec   ripple_cur%ROWTYPE;
18568
BEGIN
18569
   OPEN ripple_cur;
18570
 
18571
   FETCH ripple_cur
18572
    INTO ripple_rec;
18573
 
18574
   WHILE ripple_cur%FOUND
18575
   LOOP
18576
 
18577
 
18578
 
18579
insert into package_processes (PROC_ID, PV_ID) 
18580
values( ripple_rec.proc_id, ripple_rec.prod_id);
18581
 
18582
      FETCH ripple_cur
18583
       INTO ripple_rec;
18584
   END LOOP;
18585
END CLONED_PACKAGE_PROCESSES;
18586
/
18587
--------------------------------------------------------
18588
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2
18589
--------------------------------------------------------
18590
 
18591
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
18592
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18593
                                                          NNuser_id IN NUMBER,
18594
                                                          retPV_ID OUT NUMBER,
18595
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
18596
/* ---------------------------------------------------------------------------
18597
    Version: 4.0
18598
   --------------------------------------------------------------------------- */
18599
 
18600
    parPkg_id   NUMBER;
18601
    parPv_id    NUMBER;
18602
    cloneFrom_pv_id NUMBER;
18603
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18604
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18605
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18606
 
18607
    CURSOR packages_cur IS
18608
        SELECT pkg_id FROM PACKAGES
18609
        WHERE pkg_name = SSpkg_name;
18610
    packages_rec packages_cur%ROWTYPE;
18611
 
18612
    CURSOR package_versions_cur IS
18613
        SELECT pv_id FROM PACKAGE_VERSIONS
18614
        WHERE pkg_id = parPkg_id
18615
        AND pkg_version = SSpkg_version;
18616
    package_versions_rec package_versions_cur%ROWTYPE;
18617
 
18618
    CURSOR clone_package_versions_cur IS
18619
        SELECT MAX(pv_id) AS pv_id
18620
          FROM PACKAGE_VERSIONS
18621
         WHERE pkg_id = parPkg_id
18622
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
18623
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
18624
 
18625
BEGIN
18626
    /* -------------------------------------------- */
18627
    /* Find if pkg_name exists and seed if required */
18628
    /* -------------------------------------------- */
18629
    OPEN packages_cur;
18630
    FETCH packages_cur INTO packages_rec;
18631
 
18632
    IF packages_cur%NOTFOUND
18633
    THEN
18634
        /* INSERT into packages table */
18635
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
18636
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
18637
 
18638
    ELSE
18639
        parPkg_id := packages_rec.pkg_id;
18640
 
18641
    END IF;
18642
 
18643
    CLOSE packages_cur;
18644
 
18645
 
18646
 
18647
    /* ---------------------------------------------------- */
18648
    /* Find if package_version exists and seed if required  */
18649
    /* ---------------------------------------------------- */
18650
    OPEN package_versions_cur;
18651
    FETCH package_versions_cur INTO package_versions_rec;
18652
 
18653
    IF package_versions_cur%NOTFOUND
18654
    THEN
18655
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18656
 
18657
        /* LOG ACTION */
18658
        Log_Action ( parPv_id, 'new_version', NNuser_id,
18659
        			 'New package version: '|| SSpkg_version );
18660
 
18661
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
18662
 
18663
 
18664
 
18665
 
18666
 
18667
            /* CLONE details from similar version  OR  from nCloneFromPvId */
18668
			IF ( NOT nCloneFromPvId IS NULL) THEN
18669
            	cloneFrom_pv_id := nCloneFromPvId;
18670
			ELSE
18671
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
18672
			END IF;
18673
 
18674
            -- Clone Package Version Details --
18675
            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,
18676
                                           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 )
18677
                SELECT parPv_id         AS pv_id,
18678
                       parPkg_id        AS pkg_id,
18679
                       SSpkg_version    AS pkg_version,
18680
                       'N'              AS dlocked,
18681
                       Ora_Sysdate      AS created_stamp,
18682
                       NNuser_id        AS creator_id,
18683
                       Ora_Sysdatetime  AS modified_stamp,
18684
                       NNuser_id        AS modifier_id,
18685
                       SSV_MM           AS V_MM,
18686
                       SSV_NMM          AS V_NMM,
18687
                       SSV_EXT          AS V_EXT,
18688
                       pv.src_path,
18689
                       pv.pv_description,
18690
                       pv.PV_OVERVIEW,
18691
                       cloneFrom_pv_id 	AS LAST_PV_ID,
18692
                       pv.owner_id,
18693
					   pv.BUILD_TYPE,
18694
					   pv.IS_BUILD_ENV_REQUIRED,
18695
					   pv.bs_id,
18696
					   pv.is_autobuildable,
18697
					   pv.IS_DEPLOYABLE,
18698
					   pv.ripple_field
18699
                  FROM PACKAGE_VERSIONS pv
18700
                 WHERE pv.pv_id = cloneFrom_pv_id;
18701
 
18702
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
18703
 
18704
        retPV_ID := parPv_id;
18705
 
18706
    ELSE
18707
        retPV_ID := package_versions_rec.pv_id;
18708
 
18709
    END IF;
18710
 
18711
    CLOSE package_versions_cur;
18712
 
18713
 
18714
 
18715
 
18716
END Seed_Package_Names_Versions2;
18717
/
18718
--------------------------------------------------------
18719
--  DDL for Procedure BUILD_TREE
18720
--------------------------------------------------------
18721
 
18722
  CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,
18723
	   	  		  					     retSessionNum OUT NUMBER ) IS
18724
 
18725
/* ---------------------------------------------------------------------------
18726
    Version: 3.0.0
18727
   --------------------------------------------------------------------------- */
18728
    rowCnt 			NUMBER := 0;						-- Iterations counter
18729
    iteration 		NUMBER := 1;                  -- Maximum number of iterations allowed.
18730
    maxIterations 	NUMBER := 50;      	  	-- This will prevent infinite loops if cyrcular dependencies are found
18731
	UP_THE_TREE 	CONSTANT NUMBER DEFAULT 1;
18732
	DOWN_THE_TREE 	CONSTANT NUMBER DEFAULT -1;
18733
    sessionNum 		NUMBER;
18734
	levelNum		NUMBER;
18735
 
18736
BEGIN
18737
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18738
 
18739
	/*
18740
	||	   Start UP THE TREE
18741
	*/
18742
 
18743
 
18744
	/* Packages with no dependencies */    
18745
    INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18746
		SELECT sessionNum AS SESSION_NUM,
18747
			   iteration AS LEVEL_NUM,
18748
			   UP_THE_TREE AS DIRECTION,
18749
			   rc.pv_id, pv.pkg_id, pv.v_ext
18750
		  FROM release_content rc,
18751
		  	   package_versions pv
18752
		 WHERE rc.rtag_id = nRtag_id
18753
		   AND rc.pv_id = pv.pv_id
18754
		 MINUS
18755
		SELECT sessionNum AS SESSION_NUM, 
18756
			   iteration AS LEVEL_NUM,
18757
			   UP_THE_TREE AS DIRECTION,
18758
			   dep.pv_id, pv.pkg_id, pv.v_ext
18759
		  FROM package_dependencies dep,
18760
		  	   package_versions pv
18761
		 WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )
18762
		   AND dep.pv_id = pv.pv_id;
18763
 
18764
 
18765
	/* Browse UP the build tree */	   
18766
	iteration := iteration + 1;
18767
    LOOP
18768
 
18769
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18770
			SELECT DISTINCT 
18771
			       sessionNum AS SESSION_NUM,
18772
			       iteration AS LEVEL_NUM,
18773
				   UP_THE_TREE AS DIRECTION, 
18774
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18775
			  FROM (  
18776
			        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
18777
			          FROM package_dependencies dep,
18778
			               release_content rc,
18779
						   package_versions pv,
18780
						   package_versions dpv
18781
			         WHERE dep.pv_id = rc.pv_id
18782
			           AND rc.rtag_id = nRtag_id
18783
					   AND dep.pv_id = pv.pv_id
18784
					   AND dep.dpv_id = dpv.pv_id
18785
					) rdep,
18786
					temp_tree_browse ttb
18787
			 WHERE rdep.dpkg_id  = ttb.pkg_id
18788
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')
18789
			   AND ttb.SESSION_NUM = sessionNum
18790
			   AND ttb.LEVEL_NUM = iteration - 1	
18791
			MINUS
18792
			/* Packages with all depencencies NOT matched */  
18793
			SELECT DISTINCT 
18794
			       sessionNum AS SESSION_NUM,
18795
			       iteration AS LEVEL_NUM, 
18796
				   UP_THE_TREE AS DIRECTION,
18797
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18798
			  FROM (  
18799
			        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
18800
			          FROM package_dependencies dep,
18801
			               release_content rc,
18802
						   package_versions pv,
18803
						   package_versions dpv
18804
			         WHERE dep.pv_id = rc.pv_id
18805
			           AND rc.rtag_id = nRtag_id
18806
					   AND dep.pv_id = pv.pv_id
18807
					   AND dep.dpv_id = dpv.pv_id
18808
					) rdep,
18809
					(
18810
					 SELECT tb.*
18811
					   FROM temp_tree_browse tb
18812
					  WHERE tb.SESSION_NUM = sessionNum
18813
					) ttb
18814
			 WHERE rdep.dpkg_id  = ttb.pkg_id (+)
18815
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')
18816
			   AND ttb.SESSION_NUM IS NULL;
18817
 
18818
		rowCnt := SQL%ROWCOUNT;
18819
		IF rowCnt > 0 THEN
18820
           iteration := iteration + 1;
18821
		END IF;
18822
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18823
    END LOOP;
18824
 
18825
	/*---------------------------------------------------------------------------------------------------------------------*/
18826
 
18827
	/*     Check for unresolved dependencies
18828
	||  
18829
	*/
18830
	/* UNRESOLVED */
18831
	 SELECT COUNT(*) INTO rowCnt
18832
	   FROM (
18833
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18834
			  FROM release_content rc,
18835
			  	   package_versions pv
18836
			 WHERE rc.rtag_id = nRtag_id
18837
			   AND rc.pv_id = pv.pv_id	   
18838
			MINUS
18839
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18840
			  FROM temp_tree_browse ttb
18841
			 WHERE ttb.session_num = sessionNum
18842
			);
18843
 
18844
 
18845
 
18846
	 IF rowCnt > 0 
18847
	 THEN
18848
	 	 /*     Circular dependencies detected.
18849
		 ||     Try to resolve build order from the top now.
18850
		 ||		Start DOWN THE TREE
18851
		 */
18852
 
18853
		iteration := 0; 
18854
		 /* Top Level packages */	
18855
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )	   
18856
			SELECT sessionNum AS SESSION_NUM,
18857
			       iteration AS LEVEL_NUM,
18858
				   DOWN_THE_TREE AS DIRECTION,
18859
				   pv.pv_id, pv.pkg_id, pv.v_ext
18860
			  FROM (		   
18861
					/* Packages no one depends on ( Top level packages )*/
18862
					( 
18863
					/* All parents*/ 
18864
					SELECT pv.pkg_id, pv.v_ext
18865
			          FROM package_dependencies dep,
18866
			               release_content rc,
18867
						   package_versions pv
18868
			         WHERE dep.pv_id = rc.pv_id
18869
			           AND rc.rtag_id = nRtag_id
18870
					   AND dep.pv_id = pv.pv_id
18871
					 MINUS
18872
					 /* All children */
18873
					SELECT dpv.pkg_id, dpv.v_ext
18874
			          FROM package_dependencies dep,
18875
			               release_content rc,
18876
						   package_versions dpv
18877
			         WHERE dep.pv_id = rc.pv_id
18878
			           AND rc.rtag_id = nRtag_id
18879
					   AND dep.dpv_id = dpv.pv_id
18880
					 ) 
18881
					 MINUS
18882
					/* Packages with resolved dependencies from UP THE TREE */ 
18883
					SELECT ttb.pkg_id, ttb.v_ext
18884
					  FROM temp_tree_browse ttb
18885
					 WHERE ttb.session_num = sessionNum
18886
				  ) tpkg,
18887
				  package_versions pv,
18888
				  release_content rc
18889
			WHERE rc.rtag_id = nRtag_id
18890
			  AND rc.pv_id = pv.pv_id
18891
			  AND tpkg.pkg_id = pv.pkg_id
18892
			  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18893
 
18894
 
18895
		 /* Keep taking packages which no one depende on */			  
18896
		 iteration := iteration - 1;  
18897
		 LOOP	  
18898
			   INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18899
					SELECT sessionNum AS SESSION_NUM,
18900
					       iteration AS LEVEL_NUM,
18901
					       DOWN_THE_TREE AS DIRECTION,
18902
					       pv.pv_id, pv.pkg_id, pv.v_ext
18903
					  FROM (		   
18904
					 	/* All Unresolved */
18905
					 	(
18906
					 	SELECT pv.pkg_id, pv.v_ext
18907
					 	  FROM release_content rc,
18908
					 	  	   package_versions pv
18909
					 	 WHERE rc.rtag_id = nRtag_id
18910
					 	   AND rc.pv_id = pv.pv_id	   
18911
					 	MINUS
18912
					 	SELECT ttb.pkg_id, ttb.v_ext
18913
					 	  FROM temp_tree_browse ttb
18914
					 	 WHERE ttb.session_num = sessionNum
18915
					 	)
18916
					 	 MINUS
18917
					 	(  
18918
					 	 /* Children of Unresolved */  
18919
					 	SELECT dpv.pkg_id, dpv.V_EXT
18920
					 	  FROM (
18921
					 			SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18922
					 			  FROM release_content rc,
18923
					 			  	   package_versions pv
18924
					 			 WHERE rc.rtag_id = nRtag_id
18925
					 			   AND rc.pv_id = pv.pv_id	   
18926
					 			MINUS
18927
					 			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18928
					 			  FROM temp_tree_browse ttb
18929
					 			 WHERE ttb.session_num = sessionNum
18930
					 		   ) unr,
18931
					 		   package_dependencies dep,
18932
					 		   package_versions dpv
18933
					 	 WHERE unr.pv_id = dep.pv_id
18934
					 	   AND dep.dpv_id = dpv.pv_id
18935
					 	 )  
18936
					   ) tpkg,
18937
					   package_versions pv,
18938
					   release_content rc
18939
					WHERE rc.rtag_id = nRtag_id
18940
					  AND rc.pv_id = pv.pv_id
18941
					  AND tpkg.pkg_id = pv.pkg_id
18942
					  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18943
 
18944
            rowCnt := SQL%ROWCOUNT;
18945
        	IF rowCnt > 0 THEN
18946
	           iteration := iteration - 1;
18947
			END IF;
18948
            EXIT WHEN (rowCnt < 1);
18949
     	END LOOP;
18950
 
18951
	 END IF;
18952
 
18953
 
18954
	/*---------------------------------------------------------------------------------------------------------------------*/
18955
 
18956
	/* 
18957
	|| 	 Save results from temp table
18958
	*/	
18959
	/* Clean up build_order table */
18960
	DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;
18961
 
18962
	/* Save UP THE TREE */
18963
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18964
		SELECT nRtag_id AS rtag_id,
18965
			   ttb.level_num AS step_num, 
18966
			   ttb.PV_ID
18967
		  FROM temp_tree_browse ttb
18968
		 WHERE ttb.session_num = sessionNum
18969
		   AND ttb.direction = UP_THE_TREE;	
18970
 
18971
	/*Get last step_num */
18972
	SELECT MAX(ttb.level_num) + 1 INTO levelNum
18973
	FROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;
18974
 
18975
	/* UNRESOLVED */
18976
	 SELECT COUNT(*) INTO rowCnt
18977
	   FROM (
18978
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18979
			  FROM release_content rc,
18980
			  	   package_versions pv
18981
			 WHERE rc.rtag_id = nRtag_id
18982
			   AND rc.pv_id = pv.pv_id	   
18983
			MINUS
18984
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18985
			  FROM temp_tree_browse ttb
18986
			 WHERE ttb.session_num = sessionNum
18987
			);
18988
 
18989
 
18990
	IF rowCnt > 0
18991
	THEN
18992
		/* Save unresolved packages */
18993
 		INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )
18994
		    SELECT  nRtag_id AS rtag_id,
18995
				    levelNum AS step_num, 
18996
				    upv.PV_ID,
18997
					'Y' AS UNRESOLVED
18998
			   FROM (
18999
					 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
19000
					  FROM release_content rc,
19001
					  	   package_versions pv
19002
					 WHERE rc.rtag_id = nRtag_id
19003
					   AND rc.pv_id = pv.pv_id	   
19004
					MINUS
19005
					SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
19006
					  FROM temp_tree_browse ttb
19007
					 WHERE ttb.session_num = sessionNum
19008
					) upv;
19009
	END IF;	
19010
 
19011
	/* Save DOWN THE TREE */
19012
	levelNum := 1000;
19013
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
19014
		SELECT nRtag_id AS rtag_id,
19015
			   levelNum + ttb.level_num  AS step_num, 
19016
			   ttb.PV_ID
19017
		  FROM temp_tree_browse ttb
19018
		 WHERE ttb.session_num = sessionNum
19019
		   AND ttb.direction = DOWN_THE_TREE;
19020
 
19021
 
19022
	/*---------------------------------------------------------------------------------------------------------------------*/
19023
 
19024
	/* Clean up temp table */
19025
	DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;
19026
 
19027
	retSessionNum := sessionNum;
19028
END Build_Tree;
19029
/
19030
--------------------------------------------------------
19031
--  DDL for Procedure CLEAR_ADVISORY_RIPPLE
19032
--------------------------------------------------------
19033
 
19034
  CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19035
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
19036
											 nUserId IN NUMBER ) IS
19037
/* ---------------------------------------------------------------------------
19038
    Version: 4.0
19039
   --------------------------------------------------------------------------- */
19040
 
19041
BEGIN
19042
 
19043
    -- Clear Advisory Ripple Package
19044
    DELETE FROM ADVISORY_RIPPLE
19045
	WHERE PV_ID = nPvId
19046
	AND RTAG_ID = nRtagId;
19047
 
19048
    /* LOG ACTION */
19049
   	Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );
19050
 
19051
	/*Rebuild_Environment(nRtagId);*/
19052
 
19053
END Clear_Advisory_Ripple;
19054
/
19055
--------------------------------------------------------
19056
--  DDL for Procedure REMOVE_RELEASE_CONTENT
19057
--------------------------------------------------------
19058
 
19059
  CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,
19060
													 sNotPvIdList IN VARCHAR2,
19061
                                                     nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
19062
/* ---------------------------------------------------------------------------
19063
    Version: 3.0
19064
   --------------------------------------------------------------------------- */
19065
 
19066
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19067
oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19068
 
19069
BEGIN
19070
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
19071
    oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );
19072
 
19073
    -- Delete From Release Content
19074
    DELETE
19075
      FROM RELEASE_CONTENT
19076
	 WHERE rtag_id = nRTagId
19077
	   AND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19078
	   AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19079
 
19080
 
19081
 
19082
END Remove_Release_Content;
19083
/
19084
--------------------------------------------------------
19085
--  DDL for Procedure UPDATE_PACKAGE_DEPENDENCY
19086
--------------------------------------------------------
19087
 
19088
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,
19089
                                                        SSdep_name IN PACKAGES.pkg_name%TYPE,
19090
                                                        SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19091
                                                        CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,
19092
                                                        NNuser_id IN NUMBER,
19093
                                                        NNdelete_old_dependency IN NUMBER
19094
                                                       ) IS
19095
/* ---------------------------------------------------------------------------
19096
    Version: 3.3
19097
   --------------------------------------------------------------------------- */
19098
 
19099
    retPV_ID NUMBER;
19100
    SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;
19101
	DepIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
19102
    PvIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
19103
    NNpkg_id NUMBER;
19104
    NNdpkg_id NUMBER;
19105
 
19106
BEGIN
19107
    --- Seed database with package_name and version if required ---
19108
    Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );
19109
 
19110
    -- get v_ext,pkg_id of current dependency
19111
    SELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatch
19112
      FROM PACKAGE_VERSIONS
19113
     WHERE pv_id = retPV_ID;
19114
 
19115
    -- get pkg_id of parent package
19116
    SELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatch
19117
      FROM PACKAGE_VERSIONS
19118
     WHERE pv_id = NNpv_id;
19119
 
19120
 
19121
	IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR
19122
    	( (PvIsPatch IS NOT NULL) )THEN
19123
 
19124
	    IF NNdelete_old_dependency = 1 THEN
19125
	        /* Used for CUSTOM dependency add/edit */
19126
 
19127
	        --- Remove old dependency ---
19128
            IF (PvIsPatch IS NULL) THEN
19129
            	-- Do it for Packages
19130
		        DELETE FROM PACKAGE_DEPENDENCIES
19131
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
19132
		            (
19133
		            SELECT dep.*
19134
		              FROM PACKAGE_DEPENDENCIES dep,
19135
		                   PACKAGE_VERSIONS dpv,
19136
		                   PACKAGE_VERSIONS pv
19137
		             WHERE dep.dpv_id = dpv.pv_id
19138
		               AND dep.pv_id = NNpv_id
19139
		               AND pv.pv_id = retPV_ID
19140
		               AND dpv.pkg_id = pv.pkg_id
19141
		               AND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|')
19142
		            );
19143
            ELSE
19144
            	-- Do it for Patches
19145
                DELETE FROM PACKAGE_DEPENDENCIES
19146
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
19147
		            (
19148
		            SELECT dep.*
19149
		              FROM PACKAGE_DEPENDENCIES dep
19150
		             WHERE dep.dpv_id = retPV_ID
19151
		               AND dep.pv_id = NNpv_id
19152
		            );
19153
			END IF;
19154
 
19155
	    END IF;
19156
 
19157
	    /* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */
19158
 
19159
	    --- Add new dependency ---
19160
	    INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )
19161
	    VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );
19162
 
19163
	END IF;
19164
 
19165
END Update_Package_Dependency;
19166
/
19167
--------------------------------------------------------
19168
--  DDL for Procedure LOG_ACTION
19169
--------------------------------------------------------
19170
 
19171
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19172
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
19173
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
19174
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
19175
/* ---------------------------------------------------------------------------
19176
    Version: 3.0
19177
   --------------------------------------------------------------------------- */
19178
 
19179
    ActionTypeId NUMBER;
19180
 
19181
BEGIN
19182
 
19183
    -- Get Action Type FK
19184
    SELECT act.ACTTYPE_ID INTO ActionTypeId
19185
      FROM ACTION_TYPE act
19186
     WHERE act.NAME = enumActionTypeName;
19187
 
19188
 
19189
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19190
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
19191
 
19192
 
19193
END Log_Action;
19194
/
19195
--------------------------------------------------------
19196
--  DDL for Procedure REMOVE_PATCH
19197
--------------------------------------------------------
19198
 
19199
  CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
19200
										   nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
19201
                                           nUserId IN NUMBER ) IS
19202
/* ---------------------------------------------------------------------------
19203
    Version: 4.0
19204
   --------------------------------------------------------------------------- */
19205
 
19206
PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19207
 
19208
CURSOR curPatch IS
19209
	SELECT pp.PV_ID,
19210
		   pp.PATCH_ID,
19211
	       ROWNUM AS NEW_INSTALL_ORDER
19212
	  FROM PACKAGE_PATCHES pp
19213
	 WHERE pp.PV_ID = nPvId
19214
	ORDER BY pp.INSTALL_ORDER;
19215
recPatch curPatch%ROWTYPE;
19216
 
19217
BEGIN
19218
 
19219
	 -- Delete Patch
19220
     DELETE
19221
       FROM PACKAGE_PATCHES pp
19222
      WHERE pp.PV_ID = nPvId
19223
        AND pp.PATCH_ID = nPatchId;
19224
 
19225
 
19226
	-- Redo Install Order
19227
    OPEN curPatch;
19228
	FETCH curPatch INTO recPatch;
19229
 
19230
	WHILE curPatch%FOUND
19231
	LOOP
19232
 
19233
		UPDATE PACKAGE_PATCHES pp SET
19234
			pp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDER
19235
		WHERE pp.PV_ID = nPvId
19236
		  AND pp.PATCH_ID = recPatch.PATCH_ID;
19237
 
19238
		FETCH curPatch INTO recPatch;
19239
	END LOOP;
19240
 
19241
	CLOSE curPatch;
19242
 
19243
 
19244
 
19245
 
19246
    /* LOG ACTION */
19247
    SELECT pv.PKG_VERSION INTO PatchVersion
19248
      FROM PACKAGE_VERSIONS pv
19249
     WHERE pv.PV_ID = nPatchId;
19250
 
19251
   	Log_Action ( nPvId, 'patch_remove', nUserId,
19252
   			     'Version: '|| PatchVersion );
19253
 
19254
END Remove_Patch;
19255
/
19256
--------------------------------------------------------
19257
--  DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP
19258
--------------------------------------------------------
19259
 
19260
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
19261
	   	  		  								  	   	 sBuildEnvIdList IN VARCHAR2,
19262
														 nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE 
19263
														 ) IS
19264
/* ---------------------------------------------------------------------------
19265
    Last Modified: Rupesh Solanki
19266
	Version: 3.0.1
19267
   --------------------------------------------------------------------------- */
19268
 
19269
   nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();   
19270
   BsId NUMBER;
19271
   HackBsId NUMBER;
19272
 
19273
 
19274
BEGIN
19275
 
19276
   nBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );
19277
 
19278
   -- Delete Current Build Env settings
19279
   DELETE FROM PACKAGE_BUILD_ENV
19280
   WHERE pv_id = nPvId;
19281
 
19282
   -- Delet Current Package Build Info Settings
19283
   DELETE FROM PACKAGE_BUILD_INFO
19284
   WHERE pv_id = nPvId;
19285
 
19286
   -- Reset flag to N
19287
   UPDATE PACKAGE_VERSIONS SET
19288
	   IS_BUILD_ENV_REQUIRED = 'N'
19289
   WHERE PV_ID = nPvId;
19290
 
19291
 
19292
   -- Set new Build Env
19293
   IF NOT sBuildEnvIdList IS NULL THEN
19294
	FOR i IN 1..nBsCollector.COUNT
19295
	LOOP   
19296
 
19297
	BsId := nBsCollector(i);
19298
 
19299
	IF nBuildStandard = 2 THEN
19300
	   IF BsId = 1 THEN
19301
	   	  HackBsId := 11;
19302
	   ELSE
19303
	   	  HackBsId := 12;
19304
	   END IF;
19305
 
19306
   	  -- Insert into PACKAGE_BUILD_ENV
19307
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19308
	  SELECT nPvId AS PV_ID,
19309
	  		 be.BE_ID
19310
	    FROM BUILD_ENVIRONMENTS be
19311
	   WHERE be.BE_ID IN ( HackBsId );
19312
 
19313
   	  -- Insert into PACKAGE_BUILD_INFO
19314
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19315
	  SELECT nPvId AS PV_ID,
19316
	  		 be.BM_ID
19317
	    FROM BUILD_MACHINES be
19318
	   WHERE be.BM_ID IN ( BsId );						 
19319
 
19320
	   -- Set flag to Y
19321
	   UPDATE PACKAGE_VERSIONS SET
19322
		   IS_BUILD_ENV_REQUIRED = 'Y'
19323
	   WHERE PV_ID = nPvId;	
19324
 
19325
 
19326
	ELSE
19327
 
19328
   	  -- Insert into PACKAGE_BUILD_ENV
19329
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19330
	  SELECT nPvId AS PV_ID,
19331
	  		 be.BE_ID
19332
	    FROM BUILD_ENVIRONMENTS be
19333
	   WHERE be.BE_ID IN ( BsId );
19334
 
19335
   	  -- Insert into PACKAGE_BUILD_INFO
19336
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19337
	  SELECT nPvId AS PV_ID,
19338
	  		 be.BM_ID
19339
	    FROM BUILD_MACHINES be
19340
	   WHERE be.BM_ID IN ( BsId );						 
19341
 
19342
	   -- Set flag to Y
19343
	   UPDATE PACKAGE_VERSIONS SET
19344
		   IS_BUILD_ENV_REQUIRED = 'Y'
19345
	   WHERE PV_ID = nPvId;
19346
 
19347
	END IF;  
19348
 
19349
 
19350
	END LOOP;	   
19351
 
19352
   END IF;
19353
 
19354
 
19355
END Set_Package_Build_Env_Temp;
19356
/
19357
--------------------------------------------------------
19358
--  DDL for Procedure UPDATE_RUNTIME_DEPENDENCY
19359
--------------------------------------------------------
19360
 
19361
  CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,
19362
				   	  		  						    NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,
19363
				   	  		  						    SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19364
													    SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,
19365
													    SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,
19366
													    NNuser_id IN NUMBER ) IS
19367
/* ---------------------------------------------------------------------------
19368
    Version: 3.0.1
19369
   --------------------------------------------------------------------------- */
19370
 
19371
    retRTD_ID	NUMBER;
19372
	CURSOR rtd_cur IS
19373
	    SELECT pv.pkg_version, pkg.pkg_name
19374
		  FROM runtime_dependencies rtd,
19375
		       package_versions pv,
19376
			   packages pkg
19377
		 WHERE rtd.rtd_id = pv.pv_id
19378
		   AND pv.pkg_id = pkg.pkg_id
19379
		   AND rtd.pv_id = NNpv_id
19380
		   AND rtd.rtd_id = NNrtd_id;
19381
	   rtd_rec rtd_cur%ROWTYPE;
19382
 
19383
	CURSOR old_rtd_cur IS
19384
	    SELECT pv.pv_id
19385
		  FROM package_versions pv
19386
		 WHERE pv.pkg_id IN ( SELECT rtdpv.pkg_id
19387
		 	   			 	    FROM package_versions rtdpv
19388
							   WHERE rtdpv.pv_id = NNrtd_id )
19389
		   AND pv.pkg_version = SSrtd_version;
19390
	old_rtd_rec old_rtd_cur%ROWTYPE;
19391
 
19392
 
19393
BEGIN
19394
 
19395
    -- Get current runtime dependency details
19396
	OPEN rtd_cur;
19397
    FETCH rtd_cur INTO rtd_rec;
19398
 
19399
 
19400
 
19401
 
19402
	IF rtd_rec.pkg_version != SSrtd_version THEN
19403
           -- Version has changed, hence create new runtime dependency --
19404
	    /* NOTE: You must create new version as updating just a version will affect
19405
		        all packages using this runtime dependency and user does not expect that.
19406
		        It is safer to create new version */
19407
		OPEN old_rtd_cur;
19408
		FETCH old_rtd_cur INTO old_rtd_rec;
19409
 
19410
 
19411
		IF old_rtd_cur%NOTFOUND
19412
		THEN
19413
			-- Version not found, hence Create New version --
19414
    		Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );
19415
 
19416
			-- Update runtime dependency table --
19417
			UPDATE runtime_dependencies SET
19418
				   rtd_id = retRTD_ID,
19419
				   rtd_url = SSrtd_url,
19420
				   rtd_comments = SSrtd_comments
19421
			 WHERE pv_id = NNpv_id
19422
			   AND rtd_id = NNrtd_id;
19423
 
19424
		ELSE
19425
			-- Update runtime dependency table --
19426
			UPDATE runtime_dependencies SET
19427
				   rtd_id = old_rtd_rec.pv_id,
19428
				   rtd_url = SSrtd_url,
19429
				   rtd_comments = SSrtd_comments
19430
			 WHERE pv_id = NNpv_id
19431
			   AND rtd_id = NNrtd_id;
19432
 
19433
		END IF;
19434
 
19435
 
19436
		CLOSE old_rtd_cur;
19437
 
19438
	ELSE
19439
		--  Version has not changed, hence update everithing except	version --
19440
		UPDATE runtime_dependencies SET
19441
			   rtd_url = SSrtd_url,
19442
			   rtd_comments = SSrtd_comments
19443
		 WHERE pv_id = NNpv_id
19444
		   AND rtd_id = NNrtd_id;
19445
 
19446
 
19447
 
19448
	END IF;
19449
 
19450
 
19451
	CLOSE rtd_cur;
19452
 
19453
END Update_Runtime_Dependency;
19454
/
19455
--------------------------------------------------------
19456
--  DDL for Procedure SET_ADVISORY_RIPPLE
19457
--------------------------------------------------------
19458
 
19459
  CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19460
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
19461
											 nUserId IN NUMBER ) IS
19462
/* ---------------------------------------------------------------------------
19463
    Version: 4.0
19464
   --------------------------------------------------------------------------- */
19465
 
19466
BEGIN
19467
 
19468
    -- Set Advisory Ripple Package
19469
    INSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)
19470
	VALUES (nRtagId, nPvId);
19471
 
19472
    /* LOG ACTION */
19473
   	Log_Action ( nPvId, 'set_advisory_ripple', nUserId );
19474
 
19475
	/*Rebuild_Environment(nRtagId);*/
19476
 
19477
END Set_Advisory_Ripple;
19478
/
19479
--------------------------------------------------------
19480
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS
19481
--------------------------------------------------------
19482
 
19483
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
19484
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19485
                                                          NNuser_id IN NUMBER,
19486
                                                          retPV_ID OUT NUMBER,
19487
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
19488
/* ---------------------------------------------------------------------------
19489
    Version: 4.0
19490
   --------------------------------------------------------------------------- */
19491
 
19492
    parPkg_id   NUMBER;
19493
    parPv_id    NUMBER;
19494
    cloneFrom_pv_id NUMBER;
19495
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19496
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19497
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19498
 
19499
    CURSOR packages_cur IS
19500
        SELECT pkg_id FROM PACKAGES
19501
        WHERE pkg_name = SSpkg_name;
19502
    packages_rec packages_cur%ROWTYPE;
19503
 
19504
    CURSOR package_versions_cur IS
19505
        SELECT pv_id FROM PACKAGE_VERSIONS
19506
        WHERE pkg_id = parPkg_id
19507
        AND pkg_version = SSpkg_version;
19508
    package_versions_rec package_versions_cur%ROWTYPE;
19509
 
19510
    CURSOR clone_package_versions_cur IS
19511
        SELECT MAX(pv_id) AS pv_id
19512
          FROM PACKAGE_VERSIONS
19513
         WHERE pkg_id = parPkg_id
19514
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
19515
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
19516
 
19517
BEGIN
19518
    /* -------------------------------------------- */
19519
    /* Find if pkg_name exists and seed if required */
19520
    /* -------------------------------------------- */
19521
    OPEN packages_cur;
19522
    FETCH packages_cur INTO packages_rec;
19523
 
19524
    IF packages_cur%NOTFOUND
19525
    THEN
19526
        /* INSERT into packages table */
19527
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
19528
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
19529
 
19530
    ELSE
19531
        parPkg_id := packages_rec.pkg_id;
19532
 
19533
    END IF;
19534
 
19535
    CLOSE packages_cur;
19536
 
19537
 
19538
 
19539
    /* ---------------------------------------------------- */
19540
    /* Find if package_version exists and seed if required  */
19541
    /* ---------------------------------------------------- */
19542
    OPEN package_versions_cur;
19543
    FETCH package_versions_cur INTO package_versions_rec;
19544
 
19545
    IF package_versions_cur%NOTFOUND
19546
    THEN
19547
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
19548
 
19549
        /* LOG ACTION */
19550
        Log_Action ( parPv_id, 'new_version', NNuser_id,
19551
        			 'New package version: '|| SSpkg_version );
19552
 
19553
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19554
 
19555
        /* Find similar pkg_name + ext to clone from */
19556
        OPEN clone_package_versions_cur;
19557
        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
19558
 
19559
 
19560
        IF NOT clone_package_versions_rec.pv_id IS NULL
19561
        THEN
19562
            /* CLONE details from similar version  OR  from nCloneFromPvId */
19563
			IF ( NOT nCloneFromPvId IS NULL) THEN
19564
            	cloneFrom_pv_id := nCloneFromPvId;
19565
			ELSE
19566
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
19567
			END IF;
19568
 
19569
            -- Clone Package Version Details --
19570
            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,
19571
                                           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  )
19572
                SELECT parPv_id         AS pv_id,
19573
                       parPkg_id        AS pkg_id,
19574
                       SSpkg_version    AS pkg_version,
19575
                       'N'              AS dlocked,
19576
                       Ora_Sysdate      AS created_stamp,
19577
                       NNuser_id        AS creator_id,
19578
                       Ora_Sysdatetime  AS modified_stamp,
19579
                       NNuser_id        AS modifier_id,
19580
                       SSV_MM           AS V_MM,
19581
                       SSV_NMM          AS V_NMM,
19582
                       SSV_EXT          AS V_EXT,
19583
                       pv.src_path,
19584
                       pv.pv_description,
19585
                       pv.PV_OVERVIEW,
19586
                       cloneFrom_pv_id 	AS LAST_PV_ID,
19587
                       pv.owner_id,
19588
					   pv.BUILD_TYPE,
19589
					   pv.IS_BUILD_ENV_REQUIRED,
19590
					   pv.BS_ID,
19591
					   pv.is_autobuildable,
19592
					   pv.IS_DEPLOYABLE, 
19593
					   pv.ripple_field
19594
                  FROM PACKAGE_VERSIONS pv
19595
                 WHERE pv.pv_id = cloneFrom_pv_id;
19596
 
19597
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
19598
 
19599
        ELSE
19600
            /* BRAND NEW version + ext */
19601
            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 )
19602
        	VALUES (
19603
                    parPv_id,
19604
                    parPkg_id,
19605
                    SSpkg_version,
19606
                    'N',
19607
                    Ora_Sysdate,
19608
                    NNuser_id,
19609
                    Ora_Sysdatetime,
19610
                    NNuser_id,
19611
                    SSV_MM,
19612
                    SSV_NMM,
19613
                    SSV_EXT,
19614
                    NNuser_id,
19615
                    parPv_id,
19616
					'M',
19617
					'b'
19618
                   );
19619
 
19620
        END IF;
19621
 
19622
        CLOSE clone_package_versions_cur;
19623
        retPV_ID := parPv_id;
19624
 
19625
    ELSE
19626
        retPV_ID := package_versions_rec.pv_id;
19627
 
19628
    END IF;
19629
 
19630
    CLOSE package_versions_cur;
19631
 
19632
 
19633
 
19634
 
19635
END Seed_Package_Names_Versions;
19636
/
19637
--------------------------------------------------------
19638
--  DDL for Procedure RENAME_PACKAGE_VERSION
19639
--------------------------------------------------------
19640
 
19641
  CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,
19642
                                                     SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19643
													 cBuildType IN CHAR,
19644
                                                     NNuser_id IN NUMBER,
19645
                                                     errMessage OUT VARCHAR2 ) IS
19646
/* ---------------------------------------------------------------------------
19647
    Version: 3.2
19648
   --------------------------------------------------------------------------- */
19649
 
19650
    sPackageVersion VARCHAR2(4000);
19651
	sLabel VARCHAR2(4000) := NULL;
19652
    OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19653
 
19654
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19655
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19656
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19657
 
19658
    CURSOR package_versions_cur IS
19659
        SELECT pv_id
19660
     	  FROM package_versions
19661
     	 WHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )
19662
     	   AND pkg_version = SSpkg_version;
19663
    package_versions_rec package_versions_cur%ROWTYPE;
19664
 
19665
 
19666
BEGIN
19667
 
19668
    /* ---------------------------------------------------- */
19669
    /* Find if package_version exists                       */
19670
    /* ---------------------------------------------------- */
19671
 
19672
	errMessage := NULL;
19673
 
19674
 
19675
	-- Get previous version
19676
	SELECT pv.PKG_VERSION INTO OldPkgVersion
19677
      FROM PACKAGE_VERSIONS pv
19678
     WHERE pv.PV_ID = NNpv_id;
19679
 
19680
 
19681
	sPackageVersion := SSpkg_version;
19682
 
19683
 
19684
	IF OldPkgVersion != sPackageVersion THEN
19685
 
19686
	    OPEN package_versions_cur;
19687
	    FETCH package_versions_cur INTO package_versions_rec;
19688
 
19689
	    IF package_versions_cur%NOTFOUND
19690
	    THEN
19691
 
19692
			-- Split current version in parts
19693
	    	Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19694
 
19695
 
19696
		    -- Automated built config
19697
			IF (cBuildType = 'A') THEN
19698
				sPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT;	-- Make sure that version is still unique
19699
			END IF;
19700
 
19701
 
19702
	        -- Packge version not found, hence rename it.
19703
	        UPDATE package_versions
19704
	           SET pkg_version = sPackageVersion,
19705
	               v_mm = SSV_MM,
19706
	               v_nmm = SSV_NMM,
19707
	               v_ext = SSV_EXT,
19708
	               modified_stamp = ORA_SYSDATETIME,
19709
	               modifier_id = NNuser_id,
19710
				   build_type = cBuildType,
19711
				   pkg_label = NULL
19712
	         WHERE pv_id = NNpv_id;
19713
 
19714
 
19715
			IF (cBuildType = 'A') THEN
19716
				sLabel := GET_AUTOMATED_LABEL( NNpv_id );
19717
				UPDATE PACKAGE_VERSIONS pv SET
19718
					pv.PKG_LABEL = sLabel
19719
		         WHERE pv_id = NNpv_id;
19720
			END IF;
19721
 
19722
			/* LOG ACTION */
19723
	      	Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );
19724
 
19725
	    ELSE
19726
	        -- Package version exists. Cannot proceed.
19727
	        errMessage := 'enum_MSG_VERSION_EXISTS';
19728
 
19729
	    END IF;
19730
 
19731
	    CLOSE package_versions_cur;
19732
 
19733
	END IF;
19734
 
19735
 
19736
 
19737
 
19738
END Rename_Package_Version;
19739
/
19740
--------------------------------------------------------
19741
--  DDL for Procedure PAOLO_BUILD_TREE
19742
--------------------------------------------------------
19743
 
19744
  CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) IS
19745
 
19746
    sessionNumber NUMBER := 0;
19747
    iteration NUMBER := 1; 
19748
    rowCnt NUMBER := 0;
19749
    maxIterations 	NUMBER := 50;
19750
 
19751
BEGIN
19752
 
19753
 
19754
    INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19755
    SELECT sessionNumber, iteration, rc.PV_ID
19756
      FROM RELEASE_CONTENT rc
19757
     WHERE rc.RTAG_ID = nRtag_id;
19758
 
19759
    iteration := iteration + 1;
19760
    LOOP
19761
 
19762
        INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19763
		SELECT sessionNumber,     
19764
               iteration,
19765
               dep.DPV_ID
19766
          FROM TEMP_TREE_BROWSE ttb,
19767
               PACKAGE_DEPENDENCIES dep
19768
         WHERE dep.PV_ID = ttb.PV_ID 
19769
           AND ttb.LEVEL_NUM = iteration - 1 
19770
 
19771
         MINUS  
19772
 
19773
        SELECT sessionNumber, iteration, ttb.PV_ID
19774
          FROM TEMP_TREE_BROWSE ttb;   
19775
 
19776
 
19777
 
19778
 
19779
		rowCnt := SQL%ROWCOUNT;
19780
		IF rowCnt > 0 THEN
19781
           iteration := iteration + 1;
19782
		END IF;
19783
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
19784
    END LOOP; 
19785
 
19786
END PAOLO_Build_Tree;
19787
/
19788
--------------------------------------------------------
19789
--  DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE
19790
--------------------------------------------------------
19791
 
19792
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,
19793
														  pnPv_id IN NUMBER,
19794
					                                      sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,
19795
														  sAcceptanceDate IN VARCHAR2,
19796
														  sAcceptedBy IN NUMBER,
19797
					                                      sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,
19798
														  cUpdateAcceptedStateOnly IN CHAR
19799
					                                     ) IS
19800
/* ---------------------------------------------------------------------------
19801
    Version: 3.0.0
19802
   --------------------------------------------------------------------------- */
19803
 
19804
 
19805
 
19806
BEGIN
19807
	IF cUpdateAcceptedStateOnly = 'Y'
19808
	THEN
19809
		--- Update Accepted State Only ---
19810
		IF ( sAccepted IS NULL )
19811
		THEN
19812
			-- Clear alleptance
19813
			UPDATE UNIT_TESTS SET
19814
		           TEST_ACCEPTED = NULL,
19815
		           ACCEPTANCE_DATE = NULL,
19816
				   ACCEPTED_BY = NULL,
19817
				   REVIEW_COMMENTS = NULL
19818
		     WHERE TEST_ID = pnTest_id
19819
		       AND PV_ID = pnPv_id;
19820
 
19821
	    ELSE
19822
			UPDATE UNIT_TESTS SET
19823
		           TEST_ACCEPTED = sAccepted,
19824
		           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19825
				   ACCEPTED_BY = sAcceptedBy
19826
		     WHERE TEST_ID = pnTest_id
19827
		       AND PV_ID = pnPv_id;
19828
 
19829
		END IF;
19830
 
19831
 
19832
	ELSE
19833
		--- Update Unit Test Acceptance ---
19834
	    UPDATE UNIT_TESTS SET
19835
	           TEST_ACCEPTED = sAccepted,
19836
			   REVIEW_COMMENTS = sReviewComments,
19837
	           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19838
			   ACCEPTED_BY = sAcceptedBy
19839
	     WHERE TEST_ID = pnTest_id
19840
	       AND PV_ID = pnPv_id;
19841
 
19842
	END IF;
19843
 
19844
END Update_Unit_Test_Acceptance;
19845
/
19846
--------------------------------------------------------
19847
--  DDL for Procedure NEW_ADDITIONAL_NOTE
19848
--------------------------------------------------------
19849
 
19850
  CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,
19851
                                                  psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
19852
                                                  psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
19853
                                                  pnUser_id IN NUMBER,
19854
                                                  outErrCode OUT NUMBER
19855
                                                 ) IS
19856
/* ---------------------------------------------------------------------------
19857
    Version: 3.0.0
19858
   --------------------------------------------------------------------------- */
19859
 
19860
    newID NUMBER;
19861
 
19862
	CURSOR an_duplicate_cur IS
19863
        SELECT note_id
19864
          FROM ADDITIONAL_NOTES
19865
         WHERE pv_id = pnPv_id
19866
           AND note_title = psNote_title;
19867
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
19868
 
19869
BEGIN
19870
	outErrCode := -1;		-- Set default return error code to ERROR state
19871
 
19872
	OPEN an_duplicate_cur;
19873
    FETCH an_duplicate_cur INTO an_duplicate_rec;
19874
 
19875
    IF an_duplicate_cur%NOTFOUND
19876
    THEN
19877
		/* No duplicate titles */
19878
		-- Get new ID --
19879
    	SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;
19880
 
19881
		--- Add Additional Note ---
19882
	    INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user  )
19883
	    VALUES (  newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );
19884
		outErrCode := 0;		-- Set return to SUCCESS
19885
	END IF;
19886
 
19887
	CLOSE an_duplicate_cur;
19888
END New_Additional_Note;
19889
/
19890
--------------------------------------------------------
19891
--  DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES
19892
--------------------------------------------------------
19893
 
19894
  CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS
19895
 
19896
/******************************************************************************
19897
   NAME:       INSERT_MULTIPLE_STICKY_NOTES
19898
   PURPOSE:    
19899
 
19900
   REVISIONS:
19901
   Ver        Date        Author           Description
19902
   ---------  ----------  ---------------  ------------------------------------
19903
   1.0        6/12/2006          1. Created this procedure.
19904
 
19905
   NOTES:
19906
 
19907
   Automatically available Auto Replace Keywords:
19908
      Object Name:     INSERT_MULTIPLE_STICKY_NOTES
19909
      Sysdate:         6/12/2006
19910
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
19911
      Username:         (set in TOAD Options, Procedure Editor)
19912
      Table Name:       (set in the "New PL/SQL Object" dialog)
19913
 
19914
******************************************************************************/
19915
 
19916
	CURSOR curInfo IS
19917
    SELECT PV_ID
19918
	FROM PACKAGE_BUILD_ENV
19919
	WHERE BE_ID IN (11, 12);
19920
    recInfo curInfo%ROWTYPE;
19921
 
19922
 
19923
BEGIN
19924
 
19925
	OPEN curInfo;
19926
    FETCH curInfo INTO recInfo;
19927
 
19928
	WHILE curInfo%FOUND
19929
	LOOP
19930
 
19931
		INSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )
19932
		VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );
19933
 
19934
		FETCH curInfo INTO recInfo;
19935
 
19936
	END LOOP;
19937
 
19938
	CLOSE curInfo;
19939
 
19940
 
19941
 
19942
 
19943
END INSERT_MULTIPLE_STICKY_NOTES;
19944
/
19945
--------------------------------------------------------
19946
--  DDL for Procedure TOUCH_RELEASE_BULK
19947
--------------------------------------------------------
19948
 
19949
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS
19950
/* ---------------------------------------------------------------------------
19951
    Version: 3.0
19952
   --------------------------------------------------------------------------- */
19953
 
19954
oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19955
 
19956
BEGIN
19957
	 oRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );
19958
 
19959
	 -- Touch Release for Rebuild
19960
     UPDATE RELEASE_TAGS rt SET
19961
     	rt.REBUILD_ENV = 'Y',
19962
        rt.REBUILD_STAMP = 0
19963
      WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19964
 
19965
 
19966
END Touch_Release_Bulk;
19967
/
19968
--------------------------------------------------------
19969
--  DDL for Procedure UPDATE_DEPRECATION_STATE
19970
--------------------------------------------------------
19971
 
19972
  CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) AS
19973
 
19974
recno NUMBER;
19975
 
19976
CURSOR deprecate_cur IS
19977
 
19978
SELECT rc.pv_id
19979
FROM release_content rc
19980
WHERE rtag_id = nnrtag_id
19981
 AND deprecated_state IN(7);
19982
 
19983
deprecate_rec deprecate_cur % rowtype;
19984
 
19985
BEGIN
19986
 
19987
  OPEN deprecate_cur;
19988
 
19989
  FETCH deprecate_cur
19990
  INTO deprecate_rec;
19991
 
19992
  WHILE deprecate_cur % FOUND
19993
  LOOP
19994
 
19995
    SELECT COUNT(*)
19996
    INTO recno
19997
    FROM package_dependencies pd,
19998
      release_content rc
19999
    WHERE pd.pv_id = deprecate_rec.pv_id
20000
     AND rc.pv_id = pd.dpv_id
20001
     AND rc.rtag_id = nnrtag_id
20002
     AND rc.deprecated_state IN(6,   7);
20003
 
20004
    IF recno = 0 THEN
20005
 
20006
      UPDATE release_content
20007
      SET pkg_id = NULL, deprecated_state = NULL
20008
      WHERE pv_id = deprecate_rec.pv_id
20009
       AND rtag_id = nnrtag_id;
20010
 
20011
    END IF;
20012
 
20013
    FETCH deprecate_cur
20014
    INTO deprecate_rec;
20015
  END LOOP;
20016
 
20017
END;
20018
/
20019
--------------------------------------------------------
20020
--  DDL for Procedure IGNORE_DEPENDENCY_WARNINGS
20021
--------------------------------------------------------
20022
 
20023
  CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,
20024
                                                         nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,
20025
                                                         sIgnoreIdList IN VARCHAR2,
20026
                                                         bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,
20027
                                                         nUserId IN NUMBER DEFAULT NULL ) IS
20028
/* ---------------------------------------------------------------------------
20029
    Updates the ignore warnings table - this is really two functions in one.
20030
 
20031
    1) One function updates the table based on a list of dependent PV_IDs and a parent PV_ID
20032
       and is called from the RM website's SetIgnoreWarnings() function after a user changes
20033
       the ignore warnings checkboxes and submits the form.
20034
       This can (at time of writing this) only be done within releases that are not build
20035
       daemon enabled. The ignore warnings feature is a feature we would like to see the end
20036
       of in an ideal world.
20037
       The SetIgnoreWarnings() website function now calls Touch_Release so there is no need to
20038
       do so in this stored procedure, thereby making this stored procedure much more precise in
20039
       that it only updates the ignore_warnings table (action log table too although that is just
20040
       a log and doesn't affect any subsequent business rules behaviour) and it cares nothing
20041
       about website presentation layer states, etc.
20042
 
20043
    2) The other function updates the table for out of sync dependencies that have in fact
20044
       been satisfied by patches made to some other product in the release.
20045
       This seems to be a seldom used feature in current projects.
20046
       It is probably the most often taken path through this function given that it occurs when
20047
       this function is called from Rebuild_Environment, and that is called in many circumstances
20048
       from the RM website whenever the seems to be a possibility that the state of a package
20049
       in a release might have changed and therefore affects the state of other packages in
20050
       that same release.
20051
 
20052
    Parameter Usage:
20053
                        when called from    | when called from
20054
                        Rebuild_Environment | SetIgnoreWarnings()
20055
                        stored procedure.   | in the Website
20056
      --------------------------------------+----------------------------
20057
      nRtagId           RTAG_ID             | RTAG_ID
20058
      nPvId             NULL                | PV_ID
20059
      sIgnoreIdList     NULL                | list of dependent PV_ID's
20060
      bDoPatchIgnore    TRUE                | FALSE
20061
      nUserId           NULL                | current user ID
20062
   --------------------------------------------------------------------------- */
20063
 
20064
oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
20065
ReleaseLocation VARCHAR2(4000);
20066
ActionTypeId NUMBER;
20067
 
20068
BEGIN
20069
 
20070
   IF (NOT bDoPatchIgnore) THEN
20071
      /* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website
20072
      */
20073
      oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );
20074
 
20075
 
20076
      /* Log Action */
20077
      -- Get Release Location
20078
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
20079
        FROM PROJECTS proj,
20080
             RELEASE_TAGS rt
20081
       WHERE rt.PROJ_ID = proj.PROJ_ID
20082
         AND rt.RTAG_ID = nRtagId;
20083
 
20084
      -- Get Action Type Id for IGNORE_ON
20085
      SELECT act.ACTTYPE_ID INTO ActionTypeId
20086
        FROM ACTION_TYPE act
20087
       WHERE act.NAME = 'ignore_on';
20088
 
20089
      -- Get Ignored (Current MINUS Old)
20090
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
20091
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
20092
        FROM (
20093
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
20094
                FROM PACKAGE_VERSIONS pv
20095
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
20096
              MINUS
20097
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
20098
                FROM IGNORE_WARNINGS igw
20099
               WHERE igw.RTAG_ID = nRtagId
20100
                 AND igw.PV_ID = nPvId
20101
             ) qry,
20102
             PACKAGE_VERSIONS pv,
20103
             PACKAGES pkg,
20104
             RELEASE_CONTENT rc,
20105
             PACKAGE_VERSIONS rpv
20106
       WHERE pv.PKG_ID = pkg.PKG_ID
20107
         AND rc.RTAG_ID = nRtagId
20108
         AND rc.PV_ID = rpv.PV_ID
20109
         AND rpv.PKG_ID = pv.PKG_ID
20110
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
20111
         AND qry.DPV_ID = pv.PV_ID;
20112
 
20113
 
20114
      -- Get Action Type Id for IGNORE_OFF
20115
      SELECT act.ACTTYPE_ID INTO ActionTypeId
20116
        FROM ACTION_TYPE act
20117
       WHERE act.NAME = 'ignore_off';
20118
 
20119
      -- Get UnIgnored (Old MINUS Current)
20120
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
20121
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
20122
        FROM (
20123
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
20124
                FROM IGNORE_WARNINGS igw
20125
               WHERE igw.RTAG_ID = nRtagId
20126
                 AND igw.PV_ID = nPvId
20127
              MINUS
20128
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
20129
                FROM PACKAGE_VERSIONS pv
20130
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
20131
             ) qry,
20132
             PACKAGE_VERSIONS pv,
20133
             PACKAGES pkg,
20134
             RELEASE_CONTENT rc,
20135
             PACKAGE_VERSIONS rpv
20136
       WHERE pv.PKG_ID = pkg.PKG_ID
20137
         AND rc.RTAG_ID = nRtagId
20138
         AND rc.PV_ID = rpv.PV_ID
20139
         AND rpv.PKG_ID = pv.PKG_ID
20140
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
20141
         AND qry.DPV_ID = pv.PV_ID;
20142
 
20143
 
20144
      -- Delete Current Ignore Warnings
20145
      DELETE
20146
        FROM IGNORE_WARNINGS igw
20147
       WHERE igw.RTAG_ID = nRtagId
20148
         AND igw.PV_ID = nPvId
20149
         AND igw.IS_PATCH_IGNORE IS NULL;
20150
 
20151
 
20152
      IF (oIgnoreIdCollector.COUNT > 0) THEN
20153
         -- Insert Ignore Warnings
20154
         INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )
20155
         SELECT nRtagId,
20156
                nPvId,
20157
                pv.PV_ID AS DPV_ID
20158
           FROM PACKAGE_VERSIONS pv
20159
          WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
20160
      END IF;
20161
 
20162
   ELSE
20163
      /* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */
20164
 
20165
      -- Delete Current Patch Ignore Warnings
20166
      DELETE
20167
        FROM IGNORE_WARNINGS igw
20168
       WHERE igw.RTAG_ID = nRtagId
20169
         AND igw.IS_PATCH_IGNORE = 'Y';
20170
 
20171
 
20172
      -- Delete Manual Ignores that need to be Patch Ignores
20173
      DELETE
20174
        FROM IGNORE_WARNINGS igw
20175
       WHERE ( RTAG_ID, PV_ID, DPV_ID ) IN
20176
             (
20177
              SELECT DISTINCT
20178
                     nRtagId,
20179
                     err.PV_ID,
20180
                     err.ERR_DPV AS DPV_ID
20181
               FROM  (
20182
                      /* Full Release Contents used for reference*/
20183
                      SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
20184
                        FROM release_content rel, package_versions rpv
20185
                       WHERE rel.pv_id = rpv.pv_id
20186
                         AND rtag_id = nRtagId
20187
                     ) frc,
20188
                     (
20189
                      /* DPV_IDs not fount in release*/
20190
                      SELECT dep.pv_id, dep.dpv_id AS err_dpv
20191
                        FROM package_dependencies dep
20192
                       WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20193
                         AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20194
                     ) err,
20195
                     (
20196
                      SELECT DISTINCT pp.PV_ID, dep.DPV_ID
20197
                        FROM PACKAGE_PATCHES pp,
20198
                             PACKAGE_DEPENDENCIES dep,
20199
                             RELEASE_CONTENT rc
20200
                       WHERE rc.RTAG_ID = nRtagId
20201
                         AND rc.PV_ID = pp.PV_ID
20202
                         AND dep.PV_ID = pp.PATCH_ID
20203
                     ) pp,
20204
                     package_versions errpkg,
20205
                     package_versions errpv
20206
               WHERE err.err_dpv = errpv.pv_id
20207
                 AND errpv.pkg_id = frc.pkg_id(+)
20208
                 AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20209
                 AND err.pv_id = errpkg.pv_id
20210
                 AND err.PV_ID = pp.PV_ID
20211
                 AND frc.PV_ID = pp.DPV_ID
20212
             );
20213
 
20214
      /*
20215
      ---------------------------------------------------
20216
      --  Make sure that select statement above and below are same
20217
      ---------------------------------------------------
20218
      */
20219
 
20220
      -- Insert Patch Ignores
20221
      INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )
20222
      SELECT DISTINCT
20223
             nRtagId,
20224
             err.PV_ID,
20225
             err.ERR_DPV AS DPV_ID,
20226
             'Y'
20227
        FROM (
20228
              /* Full Release Contents used for reference*/
20229
              SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
20230
                FROM release_content rel, package_versions rpv
20231
               WHERE rel.pv_id = rpv.pv_id
20232
                 AND rtag_id = nRtagId
20233
             ) frc,
20234
             (
20235
               /* DPV_IDs not fount in release*/
20236
               SELECT dep.pv_id, dep.dpv_id AS err_dpv
20237
                 FROM package_dependencies dep
20238
                WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20239
                  AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
20240
             ) err,
20241
             (
20242
              SELECT DISTINCT pp.PV_ID, dep.DPV_ID
20243
                FROM PACKAGE_PATCHES pp,
20244
                     PACKAGE_DEPENDENCIES dep,
20245
                     RELEASE_CONTENT rc
20246
               WHERE rc.RTAG_ID = nRtagId
20247
                 AND rc.PV_ID = pp.PV_ID
20248
                 AND dep.PV_ID = pp.PATCH_ID
20249
             ) pp,
20250
             package_versions errpkg,
20251
             package_versions errpv
20252
       WHERE err.err_dpv = errpv.pv_id
20253
         AND errpv.pkg_id = frc.pkg_id(+)
20254
         AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20255
         AND err.pv_id = errpkg.pv_id
20256
         AND err.PV_ID = pp.PV_ID
20257
         AND frc.PV_ID = pp.DPV_ID;
20258
 
20259
    END IF;
20260
 
20261
END Ignore_Dependency_Warnings;
20262
/
20263
--------------------------------------------------------
20264
--  DDL for Procedure UNDEPRECATE_PACKAGE
20265
--------------------------------------------------------
20266
 
20267
  CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20268
	   	  		  								 nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
20269
	   	  		  							   	 nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
20270
											   	 nUserId IN NUMBER) IS
20271
 
20272
ext VARCHAR2(50);
20273
PvIdList VARCHAR2(32767);
20274
nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
20275
PvId NUMBER;
20276
sComments VARCHAR2(32767);
20277
 
20278
BEGIN
20279
 
20280
 
20281
 
20282
	--Extract the package extension
20283
	SELECT V_EXT into ext 
20284
	FROM PACKAGE_VERSIONS 
20285
	WHERE PV_ID = nPvId;
20286
 
20287
	--SELECT COMMENTS into sComments 
20288
	--FROM DEPRECATED_PACKAGES
20289
	--WHERE RTAG_ID = nRtagId
20290
	--AND V_EXT = ext
20291
	--AND PKG_ID = nPkgId;
20292
 
20293
	--SELECT PV_ID into PvIdList FROM
20294
	--RELEASE_CONTENT WHERE RTAG_ID = nRtagId
20295
	--AND PKG_STATE = 6
20296
	--AND PV_ID NOT IN nPvId;
20297
 
20298
 
20299
	IF ext IS NOT NULL THEN
20300
       -- Undeprecate Package
20301
       DELETE FROM DEPRECATED_PACKAGES 
20302
	   WHERE RTAG_ID = nRtagId 
20303
	   AND PKG_ID = nPkgId
20304
	   AND V_EXT = ext;	
20305
 
20306
		UPDATE RELEASE_CONTENT 
20307
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20308
		WHERE RTAG_ID = nRtagId
20309
		AND PV_ID IN (SELECT PV.PV_ID 
20310
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20311
					  WHERE PKG.PKG_ID = PV.PKG_ID
20312
					  AND PKG.PKG_ID = nPkgId
20313
					  AND PV.V_EXT = ext
20314
					  UNION
20315
					  SELECT DISTINCT
20316
	 	 		  	 		   qry.PV_ID
20317
							        FROM (
20318
									 	  SELECT dep.*,
20319
										  LEVEL AS LEVEL_NUM
20320
										  FROM PACKAGE_DEPENDENCIES dep
20321
	 								START WITH dep.DPV_ID IN ( nPvId )
20322
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20323
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20324
	 								) qry,
20325
									PACKAGES pkg,
20326
									PACKAGE_VERSIONS pv,
20327
									RELEASE_CONTENT rc
20328
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20329
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20330
 
20331
					 );	 
20332
 
20333
	ELSE
20334
       -- Undeprecate Package
20335
       DELETE FROM DEPRECATED_PACKAGES 
20336
	   WHERE RTAG_ID = nRtagId 
20337
	   AND PKG_ID = nPkgId
20338
	   AND V_EXT IS NULL;	
20339
 
20340
		UPDATE RELEASE_CONTENT 
20341
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20342
		WHERE RTAG_ID = nRtagId
20343
		AND PV_ID IN (SELECT PV.PV_ID 
20344
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20345
					  WHERE PKG.PKG_ID = PV.PKG_ID
20346
					  AND PKG.PKG_ID = nPkgId
20347
					  AND PV.V_EXT IS NULL
20348
					  UNION
20349
					  SELECT DISTINCT
20350
	 	 		  	 		   qry.PV_ID
20351
							        FROM (
20352
									 	  SELECT dep.*,
20353
										  LEVEL AS LEVEL_NUM
20354
										  FROM PACKAGE_DEPENDENCIES dep
20355
	 								START WITH dep.DPV_ID IN ( nPvId )
20356
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20357
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20358
	 								) qry,
20359
									PACKAGES pkg,
20360
									PACKAGE_VERSIONS pv,
20361
									RELEASE_CONTENT rc
20362
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20363
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20364
 
20365
					 );	 	   
20366
 
20367
	END IF;
20368
 
20369
	--IF PvIdList IS NOT NULL THEN
20370
 
20371
	 --  nIdCollector := IN_LIST_NUMBER ( PvIdList );
20372
 
20373
	 --  FOR i IN 1..nIdCollector.COUNT
20374
	 --  LOOP
20375
	--	   PvId := nIdCollector(i);
20376
 
20377
 
20378
 
20379
	--		Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );
20380
	--		END LOOP;
20381
	--END IF;
20382
 
20383
	Rebuild_environment(nRtagId);			 
20384
 
20385
 
20386
 
20387
END Undeprecate_Package;
20388
/
20389
--------------------------------------------------------
20390
--  DDL for Procedure REMOVE_PACKAGE_INTEREST
20391
--------------------------------------------------------
20392
 
20393
  CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
20394
	   	  		  								  	nPkgId IN PACKAGES.PKG_ID%TYPE,
20395
												  	nUserId IN NUMBER
20396
	   	  		  									) IS
20397
 
20398
/******************************************************************************
20399
   NAME:       REMOVE_PACKAGE_INTEREST
20400
   PURPOSE:    To remove interest in a given package per project
20401
 
20402
   REVISIONS:
20403
   Ver        Date        Author           Description
20404
   ---------  ----------  ---------------  ------------------------------------
20405
   1.0        12/05/2006  Rupesh Solanki      1. Created this procedure.
20406
 
20407
   NOTES:
20408
 
20409
   Automatically available Auto Replace Keywords:
20410
      Object Name:     REMOVE_PACKAGE_INTEREST
20411
      Sysdate:         12/05/2006
20412
      Date and Time:   12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AM
20413
      Username:         (set in TOAD Options, Procedure Editor)
20414
      Table Name:       (set in the "New PL/SQL Object" dialog)
20415
 
20416
******************************************************************************/
20417
BEGIN
20418
 
20419
	 --Delete from PACKAGE_INTEREST
20420
	 DELETE FROM PACKAGE_INTEREST
20421
	 WHERE PROJ_ID = nProjId
20422
	 AND PKG_ID = nPkgId
20423
	 AND USER_ID = nUserId;
20424
 
20425
END REMOVE_PACKAGE_INTEREST;
20426
/
20427
--------------------------------------------------------
20428
--  DDL for Procedure RELEASE_MANAGER_MAILOUT
20429
--------------------------------------------------------
20430
 
20431
  CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (
20432
  sender      IN VARCHAR2,
20433
  recipient   IN VARCHAR2,
20434
  ccrecipient IN VARCHAR2,
20435
  subject     IN VARCHAR2,
20436
  message     IN VARCHAR2
20437
  ) IS
20438
 
20439
  crlf VARCHAR2(2):= UTL_TCP.CRLF;
20440
  connection utl_smtp.connection;
20441
  mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';
20442
  header VARCHAR2(1000);
20443
 
20444
BEGIN
20445
 
20446
  --
20447
  -- Start the connection.
20448
  --
20449
  connection := utl_smtp.open_connection(mailhost,25);
20450
 
20451
  header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
20452
     'From: '||sender||''||crlf||
20453
  'Subject: '||subject||crlf||
20454
       'To: '||recipient||crlf||
20455
       'CC: '||ccrecipient;
20456
 
20457
  --
20458
  -- Handshake with the SMTP server
20459
  --
20460
  utl_smtp.helo(connection, mailhost);
20461
  utl_smtp.mail(connection, sender);
20462
  utl_smtp.rcpt(connection, recipient);
20463
  utl_smtp.rcpt(connection, ccrecipient);
20464
  utl_smtp.open_data(connection);
20465
  --
20466
  -- Write the header
20467
  --
20468
  utl_smtp.write_data(connection, header);
20469
  --
20470
  -- The crlf is required to distinguish that what comes next is not simply part of the header..
20471
  --
20472
  utl_smtp.write_data(connection, crlf ||message);
20473
  utl_smtp.close_data(connection);
20474
  utl_smtp.quit(connection);
20475
 
20476
EXCEPTION
20477
  WHEN UTL_SMTP.INVALID_OPERATION THEN
20478
    dbms_output.put_line(' Invalid Operation in SMTP transaction.');
20479
  WHEN UTL_SMTP.TRANSIENT_ERROR THEN
20480
    dbms_output.put_line(' Temporary problems with sending email - try again later.');
20481
  WHEN UTL_SMTP.PERMANENT_ERROR THEN
20482
    dbms_output.put_line(' Errors in code for SMTP transaction.');
20483
 
20484
END RELEASE_MANAGER_MAILOUT;
20485
/
20486
--------------------------------------------------------
20487
--  DDL for Procedure SET_PACKAGE_BUILD_ENV
20488
--------------------------------------------------------
20489
 
20490
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
20491
	   	  		  								  	sBuildEnvIdList IN VARCHAR2 ) IS
20492
/* ---------------------------------------------------------------------------
20493
    Last Modified: Rupesh Solanki
20494
	Version: 3.0.1
20495
   --------------------------------------------------------------------------- */
20496
 
20497
 
20498
BEGIN
20499
 
20500
   -- Delete Current Build Env settings
20501
   DELETE FROM PACKAGE_BUILD_ENV
20502
   WHERE pv_id = nPvId;
20503
 
20504
   -- Delet Current Package Build Info Settings
20505
   DELETE FROM PACKAGE_BUILD_INFO
20506
   WHERE pv_id = nPvId;
20507
 
20508
   -- Reset flag to N
20509
   UPDATE PACKAGE_VERSIONS SET
20510
	   IS_BUILD_ENV_REQUIRED = 'N'
20511
   WHERE PV_ID = nPvId;
20512
 
20513
 
20514
   -- Set new Build Env
20515
   IF NOT sBuildEnvIdList IS NULL THEN
20516
   	  -- Insert into PACKAGE_BUILD_ENV
20517
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
20518
	  SELECT nPvId AS PV_ID,
20519
	  		 be.BE_ID
20520
	    FROM BUILD_ENVIRONMENTS be
20521
	   WHERE be.BE_ID IN (
20522
	   		 		  	   SELECT *
20523
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20524
	   		 		  	 );
20525
 
20526
   	  -- Insert into PACKAGE_BUILD_INFO
20527
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
20528
	  SELECT nPvId AS PV_ID,
20529
	  		 be.BM_ID
20530
	    FROM BUILD_MACHINES be
20531
	   WHERE be.BM_ID IN (
20532
	   		 		  	   SELECT *
20533
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20534
	   		 		  	 );						 
20535
 
20536
	   -- Set flag to Y
20537
	   UPDATE PACKAGE_VERSIONS SET
20538
		   IS_BUILD_ENV_REQUIRED = 'Y'
20539
	   WHERE PV_ID = nPvId;
20540
 
20541
   END IF;
20542
 
20543
 
20544
END Set_Package_Build_Env;
20545
/
20546
--------------------------------------------------------
20547
--  DDL for Procedure SHIFT_INSTALL_ORDER
20548
--------------------------------------------------------
20549
 
20550
  CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
20551
												  nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
20552
                                                  nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS
20553
/* ---------------------------------------------------------------------------
20554
    Version: 3.0
20555
   --------------------------------------------------------------------------- */
20556
 
20557
currInstallOrder NUMBER;
20558
FromInstallOrder NUMBER;
20559
 
20560
BEGIN
20561
 
20562
	 -- Get Current Install Order
20563
     SELECT pp.INSTALL_ORDER INTO currInstallOrder
20564
       FROM PACKAGE_PATCHES pp
20565
      WHERE pp.PV_ID = nPvId
20566
        AND pp.PATCH_ID = nPatchId;
20567
 
20568
 
20569
	 IF currInstallOrder > nToInstallOrder
20570
	 THEN
20571
 
20572
		FromInstallOrder := nToInstallOrder;
20573
 
20574
	    -- Shift others Up
20575
		UPDATE PACKAGE_PATCHES pp SET
20576
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER + 1
20577
		 WHERE pp.PV_ID = nPvId
20578
           AND pp.PATCH_ID != nPatchId
20579
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  currInstallOrder - 1;
20580
 
20581
 
20582
	 ELSIF currInstallOrder < nToInstallOrder
20583
	 THEN
20584
 
20585
		FromInstallOrder := currInstallOrder + 1;
20586
 
20587
		-- Shift others Down
20588
        UPDATE PACKAGE_PATCHES pp SET
20589
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER - 1
20590
		 WHERE pp.PV_ID = nPvId
20591
           AND pp.PATCH_ID != nPatchId
20592
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  nToInstallOrder;
20593
 
20594
	 END IF;
20595
 
20596
 
20597
	 -- Move Patch to new install order
20598
     UPDATE PACKAGE_PATCHES pp SET
20599
		    pp.INSTALL_ORDER = nToInstallOrder
20600
	  WHERE pp.PV_ID = nPvId
20601
	    AND pp.PATCH_ID = nPatchId;
20602
 
20603
 
20604
END Shift_Install_Order;
20605
/
20606
--------------------------------------------------------
20607
--  DDL for Procedure NEW_PACKAGE_NAME
20608
--------------------------------------------------------
20609
 
20610
  CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
20611
                                               retPKG_ID OUT NUMBER ) IS
20612
/* ---------------------------------------------------------------------------
20613
    Version: 3.0.0
20614
   --------------------------------------------------------------------------- */
20615
 
20616
    CURSOR packages_cur IS
20617
        SELECT pkg.pkg_id
20618
          FROM packages pkg
20619
         WHERE pkg.pkg_name = SSpkg_name;
20620
    packages_rec packages_cur%ROWTYPE;
20621
 
20622
 
20623
BEGIN
20624
 
20625
    /* ---------------------------------------------------- */
20626
    /* Find if package name exists                          */
20627
    /* ---------------------------------------------------- */
20628
 
20629
    OPEN packages_cur;
20630
    FETCH packages_cur INTO packages_rec;
20631
 
20632
    IF packages_cur%NOTFOUND
20633
    THEN
20634
        -- Create new pkg_name --
20635
        SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;
20636
 
20637
        INSERT INTO packages ( pkg_id, pkg_name )
20638
        VALUES ( retPKG_ID, SSpkg_name );
20639
 
20640
    ELSE
20641
        retPKG_ID := packages_rec.pkg_id;
20642
 
20643
    END IF;
20644
 
20645
 
20646
    CLOSE packages_cur;
20647
 
20648
END New_Package_Name;
20649
/
20650
--------------------------------------------------------
20651
--  DDL for Procedure REMOVE_RUNTIME
20652
--------------------------------------------------------
20653
 
20654
  CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20655
											 nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,
20656
                                             nUserId IN NUMBER ) IS
20657
/* ---------------------------------------------------------------------------
20658
    Version: 3.0
20659
   --------------------------------------------------------------------------- */
20660
 
20661
   RuntimeDependency VARCHAR2(4000);
20662
 
20663
BEGIN
20664
 
20665
	-- Get Runtime dependency
20666
    SELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION  INTO RuntimeDependency
20667
	  FROM RUNTIME_DEPENDENCIES rtd,
20668
	  	   PACKAGES pkg,
20669
	       PACKAGE_VERSIONS pv
20670
	 WHERE rtd.PV_ID = nPvId
20671
	   AND pv.PKG_ID = pkg.PKG_ID
20672
	   AND rtd.RTD_ID = pv.PV_ID
20673
	   AND rtd.RTD_ID = nRuntimeId;
20674
 
20675
 
20676
	-- Delete Document
20677
    DELETE
20678
      FROM RUNTIME_DEPENDENCIES rtd
20679
     WHERE rtd.PV_ID = nPvId
20680
       AND rtd.RTD_ID = nRuntimeId;
20681
 
20682
 
20683
    /* LOG ACTION */
20684
   	Log_Action ( nPvId, 'runtime_remove', nUserId,
20685
   			     'Runtime package: '|| RuntimeDependency );
20686
 
20687
 
20688
END Remove_Runtime;
20689
/
20690
--------------------------------------------------------
20691
--  DDL for Procedure CHANGE_PACKAGE_STATE
20692
--------------------------------------------------------
20693
 
20694
  CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20695
											 nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
20696
/* ---------------------------------------------------------------------------
20697
    Version: 4.0
20698
   --------------------------------------------------------------------------- */
20699
 
20700
BEGIN
20701
 
20702
    -- Unlock Package
20703
    UPDATE RELEASE_CONTENT rc SET
20704
    	rc.PKG_STATE = 0
20705
    WHERE rc.PV_ID = nPvId
20706
	AND rc.RTAG_ID = nRtagId;
20707
 
20708
    /* LOG ACTION */
20709
   /*	Log_Action ( nPvId, 'unlock_package', nUserId );*/
20710
 
20711
END Change_Package_State;
20712
/