Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1374 dpurdie 1
--------------------------------------------------------
2
--  File created - Thursday-September-06-2012   
3
--------------------------------------------------------
1373 dpurdie 4
 
1374 dpurdie 5
--------------------------------------------------------
6
--  DDL for Function ORA_SYSDATE
7
--------------------------------------------------------
8
 
1373 dpurdie 9
  CREATE OR REPLACE FUNCTION "ORA_SYSDATE" 
10
RETURN DATE
11
IS
12
/* ---------------------------------------------------------------------------
13
    Version: 3.0.0
14
   --------------------------------------------------------------------------- */
15
BEGIN
16
 
17
    RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY' ),'DD-MON-YYYY' );
18
END ORA_SYSDATE;
1374 dpurdie 19
/
20
--------------------------------------------------------
21
--  DDL for Function GET_AUTOMATED_LABEL
22
--------------------------------------------------------
1373 dpurdie 23
 
24
  CREATE OR REPLACE FUNCTION "GET_AUTOMATED_LABEL" ( nPvId IN NUMBER ) RETURN VARCHAR2 IS
25
 
26
/* ---------------------------------------------------------------------------
27
    Version: 3.0.0
28
   --------------------------------------------------------------------------- */
29
 
30
	sPkgName VARCHAR2(4000);
31
	sVext VARCHAR2(4000);
32
 
33
BEGIN
34
 
35
	-- Get package details
36
	SELECT pkg.PKG_NAME, pv.V_EXT INTO sPkgName, sVext
37
	  FROM PACKAGE_VERSIONS pv,
38
	  	   PACKAGES pkg
39
	 WHERE pv.PKG_ID = pkg.PKG_ID
40
	   AND pv.PV_ID = nPvId;
41
 
42
 
43
	-- Generate Label for automated build
44
	RETURN UPPER( sPkgName ||'.'|| nPvId || sVext ||'.WIP' );
45
 
46
END GET_AUTOMATED_LABEL;
1374 dpurdie 47
/
48
--------------------------------------------------------
49
--  DDL for Function CAN_EDIT_PKG_IN_PROJECT
50
--------------------------------------------------------
1373 dpurdie 51
 
52
  CREATE OR REPLACE FUNCTION "CAN_EDIT_PKG_IN_PROJECT" ( nPvId IN NUMBER, nRtagId IN NUMBER ) RETURN NUMBER IS
53
 
54
/* ---------------------------------------------------------------------------
55
    Version: 3.0.0
56
   --------------------------------------------------------------------------- */
57
 
58
    VExt PACKAGE_VERSIONS.V_EXT%TYPE;
59
	ProjId NUMBER;
60
	RowCount NUMBER;
61
	cReleaseMode CHAR(1);
62
 
63
BEGIN
64
 
65
	--RETURN 1;
66
 
67
 
68
	/*--------------- Business Rules Here -------------------*/
69
	IF (nRtagId IS NULL)  OR  (nRtagId < 1)THEN
70
		RETURN 0;
71
	END IF;
72
	/*-------------------------------------------------------*/
73
 
74
 
75
 
76
 
77
 
78
 
79
	/*-- First Check. See if package is used through release reference --*/
80
	SELECT COUNT(rc.PV_ID) INTO RowCount
81
	  FROM (
82
	  		SELECT rl.REF_RTAG_ID
83
			  FROM RELEASE_LINKS rl
84
			 WHERE rl.RTAG_ID = nRtagId
85
	  		) rl,
86
			RELEASE_CONTENT rc
87
	  WHERE rc.RTAG_ID = rl.REF_RTAG_ID
88
	    AND rc.PV_ID = nPvId;			
89
 
90
 
91
	-- Decide if package can be edited  
92
	IF RowCount > 0 THEN
93
		-- Package is referenced from other release, hence cannot be edited
94
		RETURN 0;	
95
 
96
	ELSE
97
 
98
		-- Check is only done for releases in restrictive mode
99
		SELECT rt.OFFICIAL INTO cReleaseMode
100
		  FROM RELEASE_TAGS rt
101
		 WHERE rt.RTAG_ID = nRtagId;
102
 
103
		IF cReleaseMode = 'N'OR cReleaseMode = 'R' THEN
104
			-- Do not do any firther checking,
105
			-- Package is editable here
106
			RETURN 1;
107
		END IF;	
108
 
109
	END IF;
110
 
111
 
112
 
113
 
114
	/*-- Further checking --*/
115
	-- Get proj_id
116
	SELECT rt.PROJ_ID  INTO  ProjId
117
	  FROM RELEASE_TAGS rt
118
	 WHERE rt.RTAG_ID = nRtagId;
119
 
120
 
121
 
122
	BEGIN
123
 
124
		-- Get v_ext
125
		SELECT pv.V_EXT  INTO  Vext
126
		  FROM PACKAGE_VERSIONS pv
127
		 WHERE pv.PV_ID = nPvId;  
128
 
129
		EXCEPTION
130
	    	WHEN NO_DATA_FOUND THEN
131
	       		Vext := NULL;
132
 
133
	END;	 
134
 
135
 
136
	--Temp Hack for Step Project
137
	IF ProjId != 281 THEN
138
		-- Find if package can be edited in this project
139
			SELECT COUNT(pe.EXT_NAME) INTO RowCount
140
	 		FROM PROJECT_EXTENTIONS pe
141
			WHERE pe.PROJ_ID != ProjId  
142
	  		AND pe.EXT_NAME = VExt;
143
	END IF;		
144
 
145
 
146
	-- Decide if package can be edited  
147
	IF RowCount > 0 THEN
148
		-- Package extension is found in other projects, hece NOT EDITABLE
149
		RETURN 0;
150
	ELSE
151
		RETURN 1;	
152
	END IF;
153
 
154
 
155
END CAN_EDIT_PKG_IN_PROJECT;
1374 dpurdie 156
/
157
--------------------------------------------------------
158
--  DDL for Function GET_PV_FIRST_MODIFIED
159
--------------------------------------------------------
1373 dpurdie 160
 
161
  CREATE OR REPLACE FUNCTION "GET_PV_FIRST_MODIFIED" (v_pv_id NUMBER) RETURN DATE IS
162
  ret DATE;
163
BEGIN
164
  SELECT q.modified_stamp
165
    INTO ret
166
    FROM (
167
            SELECT level AS lvl, pvc.pv_id, pvc.modified_stamp, pvc.change_type
168
              FROM package_versions pvc
169
              START WITH pvc.pv_id = v_pv_id
170
            CONNECT BY NOCYCLE pvc.pv_id = PRIOR pvc.last_pv_id
171
          ) Q
172
  WHERE q.change_type IS NOT NULL
173
    AND rownum = 1
174
  ORDER BY q.lvl;
175
 
176
  RETURN ret;
177
END;
1374 dpurdie 178
/
179
--------------------------------------------------------
180
--  DDL for Function GET_BUILD_NUMBER
181
--------------------------------------------------------
1373 dpurdie 182
 
183
  CREATE OR REPLACE FUNCTION "GET_BUILD_NUMBER" (s_version IN VARCHAR2) RETURN VARCHAR2
184
IS
185
/* ---------------------------------------------------------------------------
186
    Version: 1.0.0
187
   --------------------------------------------------------------------------- */
188
BEGIN
189
    IF is_number(s_version) AND LENGTH(s_version) > 3
190
    THEN
191
        RETURN MOD(TO_NUMBER(s_version), 1000);
192
    ELSE
193
        RETURN 0;
194
    END IF;
195
END get_build_number;
1374 dpurdie 196
/
197
--------------------------------------------------------
198
--  DDL for Function ORA_SYSDATETIME
199
--------------------------------------------------------
1373 dpurdie 200
 
201
  CREATE OR REPLACE FUNCTION "ORA_SYSDATETIME" 
202
RETURN DATE
203
IS
204
/* ---------------------------------------------------------------------------
205
    Version: 3.0.0
206
   --------------------------------------------------------------------------- */
207
BEGIN
208
 
209
    RETURN TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' );
210
END ORA_SYSDATETIME;
1374 dpurdie 211
/
212
--------------------------------------------------------
213
--  DDL for Function IS_VERSION_EXTENSION
214
--------------------------------------------------------
1373 dpurdie 215
 
216
  CREATE OR REPLACE FUNCTION "IS_VERSION_EXTENSION" (SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE) RETURN BOOLEAN
217
IS
218
/* ---------------------------------------------------------------------------
219
    Version: 3.0.0
220
   --------------------------------------------------------------------------- */
221
 
222
BEGIN
223
    IF LENGTH ( TRIM (TRANSLATE (SSV_EXT, '.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',' ') ) ) > 0
224
    THEN
225
        RETURN FALSE;
226
    ELSE
227
        RETURN TRUE;
228
    END IF;
229
 
230
END IS_VERSION_EXTENSION;
1374 dpurdie 231
/
232
--------------------------------------------------------
233
--  DDL for Function IS_NUMBER
234
--------------------------------------------------------
1373 dpurdie 235
 
236
  CREATE OR REPLACE FUNCTION "IS_NUMBER" (p_val IN VARCHAR2) RETURN BOOLEAN
237
IS
238
   temp_num NUMBER;
239
/* ---------------------------------------------------------------------------
240
    Version: 1.0.0
241
   --------------------------------------------------------------------------- */
242
BEGIN
243
   temp_num := TO_NUMBER(p_val);
244
   RETURN true;
245
EXCEPTION WHEN VALUE_ERROR THEN
246
   RETURN false;
247
END IS_NUMBER;
1374 dpurdie 248
/
249
--------------------------------------------------------
250
--  DDL for Function GET_PATCH_VERSION
251
--------------------------------------------------------
1373 dpurdie 252
 
253
  CREATE OR REPLACE FUNCTION "GET_PATCH_VERSION" (s_version IN VARCHAR2) RETURN VARCHAR2
254
IS
255
/* ---------------------------------------------------------------------------
256
    Version: 1.0.0
257
   --------------------------------------------------------------------------- */
258
BEGIN
259
    IF is_number(s_version) AND LENGTH(s_version) > 3
260
    THEN
261
        RETURN FLOOR(TO_NUMBER(s_version) / 1000);
262
    ELSE
263
        RETURN s_version;
264
    END IF;
265
END get_patch_version;
1374 dpurdie 266
/
267
--------------------------------------------------------
268
--  DDL for Function IN_LIST_NUMBER2
269
--------------------------------------------------------
1373 dpurdie 270
 
271
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER2" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS
272
 
273
/* ---------------------------------------------------------------------------
274
    Version: 3.0.0
275
   --------------------------------------------------------------------------- */
276
 
277
    sync_rtags		   RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
278
	pos				   NUMBER;
279
	in_list			   VARCHAR2(32767) := sInList || ',';
280
 
281
BEGIN
282
 
283
	IF NOT sInList IS NULL
284
	THEN
285
		LOOP
286
	        EXIT WHEN in_list IS NULL;
287
	        pos := INSTR ( in_list, ',' );
288
	        sync_rtags.extend;
289
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
290
	        in_list := SUBSTR ( in_list, pos+1 );
291
		END LOOP;
292
	END IF;
293
 
294
	RETURN sync_rtags;
295
END IN_LIST_NUMBER2;
1374 dpurdie 296
/
297
--------------------------------------------------------
298
--  DDL for Function DT_ADDUSEROBJECT
299
--------------------------------------------------------
1373 dpurdie 300
 
301
  CREATE OR REPLACE FUNCTION "DT_ADDUSEROBJECT" RETURN NUMBER IS NEWOBJECTID NUMBER; BEGIN /* GET THE NEXT VALUE FROM THE SEQUENCE FOR THE OBJECT ID */ SELECT MICROSOFTSEQDTPROPERTIES.NEXTVAL INTO NEWOBJECTID FROM DUAL; /* ADD THE PARENT NODE FOR THE NEW OBJECT */ INSERT INTO MICROSOFTDTPROPERTIES ( ID, OBJECTID, PROPERTY ) VALUES ( NEWOBJECTID, NEWOBJECTID, 'DtgSchemaOBJECT' ); RETURN( NEWOBJECTID ); END DT_ADDUSEROBJECT;
1374 dpurdie 302
/
303
--------------------------------------------------------
304
--  DDL for Function IN_LIST_NUMBER
305
--------------------------------------------------------
1373 dpurdie 306
 
307
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER" ( sInList IN VARCHAR2 ) RETURN RELMGR_NUMBER_TAB_t IS
308
 
309
/* ---------------------------------------------------------------------------
310
    Version: 3.0.0
311
   --------------------------------------------------------------------------- */
312
 
313
    sync_rtags		   RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
314
	pos				   NUMBER;
315
	in_list			   VARCHAR2(4000) := sInList || ',';
316
 
317
BEGIN
318
 
319
	IF NOT sInList IS NULL
320
	THEN
321
		LOOP
322
	        EXIT WHEN in_list IS NULL;
323
	        pos := INSTR ( in_list, ',' );
324
	        sync_rtags.extend;
325
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
326
	        in_list := SUBSTR ( in_list, pos+1 );
327
		END LOOP;
328
	END IF;
329
 
330
	RETURN sync_rtags;
331
END IN_LIST_NUMBER;
1374 dpurdie 332
/
333
--------------------------------------------------------
334
--  DDL for Function RELEASE_MODE
335
--------------------------------------------------------
1373 dpurdie 336
 
337
  CREATE OR REPLACE FUNCTION "RELEASE_MODE" ( nRtagId IN NUMBER ) RETURN CHAR IS
338
 
339
/* ---------------------------------------------------------------------------
340
    Version: 3.0.0
341
   --------------------------------------------------------------------------- */
342
 
343
   returnValue CHAR(1);
344
 
345
BEGIN
346
 
347
    /*--------------- Business Rules Here -------------------*/
348
	/*-------------------------------------------------------*/
349
 
350
	-- Get release mode
351
	SELECT rt.OFFICIAL INTO returnValue
352
	  FROM RELEASE_TAGS rt
353
	 WHERE rt.RTAG_ID = nRtagId;
354
 
355
	RETURN returnValue;
356
 
357
END RELEASE_MODE;
1374 dpurdie 358
/
359
--------------------------------------------------------
360
--  DDL for Function PERL_DBD_TESTFUNC
361
--------------------------------------------------------
1373 dpurdie 362
 
363
  CREATE OR REPLACE FUNCTION "PERL_DBD_TESTFUNC" (a in integer, b in integer) return integer is c integer; begin if b is null then c := 0; else c := b; end if; return a * c + 1; end;
1374 dpurdie 364
/
365
--------------------------------------------------------
366
--  DDL for Function GET_V_EXT
367
--------------------------------------------------------
1373 dpurdie 368
 
369
  CREATE OR REPLACE FUNCTION "GET_V_EXT" (SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE) RETURN VARCHAR2 IS
370
 
371
/* ---------------------------------------------------------------------------
372
    Version: 3.0.0
373
   --------------------------------------------------------------------------- */
374
 
375
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
376
    lastDot NUMBER;
377
 
378
BEGIN
379
    lastDot := INSTR (SSpkg_version, '.', -1);
380
 
381
    IF ( lastDot > 0 ) AND ( lastDot != LENGTH(SSpkg_version) )
382
    THEN
383
        -- YES dot separator found --
384
        SSV_EXT := SUBSTR (SSpkg_version, lastDot, LENGTH(SSpkg_version)-lastDot+1);
385
 
386
        IF IS_VERSION_EXTENSION ( SSV_EXT )
387
        THEN
388
            RETURN SSV_EXT;
389
        ELSE
390
            RETURN NULL;
391
        END IF;
392
 
393
    ELSE
394
        -- NO dot separator found --
395
        RETURN NULL;
396
    END IF;
397
 
398
END GET_V_EXT;
1374 dpurdie 399
/
400
--------------------------------------------------------
401
--  DDL for Function IN_LIST_VARCHAR2
402
--------------------------------------------------------
1373 dpurdie 403
 
404
  CREATE OR REPLACE FUNCTION "IN_LIST_VARCHAR2" ( sInList IN VARCHAR2, cSeparator IN VARCHAR2 ) RETURN RELMGR_VARCHAR2_TAB_t IS
405
 
406
/* ---------------------------------------------------------------------------
407
    Version: 3.1
408
   --------------------------------------------------------------------------- */
409
 
410
    cItemCollection	   RELMGR_VARCHAR2_TAB_t := RELMGR_VARCHAR2_TAB_t();
411
	pos				   NUMBER;
412
	in_list			   VARCHAR2(4000) := sInList || cSeparator;
413
	val				   VARCHAR2(4000);
414
 
415
BEGIN
416
 
417
	IF NOT sInList IS NULL
418
	THEN
419
		LOOP
420
	        EXIT WHEN in_list IS NULL;
421
	        pos := INSTR ( in_list, cSeparator );
422
			val := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
423
 
424
			IF (NOT val IS NULL) THEN
425
		        cItemCollection.extend;
426
		        cItemCollection(cItemCollection.count) := val;
427
			END IF;
428
 
429
	        in_list := SUBSTR ( in_list, pos+1 );
430
		END LOOP;
431
	END IF;
432
 
433
	RETURN cItemCollection;
434
END IN_LIST_VARCHAR2;
1374 dpurdie 435
/
436
--------------------------------------------------------
437
--  DDL for Package PK_PROJECT
438
--------------------------------------------------------
1373 dpurdie 439
 
440
  CREATE OR REPLACE PACKAGE "PK_PROJECT" IS
441
 
442
    TYPE typecur IS REF CURSOR;
443
 
444
    /*------------------------------------------------------------------------*/
445
    PROCEDURE update_base_url (
446
        nprojid   IN  projects.proj_id%TYPE,
447
        sbaseurl  IN  VARCHAR2
448
    );
449
    /*------------------------------------------------------------------------*/
450
    PROCEDURE update_project_config (
451
    nprojid   IN  projects.proj_id%TYPE,
452
    sbaseurl  IN  VARCHAR2,
453
    sjirakey  IN  VARCHAR2
454
    );
455
    /*------------------------------------------------------------------------*/
456
 
457
    END pk_project;
1374 dpurdie 458
/
459
--------------------------------------------------------
460
--  DDL for Package PK_PACKAGE
461
--------------------------------------------------------
1373 dpurdie 462
 
463
  CREATE OR REPLACE PACKAGE "PK_PACKAGE" 
464
IS
465
/*
466
------------------------------
467
||  Last Modified:  Jeremy Tweddle
468
||  Modified Date:  24/08/2007
469
||
470
------------------------------
471
*/
472
   TYPE typecur IS REF CURSOR;
473
 
474
/*================================================================================================*/
475
   PROCEDURE new_version (
476
      nlastpvid                   IN       NUMBER,
477
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
478
      cbuildtype                  IN       CHAR,
479
      nsettopvid                  IN       NUMBER DEFAULT NULL,
480
      nrtagid                     IN       NUMBER,
481
      nuserid                     IN       NUMBER,
482
      enumissues_state_imported   IN       NUMBER,
483
      returnpvid                  OUT      NUMBER
484
   );
485
 
486
   PROCEDURE change_state (
487
      pvid       IN   NUMBER,
488
      newstate   IN   package_versions.dlocked%TYPE,
489
      userid     IN   NUMBER
490
   );
491
 
492
   PROCEDURE new_patch (
493
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
494
      nparentpvid        IN       NUMBER,
495
      spatchidlist       IN       VARCHAR2,
496
      nuserid            IN       NUMBER,
497
      returnpatchid      OUT      NUMBER
498
   );
499
 
500
   PROCEDURE obsolete_patch (
501
      patchid            IN   NUMBER,
502
      isobsolete         IN   CHAR,
503
      obsoletecomments   IN   VARCHAR2,
504
      userid             IN   NUMBER
505
   );
506
 
507
   PROCEDURE obsolete_patches (
508
      spatchidlist       IN   VARCHAR2,
509
      isobsolete         IN   CHAR,
510
      obsoletecomments   IN   VARCHAR2,
511
      userid             IN   NUMBER
512
   );
513
 
514
   PROCEDURE destroy_package (
515
      pvid               IN       NUMBER,
516
      overridewarnings   IN       CHAR DEFAULT 'N',
517
      problemstring      OUT      VARCHAR2
518
   );
519
 
520
   PROCEDURE add_process (
521
      nprocid         IN   processes.proc_id%TYPE,
522
      shealthtag      IN   processes.proc_name%TYPE,
523
      sprocdesc       IN   processes.proc_description%TYPE,
524
      scmdinterface   IN   processes.run_as%TYPE,
525
      spkgowner       IN   processes.pkg_owner%TYPE,
526
      sisinterface    IN   processes.is_interface%TYPE,
527
      npvid           IN   package_processes.pv_id%TYPE,
528
      nuserid         IN   NUMBER
529
   );
530
 
531
   PROCEDURE add_package_process (
532
      nprocidlist   IN   VARCHAR2,
533
      npvid         IN   package_processes.pv_id%TYPE,
534
      nuserid       IN   NUMBER
535
   );
536
 
537
 
538
 
539
   PROCEDURE remove_process (
540
      nprocid   IN   package_processes.proc_id%TYPE,
541
      npvid     IN   package_processes.pv_id%TYPE,
542
      nuserid   IN   NUMBER
543
   );
544
 
545
   PROCEDURE move_package (
546
   	  npvid  			  IN package_versions.pv_id%TYPE,
547
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
548
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
549
	  nuserid			  IN NUMBER		 
550
   ); 
551
 
552
   PROCEDURE modify_product_state (
553
   	  npvid IN package_versions.pv_id%TYPE,
554
	  nrtagid IN release_tags.rtag_id%TYPE,
555
	  nstateid IN product_states.state_id%TYPE,
556
	  nuserid IN NUMBER
557
   );
558
 
559
   PROCEDURE add_code_review_url (
560
        npvid           IN    NUMBER,
561
        nprojid         IN    NUMBER,
562
        surl            IN    VARCHAR2,
563
        sreason         IN    VARCHAR2,
564
        ddateofreview   IN    DATE
565
   );
566
 
567
   PROCEDURE update_code_review_url (
568
        ncrid           IN    NUMBER,
569
        nprojid         IN    NUMBER,
570
        surl            IN    VARCHAR2,
571
        sreason         IN    VARCHAR2
572
   );
573
 
574
   PROCEDURE remove_code_review_url (
575
        ncrid           IN    NUMBER
576
   );
577
/*================================================================================================*/
578
END pk_package;
1374 dpurdie 579
/
580
--------------------------------------------------------
581
--  DDL for Package RM_ISSUES
582
--------------------------------------------------------
1373 dpurdie 583
 
584
  CREATE OR REPLACE PACKAGE "RM_ISSUES" AS
585
 
586
	TYPE T_Cur IS REF CURSOR;
587
 
588
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;
589
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER;
590
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER;
591
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER;
592
 
593
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );
594
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 );
595
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 );
596
 
597
END Rm_Issues;
1374 dpurdie 598
/
599
--------------------------------------------------------
600
--  DDL for Package PK_APP_UTILS
601
--------------------------------------------------------
1373 dpurdie 602
 
603
  CREATE OR REPLACE PACKAGE "PK_APP_UTILS" IS
604
/*
605
------------------------------
606
||  Last Modified:  S.Vukovic
607
||  Modified Date:  26/Apr/2005
608
||  Spec Version:   1.0
609
------------------------------
610
*/
611
 
612
	TYPE typeCur IS REF CURSOR;
613
 
614
    /*================================================================================================*/
615
 
616
	PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur);
617
 
618
	/*================================================================================================*/
619
 
620
END PK_APP_UTILS;
1374 dpurdie 621
/
622
--------------------------------------------------------
623
--  DDL for Package PK_RMAPI_TEST
624
--------------------------------------------------------
1373 dpurdie 625
 
626
  CREATE OR REPLACE PACKAGE "PK_RMAPI_TEST" 
627
IS
628
   TYPE typecur IS REF CURSOR;
629
 
630
/*================================================================================================*/
631
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
632
      RETURN typecur;
633
 
634
   FUNCTION wip_iteration_package (
635
      projname        VARCHAR2,
636
      iterationname   VARCHAR2,
637
      pkgname         VARCHAR2
638
   )
639
      RETURN typecur;
640
 
641
/* This version is to be deprecated when auto_make_vcsrelease is used */
642
   FUNCTION auto_make_release (
643
      rtagid                   IN   NUMBER,
644
      pkgname                  IN   VARCHAR2,
645
      vext                     IN   VARCHAR2,
646
      newpkgversion            IN   VARCHAR2,
647
      label                    IN   VARCHAR2,
648
      dependenciesimportlist   IN   VARCHAR2,
649
      isrippled                IN   NUMBER,
650
      username                 IN   VARCHAR2
651
   )
652
      RETURN NUMBER;
653
 
654
   FUNCTION auto_make_vcsrelease (
655
      rtagid                   IN   NUMBER,
656
      pkgname                  IN   VARCHAR2,
657
      vext                     IN   VARCHAR2,
658
      newpkgversion            IN   VARCHAR2,
659
      vcstag                   IN   VARCHAR2,
660
      dependenciesimportlist   IN   VARCHAR2,
661
      isrippled                IN   NUMBER,
662
      username                 IN   VARCHAR2
663
   )
664
      RETURN NUMBER;
665
 
666
 
667
   PROCEDURE import_dependencies (
668
      pvid                     IN   NUMBER,
669
      dependenciesimportlist   IN   VARCHAR2,
670
      userid                   IN   NUMBER
671
   );
672
 
673
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
674
      RETURN VARCHAR2;
675
 
676
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
677
      RETURN VARCHAR2;
678
 
679
   PROCEDURE update_dash_board (rtagid IN NUMBER);
680
 
681
   FUNCTION exclude_from_build (
682
      pvid          IN   NUMBER,
683
      spkgversion   IN   VARCHAR2,
684
      rtagid        IN   NUMBER,
685
      username      IN   VARCHAR2
686
   )
687
      RETURN NUMBER;
688
 
689
   FUNCTION exclude_indirect_from_build (
690
      pvid          IN   NUMBER,
691
      spkgversion   IN   VARCHAR2,
692
      rtagid        IN   NUMBER,
693
      username      IN   VARCHAR2,
694
      rootpvid      IN   NUMBER,
695
      rootcause     IN   VARCHAR2,
696
      rootfile      IN   VARCHAR2
697
   )
698
      RETURN NUMBER;
699
/*================================================================================================*/
700
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);
701
 
702
   FUNCTION insert_package_metrics (
703
      rtagid IN NUMBER,
704
      pkgname IN VARCHAR2,
705
      vext IN VARCHAR2,
706
      metricstring IN VARCHAR2
707
   )
708
      RETURN NUMBER;
709
 
710
   PROCEDURE update_release_metrics (rtagid IN NUMBER);
711
 
712
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;
713
 
714
END pk_rmapi_test;
1374 dpurdie 715
/
716
--------------------------------------------------------
717
--  DDL for Package PK_RMAPI
718
--------------------------------------------------------
1373 dpurdie 719
 
720
  CREATE OR REPLACE PACKAGE "PK_RMAPI" 
721
IS
722
   TYPE typecur IS REF CURSOR;
723
 
724
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
725
      RETURN typecur;
726
 
727
   FUNCTION wip_iteration_package (
728
      projname        VARCHAR2,
729
      iterationname   VARCHAR2,
730
      pkgname         VARCHAR2
731
   )
732
      RETURN typecur;
733
 
734
   FUNCTION auto_make_vcsrelease (
735
      rtagid                   IN   NUMBER,
736
      pkgname                  IN   VARCHAR2,
737
      vext                     IN   VARCHAR2,
738
      newpkgversion            IN   VARCHAR2,
739
      vcstag                   IN   VARCHAR2,
740
      dependenciesimportlist   IN   VARCHAR2,
741
      isrippled                IN   NUMBER,
742
      username                 IN   VARCHAR2
743
   )
744
      RETURN NUMBER;
745
 
746
 
747
   PROCEDURE import_dependencies (
748
      pvid                     IN   NUMBER,
749
      dependenciesimportlist   IN   VARCHAR2,
750
      userid                   IN   NUMBER
751
   );
752
 
753
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
754
      RETURN VARCHAR2;
755
 
756
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
757
      RETURN VARCHAR2;
758
 
759
   PROCEDURE update_dash_board (rtagid IN NUMBER);
760
 
761
   FUNCTION exclude_from_build (
762
      pvid          IN   NUMBER,
763
      spkgversion   IN   VARCHAR2,
764
      rtagid        IN   NUMBER,
765
      username      IN   VARCHAR2
766
   )
767
      RETURN NUMBER;
768
 
769
   FUNCTION exclude_indirect_from_build (
770
      pvid          IN   NUMBER,
771
      spkgversion   IN   VARCHAR2,
772
      rtagid        IN   NUMBER,
773
      username      IN   VARCHAR2,
774
      rootpvid      IN   NUMBER,
775
      rootcause     IN   VARCHAR2,
776
      rootfile      IN   VARCHAR2
777
   )
778
      RETURN NUMBER;
1374 dpurdie 779
 
1373 dpurdie 780
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2);
781
 
782
   FUNCTION insert_package_metrics (
783
      rtagid IN NUMBER,
784
      pkgname IN VARCHAR2,
785
      vext IN VARCHAR2,
786
      metricstring IN VARCHAR2
787
   )
788
      RETURN NUMBER;
789
 
790
   PROCEDURE update_release_metrics (rtagid IN NUMBER);
791
 
792
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2;
793
 
1374 dpurdie 794
   PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER);
795
 
1373 dpurdie 796
END pk_rmapi;
1374 dpurdie 797
/
798
--------------------------------------------------------
799
--  DDL for Package PK_BUILDAPI
800
--------------------------------------------------------
1373 dpurdie 801
 
802
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI" 
803
IS
804
   /*================================================================================================*/
805
   PROCEDURE add_product_component (
806
      npvid           IN   NUMBER,
807
      sosname         IN   VARCHAR2,
808
      sorigfilepath   IN   VARCHAR2,
809
      sfilename       IN   VARCHAR2,
810
      sdestfilepath   IN   VARCHAR2,
811
      nbytesize       IN   NUMBER,
812
      scrccksum       IN   VARCHAR2
813
   );
814
 
815
   PROCEDURE remove_all_product_components (
816
      npvid     IN   NUMBER,
817
      sosname   IN   VARCHAR2
818
   );
819
 
820
   /*================================================================================================*/
821
   FUNCTION get_osid (sosname IN VARCHAR2)
822
      RETURN NUMBER;
823
 
824
   /*================================================================================================*/
825
   PROCEDURE update_build_service (
826
      sdatabaseserver   IN   VARCHAR2,
827
      swebserver        IN   VARCHAR2,
828
      smailserver       IN   VARCHAR2,
829
      smailsender       IN   VARCHAR2,
830
      sdiskspace        IN   VARCHAR2,
831
      ssbommanagement   IN   VARCHAR2
832
   );
833
 
834
   /*================================================================================================*/
835
   PROCEDURE update_build_service_info (
836
      sdatabaseserver   IN   VARCHAR2,
837
      sarchiveserver    IN   VARCHAR2,
838
      smailserver       IN   VARCHAR2,
839
      smailsender       IN   VARCHAR2,
840
      sdiskspace        IN   VARCHAR2,
841
      ssbommanagement   IN   VARCHAR2
842
   );
843
 
844
   /*================================================================================================*/
845
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2);
846
 
847
   /*================================================================================================*/
848
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER);
849
 
850
   /*================================================================================================*/
851
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2);
852
 
853
   /*================================================================================================*/
854
   PROCEDURE add_daemon (
855
      sdaemonhostname   IN   VARCHAR2,
856
      nrtagid           IN   NUMBER,
857
      ngbeid            IN   NUMBER,
858
      sgbebuildfilter   IN   VARCHAR2
859
   );
860
 
861
   /*================================================================================================*/
862
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2);
863
 
864
   /*================================================================================================*/
865
   PROCEDURE update_daemon (
866
      sdaemonhostname   IN   VARCHAR2,
867
      nrconid           IN   NUMBER,
868
      ngbeid            IN   NUMBER,
869
      sgbebuildfilter   IN   VARCHAR2
870
   );
871
 
872
   /*================================================================================================*/
873
   PROCEDURE insert_schedule_info (
874
      dschedulepause     IN   DATE,
875
      dscheduleresume    IN   DATE,
876
      crepeat            IN   VARCHAR2,
877
      cindefinitepause   IN   VARCHAR2
878
   );
879
 
880
   /*================================================================================================*/
881
   PROCEDURE delete_schedule (nscheduleid IN NUMBER);
882
 
883
   /*================================================================================================*/
884
   PROCEDURE set_infinite_pause;
885
 
886
   /*================================================================================================*/
887
   PROCEDURE set_resume;
888
 
889
   /*================================================================================================*/
890
   PROCEDURE delete_out_of_date_schedule;
891
 
892
   /*================================================================================================*/
893
   PROCEDURE set_daemon_resume (nrconid IN NUMBER);
894
 
895
   /*================================================================================================*/
896
   PROCEDURE set_daemon_pause (nrconid IN NUMBER);
897
 
898
   /*================================================================================================*/
899
   PROCEDURE set_daemon_disable (nrconid NUMBER);
900
 
901
   /*================================================================================================*/
902
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER);
903
 
904
   /*================================================================================================*/
905
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER );
906
   /*================================================================================================*/
907
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER );
908
   /*================================================================================================*/
909
   FUNCTION get_daemon_inst(
910
      nRtag_id IN NUMBER,
911
      nInst_id IN OUT NUMBER,
912
      nOp_code IN OUT NUMBER,
913
      nPv_id OUT NUMBER,
914
      nUser_id OUT NUMBER,
915
      nInProgress OUT NUMBER
916
   ) RETURN NUMBER;
917
   /*================================================================================================*/
918
   PROCEDURE cleanup_stranded_daemon_insts;
919
   /*================================================================================================*/
920
   PROCEDURE insert_daemon_inst(
921
      nOp_code IN NUMBER,
922
      nRtag_id IN NUMBER,
923
      nPv_id IN NUMBER,
924
      nSchedDate IN DATE,
925
      nRepeatSecs IN NUMBER,
926
      nAddedDate IN DATE,
927
      nUser_id IN NUMBER
928
   );
929
   /*================================================================================================*/
930
   PROCEDURE del_daemon_inst( nInstId IN NUMBER );
931
   /*================================================================================================*/
932
   PROCEDURE del_daemon_inst_by_rtag_pvid(
933
      nOp_code IN NUMBER,
934
      nRtag_id IN NUMBER,
935
      nPv_id IN NUMBER
936
   );
937
   /*================================================================================================*/
938
   PROCEDURE update_daemon_inst(
939
      nInstId IN NUMBER,
940
      nOp_code IN NUMBER,
941
      nRtag_id IN NUMBER,
942
      nPv_id IN NUMBER,
943
      nSchedDate IN DATE,
944
      nRepeatSecs IN NUMBER,
945
      nAddedDate IN DATE,
946
      nUser_id IN NUMBER
947
   );
948
   /*================================================================================================*/
949
   FUNCTION daemon_ops_for_rtag_pvid(
950
      nRtag_id IN NUMBER,
951
      nPv_id IN NUMBER
952
   ) RETURN VARCHAR2;
953
   /*================================================================================================*/
954
   FUNCTION daemon_ops_for_rtag(
955
      nRtag_id IN NUMBER
956
   ) RETURN VARCHAR2;
957
   /*================================================================================================*/
958
   PROCEDURE add_daemon_config (
959
      nrtagid           IN   NUMBER,
960
      nbmcon_id         IN   NUMBER,
961
      sdaemon_mode      IN   VARCHAR2,
962
      sgbebuildfilter   IN   VARCHAR2
963
   );
964
   /*================================================================================================*/
965
   PROCEDURE update_daemon_config (
966
      nrconid           IN   NUMBER,
967
      nbmcon_id         IN   NUMBER,
968
      sdaemon_mode      IN   VARCHAR2,
969
      sgbebuildfilter   IN   VARCHAR2
970
   );
971
 
972
   /*================================================================================================*/
973
   PROCEDURE add_build_machine (
974
      sdisplay_name          IN   VARCHAR2,
975
      smachine_hostname      IN   VARCHAR2,
976
      ngbeid                 IN   NUMBER,
977
      sdescription           IN   VARCHAR2
978
   );
979
   /*================================================================================================*/
980
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2);
981
   /*================================================================================================*/
982
   PROCEDURE update_build_machine (
983
      nbmcon_id              IN   NUMBER,
984
      sdisplay_name          IN   VARCHAR2,
985
      smachine_hostname      IN   VARCHAR2,
986
      ngbeid                 IN   NUMBER,
987
      sdescription           IN   VARCHAR2
988
   );
989
END pk_buildapi;
1374 dpurdie 990
/
991
--------------------------------------------------------
992
--  DDL for Package PK_BUILDAPI_TEST
993
--------------------------------------------------------
1373 dpurdie 994
 
995
  CREATE OR REPLACE PACKAGE "PK_BUILDAPI_TEST" IS
996
/*
997
------------------------------
998
||  Last Modified:  S.Vukovic
999
||  Modified Date:  30/Mar/2005
1000
||  Spec Version:   1.0
1001
------------------------------
1002
*/
1003
 
1004
	/*================================================================================================*/
1005
	PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
1006
								  sOsName IN VARCHAR2,
1007
								  sOrigFilePath IN VARCHAR2,
1008
								  sFileName IN VARCHAR2,
1009
								  sDestFilePath IN VARCHAR2,
1010
								  nByteSize IN NUMBER,
1011
								  sCRCcksum IN VARCHAR2 );
1012
 
1013
	PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 );
1014
    /*================================================================================================*/
1015
	FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER;
1016
	/*================================================================================================*/
1017
 
1018
	PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
1019
			  					   	 sWebServer IN VARCHAR2,
1020
									 sMailServer IN VARCHAR2,
1021
									 sMailSender IN VARCHAR2);
1022
	/*================================================================================================*/
1023
 
1024
	PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue IN VARCHAR2 );
1025
	/*================================================================================================*/
1026
 
1027
	PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER );
1028
	/*================================================================================================*/
1029
	PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 );
1030
	/*================================================================================================*/	        
1031
    PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER );
1032
	/*================================================================================================*/	
1033
 
1034
END PK_BUILDAPI_TEST;
1374 dpurdie 1035
/
1036
--------------------------------------------------------
1037
--  DDL for Package PK_PACKAGE_TEST
1038
--------------------------------------------------------
1373 dpurdie 1039
 
1040
  CREATE OR REPLACE PACKAGE "PK_PACKAGE_TEST" 
1041
IS
1042
/*
1043
------------------------------
1044
||  Last Modified:  Rupesh Solanki
1045
||  Modified Date:  18/05/2006
1046
||
1047
------------------------------
1048
*/
1049
   TYPE typecur IS REF CURSOR;
1050
 
1051
/*================================================================================================*/
1052
   PROCEDURE new_version (
1053
      nlastpvid                   IN       NUMBER,
1054
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
1055
      cbuildtype                  IN       CHAR,
1056
      nsettopvid                  IN       NUMBER DEFAULT NULL,
1057
      nrtagid                     IN       NUMBER,
1058
      nuserid                     IN       NUMBER,
1059
      enumissues_state_imported   IN       NUMBER,
1060
      returnpvid                  OUT      NUMBER
1061
   );
1062
 
1063
   PROCEDURE change_state (
1064
      pvid       IN   NUMBER,
1065
      newstate   IN   package_versions.dlocked%TYPE,
1066
      userid     IN   NUMBER
1067
   );
1068
 
1069
   PROCEDURE new_patch (
1070
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
1071
      nparentpvid        IN       NUMBER,
1072
      spatchidlist       IN       VARCHAR2,
1073
      nuserid            IN       NUMBER,
1074
      returnpatchid      OUT      NUMBER
1075
   );
1076
 
1077
   PROCEDURE obsolete_patch (
1078
      patchid            IN   NUMBER,
1079
      isobsolete         IN   CHAR,
1080
      obsoletecomments   IN   VARCHAR2,
1081
      userid             IN   NUMBER
1082
   );
1083
 
1084
   PROCEDURE obsolete_patches (
1085
      spatchidlist       IN   VARCHAR2,
1086
      isobsolete         IN   CHAR,
1087
      obsoletecomments   IN   VARCHAR2,
1088
      userid             IN   NUMBER
1089
   );
1090
 
1091
   PROCEDURE destroy_package (
1092
      pvid               IN       NUMBER,
1093
      overridewarnings   IN       CHAR DEFAULT 'N',
1094
      problemstring      OUT      VARCHAR2
1095
   );
1096
 
1097
   PROCEDURE add_process (
1098
      nprocid         IN   processes.proc_id%TYPE,
1099
      shealthtag      IN   processes.proc_name%TYPE,
1100
      sprocdesc       IN   processes.proc_description%TYPE,
1101
      scmdinterface   IN   processes.run_as%TYPE,
1102
      spkgowner       IN   processes.pkg_owner%TYPE,
1103
      sisinterface    IN   processes.is_interface%TYPE,
1104
      npvid           IN   package_processes.pv_id%TYPE,
1105
      nuserid         IN   NUMBER
1106
   );
1107
 
1108
   PROCEDURE add_package_process (
1109
      nprocidlist   IN   VARCHAR2,
1110
      npvid         IN   package_processes.pv_id%TYPE,
1111
      nuserid       IN   NUMBER
1112
   );
1113
 
1114
 
1115
 
1116
   PROCEDURE remove_process (
1117
      nprocid   IN   package_processes.proc_id%TYPE,
1118
      npvid     IN   package_processes.pv_id%TYPE,
1119
      nuserid   IN   NUMBER
1120
   );
1121
 
1122
   PROCEDURE move_package (
1123
   	  npvid  			  IN package_versions.pv_id%TYPE,
1124
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
1125
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
1126
	  nuserid			  IN NUMBER		 
1127
   ); 
1128
 
1129
PROCEDURE modify_product_state (
1130
   	  npvid IN package_versions.pv_id%TYPE,
1131
	  nstateid IN product_states.state_id%TYPE,
1132
	  nuserid IN NUMBER
1133
   );
1134
/*================================================================================================*/
1135
END pk_package_Test;
1374 dpurdie 1136
/
1137
--------------------------------------------------------
1138
--  DDL for Package PK_PLANNED
1139
--------------------------------------------------------
1373 dpurdie 1140
 
1141
  CREATE OR REPLACE PACKAGE "PK_PLANNED" IS
1142
/*
1143
------------------------------
1144
||  Last Modified:  G.Huddy
1145
||  Modified Date:  28/May/2008
1146
||  Spec Version:   1.1
1147
------------------------------
1148
*/
1149
 
1150
	TYPE typeCur IS REF CURSOR;
1151
 
1152
    /*================================================================================================*/
1153
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1154
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1155
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1156
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
1157
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1158
	PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR);
1159
	/*================================================================================================*/
1160
 
1161
END PK_PLANNED;
1374 dpurdie 1162
/
1163
--------------------------------------------------------
1164
--  DDL for Package PK_ENVIRONMENT_TEST
1165
--------------------------------------------------------
1373 dpurdie 1166
 
1167
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT_TEST" IS
1168
/*
1169
------------------------------
1170
||  Last Modified:  Rupesh Solanki
1171
||  Modified Date:  29/Jan/2007
1172
||  Spec Version:   1.1
1173
------------------------------
1174
*/
1175
 
1176
	TYPE typeCur IS REF CURSOR;
1177
 
1178
    /*================================================================================================*/
1179
 
1180
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
1181
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1182
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1183
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1184
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1185
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1186
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
1187
 
1188
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1189
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1190
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1191
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1192
 
1193
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1194
 
1195
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1196
 
1197
 
1198
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1199
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1200
 
1201
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1202
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1203
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1204
 
1205
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1206
 
1207
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
1208
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
1209
 
1210
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN 
1211
			  			   	 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE, 
1212
							 CloneFromPvId IN NUMBER );
1213
 
1214
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1215
 
1216
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );							 
1217
 
1218
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1219
 
1220
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );								 							 
1221
 
1222
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );	
1223
	/*================================================================================================*/
1224
 
1225
END PK_ENVIRONMENT_test;
1374 dpurdie 1226
/
1227
--------------------------------------------------------
1228
--  DDL for Package PK_ENVIRONMENT
1229
--------------------------------------------------------
1373 dpurdie 1230
 
1231
  CREATE OR REPLACE PACKAGE "PK_ENVIRONMENT" IS
1232
/*
1233
------------------------------
1234
||  Last Modified:  G.Huddy
1235
||  Modified Date:  28/May/2008
1236
||  Spec Version:   1.2
1237
------------------------------
1238
*/
1239
 
1240
	TYPE typeCur IS REF CURSOR;
1241
 
1242
	/*================================================================================================*/
1243
 
1244
	FUNCTION SELECT_ENVIRONMENT_AREA ( cDlock IN PACKAGE_VERSIONS.DLOCKED%TYPE ) RETURN NUMBER;
1245
	FUNCTION GET_PACKAGE_AREA ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1246
	FUNCTION GET_VIEW_LOCATION ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1247
	PROCEDURE ADD_PACKAGE ( PvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1248
	PROCEDURE ADD_PACKAGE_BULK ( PvIdList IN VARCHAR2, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1249
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1250
	FUNCTION REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, ForceRemove IN CHAR ) RETURN NUMBER;
1251
 
1252
	PROCEDURE GET_ENVIRONMENT_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1253
	PROCEDURE GET_RELEASED_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1254
	PROCEDURE GET_PENDING_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1255
	PROCEDURE GET_WORK_IN_PROGRESS_ITEMS ( ViewType IN NUMBER, UserId IN NUMBER, RtagId IN NUMBER,  sViewIdShowList IN VARCHAR2, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1256
 
1257
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );
1258
 
1259
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1260
 
1261
 
1262
	PROCEDURE MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1263
	PROCEDURE MAKE_UNRELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1264
 
1265
	PROCEDURE MAKE_PENDING ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1266
	PROCEDURE MAKE_APPROVED ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1267
	PROCEDURE MAKE_REJECT ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1268
	PROCEDURE APPROVE_MERGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1269
 
1270
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1271
 
1272
	PROCEDURE FIND_PACKAGE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, RecordSet OUT typeCur );
1273
	PROCEDURE FIND_FILE ( sKeyword IN VARCHAR2, nRtagId IN NUMBER, nSearchArea IN NUMBER, nPageSize IN NUMBER, RecordSet OUT typeCur );
1274
 
1275
	PROCEDURE AUTO_MAKE_RELEASE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, VExt IN
1276
							 PACKAGE_VERSIONS.V_EXT%TYPE, SSV_EXT IN PACKAGE_VERSIONS.V_EXT%TYPE,
1277
							 CloneFromPvId IN NUMBER );
1278
 
1279
	PROCEDURE GET_PRODRELEASE_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1280
 
1281
	PROCEDURE GET_INTEGRATION_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1282
 
1283
	PROCEDURE GET_TEST_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1284
 
1285
	PROCEDURE GET_DEPLOY_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1286
 
1287
	PROCEDURE GET_REJECT_ITEMS ( RtagId IN NUMBER, nTrueRecordCount OUT NUMBER, RecordSet OUT typeCur );
1288
	/*================================================================================================*/
1289
 
1290
END PK_ENVIRONMENT;
1374 dpurdie 1291
/
1292
--------------------------------------------------------
1293
--  DDL for Package PK_RELEASE
1294
--------------------------------------------------------
1373 dpurdie 1295
 
1296
  CREATE OR REPLACE PACKAGE "PK_RELEASE" IS
1297
/*
1298
------------------------------
1299
||  Last Modified:  S.Vukovic
1300
||  Modified Date:  12/Sep/2005
1301
||  Body Version:   3.0
1302
------------------------------
1303
*/
1304
 
1305
	TYPE typeCur IS REF CURSOR;
1306
 
1307
    /*================================================================================================*/
1308
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
1309
	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 );
1310
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
1311
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
1312
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
1313
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
1314
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
1315
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
1316
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
1317
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1318
	--PROCEDURE ADD_DEPRECATE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, nPkgId IN NUMBER );
1319
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1320
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1321
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1322
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1323
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
1324
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
1325
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1326
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
1327
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
1328
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
1329
 
1330
	/*================================================================================================*/
1331
 
1332
END PK_RELEASE;
1374 dpurdie 1333
/
1334
--------------------------------------------------------
1335
--  DDL for Package PK_WORK_IN_PROGRESS
1336
--------------------------------------------------------
1373 dpurdie 1337
 
1338
  CREATE OR REPLACE PACKAGE "PK_WORK_IN_PROGRESS" IS
1339
/*
1340
------------------------------
1341
||  Last Modified:  S.Vukovic
1342
||  Modified Date:  2/May/2005
1343
||  Spec Version:   1.0
1344
------------------------------
1345
*/
1346
 
1347
	TYPE typeCur IS REF CURSOR;
1348
 
1349
    /*================================================================================================*/
1350
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1351
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1352
	PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER );
1353
 
1354
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1355
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );	
1356
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1357
	/*================================================================================================*/
1358
 
1359
END PK_WORK_IN_PROGRESS;
1374 dpurdie 1360
/
1361
--------------------------------------------------------
1362
--  DDL for Package PK_LICENCING
1363
--------------------------------------------------------
1373 dpurdie 1364
 
1365
  CREATE OR REPLACE PACKAGE "PK_LICENCING" IS
1366
/*
1367
------------------------------
1368
||  Last Modified:  G.Huddy
1369
||  Modified Date:  19/Aug/2008
1370
||  Spec Version:   1.0
1371
------------------------------
1372
*/
1373
 
1374
   TYPE typeCur IS REF CURSOR;
1375
 
1376
    /*================================================================================================*/
1377
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
1378
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER );
1379
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER );
1380
   FUNCTION  IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER;
1381
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER );
1382
   /*================================================================================================*/
1383
 
1384
END PK_LICENCING;
1374 dpurdie 1385
/
1386
--------------------------------------------------------
1387
--  DDL for Package PK_ARCHIVE
1388
--------------------------------------------------------
1373 dpurdie 1389
 
1390
  CREATE OR REPLACE PACKAGE "PK_ARCHIVE" 
1391
IS
1392
/*
1393
------------------------------
1394
||  Author:  Rupesh Solanki
1395
||  Date:    26 October 2006
1396
||  Version:   1.0
1397
------------------------------
1398
*/
1399
 
1400
   /*================================================================================================*/
1401
   PROCEDURE populate_packages_table;
1402
 
1403
   PROCEDURE populate_archive_data_table (
1404
      nrtagid   IN   release_tags.rtag_id%TYPE
1405
   );
1406
 
1407
   PROCEDURE migrate_pv_to_archive_SCHEMA (nrtagid IN release_tags.rtag_id%TYPE);
1408
 
1409
   PROCEDURE migrate_rtag_to_archive_schema (
1410
      nrtagid   IN   release_tags.rtag_id%TYPE
1411
   );
1412
 
1413
   PROCEDURE clean_up_archive_data_table (
1414
      nrtagid   IN   release_tags.rtag_id%TYPE
1415
   );
1416
 
1417
   PROCEDURE write_action_log (
1418
      nuserid   IN   NUMBER,
1419
      nrtagid   IN   release_tags.rtag_id%TYPE
1420
   );
1421
/*================================================================================================*/
1422
END pk_archive;
1374 dpurdie 1423
/
1424
--------------------------------------------------------
1425
--  DDL for Package PK_RELEASE_TEST
1426
--------------------------------------------------------
1373 dpurdie 1427
 
1428
  CREATE OR REPLACE PACKAGE "PK_RELEASE_TEST" IS
1429
/*
1430
------------------------------
1431
||  Last Modified:  S.Vukovic
1432
||  Modified Date:  12/Sep/2005
1433
||  Body Version:   3.0
1434
------------------------------
1435
*/
1436
 
1437
	TYPE typeCur IS REF CURSOR;
1438
 
1439
    /*================================================================================================*/
1440
	PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER );
1441
	PROCEDURE Update_Release ( nRtagId IN NUMBER, sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nParentRtagId IN NUMBER, nMASSRtagId IN NUMBER, nConfigSpecBranch IN VARCHAR2, nUserId IN NUMBER );
1442
	PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  );
1443
	PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER );
1444
	PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER );
1445
	PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER );
1446
	FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR ) RETURN NUMBER;
1447
	PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER );
1448
	PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur );								 
1449
	PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1450
	PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1451
	PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1452
	PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER );
1453
	FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER;
1454
	PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER );
1455
	PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER );
1456
	PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER );
1457
	PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 );
1458
	PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER );
1459
	PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR );
1460
	/*================================================================================================*/
1461
 
1462
END PK_RELEASE_TEST;
1374 dpurdie 1463
/
1464
--------------------------------------------------------
1465
--  DDL for Package Body PK_PLANNED
1466
--------------------------------------------------------
1373 dpurdie 1467
 
1468
  CREATE OR REPLACE PACKAGE BODY "PK_PLANNED" IS
1469
 
1470
/*
1471
------------------------------
1472
||  Last Modified:  G.Huddy
1473
||  Modified Date:  05/Aug/2008
1474
||  Body Version:   1.2
1475
------------------------------
1476
*/
1477
 
1478
 
1479
/*-------------------------------------------------------------------------------------------------------*/
1480
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1481
 
1482
    oldPvId NUMBER;
1483
    ReleaseLocation VARCHAR2(4000);
1484
    IsPatch CHAR(1) := NULL;
1485
    sLocation VARCHAR2(4000) := NULL;
1486
    nRtagIdLocation NUMBER;
1487
 
1488
 
1489
 
1490
BEGIN
1491
    /*--------------- Business Rules Here -------------------*/
1492
    /*-------------------------------------------------------*/
1493
 
1494
    BEGIN
1495
        -- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
1496
        SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME, rt.RTAG_ID  INTO sLocation, nRtagIdLocation
1497
          FROM PLANNED pl,
1498
               RELEASE_TAGS rt,
1499
               PROJECTS proj
1500
         WHERE pl.PV_ID = newPvId
1501
           AND pl.RTAG_ID = rt.RTAG_ID
1502
           AND rt.OFFICIAL != 'Y'
1503
           AND rt.PROJ_ID = proj.PROJ_ID;
1504
 
1505
        EXCEPTION
1506
            WHEN NO_DATA_FOUND THEN
1507
                sLocation := NULL;
1508
    END;
1509
 
1510
 
1511
 
1512
    IF (sLocation IS NULL) OR (nRtagIdLocation = RtagId) THEN
1513
 
1514
        -- Add to "Pending" area
1515
        INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
1516
        VALUES( RtagId, newPvId, ViewId, 'R' );
1517
 
1518
 
1519
        /* LOG ACTION */
1520
        SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1521
          FROM PROJECTS proj,
1522
               RELEASE_TAGS rt
1523
         WHERE rt.PROJ_ID = proj.PROJ_ID
1524
           AND rt.RTAG_ID = RtagId;
1525
 
1526
        Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1527
 
1528
    ELSE
1529
 
1530
        RAISE_APPLICATION_ERROR (-20000, 'This version is already in Pending Area at '|| sLocation ||'.' );
1531
 
1532
    END IF;
1533
 
1534
END;
1535
/*-------------------------------------------------------------------------------------------------------*/
1536
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
1537
 
1538
    ReleaseLocation VARCHAR2(4000);
1539
 
1540
BEGIN
1541
 
1542
    /*--------------- Business Rules Here -------------------*/
1543
    /*-------------------------------------------------------*/
1544
 
1545
 
1546
    -- Get release location for logging pusposes
1547
    SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1548
      FROM PROJECTS proj,
1549
           RELEASE_TAGS rt
1550
     WHERE rt.PROJ_ID = proj.PROJ_ID
1551
       AND rt.RTAG_ID = RtagId;
1552
 
1553
 
1554
    -- Delete from Work In Progress
1555
    DELETE
1556
      FROM PLANNED pl
1557
     WHERE pl.RTAG_ID = RtagId
1558
       AND pl.PV_ID = PvId;
1559
 
1560
    Log_Action ( PvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1561
 
1562
 
1563
 
1564
 
1565
END;
1566
/*-------------------------------------------------------------------------------------------------------*/
1567
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
1568
 
1569
    ReturnValue NUMBER;
1570
 
1571
BEGIN
1572
    SELECT pl.VIEW_ID INTO ReturnValue
1573
      FROM PLANNED pl
1574
     WHERE pl.RTAG_ID = RtagId
1575
       AND pl.PV_ID = PvId;
1576
 
1577
    RETURN ReturnValue;
1578
END;
1579
/*-------------------------------------------------------------------------------------------------------*/
1580
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
1581
 
1582
    IsBaseView CHAR(1);
1583
 
1584
BEGIN
1585
 
1586
    -- Check if the view is BASE VIEW
1587
    SELECT vi.BASE_VIEW INTO IsBaseView
1588
      FROM VIEWS vi
1589
     WHERE vi.VIEW_ID = ViewId;
1590
 
1591
 
1592
    IF (IsBaseView = 'Y') THEN
1593
        -- Get Base view content
1594
        OPEN RecordSet FOR
1595
        SELECT 0 AS PKG_STATE,
1596
               NULL AS DEPRECATED_STATE,
1597
               pv.pv_id,
1598
               pkg.pkg_name,
1599
               pv.pkg_version,
1600
               pv.dlocked,
1601
               pv.pv_description,
1602
               pv.BUILD_TYPE,
1603
               rel.operation
1604
          FROM PLANNED rel,
1605
               packages pkg,
1606
               package_versions pv
1607
         WHERE pv.pkg_id = pkg.pkg_id
1608
           AND rel.pv_id = pv.pv_id
1609
           AND rel.VIEW_ID = ViewId
1610
           AND rel.RTAG_ID = RtagId
1611
         ORDER BY UPPER(pkg.PKG_NAME);
1612
 
1613
    ELSE
1614
 
1615
        -- Get non base view content
1616
        OPEN RecordSet FOR
1617
        SELECT 0 AS PKG_STATE,
1618
               NULL AS DEPRECATED_STATE,
1619
               pv.pv_id,
1620
               pkg.pkg_name,
1621
               pv.pkg_version,
1622
               pv.dlocked,
1623
               pv.pv_description,
1624
               pv.BUILD_TYPE,
1625
               rel.operation
1626
          FROM PLANNED rel,
1627
               packages pkg,
1628
               package_versions pv,
1629
               VIEW_DEF vd
1630
         WHERE pv.pkg_id = pkg.pkg_id
1631
           AND rel.pv_id = pv.pv_id
1632
           AND rel.RTAG_ID = RtagId
1633
           AND vd.VIEW_ID = ViewId
1634
           AND vd.PKG_ID = pv.PKG_ID
1635
         ORDER BY UPPER(pkg.PKG_NAME);
1636
 
1637
    END IF;
1638
 
1639
 
1640
END;
1641
/*-------------------------------------------------------------------------------------------------------*/
1642
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
1643
 
1644
BEGIN
1645
 
1646
    UPDATE PLANNED pl SET
1647
    pl.VIEW_ID = NewViewId
1648
    WHERE pl.PV_ID = PvId
1649
      AND pl.RTAG_ID = RtagId;
1650
 
1651
END;
1652
/*-------------------------------------------------------------------------------------------------------*/
1653
-- DEVI-45275 This new function supports the ability to insert into the planned table, and existing
1654
-- version of a package as part of a release-to-release merge operation carried out within release manager.
1655
-- DEVI-49594 This function has subsequently been changed to allow a merge operation to cancel its
1656
-- opposite operation, if the opposite already exists in the planned table. This supports user activity
1657
-- via the Release Manager merge manager display
1658
 
1659
PROCEDURE MERGE_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER, mergeOperation IN CHAR ) IS
1660
 
1661
    ReleaseLocation VARCHAR2(4000);
1662
 
1663
        entryExists NUMBER;
1664
        existingOperation CHAR;
1665
BEGIN
1666
    /*--------------- Business Rules Here -------------------*/
1667
    /*-------------------------------------------------------*/
1668
 
1669
      -- Determine if the specified PV_ID already exists in the planned table....
1670
      SELECT COUNT (pl.pv_id) INTO entryExists
1671
      FROM PLANNED pl
1672
      WHERE pl.pv_id = newPvId
1673
      AND pl.rtag_id = RtagId
1674
      AND pl.view_id = ViewId;
1675
 
1676
      -- If the specified PV_ID already exists in the planned table....
1677
      IF entryExists = 1 THEN
1678
 
1679
         -- Get the operation for the existing entry
1680
         SELECT pl.operation INTO existingOperation
1681
         FROM PLANNED pl
1682
         WHERE pl.pv_id = newPvId
1683
         AND pl.rtag_id = RtagId
1684
         AND pl.view_id = ViewId;
1685
 
1686
         -- Is the specified merge operation the opposite of the existing entry?
1687
         -- If it is not, then there is nothing to do, otherwise...
1688
         -- NOTE: A = Add, S = Subtract
1689
         IF (mergeOperation = 'S' AND existingOperation = 'A')
1690
            OR (mergeOperation = 'A' AND existingOperation = 'S') THEN
1691
 
1692
           -- It is the opposite, so effectively it cancels the existing entry
1693
           -- Remove the entry from the planned table
1694
           DELETE
1695
            FROM PLANNED pl
1696
           WHERE pl.pv_id = newPvId
1697
             AND pl.rtag_id = RtagId
1698
             AND pl.view_id = ViewId;
1699
 
1700
           -- Log action
1701
           SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1702
             FROM PROJECTS proj,
1703
                  RELEASE_TAGS rt
1704
            WHERE rt.PROJ_ID = proj.PROJ_ID
1705
              AND rt.RTAG_ID = RtagId;
1706
 
1707
           Log_Action ( newPvId, 'deleted_from_pending', UserId, 'Location: '|| ReleaseLocation );
1708
         END IF;
1709
      ELSE
1710
         -- Add to Planned tabled
1711
         INSERT INTO PLANNED ( RTAG_ID, PV_ID, VIEW_ID, OPERATION )
1712
         VALUES( RtagId, newPvId, ViewId, mergeOperation );
1713
 
1714
         -- Log Action
1715
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
1716
          FROM PROJECTS proj,
1717
               RELEASE_TAGS rt
1718
         WHERE rt.PROJ_ID = proj.PROJ_ID
1719
         AND   rt.RTAG_ID = RtagId;
1720
 
1721
         Log_Action ( newPvId, 'add_to_planned', UserId, 'Location: '|| ReleaseLocation );
1722
      END IF;
1723
 
1724
END;
1725
/*-------------------------------------------------------------------------------------------------------*/
1726
END PK_PLANNED;
1374 dpurdie 1727
/
1728
--------------------------------------------------------
1729
--  DDL for Package Body PK_RMAPI
1730
--------------------------------------------------------
1373 dpurdie 1731
 
1732
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI" 
1733
IS
1734
 
1735
   /*-------------------------------------------------------------------------------------------------------*/
1736
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
1737
      RETURN typecur
1738
   IS
1739
      npvid     NUMBER  := 0;
1740
      RECORDS   typecur;
1741
   BEGIN
1742
      BEGIN
1743
         -- Get PV_ID --
1744
         SELECT pv.pv_id
1745
           INTO npvid
1746
           FROM PACKAGES pkg, package_versions pv
1747
          WHERE pv.pkg_id = pkg.pkg_id
1748
            AND pkg.pkg_name = pkgname
1749
            AND pv.pkg_version = pkgversion;
1750
      EXCEPTION
1751
         WHEN NO_DATA_FOUND
1752
         THEN
1753
            raise_application_error (-20000, 'Package Not Found!');
1754
            --WHEN OTHERS THEN
1755
                  -- Consider logging the error and then re-raise
1756
            RAISE;
1757
      END;
1758
 
1759
      -- Finally get package dependencies --
1760
      OPEN RECORDS FOR
1761
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
1762
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
1763
          WHERE dep.pv_id = npvid
1764
            AND dpv.pkg_id = dpkg.pkg_id
1765
            AND dpv.pv_id = dep.dpv_id;
1766
 
1767
      RETURN RECORDS;
1768
   END;
1769
 
1770
/*-------------------------------------------------------------------------------------------------------*/
1771
   FUNCTION wip_iteration_package (
1772
      projname        VARCHAR2,
1773
      iterationname   VARCHAR2,
1774
      pkgname         VARCHAR2
1775
   )
1776
      RETURN typecur
1777
   IS
1778
      nrtagid   NUMBER  := 0;
1779
      RECORDS   typecur;
1780
   BEGIN
1781
      BEGIN
1782
         -- Get latest rtag_id --
1783
         SELECT rt.rtag_id
1784
           INTO nrtagid
1785
           FROM projects proj, release_tags rt
1786
          WHERE rt.proj_id = proj.proj_id
1787
            AND UPPER (proj.proj_name) = UPPER (projname)
1788
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
1789
 
1790
         IF (nrtagid IS NULL)
1791
         THEN
1792
            raise_application_error (-20000,
1793
                                     'Work In Progress is Not Found!');
1794
         END IF;
1795
      EXCEPTION
1796
         WHEN NO_DATA_FOUND
1797
         THEN
1798
            raise_application_error (-20000,
1799
                                     'Work In Progress is Not Found!');
1800
            RAISE;
1801
      END;
1802
 
1803
      -- Finally get package dependencies --
1804
      OPEN RECORDS FOR
1805
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
1806
                pv.src_path
1807
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
1808
          WHERE pv.pkg_id = pkg.pkg_id
1809
            AND wip.pv_id = pv.pv_id
1810
            AND wip.rtag_id = nrtagid
1811
            AND pkg.pkg_name = pkgname;
1812
 
1813
      RETURN RECORDS;
1814
   END;
1815
 
1816
/*-------------------------------------------------------------------------------------------------------*/
1817
   FUNCTION auto_make_vcsrelease (
1818
      rtagid                   IN   NUMBER,
1819
      pkgname                  IN   VARCHAR2,
1820
      vext                     IN   VARCHAR2,
1821
      newpkgversion            IN   VARCHAR2,
1374 dpurdie 1822
      vcstag                   IN   VARCHAR2,
1373 dpurdie 1823
      dependenciesimportlist   IN   VARCHAR2,
1824
      isrippled                IN   NUMBER,
1825
      username                 IN   VARCHAR2
1826
   )
1827
      RETURN NUMBER
1828
   IS
1829
      pkgid                           NUMBER;
1830
      pvid                            NUMBER                        := 0;
1831
      userid                          NUMBER;
1832
      dlocked                         VARCHAR2 (20)                 := NULL;
1833
      clonefrompvid                   NUMBER;
1834
      ssv_mm                          package_versions.v_mm%TYPE;
1835
      ssv_nmm                         package_versions.v_nmm%TYPE;
1836
      ssv_ext                         package_versions.v_ext%TYPE;
1837
      return_package_not_found        NUMBER                        := -1;
1838
      return_package_already_exists   NUMBER                        := -2;
1839
      return_not_approved             NUMBER                        := -3;
1840
 
1841
      x_vcstypeid                     NUMBER;
1842
      x_tag                           VARCHAR2(32);
1843
      x_label                         VARCHAR2(60);
1844
      x_srcpath                       VARCHAR2(2000);
1374 dpurdie 1845
      p_srcpath                       VARCHAR2(2000);
1373 dpurdie 1846
 
1847
      -- Regular expression constituents
1848
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
1849
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
1850
      BOL           VARCHAR2(4)  := '^';
1851
      Anything      VARCHAR2(4)  := '.*';
1852
      ReplaceToken1 VARCHAR2(4)  := '\1';
1853
      ReplaceToken2 VARCHAR2(4)  := '\2';
1854
      ReplaceToken3 VARCHAR2(4)  := '\3';
1855
      iprev_modifier_id               NUMBER;
1856
 
1857
   BEGIN
1858
      /*--------------- Business Rules Here -------------------*/
1859
      IF (rtagid IS NULL)
1860
      THEN
1861
         raise_application_error (-20000, 'RtagId must be supplied.');
1862
      END IF;
1863
 
1864
      IF (pkgname IS NULL)
1865
      THEN
1866
         raise_application_error (-20000, 'PkgName must be supplied.');
1867
      END IF;
1868
 
1869
      IF (newpkgversion IS NULL)
1870
      THEN
1871
         raise_application_error (-20000, 'PkgVersion must be supplied.');
1872
      END IF;
1873
 
1874
      IF (vcstag IS NULL)
1875
      THEN
1876
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
1877
      END IF;
1878
 
1879
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
1880
      THEN
1881
         raise_application_error
1882
            (-20000,
1883
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
1884
            );
1885
      END IF;
1886
 
1887
      IF (username IS NULL)
1888
      THEN
1889
         raise_application_error (-20000, 'UserName must be supplied.');
1890
      END IF;
1891
 
1892
      -- Parse the PkgVcsTag
1893
      -- Sets up
1894
      --   x_tag, x_label, x_srcpath
1895
 
1896
       BEGIN
1897
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
1898
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
1899
 
1900
          -- Decode the short tag
1901
          CASE x_tag
1902
             WHEN 'CC' THEN
1903
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
1904
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1905
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1906
 
1907
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1908
                -- check for that error as well as the obvious zero-length string conditions.
1909
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1910
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1911
                END IF;
1912
 
1913
             WHEN 'SVN' THEN
1914
                -- extract the 2nd token, that being the subversion tag
1374 dpurdie 1915
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1916
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
1373 dpurdie 1917
 
1918
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
1919
                -- check for that error as well as the obvious zero-length string conditions.
1374 dpurdie 1920
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
1373 dpurdie 1921
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
1922
                END IF;
1923
 
1924
             WHEN 'UC' THEN
1925
                -- nothing to extract, just assign defaults
1374 dpurdie 1926
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
1373 dpurdie 1927
                x_label   := 'N/A';
1928
             ELSE
1929
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
1930
          END CASE;
1931
       END;
1932
 
1933
      -- Get the VCS_TYPE_ID for the version control system.
1934
      BEGIN
1935
         SELECT vt.vcs_type_id
1936
         INTO x_vcstypeid
1937
         FROM VCS_TYPE vt
1938
         WHERE vt.tag = x_tag;
1939
         EXCEPTION
1940
            WHEN NO_DATA_FOUND THEN
1941
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
1942
      END;
1943
 
1944
 
1945
      -- Get user_id
1946
      BEGIN
1947
         SELECT usr.user_id
1948
           INTO userid
1949
           FROM users usr
1950
          WHERE UPPER (usr.user_name) = UPPER (username)
1951
            AND usr.is_disabled IS NULL;
1952
      EXCEPTION
1953
         WHEN NO_DATA_FOUND
1954
         THEN
1955
            raise_application_error (-20000,
1956
                                        'UserName '
1957
                                     || username
1958
                                     || ' is not valid or disabled.'
1959
                                    );
1960
      END;
1961
 
1962
/*-------------------------------------------------------*/
1963
 
1964
      -- Create package if necessary
1965
      IF isrippled = 1
1966
      THEN
1967
         /* Ripple Build */
1968
         BEGIN
1969
            -- Make sure that package does not exist
1970
            SELECT pv.pv_id
1971
              INTO pvid
1972
              FROM package_versions pv, PACKAGES pkg
1973
             WHERE pv.pkg_id = pkg.pkg_id
1974
               AND pkg.pkg_name = pkgname
1975
               AND pv.pkg_version = newpkgversion;
1976
         EXCEPTION
1977
            WHEN NO_DATA_FOUND
1978
            THEN
1979
               pvid := 0;
1980
         END;
1981
 
1982
         IF (pvid = 0)
1983
         THEN
1984
            -- Split current version in parts
1985
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
1986
 
1987
            BEGIN
1374 dpurdie 1988
               -- Find package to be replaced with the ripple package
1373 dpurdie 1989
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
1990
               THEN
1374 dpurdie 1991
                  SELECT pv.pv_id, pv.src_path
1992
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 1993
                    FROM PACKAGES pkg, package_versions pv,
1994
                         release_content rc
1995
                   WHERE rc.pv_id = pv.pv_id
1996
                     AND pv.pkg_id = pkg.pkg_id
1997
                     AND rc.rtag_id = rtagid
1998
                     AND pkg.pkg_name = pkgname
1999
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
2000
               ELSE
1374 dpurdie 2001
                  SELECT pv.pv_id, pv.src_path
2002
                    INTO clonefrompvid, p_srcpath
1373 dpurdie 2003
                    FROM PACKAGES pkg, package_versions pv,
2004
                         release_content rc
2005
                   WHERE rc.pv_id = pv.pv_id
2006
                     AND pv.pkg_id = pkg.pkg_id
2007
                     AND rc.rtag_id = rtagid
2008
                     AND pkg.pkg_name = pkgname
2009
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2010
               END IF;
2011
            EXCEPTION
2012
               WHEN NO_DATA_FOUND
2013
               THEN
2014
                  raise_application_error
2015
                                        (-20000,
2016
                                            'Cannot get CloneFromPvId. VExt='
2017
                                         || vext
2018
                                         || ', RtagId='
2019
                                         || rtagid
2020
                                         || ', PkgName='
2021
                                         || pkgname
2022
                                         || ', SSV_EXT='
2023
                                         || ssv_ext
2024
                                        );
2025
            END;
2026
 
2027
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
2028
            THEN
2029
               -- Create package
2030
               seed_package_names_versions (pkgname,
2031
                                            newpkgversion,
2032
                                            userid,
2033
                                            pvid,
2034
                                            clonefrompvid
2035
                                           );
2036
            ELSE
2037
               -- Create package
2038
               seed_package_names_versions2 (pkgname,
2039
                                             newpkgversion,
2040
                                             userid,
2041
                                             pvid,
2042
                                             clonefrompvid
2043
                                            );
2044
            END IF;
2045
 
2046
            -- Update Package reason for release
2047
            UPDATE package_versions pv
2048
               SET pv.comments = 'Rippled Build.',
2049
                   pv.build_type = 'Y'
2050
             WHERE pv.pv_id = pvid;
2051
         ELSE
2052
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
2053
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
2054
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
2055
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
2056
            UPDATE package_versions pv
2057
               SET pv.release_notes_info = null,
2058
                   pv.modified_stamp = ora_sysdatetime
2059
             WHERE pv.pv_id = pvid;
2060
 
2061
            --DEVI-066151
2062
            log_action (pvid, 'package_rebuilt', userid, 'Package Re-built...');
2063
 
2064
            RETURN return_package_already_exists;
2065
         END IF;
2066
      ELSE
2067
         /* Auto build from Pending area */
2068
 
2069
         -- Find package in pending area
2070
         BEGIN
1374 dpurdie 2071
            SELECT pv.pv_id, pv.dlocked, pv.src_path
2072
              INTO pvid, dlocked, p_srcpath
1373 dpurdie 2073
              FROM planned pl, package_versions pv, PACKAGES pkg
2074
             WHERE pl.pv_id = pv.pv_id
2075
               AND pv.pkg_id = pkg.pkg_id
2076
               AND pl.rtag_id = rtagid
2077
               AND pkg.pkg_name = pkgname
2078
               AND pv.dlocked = 'A'
2079
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
2080
               AND rownum = 1
2081
             ORDER BY pv.modified_stamp;
2082
         EXCEPTION
2083
            WHEN NO_DATA_FOUND
2084
            THEN
2085
               pvid := 0;
2086
         END;
2087
 
2088
         IF (pvid = 0)
2089
         THEN
2090
            -- Package does not exist in pending area, hence report it
2091
            RETURN return_package_not_found;
2092
         ELSIF (dlocked != 'A')
2093
         THEN
2094
            -- Package is not approved for autobuild
2095
            RETURN return_not_approved;
2096
         END IF;
1374 dpurdie 2097
 
1373 dpurdie 2098
      END IF;
2099
 
1374 dpurdie 2100
      -- Ensure Source Path does not change
2101
      -- Do not expect the SVN development branch to change
2102
      -- From the previous package
2103
      IF ( x_tag = 'SVN' AND p_srcpath != x_srcpath )
2104
      THEN
2105
        raise_application_error (-20000, 'Source Path does not match (' || p_srcpath || ','|| x_srcpath || ')' );
2106
      END IF;
2107
 
1373 dpurdie 2108
      BEGIN
2109
         -- Import Dependencies
2110
         import_dependencies (pvid, dependenciesimportlist, userid);
2111
      END;
2112
 
2113
 
2114
      BEGIN
2115
         -- Split current version in parts
2116
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
2117
 
2118
         -- Update Package Details
2119
         UPDATE package_versions pv
2120
            SET pv.pkg_version = newpkgversion,
2121
                pv.v_ext = ssv_ext,
2122
                pv.v_mm = ssv_mm,
2123
                pv.v_nmm = ssv_nmm,
2124
                pv.src_path = x_srcpath,
2125
                pv.pkg_label = x_label,
2126
                pv.vcs_type_id = x_vcstypeid
2127
          WHERE pv.pv_id = pvid;
2128
      EXCEPTION
2129
         WHEN DUP_VAL_ON_INDEX
2130
         THEN
2131
            -- Package already exists, hence cannot be used for ripple build
2132
            RETURN return_package_already_exists;
2133
      END;
2134
 
2135
      -- Update the is_autobuildable
2136
      UPDATE package_versions
2137
         SET is_autobuildable = 'Y'
2138
       WHERE pv_id = pvid;
2139
 
2140
      -- DEVI-063601
2141
      -- For planned builds the modifier_id shouldn't be set to buildadm.
2142
      -- To ensure this the modifier_id is obtained so it can be restored after
2143
      -- the function pk_environment.auto_make_release is called.
2144
      -- This function calls, change_state, which sets the modifier_id to the
2145
      -- specified userid, which for auto builds is buildadm.
2146
      SELECT pv.modifier_id INTO iprev_modifier_id
2147
      FROM package_versions pv WHERE pv.pv_id = pvid;
2148
 
2149
      -- Now release package
2150
      pk_environment.auto_make_release (pvid,
2151
                                        rtagid,
2152
                                        userid,
2153
                                        vext,
2154
                                        ssv_ext,
2155
                                        clonefrompvid
2156
                                       );
2157
 
2158
      -- DEVI-063601
2159
      -- if it is a planned build then restore the modifier_id to the previous modifier
2160
      UPDATE package_versions pv SET pv.modifier_id = iprev_modifier_id
2161
      WHERE pv.pv_id = pvid;
2162
 
2163
      --Now clean the PLANNED_VERSIONS table
2164
      SELECT pkg_id
2165
        INTO pkgid
2166
        FROM PACKAGES
2167
       WHERE pkg_name = pkgname;
2168
 
2169
      DELETE FROM planned_versions
2170
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
2171
 
2172
      RETURN pvid;
2173
   END;
2174
 
2175
/*-------------------------------------------------------------------------------------------------------*/
2176
   PROCEDURE import_dependencies (
2177
      pvid                     IN   NUMBER,
2178
      dependenciesimportlist   IN   VARCHAR2,
2179
      userid                   IN   NUMBER
2180
   )
2181
   IS
2182
/*
2183
|| DependenciesImportList Format:
2184
|| "pkgA","1.0.0";"pkgB","2.0.0";
2185
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
2186
*/
2187
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
2188
         INDEX BY VARCHAR2 (4000);
2189
 
2190
      seperator         VARCHAR2 (2)           := '||';
2191
      pkgname           VARCHAR2 (4000);
2192
      pkgversion        VARCHAR2 (4000);
2193
      buildtype         VARCHAR2 (50);
2194
      pkgid             NUMBER;
2195
      vext              VARCHAR2 (4000);
2196
      dpvid             NUMBER;
2197
      slist             VARCHAR2 (4000);
2198
      cbuildtypes       tdictionary;
2199
      dependencyrow     NUMBER;
2200
      sdependency       VARCHAR2 (4000);
2201
      first_pos         VARCHAR2 (4000);
2202
      second_pos        VARCHAR2 (4000);
2203
      third_pos         VARCHAR2 (4000);
2204
      forth_pos         VARCHAR2 (4000);
2205
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2206
 
2207
      CURSOR curbuildtype
2208
      IS
2209
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
2210
                dep.build_type
2211
           FROM package_dependencies dep, package_versions dpv
2212
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
2213
 
2214
      recbuildtype      curbuildtype%ROWTYPE;
2215
   BEGIN
2216
      slist := dependenciesimportlist;
2217
 
2218
      -- Preformat String
2219
      IF NOT slist IS NULL
2220
      THEN
2221
         slist := REPLACE (slist, ' ');                      -- Remove spaces
2222
         slist := REPLACE (slist, UTL_TCP.crlf);
2223
         -- Remove new line and carriage-return characters
2224
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
2225
      END IF;
2226
 
2227
      -- Get Current Dependencies
2228
      OPEN curbuildtype;
2229
 
2230
      FETCH curbuildtype
2231
       INTO recbuildtype;
2232
 
2233
      WHILE curbuildtype%FOUND
2234
      LOOP
2235
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
2236
 
2237
         FETCH curbuildtype
2238
          INTO recbuildtype;
2239
      END LOOP;
2240
 
2241
      CLOSE curbuildtype;
2242
 
2243
      -- Separate dependencies with ; separator
2244
      citemcollection := in_list_varchar2 (slist, ';');
2245
 
2246
      BEGIN
2247
         -- Remove old dependencies
2248
         DELETE FROM package_dependencies dep
2249
               WHERE dep.pv_id = pvid;
2250
 
2251
         -- Loop through dependencies
2252
         FOR dependencyrow IN 1 .. citemcollection.COUNT
2253
         LOOP
2254
            -- Extract pkg_name and pkg_version
2255
            sdependency := citemcollection (dependencyrow);
2256
            first_pos := INSTR (sdependency, '"', 1, 1);
2257
            second_pos := INSTR (sdependency, '"', 1, 2);
2258
            third_pos := INSTR (sdependency, '"', 1, 3);
2259
            forth_pos := INSTR (sdependency, '"', 1, 4);
2260
            pkgname :=
2261
               SUBSTR (sdependency,
2262
                       (first_pos + 1),
2263
                       (second_pos - first_pos - 1)
2264
                      );
2265
            pkgversion :=
2266
               SUBSTR (sdependency,
2267
                       (third_pos + 1),
2268
                       (forth_pos - third_pos - 1)
2269
                      );
2270
 
2271
            -- Dependency must exits to be linked against
2272
            BEGIN
2273
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
2274
                 INTO dpvid, pkgid, vext
2275
                 FROM package_versions pv, PACKAGES pkg
2276
                WHERE pv.pkg_id = pkg.pkg_id
2277
                  AND pkg.pkg_name = pkgname
2278
                  AND pv.pkg_version = pkgversion;
2279
            EXCEPTION
2280
               WHEN NO_DATA_FOUND
2281
               THEN
2282
                  raise_application_error
2283
                                  (-20000,
2284
                                      'Dependency ['
2285
                                   || pkgname
2286
                                   || ' '
2287
                                   || pkgversion
2288
                                   || '] does not exist yet and cannot be used!'
2289
                                  );
2290
            END;
2291
 
2292
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
2293
            BEGIN
2294
               buildtype := cbuildtypes (pkgid || seperator || vext);
2295
 
2296
               IF buildtype IS NULL
2297
               THEN
2298
                  -- Set build type to LinkPackageArchive by default
2299
                  buildtype := 'L';
2300
               END IF;
2301
            EXCEPTION
2302
               WHEN NO_DATA_FOUND
2303
               THEN
2304
                  buildtype := 'L';
2305
            END;
2306
 
2307
            -- Insert Dependencies
2308
            update_package_dependency (pvid,
2309
                                       pkgname,
2310
                                       pkgversion,
2311
                                       buildtype,
2312
                                       userid,
2313
 
2314
                                      );
2315
         END LOOP;
2316
      END;
2317
   END;
2318
 
2319
/*-------------------------------------------------------------------------------------------------------*/
2320
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
2321
      RETURN VARCHAR2
2322
   IS
2323
      pkgversion   VARCHAR2 (4000);
2324
   BEGIN
2325
      BEGIN
2326
         SELECT pv.pkg_version
2327
           INTO pkgversion
2328
           FROM PACKAGES pkg, release_content rc, package_versions pv
2329
          WHERE pv.pv_id = rc.pv_id
2330
            AND pkg.pkg_id = pv.pkg_id
2331
            AND pkg.pkg_name = pkgname
2332
            AND rc.rtag_id = rtagid;
2333
 
2334
         RETURN pkgversion;
2335
      END;
2336
   END;
2337
 
2338
/*-------------------------------------------------------------------------------------------------------*/
2339
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
2340
      RETURN VARCHAR2
2341
   IS
2342
      pkgversion   VARCHAR2 (4000);
2343
   BEGIN
2344
      BEGIN
2345
         SELECT pv.pkg_version
2346
           INTO pkgversion
2347
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
2348
          WHERE pv.pv_id = wip.pv_id
2349
            AND pkg.pkg_id = pv.pkg_id
2350
            AND pkg.pkg_name = pkgname
2351
            AND wip.rtag_id = rtagid;
2352
 
2353
         IF pkgversion IS NULL
2354
         THEN
2355
            SELECT pv.pkg_version
2356
              INTO pkgversion
2357
              FROM PACKAGES pkg, planned pl, package_versions pv
2358
             WHERE pv.pv_id = pl.pv_id
2359
               AND pkg.pkg_id = pv.pkg_id
2360
               AND pkg.pkg_name = pkgname
2361
               AND pl.rtag_id = rtagid;
2362
         END IF;
2363
 
2364
         RETURN pkgversion;
2365
      END;
2366
   END;
2367
 
2368
/*-------------------------------------------------------------------------------------------------------*/
2369
   PROCEDURE update_dash_board (rtagid IN NUMBER)
2370
   IS
2371
      projid       NUMBER;
2372
      projiddb     NUMBER;
2373
      total        NUMBER;
2374
      auto_total   NUMBER;
2375
      rtagiddb     NUMBER;
2376
   BEGIN
2377
      SELECT COUNT (*)
2378
        INTO total
2379
        FROM release_content rc, package_versions pv
2380
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
2381
 
2382
      SELECT COUNT (*)
2383
        INTO auto_total
2384
        FROM release_content rc, package_versions pv
2385
       WHERE pv.pv_id = rc.pv_id
2386
         AND pv.is_autobuildable = 'Y'
2387
         AND rc.rtag_id = rtagid;
2388
 
2389
      BEGIN
2390
         SELECT rtag_id
2391
           INTO rtagiddb
2392
           FROM dash_board
2393
          WHERE rtag_id = rtagid;
2394
 
2395
         SELECT proj_id
2396
           INTO projiddb
2397
           FROM dash_board
2398
          WHERE rtag_id = rtagid;
2399
      EXCEPTION
2400
         WHEN NO_DATA_FOUND
2401
         THEN
2402
            rtagiddb := '';
2403
      END;
2404
 
2405
      IF rtagiddb IS NULL
2406
      THEN
2407
         SELECT proj_id
2408
           INTO projid
2409
           FROM release_tags
2410
          WHERE rtag_id = rtagid;
2411
 
2412
         INSERT INTO dash_board
2413
                     (proj_id, rtag_id, last_build_time, automated_packages,
2414
                      total_packages
2415
                     )
2416
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
2417
                      total
2418
                     );
2419
      ELSE
2420
         UPDATE dash_board
2421
            SET last_build_time = ora_sysdatetime,
2422
                automated_packages = auto_total,
2423
                total_packages = total
2424
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
2425
      END IF;
2426
   END;
2427
 
2428
/*-------------------------------------------------------------------------------------------------------*/
2429
   FUNCTION exclude_from_build (
2430
      pvid          IN   NUMBER,
2431
      spkgversion   IN   VARCHAR2,
2432
      rtagid        IN   NUMBER,
2433
      username      IN   VARCHAR2
2434
   )
2435
      RETURN NUMBER
2436
   IS
2437
      userid              NUMBER;
2438
      outerrcode          NUMBER;
2439
      pkgid               NUMBER;
2440
 
2441
      CURSOR dnr_duplicate_cur
2442
      IS
2443
         SELECT *
2444
           FROM do_not_ripple
2445
          WHERE pv_id = pvid AND rtag_id = rtagid;
2446
 
2447
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2448
   BEGIN
2449
      outerrcode := -1;       -- Set default return error code to ERROR state
2450
 
2451
      /*--------------- Business Rules Here -------------------*/
2452
      IF (rtagid IS NULL)
2453
      THEN
2454
         RETURN outerrcode;
2455
--         raise_application_error (-20000, 'RtagId must be supplied.');
2456
      END IF;
2457
 
2458
      IF (pvid IS NULL)
2459
      THEN
2460
         RETURN outerrcode;
2461
--         raise_application_error (-20000, 'PvId must be supplied.');
2462
      END IF;
2463
 
2464
      IF (username IS NULL)
2465
      THEN
2466
         RETURN outerrcode;
2467
--         raise_application_error (-20000, 'UserName must be supplied.');
2468
      END IF;
2469
 
2470
      -- Get user_id
2471
      BEGIN
2472
         SELECT usr.user_id
2473
           INTO userid
2474
           FROM users usr
2475
          WHERE UPPER (usr.user_name) = UPPER (username)
2476
            AND usr.is_disabled IS NULL;
2477
      EXCEPTION
2478
         WHEN NO_DATA_FOUND
2479
         THEN
2480
            RETURN outerrcode;
2481
--            raise_application_error (-20000,
2482
--                                        'UserName '
2483
--                                     || username
2484
--                                     || ' is not valid or disabled.'
2485
--                                    );
2486
      END;
2487
 
2488
      OPEN dnr_duplicate_cur;
2489
 
2490
      FETCH dnr_duplicate_cur
2491
       INTO dnr_duplicate_rec;
2492
 
2493
      IF dnr_duplicate_cur%FOUND
2494
      THEN
2495
         outerrcode := 0;
2496
      END IF;
2497
 
2498
      IF dnr_duplicate_cur%NOTFOUND
2499
      THEN
2500
         /* No duplicate recordset */
2501
         unripple_package (pvid, rtagid, userid);
2502
         outerrcode := 0;                            -- Set return to SUCCESS
2503
      END IF;
2504
 
2505
      CLOSE dnr_duplicate_cur;
2506
 
2507
      SELECT pkg_id
2508
        INTO pkgid
2509
        FROM package_versions
2510
       WHERE pv_id = pvid;
2511
 
2512
      DELETE FROM planned_versions
2513
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2514
 
2515
      RETURN outerrcode;
2516
   END;
2517
 
2518
/*-------------------------------------------------------------------------------------------------------*/
2519
   FUNCTION exclude_indirect_from_build (
2520
      pvid          IN   NUMBER,
2521
      spkgversion   IN   VARCHAR2,
2522
      rtagid        IN   NUMBER,
2523
      username      IN   VARCHAR2,
2524
      rootpvid      IN   NUMBER,
2525
      rootcause     IN   VARCHAR2,
2526
      rootfile      IN   VARCHAR2
2527
   )
2528
      RETURN NUMBER
2529
   IS
2530
      userid              NUMBER;
2531
      outerrcode          NUMBER;
2532
      pkgid               NUMBER;
2533
 
2534
      CURSOR dnr_duplicate_cur
2535
      IS
2536
         SELECT *
2537
           FROM do_not_ripple
2538
          WHERE pv_id = pvid AND rtag_id = rtagid;
2539
 
2540
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
2541
   BEGIN
2542
      outerrcode := -1;       -- Set default return error code to ERROR state
2543
 
2544
      /*--------------- Business Rules Here -------------------*/
2545
      IF (rtagid IS NULL)
2546
      THEN
2547
         RETURN outerrcode;
2548
--         raise_application_error (-20000, 'RtagId must be supplied.');
2549
      END IF;
2550
 
2551
      IF (pvid IS NULL)
2552
      THEN
2553
         RETURN outerrcode;
2554
--         raise_application_error (-20000, 'PvId must be supplied.');
2555
      END IF;
2556
 
2557
      IF (username IS NULL)
2558
      THEN
2559
         RETURN outerrcode;
2560
--         raise_application_error (-20000, 'UserName must be supplied.');
2561
      END IF;
2562
 
2563
      -- Get user_id
2564
      BEGIN
2565
         SELECT usr.user_id
2566
           INTO userid
2567
           FROM users usr
2568
          WHERE UPPER (usr.user_name) = UPPER (username)
2569
            AND usr.is_disabled IS NULL;
2570
      EXCEPTION
2571
         WHEN NO_DATA_FOUND
2572
         THEN
2573
            RETURN outerrcode;
2574
--            raise_application_error (-20000,
2575
--                                        'UserName '
2576
--                                     || username
2577
--                                     || ' is not valid or disabled.'
2578
--                                    );
2579
      END;
2580
 
2581
     /* No duplicate recordset */
2582
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
2583
     outerrcode := 0;                            -- Set return to SUCCESS
2584
 
2585
      SELECT pkg_id
2586
        INTO pkgid
2587
        FROM package_versions
2588
       WHERE pv_id = pvid;
2589
 
2590
      DELETE FROM planned_versions
2591
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
2592
 
2593
      RETURN outerrcode;
2594
   END;
2595
/*-------------------------------------------------------------------------------------------------------*/
2596
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
2597
   IS
2598
   BEGIN
2599
      INSERT INTO abt_action_log
2600
                  (rcon_id, action_datetime, action
2601
                  )
2602
           VALUES (rconid, ora_sysdatetime, action
2603
                  );
2604
   END;
2605
 
2606
/*-------------------------------------------------------------------------------------------------------*/
2607
   FUNCTION insert_package_metrics (
2608
      rtagid                   IN   NUMBER,
2609
      pkgname                  IN   VARCHAR2,
2610
      vext                     IN   VARCHAR2,
2611
      metricstring             IN   VARCHAR2
2612
   )
2613
      RETURN NUMBER
2614
   IS
2615
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
2616
      lv_pvid                  NUMBER                 := 0;
2617
      rownumber                NUMBER;
2618
      rowcontent               VARCHAR2(4000);
2619
      metricname               VARCHAR2(1000);
2620
      metricvalue              VARCHAR2(4000);
2621
      return_insert_error      NUMBER                 := -1;
2622
      return_insert_success    NUMBER                 := 0;
2623
 
2624
      /* Metrics */
2625
      lv_branches                 NUMBER;
2626
      lv_branchlist               VARCHAR2(4000);
2627
      lv_codefiles                NUMBER;
2628
      lv_ignoredfiles             NUMBER;
2629
      lv_directories              NUMBER;
2630
      lv_directorydepth           NUMBER;
2631
      lv_totalfiles               NUMBER;
2632
      lv_makefiles                NUMBER;
2633
      lv_blanklines               NUMBER;
2634
      lv_codelines                NUMBER;
2635
      lv_commentlines             NUMBER;
2636
 
2637
   BEGIN
2638
      /*--------------- Business Rules Here -------------------*/
2639
      IF (rtagid IS NULL)
2640
      THEN
2641
         RETURN return_insert_error;
2642
      END IF;
2643
 
2644
      IF (pkgname IS NULL)
2645
      THEN
2646
         RETURN return_insert_error;
2647
      END IF;
2648
 
2649
      IF (metricstring IS NULL)
2650
      THEN
2651
         RETURN return_insert_error;
2652
      END IF;
2653
 
2654
      BEGIN
2655
         SELECT pv.pv_id
2656
           INTO lv_pvid
2657
           FROM package_versions pv, packages pkg, release_content rc
2658
          WHERE pv.pkg_id = pkg.pkg_id
2659
            AND rc.rtag_id = rtagid
2660
            AND pv.pv_id = rc.pv_id
2661
            AND pkg.pkg_name = pkgname
2662
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
2663
      EXCEPTION
2664
           WHEN NO_DATA_FOUND
2665
           THEN
2666
                lv_pvid := 0;
2667
      END;
2668
 
2669
      citemcollection := in_list_varchar2 (metricstring, ';');
2670
 
2671
      FOR rownumber IN 1 .. citemcollection.COUNT
2672
      LOOP
2673
         rowcontent := citemcollection(rownumber);
2674
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
2675
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
2676
 
2677
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
2678
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
2679
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
2680
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
2681
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
2682
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
2683
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
2684
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
2685
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
2686
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
2687
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
2688
         END IF;
2689
      END LOOP;
2690
 
2691
      IF (lv_pvid > 0)
2692
      THEN
2693
         -- Delete any existing entries for this package version to makes sure our data is untainted
2694
         DELETE FROM package_metrics pm
2695
         WHERE pm.pv_id = lv_pvid;
2696
 
2697
         -- Insert the new data into the metrics table
2698
         INSERT INTO package_metrics
2699
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
2700
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
2701
                     )
2702
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
2703
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
2704
                     );
2705
 
2706
         -- Now update the Release_Metrics Table
2707
         update_release_metrics(rtagid);
2708
 
2709
         RETURN return_insert_success;
2710
      ELSE
2711
         RETURN return_insert_error;
2712
      END IF;
2713
   END;
2714
 
2715
/*-------------------------------------------------------------------------------------------------------*/
2716
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
2717
   IS
2718
      lv_totalpackages       NUMBER;
2719
      lv_autobuilt           NUMBER;
2720
      lv_linesofcode         NUMBER;
2721
      lv_unittested          NUMBER;
2722
      lv_autotested          NUMBER;
2723
      lv_numOfbranches       NUMBER;
2724
      lv_lastbuildtime       DATE;
2725
   BEGIN
2726
      IF (rtagid > 0)
2727
      THEN
2728
         -- Get the total number of packages in this release and the number of
2729
         -- those that are autobuilt
2730
         SELECT COUNT (DISTINCT rc.pv_id),
2731
                COUNT (DISTINCT autobuilt_qry.pv_id)
2732
           INTO lv_totalpackages, lv_autobuilt
2733
           FROM release_content rc,
2734
                package_versions pv,
2735
                (
2736
                 SELECT rc.pv_id
2737
                   FROM release_content rc,
2738
                        package_versions pv
2739
                  WHERE pv.is_autobuildable = 'Y'
2740
                    AND pv.pv_id = rc.pv_id
2741
                    AND rc.rtag_id = rtagid
2742
                ) autobuilt_qry
2743
          WHERE pv.pv_id = rc.pv_id
2744
            AND rc.rtag_id = rtagid
2745
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
2746
 
2747
         -- Get the build time of the last package built in this release and the
2748
         -- total number of lines of code
2749
         SELECT MAX(pm.created_stamp),
2750
                SUM(pm.code_lines)
2751
           INTO lv_lastbuildtime, lv_linesofcode
2752
           FROM package_metrics pm, release_content rc
2753
          WHERE pm.pv_id = rc.pv_id
2754
            AND rc.rtag_id = rtagid;
2755
 
2756
         -- Get the number of packages with unit tests in this release and the
2757
         -- number of those that are autotested
2758
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
2759
           FROM unit_tests ut,
2760
                release_content rc
2761
          WHERE ut.pv_id = rc.pv_id
2762
            AND rc.rtag_id = rtagid
2763
        AND ut.test_types_fk != 1;
2764
 
2765
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
2766
          FROM unit_tests ut,
2767
               release_content rc
2768
         WHERE ut.pv_id = rc.pv_id
2769
           AND rc.rtag_id = rtagid
2770
           AND ut.test_types_fk = 7;
2771
 
2772
 
2773
         -- Count the number of unique branches in the packages in this release.
2774
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
2775
--           FROM (
2776
--                SELECT pv_id,
2777
--                       regexp_substr(str, '[^,]+', 1, level) branch,
2778
--                       level lv,
2779
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
2780
--                  FROM (
2781
--                       SELECT pm.pv_id,
2782
--                              ','||pm.branch_list str
2783
--                         FROM package_metrics pm,
2784
--                              release_content rc
2785
--                        WHERE pm.pv_id = rc.pv_id
2786
--                          AND rc.rtag_id = rtagid
2787
--                       )
2788
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
2789
--                )
2790
--          WHERE lv != lg;
2791
 
2792
         UPDATE release_metrics rm
2793
            SET rm.total_packages = lv_totalpackages,
2794
                rm.autobuilt = lv_autobuilt,
2795
                rm.lines_of_code = lv_linesofcode,
2796
                rm.unit_tested = lv_unittested,
2797
                rm.autotested = lv_autotested,
2798
--                rm.branches = lv_numOfbranches,
2799
                rm.last_build_time = lv_lastbuildtime
2800
          WHERE rtag_id = rtagid;
2801
 
2802
         IF (SQL%ROWCOUNT = 0)
2803
         THEN
2804
            INSERT INTO release_metrics
2805
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2806
                         autotested, last_build_time
2807
                        )
2808
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2809
                         lv_autotested, lv_lastbuildtime
2810
                        );
2811
         END IF;
2812
--         IF (SQL%ROWCOUNT = 0)
2813
--         THEN
2814
--            INSERT INTO release_metrics
2815
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
2816
--                         autotested, branches, last_build_time
2817
--                        )
2818
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
2819
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
2820
--                        );
2821
--         END IF;
2822
--      ELSE
2823
--         raise_application_error (-20000, 'RtagId must be supplied.');
2824
      END IF;
2825
   END;
2826
/*-------------------------------------------------------------------------------------------------------*/
2827
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
2828
   IS
2829
      vcstypeid    NUMBER;
2830
      vcstag       VARCHAR2(32);
2831
      label        VARCHAR2(60);
2832
      srcpath      VARCHAR2(2000);
2833
      vcstypeid_cc NUMBER;
2834
      vcstypeid_uc NUMBER;
2835
   BEGIN
2836
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
2837
      -- what the primary key value is for the ClearCase VCS entry.
2838
      BEGIN
2839
         SELECT vt.vcs_type_id
2840
         INTO vcstypeid_cc
2841
         FROM VCS_TYPE vt
2842
         WHERE vt.tag = 'CC';
2843
         EXCEPTION
2844
            WHEN NO_DATA_FOUND THEN
2845
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
2846
      END;
2847
 
2848
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
2849
      -- what the primary key value is for the Uncontrolled VCS entry.
2850
      BEGIN
2851
         SELECT vt.vcs_type_id
2852
         INTO vcstypeid_uc
2853
         FROM VCS_TYPE vt
2854
         WHERE vt.tag = 'UC';
2855
         EXCEPTION
2856
            WHEN NO_DATA_FOUND THEN
2857
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
2858
      END;
2859
 
2860
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
2861
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
2862
      BEGIN
2863
         SELECT pv.pkg_label, pv.src_path,
2864
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
2865
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
2866
                 ELSE pv.vcs_type_id END) AS vcs_type_id
2867
         INTO label, srcpath, vcstypeid
2868
         FROM PACKAGE_VERSIONS pv
2869
         WHERE pv.pv_id = pvid;
2870
         EXCEPTION
2871
            WHEN NO_DATA_FOUND THEN
2872
               raise_application_error (-20000, 'Package Version Not Found!');
2873
      END;
2874
 
2875
      -- Get the VCS TAG for the VCS_TYPE_ID.
2876
      BEGIN
2877
         SELECT vt.tag
2878
         INTO vcstag
2879
         FROM VCS_TYPE vt
2880
         WHERE vt.vcs_type_id = vcstypeid;
2881
         EXCEPTION
2882
            WHEN NO_DATA_FOUND THEN
2883
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
2884
      END;
2885
 
2886
      -- Return value depending upon which VCS Tag is being used.
2887
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
2888
      CASE vcstag
2889
         WHEN 'CC' THEN
2890
            RETURN vcstag || '::' || srcpath || '::' || label;
2891
         WHEN 'SVN' THEN
1374 dpurdie 2892
            RETURN vcstag || '::' || srcpath || '::' || label;
1373 dpurdie 2893
         ELSE
2894
            RETURN vcstag || '::';
2895
      END CASE;
2896
 
2897
   END;
2898
/*-------------------------------------------------------------------------------------------------------*/
2899
 
1374 dpurdie 2900
/*-------------------------------------------------------------------------------------------------------
2901
Name:        update_vcs_details
2902
Description: Updates the Version Control System (vcs) details specified in the vcstag
2903
             parameter for the specified package version.
2904
             The specified package vcstag is parsed and split into 3 fields:
2905
                vcs type, src path, label
2906
             These fields are then stored for the specified pv_id in the package_versions, table.
2907
             An action is recorded in the action log and provides information for tracking and
2908
             for restoring the previous vcs settings if a recovery is required.
2909
Paramters:
2910
             ipv_id:     Package version identifier
2911
             vcstag:     Full version control tag.
2912
                         Examples:
2913
                             "SVN::AUPERASVN01/DPG_SWBase/tools/trunk::daf_tools_25.1.7027.cr@1234"
2914
                            "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2915
             user_id:    Identifier of the user that is performing this function.
2916
*/
2917
PROCEDURE update_vcs_details(ipv_id IN NUMBER, vcstag IN VARCHAR2, user_id IN NUMBER)
2918
   IS
2919
      ivcs_type_id   NUMBER;
2920
      svcs_type      VARCHAR2(128);
2921
      ssrc_path      VARCHAR2(512);
2922
      spkg_label     VARCHAR2(512);
2923
      spattern       VARCHAR2(64);
2924
      saction_desc   VARCHAR2(2048);
2925
      old_vcs_type   VARCHAR2(128);
2926
      old_src_path   VARCHAR2(512);
2927
      old_pkg_label  VARCHAR2(512);
2928
      old_pkg_vcstag VARCHAR2(1024);
2929
      i              NUMBER;
2930
      vcount         NUMBER;
2931
   BEGIN
2932
     -- Split vcs tag into fields: vcs type, src path, label
2933
     -- Fields are separated by '::'
2934
     -- e.g "CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr"
2935
     -- The below regular expression pattern has groups to achieve this.
2936
 
2937
     spattern:= '^([^:]*)::([^:]*)(::(.*))?$';
2938
 
2939
     --As Oracle 10g does not allow REGEXP_SUBSTR to return a group,
2940
     --REGEXP_REPLACE is used instead (Note: Oracle 11g has this enhancement).
2941
     SELECT REGEXP_REPLACE(vcstag,spattern, '\1') INTO svcs_type  FROM DUAL;
2942
     SELECT REGEXP_REPLACE(vcstag,spattern, '\2') INTO ssrc_path  FROM DUAL;
2943
     SELECT REGEXP_REPLACE(vcstag,spattern, '\4') INTO spkg_label FROM DUAL;
2944
 
2945
     -- Validate vcs type
2946
     BEGIN
2947
       SELECT vc.vcs_type_id INTO ivcs_type_id FROM vcs_type vc WHERE UPPER(svcs_type) = UPPER(vc.tag);
2948
     EXCEPTION
2949
       WHEN NO_DATA_FOUND THEN
2950
         raise_application_error (-20000, 'Invalid vcs type: ' || '"' || svcs_type || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2951
       --RAISE;
2952
     END;      
2953
 
2954
     -- If Clearcase           
2955
     IF (ivcs_type_id = 2) THEN
2956
       -- Validate source path
2957
       IF NOT REGEXP_LIKE(ssrc_path,'^(\\|\/)[a-z]+[0-9a-z_\.\-\\\/ -]*$','i') THEN
2958
         raise_application_error (-20000, 'Invalid CC src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2959
       END IF;
2960
 
2961
       -- Validate label
2962
       -- For clearcase the label must be specified. For subversion it is not required.
2963
       IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+$','i') THEN
2964
         raise_application_error (-20000, 'Invalid CC label:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2965
       END IF;
2966
 
2967
     -- if Subversion
2968
     ELSIF (ivcs_type_id = 23) THEN
2969
       -- general validity
2970
       -- Not as picky as the RM Data entry
2971
       IF NOT REGEXP_LIKE(ssrc_path,'^([0-9a-z_\.\-]+)(\/([0-9a-z_\.\-]+))+$','i') THEN
2972
         raise_application_error (-20000, 'Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2973
       END IF;
2974
 
2975
       -- Validate Tag
2976
       -- May be a Peg or a Label
2977
       IF NOT REGEXP_LIKE(spkg_label,'^@?[0-9]+$','i') THEN
2978
           IF NOT REGEXP_LIKE(spkg_label,'^[0-9a-z_\.\-]+($|@[0-9]+)','i') THEN
2979
             raise_application_error (-20000, 'Invalid SVN tag:' || '"' || spkg_label || '"' || ' for package version:' || ipv_id || ', vcstag:' || '"' || vcstag || '"');
2980
           END IF;
2981
       END IF;
2982
 
2983
        -- Check for suitable ending
2984
        IF NOT REGEXP_LIKE(ssrc_path,'(\/tags$)|(\/branches\/)|(\/trunk$)','i') THEN
2985
            raise_application_error (-20000, 'Must end in /trunk or /tags/ or /branches/.... Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
2986
        END IF;
2987
 
2988
       -- Check for combined use of tags, branches, trunk or repeats of each
2989
       -- Count occurrences of /tags or /branches/ or /trunk
2990
       vcount:=0;
2991
       i:=1;
2992
       WHILE i > 0 LOOP
2993
         i:=REGEXP_INSTR(ssrc_path,'(\/tags(\/|$))|(\/branches(\/|$))|(\/trunk(\/|$))',i,1,1,'i');
2994
         IF i > 0 THEN
2995
           -- if found then increment count
2996
           vcount:=vcount+1;
2997
           i:=i-1;  -- move index back to "/"
2998
         END IF;
2999
       END LOOP;
3000
 
3001
       IF vcount = 0  THEN
3002
         raise_application_error (-20000, 'Must contain exactly one of the keywords /trunk, /tags, /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
3003
       END IF;
3004
 
3005
       IF vcount > 1  THEN
3006
         raise_application_error (-20000, 'Combined use of /trunk, /tags, or /branches/. Invalid SVN src path: ' || '"' || ssrc_path || '"' || ' for package version: ' || ipv_id || ', vcstag: ' || '"' || vcstag || '"');
3007
       END IF;
3008
 
3009
 
3010
     END IF;
3011
 
3012
     BEGIN
3013
       -- Get current vcs tag for specified package version
3014
       SELECT pv.src_path, pv.pkg_label, vc.tag as vcs_type
3015
       INTO old_src_path, old_pkg_label, old_vcs_type
3016
       FROM package_versions pv, vcs_type vc
3017
       WHERE pv.pv_id = ipv_id
3018
       AND pv.vcs_type_id = vc.vcs_type_id (+);
3019
 
3020
     EXCEPTION
3021
       WHEN NO_DATA_FOUND THEN
3022
         raise_application_error (-20000, 'Package version not found: ' || ipv_id);
3023
     END;      
3024
 
3025
     old_pkg_vcstag:= old_vcs_type || '::' || old_src_path;
3026
     IF (old_pkg_label IS NOT NULL) THEN
3027
       old_pkg_vcstag:=old_pkg_vcstag || '::' || old_pkg_label;
3028
     END IF;
3029
 
3030
     -- Create action description
3031
     -- This description will contain the old and new tags.
3032
     -- Its purpose is to provide information for tracking and for restoring previous vcs settings if a recovery is required.
3033
     -- An example of the action description is below:
3034
     --   OldTag:CC::/DPG_SWBase/tools::daf_tools_25.1.7016.cr NewTag:SVN::DPG_SWBase/tools/tags/daf_tools_25.1.7027.cr
3035
     saction_desc:='OldTag:' || old_pkg_vcstag || ' ' || 'NewTag:' || vcstag;
3036
 
3037
     -- Store new vcs details
3038
     UPDATE package_versions SET
3039
       src_path = ssrc_path,
3040
       pkg_label = spkg_label,
3041
       vcs_type_id = ivcs_type_id
3042
     WHERE
3043
       pv_id = ipv_id;
3044
 
3045
     -- Store action in action log so that we can back track and also restore vcs settings if required.
3046
     log_action (ipv_id,'VcsConversion',user_id,saction_desc);
3047
 
3048
   END update_vcs_details;
3049
 
1373 dpurdie 3050
END pk_rmapi;
1374 dpurdie 3051
/
3052
--------------------------------------------------------
3053
--  DDL for Package Body PK_BUILDAPI
3054
--------------------------------------------------------
1373 dpurdie 3055
 
3056
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI" 
3057
IS
3058
   /*-------------------------------------------------------------------------------------------------------*/
3059
   PROCEDURE add_product_component (
3060
      npvid           IN   NUMBER,
3061
      sosname         IN   VARCHAR2,
3062
      sorigfilepath   IN   VARCHAR2,
3063
      sfilename       IN   VARCHAR2,
3064
      sdestfilepath   IN   VARCHAR2,
3065
      nbytesize       IN   NUMBER,
3066
      scrccksum       IN   VARCHAR2
3067
   )
3068
   IS
3069
      nosid   NUMBER;
3070
   BEGIN
3071
      /*--------------- Business Rules Here -------------------*/
3072
      -- OS Name Requirements --
3073
      IF (sosname IS NULL)
3074
      THEN
3075
         raise_application_error (-20000, 'OsName cannot be NULL.');
3076
      END IF;
3077
 
3078
      -- File Requirements --
3079
      IF (NOT sfilename IS NULL)
3080
      THEN
3081
         IF (nbytesize IS NULL)
3082
         THEN
3083
            raise_application_error (-20000, 'Byte Size cannot be NULL.');
3084
         ELSIF (scrccksum IS NULL)
3085
         THEN
3086
            raise_application_error (-20000, 'CRC CKSUM cannot be NULL.');
3087
         END IF;
3088
      END IF;
3089
 
3090
      -- Folder Requirements --
3091
      -- No requirements for now.
3092
 
3093
      /*-------------------------------------------------------*/
3094
 
3095
      -- Get OsId
3096
      nosid := get_osid (sosname);
3097
 
3098
      -- Insert component entry
3099
      INSERT INTO product_components
3100
                  (pv_id, os_id, file_path, file_name, destination_path,
3101
                  byte_size, crc_cksum
3102
                  )
3103
         VALUES (npvid, nosid, sorigfilepath, sfilename, sdestfilepath,
3104
                  nbytesize, scrccksum
3105
                  );
3106
   EXCEPTION
3107
      WHEN DUP_VAL_ON_INDEX
3108
      THEN
3109
         raise_application_error (-20000,
3110
                                 'Cannot have duplicate product components.'
3111
                                 );
3112
   END;
3113
 
3114
/*-------------------------------------------------------------------------------------------------------*/
3115
   PROCEDURE remove_all_product_components (
3116
      npvid     IN   NUMBER,
3117
      sosname   IN   VARCHAR2
3118
   )
3119
   IS
3120
      nosid   NUMBER;
3121
   BEGIN
3122
/*--------------- Business Rules Here -------------------*/
3123
/*-------------------------------------------------------*/
3124
 
3125
      -- Get OsId
3126
      nosid := get_osid (sosname);
3127
 
3128
      -- Delete component entry
3129
      DELETE FROM product_components pc
3130
            WHERE pc.pv_id = npvid AND pc.os_id = nosid;
3131
   END;
3132
 
3133
/*-------------------------------------------------------------------------------------------------------*/
3134
   FUNCTION get_osid (sosname IN VARCHAR2)
3135
      RETURN NUMBER
3136
   IS
3137
      code   NUMBER;
3138
   BEGIN
3139
      -- Get Platform Code --
3140
      SELECT pf.code
3141
      INTO code
3142
      FROM platforms pf
3143
      WHERE UPPER (pf.NAME) = UPPER (sosname);
3144
 
3145
      RETURN code;
3146
   EXCEPTION
3147
      WHEN NO_DATA_FOUND
3148
      THEN
3149
         raise_application_error
3150
            (-20000,
3151
               'Platform '
3152
            || sosname
3153
            || ' is not valid. It needs to be added to PLATFORMS table in Release Manager.'
3154
            );
3155
         RAISE;
3156
   END;
3157
 
3158
/*-------------------------------------------------------------------------------------------------------
3159
Obsolete - Superseded by update_build_service_info
3160
*/
3161
 
3162
   PROCEDURE update_build_service (
3163
      sdatabaseserver   IN   VARCHAR2,
3164
      swebserver        IN   VARCHAR2,
3165
      smailserver       IN   VARCHAR2,
3166
      smailsender       IN   VARCHAR2,
3167
      sdiskspace        IN   VARCHAR2,
3168
      ssbommanagement   IN   VARCHAR2
3169
   )
3170
   IS
3171
   BEGIN
3172
      UPDATE build_service_config
3173
         SET config = sdatabaseserver
3174
      WHERE service = 'DATABASE SERVER';
3175
 
3176
      UPDATE build_service_config
3177
         SET config = swebserver
3178
      WHERE service = 'WEB SERVER';
3179
 
3180
      UPDATE build_service_config
3181
         SET config = smailserver
3182
      WHERE service = 'MAIL SERVER';
3183
 
3184
      UPDATE build_service_config
3185
         SET config = smailsender
3186
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3187
 
3188
      UPDATE build_service_config
3189
         SET config = sdiskspace
3190
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3191
 
3192
      UPDATE build_service_config
3193
         SET config = ssbommanagement
3194
      WHERE service = 'SBOM MANAGEMENT';
3195
   END;
3196
 
3197
/*-------------------------------------------------------------------------------------------------------*/
3198
   PROCEDURE update_build_service_info (
3199
      sdatabaseserver   IN   VARCHAR2,
3200
      sarchiveserver    IN   VARCHAR2,
3201
      smailserver       IN   VARCHAR2,
3202
      smailsender       IN   VARCHAR2,
3203
      sdiskspace        IN   VARCHAR2,
3204
      ssbommanagement   IN   VARCHAR2
3205
   )
3206
   IS
3207
   BEGIN
3208
      UPDATE build_service_config
3209
         SET config = sdatabaseserver
3210
      WHERE service = 'DATABASE SERVER';
3211
 
3212
      UPDATE build_service_config
3213
         SET config = sarchiveserver
3214
      WHERE service = 'ARCHIVE SERVER';
3215
 
3216
      UPDATE build_service_config
3217
         SET config = smailserver
3218
      WHERE service = 'MAIL SERVER';
3219
 
3220
      UPDATE build_service_config
3221
         SET config = smailsender
3222
      WHERE service = 'BUILD FAILURE MAIL SENDER';
3223
 
3224
      UPDATE build_service_config
3225
         SET config = sdiskspace
3226
      WHERE service = 'DPKG_ARCHIVE DISK SPACE USED';
3227
 
3228
      UPDATE build_service_config
3229
         SET config = ssbommanagement
3230
      WHERE service = 'SBOM MANAGEMENT';
3231
   END;
3232
 
3233
 
3234
/*-------------------------------------------------------------------------------------------------------*/
3235
   PROCEDURE add_gbe_machtype (sgbevalue IN VARCHAR2)
3236
   IS
3237
      gbe_id   NUMBER;
3238
   BEGIN
3239
      -- Get GBE_ID
3240
      SELECT seq_gbe_id.NEXTVAL
3241
      INTO gbe_id
3242
      FROM DUAL;
3243
 
3244
      INSERT INTO gbe_machtype
3245
                  (gbe_id, gbe_value
3246
                  )
3247
         VALUES (gbe_id, sgbevalue
3248
                  );
3249
   END;
3250
 
3251
/*-------------------------------------------------------------------------------------------------------*/
3252
   PROCEDURE remove_gbe_machtype (ngbe_id IN NUMBER)
3253
   IS
3254
   BEGIN
3255
      DELETE FROM gbe_machtype
3256
            WHERE gbe_id = ngbe_id;
3257
   END;
3258
 
3259
/*-------------------------------------------------------------------------------------------------------*/
3260
   PROCEDURE update_gbe_machtype (ngbe_id IN NUMBER, sgbevalue IN VARCHAR2)
3261
   IS
3262
   BEGIN
3263
      UPDATE gbe_machtype
3264
         SET gbe_value = sgbevalue
3265
      WHERE gbe_id = ngbe_id;
3266
   END;
3267
 
3268
/*-------------------------------------------------------------------------------------------------------*/
3269
  --This function is obsolete.  It was replaced by add_daemon_config. Done for DEVI-046806
3270
   PROCEDURE add_daemon (
3271
      sdaemonhostname   IN   VARCHAR2,
3272
      nrtagid           IN   NUMBER,
3273
      ngbeid            IN   NUMBER,
3274
      sgbebuildfilter   IN   VARCHAR2
3275
   )
3276
   IS
3277
      nrecordnumber   NUMBER;
3278
      nrconid         NUMBER;
3279
   BEGIN
3280
      -- Get RCON_ID
3281
      SELECT seq_rcon_id.NEXTVAL
3282
      INTO nrconid
3283
      FROM DUAL;
3284
 
3285
      SELECT COUNT (*)
3286
      INTO nrecordnumber
3287
      FROM release_config
3288
      WHERE rtag_id = nrtagid;
3289
 
3290
      IF nrecordnumber = 0
3291
      THEN
3292
         INSERT INTO release_config
3293
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3294
                     gbe_id, gbe_buildfilter
3295
                     )
3296
            VALUES (nrconid, nrtagid, sdaemonhostname, 'M',
3297
                     ngbeid, sgbebuildfilter
3298
                     );
3299
      ELSE
3300
         INSERT INTO release_config
3301
                     (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3302
                     gbe_id, gbe_buildfilter
3303
                     )
3304
            VALUES (nrconid, nrtagid, sdaemonhostname, 'S',
3305
                     ngbeid, sgbebuildfilter
3306
                     );
3307
      END IF;
3308
 
3309
      -- A newly configured daemon should initially be paused (DEVI-047277)
3310
      INSERT INTO run_level
3311
                  (rcon_id, pause)
3312
           VALUES (nrconid, 1);
3313
   END;
3314
 
3315
/*-------------------------------------------------------------------------------------------------------*/
3316
   PROCEDURE delete_daemon (srconidlist IN VARCHAR2)
3317
   IS
3318
   BEGIN
3319
      -- Entries in the daemon_action_log, run_level and abt_action_log tables must be deleted first.
3320
      DELETE FROM daemon_action_log
3321
            WHERE rcon_id IN (
3322
                     SELECT *
3323
                     FROM THE
3324
                              (SELECT CAST
3325
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3326
                                          )
3327
                                 FROM DUAL
3328
                              ));
3329
 
3330
      DELETE FROM run_level
3331
            WHERE rcon_id IN (
3332
                     SELECT *
3333
                     FROM THE
3334
                              (SELECT CAST
3335
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3336
                                          )
3337
                                 FROM DUAL
3338
                              ));
3339
 
3340
      DELETE FROM abt_action_log
3341
            WHERE rcon_id IN (
3342
                     SELECT *
3343
                     FROM THE
3344
                              (SELECT CAST
3345
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3346
                                          )
3347
                                 FROM DUAL
3348
                              ));
3349
 
3350
      -- Once entries in daemon_action_log, run_level and abt_action_log are removed, the daemon is deleted.
3351
      DELETE FROM release_config
3352
            WHERE rcon_id IN (
3353
                     SELECT *
3354
                     FROM THE
3355
                              (SELECT CAST
3356
                                          (in_list_number (srconidlist) AS relmgr_number_tab_t
3357
                                          )
3358
                                 FROM DUAL
3359
                              ));
3360
   END;
3361
 
3362
/*-------------------------------------------------------------------------------------------------------*/
3363
  --This function is obsolete.  It was replaced by update_daemon_config for DEVI-046806
3364
   PROCEDURE update_daemon (
3365
      sdaemonhostname   IN   VARCHAR2,
3366
      nrconid           IN   NUMBER,
3367
      ngbeid            IN   NUMBER,
3368
      sgbebuildfilter   IN   VARCHAR2
3369
   )
3370
   IS
3371
   BEGIN
3372
      UPDATE release_config
3373
         SET daemon_hostname = sdaemonhostname,
3374
            gbe_id = ngbeid,
3375
            gbe_buildfilter = sgbebuildfilter
3376
      WHERE rcon_id = nrconid;
3377
   END;
3378
 
3379
/*-------------------------------------------------------------------------------------------------------*/
3380
   PROCEDURE insert_schedule_info (
3381
      dschedulepause     IN   DATE,
3382
      dscheduleresume    IN   DATE,
3383
      crepeat            IN   VARCHAR2,
3384
      cindefinitepause   IN   VARCHAR2
3385
   )
3386
   IS
3387
      nscheduledid   NUMBER;
3388
   BEGIN
3389
      -- Get Next Available Scheduled Id
3390
      SELECT seq_scheduled_id.NEXTVAL
3391
      INTO nscheduledid
3392
      FROM DUAL;
3393
 
3394
      INSERT INTO run_level_schedule
3395
         VALUES (nscheduledid, dschedulepause, dscheduleresume, crepeat,
3396
                  cindefinitepause);
3397
   END;
3398
 
3399
/*-------------------------------------------------------------------------------------------------------*/
3400
   PROCEDURE delete_schedule (nscheduleid IN NUMBER)
3401
   IS
3402
   BEGIN
3403
      DELETE FROM run_level_schedule
3404
            WHERE scheduled_id = nscheduleid;
3405
   END;
3406
 
3407
/*-------------------------------------------------------------------------------------------------------*/
3408
   PROCEDURE set_infinite_pause
3409
   IS
3410
      nscheduledid   NUMBER;
3411
   BEGIN
3412
      -- Get Next Available Scheduled Id
3413
      SELECT seq_scheduled_id.NEXTVAL
3414
      INTO nscheduledid
3415
      FROM DUAL;
3416
 
3417
      INSERT INTO run_level_schedule
3418
         VALUES (nscheduledid, NULL, NULL, NULL, 'P');
3419
   END;
3420
 
3421
/*-------------------------------------------------------------------------------------------------------*/
3422
   PROCEDURE set_resume
3423
   IS
3424
   BEGIN
3425
      DELETE FROM run_level_schedule
3426
            WHERE indefinite_pause = 'P';
3427
   END;
3428
 
3429
/*-------------------------------------------------------------------------------------------------------*/
3430
   PROCEDURE delete_out_of_date_schedule
3431
   IS
3432
   BEGIN
3433
      DELETE FROM run_level_schedule
3434
            WHERE scheduled_resume < ora_sysdatetime AND repeat = 0;
3435
   END;
3436
 
3437
/*-------------------------------------------------------------------------------------------------------*/
3438
   PROCEDURE set_daemon_resume (nrconid IN NUMBER)
3439
   IS
3440
   BEGIN
3441
      UPDATE run_level
3442
         SET PAUSE = NULL
3443
      WHERE rcon_id = nrconid;
3444
   END;
3445
 
3446
/*-------------------------------------------------------------------------------------------------------*/
3447
   PROCEDURE set_daemon_pause (nrconid IN NUMBER)
3448
   IS
3449
   BEGIN
3450
      UPDATE run_level
3451
         SET PAUSE = 1
3452
      WHERE rcon_id = nrconid;
3453
   END;
3454
/*-------------------------------------------------------------------------------------------------------*/
3455
   PROCEDURE set_daemon_disable (nrconid NUMBER)
3456
   IS
3457
   BEGIN
3458
      UPDATE run_level
3459
         SET PAUSE = 2
3460
      WHERE rcon_id = nrconid;
3461
   END;
3462
 
3463
/*-------------------------------------------------------------------------------------------------------*/
3464
   PROCEDURE set_daemon_states (nrtagid NUMBER, nstate NUMBER)
3465
   IS
3466
   BEGIN
3467
     UPDATE run_level
3468
     SET pause = nstate
3469
     WHERE rcon_id IN
3470
     (SELECT rc.rcon_id FROM release_config rc WHERE rc.rtag_id = nrtagid);
3471
   END;
3472
 
3473
/*-------------------------------------------------------------------------------------------------------*/
3474
   -- inserts a new daemon instruction
3475
   -- This is for use by the Release Manager Website code.
3476
   --
3477
   PROCEDURE insert_daemon_inst
3478
   ( nOp_code IN NUMBER
3479
   , nRtag_id IN NUMBER
3480
   , nPv_id IN NUMBER
3481
   , nSchedDate IN DATE
3482
   , nRepeatSecs IN NUMBER
3483
   , nAddedDate IN DATE
3484
   , nUser_id IN NUMBER
3485
   ) IS
3486
      nInstId   NUMBER;
3487
   BEGIN
3488
      -- Get Next Available Scheduled Id
3489
      SELECT seq_daemon_instruction_id.NEXTVAL
3490
      INTO nInstId
3491
      FROM DUAL;
3492
 
3493
      INSERT INTO Daemon_Instructions
3494
         VALUES (nInstId, nOp_code, nRtag_id,
3495
                  nPv_id, nSchedDate, nRepeatSecs,
3496
                  nAddedDate, nUser_id, '0');
3497
   EXCEPTION
3498
      WHEN DUP_VAL_ON_INDEX
3499
      THEN
3500
         raise_application_error (-20000,
3501
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3502
                                 );
3503
      WHEN OTHERS
3504
      THEN
3505
         raise;
3506
   END insert_daemon_inst;
3507
 
3508
/*-------------------------------------------------------------------------------------------------------*/
3509
   -- Deletes a daemon instruction matching the specified instruction ID
3510
   --
3511
   PROCEDURE del_daemon_inst
3512
   ( nInstId IN NUMBER
3513
   ) IS
3514
 
3515
   BEGIN
3516
      DELETE FROM Daemon_Instructions
3517
      WHERE DAEMON_INSTRUCTIONS_ID = nInstId;
3518
 
3519
   END del_daemon_inst;
3520
 
3521
/*-------------------------------------------------------------------------------------------------------*/
3522
   -- Deletes a daemon instruction matching the specified op-code, ratag, and pv_id
3523
   --
3524
   PROCEDURE del_daemon_inst_by_rtag_pvid(
3525
      nOp_code IN NUMBER,
3526
      nRtag_id IN NUMBER,
3527
      nPv_id IN NUMBER
3528
   ) IS
3529
   BEGIN
3530
      DELETE FROM Daemon_Instructions
3531
      WHERE OP_CODE = nOp_code
3532
      AND RTAG_ID = nRtag_id
3533
      AND PV_ID   = nPv_id;
3534
 
3535
   END del_daemon_inst_by_rtag_pvid;
3536
 
3537
/*-------------------------------------------------------------------------------------------------------*/
3538
   -- Updates a daemon instruction
3539
   -- This is for use by the Release Manager Website code.
3540
   --
3541
   PROCEDURE update_daemon_inst
3542
   ( nInstId IN NUMBER
3543
   , nOp_code IN NUMBER
3544
   , nRtag_id IN NUMBER
3545
   , nPv_id IN NUMBER
3546
   , nSchedDate IN DATE
3547
   , nRepeatSecs IN NUMBER
3548
   , nAddedDate IN DATE
3549
   , nUser_id IN NUMBER
3550
   ) IS
3551
      CURSOR daemon_inst_cur IS
3552
         SELECT *
3553
         FROM daemon_instructions di
3554
         WHERE di.DAEMON_INSTRUCTIONS_ID = nInstId;
3555
 
3556
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3557
 
3558
      exc_inst_removed EXCEPTION;
3559
   BEGIN
3560
      OPEN daemon_inst_cur;
3561
 
3562
      FETCH daemon_inst_cur
3563
      INTO daemon_inst_rec;
3564
 
3565
      IF daemon_inst_cur%FOUND THEN
3566
 
3567
         UPDATE Daemon_Instructions
3568
         SET op_code = nOp_code,
3569
            rtag_id = nRtag_id,
3570
            pv_id   = nPv_id,
3571
            scheduled_datetime = nSchedDate,
3572
            repeat_secs = nRepeatSecs,
3573
            added_datetime = nAddedDate,
3574
            user_id = nUser_id,
3575
            in_progress = '0'
3576
         WHERE daemon_instructions_id = nInstId;
3577
      ELSE
3578
         raise exc_inst_removed;
3579
      END IF;
3580
 
3581
      CLOSE daemon_inst_cur;
3582
   EXCEPTION
3583
      WHEN DUP_VAL_ON_INDEX
3584
      THEN
3585
         raise_application_error (-20000,
3586
                                 'Table already contains a record with the specified OPERATION, RELEASE, and PACKAGE VERSION'
3587
                                 );
3588
      WHEN exc_inst_removed
3589
      THEN
3590
         raise_application_error (-20000,
3591
                                 'Record was probably deleted by the Buildtool during your edit-form session. Please create a new Daemon Instruction.'
3592
                                 );
3593
      WHEN OTHERS
3594
      THEN
3595
         raise;
3596
   END update_daemon_inst;
3597
 
3598
/*-------------------------------------------------------------------------------------------------------*/
3599
   -- Returns a comma-separated list of operation codes found for a given rtag and pv_id combination
3600
   -- This is for use by the Release Manager Website code.
3601
   --
3602
   FUNCTION daemon_ops_for_rtag_pvid(
3603
      nRtag_id IN NUMBER,
3604
      nPv_id IN NUMBER
3605
   ) RETURN VARCHAR2
3606
   IS
3607
      CURSOR daemon_inst_cur IS
3608
         SELECT di.OP_CODE
3609
         FROM daemon_instructions di
3610
         WHERE di.RTAG_ID = nRtag_id
3611
            AND di.PV_ID = nPv_id;
3612
 
3613
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3614
 
3615
      sRetList VARCHAR2(4000) := '';
3616
 
3617
   BEGIN
3618
      OPEN daemon_inst_cur;
3619
 
3620
      FETCH daemon_inst_cur
3621
      INTO daemon_inst_rec;
3622
 
3623
      WHILE daemon_inst_cur%FOUND
3624
      LOOP
3625
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3626
 
3627
         FETCH daemon_inst_cur
3628
         INTO daemon_inst_rec;
3629
      END LOOP;
3630
 
3631
      CLOSE daemon_inst_cur;
3632
 
3633
      RETURN sRetList;
3634
   END daemon_ops_for_rtag_pvid;
3635
/*-------------------------------------------------------------------------------------------------------*/
3636
   -- Returns a comma-separated list of operation codes found for a given rtag
3637
   -- This is for use by the Release Manager Website code.
3638
   --
3639
   FUNCTION daemon_ops_for_rtag(
3640
      nRtag_id IN NUMBER
3641
   ) RETURN VARCHAR2
3642
   IS
3643
      CURSOR daemon_inst_cur IS
3644
         SELECT di.OP_CODE
3645
         FROM daemon_instructions di
3646
         WHERE di.RTAG_ID = nRtag_id;
3647
 
3648
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3649
 
3650
      sRetList VARCHAR2(4000) := '';
3651
 
3652
   BEGIN
3653
      OPEN daemon_inst_cur;
3654
 
3655
      FETCH daemon_inst_cur
3656
      INTO daemon_inst_rec;
3657
 
3658
      WHILE daemon_inst_cur%FOUND
3659
      LOOP
3660
         sRetList := sRetList || daemon_inst_rec.op_code || ',';
3661
 
3662
         FETCH daemon_inst_cur
3663
         INTO daemon_inst_rec;
3664
      END LOOP;
3665
 
3666
      CLOSE daemon_inst_cur;
3667
 
3668
      RETURN sRetList;
3669
   END daemon_ops_for_rtag;
3670
/*-------------------------------------------------------------------------------------------------------*/
3671
   -- Gets a record from the daemon instruction table that can be carried out now and returns the fields
3672
   -- in the record a daemon will need
3673
   -- The Buildtool should use this to find a job to do for a particular release. It should then call
3674
   -- mark_daemon_inst_in_progress(inst_id) before carrying out the work, and then call
3675
   -- mark_daemon_inst_completed(inst_id) to signal its completion.
3676
   -- Can be called repeatedly to get a full list of all instructions for a release, by passing back in
3677
   -- the instruction ID obtained from the previous call (the 1st call should use 0)
3678
   -- Can be called repeatedly to get a full list of all instructions of a specific op-code value for a release,
3679
   -- by passing back in an op-code value of 0 or higher (use -1 if no op-code filtering is needed)
3680
   -- Returns 1 if a record was found, else 0.
3681
   --
3682
   FUNCTION get_daemon_inst(
3683
      nRtag_id IN NUMBER,
3684
      nInst_id IN OUT NUMBER,
3685
      nOp_code IN OUT NUMBER,
3686
      nPv_id OUT NUMBER,
3687
      nUser_id OUT NUMBER,
3688
      nInProgress OUT NUMBER
3689
   ) RETURN NUMBER
3690
   IS
3691
      CURSOR daemon_inst_cur IS
3692
         SELECT di.daemon_instructions_id, di.op_code, di.pv_id ,di.user_id, di.in_progress
3693
           FROM daemon_instructions di
3694
          WHERE di.rtag_id = nRtag_id
3695
            AND di.daemon_instructions_id > nInst_id
3696
            AND di.scheduled_datetime <= ora_sysdatetime
3697
            AND ((nOp_code = -1) OR (nOp_code = di.op_code))
3698
            AND rownum <= 1
3699
       ORDER BY di.daemon_instructions_id;
3700
 
3701
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3702
   BEGIN
3703
      OPEN daemon_inst_cur;
3704
 
3705
      FETCH daemon_inst_cur
3706
      INTO daemon_inst_rec;
3707
 
3708
      -- If we found a record, return it.
3709
      IF daemon_inst_cur%FOUND THEN
3710
         nInst_id := daemon_inst_rec.daemon_instructions_id;
3711
         nOp_code := daemon_inst_rec.op_code;
3712
         nPv_id   := daemon_inst_rec.pv_id;
3713
         nUser_id := daemon_inst_rec.user_id;
3714
         IF daemon_inst_rec.in_progress = '1' THEN
3715
            nInProgress := 1;
3716
         ELSE
3717
            nInProgress := 0;
3718
         END IF;
3719
         CLOSE daemon_inst_cur;
3720
         RETURN 1;
3721
      END IF;
3722
 
3723
      CLOSE daemon_inst_cur;
3724
      RETURN 0;
3725
 
3726
   END get_daemon_inst;
3727
/*-------------------------------------------------------------------------------------------------------*/
3728
   -- Marks a daemon instruction as being processed by a daemon
3729
   -- The Buildtool should use this before it embarks on the work the instruction commands
3730
   --
3731
   PROCEDURE mark_daemon_inst_in_progress( nInstId IN NUMBER )
3732
   IS
3733
   BEGIN
3734
      UPDATE Daemon_Instructions
3735
      SET in_progress = '1'
3736
      WHERE daemon_instructions_id = nInstId;
3737
 
3738
   END mark_daemon_inst_in_progress;
3739
 
3740
/*-------------------------------------------------------------------------------------------------------*/
3741
   -- Once the Buildtool has finished carrying out the daemon instruction, it should call this stored
3742
   -- procedure in order to either delete the instruction or update it in the case where it is a repeating
3743
   -- instruction.
3744
   --
3745
   PROCEDURE mark_daemon_inst_completed( nInstId IN NUMBER )
3746
   IS
3747
      repSecs NUMBER;
3748
      schedDate  DATE;
3749
 
3750
      CURSOR daemon_inst_cur IS
3751
         SELECT di.REPEAT_SECS AS repSecs, di.SCHEDULED_DATETIME AS schedDate
3752
         FROM daemon_instructions di
3753
         WHERE di.daemon_instructions_id = nInstId;
3754
 
3755
      daemon_inst_rec   daemon_inst_cur%ROWTYPE;
3756
   BEGIN
3757
      OPEN daemon_inst_cur;
3758
 
3759
      FETCH daemon_inst_cur
3760
      INTO daemon_inst_rec;
3761
 
3762
      IF daemon_inst_cur%FOUND THEN
3763
 
3764
         -- if instruction repeats daily, add 1 day to the scheduled time and update the record
3765
         IF daemon_inst_rec.repSecs = 86400 THEN
3766
            UPDATE Daemon_Instructions
3767
               SET scheduled_datetime = daemon_inst_rec.schedDate + 1,
3768
                  in_progress = '0'
3769
            WHERE daemon_instructions_id = nInstId;
3770
         ELSE
3771
            -- Delete the daemon instruction, we are done with it
3772
            del_daemon_inst(nInstId);
3773
         END IF;
3774
      END IF;
3775
 
3776
      CLOSE daemon_inst_cur;
3777
 
3778
   EXCEPTION
3779
      WHEN OTHERS
3780
      THEN
3781
         raise;
3782
 
3783
   END mark_daemon_inst_completed;
3784
/*-------------------------------------------------------------------------------------------------------*/
3785
   -- This function deletes any old daemon instruction that appears stranded due to a problem that might
3786
   -- have occured during buildtool operation such as might occur if the buildtool or the machine it was
3787
   -- hosted on came down whilst it was processing a daemon instruction.
3788
   PROCEDURE cleanup_stranded_daemon_insts
3789
   IS
3790
   BEGIN
3791
      -- delete records at least two days old
3792
      DELETE FROM daemon_instructions di
3793
      WHERE  (di.scheduled_datetime + 5) <= ora_sysdatetime;
3794
 
3795
   END cleanup_stranded_daemon_insts;
3796
/*-------------------------------------------------------------------------------------------------------*/
3797
  --This function supersedes function, add_daemon. Done for DEVI-046806
3798
   PROCEDURE add_daemon_config (
3799
      nrtagid           IN   NUMBER,
3800
      nbmcon_id         IN   NUMBER,
3801
      sdaemon_mode      IN   VARCHAR2,
3802
      sgbebuildfilter   IN   VARCHAR2
3803
   )
3804
   IS
3805
      nrecordnumber   NUMBER;
3806
      nrconid         NUMBER;
3807
      sdaemonhostname VARCHAR2(50);
3808
      ngbeid         NUMBER;
3809
   BEGIN
3810
      -- Get RCON_ID
3811
      SELECT seq_rcon_id.NEXTVAL
3812
      INTO nrconid
3813
      FROM DUAL;
3814
 
3815
      SELECT COUNT (*)
3816
      INTO nrecordnumber
3817
      FROM release_config
3818
      WHERE rtag_id = nrtagid;
3819
 
3820
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3821
      FROM build_machine_config
3822
      WHERE bmcon_id = nbmcon_id;
3823
 
3824
      INSERT INTO release_config
3825
             (rcon_id, rtag_id, daemon_hostname, daemon_mode,
3826
                gbe_id, gbe_buildfilter)
3827
      VALUES (nrconid, nrtagid, sdaemonhostname, sdaemon_mode,
3828
                ngbeid, sgbebuildfilter);
3829
 
3830
      -- A newly configured daemon should initially be paused (DEVI-047277)
3831
      INSERT INTO run_level
3832
                  (rcon_id, pause)
3833
           VALUES (nrconid, 2);
3834
 
3835
   END;
3836
 
3837
/*-------------------------------------------------------------------------------------------------------*/
3838
  --This function supersedes function, update_daemon. Done for DEVI-046806
3839
   PROCEDURE update_daemon_config (
3840
      nrconid           IN   NUMBER,
3841
      nbmcon_id         IN   NUMBER,
3842
      sdaemon_mode      IN   VARCHAR2,
3843
      sgbebuildfilter   IN   VARCHAR2
3844
   )
3845
   IS
3846
      sdaemonhostname VARCHAR2(50);
3847
      ngbeid         NUMBER;
3848
   BEGIN
3849
 
3850
      SELECT machine_hostname,gbe_id INTO sdaemonhostname,ngbeid
3851
      FROM build_machine_config
3852
      WHERE bmcon_id = nbmcon_id;
3853
 
3854
      UPDATE release_config
3855
         SET daemon_hostname = sdaemonhostname,
3856
            gbe_id = ngbeid,
3857
            daemon_mode = sdaemon_mode,
3858
            gbe_buildfilter = sgbebuildfilter
3859
      WHERE rcon_id = nrconid;
3860
   END;
3861
 
3862
 
3863
/*-------------------------------------------------------------------------------------------------------*/
3864
   PROCEDURE add_build_machine (
3865
      sdisplay_name          IN   VARCHAR2,
3866
      smachine_hostname      IN   VARCHAR2,
3867
      ngbeid                 IN   NUMBER,
3868
      sdescription           IN   VARCHAR2
3869
   )
3870
   IS
3871
      nrecordnumber   NUMBER;
3872
      nbmcon_id       NUMBER;
3873
   BEGIN
3874
      -- Get BMCON_ID
3875
      SELECT seq_bmcon_id.NEXTVAL INTO nbmcon_id FROM DUAL;
3876
 
3877
      INSERT INTO build_machine_config(bmcon_id, display_name, machine_hostname,gbe_id,description)
3878
            VALUES (nbmcon_id,sdisplay_name,smachine_hostname,ngbeid,sdescription);
3879
 
3880
   EXCEPTION
3881
      WHEN DUP_VAL_ON_INDEX
3882
      THEN
3883
         raise_application_error (-20000,
3884
                                 'Cannot have duplicate machines.'
3885
                                 );
3886
 
3887
   END;
3888
 
3889
/*-------------------------------------------------------------------------------------------------------*/
3890
   PROCEDURE delete_build_machine (sbmcon_id_list IN VARCHAR2)
3891
   IS
3892
   BEGIN
3893
      DELETE FROM build_machine_config
3894
            WHERE bmcon_id IN (
3895
                     SELECT * FROM THE
3896
                              (SELECT CAST
3897
                                          (in_list_number (sbmcon_id_list) AS relmgr_number_tab_t
3898
                                          )
3899
                                 FROM DUAL
3900
                              ));
3901
   END;
3902
 
3903
 
3904
/*-------------------------------------------------------------------------------------------------------*/
3905
   PROCEDURE update_build_machine (
3906
      nbmcon_id              IN   NUMBER,
3907
      sdisplay_name          IN   VARCHAR2,
3908
      smachine_hostname      IN   VARCHAR2,
3909
      ngbeid                 IN   NUMBER,
3910
      sdescription           IN   VARCHAR2
3911
   )
3912
   IS
3913
   BEGIN
3914
      UPDATE build_machine_config
3915
         SET display_name = sdisplay_name,
3916
             machine_hostname = smachine_hostname,
3917
             gbe_id = ngbeid,
3918
             description = sdescription
3919
      WHERE bmcon_id = nbmcon_id;
3920
   EXCEPTION
3921
      WHEN DUP_VAL_ON_INDEX
3922
      THEN
3923
         raise_application_error (-20000,
3924
                                 'Cannot have duplicate machines.'
3925
                                 );
3926
   END;
3927
END pk_buildapi;
1374 dpurdie 3928
/
3929
--------------------------------------------------------
3930
--  DDL for Package Body PK_PACKAGE
3931
--------------------------------------------------------
1373 dpurdie 3932
 
3933
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE" 
3934
IS
3935
   /*-------------------------------------------------------------------------------------------------------*/
3936
   PROCEDURE new_version (
3937
      nlastpvid                   IN       NUMBER,
3938
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
3939
      cbuildtype                  IN       CHAR,
3940
      nsettopvid                  IN       NUMBER DEFAULT NULL,
3941
      nrtagid                     IN       NUMBER,
3942
      nuserid                     IN       NUMBER,
3943
      enumissues_state_imported   IN       NUMBER,
3944
      returnpvid                  OUT      NUMBER
3945
   )
3946
   IS
3947
      origpkg_id                  package_versions.pkg_id%TYPE;
3948
      origdlocked                 package_versions.dlocked%TYPE;
3949
      ssv_mm                      package_versions.v_mm%TYPE;
3950
      ssv_nmm                     package_versions.v_nmm%TYPE;
3951
      ssv_ext                     package_versions.v_ext%TYPE;
3952
      spackageversion             VARCHAR2 (4000);
3953
      nissuestypes                NUMBER;
3954
      nviewid                     NUMBER;
3955
      reccount                    NUMBER;
3956
      isreleased                  package_versions.dlocked%TYPE := 'N';
3957
      slabel                      VARCHAR2 (4000)               := NULL;
3958
 
3959
      CURSOR package_versions_cur
3960
      IS
3961
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
3962
           FROM package_versions pv
3963
          WHERE pv.pkg_version = snewpkgversion
3964
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
3965
                                         FROM package_versions origpv
3966
                                        WHERE origpv.pv_id = nlastpvid);
3967
 
3968
      package_versions_rec package_versions_cur%ROWTYPE;
3969
 
3970
      CURSOR clone_package_versions_cur
3971
      IS
3972
         SELECT DISTINCT pkg_id, dlocked
3973
                    FROM package_versions
3974
                   WHERE pv_id = nlastpvid;
3975
 
3976
      clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
3977
   BEGIN
3978
      spackageversion := snewpkgversion;
3979
 
3980
      IF nsettopvid IS NULL
3981
      THEN
3982
         -- SetToPv_id is not supplied, hence proceed.
3983
 
3984
         /* ---------------------------------------------------- */
3985
         /* Find id package_version exists                       */
3986
         /* ---------------------------------------------------- */
3987
         OPEN package_versions_cur;
3988
 
3989
         FETCH package_versions_cur
3990
          INTO package_versions_rec;
3991
 
3992
         IF package_versions_cur%NOTFOUND
3993
         THEN
3994
            ---  Create brand new package ---
3995
            SELECT seq_pv_id.NEXTVAL
3996
              INTO returnpvid
3997
              FROM DUAL;
3998
 
3999
            -- Split Version to get extention + other
4000
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
4001
 
4002
            -- Get previous package to clone from
4003
            OPEN clone_package_versions_cur;
4004
 
4005
            FETCH clone_package_versions_cur
4006
             INTO clone_package_versions_rec;
4007
 
4008
            origpkg_id := clone_package_versions_rec.pkg_id;
4009
            origdlocked := clone_package_versions_rec.dlocked;
4010
 
4011
            CLOSE clone_package_versions_cur;
4012
 
4013
            -- Automated built config
4014
            IF (cbuildtype = 'A')
4015
            THEN
4016
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
4017
               -- Make sure that version is still unique
4018
            END IF;
4019
 
4020
            -- Clone Package Version Details --
4021
            INSERT INTO package_versions(pv_id, pkg_id, pkg_version, dlocked, created_stamp,
4022
                                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
4023
                                         v_ext, src_path, pv_description, pv_overview,
4024
                                         last_pv_id, owner_id, is_deployable,
4025
                                         is_build_env_required, build_type, bs_id, is_autobuildable, ripple_field)
4026
                 SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
4027
                        spackageversion AS pkg_version, 'N' AS dlocked,
4028
                        ora_sysdate AS created_stamp, nuserid AS creator_id,
4029
                        ora_sysdatetime AS modified_stamp,
4030
                        nuserid AS modifier_id, ssv_mm AS v_mm,
4031
                        ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
4032
                        pv.pv_description, pv.pv_overview,
4033
                        nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
4034
                        pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable, pv.ripple_field
4035
                   FROM package_versions pv
4036
                  WHERE pv.pv_id = nlastpvid;
4037
 
4038
            -- Set Issues Type for cloning ---
4039
            IF origdlocked = 'Y'
4040
            THEN
4041
               nissuestypes := enumissues_state_imported;
4042
            ELSE
4043
               nissuestypes := NULL;
4044
            END IF;
4045
 
4046
            -- Update Label for automated built
4047
            IF (cbuildtype = 'A')
4048
            THEN
4049
               slabel := get_automated_label (returnpvid);
4050
 
4051
               UPDATE package_versions pv
4052
                  SET pv.pkg_label = slabel
4053
                WHERE pv.pv_id = returnpvid;
4054
            END IF;
4055
 
4056
            basic_clone (nlastpvid,
4057
                         returnpvid,
4058
                         nrtagid,
4059
                         nuserid,
4060
                         origpkg_id,
4061
                         nissuestypes
4062
                        );
4063
         ELSE
4064
            --- Package already exists, hence reuse ---
4065
            returnpvid := package_versions_rec.pv_id;
4066
            isreleased := package_versions_rec.dlocked;
4067
         END IF;
4068
 
4069
         CLOSE package_versions_cur;
4070
      ELSE
4071
         returnpvid := nsettopvid;
4072
      END IF;
4073
   END new_version;
4074
 
4075
/*-------------------------------------------------------------------------------------------------------*/
4076
   PROCEDURE change_state (
4077
      pvid       IN   NUMBER,
4078
      newstate   IN   package_versions.dlocked%TYPE,
4079
      userid     IN   NUMBER
4080
   )
4081
   IS
4082
   BEGIN
4083
      -- Set package in Released mode
4084
      UPDATE package_versions pv
4085
         SET pv.dlocked = newstate,
4086
             pv.modified_stamp = ora_sysdatetime,
4087
             pv.modifier_id = userid
4088
       WHERE pv.pv_id = pvid;
4089
 
4090
      -- Log action --
4091
      IF newstate = 'Y'
4092
      THEN
4093
         -- RELEASED --
4094
         log_action (pvid,
4095
                     'makeofficial',
4096
                     userid,
4097
                     'Package state change to: Released'
4098
                    );
4099
      ELSIF newstate = 'N'
4100
      THEN
4101
         -- UNLOCKED --
4102
         log_action (pvid,
4103
                     'makeunofficial',
4104
                     userid,
4105
                     'Package state change to: Ulocked'
4106
                    );
4107
      ELSIF newstate = 'P'
4108
      THEN
4109
         -- PENDING APPROVAL --
4110
         log_action (pvid,
4111
                     'add_to_planned',
4112
                     userid,
4113
                     'Package state change to: Pending Approval'
4114
                    );
4115
      ELSIF newstate = 'R'
4116
      THEN
4117
         -- REJECTED --
4118
         log_action (pvid,
4119
                     'reject_package',
4120
                     userid,
4121
                     'Package state change to: Rejected'
4122
                    );
4123
      ELSIF newstate = 'A'
4124
      THEN
4125
         -- APPROVED --
4126
         log_action (pvid,
4127
                     'approve_package',
4128
                     userid,
4129
                     'Package state change to: Approved'
4130
                    );
4131
      END IF;
4132
   END;
4133
 
4134
/*-------------------------------------------------------------------------------------------------------*/
4135
   PROCEDURE destroy_package (
4136
      pvid               IN       NUMBER,
4137
      overridewarnings   IN       CHAR DEFAULT 'N',
4138
      problemstring      OUT      VARCHAR2
4139
   )
4140
   IS
4141
      LOCKED     CHAR;
4142
      pkgid      NUMBER;
4143
      ROWCOUNT   NUMBER;
4144
   BEGIN
4145
      /*
4146
      || This will destroy all package details from database.
4147
      || It will only be used to remove unwanted work in progress packages,
4148
      || or mestaken versions
4149
      */
4150
 
4151
      /*--------------- Business Rules Here -------------------*/
4152
      problemstring := NULL;
4153
 
4154
      IF overridewarnings = 'N'
4155
      THEN
4156
         -- Package must not be official
4157
         SELECT pv.dlocked
4158
           INTO LOCKED
4159
           FROM package_versions pv
4160
          WHERE pv.pv_id = pvid;
4161
 
4162
         IF LOCKED = 'Y'
4163
         THEN
4164
            problemstring :=
4165
                  problemstring
4166
               || '- Package is locked and released.'
4167
               || UTL_TCP.crlf;
4168
         END IF;
4169
 
4170
         -- Cannot remove if used in BOMs
4171
         SELECT COUNT (osc.prod_id)
4172
           INTO ROWCOUNT
4173
           FROM deployment_manager.os_contents osc
4174
          WHERE osc.prod_id = pvid;
4175
 
4176
         IF ROWCOUNT > 0
4177
         THEN
4178
            problemstring :=
4179
                  problemstring
4180
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
4181
               || UTL_TCP.crlf;
4182
         END IF;
4183
 
4184
         -- Cannot remove if Referenced as build dependency
4185
         SELECT COUNT (dep.pv_id)
4186
           INTO ROWCOUNT
4187
           FROM package_dependencies dep
4188
          WHERE dep.dpv_id = pvid;
4189
 
4190
         IF ROWCOUNT > 0
4191
         THEN
4192
            problemstring :=
4193
                  problemstring
4194
               || '- Package is referenced by other package as build dependency.'
4195
               || UTL_TCP.crlf;
4196
         END IF;
4197
 
4198
         -- Cannot remove if Referenced as runtime dependency
4199
         SELECT COUNT (rd.pv_id)
4200
           INTO ROWCOUNT
4201
           FROM runtime_dependencies rd
4202
          WHERE rd.rtd_id = pvid;
4203
 
4204
         IF ROWCOUNT > 0
4205
         THEN
4206
            problemstring :=
4207
                  problemstring
4208
               || '- Package is referenced by other package as runtime dependency.'
4209
               || UTL_TCP.crlf;
4210
         END IF;
4211
 
4212
         -- Cannot remove if Referenced as patch
4213
         SELECT COUNT (pp.pv_id)
4214
           INTO ROWCOUNT
4215
           FROM package_patches pp
4216
          WHERE pp.patch_id = pvid;
4217
 
4218
         IF ROWCOUNT > 0
4219
         THEN
4220
            problemstring :=
4221
                  problemstring
4222
               || '- Package is used as patch by other package.'
4223
               || UTL_TCP.crlf;
4224
         END IF;
4225
      END IF;
4226
 
4227
/*-------------------------------------------------------*/
4228
      IF (problemstring IS NULL)
4229
      THEN
4230
         --- Remove From Work in Progress
4231
         DELETE FROM work_in_progress wip
4232
               WHERE wip.pv_id = pvid;
4233
 
4234
         --- Remove From Pending
4235
         DELETE FROM planned pl
4236
               WHERE pl.pv_id = pvid;
4237
 
4238
         --- Remove From Released area
4239
         DELETE FROM release_content rc
4240
               WHERE rc.pv_id = pvid;
4241
 
4242
         ---Remove From Package Processes
4243
         DELETE FROM package_processes pp
4244
               WHERE pp.pv_id = pvid;
4245
 
4246
         --- Remove Dependencies
4247
         DELETE FROM package_dependencies dep
4248
               WHERE dep.pv_id = pvid;
4249
 
4250
         DELETE FROM package_dependencies dep
4251
               WHERE dep.dpv_id = pvid;
4252
 
4253
         --- Remove Runtime dependencies
4254
         DELETE FROM runtime_dependencies rtd
4255
               WHERE rtd.pv_id = pvid;
4256
 
4257
         DELETE FROM runtime_dependencies rtd
4258
               WHERE rtd.rtd_id = pvid;
4259
 
4260
         --- Remove components
4261
         DELETE FROM product_components pc
4262
               WHERE pc.pv_id = pvid;
4263
 
4264
         DELETE FROM release_components rc
4265
               WHERE rc.pv_id = pvid;
4266
 
4267
         --- Remove From Notification History
4268
         DELETE FROM notification_history nh
4269
               WHERE nh.pv_id = pvid;
4270
 
4271
         --- Remove From Ignore Warnings
4272
         DELETE FROM ignore_warnings iw
4273
               WHERE iw.pv_id = pvid;
4274
 
4275
         --- Remove From Additional Notes
4276
         DELETE FROM additional_notes an
4277
               WHERE an.pv_id = pvid;
4278
 
4279
         --- Remove From CQ Issues
4280
         DELETE FROM cq_issues cq
4281
               WHERE cq.pv_id = pvid;
4282
 
4283
         --- Remove from Package Patches
4284
         DELETE FROM package_patches pp
4285
               WHERE pp.pv_id = pvid;
4286
 
4287
         DELETE FROM package_patches pp
4288
               WHERE pp.patch_id = pvid;
4289
 
4290
         --- Remove From Package Documents
4291
         DELETE FROM package_documents pd
4292
               WHERE pd.pv_id = pvid;
4293
 
4294
         --- Remove from Code Review
4295
         DELETE FROM code_reviews cr
4296
               WHERE cr.pv_id = pvid;
4297
 
4298
         --- Remove from Code Review URL
4299
         DELETE FROM code_review_url cru
4300
               WHERE cru.pv_id = pvid;
4301
 
4302
         --- Remove from Unit Tests
4303
         DELETE FROM unit_tests ut
4304
               WHERE ut.pv_id = pvid;
4305
 
4306
         --- Remove from Package BuildEnv
4307
         DELETE FROM package_build_env pbe
4308
               WHERE pbe.pv_id = pvid;
4309
 
4310
         --- Remove from Package Build Info
4311
         DELETE FROM package_build_info pbi
4312
               WHERE pbi.pv_id = pvid;
4313
 
4314
         --- Remove from Build Order
4315
         DELETE FROM build_order bo
4316
               WHERE bo.pv_id = pvid;
4317
 
4318
         --- Remove from Licencing
4319
         PK_LICENCING.REMOVE_ALL_LICENCING( pvid, 0 );
4320
 
4321
         --- Remove from Note Manager
4322
         DELETE FROM note_manager nm
4323
               WHERE nm.nid = pvid;
4324
 
4325
         --- Remove from Action log
4326
         DELETE FROM action_log al
4327
               WHERE al.pv_id = pvid;
4328
 
4329
         --- Remove from Do Not Ripple
4330
         DELETE FROM DO_NOT_RIPPLE dnr
4331
               WHERE dnr.PV_ID = pvid;
4332
 
4333
         --- Remove from Advisory Ripple
4334
         DELETE FROM ADVISORY_RIPPLE ar
4335
               WHERE ar.PV_ID = pvid;
4336
 
4337
         --- Remove from Jira Issues
4338
         DELETE FROM JIRA_ISSUES jira
4339
               WHERE jira.PV_ID = pvid;
4340
 
4341
         --- Remove from Package Metrics
4342
         DELETE FROM package_metrics pm
4343
              WHERE pm.pv_id = pvid;
4344
 
4345
         -- Delete from Pegged Versions
4346
         DELETE FROM pegged_versions pegv
4347
              WHERE pegv.pv_id = pvid;
4348
 
4349
         --- Finally Remove From Package Versions
4350
         --- Get Package name
4351
         SELECT pv.pkg_id
4352
           INTO pkgid
4353
           FROM package_versions pv
4354
          WHERE pv.pv_id = pvid;
4355
 
4356
         DELETE FROM package_versions pv
4357
               WHERE pv.pv_id = pvid;
4358
 
4359
         --- Remove package name if not used any more
4360
         SELECT COUNT (pv.pv_id)
4361
           INTO ROWCOUNT
4362
           FROM package_versions pv
4363
          WHERE pv.pkg_id = pkgid;
4364
 
4365
         IF ROWCOUNT < 1
4366
         THEN
4367
            DELETE FROM PACKAGES pkg
4368
                  WHERE pkg.pkg_id = pkgid;
4369
         END IF;
4370
      END IF;
4371
   END;
4372
 
4373
/*-------------------------------------------------------------------------------------------------------*/
4374
   PROCEDURE new_patch (
4375
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
4376
      nparentpvid        IN       NUMBER,
4377
      spatchidlist       IN       VARCHAR2,
4378
      nuserid            IN       NUMBER,
4379
      returnpatchid      OUT      NUMBER
4380
   )
4381
   IS
4382
      patchpv_id           NUMBER;
4383
      parpkg_id            NUMBER;
4384
      lastinstallorder     NUMBER;
4385
      ispatchdlocked       package_versions.dlocked%TYPE;
4386
      ssv_mm               package_versions.v_mm%TYPE;
4387
      ssv_nmm              package_versions.v_nmm%TYPE;
4388
      ssv_ext              package_versions.v_ext%TYPE;
4389
      opatchdepcollector   relmgr_number_tab_t  := relmgr_number_tab_t ();
4390
 
4391
      CURSOR parent_cur
4392
      IS
4393
         SELECT pv.*, pkg.pkg_name
4394
           FROM package_versions pv, PACKAGES pkg
4395
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
4396
 
4397
      parent_rec parent_cur%ROWTYPE;
4398
 
4399
      CURSOR patch_cur
4400
      IS
4401
         SELECT pv.*, pg.pkg_name
4402
           FROM package_versions pv, PACKAGES pg
4403
          WHERE pv.pkg_id = parpkg_id
4404
            AND pv.pkg_version = snewpatchversion
4405
            AND pv.pkg_id = pg.pkg_id;
4406
 
4407
      patch_rec  patch_cur%ROWTYPE;
4408
 
4409
      CURSOR releases_cur
4410
      IS
4411
         SELECT rc.pv_id
4412
           FROM release_content rc
4413
          WHERE rc.pv_id = patch_rec.pv_id;
4414
 
4415
      releases_rec releases_cur%ROWTYPE;
4416
   BEGIN
4417
      -- Get Last Install Order
4418
      SELECT COUNT (*)
4419
        INTO lastinstallorder
4420
        FROM package_patches pp
4421
       WHERE pp.pv_id = nparentpvid;
4422
 
4423
      -- Get parent details
4424
      OPEN parent_cur;
4425
 
4426
      FETCH parent_cur
4427
       INTO parent_rec;
4428
 
4429
      parpkg_id := parent_rec.pkg_id;
4430
 
4431
      -- Find if patch exists in database
4432
      OPEN patch_cur;
4433
 
4434
      FETCH patch_cur
4435
       INTO patch_rec;
4436
 
4437
      -- Parent must be official
4438
      IF parent_rec.dlocked = 'Y'
4439
      THEN
4440
         IF patch_cur%NOTFOUND
4441
         THEN
4442
            ispatchdlocked := 'N';
4443
 
4444
            -- Create new patch version --
4445
            SELECT seq_pv_id.NEXTVAL
4446
              INTO patchpv_id
4447
              FROM DUAL;
4448
 
4449
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
4450
 
4451
            INSERT INTO package_versions
4452
                        (pv_id, pkg_id, pkg_version,
4453
                         dlocked, created_stamp, creator_id,
4454
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
4455
                         src_path,
4456
                         pv_description,
4457
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
4458
                         is_autobuildable, ripple_field
4459
                        )
4460
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
4461
                         ispatchdlocked, ora_sysdate, nuserid,
4462
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
4463
                         parent_rec.src_path,
4464
                            'This is a patch to '
4465
                         || parent_rec.pkg_name
4466
                         || ' '
4467
                         || parent_rec.pkg_version,
4468
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N', parent_rec.ripple_field
4469
                        );
4470
 
4471
            INSERT INTO package_patches
4472
                        (pv_id, patch_id, install_order)
4473
                (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4474
                        lastinstallorder + 1 AS install_order
4475
                   FROM package_versions pv
4476
                  WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4477
 
4478
            /* LOG ACTION */
4479
            log_action (patchpv_id,
4480
                        'new_version',
4481
                        nuserid,
4482
                        'Patch version created: ' || snewpatchversion
4483
                       );
4484
            log_action (nparentpvid,
4485
                        'patch_add',
4486
                        nuserid,
4487
                        'New patch created and attached: ' || snewpatchversion
4488
                       );
4489
         ELSE
4490
            patchpv_id := patch_rec.pv_id;
4491
            ispatchdlocked := patch_rec.dlocked;
4492
 
4493
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
4494
            OPEN releases_cur;
4495
 
4496
            FETCH releases_cur
4497
             INTO releases_rec;
4498
 
4499
            IF releases_cur%NOTFOUND
4500
            THEN
4501
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
4502
               UPDATE package_versions
4503
                  SET is_patch = 'Y'
4504
                WHERE pv_id = patchpv_id;
4505
 
4506
               INSERT INTO package_patches
4507
                           (pv_id, patch_id, install_order)
4508
                   (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
4509
                           lastinstallorder + 1 AS install_order
4510
                      FROM package_versions pv
4511
                     WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
4512
            END IF;
4513
 
4514
            CLOSE releases_cur;
4515
 
4516
            /* LOG ACTION */
4517
            log_action (nparentpvid,
4518
                        'patch_add',
4519
                        nuserid,
4520
                           'Patch version was found and attached: '
4521
                        || snewpatchversion
4522
                       );
4523
         END IF;
4524
      END IF;
4525
 
4526
      /* Create Patch Dependencies */
4527
      opatchdepcollector := in_list_number (spatchidlist);
4528
 
4529
      -- Make sure patch is unofficial before altering its dependencies
4530
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
4531
      THEN
4532
         -- Delete Existing Dependencies
4533
         DELETE FROM package_dependencies dep
4534
               WHERE dep.pv_id = patchpv_id;
4535
 
4536
         -- Insert new dependencies
4537
         INSERT INTO package_dependencies
4538
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
4539
              SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
4540
                     parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
4541
                     'L' AS build_type
4542
                FROM package_versions pv
4543
               WHERE pv.pv_id IN (
4544
                      SELECT *
4545
                        FROM TABLE
4546
                                (CAST
4547
                                    (opatchdepcollector AS relmgr_number_tab_t)
4548
                                ));
4549
      END IF;
4550
 
4551
      -- Return patch_id
4552
      returnpatchid := patchpv_id;
4553
 
4554
      CLOSE parent_cur;
4555
 
4556
      CLOSE patch_cur;
4557
   EXCEPTION
4558
      WHEN DUP_VAL_ON_INDEX
4559
      THEN
4560
         raise_application_error (-20000,
4561
                                     'Patch version '
4562
                                  || snewpatchversion
4563
                                  || ' already exist.'
4564
                                 );
4565
   END;
4566
 
4567
/*-------------------------------------------------------------------------------------------------------*/
4568
   PROCEDURE obsolete_patch (
4569
      patchid            IN   NUMBER,
4570
      isobsolete         IN   CHAR,
4571
      obsoletecomments   IN   VARCHAR2,
4572
      userid             IN   NUMBER
4573
   )
4574
   IS
4575
   BEGIN
4576
      -- Update patch
4577
      UPDATE package_versions pv
4578
         SET pv.is_obsolete = isobsolete,
4579
             pv.obsolete_comments = obsoletecomments
4580
       WHERE pv.pv_id = patchid;
4581
 
4582
      /*
4583
      -- Update patch children
4584
      UPDATE PACKAGE_VERSIONS pv SET
4585
      pv.IS_OBSOLETE = IsObsolete,
4586
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4587
      WHERE pv.PV_ID IN (
4588
                     SELECT DISTINCT dep.DPV_ID
4589
                       FROM PACKAGE_DEPENDENCIES dep
4590
                      WHERE dep.PV_ID = PatchId
4591
                     );
4592
 
4593
 
4594
      -- Update patch parent
4595
      UPDATE PACKAGE_VERSIONS pv SET
4596
      pv.IS_OBSOLETE = IsObsolete,
4597
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4598
      WHERE pv.PV_ID IN (
4599
                     SELECT DISTINCT dep.PV_ID
4600
                       FROM PACKAGE_DEPENDENCIES dep
4601
                      WHERE dep.DPV_ID = PatchId
4602
                     );
4603
 
4604
      */
4605
 
4606
      /* LOG ACTION */
4607
      IF isobsolete IS NOT NULL
4608
      THEN
4609
         log_action (patchid,
4610
                     'patch_obsolete',
4611
                     userid,
4612
                     'Obsolete patch. ' || obsoletecomments
4613
                    );
4614
      ELSE
4615
         log_action (patchid,
4616
                     'patch_obsolete',
4617
                     userid,
4618
                     'Undo patch obsolete.'
4619
                    );
4620
      END IF;
4621
   END;
4622
 
4623
/*-------------------------------------------------------------------------------------------------------*/
4624
   PROCEDURE obsolete_patches (
4625
      spatchidlist       IN   VARCHAR2,
4626
      isobsolete         IN   CHAR,
4627
      obsoletecomments   IN   VARCHAR2,
4628
      userid             IN   NUMBER
4629
   )
4630
   IS
4631
   BEGIN
4632
      /*--------------- Business Rules Here -------------------*/
4633
      IF spatchidlist IS NULL
4634
      THEN
4635
         raise_application_error (-20000,
4636
                                  'Please select one or more Patches.'
4637
                                 );
4638
      END IF;
4639
 
4640
/*-------------------------------------------------------*/
4641
 
4642
      -- Update patch
4643
      UPDATE package_versions pv
4644
         SET pv.is_obsolete = isobsolete,
4645
             pv.obsolete_comments = obsoletecomments
4646
       WHERE pv.pv_id IN (
4647
                SELECT *
4648
                  FROM THE
4649
                          (SELECT CAST
4650
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
4651
                                     )
4652
                             FROM DUAL
4653
                          ));
4654
      /*
4655
      -- Update patch children
4656
      UPDATE PACKAGE_VERSIONS pv SET
4657
      pv.IS_OBSOLETE = IsObsolete,
4658
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4659
      WHERE pv.PV_ID IN (
4660
                     SELECT DISTINCT dep.DPV_ID
4661
                       FROM PACKAGE_DEPENDENCIES dep
4662
                      WHERE dep.PV_ID = PatchId
4663
                     );
4664
 
4665
 
4666
      -- Update patch parent
4667
      UPDATE PACKAGE_VERSIONS pv SET
4668
      pv.IS_OBSOLETE = IsObsolete,
4669
      pv.OBSOLETE_COMMENTS = ObsoleteComments
4670
      WHERE pv.PV_ID IN (
4671
                     SELECT DISTINCT dep.PV_ID
4672
                       FROM PACKAGE_DEPENDENCIES dep
4673
                      WHERE dep.DPV_ID = PatchId
4674
                     );
4675
 
4676
      */
4677
 
4678
      /* LOG ACTION
4679
      IF IsObsolete IS NOT NULL THEN
4680
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4681
                     'Obsolete patch. '|| ObsoleteComments );
4682
      ELSE
4683
         Log_Action ( PatchId, 'patch_obsolete', UserId,
4684
                     'Undo patch obsolete.' );
4685
      END IF;  */
4686
   END;
4687
 
4688
/*-------------------------------------------------------------------------------------------------------*/
4689
   PROCEDURE add_process (
4690
      nprocid         IN   processes.proc_id%TYPE,
4691
      shealthtag      IN   processes.proc_name%TYPE,
4692
      sprocdesc       IN   processes.proc_description%TYPE,
4693
      scmdinterface   IN   processes.run_as%TYPE,
4694
      spkgowner       IN   processes.pkg_owner%TYPE,
4695
      sisinterface    IN   processes.is_interface%TYPE,
4696
      npvid           IN   package_processes.pv_id%TYPE,
4697
      nuserid         IN   NUMBER
4698
   )
4699
   IS
4700
      pkgname   VARCHAR2 (100);
4701
 
4702
   BEGIN
4703
      INSERT INTO processes
4704
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
4705
                   is_interface
4706
                  )
4707
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
4708
                   sisinterface
4709
                  );
4710
 
4711
      pk_package.add_package_process (nprocid, npvid, nuserid);
4712
   END;
4713
 
4714
/*-------------------------------------------------------------------------------------------------------*/
4715
   PROCEDURE add_package_process (
4716
      nprocidlist   IN   VARCHAR2,
4717
      npvid         IN   package_processes.pv_id%TYPE,
4718
      nuserid       IN   NUMBER
4719
   )
4720
   IS
4721
      processname   VARCHAR2 (4000);
4722
 
4723
      CURSOR proc_cur
4724
      IS
4725
         SELECT prc.proc_id
4726
           FROM processes prc
4727
          WHERE prc.proc_id IN (
4728
                   SELECT *
4729
                     FROM THE
4730
                             (SELECT CAST
4731
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
4732
                                        )
4733
                                FROM DUAL
4734
                             ));
4735
 
4736
      proc_rec  proc_cur%ROWTYPE;
4737
   BEGIN
4738
      OPEN proc_cur;
4739
 
4740
      FETCH proc_cur
4741
       INTO proc_rec;
4742
 
4743
      WHILE proc_cur%FOUND
4744
      LOOP
4745
         INSERT INTO package_processes (proc_id, pv_id)
4746
              VALUES (proc_rec.proc_id, npvid);
4747
 
4748
         SELECT prc.proc_name
4749
           INTO processname
4750
           FROM processes prc
4751
          WHERE prc.proc_id = proc_rec.proc_id;
4752
 
4753
         -- Log Action --
4754
         log_action (npvid,
4755
                     'process_add',
4756
                     nuserid,
4757
                     'Added process with health tag ' || processname
4758
                    );
4759
 
4760
         FETCH proc_cur
4761
          INTO proc_rec;
4762
      END LOOP;
4763
 
4764
      CLOSE proc_cur;
4765
   END;
4766
 
4767
/*-------------------------------------------------------------------------------------------------------*/
4768
   PROCEDURE remove_process (
4769
      nprocid   IN   package_processes.proc_id%TYPE,
4770
      npvid     IN   package_processes.pv_id%TYPE,
4771
      nuserid   IN   NUMBER
4772
   )
4773
   IS
4774
      processname   VARCHAR2 (4000);
4775
   BEGIN
4776
      SELECT prc.proc_name
4777
        INTO processname
4778
        FROM processes prc
4779
       WHERE prc.proc_id = nprocid;
4780
 
4781
      DELETE FROM package_processes
4782
            WHERE proc_id = nprocid AND pv_id = npvid;
4783
 
4784
      -- Log Action --
4785
      log_action (npvid,
4786
                  'process_remove',
4787
                  nuserid,
4788
                  'Removed process with health tag ' || processname
4789
                 );
4790
   END;
4791
/*-------------------------------------------------------------------------------------------------------*/
4792
   /*
4793
   ** Author: Rupesh Solanki
4794
   ** Purpose: To move package versions from one release to another
4795
   ** Release: 4th September 2006
4796
   */
4797
   PROCEDURE move_package (
4798
      npvid        IN package_versions.pv_id%TYPE,
4799
      nrtagid      IN release_tags.rtag_id%TYPE,
4800
      nnewrtagid   IN release_tags.rtag_id%TYPE,
4801
      nuserid      IN NUMBER
4802
   )
4803
   IS
4804
 
4805
      oldrtag_name VARCHAR2(4000);newrtag_name VARCHAR2(4000);
4806
 
4807
   BEGIN
4808
      SELECT rtag_name into oldrtag_name
4809
      FROM RELEASE_TAGS
4810
      WHERE rtag_id = nrtagid;
4811
 
4812
      SELECT rtag_name into newrtag_name
4813
      FROM RELEASE_TAGS
4814
      WHERE rtag_id = nnewrtagid;
4815
 
4816
      /* Table Work In Progress*/
4817
      UPDATE WORK_IN_PROGRESS
4818
      SET RTAG_ID = nnewrtagid
4819
      WHERE RTAG_ID = nrtagid
4820
      AND PV_ID = npvid;
4821
 
4822
      /* Table PLANNED*/
4823
      UPDATE PLANNED
4824
      SET RTAG_ID = nnewrtagid
4825
      WHERE RTAG_ID = nrtagid
4826
      AND PV_ID = npvid;
4827
 
4828
      /* Table PEGGED_VERSIONS */
4829
      DELETE FROM PEGGED_VERSIONS pegv
4830
      WHERE pegv.RTAG_ID = nrtagid
4831
      AND pegv.PV_ID = npvid;
4832
 
4833
      /* Table ADVISORY_RIPPLE*/
4834
      DELETE FROM ADVISORY_RIPPLE
4835
      WHERE RTAG_ID = nrtagid
4836
      AND PV_ID = npvid;
4837
 
4838
 
4839
      -- Log Action --
4840
      log_action (npvid,
4841
                  'move_package_version',
4842
                  nuserid,
4843
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
4844
                 );
4845
   END;
4846
 
4847
/*-------------------------------------------------------------------------------------------------------*/
4848
   /*
4849
   ** Author: Rupesh Solanki
4850
   ** Purpose: To modify the product state from integration to test to deployment
4851
   ** Release: 25th January 2006
4852
   */
4853
   PROCEDURE modify_product_state (
4854
      npvid    IN package_versions.pv_id%TYPE,
4855
      nrtagid  IN release_tags.rtag_id%TYPE,
4856
      nstateid IN product_states.state_id%TYPE,
4857
      nuserid  IN NUMBER
4858
   ) IS
4859
 
4860
      sStateName VARCHAR2(4000);
4861
      sRtagName VARCHAR2(4000);
4862
 
4863
   BEGIN
4864
 
4865
      UPDATE RELEASE_CONTENT
4866
      SET PRODUCT_STATE = nstateid
4867
      WHERE PV_ID = npvid
4868
      AND RTAG_ID = nrtagid;
4869
 
4870
 
4871
      SELECT STATE INTO sStateName
4872
      FROM PRODUCT_STATES
4873
      WHERE STATE_ID = nstateid;
4874
 
4875
      SELECT RTAG_NAME into sRtagName
4876
      FROM RELEASE_TAGS
4877
      WHERE RTAG_ID = nrtagid;
4878
 
4879
 
4880
      -- Log Action --
4881
      log_action (npvid,
4882
                  'modify_product_state',
4883
                     nuserid,
4884
                     sStateName || ' in '|| sRtagName
4885
                  );
4886
   END;
4887
/*-------------------------------------------------------------------------------------------------------*/
4888
   /*
4889
   ** Author: Jeremy Tweddle
4890
   ** Date: 24/Aug/2007
4891
   */
4892
   PROCEDURE add_code_review_url (
4893
      npvid           IN    NUMBER,
4894
      nprojid         IN    NUMBER,
4895
      surl            IN    VARCHAR2,
4896
      sreason         IN    VARCHAR2,
4897
      ddateofreview   IN    DATE
4898
   ) IS
4899
 
4900
      ncrid NUMBER;
4901
 
4902
   BEGIN
4903
 
4904
      SELECT seq_cr_id.NEXTVAL INTO ncrid FROM DUAL;
4905
 
4906
      INSERT INTO code_review_url ( cr_id, pv_id, proj_id, url, reason, date_of_review,
4907
                                    last_modified )
4908
      VALUES ( ncrid, npvid, nprojid, surl, sreason, ddateofreview, ora_sysdate );
4909
 
4910
   END;
4911
/*-------------------------------------------------------------------------------------------------------*/
4912
   /*
4913
   ** Author: Jeremy Tweddle
4914
   ** Date: 22/Aug/2007
4915
   */
4916
   PROCEDURE update_code_review_url (
4917
      ncrid           IN    NUMBER,
4918
      nprojid         IN    NUMBER,
4919
      surl            IN    VARCHAR2,
4920
      sreason         IN    VARCHAR2
4921
   ) IS
4922
 
4923
   BEGIN
4924
 
4925
      UPDATE code_review_url
4926
      SET url = surl,
4927
          proj_id = nprojid,
4928
          reason = sreason,
4929
          last_modified = ora_sysdate
4930
      WHERE cr_id = ncrid;
4931
 
4932
   END;
4933
/*-------------------------------------------------------------------------------------------------------*/
4934
   /*
4935
   ** Author: Jeremy Tweddle
4936
   ** Date: 22/Aug/2007
4937
   */
4938
   PROCEDURE remove_code_review_url (
4939
      ncrid  IN    NUMBER
4940
   ) IS
4941
 
4942
   BEGIN
4943
      DELETE FROM code_review_url
4944
      WHERE cr_id = ncrid;
4945
   END;
4946
/*-------------------------------------------------------------------------------------------------------*/
4947
END pk_package;
1374 dpurdie 4948
/
4949
--------------------------------------------------------
4950
--  DDL for Package Body PK_RMAPI_TEST
4951
--------------------------------------------------------
1373 dpurdie 4952
 
4953
  CREATE OR REPLACE PACKAGE BODY "PK_RMAPI_TEST" 
4954
IS
4955
 
4956
   /*-------------------------------------------------------------------------------------------------------*/
4957
   FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
4958
      RETURN typecur
4959
   IS
4960
      npvid     NUMBER  := 0;
4961
      RECORDS   typecur;
4962
   BEGIN
4963
      BEGIN
4964
         -- Get PV_ID --
4965
         SELECT pv.pv_id
4966
           INTO npvid
4967
           FROM PACKAGES pkg, package_versions pv
4968
          WHERE pv.pkg_id = pkg.pkg_id
4969
            AND pkg.pkg_name = pkgname
4970
            AND pv.pkg_version = pkgversion;
4971
      EXCEPTION
4972
         WHEN NO_DATA_FOUND
4973
         THEN
4974
            raise_application_error (-20000, 'Package Not Found!');
4975
            --WHEN OTHERS THEN
4976
                  -- Consider logging the error and then re-raise
4977
            RAISE;
4978
      END;
4979
 
4980
      -- Finally get package dependencies --
4981
      OPEN RECORDS FOR
4982
         SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
4983
           FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
4984
          WHERE dep.pv_id = npvid
4985
            AND dpv.pkg_id = dpkg.pkg_id
4986
            AND dpv.pv_id = dep.dpv_id;
4987
 
4988
      RETURN RECORDS;
4989
   END;
4990
 
4991
/*-------------------------------------------------------------------------------------------------------*/
4992
   FUNCTION wip_iteration_package (
4993
      projname        VARCHAR2,
4994
      iterationname   VARCHAR2,
4995
      pkgname         VARCHAR2
4996
   )
4997
      RETURN typecur
4998
   IS
4999
      nrtagid   NUMBER  := 0;
5000
      RECORDS   typecur;
5001
   BEGIN
5002
      BEGIN
5003
         -- Get latest rtag_id --
5004
         SELECT rt.rtag_id
5005
           INTO nrtagid
5006
           FROM projects proj, release_tags rt
5007
          WHERE rt.proj_id = proj.proj_id
5008
            AND UPPER (proj.proj_name) = UPPER (projname)
5009
            AND UPPER (rt.rtag_name) = UPPER (iterationname);
5010
 
5011
         IF (nrtagid IS NULL)
5012
         THEN
5013
            raise_application_error (-20000,
5014
                                     'Work In Progress is Not Found!');
5015
         END IF;
5016
      EXCEPTION
5017
         WHEN NO_DATA_FOUND
5018
         THEN
5019
            raise_application_error (-20000,
5020
                                     'Work In Progress is Not Found!');
5021
            RAISE;
5022
      END;
5023
 
5024
      -- Finally get package dependencies --
5025
      OPEN RECORDS FOR
5026
         SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
5027
                pv.src_path
5028
           FROM PACKAGES pkg, package_versions pv, work_in_progress wip
5029
          WHERE pv.pkg_id = pkg.pkg_id
5030
            AND wip.pv_id = pv.pv_id
5031
            AND wip.rtag_id = nrtagid
5032
            AND pkg.pkg_name = pkgname;
5033
 
5034
      RETURN RECORDS;
5035
   END;
5036
 
5037
/*-------------------------------------------------------------------------------------------------------*/
5038
   FUNCTION auto_make_release (
5039
      rtagid                   IN   NUMBER,
5040
      pkgname                  IN   VARCHAR2,
5041
      vext                     IN   VARCHAR2,
5042
      newpkgversion            IN   VARCHAR2,
5043
      label                    IN   VARCHAR2,
5044
      dependenciesimportlist   IN   VARCHAR2,
5045
      isrippled                IN   NUMBER,
5046
      username                 IN   VARCHAR2
5047
   )
5048
      RETURN NUMBER
5049
   IS
5050
      pkgid                           NUMBER;
5051
      pvid                            NUMBER                        := 0;
5052
      userid                          NUMBER;
5053
      dlocked                         VARCHAR2 (20)                 := NULL;
5054
      clonefrompvid                   NUMBER;
5055
      ssv_mm                          package_versions.v_mm%TYPE;
5056
      ssv_nmm                         package_versions.v_nmm%TYPE;
5057
      ssv_ext                         package_versions.v_ext%TYPE;
5058
      return_package_not_found        NUMBER                        := -1;
5059
      return_package_already_exists   NUMBER                        := -2;
5060
      return_not_approved             NUMBER                        := -3;
5061
   BEGIN
5062
      /*--------------- Business Rules Here -------------------*/
5063
      IF (rtagid IS NULL)
5064
      THEN
5065
         raise_application_error (-20000, 'RtagId must be supplied.');
5066
      END IF;
5067
 
5068
      IF (pkgname IS NULL)
5069
      THEN
5070
         raise_application_error (-20000, 'PkgName must be supplied.');
5071
      END IF;
5072
 
5073
      IF (newpkgversion IS NULL)
5074
      THEN
5075
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5076
      END IF;
5077
 
5078
      IF (label IS NULL)
5079
      THEN
5080
         raise_application_error (-20000, 'Label must be supplied.');
5081
      END IF;
5082
 
5083
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5084
      THEN
5085
         raise_application_error
5086
            (-20000,
5087
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5088
            );
5089
      END IF;
5090
 
5091
      IF (username IS NULL)
5092
      THEN
5093
         raise_application_error (-20000, 'UserName must be supplied.');
5094
      END IF;
5095
 
5096
      -- Get user_id
5097
      BEGIN
5098
         SELECT usr.user_id
5099
           INTO userid
5100
           FROM users usr
5101
          WHERE UPPER (usr.user_name) = UPPER (username)
5102
            AND usr.is_disabled IS NULL;
5103
      EXCEPTION
5104
         WHEN NO_DATA_FOUND
5105
         THEN
5106
            raise_application_error (-20000,
5107
                                        'UserName '
5108
                                     || username
5109
                                     || ' is not valid or disabled.'
5110
                                    );
5111
      END;
5112
 
5113
/*-------------------------------------------------------*/
5114
 
5115
      -- Create package if necessary
5116
      IF isrippled = 1
5117
      THEN
5118
         /* Ripple Build */
5119
         BEGIN
5120
            -- Make sure that package does not exist
5121
            SELECT pv.pv_id
5122
              INTO pvid
5123
              FROM package_versions pv, PACKAGES pkg
5124
             WHERE pv.pkg_id = pkg.pkg_id
5125
               AND pkg.pkg_name = pkgname
5126
               AND pv.pkg_version = newpkgversion;
5127
         EXCEPTION
5128
            WHEN NO_DATA_FOUND
5129
            THEN
5130
               pvid := 0;
5131
         END;
5132
 
5133
         IF (pvid = 0)
5134
         THEN
5135
            -- Split current version in parts
5136
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5137
 
5138
            BEGIN
5139
               -- Find package to be replaced with thie ripple package
5140
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5141
               THEN
5142
                  SELECT pv.pv_id
5143
                    INTO clonefrompvid
5144
                    FROM PACKAGES pkg, package_versions pv,
5145
                         release_content rc
5146
                   WHERE rc.pv_id = pv.pv_id
5147
                     AND pv.pkg_id = pkg.pkg_id
5148
                     AND rc.rtag_id = rtagid
5149
                     AND pkg.pkg_name = pkgname
5150
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5151
               ELSE
5152
                  SELECT pv.pv_id
5153
                    INTO clonefrompvid
5154
                    FROM PACKAGES pkg, package_versions pv,
5155
                         release_content rc
5156
                   WHERE rc.pv_id = pv.pv_id
5157
                     AND pv.pkg_id = pkg.pkg_id
5158
                     AND rc.rtag_id = rtagid
5159
                     AND pkg.pkg_name = pkgname
5160
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5161
               END IF;
5162
            EXCEPTION
5163
               WHEN NO_DATA_FOUND
5164
               THEN
5165
                  raise_application_error
5166
                                        (-20000,
5167
                                            'Cannot get CloneFromPvId. VExt='
5168
                                         || vext
5169
                                         || ', RtagId='
5170
                                         || rtagid
5171
                                         || ', PkgName='
5172
                                         || pkgname
5173
                                         || ', SSV_EXT='
5174
                                         || ssv_ext
5175
                                        );
5176
            END;
5177
 
5178
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5179
            THEN
5180
               -- Create package
5181
               seed_package_names_versions (pkgname,
5182
                                            newpkgversion,
5183
                                            userid,
5184
                                            pvid,
5185
                                            clonefrompvid
5186
                                           );
5187
            ELSE
5188
               -- Create package
5189
               seed_package_names_versions2 (pkgname,
5190
                                             newpkgversion,
5191
                                             userid,
5192
                                             pvid,
5193
                                             clonefrompvid
5194
                                            );
5195
            END IF;
5196
 
5197
            -- Update Package reason for release
5198
            UPDATE package_versions pv
5199
               SET pv.comments = 'Rippled Build.',
5200
                   pv.build_type = 'Y'
5201
             WHERE pv.pv_id = pvid;
5202
         ELSE
5203
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5204
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5205
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5206
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5207
            UPDATE package_versions pv
5208
               SET pv.release_notes_info = null,
5209
                   pv.modified_stamp = ora_sysdatetime
5210
             WHERE pv.pv_id = pvid;
5211
 
5212
            RETURN return_package_already_exists;
5213
         END IF;
5214
      ELSE
5215
         /* Auto build from Pending area */
5216
 
5217
         -- Find package in pending area
5218
         BEGIN
5219
            SELECT pv.pv_id, pv.dlocked
5220
              INTO pvid, dlocked
5221
              FROM planned pl, package_versions pv, PACKAGES pkg
5222
             WHERE pl.pv_id = pv.pv_id
5223
               AND pv.pkg_id = pkg.pkg_id
5224
               AND pl.rtag_id = rtagid
5225
               AND pkg.pkg_name = pkgname
5226
               AND pv.dlocked = 'A'
5227
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5228
               AND rownum = 1
5229
             ORDER BY pv.modified_stamp;
5230
         EXCEPTION
5231
            WHEN NO_DATA_FOUND
5232
            THEN
5233
               pvid := 0;
5234
         END;
5235
 
5236
         IF (pvid = 0)
5237
         THEN
5238
            -- Package does not exist in pending area, hence report it
5239
            RETURN return_package_not_found;
5240
         ELSIF (dlocked != 'A')
5241
         THEN
5242
            -- Package is not approved for autobuild
5243
            RETURN return_not_approved;
5244
         END IF;
5245
      END IF;
5246
 
5247
      BEGIN
5248
         -- Import Dependencies
5249
         import_dependencies (pvid, dependenciesimportlist, userid);
5250
      END;
5251
 
5252
      BEGIN
5253
         -- Split current version in parts
5254
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5255
 
5256
         -- Update Package Details
5257
         UPDATE package_versions pv
5258
            SET pv.pkg_version = newpkgversion,
5259
                pv.v_ext = ssv_ext,
5260
                pv.v_mm = ssv_mm,
5261
                pv.v_nmm = ssv_nmm,
5262
                pv.pkg_label = label
5263
          WHERE pv.pv_id = pvid;
5264
      EXCEPTION
5265
         WHEN DUP_VAL_ON_INDEX
5266
         THEN
5267
            -- Package already exists, hence cannot be used for ripple build
5268
            RETURN return_package_already_exists;
5269
      END;
5270
 
5271
      -- Update the is_autobuildable
5272
      UPDATE package_versions
5273
         SET is_autobuildable = 'Y'
5274
       WHERE pv_id = pvid;
5275
 
5276
      -- Now release package
5277
      pk_environment.auto_make_release (pvid,
5278
                                        rtagid,
5279
                                        userid,
5280
                                        vext,
5281
                                        ssv_ext,
5282
                                        clonefrompvid
5283
                                       );
5284
 
5285
      --Now clean the PLANNED_VERSIONS table
5286
      SELECT pkg_id
5287
        INTO pkgid
5288
        FROM PACKAGES
5289
       WHERE pkg_name = pkgname;
5290
 
5291
      DELETE FROM planned_versions
5292
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5293
 
5294
      RETURN pvid;
5295
   END;
5296
 
5297
/*-------------------------------------------------------------------------------------------------------*/
5298
   FUNCTION auto_make_vcsrelease (
5299
      rtagid                   IN   NUMBER,
5300
      pkgname                  IN   VARCHAR2,
5301
      vext                     IN   VARCHAR2,
5302
      newpkgversion            IN   VARCHAR2,
5303
      vcstag             IN   VARCHAR2,
5304
      dependenciesimportlist   IN   VARCHAR2,
5305
      isrippled                IN   NUMBER,
5306
      username                 IN   VARCHAR2
5307
   )
5308
      RETURN NUMBER
5309
   IS
5310
      pkgid                           NUMBER;
5311
      pvid                            NUMBER                        := 0;
5312
      userid                          NUMBER;
5313
      dlocked                         VARCHAR2 (20)                 := NULL;
5314
      clonefrompvid                   NUMBER;
5315
      ssv_mm                          package_versions.v_mm%TYPE;
5316
      ssv_nmm                         package_versions.v_nmm%TYPE;
5317
      ssv_ext                         package_versions.v_ext%TYPE;
5318
      return_package_not_found        NUMBER                        := -1;
5319
      return_package_already_exists   NUMBER                        := -2;
5320
      return_not_approved             NUMBER                        := -3;
5321
 
5322
      x_vcstypeid                     NUMBER;
5323
      x_tag                           VARCHAR2(32);
5324
      x_label                         VARCHAR2(60);
5325
      x_srcpath                       VARCHAR2(2000);
5326
 
5327
      -- Regular expression constituents
5328
      Token         VARCHAR2(16) := '([^:]+)';  -- a token is anything except a ':' character
5329
      Seperator     VARCHAR2(4)  := '::';       -- tokens will be seperated by '::'
5330
      BOL           VARCHAR2(4)  := '^';
5331
      Anything      VARCHAR2(4)  := '.*';
5332
      ReplaceToken1 VARCHAR2(4)  := '\1';
5333
      ReplaceToken2 VARCHAR2(4)  := '\2';
5334
      ReplaceToken3 VARCHAR2(4)  := '\3';
5335
 
5336
 
5337
   BEGIN
5338
      /*--------------- Business Rules Here -------------------*/
5339
      IF (rtagid IS NULL)
5340
      THEN
5341
         raise_application_error (-20000, 'RtagId must be supplied.');
5342
      END IF;
5343
 
5344
      IF (pkgname IS NULL)
5345
      THEN
5346
         raise_application_error (-20000, 'PkgName must be supplied.');
5347
      END IF;
5348
 
5349
      IF (newpkgversion IS NULL)
5350
      THEN
5351
         raise_application_error (-20000, 'PkgVersion must be supplied.');
5352
      END IF;
5353
 
5354
      IF (vcstag IS NULL)
5355
      THEN
5356
         raise_application_error (-20000, 'PkgVcsTag must be supplied.');
5357
      END IF;
5358
 
5359
      IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
5360
      THEN
5361
         raise_application_error
5362
            (-20000,
5363
             'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
5364
            );
5365
      END IF;
5366
 
5367
      IF (username IS NULL)
5368
      THEN
5369
         raise_application_error (-20000, 'UserName must be supplied.');
5370
      END IF;
5371
 
5372
      -- Parse the PkgVcsTag
5373
      -- Sets up
5374
      --   x_tag, x_label, x_srcpath
5375
 
5376
       BEGIN
5377
          -- Extract the first token - this will be the short tag name for the VCS (eg. 'CC', 'SVN', etc)
5378
          x_tag := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Anything, ReplaceToken1);
5379
 
5380
          -- Decode the short tag
5381
          CASE x_tag
5382
             WHEN 'CC' THEN
5383
                -- extract the 2nd and 3rd tokens, those being the source path and label respectively
5384
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Anything, ReplaceToken2);
5385
                x_label   := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token || Seperator || Token, ReplaceToken3);
5386
 
5387
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5388
                -- check for that error as well as the obvious zero-length string conditions.
5389
                IF LENGTH(x_srcpath) = 0 OR LENGTH(x_label) = 0 OR x_srcpath = vcstag OR x_label = vcstag THEN
5390
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5391
                END IF;
5392
 
5393
             WHEN 'SVN' THEN
5394
                -- extract the 2nd token, that being the subversion tag
5395
                x_srcpath := REGEXP_REPLACE(vcstag, BOL || Token || Seperator || Token, ReplaceToken2);
5396
                x_label   := 'N/A';
5397
 
5398
                -- NOTE: if reg-expr parsing/replacement fails, the x_... variable may receive the entire input string (vcstag), so
5399
                -- check for that error as well as the obvious zero-length string conditions.
5400
                IF LENGTH(x_srcpath) = 0 OR x_srcpath = vcstag THEN
5401
                   raise_application_error (-20000, 'VCS Tag contains insufficient or malformed data!');
5402
                END IF;
5403
 
5404
             WHEN 'UC' THEN
5405
                -- nothing to extract, just assign defaults
5406
                x_srcpath := '';
5407
                x_label   := 'N/A';
5408
             ELSE
5409
                raise_application_error (-20000, 'Unrecognised VCS Tag!');
5410
          END CASE;
5411
       END;
5412
 
5413
      -- Get the VCS_TYPE_ID for the version control system.
5414
      BEGIN
5415
         SELECT vt.vcs_type_id
5416
         INTO x_vcstypeid
5417
         FROM VCS_TYPE vt
5418
         WHERE vt.tag = x_tag;
5419
         EXCEPTION
5420
            WHEN NO_DATA_FOUND THEN
5421
               raise_application_error (-20000, 'Database is missing a version control system tag (' || x_tag || ')!' );
5422
      END;
5423
 
5424
 
5425
      -- Get user_id
5426
      BEGIN
5427
         SELECT usr.user_id
5428
           INTO userid
5429
           FROM users usr
5430
          WHERE UPPER (usr.user_name) = UPPER (username)
5431
            AND usr.is_disabled IS NULL;
5432
      EXCEPTION
5433
         WHEN NO_DATA_FOUND
5434
         THEN
5435
            raise_application_error (-20000,
5436
                                        'UserName '
5437
                                     || username
5438
                                     || ' is not valid or disabled.'
5439
                                    );
5440
      END;
5441
 
5442
/*-------------------------------------------------------*/
5443
 
5444
      -- Create package if necessary
5445
      IF isrippled = 1
5446
      THEN
5447
         /* Ripple Build */
5448
         BEGIN
5449
            -- Make sure that package does not exist
5450
            SELECT pv.pv_id
5451
              INTO pvid
5452
              FROM package_versions pv, PACKAGES pkg
5453
             WHERE pv.pkg_id = pkg.pkg_id
5454
               AND pkg.pkg_name = pkgname
5455
               AND pv.pkg_version = newpkgversion;
5456
         EXCEPTION
5457
            WHEN NO_DATA_FOUND
5458
            THEN
5459
               pvid := 0;
5460
         END;
5461
 
5462
         IF (pvid = 0)
5463
         THEN
5464
            -- Split current version in parts
5465
            split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5466
 
5467
            BEGIN
5468
               -- Find package to be replaced with thie ripple package
5469
               IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5470
               THEN
5471
                  SELECT pv.pv_id
5472
                    INTO clonefrompvid
5473
                    FROM PACKAGES pkg, package_versions pv,
5474
                         release_content rc
5475
                   WHERE rc.pv_id = pv.pv_id
5476
                     AND pv.pkg_id = pkg.pkg_id
5477
                     AND rc.rtag_id = rtagid
5478
                     AND pkg.pkg_name = pkgname
5479
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
5480
               ELSE
5481
                  SELECT pv.pv_id
5482
                    INTO clonefrompvid
5483
                    FROM PACKAGES pkg, package_versions pv,
5484
                         release_content rc
5485
                   WHERE rc.pv_id = pv.pv_id
5486
                     AND pv.pkg_id = pkg.pkg_id
5487
                     AND rc.rtag_id = rtagid
5488
                     AND pkg.pkg_name = pkgname
5489
                     AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
5490
               END IF;
5491
            EXCEPTION
5492
               WHEN NO_DATA_FOUND
5493
               THEN
5494
                  raise_application_error
5495
                                        (-20000,
5496
                                            'Cannot get CloneFromPvId. VExt='
5497
                                         || vext
5498
                                         || ', RtagId='
5499
                                         || rtagid
5500
                                         || ', PkgName='
5501
                                         || pkgname
5502
                                         || ', SSV_EXT='
5503
                                         || ssv_ext
5504
                                        );
5505
            END;
5506
 
5507
            IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
5508
            THEN
5509
               -- Create package
5510
               seed_package_names_versions (pkgname,
5511
                                            newpkgversion,
5512
                                            userid,
5513
                                            pvid,
5514
                                            clonefrompvid
5515
                                           );
5516
            ELSE
5517
               -- Create package
5518
               seed_package_names_versions2 (pkgname,
5519
                                             newpkgversion,
5520
                                             userid,
5521
                                             pvid,
5522
                                             clonefrompvid
5523
                                            );
5524
            END IF;
5525
 
5526
            -- Update Package reason for release
5527
            UPDATE package_versions pv
5528
               SET pv.comments = 'Rippled Build.',
5529
                   pv.build_type = 'Y'
5530
             WHERE pv.pv_id = pvid;
5531
         ELSE
5532
            -- Package already exists, it was built previously, and has just been re-built again probably due to the
5533
            -- fact that the archive was cleaned of the original build artifacts at some point, and those artifacts
5534
            -- are now needed once more. As such, we need to ensure that a new release note generation occurs so
5535
            -- reset the package_versions[pvid].release_notes_info field to enable that to happen.
5536
            UPDATE package_versions pv
5537
               SET pv.release_notes_info = null,
5538
                   pv.modified_stamp = ora_sysdatetime
5539
             WHERE pv.pv_id = pvid;
5540
 
5541
            RETURN return_package_already_exists;
5542
         END IF;
5543
      ELSE
5544
         /* Auto build from Pending area */
5545
 
5546
         -- Find package in pending area
5547
         BEGIN
5548
            SELECT pv.pv_id, pv.dlocked
5549
              INTO pvid, dlocked
5550
              FROM planned pl, package_versions pv, PACKAGES pkg
5551
             WHERE pl.pv_id = pv.pv_id
5552
               AND pv.pkg_id = pkg.pkg_id
5553
               AND pl.rtag_id = rtagid
5554
               AND pkg.pkg_name = pkgname
5555
               AND pv.dlocked = 'A'
5556
               AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|')
5557
               AND rownum = 1
5558
             ORDER BY pv.modified_stamp;
5559
         EXCEPTION
5560
            WHEN NO_DATA_FOUND
5561
            THEN
5562
               pvid := 0;
5563
         END;
5564
 
5565
         IF (pvid = 0)
5566
         THEN
5567
            -- Package does not exist in pending area, hence report it
5568
            RETURN return_package_not_found;
5569
         ELSIF (dlocked != 'A')
5570
         THEN
5571
            -- Package is not approved for autobuild
5572
            RETURN return_not_approved;
5573
         END IF;
5574
      END IF;
5575
 
5576
      BEGIN
5577
         -- Import Dependencies
5578
         import_dependencies (pvid, dependenciesimportlist, userid);
5579
      END;
5580
 
5581
      BEGIN
5582
         -- Split current version in parts
5583
         split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
5584
 
5585
         -- Update Package Details
5586
         UPDATE package_versions pv
5587
            SET pv.pkg_version = newpkgversion,
5588
                pv.v_ext = ssv_ext,
5589
                pv.v_mm = ssv_mm,
5590
                pv.v_nmm = ssv_nmm,
5591
                pv.src_path = x_srcpath,
5592
                pv.pkg_label = x_label,
5593
                pv.vcs_type_id = x_vcstypeid
5594
          WHERE pv.pv_id = pvid;
5595
      EXCEPTION
5596
         WHEN DUP_VAL_ON_INDEX
5597
         THEN
5598
            -- Package already exists, hence cannot be used for ripple build
5599
            RETURN return_package_already_exists;
5600
      END;
5601
 
5602
      -- Update the is_autobuildable
5603
      UPDATE package_versions
5604
         SET is_autobuildable = 'Y'
5605
       WHERE pv_id = pvid;
5606
 
5607
      -- Now release package
5608
      pk_environment.auto_make_release (pvid,
5609
                                        rtagid,
5610
                                        userid,
5611
                                        vext,
5612
                                        ssv_ext,
5613
                                        clonefrompvid
5614
                                       );
5615
 
5616
      --Now clean the PLANNED_VERSIONS table
5617
      SELECT pkg_id
5618
        INTO pkgid
5619
        FROM PACKAGES
5620
       WHERE pkg_name = pkgname;
5621
 
5622
      DELETE FROM planned_versions
5623
            WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
5624
 
5625
      RETURN pvid;
5626
   END;
5627
 
5628
/*-------------------------------------------------------------------------------------------------------*/
5629
   PROCEDURE import_dependencies (
5630
      pvid                     IN   NUMBER,
5631
      dependenciesimportlist   IN   VARCHAR2,
5632
      userid                   IN   NUMBER
5633
   )
5634
   IS
5635
/*
5636
|| DependenciesImportList Format:
5637
|| "pkgA","1.0.0";"pkgB","2.0.0";
5638
||  OR 'pkgA','1.0.0';'pkgB','2.0.0';
5639
*/
5640
      TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
5641
         INDEX BY VARCHAR2 (4000);
5642
 
5643
      seperator         VARCHAR2 (2)           := '||';
5644
      pkgname           VARCHAR2 (4000);
5645
      pkgversion        VARCHAR2 (4000);
5646
      buildtype         VARCHAR2 (50);
5647
      pkgid             NUMBER;
5648
      vext              VARCHAR2 (4000);
5649
      dpvid             NUMBER;
5650
      slist             VARCHAR2 (4000);
5651
      cbuildtypes       tdictionary;
5652
      dependencyrow     NUMBER;
5653
      sdependency       VARCHAR2 (4000);
5654
      first_pos         VARCHAR2 (4000);
5655
      second_pos        VARCHAR2 (4000);
5656
      third_pos         VARCHAR2 (4000);
5657
      forth_pos         VARCHAR2 (4000);
5658
      citemcollection   relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
5659
 
5660
      CURSOR curbuildtype
5661
      IS
5662
         SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
5663
                dep.build_type
5664
           FROM package_dependencies dep, package_versions dpv
5665
          WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
5666
 
5667
      recbuildtype      curbuildtype%ROWTYPE;
5668
   BEGIN
5669
      slist := dependenciesimportlist;
5670
 
5671
      -- Preformat String
5672
      IF NOT slist IS NULL
5673
      THEN
5674
         slist := REPLACE (slist, ' ');                      -- Remove spaces
5675
         slist := REPLACE (slist, UTL_TCP.crlf);
5676
         -- Remove new line and carriage-return characters
5677
         slist := REPLACE (slist, '''', '"');             -- Replace ' with "
5678
      END IF;
5679
 
5680
      -- Get Current Dependencies
5681
      OPEN curbuildtype;
5682
 
5683
      FETCH curbuildtype
5684
       INTO recbuildtype;
5685
 
5686
      WHILE curbuildtype%FOUND
5687
      LOOP
5688
         cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
5689
 
5690
         FETCH curbuildtype
5691
          INTO recbuildtype;
5692
      END LOOP;
5693
 
5694
      CLOSE curbuildtype;
5695
 
5696
      -- Separate dependencies with ; separator
5697
      citemcollection := in_list_varchar2 (slist, ';');
5698
 
5699
      BEGIN
5700
         -- Remove old dependencies
5701
         DELETE FROM package_dependencies dep
5702
               WHERE dep.pv_id = pvid;
5703
 
5704
         -- Loop through dependencies
5705
         FOR dependencyrow IN 1 .. citemcollection.COUNT
5706
         LOOP
5707
            -- Extract pkg_name and pkg_version
5708
            sdependency := citemcollection (dependencyrow);
5709
            first_pos := INSTR (sdependency, '"', 1, 1);
5710
            second_pos := INSTR (sdependency, '"', 1, 2);
5711
            third_pos := INSTR (sdependency, '"', 1, 3);
5712
            forth_pos := INSTR (sdependency, '"', 1, 4);
5713
            pkgname :=
5714
               SUBSTR (sdependency,
5715
                       (first_pos + 1),
5716
                       (second_pos - first_pos - 1)
5717
                      );
5718
            pkgversion :=
5719
               SUBSTR (sdependency,
5720
                       (third_pos + 1),
5721
                       (forth_pos - third_pos - 1)
5722
                      );
5723
 
5724
            -- Dependency must exits to be linked against
5725
            BEGIN
5726
               SELECT pv.pv_id, pv.pkg_id, pv.v_ext
5727
                 INTO dpvid, pkgid, vext
5728
                 FROM package_versions pv, PACKAGES pkg
5729
                WHERE pv.pkg_id = pkg.pkg_id
5730
                  AND pkg.pkg_name = pkgname
5731
                  AND pv.pkg_version = pkgversion;
5732
            EXCEPTION
5733
               WHEN NO_DATA_FOUND
5734
               THEN
5735
                  raise_application_error
5736
                                  (-20000,
5737
                                      'Dependency ['
5738
                                   || pkgname
5739
                                   || ' '
5740
                                   || pkgversion
5741
                                   || '] does not exist yet and cannot be used!'
5742
                                  );
5743
            END;
5744
 
5745
            -- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
5746
            BEGIN
5747
               buildtype := cbuildtypes (pkgid || seperator || vext);
5748
 
5749
               IF buildtype IS NULL
5750
               THEN
5751
                  -- Set build type to LinkPackageArchive by default
5752
                  buildtype := 'L';
5753
               END IF;
5754
            EXCEPTION
5755
               WHEN NO_DATA_FOUND
5756
               THEN
5757
                  buildtype := 'L';
5758
            END;
5759
 
5760
            -- Insert Dependencies
5761
            update_package_dependency (pvid,
5762
                                       pkgname,
5763
                                       pkgversion,
5764
                                       buildtype,
5765
                                       userid,
5766
 
5767
                                      );
5768
         END LOOP;
5769
      END;
5770
   END;
5771
 
5772
/*-------------------------------------------------------------------------------------------------------*/
5773
   FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
5774
      RETURN VARCHAR2
5775
   IS
5776
      pkgversion   VARCHAR2 (4000);
5777
   BEGIN
5778
      BEGIN
5779
         SELECT pv.pkg_version
5780
           INTO pkgversion
5781
           FROM PACKAGES pkg, release_content rc, package_versions pv
5782
          WHERE pv.pv_id = rc.pv_id
5783
            AND pkg.pkg_id = pv.pkg_id
5784
            AND pkg.pkg_name = pkgname
5785
            AND rc.rtag_id = rtagid;
5786
 
5787
         RETURN pkgversion;
5788
      END;
5789
   END;
5790
 
5791
/*-------------------------------------------------------------------------------------------------------*/
5792
   FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
5793
      RETURN VARCHAR2
5794
   IS
5795
      pkgversion   VARCHAR2 (4000);
5796
   BEGIN
5797
      BEGIN
5798
         SELECT pv.pkg_version
5799
           INTO pkgversion
5800
           FROM PACKAGES pkg, work_in_progress wip, package_versions pv
5801
          WHERE pv.pv_id = wip.pv_id
5802
            AND pkg.pkg_id = pv.pkg_id
5803
            AND pkg.pkg_name = pkgname
5804
            AND wip.rtag_id = rtagid;
5805
 
5806
         IF pkgversion IS NULL
5807
         THEN
5808
            SELECT pv.pkg_version
5809
              INTO pkgversion
5810
              FROM PACKAGES pkg, planned pl, package_versions pv
5811
             WHERE pv.pv_id = pl.pv_id
5812
               AND pkg.pkg_id = pv.pkg_id
5813
               AND pkg.pkg_name = pkgname
5814
               AND pl.rtag_id = rtagid;
5815
         END IF;
5816
 
5817
         RETURN pkgversion;
5818
      END;
5819
   END;
5820
 
5821
/*-------------------------------------------------------------------------------------------------------*/
5822
   PROCEDURE update_dash_board (rtagid IN NUMBER)
5823
   IS
5824
      projid       NUMBER;
5825
      projiddb     NUMBER;
5826
      total        NUMBER;
5827
      auto_total   NUMBER;
5828
      rtagiddb     NUMBER;
5829
   BEGIN
5830
      SELECT COUNT (*)
5831
        INTO total
5832
        FROM release_content rc, package_versions pv
5833
       WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
5834
 
5835
      SELECT COUNT (*)
5836
        INTO auto_total
5837
        FROM release_content rc, package_versions pv
5838
       WHERE pv.pv_id = rc.pv_id
5839
         AND pv.is_autobuildable = 'Y'
5840
         AND rc.rtag_id = rtagid;
5841
 
5842
      BEGIN
5843
         SELECT rtag_id
5844
           INTO rtagiddb
5845
           FROM dash_board
5846
          WHERE rtag_id = rtagid;
5847
 
5848
         SELECT proj_id
5849
           INTO projiddb
5850
           FROM dash_board
5851
          WHERE rtag_id = rtagid;
5852
      EXCEPTION
5853
         WHEN NO_DATA_FOUND
5854
         THEN
5855
            rtagiddb := '';
5856
      END;
5857
 
5858
      IF rtagiddb IS NULL
5859
      THEN
5860
         SELECT proj_id
5861
           INTO projid
5862
           FROM release_tags
5863
          WHERE rtag_id = rtagid;
5864
 
5865
         INSERT INTO dash_board
5866
                     (proj_id, rtag_id, last_build_time, automated_packages,
5867
                      total_packages
5868
                     )
5869
              VALUES (projid, rtagid, ora_sysdatetime, auto_total,
5870
                      total
5871
                     );
5872
      ELSE
5873
         UPDATE dash_board
5874
            SET last_build_time = ora_sysdatetime,
5875
                automated_packages = auto_total,
5876
                total_packages = total
5877
          WHERE proj_id = projiddb AND rtag_id = rtagiddb;
5878
      END IF;
5879
   END;
5880
 
5881
/*-------------------------------------------------------------------------------------------------------*/
5882
   FUNCTION exclude_from_build (
5883
      pvid          IN   NUMBER,
5884
      spkgversion   IN   VARCHAR2,
5885
      rtagid        IN   NUMBER,
5886
      username      IN   VARCHAR2
5887
   )
5888
      RETURN NUMBER
5889
   IS
5890
      userid              NUMBER;
5891
      outerrcode          NUMBER;
5892
      pkgid               NUMBER;
5893
 
5894
      CURSOR dnr_duplicate_cur
5895
      IS
5896
         SELECT *
5897
           FROM do_not_ripple
5898
          WHERE pv_id = pvid AND rtag_id = rtagid;
5899
 
5900
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
5901
   BEGIN
5902
      outerrcode := -1;       -- Set default return error code to ERROR state
5903
 
5904
      /*--------------- Business Rules Here -------------------*/
5905
      IF (rtagid IS NULL)
5906
      THEN
5907
         RETURN outerrcode;
5908
--         raise_application_error (-20000, 'RtagId must be supplied.');
5909
      END IF;
5910
 
5911
      IF (pvid IS NULL)
5912
      THEN
5913
         RETURN outerrcode;
5914
--         raise_application_error (-20000, 'PvId must be supplied.');
5915
      END IF;
5916
 
5917
      IF (username IS NULL)
5918
      THEN
5919
         RETURN outerrcode;
5920
--         raise_application_error (-20000, 'UserName must be supplied.');
5921
      END IF;
5922
 
5923
      -- Get user_id
5924
      BEGIN
5925
         SELECT usr.user_id
5926
           INTO userid
5927
           FROM users usr
5928
          WHERE UPPER (usr.user_name) = UPPER (username)
5929
            AND usr.is_disabled IS NULL;
5930
      EXCEPTION
5931
         WHEN NO_DATA_FOUND
5932
         THEN
5933
            RETURN outerrcode;
5934
--            raise_application_error (-20000,
5935
--                                        'UserName '
5936
--                                     || username
5937
--                                     || ' is not valid or disabled.'
5938
--                                    );
5939
      END;
5940
 
5941
      OPEN dnr_duplicate_cur;
5942
 
5943
      FETCH dnr_duplicate_cur
5944
       INTO dnr_duplicate_rec;
5945
 
5946
      IF dnr_duplicate_cur%FOUND
5947
      THEN
5948
         outerrcode := 0;
5949
      END IF;
5950
 
5951
      IF dnr_duplicate_cur%NOTFOUND
5952
      THEN
5953
         /* No duplicate recordset */
5954
         unripple_package (pvid, rtagid, userid);
5955
         outerrcode := 0;                            -- Set return to SUCCESS
5956
      END IF;
5957
 
5958
      CLOSE dnr_duplicate_cur;
5959
 
5960
      SELECT pkg_id
5961
        INTO pkgid
5962
        FROM package_versions
5963
       WHERE pv_id = pvid;
5964
 
5965
      DELETE FROM planned_versions
5966
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
5967
 
5968
      RETURN outerrcode;
5969
   END;
5970
 
5971
/*-------------------------------------------------------------------------------------------------------*/
5972
   FUNCTION exclude_indirect_from_build (
5973
      pvid          IN   NUMBER,
5974
      spkgversion   IN   VARCHAR2,
5975
      rtagid        IN   NUMBER,
5976
      username      IN   VARCHAR2,
5977
      rootpvid      IN   NUMBER,
5978
      rootcause     IN   VARCHAR2,
5979
      rootfile      IN   VARCHAR2
5980
   )
5981
      RETURN NUMBER
5982
   IS
5983
      userid              NUMBER;
5984
      outerrcode          NUMBER;
5985
      pkgid               NUMBER;
5986
 
5987
      CURSOR dnr_duplicate_cur
5988
      IS
5989
         SELECT *
5990
           FROM do_not_ripple
5991
          WHERE pv_id = pvid AND rtag_id = rtagid;
5992
 
5993
      dnr_duplicate_rec   dnr_duplicate_cur%ROWTYPE;
5994
   BEGIN
5995
      outerrcode := -1;       -- Set default return error code to ERROR state
5996
 
5997
      /*--------------- Business Rules Here -------------------*/
5998
      IF (rtagid IS NULL)
5999
      THEN
6000
         RETURN outerrcode;
6001
--         raise_application_error (-20000, 'RtagId must be supplied.');
6002
      END IF;
6003
 
6004
      IF (pvid IS NULL)
6005
      THEN
6006
         RETURN outerrcode;
6007
--         raise_application_error (-20000, 'PvId must be supplied.');
6008
      END IF;
6009
 
6010
      IF (username IS NULL)
6011
      THEN
6012
         RETURN outerrcode;
6013
--         raise_application_error (-20000, 'UserName must be supplied.');
6014
      END IF;
6015
 
6016
      -- Get user_id
6017
      BEGIN
6018
         SELECT usr.user_id
6019
           INTO userid
6020
           FROM users usr
6021
          WHERE UPPER (usr.user_name) = UPPER (username)
6022
            AND usr.is_disabled IS NULL;
6023
      EXCEPTION
6024
         WHEN NO_DATA_FOUND
6025
         THEN
6026
            RETURN outerrcode;
6027
--            raise_application_error (-20000,
6028
--                                        'UserName '
6029
--                                     || username
6030
--                                     || ' is not valid or disabled.'
6031
--                                    );
6032
      END;
6033
 
6034
     /* No duplicate recordset */
6035
     unripple_package_indirect (pvid, rtagid, userid, rootpvid, rootcause, rootfile);
6036
     outerrcode := 0;                            -- Set return to SUCCESS
6037
 
6038
      SELECT pkg_id
6039
        INTO pkgid
6040
        FROM package_versions
6041
       WHERE pv_id = pvid;
6042
 
6043
      DELETE FROM planned_versions
6044
            WHERE pkg_id = pkgid AND pkg_version = spkgversion;
6045
 
6046
      RETURN outerrcode;
6047
   END;
6048
/*-------------------------------------------------------------------------------------------------------*/
6049
   PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
6050
   IS
6051
   BEGIN
6052
      INSERT INTO abt_action_log
6053
                  (rcon_id, action_datetime, action
6054
                  )
6055
           VALUES (rconid, ora_sysdatetime, action
6056
                  );
6057
   END;
6058
 
6059
/*-------------------------------------------------------------------------------------------------------*/
6060
   FUNCTION insert_package_metrics (
6061
      rtagid                   IN   NUMBER,
6062
      pkgname                  IN   VARCHAR2,
6063
      vext                     IN   VARCHAR2,
6064
      metricstring             IN   VARCHAR2
6065
   )
6066
      RETURN NUMBER
6067
   IS
6068
      citemcollection          relmgr_varchar2_tab_t  := relmgr_varchar2_tab_t ();
6069
      lv_pvid                  NUMBER                 := 0;
6070
      rownumber                NUMBER;
6071
      rowcontent               VARCHAR2(4000);
6072
      metricname               VARCHAR2(1000);
6073
      metricvalue              VARCHAR2(4000);
6074
      return_insert_error      NUMBER                 := -1;
6075
      return_insert_success    NUMBER                 := 0;
6076
 
6077
      /* Metrics */
6078
      lv_branches                 NUMBER;
6079
      lv_branchlist               VARCHAR2(4000);
6080
      lv_codefiles                NUMBER;
6081
      lv_ignoredfiles             NUMBER;
6082
      lv_directories              NUMBER;
6083
      lv_directorydepth           NUMBER;
6084
      lv_totalfiles               NUMBER;
6085
      lv_makefiles                NUMBER;
6086
      lv_blanklines               NUMBER;
6087
      lv_codelines                NUMBER;
6088
      lv_commentlines             NUMBER;
6089
 
6090
   BEGIN
6091
      /*--------------- Business Rules Here -------------------*/
6092
      IF (rtagid IS NULL)
6093
      THEN
6094
         RETURN return_insert_error;
6095
      END IF;
6096
 
6097
      IF (pkgname IS NULL)
6098
      THEN
6099
         RETURN return_insert_error;
6100
      END IF;
6101
 
6102
      IF (metricstring IS NULL)
6103
      THEN
6104
         RETURN return_insert_error;
6105
      END IF;
6106
 
6107
      BEGIN
6108
         SELECT pv.pv_id
6109
           INTO lv_pvid
6110
           FROM package_versions pv, packages pkg, release_content rc
6111
          WHERE pv.pkg_id = pkg.pkg_id
6112
            AND rc.rtag_id = rtagid
6113
            AND pv.pv_id = rc.pv_id
6114
            AND pkg.pkg_name = pkgname
6115
            AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
6116
      EXCEPTION
6117
           WHEN NO_DATA_FOUND
6118
           THEN
6119
                lv_pvid := 0;
6120
      END;
6121
 
6122
      citemcollection := in_list_varchar2 (metricstring, ';');
6123
 
6124
      FOR rownumber IN 1 .. citemcollection.COUNT
6125
      LOOP
6126
         rowcontent := citemcollection(rownumber);
6127
         metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
6128
         metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
6129
 
6130
         IF    metricname = 'ccbranch.count' THEN lv_branches := metricvalue;
6131
         ELSIF metricname = 'ccbranch.list' THEN lv_branchlist := metricvalue;
6132
         ELSIF metricname = 'code.files' THEN lv_codefiles := metricvalue;
6133
         ELSIF metricname = 'code.ignored' THEN lv_ignoredfiles := metricvalue;
6134
         ELSIF metricname = 'count.dir' THEN lv_directories := metricvalue;
6135
         ELSIF metricname = 'count.dirdepth' THEN lv_directorydepth := metricvalue;
6136
         ELSIF metricname = 'count.file' THEN lv_totalfiles := metricvalue;
6137
         ELSIF metricname = 'count.makefile' THEN lv_makefiles := metricvalue;
6138
         ELSIF metricname = 'lines.blank' THEN lv_blanklines := metricvalue;
6139
         ELSIF metricname = 'lines.code' THEN lv_codelines := metricvalue;
6140
         ELSIF metricname = 'lines.comment' THEN lv_commentlines := metricvalue;
6141
         END IF;
6142
      END LOOP;
6143
 
6144
      IF (lv_pvid > 0)
6145
      THEN
6146
         -- Delete any existing entries for this package version to makes sure our data is untainted
6147
         DELETE FROM package_metrics pm
6148
         WHERE pm.pv_id = lv_pvid;
6149
 
6150
         -- Insert the new data into the metrics table
6151
         INSERT INTO package_metrics
6152
                     (pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
6153
                      total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
6154
                     )
6155
              VALUES (lv_pvid, lv_branches, lv_branchlist, lv_codefiles, lv_ignoredfiles, lv_directories, lv_directorydepth,
6156
                      lv_totalfiles, lv_makefiles, lv_blanklines, lv_codelines, lv_commentlines, ora_sysdatetime
6157
                     );
6158
 
6159
         -- Now update the Release_Metrics Table
6160
         update_release_metrics(rtagid);
6161
 
6162
         RETURN return_insert_success;
6163
      ELSE
6164
         RETURN return_insert_error;
6165
      END IF;
6166
   END;
6167
 
6168
/*-------------------------------------------------------------------------------------------------------*/
6169
   PROCEDURE update_release_metrics (rtagid IN NUMBER)
6170
   IS
6171
      lv_totalpackages       NUMBER;
6172
      lv_autobuilt           NUMBER;
6173
      lv_linesofcode         NUMBER;
6174
      lv_unittested          NUMBER;
6175
      lv_autotested          NUMBER;
6176
      lv_numOfbranches       NUMBER;
6177
      lv_lastbuildtime       DATE;
6178
   BEGIN
6179
      IF (rtagid > 0)
6180
      THEN
6181
         -- Get the total number of packages in this release and the number of
6182
         -- those that are autobuilt
6183
         SELECT COUNT (DISTINCT rc.pv_id),
6184
                COUNT (DISTINCT autobuilt_qry.pv_id)
6185
           INTO lv_totalpackages, lv_autobuilt
6186
           FROM release_content rc,
6187
                package_versions pv,
6188
                (
6189
                 SELECT rc.pv_id
6190
                   FROM release_content rc,
6191
                        package_versions pv
6192
                  WHERE pv.is_autobuildable = 'Y'
6193
                    AND pv.pv_id = rc.pv_id
6194
                    AND rc.rtag_id = rtagid
6195
                ) autobuilt_qry
6196
          WHERE pv.pv_id = rc.pv_id
6197
            AND rc.rtag_id = rtagid
6198
            AND autobuilt_qry.pv_id (+) = rc.pv_id;
6199
 
6200
         -- Get the build time of the last package built in this release and the
6201
         -- total number of lines of code
6202
         SELECT MAX(pm.created_stamp),
6203
                SUM(pm.code_lines)
6204
           INTO lv_lastbuildtime, lv_linesofcode
6205
           FROM package_metrics pm, release_content rc
6206
          WHERE pm.pv_id = rc.pv_id
6207
            AND rc.rtag_id = rtagid;
6208
 
6209
         -- Get the number of packages with unit tests in this release and the
6210
         -- number of those that are autotested
6211
         SELECT COUNT(DISTINCT ut.pv_id) INTO lv_unittested
6212
           FROM unit_tests ut,
6213
                release_content rc
6214
          WHERE ut.pv_id = rc.pv_id
6215
            AND rc.rtag_id = rtagid
6216
        AND ut.test_types_fk != 1;
6217
 
6218
        SELECT COUNT(DISTINCT ut.pv_id) INTO lv_autotested
6219
          FROM unit_tests ut,
6220
               release_content rc
6221
         WHERE ut.pv_id = rc.pv_id
6222
           AND rc.rtag_id = rtagid
6223
           AND ut.test_types_fk = 7;
6224
 
6225
 
6226
         -- Count the number of unique branches in the packages in this release.
6227
--         SELECT COUNT(DISTINCT branch) INTO lv_numOfbranches
6228
--           FROM (
6229
--                SELECT pv_id,
6230
--                       regexp_substr(str, '[^,]+', 1, level) branch,
6231
--                       level lv,
6232
--                       lag(level, 1, 0) over (partition by pv_id order by level) lg
6233
--                  FROM (
6234
--                       SELECT pm.pv_id,
6235
--                              ','||pm.branch_list str
6236
--                         FROM package_metrics pm,
6237
--                              release_content rc
6238
--                        WHERE pm.pv_id = rc.pv_id
6239
--                          AND rc.rtag_id = rtagid
6240
--                       )
6241
--                CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
6242
--                )
6243
--          WHERE lv != lg;
6244
 
6245
         UPDATE release_metrics rm
6246
            SET rm.total_packages = lv_totalpackages,
6247
                rm.autobuilt = lv_autobuilt,
6248
                rm.lines_of_code = lv_linesofcode,
6249
                rm.unit_tested = lv_unittested,
6250
                rm.autotested = lv_autotested,
6251
--                rm.branches = lv_numOfbranches,
6252
                rm.last_build_time = lv_lastbuildtime
6253
          WHERE rtag_id = rtagid;
6254
 
6255
         IF (SQL%ROWCOUNT = 0)
6256
         THEN
6257
            INSERT INTO release_metrics
6258
                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6259
                         autotested, last_build_time
6260
                        )
6261
                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6262
                         lv_autotested, lv_lastbuildtime
6263
                        );
6264
         END IF;
6265
--         IF (SQL%ROWCOUNT = 0)
6266
--         THEN
6267
--            INSERT INTO release_metrics
6268
--                        (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
6269
--                         autotested, branches, last_build_time
6270
--                        )
6271
--                 VALUES (rtagid, lv_totalpackages, lv_autobuilt, lv_linesofcode, lv_unittested,
6272
--                         lv_autotested, lv_numOfbranches, lv_lastbuildtime
6273
--                        );
6274
--         END IF;
6275
--      ELSE
6276
--         raise_application_error (-20000, 'RtagId must be supplied.');
6277
      END IF;
6278
   END;
6279
/*-------------------------------------------------------------------------------------------------------*/
6280
   FUNCTION return_vcs_tag(pvid IN NUMBER) RETURN VARCHAR2
6281
   IS
6282
      vcstypeid    NUMBER;
6283
      vcstag       VARCHAR2(32);
6284
      label        VARCHAR2(60);
6285
      srcpath      VARCHAR2(2000);
6286
      vcstypeid_cc NUMBER;
6287
      vcstypeid_uc NUMBER;
6288
   BEGIN
6289
      -- Get the VCS_TYPE_ID for the ClearCase version control system. We do this so that we make no assumptions about
6290
      -- what the primary key value is for the ClearCase VCS entry.
6291
      BEGIN
6292
         SELECT vt.vcs_type_id
6293
         INTO vcstypeid_cc
6294
         FROM VCS_TYPE vt
6295
         WHERE vt.tag = 'CC';
6296
         EXCEPTION
6297
            WHEN NO_DATA_FOUND THEN
6298
               raise_application_error (-20000, 'Database is missing compulsory CC version control system tag!');
6299
      END;
6300
 
6301
      -- Get the VCS_TYPE_ID for the Uncontrolled version control system. We do this so that we make no assumptions about
6302
      -- what the primary key value is for the Uncontrolled VCS entry.
6303
      BEGIN
6304
         SELECT vt.vcs_type_id
6305
         INTO vcstypeid_uc
6306
         FROM VCS_TYPE vt
6307
         WHERE vt.tag = 'UC';
6308
         EXCEPTION
6309
            WHEN NO_DATA_FOUND THEN
6310
               raise_application_error (-20000, 'Database is missing compulsory UC version control system tag!');
6311
      END;
6312
 
6313
      -- Get the PKG_LABEL, SRC_PATH, VCS_TYPE_ID for the package version
6314
      -- As additional VCS types are introduced, we may have to extend what this SELECT statement returns
6315
      BEGIN
6316
         SELECT pv.pkg_label, pv.src_path,
6317
           (CASE WHEN pv.pkg_label = 'N/A' AND pv.vcs_type_id IS NULL THEN vcstypeid_uc
6318
                 WHEN pv.vcs_type_id IS NULL THEN vcstypeid_cc
6319
                 ELSE pv.vcs_type_id END) AS vcs_type_id
6320
         INTO label, srcpath, vcstypeid
6321
         FROM PACKAGE_VERSIONS pv
6322
         WHERE pv.pv_id = pvid;
6323
         EXCEPTION
6324
            WHEN NO_DATA_FOUND THEN
6325
               raise_application_error (-20000, 'Package Version Not Found!');
6326
      END;
6327
 
6328
      -- Get the VCS TAG for the VCS_TYPE_ID.
6329
      BEGIN
6330
         SELECT vt.tag
6331
         INTO vcstag
6332
         FROM VCS_TYPE vt
6333
         WHERE vt.vcs_type_id = vcstypeid;
6334
         EXCEPTION
6335
            WHEN NO_DATA_FOUND THEN
6336
               raise_application_error (-20000, 'Could not get VCS Tag for the package version!');
6337
      END;
6338
 
6339
      -- Return value depending upon which VCS Tag is being used.
6340
      -- As additional VCS types are introduced, we have to add additional WHEN clauses
6341
      CASE vcstag
6342
         WHEN 'CC' THEN
6343
            RETURN vcstag || '::' || srcpath || '::' || label;
6344
         WHEN 'SVN' THEN
6345
            RETURN vcstag || '::' || srcpath;
6346
         ELSE
6347
            RETURN vcstag || '::';
6348
      END CASE;
6349
 
6350
   END;
6351
/*-------------------------------------------------------------------------------------------------------*/
6352
 
6353
END pk_rmapi_test;
1374 dpurdie 6354
/
6355
--------------------------------------------------------
6356
--  DDL for Package Body PK_LICENCING
6357
--------------------------------------------------------
1373 dpurdie 6358
 
6359
  CREATE OR REPLACE PACKAGE BODY "PK_LICENCING" IS
6360
 
6361
/*
6362
------------------------------
6363
||  Last Modified:  G.Huddy
6364
||  Modified Date:  19/Aug/2008
6365
||  Body Version:   1.0
6366
------------------------------
6367
*/
6368
 
6369
   PROCEDURE ADD_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6370
   BEGIN
6371
      IF IS_LICENCED(PvId, licenceId) = 0 THEN
6372
         -- Add entry to licencing table
6373
         INSERT INTO licencing (pv_id, licence)
6374
         VALUES (PvId, licenceId);
6375
 
6376
         -- log action
6377
         -- TODO
6378
      END IF;
6379
 
6380
   END;
6381
 
6382
/*-------------------------------------------------------------------------------------------------------*/
6383
 
6384
   PROCEDURE REMOVE_LICENCE ( PvId IN NUMBER, licenceId IN NUMBER, UserId IN NUMBER ) IS
6385
   BEGIN
6386
      IF NOT IS_LICENCED(PvId, licenceId) = 0 THEN
6387
         -- Delete entry from licencing table
6388
         DELETE FROM licencing
6389
         WHERE pv_id = PvId
6390
         AND licence = licenceId;
6391
 
6392
         -- log action
6393
         -- TODO
6394
      END IF;
6395
   END;
6396
 
6397
/*-------------------------------------------------------------------------------------------------------*/
6398
 
6399
   PROCEDURE CLONE_LICENCING( fromPvId IN NUMBER, toPvId IN NUMBER, UserId IN NUMBER ) IS
6400
 
6401
      CURSOR licencing_cur
6402
      IS
6403
         SELECT *
6404
         FROM licencing
6405
         WHERE pv_id = fromPvId;
6406
 
6407
      licencing_rec licencing_cur%ROWTYPE;
6408
 
6409
   BEGIN
6410
      -- For each licence association that the Last PV_ID had, create a similar
6411
      -- arrangement for the new PV_ID
6412
      -- NOTE that any additional licencing associations the new PV_ID has that the old one
6413
      -- does not have, are retained. The assumption is that the user has made those and so we do not
6414
      -- have any right to destroy them without asking them.
6415
      OPEN licencing_cur;
6416
 
6417
      FETCH licencing_cur
6418
      INTO licencing_rec;
6419
 
6420
      WHILE licencing_cur%FOUND
6421
      LOOP
6422
         ADD_LICENCE ( toPvId, licencing_rec.licence, UserId );
6423
 
6424
         FETCH licencing_cur
6425
         INTO licencing_rec;
6426
      END LOOP;
6427
   END;
6428
 
6429
/*-------------------------------------------------------------------------------------------------------*/
6430
 
6431
   FUNCTION IS_LICENCED( PvId IN NUMBER, licenceId IN NUMBER) RETURN NUMBER IS
6432
      found NUMBER;
6433
   BEGIN
6434
 
6435
      SELECT COUNT(*) INTO found
6436
      FROM licencing
6437
      WHERE pv_id = PvId
6438
      AND licence = LicenceId;
6439
 
6440
      RETURN found;
6441
   END;
6442
 
6443
/*-------------------------------------------------------------------------------------------------------*/
6444
 
6445
   PROCEDURE REMOVE_ALL_LICENCING( PvId IN NUMBER, UserId IN NUMBER ) IS
6446
 
6447
      CURSOR licencing_cur
6448
      IS
6449
         SELECT *
6450
         FROM licencing
6451
         WHERE pv_id = PvId;
6452
 
6453
      licencing_rec licencing_cur%ROWTYPE;
6454
   BEGIN
6455
      -- For each licence association that the PV_ID had, remove it
6456
      OPEN licencing_cur;
6457
 
6458
      FETCH licencing_cur
6459
      INTO licencing_rec;
6460
 
6461
      WHILE licencing_cur%FOUND
6462
      LOOP
6463
         REMOVE_LICENCE ( PvId, licencing_rec.licence, UserId );
6464
 
6465
         FETCH licencing_cur
6466
         INTO licencing_rec;
6467
      END LOOP;
6468
   END;
6469
 
6470
/*-------------------------------------------------------------------------------------------------------*/
6471
END PK_LICENCING;
1374 dpurdie 6472
/
6473
--------------------------------------------------------
6474
--  DDL for Package Body RM_ISSUES
6475
--------------------------------------------------------
1373 dpurdie 6476
 
6477
  CREATE OR REPLACE PACKAGE BODY "RM_ISSUES" AS
6478
 
6479
-- Private Implementation -----------------------------------------------------
6480
 
6481
 
6482
	FUNCTION VerIsGrtrThanOrEqlToStart( XXstart IN NUMBER, XX IN NUMBER, YYstart IN NUMBER, YY IN NUMBER, ZZstart IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6483
	AS
6484
 
6485
	BEGIN
6486
		-- start boundary case
6487
		IF ( XXstart < XX ) THEN
6488
			RETURN 1;
6489
 
6490
		ELSIF ( XXstart = XX ) THEN
6491
 
6492
			-- need to consider YY
6493
			IF ( YYstart < YY ) THEN
6494
				RETURN 1;
6495
 
6496
			ELSIF ( YYstart = YY ) THEN
6497
 
6498
					-- need to consider ZZ
6499
					IF ( ZZstart <= ZZ ) THEN
6500
						RETURN 1;
6501
 
6502
					ELSE
6503
						RETURN 0;
6504
					END IF;
6505
 
6506
			ELSE
6507
				RETURN 0;
6508
			END IF;
6509
		ELSE
6510
			RETURN 0;
6511
		END IF;
6512
	EXCEPTION
6513
		WHEN OTHERS THEN
6514
			RETURN -1;
6515
	END;
6516
 
6517
 
6518
	FUNCTION VerIsLessThanOrEqlToEnd( XXend IN NUMBER, XX IN NUMBER, YYend IN NUMBER, YY IN NUMBER, ZZend IN NUMBER, ZZ IN NUMBER ) RETURN NUMBER
6519
	AS
6520
 
6521
	BEGIN
6522
		-- end boundary case
6523
		IF ( XX < XXend ) THEN
6524
			RETURN 1;
6525
 
6526
		ELSIF ( XX = XXend ) THEN
6527
 
6528
			-- need to consider YY
6529
			IF ( YY < YYend ) THEN
6530
				RETURN 1;
6531
 
6532
			ELSIF ( YY = YYend ) THEN
6533
 
6534
					-- need to consider ZZ
6535
					IF ( ZZ <= ZZend ) THEN
6536
						RETURN 1;
6537
 
6538
					ELSE
6539
						RETURN 0;
6540
					END IF;
6541
			ELSE
6542
 
6543
				RETURN 0;
6544
			END IF;
6545
		ELSE
6546
			RETURN 0;
6547
		END IF;
6548
	EXCEPTION
6549
		WHEN OTHERS THEN
6550
			RETURN -1;
6551
	END;
6552
 
6553
	/*
6554
	-	version format:		XX.YY.ZZ.abc
6555
	*/
6556
	FUNCTION VersionIsBetween( version IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR ) RETURN NUMBER
6557
	AS
6558
		XXstart		NUMBER	:=	0;
6559
		XXend		NUMBER	:=	0;
6560
		XX			NUMBER	:=	0;
6561
		YYstart		NUMBER	:=	0;
6562
		YYend		NUMBER	:=	0;
6563
		YY			NUMBER	:=	0;
6564
		ZZstart		NUMBER	:=	0;
6565
		ZZend		NUMBER	:=	0;
6566
		ZZ			NUMBER	:=	0;
6567
		first_dot	NUMBER	:=	0;
6568
		second_dot	NUMBER	:=	0;
6569
		third_dot	NUMBER	:=	0;
6570
 
6571
		ProjExtstart	VARCHAR2(10);
6572
		ProjExtend		VARCHAR2(10);
6573
		ProjExt			VARCHAR2(10);
6574
 
6575
	BEGIN
6576
		-- strip the version number
6577
		first_dot :=  INSTR(version_start, '.', 1, 1);
6578
		second_dot :=  INSTR(version_start, '.', 1, 2);
6579
		third_dot :=  INSTR(version_start, '.', 1, 3);
6580
 
6581
		XXstart := TO_NUMBER( SUBSTR( version_start, 1, first_dot - 1 ) );
6582
		YYstart := TO_NUMBER( SUBSTR( version_start, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6583
		ZZstart := TO_NUMBER( SUBSTR( version_start, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6584
		ProjExtstart := SUBSTR( version_start, third_dot + 1, LENGTH(version_start) - third_dot );
6585
 
6586
		first_dot :=  INSTR(version_end, '.', 1, 1);
6587
		second_dot :=  INSTR(version_end, '.', 1, 2);
6588
		third_dot :=  INSTR(version_end, '.', 1, 3);
6589
 
6590
		XXend := TO_NUMBER( SUBSTR( version_end, 1, first_dot - 1 ) );
6591
		YYend := TO_NUMBER( SUBSTR( version_end, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6592
		ZZend := TO_NUMBER( SUBSTR( version_end, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6593
		ProjExtend := SUBSTR( version_end, third_dot + 1, LENGTH(version_end) - third_dot );
6594
 
6595
		first_dot :=  INSTR(version, '.', 1, 1);
6596
		second_dot :=  INSTR(version, '.', 1, 2);
6597
		third_dot :=  INSTR(version, '.', 1, 3);
6598
 
6599
		XX := TO_NUMBER( SUBSTR( version, 1, first_dot - 1 ) );
6600
		YY := TO_NUMBER( SUBSTR( version, first_dot + 1, second_dot - ( first_dot + 1 ) ) );
6601
		ZZ := TO_NUMBER( SUBSTR( version, second_dot + 1, third_dot - ( second_dot + 1 ) ) );
6602
		ProjExt := SUBSTR( version, third_dot + 1, LENGTH(version) - third_dot );
6603
 
6604
		-- only include versions if all project extensions are the same
6605
		IF ( ProjExtstart = ProjExt AND ProjExt = ProjExtend ) THEN
6606
 
6607
			IF ( VerIsGrtrThanOrEqlToStart( XXstart, XX, YYstart, YY, ZZstart, ZZ ) = 1 AND VerIsLessThanOrEqlToEnd( XXend, XX, YYend, YY, ZZend, ZZ ) = 1 ) THEN
6608
				RETURN 1;
6609
			ELSE
6610
				RETURN 0;
6611
			END IF;
6612
		ELSE
6613
			RETURN 0;
6614
		END IF;
6615
 
6616
	EXCEPTION
6617
		WHEN OTHERS THEN
6618
			RETURN -1;
6619
	END;
6620
 
6621
	FUNCTION GetPkgId( pkgName IN VARCHAR2 ) RETURN NUMBER
6622
	AS
6623
	    pkg_id NUMBER;
6624
	BEGIN
6625
		SELECT
6626
			p.PKG_ID
6627
		INTO
6628
			pkg_id
6629
		FROM
6630
			PACKAGES p
6631
		WHERE
6632
			p.PKG_NAME = pkgName;
6633
 
6634
		RETURN pkg_id;
6635
	EXCEPTION
6636
	    WHEN OTHERS THEN
6637
			dbms_output.put_line('GetPkgId exception: ' || SQLERRM );
6638
			RETURN -1;
6639
	END;
6640
 
6641
 
6642
-- Public Implementation ------------------------------------------------------
6643
 
6644
	/*
6645
	-- Proc: AllIssues - Gets all issues for a package from dependent packages one level deep
6646
	--
6647
	-- INPUT PARAMETERS:
6648
	--
6649
	--		pkg_name  	-  	The name of the top level package to get issues for
6650
	--		version_start	-	The start version for the comparison
6651
	--		version_end	-	The end version for the comparison
6652
	*/
6653
	PROCEDURE AllIssues( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6654
	AS
6655
		pkgId	NUMBER;
6656
	BEGIN
6657
		-- get pkg_id of the input package:
6658
		pkgId := GetPkgId( pkg_name );
6659
 
6660
		OPEN vCursor FOR
6661
		SELECT
6662
			  pv.PKG_ID,
6663
			  pv.PKG_VERSION,
6664
			  pv.PV_ID,
6665
			  i_pkg.ISS_ID,
6666
			  ( SELECT pkg_name FROM PACKAGES WHERE pkg_id = pd.DPKG_ID ) AS DPV_NAME,
6667
			  pd.DPKG_ID,
6668
			  ( SELECT pkg_version FROM PACKAGE_VERSIONS WHERE pv_id = pd.DPV_ID ) AS DPV_VER,
6669
			  pd.DPV_ID,
6670
			  i_dpkg.ISS_ID AS ISSUE_ID
6671
		FROM
6672
			 PACKAGE_VERSIONS pv
6673
							  LEFT OUTER JOIN CQ_ISSUES i_pkg ON pv.PV_ID = i_pkg.PV_ID
6674
							  LEFT OUTER JOIN PACKAGE_DEPENDENCIES pd ON pv.PV_ID = pd.PV_ID
6675
							  LEFT OUTER JOIN CQ_ISSUES i_dpkg ON pd.DPV_ID = i_dpkg.PV_ID
6676
		WHERE
6677
   			 pv.PKG_ID = pkgId
6678
		AND
6679
			VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1
6680
		AND
6681
			 ( i_dpkg.ISS_ID IS NOT NULL OR i_pkg.ISS_ID IS NOT NULL )
6682
		ORDER BY
6683
			 pv.PKG_ID,
6684
			 pv.PV_ID,
6685
			 pd.DPKG_ID,
6686
			 pd.DPV_ID;
6687
	EXCEPTION
6688
		WHEN OTHERS THEN
6689
			dbms_output.put_line('AllIssues exception: ' || SQLERRM );
6690
	END;
6691
 
6692
 
6693
	-- NOTE: make RM_PACKAGE_ISSUES a temporary table when tested ok
6694
 
6695
	/*
6696
	-- Proc: LoadIssuesTable
6697
	--
6698
	-- Populates Package_Issues table with details of issues from all dependent packages.
6699
	-- This will be for all package versions of the input pkg_name between the
6700
	-- version_start and version_end.
6701
	--
6702
	-- INPUT PARAMETERS:
6703
	--
6704
	--		pkg_name  	-  	The name of the top level package to get issues for
6705
	--		version_start	-	The start version for the comparison
6706
	--		version_end	-	The end version for the comparison
6707
	*/
6708
	PROCEDURE LoadIssuesTable( vCursor OUT T_Cur, pkg_name IN VARCHAR2, version_start IN VARCHAR2, version_end IN VARCHAR2 )
6709
	AS
6710
		pkgId	NUMBER;
6711
 
6712
		CURSOR pack_vers_cur IS
6713
			SELECT
6714
				pv.PV_ID,
6715
				pv.PKG_VERSION,
6716
				pv.PKG_ID,
6717
				p.PKG_NAME
6718
			FROM
6719
				PACKAGE_VERSIONS pv
6720
					JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6721
			WHERE
6722
   				 pv.PKG_ID = pkgId
6723
			AND
6724
				VersionIsBetween( pv.PKG_VERSION, version_start, version_end ) = 1;
6725
 
6726
	BEGIN
6727
		DELETE FROM RELEASE_MANAGER.RM_PKG_ISSUES; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6728
 
6729
		-- get the pkg_id we are finding issues for
6730
		pkgId := GetPkgId( pkg_name );
6731
 
6732
		-- find all the top level packages we are dealing with and recursively process their issues and their dependent package issues.
6733
		FOR pack_ver_rec IN  pack_vers_cur
6734
		LOOP
6735
			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 );
6736
			COMMIT;
6737
		END LOOP;
6738
 
6739
		-- The output cursor - shows the individual versions of the top level package then were reported on
6740
		OPEN vCursor FOR
6741
		SELECT DISTINCT ISS_ID, PKG_VERSION FROM RM_PKG_ISSUES WHERE ISS_ID IS NOT NULL; /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6742
/*removed
6743
		SELECT
6744
			PKG_VERSION
6745
		FROM
6746
			RELEASE_MANAGER.RM_PACKAGE_ISSUES;
6747
*/
6748
 
6749
 
6750
	EXCEPTION
6751
		WHEN OTHERS THEN
6752
			dbms_output.put_line('LoadIssuesTable exception: ' || SQLERRM );
6753
	END;
6754
 
6755
 
6756
	/*
6757
	-- Proc: InsertIssuesForDepends
6758
	--
6759
	-- Used by LoadIssuesTable to recursively find issues for all dependent packages
6760
	--
6761
	-- INPUT PARAMETERS:
6762
	--
6763
	--		pvID  		-  	The package version id of the package to get issues for
6764
	--		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)
6765
	--		top_pkgName -  	The package name of the top level package
6766
	--		top_pvID  	-  	The package version id of the top level package
6767
	--		top_pkgVer  -  	The package version description of the top level package
6768
	*/
6769
	PROCEDURE InsertIssuesForDepends( pvID IN NUMBER, top_pkgID IN NUMBER, top_pkgName IN VARCHAR2, top_pvID IN NUMBER, top_pkgVer IN VARCHAR2 )
6770
	AS
6771
		pkgId		NUMBER;
6772
		issCnt		NUMBER := 0;
6773
		pkgCheck	NUMBER := 0;
6774
		depCheck	NUMBER := 0;
6775
 
6776
		dpkgName	VARCHAR(50);
6777
		dpkgVersion	VARCHAR(50);
6778
 
6779
		CURSOR dep_packs_cur IS
6780
			SELECT
6781
				DPV_ID
6782
			FROM
6783
				PACKAGE_DEPENDENCIES
6784
			WHERE
6785
				PV_ID = pvID;
6786
 
6787
	BEGIN
6788
 
6789
		-- check to see if the package has been processed previously
6790
		SELECT
6791
			COUNT(*)
6792
		INTO
6793
			pkgCheck
6794
		FROM
6795
			RM_PKG_ISSUES /*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6796
		WHERE
6797
			DPV_ID = pvID;
6798
 
6799
		dbms_output.put_line('pkgCheck: ' || pkgCheck );
6800
 
6801
		-- Package not already processed (no cyclic dependency) - process it
6802
		IF ( pkgCheck = 0 ) THEN
6803
 
6804
			-- check to see if this package version has any issues assigned to it
6805
			SELECT
6806
				COUNT(*)
6807
			INTO
6808
				issCnt
6809
			FROM
6810
				CQ_ISSUES i
6811
			WHERE
6812
				i.PV_ID = pvID;
6813
 
6814
			dbms_output.put_line('issCnt: ' || issCnt );
6815
 
6816
			-- Always enter a marker row into the table even if there are no issues for the package.
6817
			-- This allows us to pick up any cyclic dependencies.
6818
			IF ( issCnt > 0 ) THEN
6819
				-- get issues and insert into RM_PACKAGE_ISSUES
6820
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6821
 
6822
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6823
					SELECT DISTINCT
6824
						top_pkgID		AS PKG_ID,
6825
						top_pkgName		AS PKG_NAME,
6826
						top_pvID		AS PV_ID,
6827
						top_pkgVer		AS PKG_VERSION,
6828
						pv.PV_ID		AS DPV_ID,
6829
						p.PKG_NAME		AS DPKG_NAME,
6830
						pv.PKG_VERSION	AS DPKG_VERSION,
6831
						ci.ISS_DB,
6832
						ci.ISS_ID
6833
					FROM
6834
						PACKAGE_VERSIONS pv
6835
							JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6836
							JOIN CQ_ISSUES ci ON pv.PV_ID = ci.PV_ID
6837
					WHERE
6838
						pv.PV_ID = pvID;
6839
 
6840
			ELSE
6841
				-- get the dpkg details - there will always be a row returned here
6842
				SELECT
6843
					p.PKG_NAME
6844
				INTO
6845
					dpkgName
6846
				FROM
6847
					PACKAGE_VERSIONS pv
6848
						JOIN PACKAGES p ON pv.PKG_ID = p.PKG_ID
6849
				WHERE
6850
	   				 pv.PV_ID = pvID;
6851
 
6852
				SELECT
6853
					pv.PKG_VERSION
6854
				INTO
6855
					dpkgVersion
6856
				FROM
6857
					PACKAGE_VERSIONS pv
6858
				WHERE
6859
	   				 pv.PV_ID = pvID;
6860
 
6861
				-- enter a marker row
6862
				/*RM_PACKAGE_ISSUES replaced by RM_PKG_ISSUES*/
6863
				INSERT INTO RM_PKG_ISSUES ( PKG_ID, PKG_NAME, PV_ID, PKG_VERSION, DPV_ID, DPKG_NAME, DPKG_VERSION, ISS_DB, ISS_ID )
6864
				VALUES (
6865
					top_pkgID,
6866
					top_pkgName,
6867
					top_pvID,
6868
					top_pkgVer,
6869
					pvID,
6870
					dpkgName,
6871
					dpkgVersion,
6872
					NULL,
6873
					NULL );
6874
 
6875
			END IF;
6876
 
6877
			-- If this package version has dependencies then recurse
6878
			SELECT
6879
				COUNT(*)
6880
			INTO
6881
				depCheck
6882
			FROM
6883
				PACKAGE_DEPENDENCIES
6884
			WHERE
6885
				PV_ID = pvID;
6886
 
6887
			IF ( depCheck > 0 ) THEN
6888
				-- get dependencies and call this function recursively for each one
6889
				FOR dep_rec IN  dep_packs_cur
6890
				LOOP
6891
					InsertIssuesForDepends( dep_rec.DPV_ID, top_pkgID, top_pkgName, top_pvID, top_pkgVer );
6892
				END LOOP;
6893
 
6894
			END IF;
6895
 
6896
		END IF;
6897
 
6898
	/*EXCEPTION
6899
		WHEN OTHERS THEN
6900
			no exception handling required
6901
	*/
6902
	END;
6903
 
6904
END Rm_Issues;
1374 dpurdie 6905
/
6906
--------------------------------------------------------
6907
--  DDL for Package Body PK_RELEASE_TEST
6908
--------------------------------------------------------
1373 dpurdie 6909
 
6910
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE_TEST" IS
6911
 
6912
 
6913
/*
6914
------------------------------
6915
||  Last Modified:  S.Vukovic
6916
||  Modified Date:  12/Sep/2005
6917
||  Body Version:   3.0
6918
------------------------------
6919
*/
6920
 
6921
 
6922
/*-------------------------------------------------------------------------------------------------------*/
6923
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
6924
 
6925
RtagId NUMBER;
6926
ParentRtagId NUMBER;
6927
RecCount NUMBER := 0;
6928
 
6929
 
6930
BEGIN
6931
	/*--------------- Business Rules Here -------------------*/
6932
	-- Check for missing parameters
6933
	IF (sReleaseName IS NULL) OR (nUserId IS NULL)
6934
	THEN
6935
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
6936
 
6937
	END IF;
6938
 
6939
 
6940
	-- Check for duplicate Release Names
6941
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
6942
	  FROM RELEASE_TAGS rt
6943
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
6944
	   AND rt.PROJ_ID = nProjId;
6945
 
6946
	IF (RecCount > 0) THEN
6947
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
6948
	END IF;
6949
	/*-------------------------------------------------------*/
6950
 
6951
 
6952
	-- Get rtag_id
6953
	SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
6954
 
6955
 
6956
 
6957
	-- Get Parent RtagId
6958
	ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
6959
 
6960
 
6961
	-- Create new release
6962
	INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID, 
6963
							   OFFICIAL, REBUILD_ENV, REBUILD_STAMP, 
6964
							   PARENT_RTAG_ID, PROJ_ID )
6965
	VALUES ( RtagId, 
6966
			 sReleaseName, 
6967
			 sReleaseComments,
6968
			 ORA_SYSDATE,
6969
			 nUserId,
6970
			 'N',
6971
			 'N',
6972
			 0,
6973
			 ParentRtagId,
6974
			 nProjId );
6975
 
6976
	-- Update display Order
6977
	UPDATE_DISPLAY_ORDER ( nProjId );
6978
 
6979
	/* Log Project Action */
6980
	Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
6981
 
6982
 
6983
	-- Import Release Contents
6984
	IF (NOT nSourceRtagId IS NULL) THEN
6985
		Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
6986
 
6987
	END IF;
6988
 
6989
 
6990
 
6991
END;
6992
/*-------------------------------------------------------------------------------------------------------*/
6993
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
6994
 
6995
 
6996
BEGIN
6997
 
6998
 
6999
	/*--------------- Business Rules Here -------------------*/
7000
	/*-------------------------------------------------------*/
7001
 
7002
	UPDATE RELEASE_TAGS urt SET
7003
	urt.DISPLAY_ORDER = (
7004
						SELECT qry.REC_NUM
7005
						  FROM (	
7006
								SELECT rel.*, ROWNUM AS REC_NUM
7007
								  FROM (
7008
 
7009
								  		SELECT rt.RTAG_ID, 
7010
											   rt.DISPLAY_ORDER,
7011
										       DECODE( rt.PARENT_RTAG_ID, 
7012
											   		   rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
7013
										  FROM RELEASE_TAGS rt
7014
										 WHERE rt.PROJ_ID = nProjId 
7015
 
7016
								  		) rel
7017
								START WITH rel.PARENT_RTAG_ID = 0
7018
								CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID   
7019
								ORDER SIBLINGS BY rel.DISPLAY_ORDER
7020
								) qry
7021
					      WHERE qry.RTAG_ID = urt.RTAG_ID 								
7022
						)
7023
	WHERE urt.PROJ_ID = nProjId;
7024
 
7025
END;
7026
/*-------------------------------------------------------------------------------------------------------*/
7027
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
7028
 
7029
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();						 
7030
	SeqNum NUMBER;
7031
 
7032
BEGIN
7033
 
7034
 
7035
	/*--------------- Business Rules Here -------------------*/
7036
	/*-------------------------------------------------------*/
7037
 
7038
	nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
7039
 
7040
	-- Set start sequence number
7041
	SeqNum := 1;
7042
 
7043
	FOR i IN 1..nIdCollector.COUNT
7044
	LOOP
7045
 
7046
		-- Update new display order
7047
		UPDATE RELEASE_TAGS rt SET
7048
			rt.DISPLAY_ORDER = SeqNum
7049
		 WHERE rt.PROJ_ID = nProjId
7050
		   AND rt.RTAG_ID = nIdCollector(i);
7051
 
7052
		SeqNum := SeqNum + 1;
7053
 
7054
	END LOOP;
7055
 
7056
END;
7057
/*-------------------------------------------------------------------------------------------------------*/
7058
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
7059
 
7060
RecCount NUMBER := 0;
7061
ProjId NUMBER;
7062
 
7063
BEGIN
7064
 
7065
 
7066
	/*--------------- Business Rules Here -------------------*/
7067
	-- Check for missing parameters
7068
	IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
7069
	THEN
7070
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
7071
 
7072
	END IF;
7073
 
7074
 
7075
	-- Check for duplicate Release Names
7076
	SELECT rt.PROJ_ID INTO ProjId
7077
	  FROM RELEASE_TAGS rt
7078
	 WHERE rt.RTAG_ID = nRtagId;
7079
 
7080
	SELECT COUNT(rt.RTAG_ID) INTO RecCount
7081
	  FROM RELEASE_TAGS rt
7082
	 WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
7083
	   AND rt.RTAG_ID != nRtagId
7084
	   AND rt.PROJ_ID = ProjId;
7085
 
7086
 
7087
	IF (RecCount > 0) THEN
7088
		RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');	
7089
	END IF;
7090
	/*-------------------------------------------------------*/
7091
 
7092
 
7093
 
7094
	-- Update release details
7095
	UPDATE RELEASE_TAGS rt SET
7096
	rt.RTAG_NAME = sReleaseName,
7097
	rt.DESCRIPTION = sReleaseComments,
7098
	rt.PARENT_RTAG_ID = nParentRtagId,
7099
	rt.ASSOC_MASS_REF = nMASSRtagId,
7100
	rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch
7101
	WHERE rt.RTAG_ID = nRtagId; 
7102
 
7103
	-- Update display Order
7104
	UPDATE_DISPLAY_ORDER ( ProjId );
7105
 
7106
	/* Log Project Action */
7107
	Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
7108
 
7109
 
7110
 
7111
 
7112
END;
7113
/*-------------------------------------------------------------------------------------------------------*/
7114
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7115
 
7116
	RecCount NUMBER := 0;
7117
	sReleaseId VARCHAR2(4000);
7118
	ProjId NUMBER;
7119
 
7120
BEGIN
7121
	/*--------------- Business Rules Here -------------------*/
7122
	IF (nRtagId IS NULL) 
7123
	THEN
7124
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7125
	END IF;
7126
 
7127
 
7128
 
7129
	-- Check for any kids
7130
	SELECT COUNT( rt.RTAG_ID ) INTO RecCount
7131
	  FROM RELEASE_TAGS rt
7132
	 WHERE rt.PARENT_RTAG_ID = nRtagId
7133
	   AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
7134
 
7135
	IF (RecCount > 0) THEN
7136
		RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
7137
	END IF; 
7138
	/*-------------------------------------------------------*/
7139
 
7140
	-- Clear the release contents
7141
	Clean_Release_Contents ( nRtagId, nUserId );
7142
 
7143
	/* Log Project Action */
7144
	SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
7145
	  FROM RELEASE_TAGS rt
7146
	 WHERE rt.RTAG_ID = nRtagId;
7147
 
7148
	Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
7149
 
7150
 
7151
	-- Remove Release
7152
	DELETE 
7153
	  FROM RELEASE_TAGS rt
7154
	 WHERE rt.RTAG_ID = nRtagId;
7155
 
7156
 
7157
 
7158
END;
7159
/*-------------------------------------------------------------------------------------------------------*/
7160
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
7161
 
7162
	sSourceLocation VARCHAR2(4000);
7163
	sTargetLocation VARCHAR2(4000);
7164
	ProjId NUMBER;
7165
	cReleaseMode CHAR(1);
7166
 
7167
 
7168
BEGIN
7169
	/*--------------- Business Rules Here -------------------*/
7170
	IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
7171
	THEN
7172
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
7173
	END IF;
7174
 
7175
	IF (nSourceRtagId = nTargetRtagId) THEN
7176
		RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
7177
	END IF;
7178
 
7179
 
7180
	-- Check if Target release is in OPEN mode
7181
	SELECT rt.OFFICIAL  INTO  cReleaseMode
7182
	  FROM RELEASE_TAGS rt
7183
	 WHERE rt.RTAG_ID = nTargetRtagId;
7184
 
7185
	IF (cReleaseMode != 'N') THEN
7186
		RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
7187
	END IF;	 
7188
 
7189
	/*-------------------------------------------------------*/
7190
 
7191
	-- Clean target contents
7192
	Clean_Release_Contents ( nTargetRtagId, nUserId );
7193
 
7194
 
7195
	-- Import Released Area Contents
7196
	INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE ) 
7197
	SELECT nTargetRtagId AS RTAG_ID, 
7198
		   rc.PV_ID, 
7199
		   rc.BASE_VIEW_ID, 
7200
		   rc.INSERT_STAMP, 
7201
		   rc.INSERTOR_ID, 
7202
		   rc.PKG_STATE
7203
	  FROM RELEASE_CONTENT rc
7204
	 WHERE rc.RTAG_ID = nSourceRtagId;
7205
 
7206
 
7207
	-- Import Ignore Warning states
7208
	INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
7209
	SELECT nTargetRtagId AS RTAG_ID,
7210
	       igw.PV_ID,
7211
	       igw.DPV_ID
7212
	  FROM IGNORE_WARNINGS igw
7213
	 WHERE igw.rtag_id = nSourceRtagId;
7214
 
7215
 
7216
	/* Log Project Action */
7217
	-- Get Source Location
7218
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
7219
	  FROM RELEASE_TAGS rt,
7220
	  	   PROJECTS pr
7221
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7222
	   AND rt.RTAG_ID = nSourceRtagId;
7223
 
7224
	-- Get Target Location
7225
	SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
7226
	  FROM RELEASE_TAGS rt,
7227
	  	   PROJECTS pr
7228
	 WHERE rt.PROJ_ID = pr.PROJ_ID
7229
	   AND rt.RTAG_ID = nTargetRtagId;	   
7230
 
7231
	-- Get project id   
7232
	SELECT rt.PROJ_ID  INTO  ProjId
7233
	  FROM RELEASE_TAGS rt
7234
	 WHERE rt.RTAG_ID = nTargetRtagId;   
7235
 
7236
	Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );	
7237
 
7238
 
7239
END;
7240
/*-------------------------------------------------------------------------------------------------------*/
7241
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
7242
 
7243
	RecCount NUMBER;
7244
 
7245
BEGIN
7246
	/*--------------- Business Rules Here -------------------*/
7247
	IF (nRtagId IS NULL) 
7248
	THEN
7249
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
7250
	END IF;
7251
 
7252
 
7253
	-- Check if other release references this release
7254
	SELECT COUNT( rl.RTAG_ID ) INTO RecCount
7255
	  FROM RELEASE_LINKS rl
7256
	 WHERE rl.REF_RTAG_ID = nRtagId;
7257
 
7258
	IF (RecCount > 0) THEN
7259
		RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
7260
	END IF; 	
7261
	/*-------------------------------------------------------*/
7262
 
7263
	-- Delete Release links
7264
	DELETE 
7265
	  FROM RELEASE_LINKS rl
7266
	 WHERE rl.RTAG_ID = nRtagId;
7267
 
7268
	-- Delete ignore warning
7269
	DELETE 
7270
	  FROM IGNORE_WARNINGS iw
7271
	 WHERE iw.RTAG_ID = nRtagId;
7272
 
7273
 
7274
	-- Delete Build Order cached calculations	  
7275
	DELETE
7276
	  FROM BUILD_ORDER bo
7277
	 WHERE bo.RTAG_ID = nRtagId;
7278
 
7279
 
7280
	-- Delete Notification History
7281
	DELETE
7282
	  FROM NOTIFICATION_HISTORY nh
7283
	 WHERE nh.RTAG_ID = nRtagId;
7284
 
7285
 
7286
	-- Delete Released Area Contents
7287
	DELETE
7288
	  FROM RELEASE_CONTENT rc
7289
	 WHERE rc.RTAG_ID = nRtagId;
7290
 
7291
 
7292
	-- Delete Work In Progress Area Contents
7293
	DELETE
7294
	  FROM WORK_IN_PROGRESS wip
7295
	 WHERE wip.RTAG_ID = nRtagId;
7296
 
7297
 
7298
	-- Delete Pending Area Contents
7299
	DELETE 
7300
	  FROM PLANNED pl
7301
	 WHERE pl.RTAG_ID = nRtagId;
7302
 
7303
 
7304
END;
7305
/*-------------------------------------------------------------------------------------------------------*/
7306
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
7307
 
7308
	nSourceParentRtagId NUMBER;
7309
 
7310
BEGIN
7311
	/*--------------- Business Rules Here -------------------*/
7312
	IF (nRtagId IS NULL) OR (cIsBranch IS NULL)  
7313
	THEN
7314
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
7315
	END IF;
7316
	/*-------------------------------------------------------*/
7317
 
7318
 
7319
	IF ( nSourceRtagId IS NULL ) THEN
7320
		-- Create new on main branch
7321
		RETURN nRtagId;
7322
 
7323
	ELSE
7324
		-- Create from source rtag_id
7325
 
7326
		-- Find parent of Source RtagId
7327
		SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
7328
		  FROM RELEASE_TAGS rt
7329
		 WHERE rt.RTAG_ID = nSourceRtagId;
7330
 
7331
		IF (UPPER(cIsBranch) = 'Y') THEN
7332
			RETURN nSourceRtagId;
7333
		ELSE
7334
			IF (nSourceRtagId = nSourceParentRtagId) THEN
7335
				RETURN nRtagId;
7336
			ELSE
7337
				RETURN nSourceParentRtagId;
7338
			END IF;
7339
		END IF;	
7340
 
7341
 
7342
	END IF;
7343
 
7344
 
7345
END;
7346
/*-------------------------------------------------------------------------------------------------------*/
7347
 
7348
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
7349
-- 							 sNextVersion OUT VARCHAR2,
7350
-- 							 nNextLifeCycle OUT NUMBER,
7351
-- 							 nParentRtagId OUT NUMBER,
7352
-- 							 nProjId IN NUMBER ) IS
7353
-- 							
7354
-- SourceBranchCount NUMBER;
7355
-- ProjRootVersion VARCHAR2(4000);
7356
-- LastLifeCycle NUMBER;
7357
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
7358
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
7359
-- 
7360
-- SourceProjId NUMBER; 
7361
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
7362
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
7363
-- 
7364
-- BEGIN
7365
-- 	/*--------------- Business Rules Here -------------------*/
7366
-- 	/*-------------------------------------------------------*/
7367
-- 	
7368
-- 	   
7369
-- 	BEGIN
7370
-- 		-- Get Project root version
7371
-- 		SELECT rt.RTAG_VERSION INTO ProjRootVersion
7372
-- 		  FROM RELEASE_TAGS rt
7373
-- 		 WHERE rt.PROJ_ID = nProjId
7374
-- 		   AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
7375
-- 	   
7376
-- 		EXCEPTION
7377
-- 		WHEN NO_DATA_FOUND THEN
7378
-- 		ProjRootVersion := ROOT_VERSION_NOT_FOUND;
7379
-- 	END;		   
7380
-- 	
7381
-- 	
7382
-- 	
7383
-- 	 
7384
-- 	BEGIN
7385
-- 		-- Get info for source rtagid
7386
-- 		SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
7387
-- 		  FROM RELEASE_TAGS rt
7388
-- 		 WHERE rt.RTAG_ID = nSourceRtagId;	
7389
-- 	   
7390
-- 		EXCEPTION
7391
-- 		WHEN NO_DATA_FOUND THEN
7392
-- 		SourceProjId := NULL;
7393
-- 		SourceVersion := NULL;
7394
-- 		SourceLifeCycle := NULL;
7395
-- 	END;	  
7396
-- 	
7397
-- 	
7398
-- 	IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
7399
-- 	
7400
-- 		/* Blank Release Required  OR  Release imported from other project */
7401
-- 		
7402
-- 		IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
7403
-- 			/* No Releases found in the project, hence calculate next version available.  */
7404
-- 			
7405
-- 			-- Set parent rtag
7406
-- 			nParentRtagId := SET_PARENT_AS_YOURSELF;
7407
-- 			
7408
-- 			
7409
-- 			BEGIN
7410
-- 				-- Get Next Available Global Root Version 
7411
-- 				SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
7412
-- 				  FROM RELEASE_TAGS rt
7413
-- 				 WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
7414
-- 				
7415
-- 				-- Set Next Rtag Version
7416
-- 				sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
7417
-- 				
7418
-- 				-- Restart Lifecycle
7419
-- 				nNextLifeCycle := 0;
7420
-- 				
7421
-- 				
7422
-- 				EXCEPTION
7423
-- 				WHEN NO_DATA_FOUND THEN
7424
-- 				-- Release Manager has no releases, hence start from 1
7425
-- 				sNextVersion := '1';
7426
-- 				nNextLifeCycle := 0;
7427
-- 				
7428
-- 			END;
7429
-- 			
7430
-- 			
7431
-- 					
7432
-- 		ELSE
7433
-- 			/* Releases found in this project. */
7434
-- 							   
7435
-- 			SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
7436
-- 			  FROM (
7437
-- 					SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
7438
-- 					  FROM RELEASE_TAGS rt
7439
-- 					 WHERE rt.PROJ_ID = nProjId
7440
-- 					   AND rt.RTAG_VERSION = ProjRootVersion 
7441
-- 					 ORDER BY rt.RTAG_LIFE_CYCLE DESC
7442
-- 			  		) qry
7443
-- 			 WHERE ROWNUM = 1;		
7444
-- 
7445
-- 			
7446
-- 			-- Set same Rtag Version
7447
-- 			sNextVersion := ProjRootVersion;
7448
-- 			
7449
-- 			-- Increase Lifecycle
7450
-- 			nNextLifeCycle := LastLifeCycle + 1;
7451
-- 		
7452
-- 		END IF;
7453
-- 				
7454
-- 	
7455
-- 		
7456
-- 	ELSE
7457
-- 		/* Create Release From other release within this project */
7458
-- 		
7459
-- 		-- Set parent id
7460
-- 		nParentRtagId := nSourceRtagId;
7461
-- 		
7462
-- 		
7463
-- 		-- Get number of source branches
7464
-- 		SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
7465
-- 		  FROM RELEASE_TAGS rt
7466
-- 		 WHERE rt.PROJ_ID = nProjId
7467
-- 		   AND rt.PARENT_RTAG_ID = nSourceRtagId;		   
7468
-- 		   
7469
-- 		   
7470
-- 		IF SourceBranchCount = 0 THEN
7471
-- 			/* Release is Head (i.e. Tip on its branch ) */
7472
-- 			
7473
-- 			-- Set Next Rtag Version
7474
-- 			sNextVersion := SourceVersion;
7475
-- 			
7476
-- 			-- Increase Lifecycle
7477
-- 			nNextLifeCycle := SourceLifeCycle + 1;
7478
-- 			
7479
-- 			
7480
-- 		ELSIF SourceBranchCount = 1 THEN
7481
-- 			/* Release IS NOT Head, but can be branched */
7482
-- 			
7483
-- 			-- Set Next Rtag Version
7484
-- 			sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
7485
-- 			
7486
-- 			-- Reset Lifecycle to 1
7487
-- 			nNextLifeCycle := 1;
7488
-- 			
7489
-- 			
7490
-- 		ELSE	
7491
-- 			-- Limit of two branches is reached
7492
-- 			RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');		
7493
-- 			
7494
-- 		END IF;	
7495
-- 			
7496
-- 			
7497
-- 		
7498
-- 		
7499
-- 		
7500
-- 	
7501
-- 	END IF;
7502
-- 	
7503
-- 		
7504
-- END;
7505
 
7506
/*-------------------------------------------------------------------------------------------------------*/
7507
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
7508
 
7509
	IsBaseView CHAR(1);
7510
 
7511
BEGIN
7512
 
7513
	-- Check if the view is BASE VIEW
7514
	SELECT vi.BASE_VIEW INTO IsBaseView
7515
	  FROM VIEWS vi
7516
	 WHERE vi.VIEW_ID = ViewId;
7517
 
7518
	IF (IsBaseView = 'Y') THEN 
7519
		-- Get Base view content
7520
		OPEN RecordSet FOR
7521
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7522
			   pv.pv_id, 
7523
			   pkg.pkg_name, 
7524
			   pv.pkg_version, 
7525
			   pv.dlocked, 
7526
			   pv.pv_description,
7527
			   pv.BUILD_TYPE
7528
		  FROM release_content rel,
7529
		       packages pkg,
7530
		       package_versions pv
7531
		 WHERE pv.pkg_id = pkg.pkg_id
7532
		   AND rel.pv_id = pv.pv_id
7533
		   AND rel.BASE_VIEW_ID = ViewId
7534
		   AND rel.RTAG_ID = RtagId
7535
		 ORDER BY UPPER(pkg.PKG_NAME);
7536
 
7537
	ELSE	 
7538
 
7539
	 	-- Get non base view content
7540
		OPEN RecordSet FOR
7541
		SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
7542
			   pv.pv_id, 
7543
			   pkg.pkg_name, 
7544
			   pv.pkg_version, 
7545
			   pv.dlocked, 
7546
			   pv.pv_description,
7547
			   pv.BUILD_TYPE
7548
		  FROM release_content rel,
7549
		       packages pkg,
7550
		       package_versions pv,
7551
			   VIEW_DEF vd
7552
		 WHERE pv.pkg_id = pkg.pkg_id
7553
		   AND rel.pv_id = pv.pv_id
7554
		   AND vd.VIEW_ID = ViewId
7555
		   AND vd.PKG_ID = pv.PKG_ID
7556
		   AND rel.RTAG_ID = RtagId
7557
		 ORDER BY UPPER(pkg.PKG_NAME);		 
7558
 
7559
	END IF;	 	 
7560
 
7561
 
7562
 
7563
 
7564
END;
7565
/*-------------------------------------------------------------------------------------------------------*/
7566
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7567
 
7568
	ReleaseLocation VARCHAR2(4000);
7569
	sPkgVersion VARCHAR2(4000);
7570
	nPkgId NUMBER;
7571
	sVExt VARCHAR2(4000);
7572
	IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
7573
 
7574
	-- Find package for replacement
7575
	CURSOR curReplacePkg IS
7576
    SELECT pv.PV_ID
7577
	  FROM RELEASE_CONTENT rc,
7578
	  	   PACKAGE_VERSIONS pv
7579
	 WHERE rc.PV_ID = pv.PV_ID
7580
	   AND rc.RTAG_ID = RtagId
7581
	   AND pv.PKG_ID = nPkgId
7582
	   AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
7583
    recReplacePkg curReplacePkg%ROWTYPE;
7584
 
7585
BEGIN
7586
 
7587
	-- Get is_patch, pkg_id and v_ext
7588
	SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
7589
	  FROM PACKAGE_VERSIONS pv
7590
	 WHERE pv.PV_ID = newPvId;
7591
 
7592
 
7593
	-- Never put patch in relesed area
7594
	IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
7595
 
7596
		-- Try to get a package to be replaced with this new one.
7597
		-- Use unique constraint of PKG_ID and V_EXT
7598
		OPEN curReplacePkg;
7599
	    FETCH curReplacePkg INTO recReplacePkg;
7600
 
7601
	    IF curReplacePkg%FOUND THEN
7602
			-- Replace package
7603
			REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
7604
 
7605
		ELSE
7606
			-- Add new package
7607
			INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
7608
			VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
7609
 
7610
 
7611
		    /* LOG ACTION */
7612
			SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7613
			  FROM PROJECTS proj,
7614
			  	   RELEASE_TAGS rt
7615
			 WHERE rt.PROJ_ID = proj.PROJ_ID
7616
			   AND rt.RTAG_ID = RtagId;
7617
 
7618
			SELECT pv.PKG_VERSION INTO sPkgVersion
7619
			  FROM PACKAGE_VERSIONS pv
7620
			 WHERE pv.PV_ID = newPvId;
7621
 
7622
			Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7623
 
7624
 
7625
		END IF;
7626
 
7627
		CLOSE curReplacePkg;
7628
 
7629
	END IF;
7630
 
7631
END;
7632
/*-------------------------------------------------------------------------------------------------------*/
7633
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7634
 
7635
	ReleaseLocation VARCHAR2(4000);
7636
	sPkgVersion VARCHAR2(4000);
7637
 
7638
BEGIN
7639
 
7640
	-- Replace Package
7641
    UPDATE RELEASE_CONTENT
7642
       SET pv_id = newPvId,
7643
           insert_stamp = Ora_Sysdate,
7644
           insertor_id = UserId
7645
     WHERE rtag_id = RtagId
7646
       AND pv_id = oldPvId;
7647
 
7648
 
7649
    /* LOG ACTION */
7650
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7651
	  FROM PROJECTS proj,
7652
	  	   RELEASE_TAGS rt
7653
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7654
	   AND rt.RTAG_ID = RtagId;
7655
 
7656
	SELECT pv.PKG_VERSION INTO sPkgVersion
7657
	  FROM PACKAGE_VERSIONS pv
7658
	 WHERE pv.PV_ID = newPvId;
7659
 
7660
	Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
7661
	Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
7662
 
7663
END;
7664
/*-------------------------------------------------------------------------------------------------------*/
7665
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7666
	ReleaseLocation VARCHAR2(4000);
7667
 
7668
BEGIN
7669
 
7670
 
7671
	-- Delete old package
7672
	DELETE
7673
	  FROM RELEASE_CONTENT rc
7674
	 WHERE rc.PV_ID = PvId
7675
	   AND rc.RTAG_ID = RtagId;
7676
 
7677
 
7678
	/* LOG ACTION */
7679
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7680
	  FROM PROJECTS proj,
7681
	       RELEASE_TAGS rt
7682
	 WHERE rt.PROJ_ID = proj.PROJ_ID
7683
	   AND rt.RTAG_ID = RtagId;
7684
 
7685
	Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7686
 
7687
 
7688
END;
7689
/*-------------------------------------------------------------------------------------------------------*/
7690
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
7691
	ReleaseLocation VARCHAR2(4000);
7692
 
7693
	CURSOR curMatchingPackage IS
7694
    SELECT mpv.PV_ID
7695
	  FROM RELEASE_CONTENT rc,
7696
	  	   PACKAGE_VERSIONS mpv,
7697
		   PACKAGE_VERSIONS pv
7698
	 WHERE rc.PV_ID = mpv.PV_ID
7699
	   AND rc.RTAG_ID = RtagId
7700
	   AND pv.PV_ID = PvId
7701
	   AND pv.PKG_ID = mpv.PKG_ID
7702
	   AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
7703
    recMatchingPackage curMatchingPackage%ROWTYPE;
7704
 
7705
BEGIN
7706
 
7707
	OPEN curMatchingPackage;
7708
    FETCH curMatchingPackage INTO recMatchingPackage;
7709
 
7710
    IF curMatchingPackage%FOUND THEN
7711
		-- Delete old package
7712
		DELETE
7713
		  FROM RELEASE_CONTENT rc
7714
		 WHERE rc.PV_ID = recMatchingPackage.PV_ID
7715
		   AND rc.RTAG_ID = RtagId;
7716
 
7717
 
7718
		/* LOG ACTION */
7719
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
7720
		  FROM PROJECTS proj,
7721
		  	   RELEASE_TAGS rt
7722
		 WHERE rt.PROJ_ID = proj.PROJ_ID
7723
		   AND rt.RTAG_ID = RtagId;
7724
 
7725
		Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
7726
 
7727
	END IF;
7728
 
7729
 
7730
	CLOSE curMatchingPackage;
7731
 
7732
 
7733
 
7734
 
7735
END;
7736
/*-------------------------------------------------------------------------------------------------------*/
7737
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
7738
 
7739
	ReturnValue NUMBER;
7740
 
7741
BEGIN
7742
	SELECT rc.BASE_VIEW_ID INTO ReturnValue
7743
	  FROM RELEASE_CONTENT rc
7744
	 WHERE rc.RTAG_ID = RtagId
7745
	   AND rc.PV_ID = PvId;
7746
 
7747
	RETURN ReturnValue;
7748
END;
7749
/*-------------------------------------------------------------------------------------------------------*/
7750
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
7751
 
7752
BEGIN
7753
	-- Reset Ignore warnings up-the-tree
7754
	RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
7755
 
7756
	-- Refresh Package states
7757
	TOUCH_RELEASE ( RtagId );
7758
 
7759
END;
7760
/*-------------------------------------------------------------------------------------------------------*/
7761
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
7762
	CURSOR curReleases IS
7763
    SELECT rc.RTAG_ID
7764
	  FROM RELEASE_CONTENT rc
7765
	 WHERE rc.PV_ID = PvId;
7766
    recReleases curReleases%ROWTYPE;
7767
 
7768
BEGIN
7769
 
7770
	OPEN curReleases;
7771
    FETCH curReleases INTO recReleases;
7772
 
7773
	WHILE curReleases%FOUND
7774
	LOOP
7775
 
7776
		RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
7777
 
7778
		FETCH curReleases INTO recReleases;
7779
	END LOOP;
7780
 
7781
	CLOSE curReleases;	
7782
 
7783
END;
7784
/*-------------------------------------------------------------------------------------------------------*/
7785
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
7786
 
7787
BEGIN
7788
 
7789
	UPDATE RELEASE_CONTENT rc SET
7790
	rc.BASE_VIEW_ID = NewViewId
7791
	WHERE rc.PV_ID = PvId
7792
	  AND rc.RTAG_ID = RtagId;
7793
 
7794
END;
7795
/*-------------------------------------------------------------------------------------------------------*/
7796
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
7797
 
7798
	RowCount NUMBER;
7799
 
7800
 
7801
	CURSOR curPackageClash IS
7802
	SELECT pkg.PKG_NAME,
7803
		   er.*
7804
	  FROM (
7805
 
7806
	  		/* Get existing referenced packages */
7807
			SELECT pv.PKG_ID,
7808
			       pv.V_EXT
7809
			  FROM RELEASE_LINKS rl,
7810
			  	   RELEASE_CONTENT rc,
7811
			  	   PACKAGE_VERSIONS pv
7812
			 WHERE rl.RTAG_ID = nRtagId
7813
			   AND rl.REF_RTAG_ID = rc.RTAG_ID
7814
			   AND rc.PV_ID = pv.PV_ID
7815
 
7816
	  	    ) er,
7817
			(
7818
 
7819
			/* Get current reference packages */
7820
			SELECT pv.PKG_ID,
7821
			       pv.V_EXT
7822
			  FROM RELEASE_CONTENT rc,
7823
			  	   PACKAGE_VERSIONS pv
7824
			 WHERE rc.RTAG_ID = nRefRtagId
7825
			   AND rc.PV_ID = pv.PV_ID    
7826
 
7827
			) cr,
7828
			PACKAGES PKG
7829
	 WHERE er.PKG_ID = cr.PKG_ID
7830
	   AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7831
	   AND er.PKG_ID = pkg.PKG_ID;
7832
 
7833
	recPackageClash curPackageClash%ROWTYPE;	   
7834
 
7835
BEGIN
7836
	/*--------------- Business Rules Here -------------------*/
7837
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7838
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7839
	END IF;
7840
 
7841
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7842
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7843
	END IF;
7844
	/*-------------------------------------------------------*/
7845
	ProblemString := NULL;
7846
 
7847
 
7848
	-- Check if release already has references
7849
	SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
7850
	  FROM RELEASE_LINKS rl
7851
	 WHERE rl.RTAG_ID = nRtagId;	
7852
 
7853
 
7854
	IF RowCount > 0 THEN
7855
		-- Found existing references
7856
 
7857
		-- Make sure there is no package clashes
7858
		OPEN curPackageClash;
7859
	    FETCH curPackageClash INTO recPackageClash;
7860
 
7861
		IF curPackageClash%FOUND THEN
7862
 
7863
			ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
7864
 
7865
			WHILE curPackageClash%FOUND
7866
			LOOP
7867
				EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;	-- Do not allow variable overflow 
7868
 
7869
				ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
7870
 
7871
				FETCH curPackageClash INTO recPackageClash;
7872
			END LOOP;
7873
 
7874
		END IF;
7875
 
7876
		CLOSE curPackageClash;
7877
 
7878
 
7879
	ELSE
7880
		-- No references found, hence reference a release
7881
 
7882
 
7883
		-- Remove exising package from this release to be referenced
7884
		REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);	
7885
 
7886
 
7887
		-- Add new linked packages to release
7888
		INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
7889
		SELECT nRtagId,
7890
			   rc.PV_ID,
7891
			   rc.BASE_VIEW_ID, 
7892
			   rc.INSERT_STAMP, 
7893
			   rc.INSERTOR_ID, 
7894
			   rc.PKG_STATE
7895
		  FROM RELEASE_CONTENT rc
7896
		 WHERE rc.RTAG_ID = nRefRtagId;
7897
 
7898
 
7899
 
7900
		-- Copy ignore warnings for referenced packages
7901
		INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
7902
		SELECT nRtagId, 
7903
			   iw.PV_ID, 
7904
			   iw.DPV_ID, 
7905
			   iw.IS_PATCH_IGNORE
7906
		  FROM IGNORE_WARNINGS iw,
7907
		  	   RELEASE_CONTENT rc
7908
		 WHERE iw.RTAG_ID = rc.RTAG_ID 
7909
		   AND iw.PV_ID = rc.PV_ID
7910
		   AND rc.RTAG_ID = nRefRtagId;	 
7911
 
7912
 
7913
 
7914
		-- Reference release 
7915
		INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
7916
		VALUES ( nRtagId, nRefRtagId );		 
7917
 
7918
 
7919
		-- Refresh Package states
7920
		TOUCH_RELEASE ( nRtagId );
7921
 
7922
	END IF;	 
7923
 
7924
 
7925
END;
7926
/*-------------------------------------------------------------------------------------------------------*/
7927
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
7928
 
7929
 
7930
BEGIN
7931
	/*--------------- Business Rules Here -------------------*/
7932
	IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
7933
		RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
7934
	END IF;
7935
 
7936
	IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
7937
		RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
7938
	END IF;
7939
 
7940
	/*-------------------------------------------------------*/
7941
 
7942
 
7943
	-- Remove ignore warnings for those packages who use referenced packages
7944
	DELETE FROM IGNORE_WARNINGS iw
7945
	 WHERE iw.RTAG_ID = nRtagId
7946
	   AND iw.DPV_ID IN (
7947
	   						SELECT dep.DPV_ID
7948
							  FROM (
7949
 
7950
									/* Get referenced packages */
7951
									SELECT pv.PKG_ID,
7952
									       pv.V_EXT
7953
									  FROM RELEASE_CONTENT rc,
7954
									  	   PACKAGE_VERSIONS pv
7955
									 WHERE rc.RTAG_ID = nRefRtagId
7956
									   AND rc.PV_ID = pv.PV_ID    
7957
 
7958
									) cr,
7959
									(
7960
 
7961
									/* Get all dependencies for current release */
7962
									SELECT DISTINCT 
7963
										   pv.PKG_ID,
7964
										   pv.V_EXT,
7965
										   dep.DPV_ID
7966
									  FROM RELEASE_CONTENT rc,
7967
										   PACKAGE_DEPENDENCIES dep,
7968
										   PACKAGE_VERSIONS pv
7969
									 WHERE rc.RTAG_ID = nRtagId
7970
									   AND rc.PV_ID = dep.PV_ID		
7971
									   AND dep.PV_ID = pv.PV_ID	   
7972
 
7973
									) dep
7974
							 WHERE dep.PKG_ID = cr.PKG_ID
7975
							   AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
7976
	   					);  
7977
 
7978
 
7979
 
7980
 
7981
	-- Remove ignore warnings for those package which are going to be replaced with the reference
7982
	DELETE FROM IGNORE_WARNINGS iw
7983
	 WHERE iw.RTAG_ID = nRtagId
7984
	   AND iw.PV_ID IN (
7985
						SELECT pv.PV_ID
7986
						  FROM (
7987
 
7988
								/* Get referenced packages */
7989
								SELECT pv.PKG_ID,
7990
								       pv.V_EXT
7991
								  FROM RELEASE_CONTENT rc,
7992
								  	   PACKAGE_VERSIONS pv
7993
								 WHERE rc.RTAG_ID = nRefRtagId
7994
								   AND rc.PV_ID = pv.PV_ID    
7995
 
7996
								) cr,
7997
								RELEASE_CONTENT rc,
7998
								PACKAGE_VERSIONS pv
7999
						 WHERE pv.PKG_ID = cr.PKG_ID
8000
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8001
						   AND rc.RTAG_ID = nRtagId
8002
						   AND rc.PV_ID = pv.PV_ID
8003
						);			
8004
 
8005
 
8006
 
8007
 
8008
 
8009
	-- Remove matching packages from release
8010
	DELETE FROM RELEASE_CONTENT rc
8011
	 WHERE rc.RTAG_ID = nRtagId
8012
	   AND rc.PV_ID IN (
8013
						SELECT pv.PV_ID
8014
						  FROM (
8015
 
8016
								/* Get referenced packages */
8017
								SELECT pv.PKG_ID,
8018
								       pv.V_EXT
8019
								  FROM RELEASE_CONTENT rc,
8020
								  	   PACKAGE_VERSIONS pv
8021
								 WHERE rc.RTAG_ID = nRefRtagId
8022
								   AND rc.PV_ID = pv.PV_ID    
8023
 
8024
								) cr,
8025
								RELEASE_CONTENT rc,
8026
								PACKAGE_VERSIONS pv
8027
						 WHERE pv.PKG_ID = cr.PKG_ID
8028
						   AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
8029
						   AND rc.RTAG_ID = nRtagId
8030
						   AND rc.PV_ID = pv.PV_ID
8031
						);	
8032
 
8033
 
8034
 
8035
 
8036
 
8037
	-- Remove Reference release 
8038
	DELETE 
8039
	  FROM RELEASE_LINKS rl
8040
	 WHERE rl.RTAG_ID = nRtagId
8041
	   AND rl.REF_RTAG_ID = nRefRtagId;
8042
 
8043
 
8044
	-- Refresh Package states
8045
	TOUCH_RELEASE ( nRtagId );
8046
 
8047
 
8048
END;
8049
/*-------------------------------------------------------------------------------------------------------*/
8050
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
8051
 
8052
	cReleaseMode CHAR(1);
8053
	cPvMode CHAR(1);
8054
 
8055
BEGIN
8056
 
8057
	-- Get Release Mode
8058
	SELECT rt.OFFICIAL INTO cReleaseMode
8059
	  FROM RELEASE_TAGS rt
8060
	 WHERE rt.RTAG_ID = RtagId;
8061
 
8062
 
8063
	-- Get Package Mode
8064
	SELECT pv.DLOCKED INTO cPvMode
8065
	  FROM PACKAGE_VERSIONS pv
8066
	 WHERE pv.PV_ID = PvId;	 
8067
 
8068
	-- Only check if package is locked 
8069
	IF (cPvMode = 'Y') THEN
8070
 
8071
		IF (cReleaseMode != 'N') AND (Permission != 'Y')
8072
		THEN
8073
			RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
8074
 
8075
		END IF;
8076
 
8077
	END IF;	
8078
 
8079
 
8080
END;
8081
/*-------------------------------------------------------------------------------------------------------*/
8082
END PK_RELEASE_TEST;
1374 dpurdie 8083
/
8084
--------------------------------------------------------
8085
--  DDL for Package Body PK_APP_UTILS
8086
--------------------------------------------------------
1373 dpurdie 8087
 
8088
  CREATE OR REPLACE PACKAGE BODY "PK_APP_UTILS" IS
8089
 
8090
/*
8091
------------------------------
8092
||  Last Modified:  S.Vukovic
8093
||  Modified Date:  26/Apr/2005
8094
||  Body Version:   1.0
8095
------------------------------
8096
*/
8097
 
8098
 
8099
/*-------------------------------------------------------------------------------------------------------*/
8100
PROCEDURE GET_CURRENT_PARAMETERS ( ProjId IN VARCHAR2, RtagId IN VARCHAR2, records OUT typeCur)   IS
8101
 
8102
 
8103
BEGIN
8104
 
8105
 
8106
	IF (NOT RtagId IS NULL) THEN
8107
		-- Case with RTAG_ID present
8108
		OPEN records FOR
8109
		SELECT rt.PROJ_ID,
8110
			   rt.RTAG_ID AS RTAG_ID
8111
		  FROM RELEASE_TAGS rt
8112
		 WHERE rt.RTAG_ID = TO_NUMBER(RtagId);
8113
 
8114
	ELSIF (NOT ProjId IS NULL) THEN
8115
		-- Case with PROJ_ID present
8116
		OPEN records FOR
8117
		SELECT TO_NUMBER(ProjId) AS PROJ_ID,
8118
			   -1 AS RTAG_ID
8119
		  FROM DUAL;
8120
 
8121
	ELSE
8122
		-- Case with none present
8123
		OPEN records FOR
8124
		SELECT -1 AS PROJ_ID,
8125
			   -1 AS RTAG_ID
8126
		  FROM DUAL;
8127
 
8128
	END IF;
8129
 
8130
 
8131
 
8132
 
8133
   	--RETURN records;
8134
 
8135
END;
8136
/*-------------------------------------------------------------------------------------------------------*/
8137
END PK_APP_UTILS;
1374 dpurdie 8138
/
8139
--------------------------------------------------------
8140
--  DDL for Package Body PK_RELEASE
8141
--------------------------------------------------------
1373 dpurdie 8142
 
8143
  CREATE OR REPLACE PACKAGE BODY "PK_RELEASE" IS
8144
 
8145
/*-------------------------------------------------------------------------------------------------------*/
8146
PROCEDURE New_Release ( sReleaseName IN VARCHAR2, sReleaseComments IN VARCHAR2, nProjId IN NUMBER, nSourceRtagId IN NUMBER, sIsBranched IN CHAR, nUserId IN NUMBER ) IS
8147
 
8148
RtagId NUMBER;
8149
ParentRtagId NUMBER;
8150
RecCount NUMBER := 0;
8151
VtreeId NUMBER;
8152
 
8153
BEGIN
8154
   /*--------------- Business Rules Here -------------------*/
8155
   -- Check for missing parameters
8156
   IF (sReleaseName IS NULL) OR (nUserId IS NULL)
8157
   THEN
8158
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId );
8159
 
8160
   END IF;
8161
 
8162
 
8163
   -- Check for duplicate Release Names
8164
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8165
     FROM RELEASE_TAGS rt
8166
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8167
      AND rt.PROJ_ID = nProjId;
8168
 
8169
   IF (RecCount > 0) THEN
8170
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8171
   END IF;
8172
   /*-------------------------------------------------------*/
8173
 
8174
 
8175
   -- Get rtag_id
8176
   SELECT SEQ_RTAG_ID.NEXTVAL INTO RtagId FROM DUAL;
8177
 
8178
   SELECT SEQ_VTREE_ID.NEXTVAL INTO VtreeId FROM DUAL;
8179
 
8180
 
8181
 
8182
   -- Get Parent RtagId
8183
   ParentRtagId := GET_PARENT_RTAG ( RtagId, nSourceRtagId, sIsBranched );
8184
 
8185
   -- If the parent RTAG is NOT in this project then we cannot use it.
8186
   -- We must re-assign the parent to be the new release's RTAG_ID instead
8187
   -- else it will not show up in the projects release tree (DEVI-55480)
8188
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8189
     FROM RELEASE_TAGS rt
8190
    WHERE rt.RTAG_ID = ParentRtagId
8191
      AND rt.PROJ_ID = nProjId;
8192
 
8193
   IF (RecCount = 0) THEN
8194
     ParentRtagId := RtagId;
8195
   END IF;
8196
 
8197
   -- Create new release
8198
   INSERT INTO RELEASE_TAGS ( RTAG_ID, RTAG_NAME, DESCRIPTION, CREATED_STAMP, CREATOR_ID,
8199
                        OFFICIAL, REBUILD_ENV, REBUILD_STAMP,
8200
                        PARENT_RTAG_ID, PROJ_ID, VTREE_ID )
8201
   VALUES ( RtagId,
8202
          sReleaseName,
8203
          sReleaseComments,
8204
          ORA_SYSDATE,
8205
          nUserId,
8206
          'N',
8207
          'N',
8208
          0,
8209
          ParentRtagId,
8210
          nProjId,
8211
          VtreeId );
8212
 
8213
   -- If a source release is provided, clone its config spec branch information into the new release (DEVI-56650)
8214
   IF (NOT nSourceRtagId IS NULL)
8215
   THEN
8216
      UPDATE RELEASE_TAGS rtd
8217
      SET rtd.config_spec_branch = (SELECT rts.CONFIG_SPEC_BRANCH FROM RELEASE_TAGS rts WHERE rts.RTAG_ID = nSourceRtagId)
8218
      WHERE rtd.RTAG_ID = RtagId;
8219
   END IF;
8220
 
8221
   -- Update display Order
8222
   UPDATE_DISPLAY_ORDER ( nProjId );
8223
 
8224
   /* Log Project Action */
8225
   Log_Project_Action ( nProjId, 'new_release', nUserId, sReleaseName, RtagId );
8226
 
8227
 
8228
   -- Import Release Contents
8229
   IF (NOT nSourceRtagId IS NULL) THEN
8230
      Import_Release_Contents ( nSourceRtagId, RtagId, nUserId );
8231
   END IF;
8232
 
8233
END;
8234
/*-------------------------------------------------------------------------------------------------------*/
8235
PROCEDURE UPDATE_DISPLAY_ORDER ( nProjId IN NUMBER ) IS
8236
 
8237
 
8238
BEGIN
8239
 
8240
 
8241
   /*--------------- Business Rules Here -------------------*/
8242
   /*-------------------------------------------------------*/
8243
 
8244
   UPDATE RELEASE_TAGS urt SET
8245
   urt.DISPLAY_ORDER = (
8246
                  SELECT qry.REC_NUM
8247
                    FROM (
8248
                        SELECT rel.*, ROWNUM AS REC_NUM
8249
                          FROM (
8250
 
8251
                                SELECT rt.RTAG_ID,
8252
                                    rt.DISPLAY_ORDER,
8253
                                     DECODE( rt.PARENT_RTAG_ID,
8254
                                             rt.RTAG_ID, 0, rt.PARENT_RTAG_ID ) AS PARENT_RTAG_ID
8255
                                FROM RELEASE_TAGS rt
8256
                               WHERE rt.PROJ_ID = nProjId
8257
 
8258
                                ) rel
8259
                        START WITH rel.PARENT_RTAG_ID = 0
8260
                        CONNECT BY PRIOR rel.RTAG_ID = rel.PARENT_RTAG_ID
8261
                        ORDER SIBLINGS BY rel.DISPLAY_ORDER
8262
                        ) qry
8263
                     WHERE qry.RTAG_ID = urt.RTAG_ID
8264
                  )
8265
   WHERE urt.PROJ_ID = nProjId;
8266
 
8267
END;
8268
/*-------------------------------------------------------------------------------------------------------*/
8269
PROCEDURE MOVE_RELEASE ( sRtagIdList IN VARCHAR2, nProjId IN NUMBER, nUserId IN NUMBER  ) IS
8270
 
8271
   nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
8272
   SeqNum NUMBER;
8273
 
8274
BEGIN
8275
 
8276
 
8277
   /*--------------- Business Rules Here -------------------*/
8278
   /*-------------------------------------------------------*/
8279
 
8280
   nIdCollector := IN_LIST_NUMBER ( sRtagIdList );
8281
 
8282
   -- Set start sequence number
8283
   SeqNum := 1;
8284
 
8285
   FOR i IN 1..nIdCollector.COUNT
8286
   LOOP
8287
 
8288
      -- Update new display order
8289
      UPDATE RELEASE_TAGS rt SET
8290
         rt.DISPLAY_ORDER = SeqNum
8291
       WHERE rt.PROJ_ID = nProjId
8292
         AND rt.RTAG_ID = nIdCollector(i);
8293
 
8294
      SeqNum := SeqNum + 1;
8295
 
8296
   END LOOP;
8297
 
8298
END;
8299
/*-------------------------------------------------------------------------------------------------------*/
8300
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
8301
 
8302
RecCount NUMBER := 0;
8303
ProjId NUMBER;
8304
 
8305
BEGIN
8306
 
8307
 
8308
   /*--------------- Business Rules Here -------------------*/
8309
   -- Check for missing parameters
8310
   IF (sReleaseName IS NULL) OR (nUserId IS NULL) OR (nRtagId IS NULL)
8311
   THEN
8312
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! sReleaseName= '|| sReleaseName ||', nUserId='|| nUserId ||', nRtagId='|| nRtagId);
8313
 
8314
   END IF;
8315
 
8316
 
8317
   -- Check for duplicate Release Names
8318
   SELECT rt.PROJ_ID INTO ProjId
8319
     FROM RELEASE_TAGS rt
8320
    WHERE rt.RTAG_ID = nRtagId;
8321
 
8322
   SELECT COUNT(rt.RTAG_ID) INTO RecCount
8323
     FROM RELEASE_TAGS rt
8324
    WHERE UPPER( rt.RTAG_NAME ) = UPPER( sReleaseName )
8325
      AND rt.RTAG_ID != nRtagId
8326
      AND rt.PROJ_ID = ProjId;
8327
 
8328
 
8329
   IF (RecCount > 0) THEN
8330
      RAISE_APPLICATION_ERROR (-20000, 'Release Name '|| sReleaseName ||' is Already Used in this Project.');
8331
   END IF;
8332
   /*-------------------------------------------------------*/
8333
 
8334
 
8335
 
8336
   -- Update release details
8337
   UPDATE RELEASE_TAGS rt SET
8338
   rt.RTAG_NAME = sReleaseName,
8339
   rt.DESCRIPTION = sReleaseComments,
8340
   rt.PARENT_RTAG_ID = nParentRtagId,
8341
   rt.ASSOC_MASS_REF = nMASSRtagId,
8342
   rt.CONFIG_SPEC_BRANCH = nConfigSpecBranch,
8343
   rt.OWNER_EMAIL = sOwnerEmail,
8344
   rt.PRODUCT_STATE_USED = cState
8345
   WHERE rt.RTAG_ID = nRtagId;
8346
 
8347
   -- Update display Order
8348
   UPDATE_DISPLAY_ORDER ( ProjId );
8349
 
8350
   /* Log Project Action */
8351
   Log_Project_Action ( ProjId, 'update_release', nUserId, 'Release Name: <br>Release Comments:', nRtagId );
8352
 
8353
 
8354
 
8355
 
8356
END;
8357
/*-------------------------------------------------------------------------------------------------------*/
8358
PROCEDURE Destroy_Release ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8359
 
8360
   RecCount NUMBER := 0;
8361
   sReleaseId VARCHAR2(4000);
8362
   ProjId NUMBER;
8363
 
8364
BEGIN
8365
   /*--------------- Business Rules Here -------------------*/
8366
   IF (nRtagId IS NULL)
8367
   THEN
8368
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8369
   END IF;
8370
 
8371
 
8372
 
8373
   -- Check for any kids
8374
   SELECT COUNT( rt.RTAG_ID ) INTO RecCount
8375
     FROM RELEASE_TAGS rt
8376
    WHERE rt.PARENT_RTAG_ID = nRtagId
8377
      AND rt.RTAG_ID != rt.PARENT_RTAG_ID;
8378
 
8379
   IF (RecCount > 0) THEN
8380
      RAISE_APPLICATION_ERROR (-20000, 'Cannot destroy this release. You need to destroy its children releases first.'  );
8381
   END IF;
8382
   /*-------------------------------------------------------*/
8383
 
8384
   -- Clear the release contents
8385
   Clean_Release_Contents ( nRtagId, nUserId );
8386
 
8387
   /* Log Project Action */
8388
   SELECT rt.PROJ_ID, rt.RTAG_NAME ||'['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']' INTO ProjId, sReleaseId
8389
     FROM RELEASE_TAGS rt
8390
    WHERE rt.RTAG_ID = nRtagId;
8391
 
8392
   Log_Project_Action ( ProjId, 'destroy_release', nUserId, sReleaseId, nRtagId );
8393
 
8394
 
8395
   -- Remove Release
8396
   DELETE
8397
     FROM RELEASE_TAGS rt
8398
    WHERE rt.RTAG_ID = nRtagId;
8399
 
8400
 
8401
 
8402
END;
8403
/*-------------------------------------------------------------------------------------------------------*/
8404
PROCEDURE Import_Release_Contents ( nSourceRtagId IN NUMBER, nTargetRtagId IN NUMBER, nUserId IN NUMBER  ) IS
8405
 
8406
   sSourceLocation VARCHAR2(4000);
8407
   sTargetLocation VARCHAR2(4000);
8408
   ProjId NUMBER;
8409
   cReleaseMode CHAR(1);
8410
   RconId NUMBER;
8411
 
8412
   -- this cursor gets the source release daemon configurations, ensuring that the
8413
   -- first record will be the master daemon, and subsequent records will be the slaves.
8414
   CURSOR curSrcReleaseConfigs IS
8415
    SELECT daemon_hostname, gbe_id, gbe_buildfilter
8416
     FROM RELEASE_CONFIG rc
8417
    WHERE rc.RTAG_ID = nSourceRtagId
8418
    ORDER BY rc.daemon_mode;
8419
    recSrcReleaseConfigs curSrcReleaseConfigs%ROWTYPE;
8420
 
8421
    -- this cursor looks for target release daemons
8422
   CURSOR curTgtReleaseConfigs IS
8423
    SELECT rcon_id
8424
     FROM RELEASE_CONFIG rc
8425
    WHERE rc.RTAG_ID = nTargetRtagId;
8426
    recTgtReleaseConfigs curTgtReleaseConfigs%ROWTYPE;
8427
 
8428
    -- this cursor looks for target release daemon run level entries
8429
   CURSOR curTgtReleaseConfigRunLevel IS
8430
    SELECT current_run_level
8431
     FROM RUN_LEVEL rl
8432
    WHERE rl.RCON_ID = recTgtReleaseConfigs.rcon_id;
8433
    recTgtReleaseConfigRunLevel curTgtReleaseConfigRunLevel%ROWTYPE;
8434
 
8435
BEGIN
8436
   /*--------------- Business Rules Here -------------------*/
8437
   IF (nSourceRtagId IS NULL) OR (nTargetRtagId IS NULL)
8438
   THEN
8439
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nSourceRtagId= '|| nSourceRtagId ||', nTargetRtagId='|| nTargetRtagId );
8440
   END IF;
8441
 
8442
   IF (nSourceRtagId = nTargetRtagId) THEN
8443
      RAISE_APPLICATION_ERROR (-20000, 'Cannot import release contents from same release.' );
8444
   END IF;
8445
 
8446
 
8447
   -- Check if Target release is in OPEN mode
8448
   SELECT rt.OFFICIAL  INTO  cReleaseMode
8449
     FROM RELEASE_TAGS rt
8450
    WHERE rt.RTAG_ID = nTargetRtagId;
8451
 
8452
   IF (cReleaseMode != 'N') THEN
8453
      RAISE_APPLICATION_ERROR (-20000, 'Release must be in OPEN mode to import the contents.' );
8454
   END IF;
8455
 
8456
   -- check that the target release's daemons are all paused before we allow an import operation
8457
   OPEN curTgtReleaseConfigs;
8458
   FETCH curtgtReleaseConfigs INTO recTgtReleaseConfigs;
8459
 
8460
   WHILE curTgtReleaseConfigs%FOUND
8461
   LOOP
8462
      OPEN curTgtReleaseConfigRunLevel;
8463
      FETCH curTgtReleaseConfigRunLevel INTO recTgtReleaseConfigRunLevel;
8464
      IF curTgtReleaseConfigRunLevel%FOUND THEN
8465
         IF (recTgtReleaseConfigRunLevel.current_run_level IS NULL) OR
8466
            (recTgtReleaseConfigRunLevel.current_run_level <> 2) THEN
8467
            RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8468
         END IF;
8469
      ELSE
8470
         -- we don't know what the daemon run level is so err on the side of caution
8471
         RAISE_APPLICATION_ERROR (-20000, 'Destination release daemon run levels must be paused before operation can proceed.' );
8472
      END IF;
8473
      CLOSE curTgtReleaseConfigRunLevel;
8474
 
8475
      FETCH curTgtReleaseConfigs INTO recTgtReleaseConfigs;
8476
   END LOOP;
8477
 
8478
   CLOSE curTgtReleaseConfigs;
8479
 
8480
 
8481
   /*-------------------------------------------------------*/
8482
 
8483
   -- Clean target contents
8484
   Clean_Release_Contents ( nTargetRtagId, nUserId );
8485
 
8486
 
8487
   -- Import Released Area Contents
8488
   INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE, PKG_ID, DEPRECATED_STATE )
8489
   SELECT nTargetRtagId AS RTAG_ID,
8490
         rc.PV_ID,
8491
         rc.BASE_VIEW_ID,
8492
         rc.INSERT_STAMP,
8493
         rc.INSERTOR_ID,
8494
         rc.PKG_STATE,
8495
         rc.PKG_ID,
8496
         rc.DEPRECATED_STATE
8497
     FROM RELEASE_CONTENT rc
8498
    WHERE rc.RTAG_ID = nSourceRtagId;
8499
 
8500
 
8501
   -- Import any Pegged Version settings from the source release
8502
   INSERT INTO PEGGED_VERSIONS ( RTAG_ID, PV_ID )
8503
   SELECT nTargetRtagId AS RTAG_ID,
8504
          pegv.PV_ID
8505
     FROM PEGGED_VERSIONS pegv
8506
    WHERE pegv.RTAG_ID = nSourceRtagId;
8507
 
8508
   -- Import any Advisory Ripple settings from the source release
8509
   INSERT INTO ADVISORY_RIPPLE ( RTAG_ID, PV_ID )
8510
   SELECT nTargetRtagId AS RTAG_ID,
8511
          avr.PV_ID
8512
     FROM ADVISORY_RIPPLE avr
8513
    WHERE avr.RTAG_ID = nSourceRtagId;
8514
 
8515
 
8516
   --Import Release Configuration Information
8517
   OPEN curSrcReleaseConfigs;
8518
   FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8519
 
8520
   WHILE curSrcReleaseConfigs%FOUND
8521
   LOOP
8522
      -- add a daemon to the target release
8523
      PK_BUILDAPI.add_daemon( recSrcReleaseConfigs.daemon_hostname, nTargetRtagId, recSrcReleaseConfigs.gbe_id, recSrcReleaseConfigs.gbe_buildfilter );
8524
 
8525
      FETCH curSrcReleaseConfigs INTO recSrcReleaseConfigs;
8526
   END LOOP;
8527
 
8528
   CLOSE curSrcReleaseConfigs;
8529
 
8530
 
8531
 
8532
   -- Import Ignore Warning states
8533
   INSERT INTO IGNORE_WARNINGS ( RTAG_ID, PV_ID, DPV_ID )
8534
   SELECT nTargetRtagId AS RTAG_ID,
8535
          igw.PV_ID,
8536
          igw.DPV_ID
8537
     FROM IGNORE_WARNINGS igw
8538
    WHERE igw.rtag_id = nSourceRtagId;
8539
 
8540
 
8541
   /* Log Project Action */
8542
   -- Get Source Location
8543
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sSourceLocation
8544
     FROM RELEASE_TAGS rt,
8545
           PROJECTS pr
8546
    WHERE rt.PROJ_ID = pr.PROJ_ID
8547
      AND rt.RTAG_ID = nSourceRtagId;
8548
 
8549
   -- Get Target Location
8550
   SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME ||' ['|| rt.RTAG_VERSION ||'.'|| rt.RTAG_LIFE_CYCLE ||']'  INTO sTargetLocation
8551
     FROM RELEASE_TAGS rt,
8552
           PROJECTS pr
8553
    WHERE rt.PROJ_ID = pr.PROJ_ID
8554
      AND rt.RTAG_ID = nTargetRtagId;
8555
 
8556
   -- Get project id
8557
   SELECT rt.PROJ_ID  INTO  ProjId
8558
     FROM RELEASE_TAGS rt
8559
    WHERE rt.RTAG_ID = nTargetRtagId;
8560
 
8561
   Log_Project_Action ( ProjId, 'import_release_contents', nUserId, 'SOURCE: '|| sSourceLocation ||'   TARGET: '|| sTargetLocation, nTargetRtagId );
8562
END;
8563
 
8564
 
8565
 
8566
/*-------------------------------------------------------------------------------------------------------*/
8567
PROCEDURE Clean_Release_Contents ( nRtagId IN NUMBER, nUserId IN NUMBER ) IS
8568
 
8569
   RecCount NUMBER;
8570
        rconIdList VARCHAR2(4000);
8571
 
8572
BEGIN
8573
   /*--------------- Business Rules Here -------------------*/
8574
   IF (nRtagId IS NULL)
8575
   THEN
8576
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId  );
8577
   END IF;
8578
 
8579
 
8580
   -- Check if other release references this release
8581
   SELECT COUNT( rl.RTAG_ID ) INTO RecCount
8582
     FROM RELEASE_LINKS rl
8583
    WHERE rl.REF_RTAG_ID = nRtagId;
8584
 
8585
   IF (RecCount > 0) THEN
8586
      RAISE_APPLICATION_ERROR (-20000, 'This release is referenced by other release and cannot be destroyed.'  );
8587
   END IF;
8588
   /*-------------------------------------------------------*/
8589
 
8590
   -- Delete Release links
8591
   DELETE
8592
     FROM RELEASE_LINKS rl
8593
    WHERE rl.RTAG_ID = nRtagId;
8594
 
8595
   -- Delete ignore warning
8596
   DELETE
8597
     FROM IGNORE_WARNINGS iw
8598
    WHERE iw.RTAG_ID = nRtagId;
8599
 
8600
 
8601
   -- Delete Build Order cached calculations
8602
   DELETE
8603
     FROM BUILD_ORDER bo
8604
    WHERE bo.RTAG_ID = nRtagId;
8605
 
8606
 
8607
   -- Delete Notification History
8608
   DELETE
8609
     FROM NOTIFICATION_HISTORY nh
8610
    WHERE nh.RTAG_ID = nRtagId;
8611
 
8612
 
8613
   -- Delete Released Area Contents
8614
   DELETE
8615
     FROM RELEASE_CONTENT rc
8616
    WHERE rc.RTAG_ID = nRtagId;
8617
 
8618
 
8619
   -- Delete Work In Progress Area Contents
8620
   DELETE
8621
     FROM WORK_IN_PROGRESS wip
8622
    WHERE wip.RTAG_ID = nRtagId;
8623
 
8624
 
8625
   -- Delete Pending Area Contents
8626
   DELETE
8627
     FROM PLANNED pl
8628
    WHERE pl.RTAG_ID = nRtagId;
8629
 
8630
   -- Delete Deprecated Packages
8631
   DELETE
8632
     FROM DEPRECATED_PACKAGES dp
8633
    WHERE dp.RTAG_ID = nRtagId;
8634
 
8635
   -- Delete Project Action Log
8636
   DELETE
8637
     FROM PROJECT_ACTION_LOG pal
8638
    WHERE pal.RTAG_ID = nRtagId;
8639
 
8640
   -- Delete Do Not Ripple Contents
8641
   DELETE
8642
     FROM DO_NOT_RIPPLE dnr
8643
    WHERE dnr.RTAG_ID = nRtagId;
8644
 
8645
   -- Delete Dash Board Contents
8646
   DELETE
8647
     FROM DASH_BOARD db
8648
    WHERE db.RTAG_ID = nRtagId;
8649
 
8650
   -- Delete Advisory Ripple Contents
8651
   DELETE
8652
     FROM ADVISORY_RIPPLE adr
8653
    WHERE adr.RTAG_ID = nRtagId;
8654
 
8655
   -- Delete Archive Action Log
8656
   DELETE
8657
     FROM ARCHIVE_ACTION_LOG aal
8658
    WHERE aal.RTAG_ID = nRtagId;
8659
 
8660
   -- Delete Daemons For This Release
8661
   FOR rcon IN (SELECT rc.RCON_ID FROM RELEASE_CONFIG rc WHERE rc.RTAG_ID = nRtagId )
8662
   LOOP
8663
      rconIdList := rconIdList || rcon.RCON_ID || ',';
8664
   END LOOP;
8665
 
8666
   pk_buildapi.DELETE_DAEMON(rconIdList);
8667
 
8668
   -- Delete Release Metrics Contents
8669
   DELETE
8670
     FROM RELEASE_METRICS rm
8671
    WHERE rm.RTAG_ID = nRtagId;
8672
 
8673
   -- Delete Release Configuration Contents
8674
   DELETE
8675
     FROM RELEASE_CONFIG rc
8676
    WHERE rc.RTAG_ID = nRtagId;
8677
 
8678
   -- Delete Pegged Version Contents
8679
   DELETE
8680
     FROM PEGGED_VERSIONS pegv
8681
    WHERE pegv.RTAG_ID = nRtagId;
8682
 
8683
END;
8684
/*-------------------------------------------------------------------------------------------------------*/
8685
FUNCTION GET_PARENT_RTAG ( nRtagId IN NUMBER, nSourceRtagId IN NUMBER, cIsBranch IN CHAR )  RETURN NUMBER IS
8686
 
8687
   nSourceParentRtagId NUMBER;
8688
 
8689
BEGIN
8690
   /*--------------- Business Rules Here -------------------*/
8691
   IF (nRtagId IS NULL) OR (cIsBranch IS NULL)
8692
   THEN
8693
      RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRtagId= '|| nRtagId ||', cIsBranch= '|| cIsBranch );
8694
   END IF;
8695
   /*-------------------------------------------------------*/
8696
 
8697
 
8698
   IF ( nSourceRtagId IS NULL ) THEN
8699
      -- Create new on main branch
8700
      RETURN nRtagId;
8701
 
8702
   ELSE
8703
      -- Create from source rtag_id
8704
 
8705
      -- Find parent of Source RtagId
8706
      SELECT rt.PARENT_RTAG_ID INTO nSourceParentRtagId
8707
        FROM RELEASE_TAGS rt
8708
       WHERE rt.RTAG_ID = nSourceRtagId;
8709
 
8710
      IF (UPPER(cIsBranch) = 'Y') THEN
8711
         RETURN nSourceRtagId;
8712
      ELSE
8713
         IF (nSourceRtagId = nSourceParentRtagId) THEN
8714
            RETURN nRtagId;
8715
         ELSE
8716
            RETURN nSourceParentRtagId;
8717
         END IF;
8718
      END IF;
8719
 
8720
 
8721
   END IF;
8722
 
8723
 
8724
END;
8725
/*-------------------------------------------------------------------------------------------------------*/
8726
 
8727
-- PROCEDURE Get_Next_Version ( nSourceRtagId IN NUMBER,
8728
--                       sNextVersion OUT VARCHAR2,
8729
--                       nNextLifeCycle OUT NUMBER,
8730
--                       nParentRtagId OUT NUMBER,
8731
--                       nProjId IN NUMBER ) IS
8732
--
8733
-- SourceBranchCount NUMBER;
8734
-- ProjRootVersion VARCHAR2(4000);
8735
-- LastLifeCycle NUMBER;
8736
-- ROOT_VERSION_NOT_FOUND NUMBER := -1;
8737
-- SET_PARENT_AS_YOURSELF NUMBER := -1;
8738
--
8739
-- SourceProjId NUMBER;
8740
-- SourceVersion RELEASE_TAGS.RTAG_VERSION%TYPE;
8741
-- SourceLifeCycle RELEASE_TAGS.RTAG_LIFE_CYCLE%TYPE;
8742
--
8743
-- BEGIN
8744
--    /*--------------- Business Rules Here -------------------*/
8745
--    /*-------------------------------------------------------*/
8746
--
8747
--
8748
--    BEGIN
8749
--       -- Get Project root version
8750
--       SELECT rt.RTAG_VERSION INTO ProjRootVersion
8751
--         FROM RELEASE_TAGS rt
8752
--        WHERE rt.PROJ_ID = nProjId
8753
--          AND rt.RTAG_ID = rt.PARENT_RTAG_ID;
8754
--
8755
--       EXCEPTION
8756
--       WHEN NO_DATA_FOUND THEN
8757
--       ProjRootVersion := ROOT_VERSION_NOT_FOUND;
8758
--    END;
8759
--
8760
--
8761
--
8762
--
8763
--    BEGIN
8764
--       -- Get info for source rtagid
8765
--       SELECT rt.PROJ_ID, rt.RTAG_VERSION, rt.RTAG_LIFE_CYCLE  INTO  SourceProjId, SourceVersion, SourceLifeCycle
8766
--         FROM RELEASE_TAGS rt
8767
--        WHERE rt.RTAG_ID = nSourceRtagId;
8768
--
8769
--       EXCEPTION
8770
--       WHEN NO_DATA_FOUND THEN
8771
--       SourceProjId := NULL;
8772
--       SourceVersion := NULL;
8773
--       SourceLifeCycle := NULL;
8774
--    END;
8775
--
8776
--
8777
--    IF (nSourceRtagId IS NULL)  OR  ( SourceProjId != nProjId ) THEN
8778
--
8779
--       /* Blank Release Required  OR  Release imported from other project */
8780
--
8781
--       IF (ProjRootVersion = ROOT_VERSION_NOT_FOUND) THEN
8782
--          /* No Releases found in the project, hence calculate next version available.  */
8783
--
8784
--          -- Set parent rtag
8785
--          nParentRtagId := SET_PARENT_AS_YOURSELF;
8786
--
8787
--
8788
--          BEGIN
8789
--             -- Get Next Available Global Root Version
8790
--             SELECT MAX( TO_NUMBER( rt.RTAG_VERSION ) )  INTO  ProjRootVersion
8791
--               FROM RELEASE_TAGS rt
8792
--              WHERE rt.RTAG_ID = rt.PARENT_RTAG_ID;
8793
--
8794
--             -- Set Next Rtag Version
8795
--             sNextVersion := CAST( ProjRootVersion + 1 AS VARCHAR2 );
8796
--
8797
--             -- Restart Lifecycle
8798
--             nNextLifeCycle := 0;
8799
--
8800
--
8801
--             EXCEPTION
8802
--             WHEN NO_DATA_FOUND THEN
8803
--             -- Release Manager has no releases, hence start from 1
8804
--             sNextVersion := '1';
8805
--             nNextLifeCycle := 0;
8806
--
8807
--          END;
8808
--
8809
--
8810
--
8811
--       ELSE
8812
--          /* Releases found in this project. */
8813
--
8814
--          SELECT qry.RTAG_ID, qry.RTAG_LIFE_CYCLE  INTO nParentRtagId, LastLifeCycle
8815
--            FROM (
8816
--                SELECT rt.RTAG_ID, rt.RTAG_LIFE_CYCLE
8817
--                  FROM RELEASE_TAGS rt
8818
--                 WHERE rt.PROJ_ID = nProjId
8819
--                   AND rt.RTAG_VERSION = ProjRootVersion
8820
--                 ORDER BY rt.RTAG_LIFE_CYCLE DESC
8821
--                  ) qry
8822
--           WHERE ROWNUM = 1;
8823
--
8824
--
8825
--          -- Set same Rtag Version
8826
--          sNextVersion := ProjRootVersion;
8827
--
8828
--          -- Increase Lifecycle
8829
--          nNextLifeCycle := LastLifeCycle + 1;
8830
--
8831
--       END IF;
8832
--
8833
--
8834
--
8835
--    ELSE
8836
--       /* Create Release From other release within this project */
8837
--
8838
--       -- Set parent id
8839
--       nParentRtagId := nSourceRtagId;
8840
--
8841
--
8842
--       -- Get number of source branches
8843
--       SELECT COUNT(rt.RTAG_ID) INTO SourceBranchCount
8844
--         FROM RELEASE_TAGS rt
8845
--        WHERE rt.PROJ_ID = nProjId
8846
--          AND rt.PARENT_RTAG_ID = nSourceRtagId;
8847
--
8848
--
8849
--       IF SourceBranchCount = 0 THEN
8850
--          /* Release is Head (i.e. Tip on its branch ) */
8851
--
8852
--          -- Set Next Rtag Version
8853
--          sNextVersion := SourceVersion;
8854
--
8855
--          -- Increase Lifecycle
8856
--          nNextLifeCycle := SourceLifeCycle + 1;
8857
--
8858
--
8859
--       ELSIF SourceBranchCount = 1 THEN
8860
--          /* Release IS NOT Head, but can be branched */
8861
--
8862
--          -- Set Next Rtag Version
8863
--          sNextVersion := SourceVersion ||'.'|| SourceLifeCycle;
8864
--
8865
--          -- Reset Lifecycle to 1
8866
--          nNextLifeCycle := 1;
8867
--
8868
--
8869
--       ELSE
8870
--          -- Limit of two branches is reached
8871
--          RAISE_APPLICATION_ERROR (-20000, 'This release is already branched and cannot be branched again. ');
8872
--
8873
--       END IF;
8874
--
8875
--
8876
--
8877
--
8878
--
8879
--
8880
--    END IF;
8881
--
8882
--
8883
-- END;
8884
 
8885
/*-------------------------------------------------------------------------------------------------------*/
8886
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
8887
 
8888
   IsBaseView CHAR(1);
8889
 
8890
BEGIN
8891
 
8892
   -- Check if the view is BASE VIEW
8893
   SELECT vi.BASE_VIEW INTO IsBaseView
8894
     FROM VIEWS vi
8895
    WHERE vi.VIEW_ID = ViewId;
8896
 
8897
   IF (IsBaseView = 'Y') THEN
8898
      -- Get Base view content
8899
      OPEN RecordSet FOR
8900
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8901
            rel.deprecated_state,
8902
            pv.pv_id,
8903
            pkg.pkg_name,
8904
            pv.pkg_version,
8905
            pv.dlocked,
8906
            pv.pv_description,
8907
            pv.BUILD_TYPE
8908
        FROM release_content rel,
8909
             packages pkg,
8910
             package_versions pv
8911
       WHERE pv.pkg_id = pkg.pkg_id
8912
         AND rel.pv_id = pv.pv_id
8913
         AND rel.BASE_VIEW_ID = ViewId
8914
         AND rel.RTAG_ID = RtagId
8915
       ORDER BY UPPER(pkg.PKG_NAME);
8916
 
8917
   ELSE
8918
 
8919
       -- Get non base view content
8920
      OPEN RecordSet FOR
8921
      SELECT DECODE ( rel.pkg_state, NULL, 0, rel.pkg_state ) AS PKG_STATE,
8922
            rel.deprecated_state,
8923
            pv.pv_id,
8924
            pkg.pkg_name,
8925
            pv.pkg_version,
8926
            pv.dlocked,
8927
            pv.pv_description,
8928
            pv.BUILD_TYPE
8929
        FROM release_content rel,
8930
             packages pkg,
8931
             package_versions pv,
8932
            VIEW_DEF vd
8933
       WHERE pv.pkg_id = pkg.pkg_id
8934
         AND rel.pv_id = pv.pv_id
8935
         AND vd.VIEW_ID = ViewId
8936
         AND vd.PKG_ID = pv.PKG_ID
8937
         AND rel.RTAG_ID = RtagId
8938
       ORDER BY UPPER(pkg.PKG_NAME);
8939
 
8940
   END IF;
8941
 
8942
 
8943
 
8944
 
8945
END;
8946
/*-------------------------------------------------------------------------------------------------------*/
8947
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
8948
 
8949
   ReleaseLocation VARCHAR2(4000);
8950
   sPkgVersion VARCHAR2(4000);
8951
   nPkgId NUMBER;
8952
   sVExt VARCHAR2(4000);
8953
   IsPatch PACKAGE_VERSIONS.IS_PATCH%TYPE := 'N';
8954
 
8955
   -- Find package for replacement
8956
   CURSOR curReplacePkg IS
8957
    SELECT pv.PV_ID
8958
     FROM RELEASE_CONTENT rc,
8959
           PACKAGE_VERSIONS pv
8960
    WHERE rc.PV_ID = pv.PV_ID
8961
      AND rc.RTAG_ID = RtagId
8962
      AND pv.PKG_ID = nPkgId
8963
      AND NVL( pv.V_EXT, 'LINK_A_NULL' ) = NVL( sVExt, 'LINK_A_NULL' );
8964
    recReplacePkg curReplacePkg%ROWTYPE;
8965
 
8966
BEGIN
8967
 
8968
   -- Get is_patch, pkg_id and v_ext
8969
   SELECT pv.IS_PATCH, pv.PKG_ID, pv.V_EXT INTO IsPatch, nPkgId, sVExt
8970
     FROM PACKAGE_VERSIONS pv
8971
    WHERE pv.PV_ID = newPvId;
8972
 
8973
 
8974
   -- Never put patch in relesed area
8975
   IF (IsPatch != 'Y') OR (IsPatch IS NULL) THEN
8976
 
8977
      -- Try to get a package to be replaced with this new one.
8978
      -- Use unique constraint of PKG_ID and V_EXT
8979
      OPEN curReplacePkg;
8980
       FETCH curReplacePkg INTO recReplacePkg;
8981
 
8982
       IF curReplacePkg%FOUND THEN
8983
         -- Replace package
8984
         REPLACE_PACKAGE ( newPvId, recReplacePkg.PV_ID, RtagId, UserId );
8985
 
8986
      ELSE
8987
         -- Add new package
8988
         INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
8989
         VALUES( RtagId, newPvId, ViewId, Ora_Sysdate, UserId, 0);
8990
 
8991
 
8992
          /* LOG ACTION */
8993
         SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
8994
           FROM PROJECTS proj,
8995
                 RELEASE_TAGS rt
8996
          WHERE rt.PROJ_ID = proj.PROJ_ID
8997
            AND rt.RTAG_ID = RtagId;
8998
 
8999
         SELECT pv.PKG_VERSION INTO sPkgVersion
9000
           FROM PACKAGE_VERSIONS pv
9001
          WHERE pv.PV_ID = newPvId;
9002
 
9003
         Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9004
 
9005
 
9006
      END IF;
9007
 
9008
      CLOSE curReplacePkg;
9009
 
9010
   END IF;
9011
 
9012
END;
9013
/*-------------------------------------------------------------------------------------------------------*/
9014
PROCEDURE REPLACE_PACKAGE ( newPvId IN NUMBER, oldPvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9015
 
9016
   ReleaseLocation VARCHAR2(4000);
9017
   sPkgVersion VARCHAR2(4000);
9018
 
9019
BEGIN
9020
 
9021
   -- Replace Package
9022
    UPDATE RELEASE_CONTENT
9023
       SET pv_id = newPvId,
9024
           insert_stamp = Ora_Sysdate,
9025
           insertor_id = UserId,
9026
         product_state = NULL
9027
     WHERE rtag_id = RtagId
9028
       AND pv_id = oldPvId;
9029
 
9030
   -- update the pegging table
9031
   UPDATE PEGGED_VERSIONS
9032
      SET pv_id = newPvId
9033
     WHERE rtag_id = RtagId
9034
       AND pv_id = oldPvId;
9035
 
9036
   -- update the advisory_ripple table
9037
   UPDATE ADVISORY_RIPPLE
9038
      SET pv_id = newPvId
9039
     WHERE rtag_id = RtagId
9040
       AND pv_id = oldPvId;
9041
 
9042
    /* LOG ACTION */
9043
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9044
     FROM PROJECTS proj,
9045
           RELEASE_TAGS rt
9046
    WHERE rt.PROJ_ID = proj.PROJ_ID
9047
      AND rt.RTAG_ID = RtagId;
9048
 
9049
   SELECT pv.PKG_VERSION INTO sPkgVersion
9050
     FROM PACKAGE_VERSIONS pv
9051
    WHERE pv.PV_ID = newPvId;
9052
 
9053
   Log_Action ( oldPvId, 'replaced_with', UserId, 'Replacing with: '|| sPkgVersion ||' at '|| ReleaseLocation );
9054
   Log_Action ( newPvId, 'add', UserId, 'Location: '|| ReleaseLocation );
9055
 
9056
END;
9057
/*-------------------------------------------------------------------------------------------------------*/
9058
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9059
   ReleaseLocation VARCHAR2(4000);
9060
 
9061
BEGIN
9062
 
9063
 
9064
   -- Delete old package
9065
   DELETE
9066
     FROM RELEASE_CONTENT rc
9067
    WHERE rc.PV_ID = PvId
9068
      AND rc.RTAG_ID = RtagId;
9069
 
9070
 
9071
   /* LOG ACTION */
9072
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9073
     FROM PROJECTS proj,
9074
          RELEASE_TAGS rt
9075
    WHERE rt.PROJ_ID = proj.PROJ_ID
9076
      AND rt.RTAG_ID = RtagId;
9077
 
9078
   Log_Action ( PvId, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9079
 
9080
 
9081
END;
9082
/*-------------------------------------------------------------------------------------------------------*/
9083
PROCEDURE REMOVE_MATCHING_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
9084
   ReleaseLocation VARCHAR2(4000);
9085
 
9086
   CURSOR curMatchingPackage IS
9087
    SELECT mpv.PV_ID
9088
     FROM RELEASE_CONTENT rc,
9089
           PACKAGE_VERSIONS mpv,
9090
         PACKAGE_VERSIONS pv
9091
    WHERE rc.PV_ID = mpv.PV_ID
9092
      AND rc.RTAG_ID = RtagId
9093
      AND pv.PV_ID = PvId
9094
      AND pv.PKG_ID = mpv.PKG_ID
9095
      AND NVL( pv.V_EXT, '|LINK_A_NULL|' ) = NVL( mpv.V_EXT, '|LINK_A_NULL|' );
9096
    recMatchingPackage curMatchingPackage%ROWTYPE;
9097
 
9098
BEGIN
9099
 
9100
   OPEN curMatchingPackage;
9101
    FETCH curMatchingPackage INTO recMatchingPackage;
9102
 
9103
    IF curMatchingPackage%FOUND THEN
9104
      -- Delete old package
9105
      DELETE
9106
        FROM RELEASE_CONTENT rc
9107
       WHERE rc.PV_ID = recMatchingPackage.PV_ID
9108
         AND rc.RTAG_ID = RtagId;
9109
 
9110
 
9111
      /* LOG ACTION */
9112
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
9113
        FROM PROJECTS proj,
9114
              RELEASE_TAGS rt
9115
       WHERE rt.PROJ_ID = proj.PROJ_ID
9116
         AND rt.RTAG_ID = RtagId;
9117
 
9118
      Log_Action ( recMatchingPackage.PV_ID, 'delete_from_released', UserId, 'Location: '|| ReleaseLocation );
9119
 
9120
   END IF;
9121
 
9122
 
9123
   CLOSE curMatchingPackage;
9124
 
9125
 
9126
 
9127
 
9128
END;
9129
/*-------------------------------------------------------------------------------------------------------*/
9130
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
9131
 
9132
   ReturnValue NUMBER;
9133
 
9134
BEGIN
9135
   SELECT rc.BASE_VIEW_ID INTO ReturnValue
9136
     FROM RELEASE_CONTENT rc
9137
    WHERE rc.RTAG_ID = RtagId
9138
      AND rc.PV_ID = PvId;
9139
 
9140
   RETURN ReturnValue;
9141
END;
9142
/*-------------------------------------------------------------------------------------------------------*/
9143
PROCEDURE RUN_POST_ACTIONS ( PvId IN NUMBER, RtagId IN NUMBER ) IS
9144
 
9145
BEGIN
9146
   -- Reset Ignore warnings up-the-tree
9147
   RESET_IGNORE_WARNINGS ( TO_CHAR(PvId), RtagId );
9148
 
9149
   -- Refresh Package states
9150
   TOUCH_RELEASE ( RtagId );
9151
 
9152
END;
9153
/*-------------------------------------------------------------------------------------------------------*/
9154
PROCEDURE RUN_POST_ACTIONS_BULK ( PvId IN NUMBER ) IS
9155
   CURSOR curReleases IS
9156
    SELECT rc.RTAG_ID
9157
     FROM RELEASE_CONTENT rc
9158
    WHERE rc.PV_ID = PvId;
9159
    recReleases curReleases%ROWTYPE;
9160
 
9161
BEGIN
9162
 
9163
   OPEN curReleases;
9164
    FETCH curReleases INTO recReleases;
9165
 
9166
   WHILE curReleases%FOUND
9167
   LOOP
9168
 
9169
      RUN_POST_ACTIONS ( PvId, recReleases.RTAG_ID );
9170
 
9171
      FETCH curReleases INTO recReleases;
9172
   END LOOP;
9173
 
9174
   CLOSE curReleases;
9175
 
9176
END;
9177
/*-------------------------------------------------------------------------------------------------------*/
9178
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
9179
 
9180
BEGIN
9181
 
9182
   UPDATE RELEASE_CONTENT rc SET
9183
   rc.BASE_VIEW_ID = NewViewId
9184
   WHERE rc.PV_ID = PvId
9185
     AND rc.RTAG_ID = RtagId;
9186
 
9187
END;
9188
/*-------------------------------------------------------------------------------------------------------*/
9189
PROCEDURE ADD_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER, ProblemString OUT VARCHAR2 ) IS
9190
 
9191
   RowCount NUMBER;
9192
 
9193
 
9194
   CURSOR curPackageClash IS
9195
   SELECT pkg.PKG_NAME,
9196
         er.*
9197
     FROM (
9198
 
9199
           /* Get existing referenced packages */
9200
         SELECT pv.PKG_ID,
9201
                pv.V_EXT
9202
           FROM RELEASE_LINKS rl,
9203
                 RELEASE_CONTENT rc,
9204
                 PACKAGE_VERSIONS pv
9205
          WHERE rl.RTAG_ID = nRtagId
9206
            AND rl.REF_RTAG_ID = rc.RTAG_ID
9207
            AND rc.PV_ID = pv.PV_ID
9208
 
9209
            ) er,
9210
         (
9211
 
9212
         /* Get current reference packages */
9213
         SELECT pv.PKG_ID,
9214
                pv.V_EXT
9215
           FROM RELEASE_CONTENT rc,
9216
                 PACKAGE_VERSIONS pv
9217
          WHERE rc.RTAG_ID = nRefRtagId
9218
            AND rc.PV_ID = pv.PV_ID
9219
 
9220
         ) cr,
9221
         PACKAGES PKG
9222
    WHERE er.PKG_ID = cr.PKG_ID
9223
      AND NVL(er.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9224
      AND er.PKG_ID = pkg.PKG_ID;
9225
 
9226
   recPackageClash curPackageClash%ROWTYPE;
9227
 
9228
BEGIN
9229
   /*--------------- Business Rules Here -------------------*/
9230
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9231
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9232
   END IF;
9233
 
9234
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9235
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9236
   END IF;
9237
   /*-------------------------------------------------------*/
9238
   ProblemString := NULL;
9239
 
9240
 
9241
   -- Check if release already has references
9242
   SELECT COUNT(rl.RTAG_ID)  INTO  RowCount
9243
     FROM RELEASE_LINKS rl
9244
    WHERE rl.RTAG_ID = nRtagId;
9245
 
9246
 
9247
   IF RowCount > 0 THEN
9248
      -- Found existing references
9249
 
9250
      -- Make sure there is no package clashes
9251
      OPEN curPackageClash;
9252
       FETCH curPackageClash INTO recPackageClash;
9253
 
9254
      IF curPackageClash%FOUND THEN
9255
 
9256
         ProblemString := ProblemString ||'Following is partial list of package already referenced from other release:'|| UTL_TCP.CRLF;
9257
 
9258
         WHILE curPackageClash%FOUND
9259
         LOOP
9260
            EXIT WHEN LENGTH( ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF ) > 200;   -- Do not allow variable overflow
9261
 
9262
            ProblemString := ProblemString || '- '|| recPackageClash.PKG_NAME ||' '|| recPackageClash.V_EXT  || UTL_TCP.CRLF;
9263
 
9264
            FETCH curPackageClash INTO recPackageClash;
9265
         END LOOP;
9266
 
9267
      END IF;
9268
 
9269
      CLOSE curPackageClash;
9270
 
9271
 
9272
   ELSE
9273
      -- No references found, hence reference a release
9274
 
9275
 
9276
      -- Remove exising package from this release to be referenced
9277
      REMOVE_RELEASE_REFERENCE ( nRtagId, nRefRtagId);
9278
 
9279
 
9280
      -- Add new linked packages to release
9281
      INSERT INTO RELEASE_CONTENT rc (RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
9282
      SELECT nRtagId,
9283
            rc.PV_ID,
9284
            rc.BASE_VIEW_ID,
9285
            rc.INSERT_STAMP,
9286
            rc.INSERTOR_ID,
9287
            rc.PKG_STATE
9288
        FROM RELEASE_CONTENT rc
9289
       WHERE rc.RTAG_ID = nRefRtagId;
9290
 
9291
 
9292
 
9293
      -- Copy ignore warnings for referenced packages
9294
      INSERT INTO IGNORE_WARNINGS iw (RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE)
9295
      SELECT nRtagId,
9296
            iw.PV_ID,
9297
            iw.DPV_ID,
9298
            iw.IS_PATCH_IGNORE
9299
        FROM IGNORE_WARNINGS iw,
9300
              RELEASE_CONTENT rc
9301
       WHERE iw.RTAG_ID = rc.RTAG_ID
9302
         AND iw.PV_ID = rc.PV_ID
9303
         AND rc.RTAG_ID = nRefRtagId;
9304
 
9305
 
9306
 
9307
      -- Reference release
9308
      INSERT INTO RELEASE_LINKS (RTAG_ID, REF_RTAG_ID)
9309
      VALUES ( nRtagId, nRefRtagId );
9310
 
9311
 
9312
      -- Refresh Package states
9313
      TOUCH_RELEASE ( nRtagId );
9314
 
9315
   END IF;
9316
 
9317
 
9318
END;
9319
/*-------------------------------------------------------------------------------------------------------*/
9320
PROCEDURE REMOVE_RELEASE_REFERENCE ( nRtagId IN NUMBER, nRefRtagId IN NUMBER ) IS
9321
 
9322
 
9323
BEGIN
9324
   /*--------------- Business Rules Here -------------------*/
9325
   IF (nRtagId = 0) OR ( nRtagId IS NULL ) THEN
9326
      RAISE_APPLICATION_ERROR (-20000, 'nRtagId is not supplied. [nRtagId='|| nRtagId ||']' );
9327
   END IF;
9328
 
9329
   IF (nRefRtagId = 0) OR ( nRefRtagId IS NULL ) THEN
9330
      RAISE_APPLICATION_ERROR (-20000, 'nRefRtagId is not supplied. [nRefRtagId='|| nRefRtagId ||']' );
9331
   END IF;
9332
 
9333
   /*-------------------------------------------------------*/
9334
 
9335
 
9336
   -- Remove ignore warnings for those packages who use referenced packages
9337
   DELETE FROM IGNORE_WARNINGS iw
9338
    WHERE iw.RTAG_ID = nRtagId
9339
      AND iw.DPV_ID IN (
9340
                        SELECT dep.DPV_ID
9341
                       FROM (
9342
 
9343
                           /* Get referenced packages */
9344
                           SELECT pv.PKG_ID,
9345
                                  pv.V_EXT
9346
                             FROM RELEASE_CONTENT rc,
9347
                                   PACKAGE_VERSIONS pv
9348
                            WHERE rc.RTAG_ID = nRefRtagId
9349
                              AND rc.PV_ID = pv.PV_ID
9350
 
9351
                           ) cr,
9352
                           (
9353
 
9354
                           /* Get all dependencies for current release */
9355
                           SELECT DISTINCT
9356
                                 pv.PKG_ID,
9357
                                 pv.V_EXT,
9358
                                 dep.DPV_ID
9359
                             FROM RELEASE_CONTENT rc,
9360
                                 PACKAGE_DEPENDENCIES dep,
9361
                                 PACKAGE_VERSIONS pv
9362
                            WHERE rc.RTAG_ID = nRtagId
9363
                              AND rc.PV_ID = dep.PV_ID
9364
                              AND dep.PV_ID = pv.PV_ID
9365
 
9366
                           ) dep
9367
                      WHERE dep.PKG_ID = cr.PKG_ID
9368
                        AND NVL(dep.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9369
                     );
9370
 
9371
 
9372
 
9373
 
9374
   -- Remove ignore warnings for those package which are going to be replaced with the reference
9375
   DELETE FROM IGNORE_WARNINGS iw
9376
    WHERE iw.RTAG_ID = nRtagId
9377
      AND iw.PV_ID IN (
9378
                  SELECT pv.PV_ID
9379
                    FROM (
9380
 
9381
                        /* Get referenced packages */
9382
                        SELECT pv.PKG_ID,
9383
                               pv.V_EXT
9384
                          FROM RELEASE_CONTENT rc,
9385
                                PACKAGE_VERSIONS pv
9386
                         WHERE rc.RTAG_ID = nRefRtagId
9387
                           AND rc.PV_ID = pv.PV_ID
9388
 
9389
                        ) cr,
9390
                        RELEASE_CONTENT rc,
9391
                        PACKAGE_VERSIONS pv
9392
                   WHERE pv.PKG_ID = cr.PKG_ID
9393
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9394
                     AND rc.RTAG_ID = nRtagId
9395
                     AND rc.PV_ID = pv.PV_ID
9396
                  );
9397
 
9398
 
9399
 
9400
 
9401
 
9402
   -- Remove matching packages from release
9403
   DELETE FROM RELEASE_CONTENT rc
9404
    WHERE rc.RTAG_ID = nRtagId
9405
      AND rc.PV_ID IN (
9406
                  SELECT pv.PV_ID
9407
                    FROM (
9408
 
9409
                        /* Get referenced packages */
9410
                        SELECT pv.PKG_ID,
9411
                               pv.V_EXT
9412
                          FROM RELEASE_CONTENT rc,
9413
                                PACKAGE_VERSIONS pv
9414
                         WHERE rc.RTAG_ID = nRefRtagId
9415
                           AND rc.PV_ID = pv.PV_ID
9416
 
9417
                        ) cr,
9418
                        RELEASE_CONTENT rc,
9419
                        PACKAGE_VERSIONS pv
9420
                   WHERE pv.PKG_ID = cr.PKG_ID
9421
                     AND NVL(pv.V_EXT, '|LINK_A_NULL|') = NVL(cr.V_EXT, '|LINK_A_NULL|')
9422
                     AND rc.RTAG_ID = nRtagId
9423
                     AND rc.PV_ID = pv.PV_ID
9424
                  );
9425
 
9426
 
9427
 
9428
 
9429
 
9430
   -- Remove Reference release
9431
   DELETE
9432
     FROM RELEASE_LINKS rl
9433
    WHERE rl.RTAG_ID = nRtagId
9434
      AND rl.REF_RTAG_ID = nRefRtagId;
9435
 
9436
 
9437
   -- Refresh Package states
9438
   TOUCH_RELEASE ( nRtagId );
9439
 
9440
 
9441
END;
9442
/*-------------------------------------------------------------------------------------------------------*/
9443
PROCEDURE CAN_USER_WRITE_TO_RELEASE ( RtagId IN NUMBER, PvId IN NUMBER, Permission IN CHAR ) IS
9444
 
9445
   cReleaseMode CHAR(1);
9446
   cPvMode CHAR(1);
9447
 
9448
BEGIN
9449
 
9450
   -- Get Release Mode
9451
   SELECT rt.OFFICIAL INTO cReleaseMode
9452
     FROM RELEASE_TAGS rt
9453
    WHERE rt.RTAG_ID = RtagId;
9454
 
9455
 
9456
   -- Get Package Mode
9457
   SELECT pv.DLOCKED INTO cPvMode
9458
     FROM PACKAGE_VERSIONS pv
9459
    WHERE pv.PV_ID = PvId;
9460
 
9461
   -- Only check if package is locked
9462
   IF (cPvMode = 'Y') THEN
9463
 
9464
      IF (cReleaseMode != 'N') AND (Permission != 'Y')
9465
      THEN
9466
         RAISE_APPLICATION_ERROR (-20000, 'Cannot add package to this release. Release needs to be in Open Mode.' );
9467
 
9468
      END IF;
9469
 
9470
   END IF;
9471
 
9472
 
9473
END;
9474
 
9475
/*-------------------------------------------------------------------------------------------------------*/
9476
END PK_RELEASE;
1374 dpurdie 9477
/
9478
--------------------------------------------------------
9479
--  DDL for Package Body PK_PROJECT
9480
--------------------------------------------------------
1373 dpurdie 9481
 
9482
  CREATE OR REPLACE PACKAGE BODY "PK_PROJECT" IS
9483
 
9484
    /*------------------------------------------------------------------------*/
9485
    PROCEDURE update_base_url (
9486
    nprojid   IN  projects.proj_id%TYPE,
9487
    sbaseurl  IN  VARCHAR2
9488
    ) IS
9489
    BEGIN
9490
 
9491
    UPDATE projects
9492
    SET base_url = sbaseurl
9493
    WHERE proj_id = nprojid;
9494
 
9495
    END update_base_url;
9496
 
9497
/*------------------------------------------------------------------------*/
9498
    PROCEDURE update_project_config (
9499
    nprojid   IN  projects.proj_id%TYPE,
9500
    sbaseurl  IN  VARCHAR2,
9501
    sjirakey  IN  VARCHAR2
9502
    ) IS
9503
    BEGIN
9504
 
9505
    UPDATE projects
9506
    SET base_url = sbaseurl,
9507
        jira_key = sjirakey
9508
    WHERE proj_id = nprojid;
9509
 
9510
    END update_project_config;
9511
    /*------------------------------------------------------------------------*/
9512
 
9513
    END pk_project;
1374 dpurdie 9514
/
9515
--------------------------------------------------------
9516
--  DDL for Package Body PK_ENVIRONMENT
9517
--------------------------------------------------------
1373 dpurdie 9518
 
9519
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT" 
9520
IS
9521
 
9522
   /*-------------------------------------------------------------------------------------------------------*/
9523
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
9524
     RETURN NUMBER
9525
   IS
9526
   BEGIN
9527
      /*
9528
     || N - unlocked
9529
     || Y - release and locked
9530
     || P - penging approval
9531
     || A - approved package ready for auto-build
9532
     */
9533
     IF cdlock = 'N' OR cdlock = 'R'
9534
     THEN
9535
       -- WORK IN PROGRESS --
9536
       RETURN 0;
9537
     ELSIF cdlock = 'P' OR cdlock = 'A'
9538
     THEN
9539
       -- PENDING --
9540
       RETURN 1;
9541
     ELSIF cdlock = 'Y'
9542
     THEN
9543
       -- RELEASED --
9544
       RETURN 2;
9545
     ELSE
9546
       -- NOT FOUND --
9547
       raise_application_error
9548
                   (-20000,
9549
                      'Cannot decide where to place package. [cDlock='
9550
                    || cdlock
9551
                    || ']'
9552
                   );
9553
     END IF;
9554
   END;
9555
 
9556
/*-------------------------------------------------------------------------------------------------------*/
9557
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
9558
     RETURN NUMBER
9559
   IS
9560
     envtab   NUMBER         := -1;
9561
 
9562
     CURSOR curarea
9563
     IS
9564
       SELECT 2 AS envtab
9565
         FROM release_content rc
9566
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9567
       UNION
9568
       SELECT 0 AS envtab
9569
         FROM work_in_progress wip
9570
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9571
       UNION
9572
       SELECT 1 AS envtab
9573
         FROM planned pl
9574
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9575
 
9576
     recarea   curarea%ROWTYPE;
9577
   BEGIN
9578
     OPEN curarea;
9579
 
9580
     FETCH curarea
9581
      INTO recarea;
9582
 
9583
     IF curarea%FOUND
9584
     THEN
9585
       envtab := recarea.envtab;
9586
     END IF;
9587
 
9588
     CLOSE curarea;
9589
 
9590
     RETURN envtab;
9591
   END;
9592
 
9593
/*-------------------------------------------------------------------------------------------------------*/
9594
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
9595
     RETURN NUMBER
9596
   IS
9597
     ispatch   package_versions.dlocked%TYPE;
9598
     viewid   NUMBER                    := -1;
9599
 
9600
     CURSOR curview
9601
     IS
9602
       SELECT rc.base_view_id AS view_id
9603
         FROM release_content rc
9604
        WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
9605
       UNION
9606
       SELECT wip.view_id AS view_id
9607
         FROM work_in_progress wip
9608
        WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
9609
       UNION
9610
       SELECT pl.view_id AS view_id
9611
         FROM planned pl
9612
        WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
9613
 
9614
     recview   curview%ROWTYPE;
9615
   BEGIN
9616
     -- Get dlock state
9617
     SELECT pv.is_patch
9618
      INTO ispatch
9619
      FROM package_versions pv
9620
      WHERE pv.pv_id = pvid;
9621
 
9622
     -- Decide which view id should package go under.
9623
     IF (ispatch != 'Y') OR (ispatch IS NULL)
9624
     THEN
9625
       -- Get VIEW ID of Package
9626
       OPEN curview;
9627
 
9628
       FETCH curview
9629
        INTO recview;
9630
 
9631
       IF curview%FOUND
9632
       THEN
9633
         viewid := recview.view_id;
9634
       ELSE
9635
         raise_application_error
9636
            (-20000,
9637
               'Cannot find view_id to proceed. [PvId='
9638
            || pvid
9639
            || ']. The current version may not exist in the release anymore.'
9640
            );
9641
       END IF;
9642
 
9643
       CLOSE curview;
9644
     ELSE
9645
       -- Get VIEW ID of Patch (view id of parent package)
9646
       SELECT rc.base_view_id
9647
         INTO viewid
9648
         FROM release_content rc, package_patches ppv
9649
        WHERE rc.rtag_id = rtagid
9650
         AND rc.pv_id = ppv.pv_id
9651
         AND ppv.patch_id = pvid;
9652
     END IF;
9653
 
9654
     RETURN viewid;
9655
   END;
9656
 
9657
/*-------------------------------------------------------------------------------------------------------*/
9658
   PROCEDURE add_package (
9659
     pvid    IN   NUMBER,
9660
     viewid   IN   NUMBER,
9661
     rtagid   IN   NUMBER,
9662
     userid   IN   NUMBER
9663
   )
9664
   IS
9665
     dlocked   package_versions.dlocked%TYPE;
9666
     envtab   NUMBER;
9667
   BEGIN
9668
     IF can_edit_pkg_in_project (pvid, rtagid) = 1
9669
     THEN
9670
       -- Get dlock state
9671
       SELECT pv.dlocked
9672
         INTO dlocked
9673
         FROM package_versions pv
9674
        WHERE pv.pv_id = pvid;
9675
 
9676
       -- Get which area should go under
9677
       envtab := select_environment_area (dlocked);
9678
       -- Log
9679
       log_action (pvid, 'action', userid, 'Start of Package Add...');
9680
 
9681
       -- Remove Package
9682
       IF envtab = 0
9683
       THEN
9684
         -- WORK IN PROGRESS --
9685
         pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
9686
       ELSIF envtab = 1
9687
       THEN
9688
         -- PENDING --
9689
         pk_planned.add_package (pvid, viewid, rtagid, userid);
9690
       ELSIF envtab = 2
9691
       THEN
9692
         -- RELEASED --
9693
         -- NOTE: this package will be replaced with matching package
9694
         pk_release.add_package (pvid, viewid, rtagid, userid);
9695
         -- Now do post Release Actions
9696
         pk_release.run_post_actions (pvid, rtagid);
9697
       END IF;
9698
 
9699
       -- Log
9700
       log_action (pvid, 'action', userid, 'End of Package Add...');
9701
     END IF;
9702
   END;
9703
 
9704
/*-------------------------------------------------------------------------------------------------------*/
9705
   PROCEDURE add_package_bulk (
9706
     pvidlist   IN   VARCHAR2,
9707
     viewid    IN   NUMBER,
9708
     rtagid    IN   NUMBER,
9709
     userid    IN   NUMBER
9710
   )
9711
   IS
9712
     nidcollector   relmgr_number_tab_t         := relmgr_number_tab_t
9713
                                                        ();
9714
     dlocked      package_versions.dlocked%TYPE;
9715
     pvid         NUMBER;
9716
     envtab       NUMBER;
9717
   BEGIN
9718
     /*--------------- Business Rules Here -------------------*/
9719
     IF (pvidlist IS NULL)
9720
     THEN
9721
       raise_application_error (-20000,
9722
                          'Please select at least one package.'
9723
                         );
9724
     END IF;
9725
 
9726
/*-------------------------------------------------------*/
9727
     nidcollector := in_list_number (pvidlist);
9728
 
9729
     FOR i IN 1 .. nidcollector.COUNT
9730
     LOOP
9731
       pvid := nidcollector (i);
9732
       add_package (pvid, viewid, rtagid, userid);
9733
     END LOOP;
9734
   END;
9735
 
9736
/*-------------------------------------------------------------------------------------------------------*/
9737
   PROCEDURE replace_package (
9738
     newpvid  IN   NUMBER,
9739
     oldpvid  IN   NUMBER,
9740
     rtagid   IN   NUMBER,
9741
     userid   IN   NUMBER
9742
   )
9743
   IS
9744
     dlocked      package_versions.dlocked%TYPE;
9745
     viewid       NUMBER;
9746
     envtab       NUMBER;
9747
     ROWCOUNT     NUMBER;
9748
     creleasemode CHAR (1);
9749
     npkgid       NUMBER;
9750
   BEGIN
9751
     /*--------------- Business Rules Here -------------------*/
9752
     -- Check if oldPvId exists. It could have been removed
9753
     SELECT COUNT (pv.pv_id)
9754
       INTO ROWCOUNT
9755
       FROM package_versions pv
9756
      WHERE pv.pv_id = oldpvid;
9757
 
9758
/*-------------------------------------------------------*/
9759
 
9760
     /* This procedure is usually used by "History" option in Release Manager */
9761
 
9762
     -- Get dlock state
9763
     SELECT pv.dlocked
9764
       INTO dlocked
9765
       FROM package_versions pv
9766
      WHERE pv.pv_id = newpvid;
9767
 
9768
     -- Get VIEW_ID ---
9769
     IF ROWCOUNT = 1
9770
     THEN
9771
       viewid := get_view_location (oldpvid, rtagid);
9772
     ELSE
9773
       -- Set ViewID to default
9774
       viewid := 7;
9775
     END IF;
9776
 
9777
     -- Get which area should go under
9778
     envtab := select_environment_area (dlocked);
9779
     -- Log
9780
     log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
9781
 
9782
     -- Replace package
9783
     IF envtab = 0
9784
     THEN
9785
       -- WORK IN PROGRESS --
9786
 
9787
       -- Delete old package
9788
       pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
9789
 
9790
       -- Add new package
9791
       pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
9792
     ELSIF envtab = 1
9793
     THEN
9794
       -- PENDING --
9795
 
9796
       -- Delete old package
9797
       pk_planned.remove_package (oldpvid, rtagid, userid);
9798
 
9799
       -- Add new package
9800
       pk_planned.add_package (newpvid, viewid, rtagid, userid);
9801
     ELSIF envtab = 2
9802
     THEN
9803
       -- RELEASED --
9804
 
9805
       -- Delete old package
9806
       pk_release.remove_package (oldpvid, rtagid, userid);
9807
       -- Add new package
9808
       pk_release.add_package (newpvid, viewid, rtagid, userid);
9809
 
9810
       -- update the pegging table
9811
       UPDATE PEGGED_VERSIONS SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9812
 
9813
       -- update the advisory ripple table
9814
       UPDATE ADVISORY_RIPPLE SET pv_id = newpvid WHERE rtag_id = rtagid AND pv_id = oldpvid;
9815
 
9816
       -- Now do post Release Actions
9817
       pk_release.run_post_actions (newpvid, rtagid);
9818
     END IF;
9819
 
9820
     -- Log
9821
     log_action (oldpvid, 'action', userid, 'End of Package Replace...');
9822
   END;
9823
 
9824
/*-------------------------------------------------------------------------------------------------------*/
9825
   FUNCTION remove_package (
9826
     pvid        IN   NUMBER,
9827
     rtagid      IN   NUMBER,
9828
     userid      IN   NUMBER,
9829
     forceremove IN   CHAR
9830
   )
9831
     RETURN NUMBER
9832
   IS
9833
     envtab      NUMBER;
9834
     isused      BOOLEAN;
9835
     recordcount   NUMBER;
9836
   BEGIN
9837
/*--------------- Business Rules Here -------------------*/
9838
/*-------------------------------------------------------*/
9839
 
9840
     -- Find location of package
9841
     envtab := get_package_area (pvid, rtagid);
9842
 
9843
     -- Remove Package
9844
     IF envtab = 0
9845
     THEN
9846
       -- WORK IN PROGRESS --
9847
       -- Delete package
9848
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
9849
 
9850
       RETURN 0;
9851
     ELSIF envtab = 1
9852
     THEN
9853
       -- PENDING --
9854
       -- Delete package
9855
       pk_planned.remove_package (pvid, rtagid, userid);
9856
 
9857
       RETURN 0;
9858
     ELSIF envtab = 2
9859
     THEN
9860
       -- RELEASED --
9861
 
9862
       -- Check if is used by other packages
9863
       isused := TRUE;
9864
 
9865
       IF forceremove = 'N'
9866
       THEN
9867
         SELECT COUNT (pv.pv_id)
9868
           INTO recordcount
9869
           FROM (SELECT dpv.pkg_id, dpv.v_ext
9870
                 FROM release_content rc,
9871
                     package_dependencies dep,
9872
                     package_versions dpv
9873
                WHERE rc.rtag_id = rtagid
9874
                  AND rc.pv_id = dep.pv_id
9875
                  AND dep.dpv_id = dpv.pv_id) rdep,
9876
               package_versions pv
9877
          WHERE pv.pkg_id = rdep.pkg_id
9878
            AND NVL (pv.v_ext, '|LINK_A_NULL|') =
9879
                                  NVL (rdep.v_ext, '|LINK_A_NULL|')
9880
            AND pv.pv_id = pvid;
9881
 
9882
         IF recordcount > 0
9883
         THEN
9884
            RETURN 1;               -- Return 1 as package being used
9885
         ELSE
9886
            isused := FALSE;
9887
         END IF;
9888
       END IF;
9889
 
9890
       IF forceremove = 'Y' OR NOT isused
9891
       THEN
9892
         -- Delete old package
9893
         pk_release.remove_package (pvid, rtagid, userid);
9894
 
9895
         -- Delete old package's pegging info
9896
         DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = rtagid AND pegv.PV_ID = pvid;
9897
 
9898
         -- Delete old package's advisory ripple info
9899
         DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = rtagid AND avr.PV_ID = pvid;
9900
 
9901
         -- Now do post Release Actions
9902
         pk_release.run_post_actions (pvid, rtagid);
9903
         RETURN 0;
9904
       END IF;
9905
     END IF;
9906
   END;
9907
 
9908
/*-------------------------------------------------------------------------------------------------------*/
9909
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
9910
 
9911
   PROCEDURE get_environment_items (
9912
     viewtype         IN      NUMBER,
9913
     userid           IN      NUMBER,
9914
     rtagid           IN      NUMBER,
9915
     sviewidshowlist  IN      VARCHAR2,
9916
     ntruerecordcount OUT     NUMBER,
9917
     recordset        OUT     typecur
9918
   )
9919
   IS
9920
   BEGIN
9921
     -- Get true record count because views can give false count
9922
     SELECT COUNT (pl.pv_id)
9923
      INTO ntruerecordcount
9924
      FROM environment_view pl
9925
      WHERE pl.rtag_id = rtagid;
9926
 
9927
     IF viewtype = 1
9928
     THEN
9929
       /*--- GUEST VIEW ---*/
9930
       OPEN recordset FOR
9931
         SELECT   *
9932
            FROM (
9933
                 /* Base Views collapsed */
9934
                 SELECT DISTINCT vi.view_id, vi.view_name,
9935
                             TO_NUMBER (NULL) AS pkg_state,
9936
                             TO_NUMBER (NULL) AS deprecated_state,
9937
                             TO_NUMBER (NULL) AS pv_id,
9938
                             NULL AS pkg_name, NULL AS pkg_version,
9939
                             NULL AS dlocked, NULL AS pv_description,
9940
                             rel.operation
9941
                         FROM environment_view rel, views vi
9942
                        WHERE rel.view_id = vi.view_id
9943
                          AND rtag_id = rtagid
9944
                          AND rel.view_id NOT IN (
9945
                               SELECT *
9946
                                 FROM THE
9947
                                       (SELECT CAST
9948
                                               (in_list_number
9949
                                                  (sviewidshowlist
9950
                                                  ) AS relmgr_number_tab_t
9951
                                               )
9952
                                         FROM DUAL
9953
                                       ))
9954
                 UNION
9955
                 /* Base Views expanded */
9956
                 SELECT vi.view_id, vi.view_name,
9957
                      DECODE (rel.pkg_state,
9958
                            NULL, 0,
9959
                            rel.pkg_state
9960
                           ) AS pkg_state,
9961
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
9962
                      pv.pkg_version, pv.dlocked, pv.pv_description,
9963
                      rel.operation
9964
                  FROM environment_view rel,
9965
                      PACKAGES pkg,
9966
                      package_versions pv,
9967
                      views vi
9968
                  WHERE pv.pkg_id = pkg.pkg_id
9969
                   AND rel.pv_id = pv.pv_id
9970
                   AND rel.view_id = vi.view_id
9971
                   AND rel.view_id IN (
9972
                        SELECT *
9973
                          FROM THE
9974
                                (SELECT CAST
9975
                                        (in_list_number
9976
                                               (sviewidshowlist) AS relmgr_number_tab_t
9977
                                        )
9978
                                  FROM DUAL
9979
                                ))
9980
                   AND rtag_id = rtagid) ord
9981
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
9982
     ELSIF viewtype = 2
9983
     THEN
9984
       /*--- PERSONAL VIEW ---*/
9985
       OPEN recordset FOR
9986
         SELECT   *
9987
            FROM (
9988
                 /* Base Views collapsed */
9989
                 SELECT DISTINCT vi.view_id, vi.view_name,
9990
                             TO_NUMBER (NULL) AS pkg_state,
9991
                             TO_NUMBER (NULL) AS deprecated_state,
9992
                             TO_NUMBER (NULL) AS pv_id,
9993
                             NULL AS pkg_name, NULL AS pkg_version,
9994
                             NULL AS dlocked, NULL AS pv_description,
9995
                             rel.operation
9996
                         FROM environment_view rel,
9997
                             view_settings vs,
9998
                             views vi
9999
                        WHERE rel.view_id = vi.view_id
10000
                          AND vs.view_id = rel.view_id
10001
                          AND vs.user_id = userid
10002
                          AND rtag_id = rtagid
10003
                          AND rel.view_id NOT IN (
10004
                               SELECT *
10005
                                 FROM THE
10006
                                       (SELECT CAST
10007
                                               (in_list_number
10008
                                                  (sviewidshowlist
10009
                                                  ) AS relmgr_number_tab_t
10010
                                               )
10011
                                         FROM DUAL
10012
                                       ))
10013
                 UNION
10014
                 /* Base Views expanded */
10015
                 SELECT vi.view_id, vi.view_name,
10016
                      DECODE (rel.pkg_state,
10017
                            NULL, 0,
10018
                            rel.pkg_state
10019
                           ) AS pkg_state,
10020
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10021
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10022
                      rel.operation
10023
                  FROM environment_view rel,
10024
                      PACKAGES pkg,
10025
                      package_versions pv,
10026
                      views vi,
10027
                      view_settings vs
10028
                  WHERE pv.pkg_id = pkg.pkg_id
10029
                   AND rel.pv_id = pv.pv_id
10030
                   AND rel.view_id = vi.view_id
10031
                   AND vs.view_id = vi.view_id
10032
                   AND vs.user_id = userid
10033
                   AND rel.view_id IN (
10034
                        SELECT *
10035
                          FROM THE
10036
                                (SELECT CAST
10037
                                        (in_list_number
10038
                                               (sviewidshowlist) AS relmgr_number_tab_t
10039
                                        )
10040
                                  FROM DUAL
10041
                                ))
10042
                   AND rtag_id = rtagid
10043
                 UNION
10044
                 /* Private Views collapsed */
10045
                 SELECT vi.view_id, vi.view_name,
10046
                      TO_NUMBER (NULL) AS pkg_state,
10047
                      TO_NUMBER (NULL) AS deprecated_state,
10048
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10049
                      NULL AS pkg_version, NULL AS dlocked,
10050
                      NULL AS pv_description,
10051
                      rel.operation
10052
                  FROM view_settings vs,
10053
                      view_def vd,
10054
                      views vi,
10055
                      environment_view rel,
10056
                      package_versions pv
10057
                  WHERE vs.view_id = vi.view_id
10058
                   AND rel.pv_id = pv.pv_id
10059
                   AND vd.pkg_id = pv.pkg_id
10060
                   AND vd.view_id = vi.view_id
10061
                   AND vi.base_view = 'N'
10062
                   AND rel.rtag_id = rtagid
10063
                   AND vs.user_id = userid
10064
                   AND vi.view_id NOT IN (
10065
                        SELECT *
10066
                          FROM THE
10067
                                (SELECT CAST
10068
                                        (in_list_number
10069
                                               (sviewidshowlist) AS relmgr_number_tab_t
10070
                                        )
10071
                                  FROM DUAL
10072
                                ))
10073
                 UNION
10074
                 /* Private Views expanded */
10075
                 SELECT vi.view_id, vi.view_name,
10076
                      DECODE (rel.pkg_state,
10077
                            NULL, 0,
10078
                            rel.pkg_state
10079
                           ) AS pkg_state,
10080
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10081
                      pv.pkg_version, pv.dlocked, pv.pv_description,
10082
                      rel.operation
10083
                  FROM users usr,
10084
                      view_settings vs,
10085
                      view_def vd,
10086
                      views vi,
10087
                      environment_view rel,
10088
                      PACKAGES pkg,
10089
                      package_versions pv
10090
                  WHERE vs.user_id = usr.user_id
10091
                   AND vs.view_id = vi.view_id
10092
                   AND vd.view_id = vi.view_id
10093
                   AND pv.pkg_id = pkg.pkg_id
10094
                   AND rel.pv_id = pv.pv_id
10095
                   AND rel.rtag_id = rtagid
10096
                   AND vd.pkg_id = pkg.pkg_id
10097
                   AND vi.base_view = 'N'
10098
                   AND vi.view_id IN (
10099
                        SELECT *
10100
                          FROM THE
10101
                                (SELECT CAST
10102
                                        (in_list_number
10103
                                               (sviewidshowlist) AS relmgr_number_tab_t
10104
                                        )
10105
                                  FROM DUAL
10106
                                ))
10107
                   AND usr.user_id = userid) ord
10108
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10109
     END IF;
10110
   END;
10111
 
10112
/*-------------------------------------------------------------------------------------------------------*/
10113
   PROCEDURE get_released_items (
10114
     viewtype         IN      NUMBER,
10115
     userid           IN      NUMBER,
10116
     rtagid           IN      NUMBER,
10117
     sviewidshowlist  IN      VARCHAR2,
10118
     ntruerecordcount OUT     NUMBER,
10119
     recordset        OUT     typecur
10120
   )
10121
   IS
10122
   BEGIN
10123
     -- Get true record count because views can give false count
10124
     SELECT COUNT (rc.pv_id)
10125
      INTO ntruerecordcount
10126
      FROM release_content rc
10127
      WHERE rc.rtag_id = rtagid;
10128
 
10129
     IF viewtype = 1
10130
     THEN
10131
       /*--- GUEST VIEW ---*/
10132
       OPEN recordset FOR
10133
         SELECT   *
10134
            FROM (
10135
                 /* Base Views collapsed */
10136
                 SELECT DISTINCT vi.view_id, vi.view_name,
10137
                             TO_NUMBER (NULL) AS pkg_state,
10138
                             TO_NUMBER (NULL) AS deprecated_state,
10139
                             TO_NUMBER (NULL) AS pv_id,
10140
                             NULL AS pkg_name, NULL AS pkg_version,
10141
                             NULL AS dlocked, NULL AS pv_description
10142
                         FROM release_content rel, views vi
10143
                        WHERE rel.base_view_id = vi.view_id
10144
                          AND rtag_id = rtagid
10145
                          AND rel.base_view_id NOT IN (
10146
                               SELECT *
10147
                                 FROM THE
10148
                                       (SELECT CAST
10149
                                               (in_list_number
10150
                                                  (sviewidshowlist
10151
                                                  ) AS relmgr_number_tab_t
10152
                                               )
10153
                                         FROM DUAL
10154
                                       ))
10155
                 UNION
10156
                 /* Base Views expanded */
10157
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10158
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10159
                      pv.pkg_version, pv.dlocked, pv.pv_description
10160
                  FROM release_content rel,
10161
                      PACKAGES pkg,
10162
                      package_versions pv,
10163
                      views vi
10164
                  WHERE pv.pkg_id = pkg.pkg_id
10165
                   AND rel.pv_id = pv.pv_id
10166
                   AND rel.base_view_id = vi.view_id
10167
                   AND rel.base_view_id IN (
10168
                        SELECT *
10169
                          FROM THE
10170
                                (SELECT CAST
10171
                                        (in_list_number
10172
                                               (sviewidshowlist) AS relmgr_number_tab_t
10173
                                        )
10174
                                  FROM DUAL
10175
                                ))
10176
                   AND rtag_id = rtagid) ord
10177
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10178
     ELSIF viewtype = 2
10179
     THEN
10180
       /*--- PERSONAL VIEW ---*/
10181
       OPEN recordset FOR
10182
         SELECT   *
10183
            FROM (
10184
                 /* Base Views collapsed */
10185
                 SELECT DISTINCT vi.view_id, vi.view_name,
10186
                             TO_NUMBER (NULL) AS pkg_state,
10187
                             TO_NUMBER (NULL) AS deprecated_state,
10188
                             TO_NUMBER (NULL) AS pv_id,
10189
                             NULL AS pkg_name, NULL AS pkg_version,
10190
                             NULL AS dlocked, NULL AS pv_description
10191
                         FROM release_content rel,
10192
                             view_settings vs,
10193
                             views vi
10194
                        WHERE rel.base_view_id = vi.view_id
10195
                          AND vs.view_id = rel.base_view_id
10196
                          AND vs.user_id = userid
10197
                          AND rtag_id = rtagid
10198
                          AND rel.base_view_id NOT IN (
10199
                               SELECT *
10200
                                 FROM THE
10201
                                       (SELECT CAST
10202
                                               (in_list_number
10203
                                                  (sviewidshowlist
10204
                                                  ) AS relmgr_number_tab_t
10205
                                               )
10206
                                         FROM DUAL
10207
                                       ))
10208
                 UNION
10209
                 /* Base Views expanded */
10210
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10211
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10212
                      pv.pkg_version, pv.dlocked, pv.pv_description
10213
                  FROM release_content rel,
10214
                      PACKAGES pkg,
10215
                      package_versions pv,
10216
                      views vi,
10217
                      view_settings vs
10218
                  WHERE pv.pkg_id = pkg.pkg_id
10219
                   AND rel.pv_id = pv.pv_id
10220
                   AND rel.base_view_id = vi.view_id
10221
                   AND vs.view_id = vi.view_id
10222
                   AND vs.user_id = userid
10223
                   AND rel.base_view_id IN (
10224
                        SELECT *
10225
                          FROM THE
10226
                                (SELECT CAST
10227
                                        (in_list_number
10228
                                               (sviewidshowlist) AS relmgr_number_tab_t
10229
                                        )
10230
                                  FROM DUAL
10231
                                ))
10232
                   AND rtag_id = rtagid
10233
                 UNION
10234
                 /* Private Views collapsed */
10235
                 SELECT vi.view_id, vi.view_name,
10236
                      TO_NUMBER (NULL) AS pkg_state,
10237
                      TO_NUMBER (NULL) AS deprecated_state,
10238
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10239
                      NULL AS pkg_version, NULL AS dlocked,
10240
                      NULL AS pv_description
10241
                  FROM view_settings vs,
10242
                      view_def vd,
10243
                      views vi,
10244
                      release_content rel,
10245
                      package_versions pv
10246
                  WHERE vs.view_id = vi.view_id
10247
                   AND rel.pv_id = pv.pv_id
10248
                   AND vd.pkg_id = pv.pkg_id
10249
                   AND vd.view_id = vi.view_id
10250
                   AND vi.base_view = 'N'
10251
                   AND rel.rtag_id = rtagid
10252
                   AND vs.user_id = userid
10253
                   AND vi.view_id NOT IN (
10254
                        SELECT *
10255
                          FROM THE
10256
                                (SELECT CAST
10257
                                        (in_list_number
10258
                                               (sviewidshowlist) AS relmgr_number_tab_t
10259
                                        )
10260
                                  FROM DUAL
10261
                                ))
10262
                 UNION
10263
                 /* Private Views expanded */
10264
                 SELECT vi.view_id, vi.view_name, rel.pkg_state,
10265
                      rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10266
                      pv.pkg_version, pv.dlocked, pv.pv_description
10267
                  FROM users usr,
10268
                      view_settings vs,
10269
                      view_def vd,
10270
                      views vi,
10271
                      release_content rel,
10272
                      PACKAGES pkg,
10273
                      package_versions pv
10274
                  WHERE vs.user_id = usr.user_id
10275
                   AND vs.view_id = vi.view_id
10276
                   AND vd.view_id = vi.view_id
10277
                   AND pv.pkg_id = pkg.pkg_id
10278
                   AND rel.pv_id = pv.pv_id
10279
                   AND rel.rtag_id = rtagid
10280
                   AND vd.pkg_id = pkg.pkg_id
10281
                   AND vi.base_view = 'N'
10282
                   AND vi.view_id IN (
10283
                        SELECT *
10284
                          FROM THE
10285
                                (SELECT CAST
10286
                                        (in_list_number
10287
                                               (sviewidshowlist) AS relmgr_number_tab_t
10288
                                        )
10289
                                  FROM DUAL
10290
                                ))
10291
                   AND usr.user_id = userid) ord
10292
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10293
     END IF;
10294
   END;
10295
 
10296
/*-------------------------------------------------------------------------------------------------------*/
10297
   PROCEDURE get_work_in_progress_items (
10298
     viewtype         IN      NUMBER,
10299
     userid           IN      NUMBER,
10300
     rtagid           IN      NUMBER,
10301
     sviewidshowlist  IN      VARCHAR2,
10302
     ntruerecordcount OUT     NUMBER,
10303
     recordset        OUT     typecur
10304
   )
10305
   IS
10306
   BEGIN
10307
     -- Get true record count because views can give false count
10308
     SELECT COUNT (wip.pv_id)
10309
      INTO ntruerecordcount
10310
      FROM work_in_progress wip
10311
      WHERE wip.rtag_id = rtagid;
10312
 
10313
     IF viewtype = 1
10314
     THEN
10315
       /*--- GUEST VIEW ---*/
10316
       OPEN recordset FOR
10317
         SELECT   *
10318
            FROM (
10319
                 /* Base Views collapsed */
10320
                 SELECT DISTINCT vi.view_id, vi.view_name,
10321
                             TO_NUMBER (NULL) AS pkg_state,
10322
                             TO_NUMBER (NULL) AS deprecated_state,
10323
                             TO_NUMBER (NULL) AS pv_id,
10324
                             NULL AS pkg_name, NULL AS pkg_version,
10325
                             NULL AS dlocked, NULL AS pv_description
10326
                         FROM work_in_progress rel, views vi
10327
                        WHERE rel.view_id = vi.view_id
10328
                          AND rtag_id = rtagid
10329
                          AND rel.view_id NOT IN (
10330
                               SELECT *
10331
                                 FROM THE
10332
                                       (SELECT CAST
10333
                                               (in_list_number
10334
                                                  (sviewidshowlist
10335
                                                  ) AS relmgr_number_tab_t
10336
                                               )
10337
                                         FROM DUAL
10338
                                       ))
10339
                 UNION
10340
                 /* Base Views expanded */
10341
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10342
 
10343
                      --rel.pkg_state,
10344
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10345
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10346
                      pv.pv_description
10347
                  FROM work_in_progress rel,
10348
                      PACKAGES pkg,
10349
                      package_versions pv,
10350
                      views vi
10351
                  WHERE pv.pkg_id = pkg.pkg_id
10352
                   AND rel.pv_id = pv.pv_id
10353
                   AND rel.view_id = vi.view_id
10354
                   AND rel.view_id IN (
10355
                        SELECT *
10356
                          FROM THE
10357
                                (SELECT CAST
10358
                                        (in_list_number
10359
                                               (sviewidshowlist) AS relmgr_number_tab_t
10360
                                        )
10361
                                  FROM DUAL
10362
                                ))
10363
                   AND rtag_id = rtagid) ord
10364
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10365
     ELSIF viewtype = 2
10366
     THEN
10367
       /*--- PERSONAL VIEW ---*/
10368
       OPEN recordset FOR
10369
         SELECT   *
10370
            FROM (
10371
                 /* Base Views collapsed */
10372
                 SELECT DISTINCT vi.view_id, vi.view_name,
10373
                             TO_NUMBER (NULL) AS pkg_state,
10374
                             TO_NUMBER (NULL) AS deprecated_state,
10375
                             TO_NUMBER (NULL) AS pv_id,
10376
                             NULL AS pkg_name, NULL AS pkg_version,
10377
                             NULL AS dlocked, NULL AS pv_description
10378
                         FROM work_in_progress rel,
10379
                             view_settings vs,
10380
                             views vi
10381
                        WHERE rel.view_id = vi.view_id
10382
                          AND vs.view_id = rel.view_id
10383
                          AND vs.user_id = userid
10384
                          AND rtag_id = rtagid
10385
                          AND rel.view_id NOT IN (
10386
                               SELECT *
10387
                                 FROM THE
10388
                                       (SELECT CAST
10389
                                               (in_list_number
10390
                                                  (sviewidshowlist
10391
                                                  ) AS relmgr_number_tab_t
10392
                                               )
10393
                                         FROM DUAL
10394
                                       ))
10395
                 UNION
10396
                 /* Base Views expanded */
10397
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10398
 
10399
                      --rel.pkg_state,
10400
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10401
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10402
                      pv.pv_description
10403
                  FROM work_in_progress rel,
10404
                      PACKAGES pkg,
10405
                      package_versions pv,
10406
                      views vi,
10407
                      view_settings vs
10408
                  WHERE pv.pkg_id = pkg.pkg_id
10409
                   AND rel.pv_id = pv.pv_id
10410
                   AND rel.view_id = vi.view_id
10411
                   AND vs.view_id = vi.view_id
10412
                   AND vs.user_id = userid
10413
                   AND rel.view_id IN (
10414
                        SELECT *
10415
                          FROM THE
10416
                                (SELECT CAST
10417
                                        (in_list_number
10418
                                               (sviewidshowlist) AS relmgr_number_tab_t
10419
                                        )
10420
                                  FROM DUAL
10421
                                ))
10422
                   AND rtag_id = rtagid
10423
                 UNION
10424
                 /* Private Views collapsed */
10425
                 SELECT vi.view_id, vi.view_name,
10426
                      TO_NUMBER (NULL) AS pkg_state,
10427
                      TO_NUMBER (NULL) AS deprecated_state,
10428
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10429
                      NULL AS pkg_version, NULL AS dlocked,
10430
                      NULL AS pv_description
10431
                  FROM view_settings vs,
10432
                      view_def vd,
10433
                      views vi,
10434
                      work_in_progress rel,
10435
                      package_versions pv
10436
                  WHERE vs.view_id = vi.view_id
10437
                   AND rel.pv_id = pv.pv_id
10438
                   AND vd.pkg_id = pv.pkg_id
10439
                   AND vd.view_id = vi.view_id
10440
                   AND vi.base_view = 'N'
10441
                   AND rel.rtag_id = rtagid
10442
                   AND vs.user_id = userid
10443
                   AND vi.view_id NOT IN (
10444
                        SELECT *
10445
                          FROM THE
10446
                                (SELECT CAST
10447
                                        (in_list_number
10448
                                               (sviewidshowlist) AS relmgr_number_tab_t
10449
                                        )
10450
                                  FROM DUAL
10451
                                ))
10452
                 UNION
10453
                 /* Private Views expanded */
10454
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10455
 
10456
                      --rel.pkg_state,
10457
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10458
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10459
                      pv.pv_description
10460
                  FROM users usr,
10461
                      view_settings vs,
10462
                      view_def vd,
10463
                      views vi,
10464
                      work_in_progress rel,
10465
                      PACKAGES pkg,
10466
                      package_versions pv
10467
                  WHERE vs.user_id = usr.user_id
10468
                   AND vs.view_id = vi.view_id
10469
                   AND vd.view_id = vi.view_id
10470
                   AND pv.pkg_id = pkg.pkg_id
10471
                   AND rel.pv_id = pv.pv_id
10472
                   AND rel.rtag_id = rtagid
10473
                   AND vd.pkg_id = pkg.pkg_id
10474
                   AND vi.base_view = 'N'
10475
                   AND vi.view_id IN (
10476
                        SELECT *
10477
                          FROM THE
10478
                                (SELECT CAST
10479
                                        (in_list_number
10480
                                               (sviewidshowlist) AS relmgr_number_tab_t
10481
                                        )
10482
                                  FROM DUAL
10483
                                ))
10484
                   AND usr.user_id = userid) ord
10485
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10486
     END IF;
10487
   END;
10488
 
10489
/*-------------------------------------------------------------------------------------------------------*/
10490
   -- DEVI-45275 added the return of the new "operation" column in the recordset.
10491
 
10492
   PROCEDURE get_pending_items (
10493
     viewtype         IN      NUMBER,
10494
     userid           IN      NUMBER,
10495
     rtagid           IN      NUMBER,
10496
     sviewidshowlist  IN      VARCHAR2,
10497
     ntruerecordcount OUT     NUMBER,
10498
     recordset        OUT     typecur
10499
   )
10500
   IS
10501
   BEGIN
10502
     -- Get true record count because views can give false count
10503
     SELECT COUNT (pl.pv_id)
10504
      INTO ntruerecordcount
10505
      FROM planned pl
10506
      WHERE pl.rtag_id = rtagid;
10507
 
10508
     IF viewtype = 1
10509
     THEN
10510
       /*--- GUEST VIEW ---*/
10511
       OPEN recordset FOR
10512
         SELECT   *
10513
            FROM (
10514
                 /* Base Views collapsed */
10515
                 SELECT DISTINCT vi.view_id, vi.view_name,
10516
                             TO_NUMBER (NULL) AS pkg_state,
10517
                             TO_NUMBER (NULL) AS deprecated_state,
10518
                             TO_NUMBER (NULL) AS pv_id,
10519
                             NULL AS pkg_name, NULL AS pkg_version,
10520
                             NULL AS dlocked, NULL AS pv_description,
10521
                             rel.operation
10522
                         FROM planned rel, views vi
10523
                        WHERE rel.view_id = vi.view_id
10524
                          AND rtag_id = rtagid
10525
                          AND rel.view_id NOT IN (
10526
                               SELECT *
10527
                                 FROM THE
10528
                                       (SELECT CAST
10529
                                               (in_list_number
10530
                                                  (sviewidshowlist
10531
                                                  ) AS relmgr_number_tab_t
10532
                                               )
10533
                                         FROM DUAL
10534
                                       ))
10535
                 UNION
10536
                 /* Base Views expanded */
10537
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10538
 
10539
                      --rel.pkg_state,
10540
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10541
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10542
                      pv.pv_description,
10543
                      rel.operation
10544
                  FROM planned rel,
10545
                      PACKAGES pkg,
10546
                      package_versions pv,
10547
                      views vi
10548
                  WHERE pv.pkg_id = pkg.pkg_id
10549
                   AND rel.pv_id = pv.pv_id
10550
                   AND rel.view_id = vi.view_id
10551
                   AND rel.view_id IN (
10552
                        SELECT *
10553
                          FROM THE
10554
                                (SELECT CAST
10555
                                        (in_list_number
10556
                                               (sviewidshowlist) AS relmgr_number_tab_t
10557
                                        )
10558
                                  FROM DUAL
10559
                                ))
10560
                   AND rtag_id = rtagid) ord
10561
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10562
     ELSIF viewtype = 2
10563
     THEN
10564
       /*--- PERSONAL VIEW ---*/
10565
       OPEN recordset FOR
10566
         SELECT   *
10567
            FROM (
10568
                 /* Base Views collapsed */
10569
                 SELECT DISTINCT vi.view_id, vi.view_name,
10570
                             TO_NUMBER (NULL) AS pkg_state,
10571
                             TO_NUMBER (NULL) AS deprecated_state,
10572
                             TO_NUMBER (NULL) AS pv_id,
10573
                             NULL AS pkg_name, NULL AS pkg_version,
10574
                             NULL AS dlocked, NULL AS pv_description,
10575
                             rel.operation
10576
                         FROM planned rel, view_settings vs, views vi
10577
                        WHERE rel.view_id = vi.view_id
10578
                          AND vs.view_id = rel.view_id
10579
                          AND vs.user_id = userid
10580
                          AND rtag_id = rtagid
10581
                          AND rel.view_id NOT IN (
10582
                               SELECT *
10583
                                 FROM THE
10584
                                       (SELECT CAST
10585
                                               (in_list_number
10586
                                                  (sviewidshowlist
10587
                                                  ) AS relmgr_number_tab_t
10588
                                               )
10589
                                         FROM DUAL
10590
                                       ))
10591
                 UNION
10592
                 /* Base Views expanded */
10593
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10594
 
10595
                      --rel.pkg_state,
10596
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10597
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10598
                      pv.pv_description,
10599
                      rel.operation
10600
                  FROM planned rel,
10601
                      PACKAGES pkg,
10602
                      package_versions pv,
10603
                      views vi,
10604
                      view_settings vs
10605
                  WHERE pv.pkg_id = pkg.pkg_id
10606
                   AND rel.pv_id = pv.pv_id
10607
                   AND rel.view_id = vi.view_id
10608
                   AND vs.view_id = vi.view_id
10609
                   AND vs.user_id = userid
10610
                   AND rel.view_id IN (
10611
                        SELECT *
10612
                          FROM THE
10613
                                (SELECT CAST
10614
                                        (in_list_number
10615
                                               (sviewidshowlist) AS relmgr_number_tab_t
10616
                                        )
10617
                                  FROM DUAL
10618
                                ))
10619
                   AND rtag_id = rtagid
10620
                 UNION
10621
                 /* Private Views collapsed */
10622
                 SELECT vi.view_id, vi.view_name,
10623
                      TO_NUMBER (NULL) AS pkg_state,
10624
                      TO_NUMBER (NULL) AS deprecated_state,
10625
                      TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
10626
                      NULL AS pkg_version, NULL AS dlocked,
10627
                      NULL AS pv_description,
10628
                      rel.operation
10629
                  FROM view_settings vs,
10630
                      view_def vd,
10631
                      views vi,
10632
                      planned rel,
10633
                      package_versions pv
10634
                  WHERE vs.view_id = vi.view_id
10635
                   AND rel.pv_id = pv.pv_id
10636
                   AND vd.pkg_id = pv.pkg_id
10637
                   AND vd.view_id = vi.view_id
10638
                   AND vi.base_view = 'N'
10639
                   AND rel.rtag_id = rtagid
10640
                   AND vs.user_id = userid
10641
                   AND vi.view_id NOT IN (
10642
                        SELECT *
10643
                          FROM THE
10644
                                (SELECT CAST
10645
                                        (in_list_number
10646
                                               (sviewidshowlist) AS relmgr_number_tab_t
10647
                                        )
10648
                                  FROM DUAL
10649
                                ))
10650
                 UNION
10651
                 /* Private Views expanded */
10652
                 SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
10653
 
10654
                      --rel.pkg_state,
10655
                      TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
10656
                      pkg.pkg_name, pv.pkg_version, pv.dlocked,
10657
                      pv.pv_description,
10658
                      rel.operation
10659
                  FROM users usr,
10660
                      view_settings vs,
10661
                      view_def vd,
10662
                      views vi,
10663
                      planned rel,
10664
                      PACKAGES pkg,
10665
                      package_versions pv
10666
                  WHERE vs.user_id = usr.user_id
10667
                   AND vs.view_id = vi.view_id
10668
                   AND vd.view_id = vi.view_id
10669
                   AND pv.pkg_id = pkg.pkg_id
10670
                   AND rel.pv_id = pv.pv_id
10671
                   AND rel.rtag_id = rtagid
10672
                   AND vd.pkg_id = pkg.pkg_id
10673
                   AND vi.base_view = 'N'
10674
                   AND vi.view_id IN (
10675
                        SELECT *
10676
                          FROM THE
10677
                                (SELECT CAST
10678
                                        (in_list_number
10679
                                               (sviewidshowlist) AS relmgr_number_tab_t
10680
                                        )
10681
                                  FROM DUAL
10682
                                ))
10683
                   AND usr.user_id = userid) ord
10684
         ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
10685
     END IF;
10686
   END;
10687
 
10688
/*-------------------------------------------------------------------------------------------------------*/
10689
   PROCEDURE get_view_content (
10690
     rtagid     IN      NUMBER,
10691
     viewid     IN      NUMBER,
10692
     recordset OUT     typecur
10693
   )
10694
   IS
10695
     isbaseview   CHAR (1);
10696
   BEGIN
10697
     -- Check if the view is BASE VIEW
10698
     SELECT vi.base_view
10699
      INTO isbaseview
10700
      FROM views vi
10701
      WHERE vi.view_id = viewid;
10702
 
10703
     IF (isbaseview = 'Y')
10704
     THEN
10705
       -- Get Base view content
10706
       OPEN recordset FOR
10707
         SELECT   DECODE (rel.pkg_state,
10708
                      NULL, 0,
10709
                      rel.pkg_state
10710
                     ) AS pkg_state,
10711
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10712
                pv.pkg_version, pv.dlocked, pv.pv_description,
10713
                pv.build_type,
10714
                rel.operation
10715
            FROM environment_view rel, PACKAGES pkg, package_versions pv
10716
            WHERE pv.pkg_id = pkg.pkg_id
10717
             AND rel.pv_id = pv.pv_id
10718
             AND rel.view_id = viewid
10719
             AND rel.rtag_id = rtagid
10720
         ORDER BY UPPER (pkg.pkg_name);
10721
     ELSE
10722
       -- Get non base view content
10723
       OPEN recordset FOR
10724
         SELECT   DECODE (rel.pkg_state,
10725
                      NULL, 0,
10726
                      rel.pkg_state
10727
                     ) AS pkg_state,
10728
                rel.deprecated_state, pv.pv_id, pkg.pkg_name,
10729
                pv.pkg_version, pv.dlocked, pv.pv_description,
10730
                pv.build_type,
10731
                rel.operation
10732
            FROM environment_view rel,
10733
                PACKAGES pkg,
10734
                package_versions pv,
10735
                view_def vd
10736
            WHERE pv.pkg_id = pkg.pkg_id
10737
             AND rel.pv_id = pv.pv_id
10738
             AND rel.rtag_id = rtagid
10739
             AND vd.view_id = viewid
10740
             AND vd.pkg_id = pv.pkg_id
10741
         ORDER BY UPPER (pkg.pkg_name);
10742
     END IF;
10743
   END;
10744
 
10745
/*-------------------------------------------------------------------------------------------------------*/
10746
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
10747
     RETURN NUMBER
10748
   IS
10749
     envtab           NUMBER;
10750
     returnvalue      NUMBER;
10751
     return_not_found NUMBER := -1;
10752
   BEGIN
10753
     envtab := get_package_area (pvid, rtagid);
10754
 
10755
     IF envtab = 0
10756
     THEN
10757
       -- WORK IN PROGRESS --
10758
       returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
10759
     ELSIF envtab = 1
10760
     THEN
10761
       -- PENDING --
10762
       returnvalue := pk_planned.get_package_view (pvid, rtagid);
10763
     ELSIF envtab = 2
10764
     THEN
10765
       -- RELEASED --
10766
       returnvalue := pk_release.get_package_view (pvid, rtagid);
10767
     ELSE
10768
       -- This may be a Patch not located anywhere but unlocked
10769
       returnvalue := return_not_found;
10770
     END IF;
10771
 
10772
     RETURN returnvalue;
10773
   END;
10774
 
10775
/*-------------------------------------------------------------------------------------------------------*/
10776
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
10777
   IS
10778
     viewid        NUMBER;
10779
     envtab        NUMBER;
10780
     ispatch       CHAR (1) := NULL;
10781
     buildtype     CHAR (1) := NULL;
10782
   BEGIN
10783
     -- Check if package is patch
10784
     SELECT pv.is_patch, pv.build_type
10785
      INTO ispatch, buildtype
10786
      FROM package_versions pv
10787
      WHERE pv.pv_id = pvid;
10788
 
10789
     -- Get ViewId
10790
     viewid := get_package_view (pvid, rtagid);
10791
     -- Remove from current area
10792
     envtab := pk_environment.get_package_area (pvid, rtagid);
10793
 
10794
     -- Make sure that package was in work-in-progress or pending before makeing it release
10795
     -- Exclude patches, ripple builds
10796
     IF (envtab < 0)
10797
     THEN
10798
       -- Not found in work-in-progress or pending
10799
       IF (ispatch IS NULL) AND (buildtype = 'M')
10800
       THEN
10801
         raise_application_error (-20000,
10802
                            'This package cannot be released here.'
10803
                           );
10804
       END IF;
10805
     END IF;
10806
 
10807
     -- Log
10808
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10809
 
10810
     IF envtab = 0
10811
     THEN
10812
       -- WORK IN PROGRESS --
10813
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
10814
     ELSIF envtab = 1
10815
     THEN
10816
       -- PENDING --
10817
       pk_planned.remove_package (pvid, rtagid, userid);
10818
     END IF;
10819
 
10820
     -- Change package state
10821
     pk_package.change_state (pvid, 'Y', userid);
10822
 
10823
     -- Make sure it is valid BASE VIEW
10824
     IF viewid < 1
10825
     THEN
10826
       viewid := 7;                     -- This is default base view
10827
     END IF;
10828
 
10829
     IF (ispatch IS NULL)
10830
     THEN
10831
       -- Add package to new area
10832
       pk_release.add_package (pvid, viewid, rtagid, userid);
10833
     END IF;
10834
 
10835
     -- Now do post Release Actions
10836
     pk_release.run_post_actions (pvid, rtagid);
10837
 
10838
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10839
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10840
     clean_do_not_ripple(rtagid);
10841
     clean_advisory_ripple(rtagid);
10842
 
10843
     -- Log
10844
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
10845
   END;
10846
 
10847
/*-------------------------------------------------------------------------------------------------------*/
10848
   PROCEDURE auto_make_release (
10849
     pvid          IN   NUMBER,
10850
     rtagid        IN   NUMBER,
10851
     userid        IN   NUMBER,
10852
     vext          IN   package_versions.v_ext%TYPE,
10853
     ssv_ext       IN   package_versions.v_ext%TYPE,
10854
     clonefrompvid IN   NUMBER
10855
   )
10856
   IS
10857
     viewid        NUMBER;
10858
     envtab        NUMBER;
10859
     ispatch       CHAR (1) := NULL;
10860
     buildtype      CHAR (1) := NULL;
10861
   BEGIN
10862
     -- Check if package is patch
10863
     SELECT pv.is_patch, pv.build_type
10864
      INTO ispatch, buildtype
10865
      FROM package_versions pv
10866
      WHERE pv.pv_id = pvid;
10867
 
10868
     IF vext <> ssv_ext
10869
     THEN
10870
       -- Get ViewId
10871
       viewid := get_package_view (clonefrompvid, rtagid);
10872
       -- Remove from current area
10873
       envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
10874
     ELSE
10875
       -- Get ViewId
10876
       viewid := get_package_view (pvid, rtagid);
10877
       -- Remove from current area
10878
       envtab := pk_environment.get_package_area (pvid, rtagid);
10879
     END IF;
10880
 
10881
     -- Make sure that package was in work-in-progress or pending before makeing it release
10882
     -- Exclude patches, ripple builds
10883
     IF (envtab < 0)
10884
     THEN
10885
       -- Not found in work-in-progress or pending
10886
       IF (ispatch IS NULL) AND (buildtype = 'M')
10887
       THEN
10888
         raise_application_error (-20000,
10889
                            'This package cannot be released here.'
10890
                           );
10891
       END IF;
10892
     END IF;
10893
 
10894
     -- Log
10895
     log_action (pvid, 'action', userid, 'Start of Make Package Release...');
10896
 
10897
     IF vext <> ssv_ext
10898
     THEN
10899
       IF envtab = 0
10900
       THEN
10901
         -- WORK IN PROGRESS --
10902
         pk_work_in_progress.remove_package (clonefrompvid, rtagid,
10903
                                    userid);
10904
       ELSIF envtab = 1
10905
       THEN
10906
         -- PENDING --
10907
         pk_planned.remove_package (clonefrompvid, rtagid, userid);
10908
       ELSIF envtab = 2
10909
       THEN
10910
         -- RELEASED --
10911
         pk_release.remove_package (clonefrompvid, rtagid, userid);
10912
       END IF;
10913
     ELSE
10914
       IF envtab = 0
10915
       THEN
10916
         -- WORK IN PROGRESS --
10917
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
10918
       ELSIF envtab = 1
10919
       THEN
10920
         -- PENDING --
10921
         pk_planned.remove_package (pvid, rtagid, userid);
10922
       END IF;
10923
     END IF;
10924
 
10925
     -- Change package state
10926
     pk_package.change_state (pvid, 'Y', userid);
10927
 
10928
     -- Make sure it is valid BASE VIEW
10929
     IF viewid < 1
10930
     THEN
10931
       viewid := 7;                     -- This is default base view
10932
     END IF;
10933
 
10934
     IF (ispatch IS NULL)
10935
     THEN
10936
       -- Add package to new area
10937
       pk_release.add_package (pvid, viewid, rtagid, userid);
10938
     END IF;
10939
 
10940
     -- Now do post Release Actions
10941
     pk_release.run_post_actions (pvid, rtagid);
10942
     -- Now update the Dash_Board Table (DEPRECATED)
10943
     pk_rmapi.update_dash_board (rtagid);
10944
 
10945
     -- The release has changed and there may now be invalid rtag_id/pv_id combinations in
10946
     -- the DO_NOT_RIPPLE and ADVISORY_RIPPLE Tables so perform a clean-up operation upon them.
10947
     clean_do_not_ripple(rtagid);
10948
     clean_advisory_ripple(rtagid);
10949
 
10950
     -- Log
10951
     log_action (pvid, 'action', userid, 'End of Make Package Release...');
10952
   END;
10953
 
10954
/*-------------------------------------------------------------------------------------------------------*/
10955
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
10956
   IS
10957
     viewid   NUMBER;
10958
     envtab   NUMBER;
10959
   BEGIN
10960
     -- Get ViewId
10961
     --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
10962
     viewid := get_package_view (pvid, rtagid);
10963
     -- Remove from current area
10964
     envtab := pk_environment.get_package_area (pvid, rtagid);
10965
     -- Log
10966
     log_action (pvid,
10967
              'action',
10968
              userid,
10969
              'Start of Make Package UnRelease...'
10970
             );
10971
 
10972
     IF envtab = 2
10973
     THEN
10974
       -- RELEASE AREA --
10975
       pk_release.remove_package (pvid, rtagid, userid);
10976
     ELSIF envtab = 1
10977
     THEN
10978
       -- PENDING --
10979
       pk_planned.remove_package (pvid, rtagid, userid);
10980
     END IF;
10981
 
10982
     -- Change package state
10983
     pk_package.change_state (pvid, 'N', userid);
10984
 
10985
     -- Make sure it is valid BASE VIEW
10986
     IF viewid < 1
10987
     THEN
10988
       viewid := 7;                     -- This is default base view
10989
     END IF;
10990
 
10991
     -- Add package to new area
10992
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
10993
     -- Now do post Release Actions
10994
     pk_release.run_post_actions (pvid, rtagid);
10995
     -- Log
10996
     log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
10997
   END;
10998
 
10999
/*-------------------------------------------------------------------------------------------------------*/
11000
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11001
   IS
11002
     viewid     NUMBER;
11003
     ispatch    CHAR (1) := NULL;
11004
     buildtype  CHAR (1) := NULL;
11005
   BEGIN
11006
     -- Check if package is patch
11007
     SELECT pv.is_patch, pv.build_type
11008
      INTO ispatch, buildtype
11009
      FROM package_versions pv
11010
      WHERE pv.pv_id = pvid;
11011
 
11012
     -- Get ViewId
11013
     viewid := get_package_view (pvid, rtagid);
11014
     --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
11015
 
11016
     -- Log
11017
     log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
11018
 
11019
     IF (ispatch IS NULL)
11020
     THEN
11021
       -- Remove from current area
11022
       pk_work_in_progress.remove_package (pvid, rtagid, userid);
11023
       -- Change package state
11024
       pk_package.change_state (pvid, 'P', userid);
11025
       -- Add package to new area
11026
       pk_planned.add_package (pvid, viewid, rtagid, userid);
11027
     END IF;
11028
 
11029
     -- Log
11030
     log_action (pvid, 'action', userid, 'End of Make Package Pending...');
11031
   END;
11032
 
11033
/*-------------------------------------------------------------------------------------------------------*/
11034
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11035
   IS
11036
   BEGIN
11037
     -- Log
11038
     log_action (pvid,
11039
                 'action',
11040
                 userid,
11041
                 'Start of Package Pending Approval...'
11042
                 );
11043
     -- Change package state
11044
     pk_package.change_state (pvid, 'A', userid);
11045
     -- Log
11046
     log_action (pvid, 'action', userid,
11047
                 'End of Package Pending Approval...');
11048
   END;
11049
 
11050
/*-------------------------------------------------------------------------------------------------------*/
11051
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
11052
   IS
11053
     viewid   NUMBER;
11054
     operation CHAR;
11055
   BEGIN
11056
     -- Get ViewId
11057
     viewid := get_package_view (pvid, rtagid);
11058
     -- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
11059
 
11060
     -- DEVI-45275
11061
     -- If the package version is an official version that is to be rejected from a merge operation
11062
     -- then find out in order to prevent it being added back to work-in-progress table . This will
11063
     -- be denoted by the operation field in the planned table being A or S
11064
     operation := ' ';
11065
     SELECT
11066
     (CASE WHEN pl.operation IS NOT NULL THEN pl.operation ELSE ' ' END) INTO operation
11067
     FROM planned pl
11068
     WHERE pl.PV_ID = pvid
11069
     AND pl.RTAG_ID = rtagid;
11070
 
11071
     -- Log
11072
     log_action (pvid, 'action', userid, 'Start of Reject Package...');
11073
     -- Remove from current area
11074
     pk_planned.remove_package (pvid, rtagid, userid);
11075
 
11076
     -- DEVI-45275 - Prevent merge candidate from being added back to work-in-progress table .
11077
     IF operation <> 'A' AND operation <> 'S'
11078
     THEN
11079
     -- Change package state
11080
     pk_package.change_state (pvid, 'R', userid);
11081
     -- Add package to new area
11082
     pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
11083
     ELSE
11084
      log_action (pvid, 'action', userid, 'Rejected Package Merge');
11085
     END IF;
11086
     -- Log
11087
     log_action (pvid, 'action', userid, 'End of Reject Package...');
11088
   END;
11089
 
11090
/*-------------------------------------------------------------------------------------------------------*/
11091
   PROCEDURE change_package_view (
11092
     pvid       IN   NUMBER,
11093
     rtagid     IN   NUMBER,
11094
     newviewid  IN   NUMBER
11095
   )
11096
   IS
11097
     envtab   NUMBER;
11098
   BEGIN
11099
     envtab := pk_environment.get_package_area (pvid, rtagid);
11100
 
11101
     IF envtab = 0
11102
     THEN
11103
       -- WORK IN PROGRESS --
11104
       pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
11105
     ELSIF envtab = 1
11106
     THEN
11107
       -- PENDING --
11108
       pk_planned.change_package_view (pvid, rtagid, newviewid);
11109
     ELSIF envtab = 2
11110
     THEN
11111
       -- RELEASED --
11112
       pk_release.change_package_view (pvid, rtagid, newviewid);
11113
     END IF;
11114
   END;
11115
 
11116
/*-------------------------------------------------------------------------------------------------------*/
11117
   PROCEDURE find_package (
11118
     skeyword     IN      VARCHAR2,
11119
     nrtagid      IN      NUMBER,
11120
     nsearcharea  IN      NUMBER,
11121
     recordset    OUT     typecur
11122
   )
11123
   IS
11124
   BEGIN
11125
     IF nsearcharea = 0
11126
     THEN
11127
       /* Search Work In Progress */
11128
       OPEN recordset FOR
11129
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11130
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11131
                pv.modified_stamp, usr.full_name, usr.user_email
11132
           FROM views vi,
11133
                work_in_progress rc,
11134
                PACKAGES pkg,
11135
                package_versions pv,
11136
                users usr
11137
          WHERE rc.view_id = vi.view_id
11138
            AND rc.pv_id = pv.pv_id
11139
            AND pkg.pkg_id = pv.pkg_id
11140
            AND pv.modifier_id = usr.user_id
11141
            AND rc.rtag_id = nrtagid
11142
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11143
       ORDER BY UPPER (pkg.pkg_name);
11144
     ELSIF nsearcharea = 1
11145
     THEN
11146
       /* Search Pending */
11147
       OPEN recordset FOR
11148
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11149
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11150
                pv.modified_stamp, usr.full_name, usr.user_email
11151
           FROM views vi,
11152
                planned rc,
11153
                PACKAGES pkg,
11154
                package_versions pv,
11155
                users usr
11156
          WHERE rc.view_id = vi.view_id
11157
            AND rc.pv_id = pv.pv_id
11158
            AND pkg.pkg_id = pv.pkg_id
11159
            AND pv.modifier_id = usr.user_id
11160
            AND rc.rtag_id = nrtagid
11161
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11162
       ORDER BY UPPER (pkg.pkg_name);
11163
     ELSIF nsearcharea = 2
11164
     THEN
11165
       /* Search Released */
11166
       OPEN recordset FOR
11167
         SELECT nsearcharea AS env_area, vi.view_name, pv.dlocked,
11168
                pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
11169
                pv.modified_stamp, usr.full_name, usr.user_email
11170
           FROM views vi,
11171
                release_content rc,
11172
                PACKAGES pkg,
11173
                package_versions pv,
11174
                users usr
11175
          WHERE rc.base_view_id = vi.view_id
11176
            AND rc.pv_id = pv.pv_id
11177
            AND pkg.pkg_id = pv.pkg_id
11178
            AND pv.modifier_id = usr.user_id
11179
            AND rc.rtag_id = nrtagid
11180
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11181
         ORDER BY UPPER (pkg.pkg_name);
11182
     ELSIF nsearcharea = 3
11183
     THEN
11184
       /* Search ALL */
11185
       OPEN recordset FOR
11186
         SELECT rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
11187
                pv.pv_id, pv.pkg_version, pv.comments,
11188
                pv.modified_stamp, usr.full_name, usr.user_email
11189
           FROM views vi,
11190
                environment_view rc,
11191
                PACKAGES pkg,
11192
                package_versions pv,
11193
                users usr
11194
          WHERE rc.view_id = vi.view_id
11195
            AND rc.pv_id = pv.pv_id
11196
            AND pkg.pkg_id = pv.pkg_id
11197
            AND pv.modifier_id = usr.user_id
11198
            AND rc.rtag_id = nrtagid
11199
            AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
11200
         ORDER BY UPPER (pkg.pkg_name);
11201
     END IF;
11202
   END;
11203
 
11204
/*-------------------------------------------------------------------------------------------------------*/
11205
   PROCEDURE find_file (
11206
     skeyword     IN      VARCHAR2,
11207
     nrtagid      IN      NUMBER,
11208
     nsearcharea  IN      NUMBER,
11209
     npagesize    IN      NUMBER,
11210
     recordset    OUT     typecur
11211
   )
11212
   IS
11213
   BEGIN
11214
     IF nsearcharea = 0
11215
     THEN
11216
       /* Search Work In Progress */
11217
       OPEN recordset FOR
11218
         SELECT   qry.*
11219
            FROM (
11220
                 /* File search on Packages */
11221
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11222
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11223
                   FROM work_in_progress rc,
11224
                        PACKAGES pkg,
11225
                        package_versions pv,
11226
                        release_components art
11227
                  WHERE rc.pv_id = art.pv_id
11228
                    AND pv.pkg_id = pkg.pkg_id
11229
                    AND rc.pv_id = pv.pv_id
11230
                    AND rc.rtag_id = nrtagid
11231
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11232
                 UNION ALL
11233
                 /* File search on Products */
11234
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11235
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11236
                   FROM work_in_progress rc,
11237
                        PACKAGES pkg,
11238
                        package_versions pv,
11239
                        product_components art
11240
                  WHERE rc.pv_id = art.pv_id
11241
                    AND pv.pkg_id = pkg.pkg_id
11242
                    AND rc.pv_id = pv.pv_id
11243
                    AND rc.rtag_id = nrtagid
11244
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11245
            WHERE ROWNUM <= npagesize
11246
         ORDER BY UPPER (qry.pkg_name);
11247
     ELSIF nsearcharea = 1
11248
     THEN
11249
       /* Search Pending */
11250
       OPEN recordset FOR
11251
         SELECT   qry.*
11252
            FROM (
11253
                 /* File search on Packages */
11254
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11255
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11256
                   FROM planned rc,
11257
                        PACKAGES pkg,
11258
                        package_versions pv,
11259
                        release_components art
11260
                  WHERE rc.pv_id = art.pv_id
11261
                    AND pv.pkg_id = pkg.pkg_id
11262
                    AND rc.pv_id = pv.pv_id
11263
                    AND rc.rtag_id = nrtagid
11264
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11265
                 UNION ALL
11266
                 /* File search on Products */
11267
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11268
                        pv.pv_id, pv.pkg_version, art.crc_cksum
11269
                   FROM planned rc,
11270
                        PACKAGES pkg,
11271
                        package_versions pv,
11272
                        product_components art
11273
                  WHERE rc.pv_id = art.pv_id
11274
                    AND pv.pkg_id = pkg.pkg_id
11275
                    AND rc.pv_id = pv.pv_id
11276
                    AND rc.rtag_id = nrtagid
11277
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11278
            WHERE ROWNUM <= npagesize
11279
         ORDER BY UPPER (qry.pkg_name);
11280
     ELSIF nsearcharea = 2
11281
     THEN
11282
       /* Search Released */
11283
       OPEN recordset FOR
11284
         SELECT   qry.*
11285
            FROM (
11286
                 /* File search on Packages */
11287
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11288
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11289
                        NULL AS patch_id
11290
                   FROM release_content rc,
11291
                        PACKAGES pkg,
11292
                        package_versions pv,
11293
                        release_components art
11294
                  WHERE rc.pv_id = art.pv_id
11295
                    AND pv.pkg_id = pkg.pkg_id
11296
                    AND rc.pv_id = pv.pv_id
11297
                    AND rc.rtag_id = nrtagid
11298
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11299
                 UNION ALL
11300
                 /* File search on Products */
11301
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11302
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11303
                        NULL AS patch_id
11304
                   FROM release_content rc,
11305
                        PACKAGES pkg,
11306
                        package_versions pv,
11307
                        product_components art
11308
                  WHERE rc.pv_id = art.pv_id
11309
                    AND pv.pkg_id = pkg.pkg_id
11310
                    AND rc.pv_id = pv.pv_id
11311
                    AND rc.rtag_id = nrtagid
11312
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11313
                 UNION ALL
11314
                 /* File search on Patches */
11315
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11316
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11317
                        DECODE (art.file_path,
11318
                                NULL, pp.patch_id,
11319
                                NULL
11320
                                ) AS patch_id
11321
                   FROM release_content rc,
11322
                        PACKAGES pkg,
11323
                        package_versions pv,
11324
                        release_components art,
11325
                        package_patches pp
11326
                  WHERE pv.pv_id = pp.pv_id
11327
                    AND pv.pkg_id = pkg.pkg_id
11328
                    AND rc.rtag_id = nrtagid
11329
                    AND art.pv_id = pp.patch_id
11330
                    AND rc.pv_id = pp.pv_id
11331
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11332
            WHERE ROWNUM <= npagesize
11333
         ORDER BY UPPER (qry.pkg_name);
11334
     ELSIF nsearcharea = 3
11335
     THEN
11336
       /* Search ALL */
11337
       OPEN recordset FOR
11338
         SELECT   qry.*
11339
            FROM (
11340
                 /* File search on Packages */
11341
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11342
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11343
                        NULL AS patch_id
11344
                   FROM environment_view rc,
11345
                        PACKAGES pkg,
11346
                        package_versions pv,
11347
                        release_components art
11348
                  WHERE rc.pv_id = art.pv_id
11349
                    AND pv.pkg_id = pkg.pkg_id
11350
                    AND rc.pv_id = pv.pv_id
11351
                    AND rc.rtag_id = nrtagid
11352
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11353
                 UNION ALL
11354
                 /* File search on Products */
11355
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11356
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11357
                        NULL AS patch_id
11358
                   FROM environment_view rc,
11359
                        PACKAGES pkg,
11360
                        package_versions pv,
11361
                        product_components art
11362
                  WHERE rc.pv_id = art.pv_id
11363
                    AND pv.pkg_id = pkg.pkg_id
11364
                    AND rc.pv_id = pv.pv_id
11365
                    AND rc.rtag_id = nrtagid
11366
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)
11367
                 UNION ALL
11368
                 /* File search on Patches */
11369
                 SELECT art.file_name, art.file_path, pkg.pkg_name,
11370
                        pv.pv_id, pv.pkg_version, art.crc_cksum,
11371
                        DECODE (art.file_path,
11372
                                NULL, pp.patch_id,
11373
                                NULL
11374
                               ) AS patch_id
11375
                   FROM release_content rc,
11376
                        PACKAGES pkg,
11377
                        package_versions pv,
11378
                        release_components art,
11379
                        package_patches pp
11380
                  WHERE pv.pv_id = pp.pv_id
11381
                    AND pv.pkg_id = pkg.pkg_id
11382
                    AND rc.rtag_id = nrtagid
11383
                    AND art.pv_id = pp.patch_id
11384
                    AND rc.pv_id = pp.pv_id
11385
                    AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
11386
            WHERE ROWNUM <= npagesize
11387
         ORDER BY UPPER (qry.pkg_name);
11388
     END IF;
11389
   END;
11390
 
11391
/*-------------------------------------------------------------------------------------------------------*/
11392
   PROCEDURE get_prodrelease_items (
11393
     rtagid           IN      NUMBER,
11394
     ntruerecordcount OUT     NUMBER,
11395
     recordset        OUT     typecur
11396
   )
11397
   IS
11398
   BEGIN
11399
     -- Get true record count n the number of integration products
11400
     SELECT COUNT (rc.pv_id)
11401
      INTO ntruerecordcount
11402
      FROM release_content rc
11403
      WHERE rc.rtag_id = rtagid;
11404
 
11405
     OPEN recordset FOR
11406
       SELECT vi.view_id, vi.view_name, rel.pkg_state,   --rel.pkg_state,
11407
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11408
              pv.pkg_version, pv.dlocked, pv.pv_description
11409
         FROM release_content rel,
11410
              PACKAGES pkg,
11411
              package_versions pv,
11412
              views vi
11413
        WHERE pv.pkg_id = pkg.pkg_id
11414
          AND rel.pv_id = pv.pv_id
11415
          AND rel.base_view_id = vi.view_id
11416
          AND pv.is_deployable = 'Y'
11417
          AND rtag_id = rtagid
11418
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11419
                                 FROM deployment_manager.os_contents)
11420
          AND rel.product_state IS NULL
11421
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11422
   END;
11423
 
11424
/*-------------------------------------------------------------------------------------------------------*/
11425
   PROCEDURE get_integration_items (
11426
     rtagid           IN      NUMBER,
11427
     ntruerecordcount OUT     NUMBER,
11428
     recordset        OUT     typecur
11429
   )
11430
   IS
11431
   BEGIN
11432
     -- Get true record count n the number of integration products
11433
     SELECT COUNT (rc.pv_id)
11434
      INTO ntruerecordcount
11435
      FROM release_content rc
11436
      WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
11437
 
11438
     OPEN recordset FOR
11439
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11440
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11441
              pv.pkg_version, pv.dlocked, pv.pv_description
11442
         FROM release_content rel,
11443
              PACKAGES pkg,
11444
              package_versions pv,
11445
              views vi
11446
        WHERE pv.pkg_id = pkg.pkg_id
11447
          AND rel.pv_id = pv.pv_id
11448
          AND rel.base_view_id = vi.view_id
11449
          AND pv.is_deployable = 'Y'
11450
          AND rtag_id = rtagid
11451
          AND rel.product_state IN (1, 5)
11452
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11453
   END;
11454
 
11455
/*-------------------------------------------------------------------------------------------------------*/
11456
   PROCEDURE get_test_items (
11457
     rtagid           IN      NUMBER,
11458
     ntruerecordcount OUT     NUMBER,
11459
     recordset        OUT     typecur
11460
   )
11461
   IS
11462
   BEGIN
11463
     -- Get true record count n the number of test products
11464
     SELECT COUNT (rc.pv_id)
11465
      INTO ntruerecordcount
11466
      FROM release_content rc
11467
      WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
11468
 
11469
     OPEN recordset FOR
11470
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11471
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11472
              pv.pkg_version, pv.dlocked, pv.pv_description
11473
         FROM release_content rel,
11474
              PACKAGES pkg,
11475
              package_versions pv,
11476
              views vi
11477
        WHERE pv.pkg_id = pkg.pkg_id
11478
          AND rel.pv_id = pv.pv_id
11479
          AND rel.base_view_id = vi.view_id
11480
          AND pv.is_deployable = 'Y'
11481
          AND rtag_id = rtagid
11482
          AND rel.product_state = 2
11483
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11484
   END;
11485
 
11486
/*-------------------------------------------------------------------------------------------------------*/
11487
   PROCEDURE get_deploy_items (
11488
     rtagid           IN      NUMBER,
11489
     ntruerecordcount OUT     NUMBER,
11490
     recordset        OUT     typecur
11491
   )
11492
   IS
11493
   BEGIN
11494
     -- Get true record count n the number of deploy products
11495
     SELECT COUNT (rc.pv_id)
11496
      INTO ntruerecordcount
11497
      FROM release_content rc
11498
      WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
11499
 
11500
     OPEN recordset FOR
11501
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11502
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11503
              pv.pkg_version, pv.dlocked, pv.pv_description
11504
         FROM release_content rel,
11505
              PACKAGES pkg,
11506
              package_versions pv,
11507
              views vi
11508
        WHERE pv.pkg_id = pkg.pkg_id
11509
          AND rel.pv_id = pv.pv_id
11510
          AND rel.base_view_id = vi.view_id
11511
          AND pv.is_deployable = 'Y'
11512
          AND rtag_id = rtagid
11513
          AND rel.product_state IN (3, 5)
11514
          AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
11515
                                 FROM deployment_manager.os_contents)
11516
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11517
   END;
11518
 
11519
/*-------------------------------------------------------------------------------------------------------*/
11520
   PROCEDURE get_reject_items (
11521
     rtagid           IN      NUMBER,
11522
     ntruerecordcount OUT     NUMBER,
11523
     recordset        OUT     typecur
11524
   )
11525
   IS
11526
   BEGIN
11527
     -- Get true record count n the number of reject products
11528
     SELECT COUNT (rc.pv_id)
11529
       INTO ntruerecordcount
11530
       FROM release_content rc
11531
      WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
11532
 
11533
     OPEN recordset FOR
11534
       SELECT vi.view_id, vi.view_name, rel.pkg_state,
11535
              rel.deprecated_state, pv.pv_id, pkg.pkg_name,
11536
              pv.pkg_version, pv.dlocked, pv.pv_description
11537
         FROM release_content rel,
11538
              PACKAGES pkg,
11539
              package_versions pv,
11540
              views vi
11541
        WHERE pv.pkg_id = pkg.pkg_id
11542
          AND rel.pv_id = pv.pv_id
11543
          AND rel.base_view_id = vi.view_id
11544
          AND pv.is_deployable = 'Y'
11545
          AND rtag_id = rtagid
11546
          AND rel.product_state = 4
11547
     ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
11548
   END;
11549
/*-------------------------------------------------------------------------------------------------------*/
11550
   -- DEVI-45275 - this procedure performs the merge of an existing package version in the planned table
11551
   -- to the release_content table.
11552
 
11553
  PROCEDURE approve_merge (
11554
   PvId    IN NUMBER,
11555
   RtagId  IN NUMBER,
11556
   UserId  IN NUMBER
11557
  )
11558
  IS
11559
   viewid        NUMBER;
11560
   envtab        NUMBER;
11561
   oper         CHAR;
11562
  BEGIN
11563
      -- Get ViewId
11564
     viewid := get_package_view (pvid, rtagid);
11565
 
11566
     -- Get the view tab
11567
     envtab := pk_environment.get_package_area (pvid, rtagid);
11568
 
11569
     -- Make sure that package was in pending before merging it to released
11570
     IF (envtab <> 1)
11571
     THEN
11572
       -- Not found in pending
11573
       raise_application_error (-20000,
11574
                          'This package cannot be released here.'
11575
                         );
11576
     END IF;
11577
 
11578
     -- Log
11579
     log_action (pvid, 'action', userid, 'Start of Package Merge...');
11580
 
11581
     -- Get the planned operation type A=Add, S=Subtract
11582
     SELECT ev.operation INTO oper
11583
       FROM environment_view ev
11584
      WHERE ev.rtag_id = RtagId
11585
        AND ev.pv_id = PvId
11586
        AND (ev.operation = 'A' OR ev.operation = 'S');
11587
 
11588
     -- Remove from Pending
11589
     pk_planned.remove_package (PvId, RtagId, UserId);
11590
 
11591
     -- Either add to the release, or remove from the release as the operation commands
11592
     IF oper = 'A'
11593
     THEN
11594
       pk_release.add_package(PvId, viewId, RtagId, UserId);
11595
 
11596
     ELSIF oper = 'S'
11597
     THEN
11598
       pk_release.remove_package(PvId, RtagId, UserId);
11599
 
11600
       -- Delete old package's pegging info
11601
       DELETE FROM PEGGED_VERSIONS pegv WHERE pegv.RTAG_ID = RtagId AND pegv.PV_ID = PvId;
11602
 
11603
       -- Delete old package's advisory ripple info
11604
       DELETE FROM ADVISORY_RIPPLE avr WHERE avr.RTAG_ID = RtagId AND avr.PV_ID = PvId;
11605
     END IF;
11606
 
11607
     touch_release(RtagId);
11608
 
11609
     -- Log
11610
     log_action (pvid, 'action', userid, 'End of Package Merge...');
11611
  END;
11612
/*-------------------------------------------------------------------------------------------------------*/
11613
END pk_environment;
1374 dpurdie 11614
/
11615
--------------------------------------------------------
11616
--  DDL for Package Body PK_WORK_IN_PROGRESS
11617
--------------------------------------------------------
1373 dpurdie 11618
 
11619
  CREATE OR REPLACE PACKAGE BODY "PK_WORK_IN_PROGRESS" IS
11620
 
11621
/*
11622
------------------------------
11623
||  Last Modified:  S.Vukovic
11624
||  Modified Date:  2/May/2005
11625
||  Body Version:   1.0
11626
------------------------------
11627
*/
11628
 
11629
 
11630
/*-------------------------------------------------------------------------------------------------------*/
11631
PROCEDURE ADD_PACKAGE ( newPvId IN NUMBER, ViewId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11632
 
11633
	oldPvId NUMBER;
11634
	ReleaseLocation VARCHAR2(4000);
11635
	sLocation VARCHAR2(4000) := NULL;
11636
 
11637
 
11638
BEGIN
11639
	/*--------------- Business Rules Here -------------------*/
11640
	/*-------------------------------------------------------*/
11641
 
11642
	BEGIN
11643
		-- Check if Exists in "Work in progress" anywhere in the world, except "Closed mode" releases
11644
		SELECT proj.PROJ_NAME ||' > '|| rt.RTAG_NAME  INTO sLocation
11645
		  FROM WORK_IN_PROGRESS wip,
11646
		  	   RELEASE_TAGS rt,
11647
			   PROJECTS proj
11648
		 WHERE wip.PV_ID = newPvId
11649
		   AND wip.RTAG_ID = rt.RTAG_ID
11650
		   AND rt.OFFICIAL != 'Y'
11651
		   AND rt.PROJ_ID = proj.PROJ_ID;
11652
 
11653
		EXCEPTION
11654
	    	WHEN NO_DATA_FOUND THEN
11655
	       		sLocation := NULL;
11656
 
11657
	END;	   	   
11658
 
11659
 
11660
 
11661
	IF (sLocation IS NULL)  THEN
11662
 
11663
		-- Add to "Work in progress"
11664
		INSERT INTO WORK_IN_PROGRESS ( RTAG_ID, PV_ID, VIEW_ID )
11665
		VALUES( RtagId, newPvId, ViewId );
11666
 
11667
 
11668
	    /* LOG ACTION */
11669
		SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11670
		  FROM PROJECTS proj,
11671
		  	   RELEASE_TAGS rt
11672
		 WHERE rt.PROJ_ID = proj.PROJ_ID
11673
		   AND rt.RTAG_ID = RtagId;
11674
 
11675
		Log_Action ( newPvId, 'work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11676
 
11677
	ELSE
11678
 
11679
		RAISE_APPLICATION_ERROR (-20000, 'This version is already in Work-In-Progress Area at '|| sLocation ||'.' );
11680
 
11681
	END IF;
11682
 
11683
END;
11684
/*-------------------------------------------------------------------------------------------------------*/
11685
PROCEDURE REMOVE_PACKAGE ( PvId IN NUMBER, RtagId IN NUMBER, UserId IN NUMBER ) IS
11686
 
11687
	ReleaseLocation VARCHAR2(4000);
11688
 
11689
BEGIN
11690
 
11691
	/*--------------- Business Rules Here -------------------*/
11692
	/*-------------------------------------------------------*/
11693
 
11694
 
11695
	-- Get release location for logging pusposes
11696
	SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11697
	  FROM PROJECTS proj,
11698
	  	   RELEASE_TAGS rt
11699
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11700
	   AND rt.RTAG_ID = RtagId;
11701
 
11702
 
11703
	-- Delete from Work In Progress
11704
	DELETE
11705
	  FROM WORK_IN_PROGRESS wip
11706
	 WHERE wip.RTAG_ID = RtagId
11707
	   AND wip.PV_ID = PvId;
11708
 
11709
	Log_Action ( PvId, 'delete_from_wip', UserId, 'Location: '|| ReleaseLocation );
11710
 
11711
 
11712
 
11713
 
11714
END;
11715
/*-------------------------------------------------------------------------------------------------------*/
11716
PROCEDURE REMOVE_PACKAGE_BULK ( PvIdList IN VARCHAR2, RtagId IN NUMBER, UserId IN NUMBER ) IS
11717
 
11718
	nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
11719
	ReleaseLocation VARCHAR2(4000);
11720
	PvId NUMBER;
11721
 
11722
BEGIN
11723
 
11724
	/*--------------- Business Rules Here -------------------*/
11725
	IF (PvIdList IS NULL)
11726
	THEN
11727
		RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
11728
	END IF;
11729
	/*-------------------------------------------------------*/
11730
 
11731
 
11732
	nIdCollector := IN_LIST_NUMBER ( PvIdList );
11733
 
11734
 
11735
	-- Get release location for logging pusposes
11736
	SELECT proj.PROJ_NAME  ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
11737
	  FROM PROJECTS proj,
11738
	  	   RELEASE_TAGS rt
11739
	 WHERE rt.PROJ_ID = proj.PROJ_ID
11740
	   AND rt.RTAG_ID = RtagId;
11741
 
11742
 
11743
	FOR i IN 1..nIdCollector.COUNT
11744
	LOOP
11745
		PvId := nIdCollector(i);
11746
 
11747
		-- Delete from Work In Progress
11748
		DELETE
11749
		  FROM WORK_IN_PROGRESS wip
11750
		 WHERE wip.RTAG_ID = RtagId
11751
		   AND wip.PV_ID = PvId;
11752
 
11753
		Log_Action ( PvId, 'remove_from_work_in_progress', UserId, 'Location: '|| ReleaseLocation );
11754
 
11755
	END LOOP;
11756
 
11757
 
11758
END;
11759
/*-------------------------------------------------------------------------------------------------------*/
11760
FUNCTION GET_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER ) RETURN NUMBER IS
11761
 
11762
	ReturnValue NUMBER;
11763
 
11764
BEGIN
11765
	SELECT wip.VIEW_ID INTO ReturnValue
11766
	  FROM WORK_IN_PROGRESS wip
11767
	 WHERE wip.RTAG_ID = RtagId
11768
	   AND wip.PV_ID = PvId;
11769
 
11770
	RETURN ReturnValue;
11771
END;
11772
/*-------------------------------------------------------------------------------------------------------*/
11773
PROCEDURE GET_VIEW_CONTENT ( RtagId IN NUMBER, ViewId IN NUMBER, RecordSet OUT typeCur ) IS
11774
 
11775
	IsBaseView CHAR(1);
11776
 
11777
BEGIN
11778
 
11779
	-- Check if the view is BASE VIEW
11780
	SELECT vi.BASE_VIEW INTO IsBaseView
11781
	  FROM VIEWS vi
11782
	 WHERE vi.VIEW_ID = ViewId;
11783
 
11784
	IF (IsBaseView = 'Y') THEN 
11785
		-- Get Base view content
11786
		OPEN RecordSet FOR
11787
		SELECT 0 AS PKG_STATE,
11788
			   NULL AS DEPRECATED_STATE,
11789
			   pv.pv_id, 
11790
			   pkg.pkg_name, 
11791
			   pv.pkg_version, 
11792
			   pv.dlocked, 
11793
			   pv.pv_description,
11794
			   pv.BUILD_TYPE
11795
		  FROM WORK_IN_PROGRESS rel,
11796
		       packages pkg,
11797
		       package_versions pv
11798
		 WHERE pv.pkg_id = pkg.pkg_id
11799
		   AND rel.pv_id = pv.pv_id
11800
		   AND rel.VIEW_ID = ViewId
11801
		   AND rel.RTAG_ID = RtagId
11802
		 ORDER BY UPPER(pkg.PKG_NAME);
11803
 
11804
 
11805
	ELSE	 
11806
 
11807
	 	-- Get non base view content
11808
		OPEN RecordSet FOR
11809
		SELECT 0 AS PKG_STATE,
11810
			   NULL AS DEPRECATED_STATE,
11811
			   pv.pv_id, 
11812
			   pkg.pkg_name, 
11813
			   pv.pkg_version, 
11814
			   pv.dlocked, 
11815
			   pv.pv_description,
11816
			   pv.BUILD_TYPE
11817
		  FROM WORK_IN_PROGRESS rel,
11818
		       packages pkg,
11819
		       package_versions pv,
11820
			   VIEW_DEF vd
11821
		 WHERE pv.pkg_id = pkg.pkg_id
11822
		   AND rel.pv_id = pv.pv_id
11823
		   AND vd.VIEW_ID = ViewId
11824
		   AND vd.PKG_ID = pv.PKG_ID
11825
		   AND rel.RTAG_ID = RtagId
11826
		 ORDER BY UPPER(pkg.PKG_NAME);
11827
 
11828
 
11829
	END IF;	 	
11830
 
11831
 
11832
END;
11833
/*-------------------------------------------------------------------------------------------------------*/
11834
PROCEDURE CHANGE_PACKAGE_VIEW ( PvId IN NUMBER, RtagId IN NUMBER, NewViewId IN NUMBER ) IS
11835
 
11836
BEGIN
11837
 
11838
	UPDATE WORK_IN_PROGRESS wip SET
11839
	wip.VIEW_ID = NewViewId
11840
	WHERE wip.PV_ID = PvId
11841
	  AND wip.RTAG_ID = RtagId;
11842
 
11843
END;
11844
/*-------------------------------------------------------------------------------------------------------*/
11845
END PK_WORK_IN_PROGRESS;
1374 dpurdie 11846
/
11847
--------------------------------------------------------
11848
--  DDL for Package Body PK_ARCHIVE
11849
--------------------------------------------------------
1373 dpurdie 11850
 
11851
  CREATE OR REPLACE PACKAGE BODY "PK_ARCHIVE" 
11852
IS
11853
/*
11854
------------------------------
11855
||  Author:  Rupesh Solanki
11856
||  Date:    26 October 2006
11857
||  Version:   1.0
11858
------------------------------
11859
*/
11860
/*---------------------------*/
11861
PROCEDURE populate_packages_table IS
11862
 
11863
BEGIN
11864
		  INSERT INTO archive_manager.PACKAGES
11865
		  (
11866
		  select * from packages where pkg_id not in 
11867
		  		  (select pkg_id from archive_manager.packages)
11868
		  );
11869
 
11870
          INSERT INTO archive_manager.PROCESSES
11871
          (
11872
          select * from processes where proc_id not in 
11873
            (select proc_id from archive_manager.processes)
11874
          );
11875
 
11876
 
11877
 
11878
END;
11879
/*-------------------------------------------------------------------------------------------------------*/
11880
   PROCEDURE populate_archive_data_table (
11881
      nrtagid   IN   release_tags.rtag_id%TYPE
11882
   )
11883
   IS
11884
/*
11885
Reason: To populate the archive_data table with information regarding the
11886
         number of package versions that exist in other releases.
11887
*/
11888
      numcount      NUMBER;
11889
      numusedby     NUMBER;
11890
      numruntime    NUMBER;
11891
 
11892
      /* Get all the package versions in the release */
11893
      CURSOR archive_cur
11894
      IS
11895
         SELECT pv_id
11896
           FROM release_content
11897
          WHERE rtag_id = nrtagid;
11898
 
11899
      archive_rec   archive_cur%ROWTYPE;
11900
   BEGIN
11901
/*--------------- Business Rules Here -------------------*/
11902
/*-------------------------------------------------------*/
11903
      OPEN archive_cur;
11904
 
11905
      FETCH archive_cur
11906
       INTO archive_rec;
11907
 
11908
      WHILE archive_cur%FOUND
11909
      LOOP
11910
        /* How many packages depend on this package version? */
11911
         SELECT COUNT (*)
11912
           INTO numusedby
11913
           FROM package_dependencies
11914
          WHERE dpv_id = archive_rec.pv_id;
11915
 
11916
        /* How many project releases use this package version?  */
11917
         SELECT COUNT (*)
11918
           INTO numcount
11919
           FROM release_content
11920
          WHERE pv_id = archive_rec.pv_id;
11921
 
11922
        /* How many packages have this package version as runtime
11923
        dependency? */
11924
         SELECT COUNT (*)
11925
           INTO numruntime
11926
           FROM runtime_dependencies
11927
          WHERE rtd_id = archive_rec.pv_id;
11928
 
11929
        /* Insert into the archive_data table if they are not runtime dependant
11930
        and package dependant and they exist in that particular release only*/
11931
         IF numusedby = 0 AND numcount = 1 AND numruntime = 0
11932
         THEN
11933
            INSERT INTO archive_data
11934
                        (rtag_id, pv_id
11935
                        )
11936
                 VALUES (nrtagid, archive_rec.pv_id
11937
                        );
11938
         END IF;
11939
 
11940
         FETCH archive_cur
11941
          INTO archive_rec;
11942
      END LOOP;
11943
   END;
11944
 
11945
/*-------------------------------------------------------------------------------------------------------*/
11946
   PROCEDURE migrate_pv_to_archive_schema (
11947
      nrtagid   IN   release_tags.rtag_id%TYPE
11948
   )
11949
   IS
11950
   BEGIN
11951
 
11952
      /* MIGRATION - PACKAGE_VERSIONS */
11953
      INSERT INTO archive_manager.package_versions
11954
         SELECT *
11955
           FROM package_versions
11956
          WHERE pv_id IN (SELECT pv_id
11957
                            FROM archive_data);
11958
 
11959
      /* MIGRATION - PACKAGE_BUILD_ENV */
11960
      INSERT INTO archive_manager.package_build_env
11961
         SELECT *
11962
           FROM package_build_env
11963
          WHERE pv_id IN (SELECT pv_id
11964
                            FROM archive_data);
11965
 
11966
      /* PURGE DATA FROM PACKAGE_BUILD_ENV */
11967
      DELETE FROM package_build_env
11968
            WHERE pv_id IN (SELECT pv_id
11969
                              FROM archive_data);
11970
 
11971
      /* MIGRATION - PACKAGE_BUILD_INFO */
11972
      INSERT INTO archive_manager.package_build_info
11973
         SELECT *
11974
           FROM package_build_info
11975
          WHERE pv_id IN (SELECT pv_id
11976
                            FROM archive_data);
11977
 
11978
      /* PURGE DATA FROM PACKAGE_BUILD_info */
11979
      DELETE FROM package_build_info
11980
            WHERE pv_id IN (SELECT pv_id
11981
                              FROM archive_data);							  
11982
 
11983
      /* MIGRATION - UNIT_TESTS  */
11984
      INSERT INTO archive_manager.unit_tests
11985
         SELECT *
11986
           FROM unit_tests
11987
          WHERE pv_id IN (SELECT pv_id
11988
                            FROM archive_data);
11989
 
11990
      /* PURGE DATA FROM UNIT_TESTS*/
11991
      DELETE FROM unit_tests
11992
            WHERE pv_id IN (SELECT pv_id
11993
                              FROM archive_data);
11994
 
11995
      /* MIGRATION - PACKAGE_PROCESSES */
11996
      INSERT INTO archive_manager.package_processes
11997
         SELECT *
11998
           FROM package_processes
11999
          WHERE pv_id IN (SELECT pv_id
12000
                            FROM archive_data);
12001
 
12002
      /* PURGE DATA FROM PACKAGE_PROCESSES*/
12003
      DELETE FROM package_processes
12004
            WHERE pv_id IN (SELECT pv_id
12005
                              FROM archive_data);
12006
 
12007
      /* MIGRATION - PACKAGE_DEPENDENCIES */
12008
      INSERT INTO archive_manager.package_dependencies
12009
         SELECT *
12010
           FROM package_dependencies
12011
          WHERE pv_id IN (SELECT pv_id
12012
                            FROM archive_data);
12013
 
12014
      /* PURGE DATA FROM PACKAGE_DEPENDENCIES*/
12015
      DELETE FROM package_dependencies
12016
            WHERE pv_id IN (SELECT pv_id
12017
                              FROM archive_data);
12018
 
12019
      /* MIGRATION - CODE_REVIEWS */
12020
      INSERT INTO archive_manager.code_reviews
12021
         SELECT *
12022
           FROM code_reviews
12023
          WHERE pv_id IN (SELECT pv_id
12024
                            FROM archive_data);
12025
 
12026
      /* PURGE DATA FROM CODE_REVIEWS*/
12027
      DELETE FROM code_reviews
12028
            WHERE pv_id IN (SELECT pv_id
12029
                              FROM archive_data);
12030
 
12031
      /* MIGRATION - RUNTIME_DEPENDENCIES*/
12032
      INSERT INTO archive_manager.runtime_dependencies
12033
         SELECT *
12034
           FROM runtime_dependencies
12035
          WHERE pv_id IN (SELECT pv_id
12036
                            FROM archive_data);
12037
 
12038
      /* PURGE DATA FROM RUNTIME_DEPENDENCIES*/
12039
      DELETE FROM runtime_dependencies
12040
            WHERE pv_id IN (SELECT pv_id
12041
                              FROM archive_data);
12042
 
12043
      /* MIGRATION - PACKAGE_DOCUMENTS */
12044
      INSERT INTO archive_manager.package_documents
12045
         SELECT *
12046
           FROM package_documents
12047
          WHERE pv_id IN (SELECT pv_id
12048
                            FROM archive_data);
12049
 
12050
      /* PURGE DATA FROM PACKAGE_DOCUMENTS*/
12051
      DELETE FROM package_documents
12052
            WHERE pv_id IN (SELECT pv_id
12053
                              FROM archive_data);
12054
 
12055
      /* MIGRATION - PACKAGE_PATCHES */
12056
      INSERT INTO archive_manager.package_patches
12057
         SELECT *
12058
           FROM package_patches
12059
          WHERE pv_id IN (SELECT pv_id
12060
                            FROM archive_data);
12061
 
12062
      /* PURGE DATA FROM PACKAGE_PATCHES*/
12063
      DELETE FROM package_patches
12064
            WHERE pv_id IN (SELECT pv_id
12065
                              FROM archive_data);
12066
 
12067
      /* MIGRATION - CQ_ISSUES */
12068
      INSERT INTO archive_manager.cq_issues
12069
         SELECT *
12070
           FROM cq_issues
12071
          WHERE pv_id IN (SELECT pv_id
12072
                            FROM archive_data);
12073
 
12074
      /* PURGE DATA FROM CQ_ISSUES*/
12075
      DELETE FROM cq_issues
12076
            WHERE pv_id IN (SELECT pv_id
12077
                              FROM archive_data);
12078
 
12079
      /* MIGRATION - ADDITIONAL_NOTES */
12080
      INSERT INTO archive_manager.additional_notes
12081
         SELECT *
12082
           FROM additional_notes
12083
          WHERE pv_id IN (SELECT pv_id
12084
                            FROM archive_data);
12085
 
12086
      /* PURGE DATA FROM ADDITIONAL_NOTES*/
12087
      DELETE FROM additional_notes
12088
            WHERE pv_id IN (SELECT pv_id
12089
                              FROM archive_data);
12090
 
12091
      /* MIGRATION - RELEASE_COMPONENTS */
12092
      INSERT INTO archive_manager.release_components
12093
         SELECT *
12094
           FROM release_components
12095
          WHERE pv_id IN (SELECT pv_id
12096
                            FROM archive_data);
12097
 
12098
      /* PURGE DATA FROM RELEASE_COMPONENTS*/
12099
      DELETE FROM release_components
12100
            WHERE pv_id IN (SELECT pv_id
12101
                              FROM archive_data);
12102
 
12103
      /* MIGRATION - IGNORE_WARNINGS */
12104
      INSERT INTO archive_manager.ignore_warnings
12105
         SELECT *
12106
           FROM ignore_warnings
12107
          WHERE pv_id IN (SELECT pv_id
12108
                            FROM archive_data);
12109
 
12110
      /* PURGE DATA FROM IGNORE_WARNINGS*/
12111
      DELETE FROM ignore_warnings
12112
            WHERE pv_id IN (SELECT pv_id
12113
                              FROM archive_data);
12114
 
12115
      /* PURGE DATA FROM WORK_IN_PROGRESS */
12116
      DELETE FROM work_in_progress
12117
            WHERE rtag_id = nrtagid;
12118
 
12119
      /* PURGE DATA FROM PLANNED */
12120
      DELETE FROM planned
12121
            WHERE rtag_id = nrtagid;
12122
 
12123
      /* MIGRATION - JIRA_ISSUES */
12124
      INSERT INTO archive_manager.jira_issues
12125
         SELECT *
12126
           FROM jira_issues
12127
          WHERE pv_id IN (SELECT pv_id
12128
                            FROM archive_data);
12129
 
12130
      /* PURGE DATA FROM JIRA_ISSUES*/
12131
      DELETE FROM jira_issues
12132
            WHERE pv_id IN (SELECT pv_id
12133
                              FROM archive_data);
12134
 
12135
      /* MIGRATION - PRODUCT_COMPONENTS */
12136
      INSERT INTO archive_manager.product_components
12137
         SELECT *
12138
           FROM product_components
12139
          WHERE pv_id IN (SELECT pv_id
12140
                            FROM archive_data);
12141
 
12142
      /* PURGE DATA FROM PRODUCT_COMPONENTS*/
12143
      DELETE FROM product_components
12144
            WHERE pv_id IN (SELECT pv_id
12145
                              FROM archive_data);
12146
 
12147
      /* MIGRATION - ACTION_LOG */
12148
      INSERT INTO archive_manager.action_log
12149
         SELECT *
12150
           FROM action_log
12151
          WHERE pv_id IN (SELECT pv_id
12152
                            FROM archive_data);
12153
 
12154
      /* PURGE DATA FROM ACTION_LOG*/
12155
      DELETE FROM action_log
12156
            WHERE pv_id IN (SELECT pv_id
12157
                              FROM archive_data);
12158
 
12159
 
12160
   END;
12161
 
12162
/*-------------------------------------------------------------------------------------------------------*/
12163
   PROCEDURE migrate_rtag_to_archive_schema (
12164
      nrtagid   IN   release_tags.rtag_id%TYPE
12165
   )
12166
   IS
12167
   BEGIN
12168
      /* MIGRATION - DO_NOT_RIPPLE */
12169
      INSERT INTO archive_manager.do_not_ripple
12170
         SELECT *
12171
           FROM do_not_ripple dnp
12172
          WHERE rtag_id = nrtagid;
12173
 
12174
      /* PURGE DATA FROM DO_NOT_RIPPLE */
12175
      DELETE FROM do_not_ripple
12176
            WHERE rtag_id = nrtagid;
12177
 
12178
      /* MIGRATION - ADVISORY_RIPPLES*/
12179
      INSERT INTO archive_manager.advisory_ripples
12180
         SELECT *
12181
           FROM advisory_ripple dnp
12182
          WHERE rtag_id = nrtagid;
12183
 
12184
      /* PURGE DATA FROM ADVISORY_RIPPLES*/
12185
      DELETE FROM advisory_ripple
12186
            WHERE rtag_id = nrtagid;			
12187
 
12188
      /* MIGRATION - RELEASE_CONTENT */
12189
      INSERT INTO archive_manager.release_content
12190
         SELECT *
12191
           FROM release_content
12192
          WHERE rtag_id = nrtagid;
12193
 
12194
      /* PURGE DATA FROM RELEASE_CONTENT*/
12195
      DELETE FROM release_content
12196
            WHERE rtag_id = nrtagid;
12197
 
12198
      /* MIGRATION - NOTIFICATION_HISTORY */
12199
      INSERT INTO archive_manager.notification_history
12200
         SELECT *
12201
           FROM notification_history
12202
          WHERE rtag_id = nrtagid;
12203
 
12204
      /* PURGE DATA FROM NOTIFICATION_HISTORY*/
12205
      DELETE FROM notification_history
12206
            WHERE rtag_id = nrtagid;
12207
 
12208
      /* MIGRATION - BUILD_ORDER   */
12209
      INSERT INTO archive_manager.build_order
12210
         SELECT *
12211
           FROM build_order
12212
          WHERE rtag_id = nrtagid;
12213
 
12214
      /* PURGE DATA FROM BUILD_ORDER*/
12215
      DELETE FROM build_order
12216
            WHERE rtag_id = nrtagid;
12217
 
12218
      /* MIGRATION - PROJECT_ACTION_LOG */
12219
      INSERT INTO archive_manager.project_action_log
12220
         SELECT *
12221
           FROM project_action_log
12222
          WHERE rtag_id = nrtagid;
12223
 
12224
      /* PURGE DATA FROM PROJECT_ACTION_LOG */
12225
      DELETE FROM project_action_log
12226
            WHERE rtag_id = nrtagid;
12227
 
12228
      /* MIGRATION - DEPRECATED_PACKAGES */
12229
      INSERT INTO archive_manager.deprecated_packages
12230
         SELECT *
12231
           FROM deprecated_packages
12232
          WHERE rtag_id = nrtagid;
12233
 
12234
      /* PURGE DATA FROM DEPRECATED_PACKAGES */
12235
      DELETE FROM deprecated_packages
12236
            WHERE rtag_id = nrtagid;
12237
 
12238
      /* MIGRATION - RELEASE_TAGS */
12239
      INSERT INTO archive_manager.release_tags
12240
         SELECT *
12241
           FROM release_tags
12242
          WHERE rtag_id = nrtagid;
12243
 
12244
 
12245
      /* PURGE DATA FROM PACKAGE_VERSIONS*/
12246
      DELETE FROM package_versions
12247
            WHERE pv_id IN (SELECT pv_id
12248
                              FROM archive_data);
12249
 
12250
 
12251
   END;
12252
 
12253
/*-------------------------------------------------------------------------------------------------------*/
12254
   PROCEDURE clean_up_archive_data_table (
12255
      nrtagid   IN   release_tags.rtag_id%TYPE
12256
   )
12257
   IS
12258
   BEGIN
12259
      /* Cleaning Up The Archive_Data Table */
12260
      DELETE FROM archive_data
12261
            WHERE rtag_id = nrtagid;
12262
   END;
12263
 
12264
/*-------------------------------------------------------------------------------------------------------*/
12265
   PROCEDURE write_action_log (
12266
      nuserid   IN   NUMBER,
12267
      nrtagid   IN   release_tags.rtag_id%TYPE
12268
   )
12269
   IS
12270
   BEGIN
12271
      /* Write Into Archive_Action_Log Table */
12272
      INSERT INTO archive_action_log
12273
                  (user_id, date_time_stamp, rtag_id,
12274
                   description
12275
                  )
12276
           VALUES (nuserid, ora_sysdatetime, nrtagid,
12277
                   'Release has been archived to the ARCHIVE_MANAGER schema'
12278
                  );
12279
   END;
12280
/*-------------------------------------------------------------------------------------------------------*/
12281
END pk_archive; 
1374 dpurdie 12282
/
12283
--------------------------------------------------------
12284
--  DDL for Package Body PK_PACKAGE_TEST
12285
--------------------------------------------------------
1373 dpurdie 12286
 
12287
  CREATE OR REPLACE PACKAGE BODY "PK_PACKAGE_TEST" 
12288
IS
12289
/*
12290
------------------------------
12291
||  Last Modified:  R. Solanki
12292
||  Modified Date:  09/03/2006
12293
||  Body Version:   1.7
12294
------------------------------
12295
*/
12296
 
12297
   /*-------------------------------------------------------------------------------------------------------*/
12298
   PROCEDURE new_version (
12299
      nlastpvid                   IN       NUMBER,
12300
      snewpkgversion              IN       VARCHAR2 DEFAULT NULL,
12301
      cbuildtype                  IN       CHAR,
12302
      nsettopvid                  IN       NUMBER DEFAULT NULL,
12303
      nrtagid                     IN       NUMBER,
12304
      nuserid                     IN       NUMBER,
12305
      enumissues_state_imported   IN       NUMBER,
12306
      returnpvid                  OUT      NUMBER
12307
   )
12308
   IS
12309
      origpkg_id                   package_versions.pkg_id%TYPE;
12310
      origdlocked                  package_versions.dlocked%TYPE;
12311
      ssv_mm                       package_versions.v_mm%TYPE;
12312
      ssv_nmm                      package_versions.v_nmm%TYPE;
12313
      ssv_ext                      package_versions.v_ext%TYPE;
12314
      spackageversion              VARCHAR2 (4000);
12315
      nissuestypes                 NUMBER;
12316
      nviewid                      NUMBER;
12317
      reccount                     NUMBER;
12318
      isreleased                   package_versions.dlocked%TYPE       := 'N';
12319
      slabel                       VARCHAR2 (4000)                    := NULL;
12320
 
12321
      CURSOR package_versions_cur
12322
      IS
12323
         SELECT pv.pv_id, pv.is_patch, pv.dlocked
12324
           FROM package_versions pv
12325
          WHERE pv.pkg_version = snewpkgversion
12326
            AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id
12327
                                         FROM package_versions origpv
12328
                                        WHERE origpv.pv_id = nlastpvid);
12329
 
12330
      package_versions_rec         package_versions_cur%ROWTYPE;
12331
 
12332
      CURSOR clone_package_versions_cur
12333
      IS
12334
         SELECT DISTINCT pkg_id, dlocked
12335
                    FROM package_versions
12336
                   WHERE pv_id = nlastpvid;
12337
 
12338
      clone_package_versions_rec   clone_package_versions_cur%ROWTYPE;
12339
   BEGIN
12340
      spackageversion := snewpkgversion;
12341
 
12342
      IF nsettopvid IS NULL
12343
      THEN
12344
         -- SetToPv_id is not supplied, hence proceed.
12345
 
12346
         /* ---------------------------------------------------- */
12347
/* Find id package_version exists                       */
12348
/* ---------------------------------------------------- */
12349
         OPEN package_versions_cur;
12350
 
12351
         FETCH package_versions_cur
12352
          INTO package_versions_rec;
12353
 
12354
         IF package_versions_cur%NOTFOUND
12355
         THEN
12356
            ---  Create brand new package ---
12357
            SELECT seq_pv_id.NEXTVAL
12358
              INTO returnpvid
12359
              FROM DUAL;
12360
 
12361
            -- Split Version to get extention + other
12362
            split_version (spackageversion, ssv_mm, ssv_nmm, ssv_ext);
12363
 
12364
            -- Get previous package to clone from
12365
            OPEN clone_package_versions_cur;
12366
 
12367
            FETCH clone_package_versions_cur
12368
             INTO clone_package_versions_rec;
12369
 
12370
            origpkg_id := clone_package_versions_rec.pkg_id;
12371
            origdlocked := clone_package_versions_rec.dlocked;
12372
 
12373
            CLOSE clone_package_versions_cur;
12374
 
12375
            -- Automated built config
12376
            IF (cbuildtype = 'A')
12377
            THEN
12378
               spackageversion := '(' || returnpvid || ')' || ssv_ext;
12379
                                    -- Make sure that version is still unique
12380
            END IF;
12381
 
12382
            -- Clone Package Version Details --
12383
            INSERT INTO package_versions
12384
                        (pv_id, pkg_id, pkg_version, dlocked, created_stamp,
12385
                         creator_id, modified_stamp, modifier_id, v_mm, v_nmm,
12386
                         v_ext, src_path, pv_description, pv_overview,
12387
                         last_pv_id, owner_id, is_deployable,
12388
                         is_build_env_required, build_type, bs_id, is_autobuildable)
12389
               SELECT returnpvid AS pv_id, origpkg_id AS pkg_id,
12390
                      spackageversion AS pkg_version, 'N' AS dlocked,
12391
                      ora_sysdate AS created_stamp, nuserid AS creator_id,
12392
                      ora_sysdatetime AS modified_stamp,
12393
                      nuserid AS modifier_id, ssv_mm AS v_mm,
12394
                      ssv_nmm AS v_nmm, ssv_ext AS v_ext, pv.src_path,
12395
                      pv.pv_description, pv.pv_overview,
12396
                      nlastpvid AS last_pv_id, pv.owner_id, pv.is_deployable,
12397
                      pv.is_build_env_required, cbuildtype, pv.bs_id, pv.is_autobuildable
12398
                 FROM package_versions pv
12399
                WHERE pv.pv_id = nlastpvid;
12400
 
12401
            -- Set Issues Type for cloning ---
12402
            IF origdlocked = 'Y'
12403
            THEN
12404
               nissuestypes := enumissues_state_imported;
12405
            ELSE
12406
               nissuestypes := NULL;
12407
            END IF;
12408
 
12409
            -- Update Label for automated built
12410
            IF (cbuildtype = 'A')
12411
            THEN
12412
               slabel := get_automated_label (returnpvid);
12413
 
12414
               UPDATE package_versions pv
12415
                  SET pv.pkg_label = slabel
12416
                WHERE pv.pv_id = returnpvid;
12417
            END IF;
12418
 
12419
            basic_clone (nlastpvid,
12420
                         returnpvid,
12421
                         nrtagid,
12422
                         nuserid,
12423
                         origpkg_id,
12424
                         nissuestypes
12425
                        );
12426
         ELSE
12427
            --- Package already exists, hence reuse ---
12428
            returnpvid := package_versions_rec.pv_id;
12429
            isreleased := package_versions_rec.dlocked;
12430
         END IF;
12431
 
12432
         CLOSE package_versions_cur;
12433
      ELSE
12434
         returnpvid := nsettopvid;
12435
      END IF;
12436
   END new_version;
12437
 
12438
/*-------------------------------------------------------------------------------------------------------*/
12439
   PROCEDURE change_state (
12440
      pvid       IN   NUMBER,
12441
      newstate   IN   package_versions.dlocked%TYPE,
12442
      userid     IN   NUMBER
12443
   )
12444
   IS
12445
   BEGIN
12446
      -- Set package in Released mode
12447
      UPDATE package_versions pv
12448
         SET pv.dlocked = newstate,
12449
             pv.modified_stamp = ora_sysdatetime,
12450
             pv.modifier_id = userid
12451
       WHERE pv.pv_id = pvid;
12452
 
12453
      -- Log action --
12454
      IF newstate = 'Y'
12455
      THEN
12456
         -- RELEASED --
12457
         log_action (pvid,
12458
                     'makeofficial',
12459
                     userid,
12460
                     'Package state change to: Released'
12461
                    );
12462
      ELSIF newstate = 'N'
12463
      THEN
12464
         -- UNLOCKED --
12465
         log_action (pvid,
12466
                     'makeunofficial',
12467
                     userid,
12468
                     'Package state change to: Ulocked'
12469
                    );
12470
      ELSIF newstate = 'P'
12471
      THEN
12472
         -- PENDING APPROVAL --
12473
         log_action (pvid,
12474
                     'add_to_planned',
12475
                     userid,
12476
                     'Package state change to: Pending Approval'
12477
                    );
12478
      ELSIF newstate = 'R'
12479
      THEN
12480
         -- REJECTED --
12481
         log_action (pvid,
12482
                     'reject_package',
12483
                     userid,
12484
                     'Package state change to: Rejected'
12485
                    );
12486
      ELSIF newstate = 'A'
12487
      THEN
12488
         -- APPROVED --
12489
         log_action (pvid,
12490
                     'approve_package',
12491
                     userid,
12492
                     'Package state change to: Approved'
12493
                    );
12494
      END IF;
12495
   END;
12496
 
12497
/*-------------------------------------------------------------------------------------------------------*/
12498
   PROCEDURE destroy_package (
12499
      pvid               IN       NUMBER,
12500
      overridewarnings   IN       CHAR DEFAULT 'N',
12501
      problemstring      OUT      VARCHAR2
12502
   )
12503
   IS
12504
      LOCKED     CHAR;
12505
      pkgid      NUMBER;
12506
      ROWCOUNT   NUMBER;
12507
   BEGIN
12508
      /*
12509
      || This will destroy all package details from database.
12510
      || It will only be used to remove unwanted work in progress packages,
12511
      || or mestaken versions
12512
      */
12513
 
12514
      /*--------------- Business Rules Here -------------------*/
12515
      problemstring := NULL;
12516
 
12517
      IF overridewarnings = 'N'
12518
      THEN
12519
         -- Package must not be official
12520
         SELECT pv.dlocked
12521
           INTO LOCKED
12522
           FROM package_versions pv
12523
          WHERE pv.pv_id = pvid;
12524
 
12525
         IF LOCKED = 'Y'
12526
         THEN
12527
            problemstring :=
12528
                  problemstring
12529
               || '- Package is locked and released.'
12530
               || UTL_TCP.crlf;
12531
         END IF;
12532
 
12533
         -- Cannot remove if used in BOMs
12534
         SELECT COUNT (osc.prod_id)
12535
           INTO ROWCOUNT
12536
           FROM deployment_manager.os_contents osc
12537
          WHERE osc.prod_id = pvid;
12538
 
12539
         IF ROWCOUNT > 0
12540
         THEN
12541
            problemstring :=
12542
                  problemstring
12543
               || '- Package is part of Bill-Of-Material (BOM) in Deployment Manager.'
12544
               || UTL_TCP.crlf;
12545
         END IF;
12546
 
12547
         -- Cannot remove if Referenced as build dependency
12548
         SELECT COUNT (dep.pv_id)
12549
           INTO ROWCOUNT
12550
           FROM package_dependencies dep
12551
          WHERE dep.dpv_id = pvid;
12552
 
12553
         IF ROWCOUNT > 0
12554
         THEN
12555
            problemstring :=
12556
                  problemstring
12557
               || '- Package is referenced by other package as build dependency.'
12558
               || UTL_TCP.crlf;
12559
         END IF;
12560
 
12561
         -- Cannot remove if Referenced as runtime dependency
12562
         SELECT COUNT (rd.pv_id)
12563
           INTO ROWCOUNT
12564
           FROM runtime_dependencies rd
12565
          WHERE rd.rtd_id = pvid;
12566
 
12567
         IF ROWCOUNT > 0
12568
         THEN
12569
            problemstring :=
12570
                  problemstring
12571
               || '- Package is referenced by other package as runtime dependency.'
12572
               || UTL_TCP.crlf;
12573
         END IF;
12574
 
12575
         -- Cannot remove if Referenced as patch
12576
         SELECT COUNT (pp.pv_id)
12577
           INTO ROWCOUNT
12578
           FROM package_patches pp
12579
          WHERE pp.patch_id = pvid;
12580
 
12581
         IF ROWCOUNT > 0
12582
         THEN
12583
            problemstring :=
12584
                  problemstring
12585
               || '- Package is used as patch by other package.'
12586
               || UTL_TCP.crlf;
12587
         END IF;
12588
      END IF;
12589
 
12590
/*-------------------------------------------------------*/
12591
      IF (problemstring IS NULL)
12592
      THEN
12593
         --- Remove From Work in Progress
12594
         DELETE FROM work_in_progress wip
12595
               WHERE wip.pv_id = pvid;
12596
 
12597
         --- Remove From Pending
12598
         DELETE FROM planned pl
12599
               WHERE pl.pv_id = pvid;
12600
 
12601
         --- Remove From Released area
12602
         DELETE FROM release_content rc
12603
               WHERE rc.pv_id = pvid;
12604
 
12605
         ---Remove From Package Processes
12606
         DELETE FROM package_processes pp
12607
               WHERE pp.pv_id = pvid;
12608
 
12609
         --- Remove Dependencies
12610
         DELETE FROM package_dependencies dep
12611
               WHERE dep.pv_id = pvid;
12612
 
12613
         DELETE FROM package_dependencies dep
12614
               WHERE dep.dpv_id = pvid;
12615
 
12616
         --- Remove Runtime dependencies
12617
         DELETE FROM runtime_dependencies rtd
12618
               WHERE rtd.pv_id = pvid;
12619
 
12620
         DELETE FROM runtime_dependencies rtd
12621
               WHERE rtd.rtd_id = pvid;
12622
 
12623
         --- Remove components
12624
         DELETE FROM product_components pc
12625
               WHERE pc.pv_id = pvid;
12626
 
12627
         DELETE FROM release_components rc
12628
               WHERE rc.pv_id = pvid;
12629
 
12630
         --- Remove From Notification History
12631
         DELETE FROM notification_history nh
12632
               WHERE nh.pv_id = pvid;
12633
 
12634
         --- Remove From Ignore Warnings
12635
         DELETE FROM ignore_warnings iw
12636
               WHERE iw.pv_id = pvid;
12637
 
12638
         --- Remove From Additional Notes
12639
         DELETE FROM additional_notes an
12640
               WHERE an.pv_id = pvid;
12641
 
12642
         --- Remove From CQ Issues
12643
         DELETE FROM cq_issues cq
12644
               WHERE cq.pv_id = pvid;
12645
 
12646
         --- Remove from Package Patches
12647
         DELETE FROM package_patches pp
12648
               WHERE pp.pv_id = pvid;
12649
 
12650
         DELETE FROM package_patches pp
12651
               WHERE pp.patch_id = pvid;
12652
 
12653
         --- Remove From Package Documents
12654
         DELETE FROM package_documents pd
12655
               WHERE pd.pv_id = pvid;
12656
 
12657
         --- Remove from Code Review
12658
         DELETE FROM code_reviews cr
12659
               WHERE cr.pv_id = pvid;
12660
 
12661
         --- Remove from Unit Tests
12662
         DELETE FROM unit_tests ut
12663
               WHERE ut.pv_id = pvid;
12664
 
12665
         --- Remove from Package BuildEnv
12666
         DELETE FROM package_build_env pbe
12667
               WHERE pbe.pv_id = pvid;
12668
 
12669
		 --- Remove from Package Build Info
12670
		 DELETE FROM package_build_info pbi
12671
		 	   WHERE pbi.pv_id = pvid;    
12672
 
12673
 
12674
         --- Remove from Build Order
12675
         DELETE FROM build_order bo
12676
               WHERE bo.pv_id = pvid;
12677
 
12678
         --- Remove from Note Manager
12679
         DELETE FROM note_manager nm
12680
               WHERE nm.nid = pvid;
12681
 
12682
         --- Remove from Action log
12683
         DELETE FROM action_log al
12684
               WHERE al.pv_id = pvid;
12685
 
12686
		 --- Remove from Do Not Ripple 
12687
		 DELETE FROM DO_NOT_RIPPLE dnr
12688
		 	   WHERE dnr.PV_ID = pvid;
12689
 
12690
		 --- Remove from Jira Issues 
12691
		 DELETE FROM JIRA_ISSUES jira
12692
		 	   WHERE jira.PV_ID = pvid;
12693
 
12694
         --- Finally Remove From Package Versions
12695
         --- Get Package name
12696
         SELECT pv.pkg_id
12697
           INTO pkgid
12698
           FROM package_versions pv
12699
          WHERE pv.pv_id = pvid;
12700
 
12701
         DELETE FROM package_versions pv
12702
               WHERE pv.pv_id = pvid;
12703
 
12704
         --- Remove package name if not used any more
12705
         SELECT COUNT (pv.pv_id)
12706
           INTO ROWCOUNT
12707
           FROM package_versions pv
12708
          WHERE pv.pkg_id = pkgid;
12709
 
12710
         IF ROWCOUNT < 1
12711
         THEN
12712
            DELETE FROM PACKAGES pkg
12713
                  WHERE pkg.pkg_id = pkgid;
12714
         END IF;
12715
      END IF;
12716
   END;
12717
 
12718
/*-------------------------------------------------------------------------------------------------------*/
12719
   PROCEDURE new_patch (
12720
      snewpatchversion   IN       package_versions.pkg_version%TYPE,
12721
      nparentpvid        IN       NUMBER,
12722
      spatchidlist       IN       VARCHAR2,
12723
      nuserid            IN       NUMBER,
12724
      returnpatchid      OUT      NUMBER
12725
   )
12726
   IS
12727
      patchpv_id           NUMBER;
12728
      parpkg_id            NUMBER;
12729
      lastinstallorder     NUMBER;
12730
      ispatchdlocked       package_versions.dlocked%TYPE;
12731
      ssv_mm               package_versions.v_mm%TYPE;
12732
      ssv_nmm              package_versions.v_nmm%TYPE;
12733
      ssv_ext              package_versions.v_ext%TYPE;
12734
      opatchdepcollector   relmgr_number_tab_t      := relmgr_number_tab_t
12735
                                                                          ();
12736
 
12737
      CURSOR parent_cur
12738
      IS
12739
         SELECT pv.*, pkg.pkg_name
12740
           FROM package_versions pv, PACKAGES pkg
12741
          WHERE pv.pv_id = nparentpvid AND pv.pkg_id = pkg.pkg_id;
12742
 
12743
      parent_rec           parent_cur%ROWTYPE;
12744
 
12745
      CURSOR patch_cur
12746
      IS
12747
         SELECT pv.*, pg.pkg_name
12748
           FROM package_versions pv, PACKAGES pg
12749
          WHERE pv.pkg_id = parpkg_id
12750
            AND pv.pkg_version = snewpatchversion
12751
            AND pv.pkg_id = pg.pkg_id;
12752
 
12753
      patch_rec            patch_cur%ROWTYPE;
12754
 
12755
      CURSOR releases_cur
12756
      IS
12757
         SELECT rc.pv_id
12758
           FROM release_content rc
12759
          WHERE rc.pv_id = patch_rec.pv_id;
12760
 
12761
      releases_rec         releases_cur%ROWTYPE;
12762
   BEGIN
12763
      -- Get Last Install Order
12764
      SELECT COUNT (*)
12765
        INTO lastinstallorder
12766
        FROM package_patches pp
12767
       WHERE pp.pv_id = nparentpvid;
12768
 
12769
      -- Get parent details
12770
      OPEN parent_cur;
12771
 
12772
      FETCH parent_cur
12773
       INTO parent_rec;
12774
 
12775
      parpkg_id := parent_rec.pkg_id;
12776
 
12777
      -- Find if patch exists in database
12778
      OPEN patch_cur;
12779
 
12780
      FETCH patch_cur
12781
       INTO patch_rec;
12782
 
12783
      -- Parent must be official
12784
      IF parent_rec.dlocked = 'Y'
12785
      THEN
12786
         IF patch_cur%NOTFOUND
12787
         THEN
12788
            ispatchdlocked := 'N';
12789
 
12790
            -- Create new patch version --
12791
            SELECT seq_pv_id.NEXTVAL
12792
              INTO patchpv_id
12793
              FROM DUAL;
12794
 
12795
            split_version (snewpatchversion, ssv_mm, ssv_nmm, ssv_ext);
12796
 
12797
            INSERT INTO package_versions
12798
                        (pv_id, pkg_id, pkg_version,
12799
                         dlocked, created_stamp, creator_id,
12800
                         modified_stamp, modifier_id, v_mm, v_nmm, v_ext,
12801
                         src_path,
12802
                         pv_description,
12803
                         owner_id, is_patch, last_pv_id, build_type, is_build_env_required, bs_id,
12804
						 is_autobuildable
12805
                        )
12806
                 VALUES (patchpv_id, parpkg_id, snewpatchversion,
12807
                         ispatchdlocked, ora_sysdate, nuserid,
12808
                         ora_sysdatetime, nuserid, ssv_mm, ssv_nmm, ssv_ext,
12809
                         parent_rec.src_path,
12810
                            'This is a patch to '
12811
                         || parent_rec.pkg_name
12812
                         || ' '
12813
                         || parent_rec.pkg_version,
12814
                         nuserid, 'Y', patchpv_id, 'M', 'N', 3, 'N'
12815
                        );
12816
 
12817
            INSERT INTO package_patches
12818
                        (pv_id, patch_id, install_order)
12819
               (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12820
                       lastinstallorder + 1 AS install_order
12821
                  FROM package_versions pv
12822
                 WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12823
 
12824
            /* LOG ACTION */
12825
            log_action (patchpv_id,
12826
                        'new_version',
12827
                        nuserid,
12828
                        'Patch version created: ' || snewpatchversion
12829
                       );
12830
            log_action (nparentpvid,
12831
                        'patch_add',
12832
                        nuserid,
12833
                        'New patch created and attached: ' || snewpatchversion
12834
                       );
12835
         ELSE
12836
            patchpv_id := patch_rec.pv_id;
12837
            ispatchdlocked := patch_rec.dlocked;
12838
 
12839
            -- Find if pv_id exists in release content (i.e. it cannot be a patch)
12840
            OPEN releases_cur;
12841
 
12842
            FETCH releases_cur
12843
             INTO releases_rec;
12844
 
12845
            IF releases_cur%NOTFOUND
12846
            THEN
12847
               -- This pv_id is trully a patch, hence add Y to column IS_PATCH
12848
               UPDATE package_versions
12849
                  SET is_patch = 'Y'
12850
                WHERE pv_id = patchpv_id;
12851
 
12852
               INSERT INTO package_patches
12853
                           (pv_id, patch_id, install_order)
12854
                  (SELECT nparentpvid AS pv_id, pv.pv_id AS patch_id,
12855
                          lastinstallorder + 1 AS install_order
12856
                     FROM package_versions pv
12857
                    WHERE pv.pv_id = patchpv_id AND pv.is_patch = 'Y');
12858
            END IF;
12859
 
12860
            CLOSE releases_cur;
12861
 
12862
            /* LOG ACTION */
12863
            log_action (nparentpvid,
12864
                        'patch_add',
12865
                        nuserid,
12866
                           'Patch version was found and attached: '
12867
                        || snewpatchversion
12868
                       );
12869
         END IF;
12870
      END IF;
12871
 
12872
      /* Create Patch Dependencies */
12873
      opatchdepcollector := in_list_number (spatchidlist);
12874
 
12875
      -- Make sure patch is unofficial before altering its dependencies
12876
      IF (opatchdepcollector.COUNT > 0) AND (ispatchdlocked = 'N')
12877
      THEN
12878
         -- Delete Existing Dependencies
12879
         DELETE FROM package_dependencies dep
12880
               WHERE dep.pv_id = patchpv_id;
12881
 
12882
         -- Insert new dependencies
12883
         INSERT INTO package_dependencies
12884
                     (pv_id, dpv_id, pkg_id, dpkg_id, build_type)
12885
            SELECT patchpv_id AS pv_id, pv.pv_id AS dpv_id,
12886
                   parpkg_id AS pkg_id, pv.pkg_id AS dpkg_id,
12887
                   'L' AS build_type
12888
              FROM package_versions pv
12889
             WHERE pv.pv_id IN (
12890
                      SELECT *
12891
                        FROM TABLE
12892
                                (CAST
12893
                                    (opatchdepcollector AS relmgr_number_tab_t)
12894
                                ));
12895
      END IF;
12896
 
12897
      -- Return patch_id
12898
      returnpatchid := patchpv_id;
12899
 
12900
      CLOSE parent_cur;
12901
 
12902
      CLOSE patch_cur;
12903
   EXCEPTION
12904
      WHEN DUP_VAL_ON_INDEX
12905
      THEN
12906
         raise_application_error (-20000,
12907
                                     'Patch version '
12908
                                  || snewpatchversion
12909
                                  || ' already exist.'
12910
                                 );
12911
   END;
12912
 
12913
/*-------------------------------------------------------------------------------------------------------*/
12914
   PROCEDURE obsolete_patch (
12915
      patchid            IN   NUMBER,
12916
      isobsolete         IN   CHAR,
12917
      obsoletecomments   IN   VARCHAR2,
12918
      userid             IN   NUMBER
12919
   )
12920
   IS
12921
   BEGIN
12922
      -- Update patch
12923
      UPDATE package_versions pv
12924
         SET pv.is_obsolete = isobsolete,
12925
             pv.obsolete_comments = obsoletecomments
12926
       WHERE pv.pv_id = patchid;
12927
 
12928
      /*
12929
      -- Update patch children
12930
      UPDATE PACKAGE_VERSIONS pv SET
12931
      pv.IS_OBSOLETE = IsObsolete,
12932
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12933
      WHERE pv.PV_ID IN (
12934
                     SELECT DISTINCT dep.DPV_ID
12935
                       FROM PACKAGE_DEPENDENCIES dep
12936
                      WHERE dep.PV_ID = PatchId
12937
                     );
12938
 
12939
 
12940
      -- Update patch parent
12941
      UPDATE PACKAGE_VERSIONS pv SET
12942
      pv.IS_OBSOLETE = IsObsolete,
12943
      pv.OBSOLETE_COMMENTS = ObsoleteComments
12944
      WHERE pv.PV_ID IN (
12945
                     SELECT DISTINCT dep.PV_ID
12946
                       FROM PACKAGE_DEPENDENCIES dep
12947
                      WHERE dep.DPV_ID = PatchId
12948
                     );
12949
 
12950
         */
12951
 
12952
      /* LOG ACTION */
12953
      IF isobsolete IS NOT NULL
12954
      THEN
12955
         log_action (patchid,
12956
                     'patch_obsolete',
12957
                     userid,
12958
                     'Obsolete patch. ' || obsoletecomments
12959
                    );
12960
      ELSE
12961
         log_action (patchid,
12962
                     'patch_obsolete',
12963
                     userid,
12964
                     'Undo patch obsolete.'
12965
                    );
12966
      END IF;
12967
   END;
12968
 
12969
/*-------------------------------------------------------------------------------------------------------*/
12970
   PROCEDURE obsolete_patches (
12971
      spatchidlist       IN   VARCHAR2,
12972
      isobsolete         IN   CHAR,
12973
      obsoletecomments   IN   VARCHAR2,
12974
      userid             IN   NUMBER
12975
   )
12976
   IS
12977
   BEGIN
12978
      /*--------------- Business Rules Here -------------------*/
12979
      IF spatchidlist IS NULL
12980
      THEN
12981
         raise_application_error (-20000,
12982
                                  'Please select one or more Patches.'
12983
                                 );
12984
      END IF;
12985
 
12986
/*-------------------------------------------------------*/
12987
 
12988
      -- Update patch
12989
      UPDATE package_versions pv
12990
         SET pv.is_obsolete = isobsolete,
12991
             pv.obsolete_comments = obsoletecomments
12992
       WHERE pv.pv_id IN (
12993
                SELECT *
12994
                  FROM THE
12995
                          (SELECT CAST
12996
                                     (in_list_number (spatchidlist) AS relmgr_number_tab_t
12997
                                     )
12998
                             FROM DUAL
12999
                          ));
13000
   /*
13001
   -- Update patch children
13002
   UPDATE PACKAGE_VERSIONS pv SET
13003
   pv.IS_OBSOLETE = IsObsolete,
13004
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13005
   WHERE pv.PV_ID IN (
13006
                  SELECT DISTINCT dep.DPV_ID
13007
                    FROM PACKAGE_DEPENDENCIES dep
13008
                   WHERE dep.PV_ID = PatchId
13009
                  );
13010
 
13011
 
13012
   -- Update patch parent
13013
   UPDATE PACKAGE_VERSIONS pv SET
13014
   pv.IS_OBSOLETE = IsObsolete,
13015
   pv.OBSOLETE_COMMENTS = ObsoleteComments
13016
   WHERE pv.PV_ID IN (
13017
                  SELECT DISTINCT dep.PV_ID
13018
                    FROM PACKAGE_DEPENDENCIES dep
13019
                   WHERE dep.DPV_ID = PatchId
13020
                  );
13021
 
13022
      */
13023
 
13024
   /* LOG ACTION
13025
   IF IsObsolete IS NOT NULL THEN
13026
         Log_Action ( PatchId, 'patch_obsolete', UserId,
13027
                  'Obsolete patch. '|| ObsoleteComments );
13028
   ELSE
13029
      Log_Action ( PatchId, 'patch_obsolete', UserId,
13030
                  'Undo patch obsolete.' );
13031
   END IF;  */
13032
   END;
13033
 
13034
/*-------------------------------------------------------------------------------------------------------*/
13035
   PROCEDURE add_process (
13036
      nprocid         IN   processes.proc_id%TYPE,
13037
      shealthtag      IN   processes.proc_name%TYPE,
13038
      sprocdesc       IN   processes.proc_description%TYPE,
13039
      scmdinterface   IN   processes.run_as%TYPE,
13040
      spkgowner       IN   processes.pkg_owner%TYPE,
13041
      sisinterface    IN   processes.is_interface%TYPE,
13042
      npvid           IN   package_processes.pv_id%TYPE,
13043
      nuserid         IN   NUMBER
13044
   )
13045
   IS
13046
      pkgname   VARCHAR2 (100);
13047
/*Rupesh Release on 17/05/2006*/
13048
   BEGIN
13049
      INSERT INTO processes
13050
                  (proc_id, proc_name, proc_description, run_as, pkg_owner,
13051
                   is_interface
13052
                  )
13053
           VALUES (nprocid, shealthtag, sprocdesc, scmdinterface, spkgowner,
13054
                   sisinterface
13055
                  );
13056
 
13057
      pk_package.add_package_process (nprocid, npvid, nuserid);
13058
   END;
13059
 
13060
/*-------------------------------------------------------------------------------------------------------*/
13061
   PROCEDURE add_package_process (
13062
      nprocidlist   IN   VARCHAR2,
13063
      npvid         IN   package_processes.pv_id%TYPE,
13064
      nuserid       IN   NUMBER
13065
   )
13066
   IS
13067
      processname   VARCHAR2 (4000);
13068
 
13069
/*Rupesh Release on 17/05/2006*/
13070
      CURSOR proc_cur
13071
      IS
13072
         SELECT prc.proc_id
13073
           FROM processes prc
13074
          WHERE prc.proc_id IN (
13075
                   SELECT *
13076
                     FROM THE
13077
                             (SELECT CAST
13078
                                        (in_list_number (nprocidlist) AS relmgr_number_tab_t
13079
                                        )
13080
                                FROM DUAL
13081
                             ));
13082
 
13083
      proc_rec      proc_cur%ROWTYPE;
13084
   BEGIN
13085
      OPEN proc_cur;
13086
 
13087
      FETCH proc_cur
13088
       INTO proc_rec;
13089
 
13090
      WHILE proc_cur%FOUND
13091
      LOOP
13092
         INSERT INTO package_processes
13093
                     (proc_id, pv_id
13094
                     )
13095
              VALUES (proc_rec.proc_id, npvid
13096
                     );
13097
 
13098
         SELECT prc.proc_name
13099
           INTO processname
13100
           FROM processes prc
13101
          WHERE prc.proc_id = proc_rec.proc_id;
13102
 
13103
         -- Log Action --
13104
         log_action (npvid,
13105
                     'process_add',
13106
                     nuserid,
13107
                     'Added process with health tag ' || processname
13108
                    );
13109
 
13110
         FETCH proc_cur
13111
          INTO proc_rec;
13112
      END LOOP;
13113
   END;
13114
 
13115
/*-------------------------------------------------------------------------------------------------------*/
13116
   PROCEDURE remove_process (
13117
      nprocid   IN   package_processes.proc_id%TYPE,
13118
      npvid     IN   package_processes.pv_id%TYPE,
13119
      nuserid   IN   NUMBER
13120
   )
13121
   IS
13122
      processname   VARCHAR2 (4000);
13123
/* Rupesh Release on 17/05/2006*/
13124
   BEGIN
13125
      SELECT prc.proc_name
13126
        INTO processname
13127
        FROM processes prc
13128
       WHERE prc.proc_id = nprocid;
13129
 
13130
      DELETE FROM package_processes
13131
            WHERE proc_id = nprocid AND pv_id = npvid;
13132
 
13133
      -- Log Action --
13134
      log_action (npvid,
13135
                  'process_remove',
13136
                  nuserid,
13137
                  'Removed process with health tag ' || processname
13138
                 );
13139
   END;
13140
/*-------------------------------------------------------------------------------------------------------*/
13141
  /* 
13142
  Author: Rupesh Solanki
13143
  Purpose: To move package versions from one release to another
13144
  Release: 4th September 2006 
13145
 
13146
  */
13147
  PROCEDURE move_package (
13148
   	  npvid  			  IN package_versions.pv_id%TYPE,
13149
	  nrtagid 			  IN release_tags.rtag_id%TYPE,
13150
	  nnewrtagid 		  IN release_tags.rtag_id%TYPE,
13151
	  nuserid			  IN NUMBER	
13152
  )	
13153
  IS	
13154
 
13155
  oldrtag_name VARCHAR2(4000);
13156
  newrtag_name VARCHAR2(4000);
13157
 
13158
 
13159
 
13160
  BEGIN
13161
 
13162
 
13163
  SELECT rtag_name into oldrtag_name
13164
  FROM RELEASE_TAGS
13165
  WHERE rtag_id = nrtagid;
13166
 
13167
  SELECT rtag_name into newrtag_name
13168
  FROM RELEASE_TAGS
13169
  WHERE rtag_id = nnewrtagid;
13170
 
13171
  /* Table Work In Progress*/
13172
  	   UPDATE WORK_IN_PROGRESS
13173
	   SET RTAG_ID = nnewrtagid
13174
	   WHERE RTAG_ID = nrtagid
13175
	   AND PV_ID = npvid;
13176
 
13177
  /* Table PLANNED*/	
13178
  	   UPDATE PLANNED
13179
	   SET RTAG_ID = nnewrtagid
13180
	   WHERE RTAG_ID = nrtagid
13181
	   AND PV_ID = npvid;   
13182
 
13183
      -- Log Action --
13184
      log_action (npvid,
13185
                  'move_package_version',
13186
                  nuserid,
13187
                  'Moved package version from ' || oldrtag_name || ' to ' || newrtag_name
13188
                 );  	   	     
13189
 
13190
 
13191
  END;
13192
 
13193
/*-------------------------------------------------------------------------------------------------------*/
13194
PROCEDURE modify_product_state (
13195
   	  npvid IN package_versions.pv_id%TYPE,
13196
	  nstateid IN product_states.state_id%TYPE,
13197
	  nuserid IN NUMBER
13198
   ) IS
13199
 
13200
   sStateName VARCHAR(4000);
13201
 
13202
  /* 
13203
  Author: Rupesh Solanki
13204
  Purpose: To modify the product state from integration to test to deployment
13205
  Release: 25th January 2006 
13206
  */   
13207
 
13208
  BEGIN
13209
 
13210
  UPDATE PACKAGE_VERSIONS
13211
  SET PRODUCT_STATE = nstateid
13212
  WHERE PV_ID = npvid;
13213
 
13214
 
13215
  SELECT STATE INTO sStateName
13216
  FROM PRODUCT_STATES 
13217
  WHERE STATE_ID = nstateid;
13218
 
13219
  -- Log Action --
13220
  log_action (npvid,
13221
              'modify_product_state',
13222
               nuserid,
13223
               sStateName
13224
              );  
13225
 
13226
 
13227
  END;			  	   	     
13228
/*-------------------------------------------------------------------------------------------------------*/   
13229
END pk_package_Test;
1374 dpurdie 13230
/
13231
--------------------------------------------------------
13232
--  DDL for Package Body PK_ENVIRONMENT_TEST
13233
--------------------------------------------------------
1373 dpurdie 13234
 
13235
  CREATE OR REPLACE PACKAGE BODY "PK_ENVIRONMENT_TEST" 
13236
IS
13237
/*
13238
------------------------------
13239
||  Last Modified:  Rupesh Solanki
13240
||  Modified Date:  29/Jan/2007
13241
||  Body Version:   1.1
13242
------------------------------
13243
*/
13244
 
13245
   /*-------------------------------------------------------------------------------------------------------*/
13246
   FUNCTION select_environment_area (cdlock IN package_versions.dlocked%TYPE)
13247
      RETURN NUMBER
13248
   IS
13249
   BEGIN
13250
       /*
13251
      || N - unlocked
13252
      || Y - release and locked
13253
      || P - penging approval
13254
      || A - approved package ready for auto-build
13255
      */
13256
      IF cdlock = 'N' OR cdlock = 'R'
13257
      THEN
13258
         -- WORK IN PROGRESS --
13259
         RETURN 0;
13260
      ELSIF cdlock = 'P' OR cdlock = 'A'
13261
      THEN
13262
         -- PENDING --
13263
         RETURN 1;
13264
      ELSIF cdlock = 'Y'
13265
      THEN
13266
         -- RELEASED --
13267
         RETURN 2;
13268
      ELSE
13269
         -- NOT FOUND --
13270
         raise_application_error
13271
                         (-20000,
13272
                             'Cannot decide where to place package. [cDlock='
13273
                          || cdlock
13274
                          || ']'
13275
                         );
13276
      END IF;
13277
   END;
13278
 
13279
/*-------------------------------------------------------------------------------------------------------*/
13280
   FUNCTION get_package_area (pvid IN NUMBER, rtagid IN NUMBER)
13281
      RETURN NUMBER
13282
   IS
13283
      envtab    NUMBER            := -1;
13284
 
13285
      CURSOR curarea
13286
      IS
13287
         SELECT 2 AS envtab
13288
           FROM release_content rc
13289
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13290
         UNION
13291
         SELECT 0 AS envtab
13292
           FROM work_in_progress wip
13293
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13294
         UNION
13295
         SELECT 1 AS envtab
13296
           FROM planned pl
13297
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13298
 
13299
      recarea   curarea%ROWTYPE;
13300
   BEGIN
13301
      OPEN curarea;
13302
 
13303
      FETCH curarea
13304
       INTO recarea;
13305
 
13306
      IF curarea%FOUND
13307
      THEN
13308
         envtab := recarea.envtab;
13309
      END IF;
13310
 
13311
      CLOSE curarea;
13312
 
13313
      RETURN envtab;
13314
   END;
13315
 
13316
/*-------------------------------------------------------------------------------------------------------*/
13317
   FUNCTION get_view_location (pvid IN NUMBER, rtagid IN NUMBER)
13318
      RETURN NUMBER
13319
   IS
13320
      ispatch   package_versions.dlocked%TYPE;
13321
      viewid    NUMBER                          := -1;
13322
 
13323
      CURSOR curview
13324
      IS
13325
         SELECT rc.base_view_id AS view_id
13326
           FROM release_content rc
13327
          WHERE rc.rtag_id = rtagid AND rc.pv_id = pvid
13328
         UNION
13329
         SELECT wip.view_id AS view_id
13330
           FROM work_in_progress wip
13331
          WHERE wip.rtag_id = rtagid AND wip.pv_id = pvid
13332
         UNION
13333
         SELECT pl.view_id AS view_id
13334
           FROM planned pl
13335
          WHERE pl.rtag_id = rtagid AND pl.pv_id = pvid;
13336
 
13337
      recview   curview%ROWTYPE;
13338
   BEGIN
13339
      -- Get dlock state
13340
      SELECT pv.is_patch
13341
        INTO ispatch
13342
        FROM package_versions pv
13343
       WHERE pv.pv_id = pvid;
13344
 
13345
      -- Decide which view id should package go under.
13346
      IF (ispatch != 'Y') OR (ispatch IS NULL)
13347
      THEN
13348
         -- Get VIEW ID of Package
13349
         OPEN curview;
13350
 
13351
         FETCH curview
13352
          INTO recview;
13353
 
13354
         IF curview%FOUND
13355
         THEN
13356
            viewid := recview.view_id;
13357
         ELSE
13358
            raise_application_error
13359
               (-20000,
13360
                   'Cannot find view_id to proceed. [PvId='
13361
                || pvid
13362
                || ']. The current version may not exist in the release anymore.'
13363
               );
13364
         END IF;
13365
 
13366
         CLOSE curview;
13367
      ELSE
13368
         -- Get VIEW ID of Patch (view id of parent package)
13369
         SELECT rc.base_view_id
13370
           INTO viewid
13371
           FROM release_content rc, package_patches ppv
13372
          WHERE rc.rtag_id = rtagid
13373
            AND rc.pv_id = ppv.pv_id
13374
            AND ppv.patch_id = pvid;
13375
      END IF;
13376
 
13377
      RETURN viewid;
13378
   END;
13379
 
13380
/*-------------------------------------------------------------------------------------------------------*/
13381
   PROCEDURE add_package (
13382
      pvid     IN   NUMBER,
13383
      viewid   IN   NUMBER,
13384
      rtagid   IN   NUMBER,
13385
      userid   IN   NUMBER
13386
   )
13387
   IS
13388
      dlocked   package_versions.dlocked%TYPE;
13389
      envtab    NUMBER;
13390
   BEGIN
13391
      IF can_edit_pkg_in_project (pvid, rtagid) = 1
13392
      THEN
13393
         -- Get dlock state
13394
         SELECT pv.dlocked
13395
           INTO dlocked
13396
           FROM package_versions pv
13397
          WHERE pv.pv_id = pvid;
13398
 
13399
         -- Get which area should go under
13400
         envtab := select_environment_area (dlocked);
13401
         -- Log
13402
         log_action (pvid, 'action', userid, 'Start of Package Add...');
13403
 
13404
         -- Remove Package
13405
         IF envtab = 0
13406
         THEN
13407
            -- WORK IN PROGRESS --
13408
            pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
13409
         ELSIF envtab = 1
13410
         THEN
13411
            -- PENDING --
13412
            pk_planned.add_package (pvid, viewid, rtagid, userid);
13413
         ELSIF envtab = 2
13414
         THEN
13415
            -- RELEASED --
13416
            -- NOTE: this package will be replaced with matching package
13417
            pk_release.add_package (pvid, viewid, rtagid, userid);
13418
            -- Now do post Release Actions
13419
            pk_release.run_post_actions (pvid, rtagid);
13420
         END IF;
13421
 
13422
         -- Log
13423
         log_action (pvid, 'action', userid, 'End of Package Add...');
13424
      END IF;
13425
   END;
13426
 
13427
/*-------------------------------------------------------------------------------------------------------*/
13428
   PROCEDURE add_package_bulk (
13429
      pvidlist   IN   VARCHAR2,
13430
      viewid     IN   NUMBER,
13431
      rtagid     IN   NUMBER,
13432
      userid     IN   NUMBER
13433
   )
13434
   IS
13435
      nidcollector   relmgr_number_tab_t            := relmgr_number_tab_t
13436
                                                                          ();
13437
      dlocked        package_versions.dlocked%TYPE;
13438
      pvid           NUMBER;
13439
      envtab         NUMBER;
13440
   BEGIN
13441
      /*--------------- Business Rules Here -------------------*/
13442
      IF (pvidlist IS NULL)
13443
      THEN
13444
         raise_application_error (-20000,
13445
                                  'Please select at least one package.'
13446
                                 );
13447
      END IF;
13448
 
13449
/*-------------------------------------------------------*/
13450
      nidcollector := in_list_number (pvidlist);
13451
 
13452
      FOR i IN 1 .. nidcollector.COUNT
13453
      LOOP
13454
         pvid := nidcollector (i);
13455
         add_package (pvid, viewid, rtagid, userid);
13456
      END LOOP;
13457
   END;
13458
 
13459
/*-------------------------------------------------------------------------------------------------------*/
13460
   PROCEDURE replace_package (
13461
      newpvid   IN   NUMBER,
13462
      oldpvid   IN   NUMBER,
13463
      rtagid    IN   NUMBER,
13464
      userid    IN   NUMBER
13465
   )
13466
   IS
13467
      dlocked        package_versions.dlocked%TYPE;
13468
      viewid         NUMBER;
13469
      envtab         NUMBER;
13470
      ROWCOUNT       NUMBER;
13471
      creleasemode   CHAR (1);
13472
      npkgid         NUMBER;
13473
   BEGIN
13474
      /*--------------- Business Rules Here -------------------*/
13475
      -- Check if oldPvId exists. It could have been removed
13476
      SELECT COUNT (pv.pv_id)
13477
        INTO ROWCOUNT
13478
        FROM package_versions pv
13479
       WHERE pv.pv_id = oldpvid;
13480
 
13481
/*-------------------------------------------------------*/
13482
 
13483
      /* This procedure is usually used by "History" option in Release Manager */
13484
 
13485
      -- Get dlock state
13486
      SELECT pv.dlocked
13487
        INTO dlocked
13488
        FROM package_versions pv
13489
       WHERE pv.pv_id = newpvid;
13490
 
13491
      -- Get VIEW_ID ---
13492
      IF ROWCOUNT = 1
13493
      THEN
13494
         viewid := get_view_location (oldpvid, rtagid);
13495
      ELSE
13496
         -- Set ViewID to default
13497
         viewid := 7;
13498
      END IF;
13499
 
13500
      -- Get which area should go under
13501
      envtab := select_environment_area (dlocked);
13502
      -- Log
13503
      log_action (oldpvid, 'action', userid, 'Start of Package Replace...');
13504
 
13505
      -- Replace package
13506
      IF envtab = 0
13507
      THEN
13508
         -- WORK IN PROGRESS --
13509
 
13510
         -- Delete old package
13511
         pk_work_in_progress.remove_package (oldpvid, rtagid, userid);
13512
         -- Add new package
13513
         pk_work_in_progress.add_package (newpvid, viewid, rtagid, userid);
13514
      ELSIF envtab = 1
13515
      THEN
13516
         -- PENDING --
13517
 
13518
         -- Delete old package
13519
         pk_planned.remove_package (oldpvid, rtagid, userid);
13520
         -- Add new package
13521
         pk_planned.add_package (newpvid, viewid, rtagid, userid);
13522
      ELSIF envtab = 2
13523
      THEN
13524
         -- RELEASED --
13525
 
13526
         -- Delete old package
13527
         pk_release.remove_package (oldpvid, rtagid, userid);
13528
         -- Add new package
13529
         pk_release.add_package (newpvid, viewid, rtagid, userid);
13530
         -- Now do post Release Actions
13531
         pk_release.run_post_actions (newpvid, rtagid);
13532
      END IF;
13533
 
13534
      -- Log
13535
      log_action (oldpvid, 'action', userid, 'End of Package Replace...');
13536
   END;
13537
 
13538
/*-------------------------------------------------------------------------------------------------------*/
13539
   FUNCTION remove_package (
13540
      pvid          IN   NUMBER,
13541
      rtagid        IN   NUMBER,
13542
      userid        IN   NUMBER,
13543
      forceremove   IN   CHAR
13544
   )
13545
      RETURN NUMBER
13546
   IS
13547
      envtab        NUMBER;
13548
      isused        BOOLEAN;
13549
      recordcount   NUMBER;
13550
   BEGIN
13551
/*--------------- Business Rules Here -------------------*/
13552
/*-------------------------------------------------------*/
13553
 
13554
      -- Find location of package
13555
      envtab := get_package_area (pvid, rtagid);
13556
 
13557
      -- Remove Package
13558
      IF envtab = 0
13559
      THEN
13560
         -- WORK IN PROGRESS --
13561
         -- Delete package
13562
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
13563
         RETURN 0;
13564
      ELSIF envtab = 1
13565
      THEN
13566
         -- PENDING --
13567
         -- Delete package
13568
         pk_planned.remove_package (pvid, rtagid, userid);
13569
         RETURN 0;
13570
      ELSIF envtab = 2
13571
      THEN
13572
         -- RELEASED --
13573
 
13574
         -- Check if is used by other packages
13575
         isused := TRUE;
13576
 
13577
         IF forceremove = 'N'
13578
         THEN
13579
            SELECT COUNT (pv.pv_id)
13580
              INTO recordcount
13581
              FROM (SELECT dpv.pkg_id, dpv.v_ext
13582
                      FROM release_content rc,
13583
                           package_dependencies dep,
13584
                           package_versions dpv
13585
                     WHERE rc.rtag_id = rtagid
13586
                       AND rc.pv_id = dep.pv_id
13587
                       AND dep.dpv_id = dpv.pv_id) rdep,
13588
                   package_versions pv
13589
             WHERE pv.pkg_id = rdep.pkg_id
13590
               AND NVL (pv.v_ext, '|LINK_A_NULL|') =
13591
                                             NVL (rdep.v_ext, '|LINK_A_NULL|')
13592
               AND pv.pv_id = pvid;
13593
 
13594
            IF recordcount > 0
13595
            THEN
13596
               RETURN 1;                    -- Return 1 as package being used
13597
            ELSE
13598
               isused := FALSE;
13599
            END IF;
13600
         END IF;
13601
 
13602
         IF forceremove = 'Y' OR NOT isused
13603
         THEN
13604
            -- Delete old package
13605
            pk_release.remove_package (pvid, rtagid, userid);
13606
            -- Now do post Release Actions
13607
            pk_release.run_post_actions (pvid, rtagid);
13608
            RETURN 0;
13609
         END IF;
13610
      END IF;
13611
   END;
13612
 
13613
/*-------------------------------------------------------------------------------------------------------*/
13614
   PROCEDURE get_environment_items (
13615
      viewtype           IN       NUMBER,
13616
      userid             IN       NUMBER,
13617
      rtagid             IN       NUMBER,
13618
      sviewidshowlist    IN       VARCHAR2,
13619
      ntruerecordcount   OUT      NUMBER,
13620
      recordset          OUT      typecur
13621
   )
13622
   IS
13623
   BEGIN
13624
      -- Get true record count because views can give false count
13625
      SELECT COUNT (pl.pv_id)
13626
        INTO ntruerecordcount
13627
        FROM environment_view pl
13628
       WHERE pl.rtag_id = rtagid;
13629
 
13630
      IF viewtype = 1
13631
      THEN
13632
         /*--- GUEST VIEW ---*/
13633
         OPEN recordset FOR
13634
            SELECT   *
13635
                FROM (
13636
                      /* Base Views collapsed */
13637
                      SELECT DISTINCT vi.view_id, vi.view_name,
13638
                                      TO_NUMBER (NULL) AS pkg_state,
13639
                                      TO_NUMBER (NULL) AS deprecated_state,
13640
                                      TO_NUMBER (NULL) AS pv_id,
13641
                                      NULL AS pkg_name, NULL AS pkg_version,
13642
                                      NULL AS dlocked, NULL AS pv_description
13643
                                 FROM environment_view rel, views vi
13644
                                WHERE rel.view_id = vi.view_id
13645
                                  AND rtag_id = rtagid
13646
                                  AND rel.view_id NOT IN (
13647
                                         SELECT *
13648
                                           FROM THE
13649
                                                   (SELECT CAST
13650
                                                              (in_list_number
13651
                                                                  (sviewidshowlist
13652
                                                                  ) AS relmgr_number_tab_t
13653
                                                              )
13654
                                                      FROM DUAL
13655
                                                   ))
13656
                      UNION
13657
                      /* Base Views expanded */
13658
                      SELECT vi.view_id, vi.view_name,
13659
                             DECODE (rel.pkg_state,
13660
                                     NULL, 0,
13661
                                     rel.pkg_state
13662
                                    ) AS pkg_state,
13663
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13664
                             pv.pkg_version, pv.dlocked, pv.pv_description
13665
                        FROM environment_view rel,
13666
                             PACKAGES pkg,
13667
                             package_versions pv,
13668
                             views vi
13669
                       WHERE pv.pkg_id = pkg.pkg_id
13670
                         AND rel.pv_id = pv.pv_id
13671
                         AND rel.view_id = vi.view_id
13672
                         AND rel.view_id IN (
13673
                                SELECT *
13674
                                  FROM THE
13675
                                          (SELECT CAST
13676
                                                     (in_list_number
13677
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13678
                                                     )
13679
                                             FROM DUAL
13680
                                          ))
13681
                         AND rtag_id = rtagid) ord
13682
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13683
      ELSIF viewtype = 2
13684
      THEN
13685
         /*--- PERSONAL VIEW ---*/
13686
         OPEN recordset FOR
13687
            SELECT   *
13688
                FROM (
13689
                      /* Base Views collapsed */
13690
                      SELECT DISTINCT vi.view_id, vi.view_name,
13691
                                      TO_NUMBER (NULL) AS pkg_state,
13692
                                      TO_NUMBER (NULL) AS deprecated_state,
13693
                                      TO_NUMBER (NULL) AS pv_id,
13694
                                      NULL AS pkg_name, NULL AS pkg_version,
13695
                                      NULL AS dlocked, NULL AS pv_description
13696
                                 FROM environment_view rel,
13697
                                      view_settings vs,
13698
                                      views vi
13699
                                WHERE rel.view_id = vi.view_id
13700
                                  AND vs.view_id = rel.view_id
13701
                                  AND vs.user_id = userid
13702
                                  AND rtag_id = rtagid
13703
                                  AND rel.view_id NOT IN (
13704
                                         SELECT *
13705
                                           FROM THE
13706
                                                   (SELECT CAST
13707
                                                              (in_list_number
13708
                                                                  (sviewidshowlist
13709
                                                                  ) AS relmgr_number_tab_t
13710
                                                              )
13711
                                                      FROM DUAL
13712
                                                   ))
13713
                      UNION
13714
                      /* Base Views expanded */
13715
                      SELECT vi.view_id, vi.view_name,
13716
                             DECODE (rel.pkg_state,
13717
                                     NULL, 0,
13718
                                     rel.pkg_state
13719
                                    ) AS pkg_state,
13720
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13721
                             pv.pkg_version, pv.dlocked, pv.pv_description
13722
                        FROM environment_view rel,
13723
                             PACKAGES pkg,
13724
                             package_versions pv,
13725
                             views vi,
13726
                             view_settings vs
13727
                       WHERE pv.pkg_id = pkg.pkg_id
13728
                         AND rel.pv_id = pv.pv_id
13729
                         AND rel.view_id = vi.view_id
13730
                         AND vs.view_id = vi.view_id
13731
                         AND vs.user_id = userid
13732
                         AND rel.view_id IN (
13733
                                SELECT *
13734
                                  FROM THE
13735
                                          (SELECT CAST
13736
                                                     (in_list_number
13737
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13738
                                                     )
13739
                                             FROM DUAL
13740
                                          ))
13741
                         AND rtag_id = rtagid
13742
                      UNION
13743
                      /* Private Views collapsed */
13744
                      SELECT vi.view_id, vi.view_name,
13745
                             TO_NUMBER (NULL) AS pkg_state,
13746
                             TO_NUMBER (NULL) AS deprecated_state,
13747
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13748
                             NULL AS pkg_version, NULL AS dlocked,
13749
                             NULL AS pv_description
13750
                        FROM view_settings vs,
13751
                             view_def vd,
13752
                             views vi,
13753
                             environment_view rel,
13754
                             package_versions pv
13755
                       WHERE vs.view_id = vi.view_id
13756
                         AND rel.pv_id = pv.pv_id
13757
                         AND vd.pkg_id = pv.pkg_id
13758
                         AND vd.view_id = vi.view_id
13759
                         AND vi.base_view = 'N'
13760
                         AND rel.rtag_id = rtagid
13761
                         AND vs.user_id = userid
13762
                         AND vi.view_id NOT IN (
13763
                                SELECT *
13764
                                  FROM THE
13765
                                          (SELECT CAST
13766
                                                     (in_list_number
13767
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13768
                                                     )
13769
                                             FROM DUAL
13770
                                          ))
13771
                      UNION
13772
                      /* Private Views expanded */
13773
                      SELECT vi.view_id, vi.view_name,
13774
                             DECODE (rel.pkg_state,
13775
                                     NULL, 0,
13776
                                     rel.pkg_state
13777
                                    ) AS pkg_state,
13778
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13779
                             pv.pkg_version, pv.dlocked, pv.pv_description
13780
                        FROM users usr,
13781
                             view_settings vs,
13782
                             view_def vd,
13783
                             views vi,
13784
                             environment_view rel,
13785
                             PACKAGES pkg,
13786
                             package_versions pv
13787
                       WHERE vs.user_id = usr.user_id
13788
                         AND vs.view_id = vi.view_id
13789
                         AND vd.view_id = vi.view_id
13790
                         AND pv.pkg_id = pkg.pkg_id
13791
                         AND rel.pv_id = pv.pv_id
13792
                         AND rel.rtag_id = rtagid
13793
                         AND vd.pkg_id = pkg.pkg_id
13794
                         AND vi.base_view = 'N'
13795
                         AND vi.view_id IN (
13796
                                SELECT *
13797
                                  FROM THE
13798
                                          (SELECT CAST
13799
                                                     (in_list_number
13800
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13801
                                                     )
13802
                                             FROM DUAL
13803
                                          ))
13804
                         AND usr.user_id = userid) ord
13805
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13806
      END IF;
13807
   END;
13808
 
13809
/*-------------------------------------------------------------------------------------------------------*/
13810
   PROCEDURE get_released_items (
13811
      viewtype           IN       NUMBER,
13812
      userid             IN       NUMBER,
13813
      rtagid             IN       NUMBER,
13814
      sviewidshowlist    IN       VARCHAR2,
13815
      ntruerecordcount   OUT      NUMBER,
13816
      recordset          OUT      typecur
13817
   )
13818
   IS
13819
   BEGIN
13820
      -- Get true record count because views can give false count
13821
      SELECT COUNT (rc.pv_id)
13822
        INTO ntruerecordcount
13823
        FROM release_content rc
13824
       WHERE rc.rtag_id = rtagid;
13825
 
13826
      IF viewtype = 1
13827
      THEN
13828
         /*--- GUEST VIEW ---*/
13829
         OPEN recordset FOR
13830
            SELECT   *
13831
                FROM (
13832
                      /* Base Views collapsed */
13833
                      SELECT DISTINCT vi.view_id, vi.view_name,
13834
                                      TO_NUMBER (NULL) AS pkg_state,
13835
                                      TO_NUMBER (NULL) AS deprecated_state,
13836
                                      TO_NUMBER (NULL) AS pv_id,
13837
                                      NULL AS pkg_name, NULL AS pkg_version,
13838
                                      NULL AS dlocked, NULL AS pv_description
13839
                                 FROM release_content rel, views vi
13840
                                WHERE rel.base_view_id = vi.view_id
13841
                                  AND rtag_id = rtagid
13842
                                  AND rel.base_view_id NOT IN (
13843
                                         SELECT *
13844
                                           FROM THE
13845
                                                   (SELECT CAST
13846
                                                              (in_list_number
13847
                                                                  (sviewidshowlist
13848
                                                                  ) AS relmgr_number_tab_t
13849
                                                              )
13850
                                                      FROM DUAL
13851
                                                   ))
13852
                      UNION
13853
                      /* Base Views expanded */
13854
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13855
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13856
                             pv.pkg_version, pv.dlocked, pv.pv_description
13857
                        FROM release_content rel,
13858
                             PACKAGES pkg,
13859
                             package_versions pv,
13860
                             views vi
13861
                       WHERE pv.pkg_id = pkg.pkg_id
13862
                         AND rel.pv_id = pv.pv_id
13863
                         AND rel.base_view_id = vi.view_id
13864
                         AND rel.base_view_id IN (
13865
                                SELECT *
13866
                                  FROM THE
13867
                                          (SELECT CAST
13868
                                                     (in_list_number
13869
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13870
                                                     )
13871
                                             FROM DUAL
13872
                                          ))
13873
                         AND rtag_id = rtagid) ord
13874
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13875
      ELSIF viewtype = 2
13876
      THEN
13877
         /*--- PERSONAL VIEW ---*/
13878
         OPEN recordset FOR
13879
            SELECT   *
13880
                FROM (
13881
                      /* Base Views collapsed */
13882
                      SELECT DISTINCT vi.view_id, vi.view_name,
13883
                                      TO_NUMBER (NULL) AS pkg_state,
13884
                                      TO_NUMBER (NULL) AS deprecated_state,
13885
                                      TO_NUMBER (NULL) AS pv_id,
13886
                                      NULL AS pkg_name, NULL AS pkg_version,
13887
                                      NULL AS dlocked, NULL AS pv_description
13888
                                 FROM release_content rel,
13889
                                      view_settings vs,
13890
                                      views vi
13891
                                WHERE rel.base_view_id = vi.view_id
13892
                                  AND vs.view_id = rel.base_view_id
13893
                                  AND vs.user_id = userid
13894
                                  AND rtag_id = rtagid
13895
                                  AND rel.base_view_id NOT IN (
13896
                                         SELECT *
13897
                                           FROM THE
13898
                                                   (SELECT CAST
13899
                                                              (in_list_number
13900
                                                                  (sviewidshowlist
13901
                                                                  ) AS relmgr_number_tab_t
13902
                                                              )
13903
                                                      FROM DUAL
13904
                                                   ))
13905
                      UNION
13906
                      /* Base Views expanded */
13907
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13908
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13909
                             pv.pkg_version, pv.dlocked, pv.pv_description
13910
                        FROM release_content rel,
13911
                             PACKAGES pkg,
13912
                             package_versions pv,
13913
                             views vi,
13914
                             view_settings vs
13915
                       WHERE pv.pkg_id = pkg.pkg_id
13916
                         AND rel.pv_id = pv.pv_id
13917
                         AND rel.base_view_id = vi.view_id
13918
                         AND vs.view_id = vi.view_id
13919
                         AND vs.user_id = userid
13920
                         AND rel.base_view_id IN (
13921
                                SELECT *
13922
                                  FROM THE
13923
                                          (SELECT CAST
13924
                                                     (in_list_number
13925
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13926
                                                     )
13927
                                             FROM DUAL
13928
                                          ))
13929
                         AND rtag_id = rtagid
13930
                      UNION
13931
                      /* Private Views collapsed */
13932
                      SELECT vi.view_id, vi.view_name,
13933
                             TO_NUMBER (NULL) AS pkg_state,
13934
                             TO_NUMBER (NULL) AS deprecated_state,
13935
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
13936
                             NULL AS pkg_version, NULL AS dlocked,
13937
                             NULL AS pv_description
13938
                        FROM view_settings vs,
13939
                             view_def vd,
13940
                             views vi,
13941
                             release_content rel,
13942
                             package_versions pv
13943
                       WHERE vs.view_id = vi.view_id
13944
                         AND rel.pv_id = pv.pv_id
13945
                         AND vd.pkg_id = pv.pkg_id
13946
                         AND vd.view_id = vi.view_id
13947
                         AND vi.base_view = 'N'
13948
                         AND rel.rtag_id = rtagid
13949
                         AND vs.user_id = userid
13950
                         AND vi.view_id NOT IN (
13951
                                SELECT *
13952
                                  FROM THE
13953
                                          (SELECT CAST
13954
                                                     (in_list_number
13955
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13956
                                                     )
13957
                                             FROM DUAL
13958
                                          ))
13959
                      UNION
13960
                      /* Private Views expanded */
13961
                      SELECT vi.view_id, vi.view_name, rel.pkg_state,
13962
                             rel.deprecated_state, pv.pv_id, pkg.pkg_name,
13963
                             pv.pkg_version, pv.dlocked, pv.pv_description
13964
                        FROM users usr,
13965
                             view_settings vs,
13966
                             view_def vd,
13967
                             views vi,
13968
                             release_content rel,
13969
                             PACKAGES pkg,
13970
                             package_versions pv
13971
                       WHERE vs.user_id = usr.user_id
13972
                         AND vs.view_id = vi.view_id
13973
                         AND vd.view_id = vi.view_id
13974
                         AND pv.pkg_id = pkg.pkg_id
13975
                         AND rel.pv_id = pv.pv_id
13976
                         AND rel.rtag_id = rtagid
13977
                         AND vd.pkg_id = pkg.pkg_id
13978
                         AND vi.base_view = 'N'
13979
                         AND vi.view_id IN (
13980
                                SELECT *
13981
                                  FROM THE
13982
                                          (SELECT CAST
13983
                                                     (in_list_number
13984
                                                              (sviewidshowlist) AS relmgr_number_tab_t
13985
                                                     )
13986
                                             FROM DUAL
13987
                                          ))
13988
                         AND usr.user_id = userid) ord
13989
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
13990
      END IF;
13991
   END;
13992
 
13993
/*-------------------------------------------------------------------------------------------------------*/
13994
   PROCEDURE get_work_in_progress_items (
13995
      viewtype           IN       NUMBER,
13996
      userid             IN       NUMBER,
13997
      rtagid             IN       NUMBER,
13998
      sviewidshowlist    IN       VARCHAR2,
13999
      ntruerecordcount   OUT      NUMBER,
14000
      recordset          OUT      typecur
14001
   )
14002
   IS
14003
   BEGIN
14004
      -- Get true record count because views can give false count
14005
      SELECT COUNT (wip.pv_id)
14006
        INTO ntruerecordcount
14007
        FROM work_in_progress wip
14008
       WHERE wip.rtag_id = rtagid;
14009
 
14010
      IF viewtype = 1
14011
      THEN
14012
         /*--- GUEST VIEW ---*/
14013
         OPEN recordset FOR
14014
            SELECT   *
14015
                FROM (
14016
                      /* Base Views collapsed */
14017
                      SELECT DISTINCT vi.view_id, vi.view_name,
14018
                                      TO_NUMBER (NULL) AS pkg_state,
14019
                                      TO_NUMBER (NULL) AS deprecated_state,
14020
                                      TO_NUMBER (NULL) AS pv_id,
14021
                                      NULL AS pkg_name, NULL AS pkg_version,
14022
                                      NULL AS dlocked, NULL AS pv_description
14023
                                 FROM work_in_progress rel, views vi
14024
                                WHERE rel.view_id = vi.view_id
14025
                                  AND rtag_id = rtagid
14026
                                  AND rel.view_id NOT IN (
14027
                                         SELECT *
14028
                                           FROM THE
14029
                                                   (SELECT CAST
14030
                                                              (in_list_number
14031
                                                                  (sviewidshowlist
14032
                                                                  ) AS relmgr_number_tab_t
14033
                                                              )
14034
                                                      FROM DUAL
14035
                                                   ))
14036
                      UNION
14037
                      /* Base Views expanded */
14038
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14039
 
14040
                             --rel.pkg_state,
14041
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14042
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14043
                             pv.pv_description
14044
                        FROM work_in_progress rel,
14045
                             PACKAGES pkg,
14046
                             package_versions pv,
14047
                             views vi
14048
                       WHERE pv.pkg_id = pkg.pkg_id
14049
                         AND rel.pv_id = pv.pv_id
14050
                         AND rel.view_id = vi.view_id
14051
                         AND rel.view_id IN (
14052
                                SELECT *
14053
                                  FROM THE
14054
                                          (SELECT CAST
14055
                                                     (in_list_number
14056
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14057
                                                     )
14058
                                             FROM DUAL
14059
                                          ))
14060
                         AND rtag_id = rtagid) ord
14061
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14062
      ELSIF viewtype = 2
14063
      THEN
14064
         /*--- PERSONAL VIEW ---*/
14065
         OPEN recordset FOR
14066
            SELECT   *
14067
                FROM (
14068
                      /* Base Views collapsed */
14069
                      SELECT DISTINCT vi.view_id, vi.view_name,
14070
                                      TO_NUMBER (NULL) AS pkg_state,
14071
                                      TO_NUMBER (NULL) AS deprecated_state,
14072
                                      TO_NUMBER (NULL) AS pv_id,
14073
                                      NULL AS pkg_name, NULL AS pkg_version,
14074
                                      NULL AS dlocked, NULL AS pv_description
14075
                                 FROM work_in_progress rel,
14076
                                      view_settings vs,
14077
                                      views vi
14078
                                WHERE rel.view_id = vi.view_id
14079
                                  AND vs.view_id = rel.view_id
14080
                                  AND vs.user_id = userid
14081
                                  AND rtag_id = rtagid
14082
                                  AND rel.view_id NOT IN (
14083
                                         SELECT *
14084
                                           FROM THE
14085
                                                   (SELECT CAST
14086
                                                              (in_list_number
14087
                                                                  (sviewidshowlist
14088
                                                                  ) AS relmgr_number_tab_t
14089
                                                              )
14090
                                                      FROM DUAL
14091
                                                   ))
14092
                      UNION
14093
                      /* Base Views expanded */
14094
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14095
 
14096
                             --rel.pkg_state,
14097
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14098
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14099
                             pv.pv_description
14100
                        FROM work_in_progress rel,
14101
                             PACKAGES pkg,
14102
                             package_versions pv,
14103
                             views vi,
14104
                             view_settings vs
14105
                       WHERE pv.pkg_id = pkg.pkg_id
14106
                         AND rel.pv_id = pv.pv_id
14107
                         AND rel.view_id = vi.view_id
14108
                         AND vs.view_id = vi.view_id
14109
                         AND vs.user_id = userid
14110
                         AND rel.view_id IN (
14111
                                SELECT *
14112
                                  FROM THE
14113
                                          (SELECT CAST
14114
                                                     (in_list_number
14115
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14116
                                                     )
14117
                                             FROM DUAL
14118
                                          ))
14119
                         AND rtag_id = rtagid
14120
                      UNION
14121
                      /* Private Views collapsed */
14122
                      SELECT vi.view_id, vi.view_name,
14123
                             TO_NUMBER (NULL) AS pkg_state,
14124
                             TO_NUMBER (NULL) AS deprecated_state,
14125
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14126
                             NULL AS pkg_version, NULL AS dlocked,
14127
                             NULL AS pv_description
14128
                        FROM view_settings vs,
14129
                             view_def vd,
14130
                             views vi,
14131
                             work_in_progress rel,
14132
                             package_versions pv
14133
                       WHERE vs.view_id = vi.view_id
14134
                         AND rel.pv_id = pv.pv_id
14135
                         AND vd.pkg_id = pv.pkg_id
14136
                         AND vd.view_id = vi.view_id
14137
                         AND vi.base_view = 'N'
14138
                         AND rel.rtag_id = rtagid
14139
                         AND vs.user_id = userid
14140
                         AND vi.view_id NOT IN (
14141
                                SELECT *
14142
                                  FROM THE
14143
                                          (SELECT CAST
14144
                                                     (in_list_number
14145
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14146
                                                     )
14147
                                             FROM DUAL
14148
                                          ))
14149
                      UNION
14150
                      /* Private Views expanded */
14151
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14152
 
14153
                             --rel.pkg_state,
14154
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14155
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14156
                             pv.pv_description
14157
                        FROM users usr,
14158
                             view_settings vs,
14159
                             view_def vd,
14160
                             views vi,
14161
                             work_in_progress rel,
14162
                             PACKAGES pkg,
14163
                             package_versions pv
14164
                       WHERE vs.user_id = usr.user_id
14165
                         AND vs.view_id = vi.view_id
14166
                         AND vd.view_id = vi.view_id
14167
                         AND pv.pkg_id = pkg.pkg_id
14168
                         AND rel.pv_id = pv.pv_id
14169
                         AND rel.rtag_id = rtagid
14170
                         AND vd.pkg_id = pkg.pkg_id
14171
                         AND vi.base_view = 'N'
14172
                         AND vi.view_id IN (
14173
                                SELECT *
14174
                                  FROM THE
14175
                                          (SELECT CAST
14176
                                                     (in_list_number
14177
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14178
                                                     )
14179
                                             FROM DUAL
14180
                                          ))
14181
                         AND usr.user_id = userid) ord
14182
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14183
      END IF;
14184
   END;
14185
 
14186
/*-------------------------------------------------------------------------------------------------------*/
14187
   PROCEDURE get_pending_items (
14188
      viewtype           IN       NUMBER,
14189
      userid             IN       NUMBER,
14190
      rtagid             IN       NUMBER,
14191
      sviewidshowlist    IN       VARCHAR2,
14192
      ntruerecordcount   OUT      NUMBER,
14193
      recordset          OUT      typecur
14194
   )
14195
   IS
14196
   BEGIN
14197
      -- Get true record count because views can give false count
14198
      SELECT COUNT (pl.pv_id)
14199
        INTO ntruerecordcount
14200
        FROM planned pl
14201
       WHERE pl.rtag_id = rtagid;
14202
 
14203
      IF viewtype = 1
14204
      THEN
14205
         /*--- GUEST VIEW ---*/
14206
         OPEN recordset FOR
14207
            SELECT   *
14208
                FROM (
14209
                      /* Base Views collapsed */
14210
                      SELECT DISTINCT vi.view_id, vi.view_name,
14211
                                      TO_NUMBER (NULL) AS pkg_state,
14212
                                      TO_NUMBER (NULL) AS deprecated_state,
14213
                                      TO_NUMBER (NULL) AS pv_id,
14214
                                      NULL AS pkg_name, NULL AS pkg_version,
14215
                                      NULL AS dlocked, NULL AS pv_description
14216
                                 FROM planned rel, views vi
14217
                                WHERE rel.view_id = vi.view_id
14218
                                  AND rtag_id = rtagid
14219
                                  AND rel.view_id NOT IN (
14220
                                         SELECT *
14221
                                           FROM THE
14222
                                                   (SELECT CAST
14223
                                                              (in_list_number
14224
                                                                  (sviewidshowlist
14225
                                                                  ) AS relmgr_number_tab_t
14226
                                                              )
14227
                                                      FROM DUAL
14228
                                                   ))
14229
                      UNION
14230
                      /* Base Views expanded */
14231
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14232
 
14233
                             --rel.pkg_state,
14234
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14235
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14236
                             pv.pv_description
14237
                        FROM planned rel,
14238
                             PACKAGES pkg,
14239
                             package_versions pv,
14240
                             views vi
14241
                       WHERE pv.pkg_id = pkg.pkg_id
14242
                         AND rel.pv_id = pv.pv_id
14243
                         AND rel.view_id = vi.view_id
14244
                         AND rel.view_id IN (
14245
                                SELECT *
14246
                                  FROM THE
14247
                                          (SELECT CAST
14248
                                                     (in_list_number
14249
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14250
                                                     )
14251
                                             FROM DUAL
14252
                                          ))
14253
                         AND rtag_id = rtagid) ord
14254
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14255
      ELSIF viewtype = 2
14256
      THEN
14257
         /*--- PERSONAL VIEW ---*/
14258
         OPEN recordset FOR
14259
            SELECT   *
14260
                FROM (
14261
                      /* Base Views collapsed */
14262
                      SELECT DISTINCT vi.view_id, vi.view_name,
14263
                                      TO_NUMBER (NULL) AS pkg_state,
14264
                                      TO_NUMBER (NULL) AS deprecated_state,
14265
                                      TO_NUMBER (NULL) AS pv_id,
14266
                                      NULL AS pkg_name, NULL AS pkg_version,
14267
                                      NULL AS dlocked, NULL AS pv_description
14268
                                 FROM planned rel, view_settings vs, views vi
14269
                                WHERE rel.view_id = vi.view_id
14270
                                  AND vs.view_id = rel.view_id
14271
                                  AND vs.user_id = userid
14272
                                  AND rtag_id = rtagid
14273
                                  AND rel.view_id NOT IN (
14274
                                         SELECT *
14275
                                           FROM THE
14276
                                                   (SELECT CAST
14277
                                                              (in_list_number
14278
                                                                  (sviewidshowlist
14279
                                                                  ) AS relmgr_number_tab_t
14280
                                                              )
14281
                                                      FROM DUAL
14282
                                                   ))
14283
                      UNION
14284
                      /* Base Views expanded */
14285
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14286
 
14287
                             --rel.pkg_state,
14288
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14289
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14290
                             pv.pv_description
14291
                        FROM planned rel,
14292
                             PACKAGES pkg,
14293
                             package_versions pv,
14294
                             views vi,
14295
                             view_settings vs
14296
                       WHERE pv.pkg_id = pkg.pkg_id
14297
                         AND rel.pv_id = pv.pv_id
14298
                         AND rel.view_id = vi.view_id
14299
                         AND vs.view_id = vi.view_id
14300
                         AND vs.user_id = userid
14301
                         AND rel.view_id IN (
14302
                                SELECT *
14303
                                  FROM THE
14304
                                          (SELECT CAST
14305
                                                     (in_list_number
14306
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14307
                                                     )
14308
                                             FROM DUAL
14309
                                          ))
14310
                         AND rtag_id = rtagid
14311
                      UNION
14312
                      /* Private Views collapsed */
14313
                      SELECT vi.view_id, vi.view_name,
14314
                             TO_NUMBER (NULL) AS pkg_state,
14315
                             TO_NUMBER (NULL) AS deprecated_state,
14316
                             TO_NUMBER (NULL) AS pv_id, NULL AS pkg_name,
14317
                             NULL AS pkg_version, NULL AS dlocked,
14318
                             NULL AS pv_description
14319
                        FROM view_settings vs,
14320
                             view_def vd,
14321
                             views vi,
14322
                             planned rel,
14323
                             package_versions pv
14324
                       WHERE vs.view_id = vi.view_id
14325
                         AND rel.pv_id = pv.pv_id
14326
                         AND vd.pkg_id = pv.pkg_id
14327
                         AND vd.view_id = vi.view_id
14328
                         AND vi.base_view = 'N'
14329
                         AND rel.rtag_id = rtagid
14330
                         AND vs.user_id = userid
14331
                         AND vi.view_id NOT IN (
14332
                                SELECT *
14333
                                  FROM THE
14334
                                          (SELECT CAST
14335
                                                     (in_list_number
14336
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14337
                                                     )
14338
                                             FROM DUAL
14339
                                          ))
14340
                      UNION
14341
                      /* Private Views expanded */
14342
                      SELECT vi.view_id, vi.view_name, 0 AS pkg_state,
14343
 
14344
                             --rel.pkg_state,
14345
                             TO_NUMBER (NULL) AS deprecated_state, pv.pv_id,
14346
                             pkg.pkg_name, pv.pkg_version, pv.dlocked,
14347
                             pv.pv_description
14348
                        FROM users usr,
14349
                             view_settings vs,
14350
                             view_def vd,
14351
                             views vi,
14352
                             planned rel,
14353
                             PACKAGES pkg,
14354
                             package_versions pv
14355
                       WHERE vs.user_id = usr.user_id
14356
                         AND vs.view_id = vi.view_id
14357
                         AND vd.view_id = vi.view_id
14358
                         AND pv.pkg_id = pkg.pkg_id
14359
                         AND rel.pv_id = pv.pv_id
14360
                         AND rel.rtag_id = rtagid
14361
                         AND vd.pkg_id = pkg.pkg_id
14362
                         AND vi.base_view = 'N'
14363
                         AND vi.view_id IN (
14364
                                SELECT *
14365
                                  FROM THE
14366
                                          (SELECT CAST
14367
                                                     (in_list_number
14368
                                                              (sviewidshowlist) AS relmgr_number_tab_t
14369
                                                     )
14370
                                             FROM DUAL
14371
                                          ))
14372
                         AND usr.user_id = userid) ord
14373
            ORDER BY UPPER (ord.view_name), UPPER (ord.pkg_name);
14374
      END IF;
14375
   END;
14376
 
14377
/*-------------------------------------------------------------------------------------------------------*/
14378
   PROCEDURE get_view_content (
14379
      rtagid      IN       NUMBER,
14380
      viewid      IN       NUMBER,
14381
      recordset   OUT      typecur
14382
   )
14383
   IS
14384
      isbaseview   CHAR (1);
14385
   BEGIN
14386
      -- Check if the view is BASE VIEW
14387
      SELECT vi.base_view
14388
        INTO isbaseview
14389
        FROM views vi
14390
       WHERE vi.view_id = viewid;
14391
 
14392
      IF (isbaseview = 'Y')
14393
      THEN
14394
         -- Get Base view content
14395
         OPEN recordset FOR
14396
            SELECT   DECODE (rel.pkg_state,
14397
                             NULL, 0,
14398
                             rel.pkg_state
14399
                            ) AS pkg_state,
14400
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14401
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14402
                     pv.build_type
14403
                FROM environment_view rel, PACKAGES pkg, package_versions pv
14404
               WHERE pv.pkg_id = pkg.pkg_id
14405
                 AND rel.pv_id = pv.pv_id
14406
                 AND rel.view_id = viewid
14407
                 AND rel.rtag_id = rtagid
14408
            ORDER BY UPPER (pkg.pkg_name);
14409
      ELSE
14410
         -- Get non base view content
14411
         OPEN recordset FOR
14412
            SELECT   DECODE (rel.pkg_state,
14413
                             NULL, 0,
14414
                             rel.pkg_state
14415
                            ) AS pkg_state,
14416
                     rel.deprecated_state, pv.pv_id, pkg.pkg_name,
14417
                     pv.pkg_version, pv.dlocked, pv.pv_description,
14418
                     pv.build_type
14419
                FROM environment_view rel,
14420
                     PACKAGES pkg,
14421
                     package_versions pv,
14422
                     view_def vd
14423
               WHERE pv.pkg_id = pkg.pkg_id
14424
                 AND rel.pv_id = pv.pv_id
14425
                 AND rel.rtag_id = rtagid
14426
                 AND vd.view_id = viewid
14427
                 AND vd.pkg_id = pv.pkg_id
14428
            ORDER BY UPPER (pkg.pkg_name);
14429
      END IF;
14430
   END;
14431
 
14432
/*-------------------------------------------------------------------------------------------------------*/
14433
   FUNCTION get_package_view (pvid IN NUMBER, rtagid IN NUMBER)
14434
      RETURN NUMBER
14435
   IS
14436
      envtab             NUMBER;
14437
      returnvalue        NUMBER;
14438
      return_not_found   NUMBER := -1;
14439
   BEGIN
14440
      envtab := get_package_area (pvid, rtagid);
14441
 
14442
      IF envtab = 0
14443
      THEN
14444
         -- WORK IN PROGRESS --
14445
         returnvalue := pk_work_in_progress.get_package_view (pvid, rtagid);
14446
      ELSIF envtab = 1
14447
      THEN
14448
         -- PENDING --
14449
         returnvalue := pk_planned.get_package_view (pvid, rtagid);
14450
      ELSIF envtab = 2
14451
      THEN
14452
         -- RELEASED --
14453
         returnvalue := pk_release.get_package_view (pvid, rtagid);
14454
      ELSE
14455
         -- This may be a Patch not located anywhere but unlocked
14456
         returnvalue := return_not_found;
14457
      END IF;
14458
 
14459
      RETURN returnvalue;
14460
   END;
14461
 
14462
/*-------------------------------------------------------------------------------------------------------*/
14463
   PROCEDURE make_release (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14464
   IS
14465
      viewid          NUMBER;
14466
      envtab          NUMBER;
14467
      ispatch         CHAR (1) := NULL;
14468
      buildtype       CHAR (1) := NULL;
14469
      lastversionid   NUMBER;
14470
   BEGIN
14471
      -- Check if package is patch
14472
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14473
        INTO ispatch, buildtype, lastversionid
14474
        FROM package_versions pv
14475
       WHERE pv.pv_id = pvid;
14476
 
14477
      -- Get ViewId
14478
      viewid := get_package_view (pvid, rtagid);
14479
      -- Remove from current area
14480
      envtab := pk_environment.get_package_area (pvid, rtagid);
14481
 
14482
      -- Make sure that package was in work-in-progress or pending before makeing it release
14483
      -- Exclude patches, ripple builds
14484
      IF (envtab < 0)
14485
      THEN
14486
         -- Not found in work-in-progress or pending
14487
         IF (ispatch IS NULL) AND (buildtype = 'M')
14488
         THEN
14489
            raise_application_error (-20000,
14490
                                     'This package cannot be released here.'
14491
                                    );
14492
         END IF;
14493
      END IF;
14494
 
14495
      -- Log
14496
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14497
 
14498
      IF envtab = 0
14499
      THEN
14500
         -- WORK IN PROGRESS --
14501
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14502
      ELSIF envtab = 1
14503
      THEN
14504
         -- PENDING --
14505
         pk_planned.remove_package (pvid, rtagid, userid);
14506
      END IF;
14507
 
14508
      -- Change package state
14509
      pk_package.change_state (pvid, 'Y', userid);
14510
 
14511
      -- Make sure it is valid BASE VIEW
14512
      IF viewid < 1
14513
      THEN
14514
         viewid := 7;                            -- This is default base view
14515
      END IF;
14516
 
14517
      IF (ispatch IS NULL)
14518
      THEN
14519
         -- Add package to new area
14520
         pk_release.add_package (pvid, viewid, rtagid, userid);
14521
      END IF;
14522
 
14523
      -- Now do post Release Actions
14524
      pk_release.run_post_actions (pvid, rtagid);
14525
 
14526
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14527
      DELETE FROM do_not_ripple
14528
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14529
 
14530
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14531
      DELETE FROM advisory_ripple
14532
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14533
 
14534
      -- Log
14535
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14536
   END;
14537
 
14538
/*-------------------------------------------------------------------------------------------------------*/
14539
   PROCEDURE auto_make_release (
14540
      pvid            IN   NUMBER,
14541
      rtagid          IN   NUMBER,
14542
      userid          IN   NUMBER,
14543
      vext            IN   package_versions.v_ext%TYPE,
14544
      ssv_ext         IN   package_versions.v_ext%TYPE,
14545
      clonefrompvid   IN   NUMBER
14546
   )
14547
   IS
14548
      viewid          NUMBER;
14549
      envtab          NUMBER;
14550
      ispatch         CHAR (1) := NULL;
14551
      buildtype       CHAR (1) := NULL;
14552
      lastversionid   NUMBER;
14553
   BEGIN
14554
      -- Check if package is patch
14555
      SELECT pv.is_patch, pv.build_type, pv.last_pv_id
14556
        INTO ispatch, buildtype, lastversionid
14557
        FROM package_versions pv
14558
       WHERE pv.pv_id = pvid;
14559
 
14560
      IF vext <> ssv_ext
14561
      THEN
14562
         -- Get ViewId
14563
         viewid := get_package_view (clonefrompvid, rtagid);
14564
         -- Remove from current area
14565
         envtab := pk_environment.get_package_area (clonefrompvid, rtagid);
14566
      ELSE
14567
         -- Get ViewId
14568
         viewid := get_package_view (pvid, rtagid);
14569
         -- Remove from current area
14570
         envtab := pk_environment.get_package_area (pvid, rtagid);
14571
      END IF;
14572
 
14573
      -- Make sure that package was in work-in-progress or pending before makeing it release
14574
      -- Exclude patches, ripple builds
14575
      IF (envtab < 0)
14576
      THEN
14577
         -- Not found in work-in-progress or pending
14578
         IF (ispatch IS NULL) AND (buildtype = 'M')
14579
         THEN
14580
            raise_application_error (-20000,
14581
                                     'This package cannot be released here.'
14582
                                    );
14583
         END IF;
14584
      END IF;
14585
 
14586
      -- Log
14587
      log_action (pvid, 'action', userid, 'Start of Make Package Release...');
14588
 
14589
      IF vext <> ssv_ext
14590
      THEN
14591
         IF envtab = 0
14592
         THEN
14593
            -- WORK IN PROGRESS --
14594
            pk_work_in_progress.remove_package (clonefrompvid, rtagid,
14595
                                                userid);
14596
         ELSIF envtab = 1
14597
         THEN
14598
            -- PENDING --
14599
            pk_planned.remove_package (clonefrompvid, rtagid, userid);
14600
         ELSIF envtab = 2
14601
         THEN
14602
            -- RELEASED --
14603
            pk_release.remove_package (clonefrompvid, rtagid, userid);
14604
         END IF;
14605
      ELSE
14606
         IF envtab = 0
14607
         THEN
14608
            -- WORK IN PROGRESS --
14609
            pk_work_in_progress.remove_package (pvid, rtagid, userid);
14610
         ELSIF envtab = 1
14611
         THEN
14612
            -- PENDING --
14613
            pk_planned.remove_package (pvid, rtagid, userid);
14614
         END IF;
14615
      END IF;
14616
 
14617
      -- Change package state
14618
      pk_package.change_state (pvid, 'Y', userid);
14619
 
14620
      -- Make sure it is valid BASE VIEW
14621
      IF viewid < 1
14622
      THEN
14623
         viewid := 7;                            -- This is default base view
14624
      END IF;
14625
 
14626
      IF (ispatch IS NULL)
14627
      THEN
14628
         -- Add package to new area
14629
         pk_release.add_package (pvid, viewid, rtagid, userid);
14630
      END IF;
14631
 
14632
      -- Now do post Release Actions
14633
      pk_release.run_post_actions (pvid, rtagid);
14634
      -- Now update the Dash_Board Table
14635
      pk_rmapi.update_dash_board (rtagid);
14636
 
14637
      -- Now delete old version from DO_NOT_RIPPLE Table if it Exists
14638
      DELETE FROM do_not_ripple
14639
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14640
 
14641
      -- Now delete old version from ADVISORY_RIPPLES Table if it Exists
14642
      DELETE FROM advisory_ripple
14643
            WHERE rtag_id = rtagid AND pv_id = lastversionid;
14644
 
14645
      -- Log
14646
      log_action (pvid, 'action', userid, 'End of Make Package Release...');
14647
   END;
14648
 
14649
/*-------------------------------------------------------------------------------------------------------*/
14650
   PROCEDURE make_unrelease (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14651
   IS
14652
      viewid   NUMBER;
14653
      envtab   NUMBER;
14654
   BEGIN
14655
      -- Get ViewId
14656
      --ViewId := PK_RELEASE.GET_PACKAGE_VIEW ( PvId, RtagId );
14657
      viewid := get_package_view (pvid, rtagid);
14658
      -- Remove from current area
14659
      envtab := pk_environment.get_package_area (pvid, rtagid);
14660
      -- Log
14661
      log_action (pvid,
14662
                  'action',
14663
                  userid,
14664
                  'Start of Make Package UnRelease...'
14665
                 );
14666
 
14667
      IF envtab = 2
14668
      THEN
14669
         -- RELEASE AREA --
14670
         pk_release.remove_package (pvid, rtagid, userid);
14671
      ELSIF envtab = 1
14672
      THEN
14673
         -- PENDING --
14674
         pk_planned.remove_package (pvid, rtagid, userid);
14675
      END IF;
14676
 
14677
      -- Change package state
14678
      pk_package.change_state (pvid, 'N', userid);
14679
 
14680
      -- Make sure it is valid BASE VIEW
14681
      IF viewid < 1
14682
      THEN
14683
         viewid := 7;                            -- This is default base view
14684
      END IF;
14685
 
14686
      -- Add package to new area
14687
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14688
      -- Now do post Release Actions
14689
      pk_release.run_post_actions (pvid, rtagid);
14690
      -- Log
14691
      log_action (pvid, 'action', userid, 'End of Make Package UnRelease...');
14692
   END;
14693
 
14694
/*-------------------------------------------------------------------------------------------------------*/
14695
   PROCEDURE make_pending (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14696
   IS
14697
      viewid      NUMBER;
14698
      ispatch     CHAR (1) := NULL;
14699
      buildtype   CHAR (1) := NULL;
14700
   BEGIN
14701
      -- Check if package is patch
14702
      SELECT pv.is_patch, pv.build_type
14703
        INTO ispatch, buildtype
14704
        FROM package_versions pv
14705
       WHERE pv.pv_id = pvid;
14706
 
14707
      -- Get ViewId
14708
      viewid := get_package_view (pvid, rtagid);
14709
      --ViewId := PK_WORK_IN_PROGRESS.GET_PACKAGE_VIEW ( PvId, RtagId );
14710
 
14711
      -- Log
14712
      log_action (pvid, 'action', userid, 'Start of Make Package Pending...');
14713
 
14714
      IF (ispatch IS NULL)
14715
      THEN
14716
         -- Remove from current area
14717
         pk_work_in_progress.remove_package (pvid, rtagid, userid);
14718
         -- Change package state
14719
         pk_package.change_state (pvid, 'P', userid);
14720
         -- Add package to new area
14721
         pk_planned.add_package (pvid, viewid, rtagid, userid);
14722
      END IF;
14723
 
14724
      -- Log
14725
      log_action (pvid, 'action', userid, 'End of Make Package Pending...');
14726
   END;
14727
 
14728
/*-------------------------------------------------------------------------------------------------------*/
14729
   PROCEDURE make_approved (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14730
   IS
14731
   BEGIN
14732
      -- Log
14733
      log_action (pvid,
14734
                  'action',
14735
                  userid,
14736
                  'Start of Package Pending Approval...'
14737
                 );
14738
      -- Change package state
14739
      pk_package.change_state (pvid, 'A', userid);
14740
      -- Log
14741
      log_action (pvid, 'action', userid,
14742
                  'End of Package Pending Approval...');
14743
   END;
14744
 
14745
/*-------------------------------------------------------------------------------------------------------*/
14746
   PROCEDURE make_reject (pvid IN NUMBER, rtagid IN NUMBER, userid IN NUMBER)
14747
   IS
14748
      viewid   NUMBER;
14749
   BEGIN
14750
      -- Get ViewId
14751
      viewid := get_package_view (pvid, rtagid);
14752
-- ViewId := PK_PLANNED.GET_PACKAGE_VIEW ( PvId, RtagId );
14753
 
14754
      -- Log
14755
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14756
      -- Remove from current area
14757
      pk_planned.remove_package (pvid, rtagid, userid);
14758
      -- Change package state
14759
      pk_package.change_state (pvid, 'R', userid);
14760
      -- Add package to new area
14761
      pk_work_in_progress.add_package (pvid, viewid, rtagid, userid);
14762
      -- Log
14763
      log_action (pvid, 'action', userid, 'Start of Reject Package...');
14764
   END;
14765
 
14766
/*-------------------------------------------------------------------------------------------------------*/
14767
   PROCEDURE change_package_view (
14768
      pvid        IN   NUMBER,
14769
      rtagid      IN   NUMBER,
14770
      newviewid   IN   NUMBER
14771
   )
14772
   IS
14773
      envtab   NUMBER;
14774
   BEGIN
14775
      envtab := pk_environment.get_package_area (pvid, rtagid);
14776
 
14777
      IF envtab = 0
14778
      THEN
14779
         -- WORK IN PROGRESS --
14780
         pk_work_in_progress.change_package_view (pvid, rtagid, newviewid);
14781
      ELSIF envtab = 1
14782
      THEN
14783
         -- PENDING --
14784
         pk_planned.change_package_view (pvid, rtagid, newviewid);
14785
      ELSIF envtab = 2
14786
      THEN
14787
         -- RELEASED --
14788
         pk_release.change_package_view (pvid, rtagid, newviewid);
14789
      END IF;
14790
   END;
14791
 
14792
/*-------------------------------------------------------------------------------------------------------*/
14793
   PROCEDURE find_package (
14794
      skeyword      IN       VARCHAR2,
14795
      nrtagid       IN       NUMBER,
14796
      nsearcharea   IN       NUMBER,
14797
      recordset     OUT      typecur
14798
   )
14799
   IS
14800
   BEGIN
14801
      IF nsearcharea = 0
14802
      THEN
14803
         /* Search Work In Progress */
14804
         OPEN recordset FOR
14805
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14806
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14807
                     pv.modified_stamp, usr.full_name, usr.user_email
14808
                FROM views vi,
14809
                     work_in_progress rc,
14810
                     PACKAGES pkg,
14811
                     package_versions pv,
14812
                     users usr
14813
               WHERE rc.view_id = vi.view_id
14814
                 AND rc.pv_id = pv.pv_id
14815
                 AND pkg.pkg_id = pv.pkg_id
14816
                 AND pv.modifier_id = usr.user_id
14817
                 AND rc.rtag_id = nrtagid
14818
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14819
            ORDER BY UPPER (pkg.pkg_name);
14820
      ELSIF nsearcharea = 1
14821
      THEN
14822
         /* Search Pending */
14823
         OPEN recordset FOR
14824
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14825
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14826
                     pv.modified_stamp, usr.full_name, usr.user_email
14827
                FROM views vi,
14828
                     planned rc,
14829
                     PACKAGES pkg,
14830
                     package_versions pv,
14831
                     users usr
14832
               WHERE rc.view_id = vi.view_id
14833
                 AND rc.pv_id = pv.pv_id
14834
                 AND pkg.pkg_id = pv.pkg_id
14835
                 AND pv.modifier_id = usr.user_id
14836
                 AND rc.rtag_id = nrtagid
14837
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14838
            ORDER BY UPPER (pkg.pkg_name);
14839
      ELSIF nsearcharea = 2
14840
      THEN
14841
         /* Search Released */
14842
         OPEN recordset FOR
14843
            SELECT   nsearcharea AS env_area, vi.view_name, pv.dlocked,
14844
                     pkg.pkg_name, pv.pv_id, pv.pkg_version, pv.comments,
14845
                     pv.modified_stamp, usr.full_name, usr.user_email
14846
                FROM views vi,
14847
                     release_content rc,
14848
                     PACKAGES pkg,
14849
                     package_versions pv,
14850
                     users usr
14851
               WHERE rc.base_view_id = vi.view_id
14852
                 AND rc.pv_id = pv.pv_id
14853
                 AND pkg.pkg_id = pv.pkg_id
14854
                 AND pv.modifier_id = usr.user_id
14855
                 AND rc.rtag_id = nrtagid
14856
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14857
            ORDER BY UPPER (pkg.pkg_name);
14858
      ELSIF nsearcharea = 3
14859
      THEN
14860
         /* Search ALL */
14861
         OPEN recordset FOR
14862
            SELECT   rc.env_area, vi.view_name, pv.dlocked, pkg.pkg_name,
14863
                     pv.pv_id, pv.pkg_version, pv.comments,
14864
                     pv.modified_stamp, usr.full_name, usr.user_email
14865
                FROM views vi,
14866
                     environment_view rc,
14867
                     PACKAGES pkg,
14868
                     package_versions pv,
14869
                     users usr
14870
               WHERE rc.view_id = vi.view_id
14871
                 AND rc.pv_id = pv.pv_id
14872
                 AND pkg.pkg_id = pv.pkg_id
14873
                 AND pv.modifier_id = usr.user_id
14874
                 AND rc.rtag_id = nrtagid
14875
                 AND UPPER (pkg.pkg_name) LIKE UPPER (skeyword)
14876
            ORDER BY UPPER (pkg.pkg_name);
14877
      END IF;
14878
   END;
14879
 
14880
/*-------------------------------------------------------------------------------------------------------*/
14881
   PROCEDURE find_file (
14882
      skeyword      IN       VARCHAR2,
14883
      nrtagid       IN       NUMBER,
14884
      nsearcharea   IN       NUMBER,
14885
      npagesize     IN       NUMBER,
14886
      recordset     OUT      typecur
14887
   )
14888
   IS
14889
   BEGIN
14890
      IF nsearcharea = 0
14891
      THEN
14892
         /* Search Work In Progress */
14893
         OPEN recordset FOR
14894
            SELECT   qry.*
14895
                FROM (
14896
                      /* File search on Packages */
14897
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14898
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14899
                        FROM work_in_progress rc,
14900
                             PACKAGES pkg,
14901
                             package_versions pv,
14902
                             release_components art
14903
                       WHERE rc.pv_id = art.pv_id
14904
                         AND pv.pkg_id = pkg.pkg_id
14905
                         AND rc.pv_id = pv.pv_id
14906
                         AND rc.rtag_id = nrtagid
14907
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14908
                      UNION ALL
14909
                      /* File search on Products */
14910
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14911
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14912
                        FROM work_in_progress rc,
14913
                             PACKAGES pkg,
14914
                             package_versions pv,
14915
                             product_components art
14916
                       WHERE rc.pv_id = art.pv_id
14917
                         AND pv.pkg_id = pkg.pkg_id
14918
                         AND rc.pv_id = pv.pv_id
14919
                         AND rc.rtag_id = nrtagid
14920
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
14921
               WHERE ROWNUM <= npagesize
14922
            ORDER BY UPPER (qry.pkg_name);
14923
      ELSIF nsearcharea = 1
14924
      THEN
14925
         /* Search Pending */
14926
         OPEN recordset FOR
14927
            SELECT   qry.*
14928
                FROM (
14929
                      /* File search on Packages */
14930
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14931
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14932
                        FROM planned rc,
14933
                             PACKAGES pkg,
14934
                             package_versions pv,
14935
                             release_components art
14936
                       WHERE rc.pv_id = art.pv_id
14937
                         AND pv.pkg_id = pkg.pkg_id
14938
                         AND rc.pv_id = pv.pv_id
14939
                         AND rc.rtag_id = nrtagid
14940
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14941
                      UNION ALL
14942
                      /* File search on Products */
14943
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14944
                             pv.pv_id, pv.pkg_version, art.crc_cksum
14945
                        FROM planned rc,
14946
                             PACKAGES pkg,
14947
                             package_versions pv,
14948
                             product_components art
14949
                       WHERE rc.pv_id = art.pv_id
14950
                         AND pv.pkg_id = pkg.pkg_id
14951
                         AND rc.pv_id = pv.pv_id
14952
                         AND rc.rtag_id = nrtagid
14953
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
14954
               WHERE ROWNUM <= npagesize
14955
            ORDER BY UPPER (qry.pkg_name);
14956
      ELSIF nsearcharea = 2
14957
      THEN
14958
         /* Search Released */
14959
         OPEN recordset FOR
14960
            SELECT   qry.*
14961
                FROM (
14962
                      /* File search on Packages */
14963
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14964
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
14965
                             NULL AS patch_id
14966
                        FROM release_content rc,
14967
                             PACKAGES pkg,
14968
                             package_versions pv,
14969
                             release_components art
14970
                       WHERE rc.pv_id = art.pv_id
14971
                         AND pv.pkg_id = pkg.pkg_id
14972
                         AND rc.pv_id = pv.pv_id
14973
                         AND rc.rtag_id = nrtagid
14974
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14975
                      UNION ALL
14976
                      /* File search on Products */
14977
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14978
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
14979
                             NULL AS patch_id
14980
                        FROM release_content rc,
14981
                             PACKAGES pkg,
14982
                             package_versions pv,
14983
                             product_components art
14984
                       WHERE rc.pv_id = art.pv_id
14985
                         AND pv.pkg_id = pkg.pkg_id
14986
                         AND rc.pv_id = pv.pv_id
14987
                         AND rc.rtag_id = nrtagid
14988
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
14989
                      UNION ALL
14990
                      /* File search on Patches */
14991
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
14992
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
14993
                             DECODE (art.file_path,
14994
                                     NULL, pp.patch_id,
14995
                                     NULL
14996
                                    ) AS patch_id
14997
                        FROM release_content rc,
14998
                             PACKAGES pkg,
14999
                             package_versions pv,
15000
                             release_components art,
15001
                             package_patches pp
15002
                       WHERE pv.pv_id = pp.pv_id
15003
                         AND pv.pkg_id = pkg.pkg_id
15004
                         AND rc.rtag_id = nrtagid
15005
                         AND art.pv_id = pp.patch_id
15006
                         AND rc.pv_id = pp.pv_id
15007
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15008
               WHERE ROWNUM <= npagesize
15009
            ORDER BY UPPER (qry.pkg_name);
15010
      ELSIF nsearcharea = 3
15011
      THEN
15012
         /* Search ALL */
15013
         OPEN recordset FOR
15014
            SELECT   qry.*
15015
                FROM (
15016
                      /* File search on Packages */
15017
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15018
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15019
                             NULL AS patch_id
15020
                        FROM environment_view rc,
15021
                             PACKAGES pkg,
15022
                             package_versions pv,
15023
                             release_components art
15024
                       WHERE rc.pv_id = art.pv_id
15025
                         AND pv.pkg_id = pkg.pkg_id
15026
                         AND rc.pv_id = pv.pv_id
15027
                         AND rc.rtag_id = nrtagid
15028
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15029
                      UNION ALL
15030
                      /* File search on Products */
15031
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15032
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15033
                             NULL AS patch_id
15034
                        FROM environment_view rc,
15035
                             PACKAGES pkg,
15036
                             package_versions pv,
15037
                             product_components art
15038
                       WHERE rc.pv_id = art.pv_id
15039
                         AND pv.pkg_id = pkg.pkg_id
15040
                         AND rc.pv_id = pv.pv_id
15041
                         AND rc.rtag_id = nrtagid
15042
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)
15043
                      UNION ALL
15044
                      /* File search on Patches */
15045
                      SELECT art.file_name, art.file_path, pkg.pkg_name,
15046
                             pv.pv_id, pv.pkg_version, art.crc_cksum,
15047
                             DECODE (art.file_path,
15048
                                     NULL, pp.patch_id,
15049
                                     NULL
15050
                                    ) AS patch_id
15051
                        FROM release_content rc,
15052
                             PACKAGES pkg,
15053
                             package_versions pv,
15054
                             release_components art,
15055
                             package_patches pp
15056
                       WHERE pv.pv_id = pp.pv_id
15057
                         AND pv.pkg_id = pkg.pkg_id
15058
                         AND rc.rtag_id = nrtagid
15059
                         AND art.pv_id = pp.patch_id
15060
                         AND rc.pv_id = pp.pv_id
15061
                         AND UPPER (art.file_name) LIKE UPPER (skeyword)) qry
15062
               WHERE ROWNUM <= npagesize
15063
            ORDER BY UPPER (qry.pkg_name);
15064
      END IF;
15065
   END;
15066
 
15067
/*-------------------------------------------------------------------------------------------------------*/
15068
   PROCEDURE get_prodrelease_items (
15069
      rtagid             IN       NUMBER,
15070
      ntruerecordcount   OUT      NUMBER,
15071
      recordset          OUT      typecur
15072
   )
15073
   IS
15074
   BEGIN
15075
      -- Get true record count n the number of integration products
15076
      SELECT COUNT (rc.pv_id)
15077
        INTO ntruerecordcount
15078
        FROM release_content rc
15079
       WHERE rc.rtag_id = rtagid;
15080
 
15081
      OPEN recordset FOR
15082
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,    --rel.pkg_state,
15083
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15084
                  pv.pkg_version, pv.dlocked, pv.pv_description
15085
             FROM release_content rel,
15086
                  PACKAGES pkg,
15087
                  package_versions pv,
15088
                  views vi
15089
            WHERE pv.pkg_id = pkg.pkg_id
15090
              AND rel.pv_id = pv.pv_id
15091
              AND rel.base_view_id = vi.view_id
15092
              AND pv.is_deployable = 'Y'
15093
              AND rtag_id = rtagid
15094
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15095
                                              FROM deployment_manager.os_contents)
15096
              AND rel.product_state IS NULL
15097
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15098
   END;
15099
 
15100
/*-------------------------------------------------------------------------------------------------------*/
15101
   PROCEDURE get_integration_items (
15102
      rtagid             IN       NUMBER,
15103
      ntruerecordcount   OUT      NUMBER,
15104
      recordset          OUT      typecur
15105
   )
15106
   IS
15107
   BEGIN
15108
      -- Get true record count n the number of integration products
15109
      SELECT COUNT (rc.pv_id)
15110
        INTO ntruerecordcount
15111
        FROM release_content rc
15112
       WHERE rc.rtag_id = rtagid AND rc.product_state = 1;
15113
 
15114
      OPEN recordset FOR
15115
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15116
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15117
                  pv.pkg_version, pv.dlocked, pv.pv_description
15118
             FROM release_content rel,
15119
                  PACKAGES pkg,
15120
                  package_versions pv,
15121
                  views vi
15122
            WHERE pv.pkg_id = pkg.pkg_id
15123
              AND rel.pv_id = pv.pv_id
15124
              AND rel.base_view_id = vi.view_id
15125
              AND pv.is_deployable = 'Y'
15126
              AND rtag_id = rtagid
15127
              AND rel.product_state IN (1, 5)
15128
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15129
   END;
15130
 
15131
/*-------------------------------------------------------------------------------------------------------*/
15132
   PROCEDURE get_test_items (
15133
      rtagid             IN       NUMBER,
15134
      ntruerecordcount   OUT      NUMBER,
15135
      recordset          OUT      typecur
15136
   )
15137
   IS
15138
   BEGIN
15139
      -- Get true record count n the number of test products
15140
      SELECT COUNT (rc.pv_id)
15141
        INTO ntruerecordcount
15142
        FROM release_content rc
15143
       WHERE rc.rtag_id = rtagid AND rc.product_state = 2;
15144
 
15145
      OPEN recordset FOR
15146
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15147
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15148
                  pv.pkg_version, pv.dlocked, pv.pv_description
15149
             FROM release_content rel,
15150
                  PACKAGES pkg,
15151
                  package_versions pv,
15152
                  views vi
15153
            WHERE pv.pkg_id = pkg.pkg_id
15154
              AND rel.pv_id = pv.pv_id
15155
              AND rel.base_view_id = vi.view_id
15156
              AND pv.is_deployable = 'Y'
15157
              AND rtag_id = rtagid
15158
              AND rel.product_state = 2
15159
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15160
   END;
15161
 
15162
/*-------------------------------------------------------------------------------------------------------*/
15163
   PROCEDURE get_deploy_items (
15164
      rtagid             IN       NUMBER,
15165
      ntruerecordcount   OUT      NUMBER,
15166
      recordset          OUT      typecur
15167
   )
15168
   IS
15169
   BEGIN
15170
      -- Get true record count n the number of deploy products
15171
      SELECT COUNT (rc.pv_id)
15172
        INTO ntruerecordcount
15173
        FROM release_content rc
15174
       WHERE rc.rtag_id = rtagid AND rc.product_state = 3;
15175
 
15176
      OPEN recordset FOR
15177
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15178
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15179
                  pv.pkg_version, pv.dlocked, pv.pv_description
15180
             FROM release_content rel,
15181
                  PACKAGES pkg,
15182
                  package_versions pv,
15183
                  views vi
15184
            WHERE pv.pkg_id = pkg.pkg_id
15185
              AND rel.pv_id = pv.pv_id
15186
              AND rel.base_view_id = vi.view_id
15187
              AND pv.is_deployable = 'Y'
15188
              AND rtag_id = rtagid
15189
              AND rel.product_state IN (3, 5)
15190
              AND pv.pv_id NOT IN (SELECT DISTINCT prod_id
15191
                                              FROM deployment_manager.os_contents)
15192
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15193
   END;
15194
 
15195
/*-------------------------------------------------------------------------------------------------------*/
15196
   PROCEDURE get_reject_items (
15197
      rtagid             IN       NUMBER,
15198
      ntruerecordcount   OUT      NUMBER,
15199
      recordset          OUT      typecur
15200
   )
15201
   IS
15202
   BEGIN
15203
      -- Get true record count n the number of reject products
15204
      SELECT COUNT (rc.pv_id)
15205
        INTO ntruerecordcount
15206
        FROM release_content rc
15207
       WHERE rc.rtag_id = rtagid AND rc.product_state = 4;
15208
 
15209
      OPEN recordset FOR
15210
         SELECT   vi.view_id, vi.view_name, rel.pkg_state,
15211
                  rel.deprecated_state, pv.pv_id, pkg.pkg_name,
15212
                  pv.pkg_version, pv.dlocked, pv.pv_description
15213
             FROM release_content rel,
15214
                  PACKAGES pkg,
15215
                  package_versions pv,
15216
                  views vi
15217
            WHERE pv.pkg_id = pkg.pkg_id
15218
              AND rel.pv_id = pv.pv_id
15219
              AND rel.base_view_id = vi.view_id
15220
              AND pv.is_deployable = 'Y'
15221
              AND rtag_id = rtagid
15222
              AND rel.product_state = 4
15223
         ORDER BY UPPER (vi.view_name), UPPER (pkg.pkg_name);
15224
   END;
15225
/*-------------------------------------------------------------------------------------------------------*/
15226
END pk_environment_test;
1374 dpurdie 15227
/
15228
--------------------------------------------------------
15229
--  DDL for Package Body PK_BUILDAPI_TEST
15230
--------------------------------------------------------
1373 dpurdie 15231
 
15232
  CREATE OR REPLACE PACKAGE BODY "PK_BUILDAPI_TEST" IS
15233
 
15234
/*
15235
------------------------------
15236
||  Last Modified:  S.Vukovic
15237
||  Modified Date:  30/Mar/2005
15238
||  Body Version:   1.0
15239
------------------------------
15240
*/
15241
 
15242
 
15243
/*-------------------------------------------------------------------------------------------------------*/
15244
PROCEDURE Add_Product_Component ( nPvId IN NUMBER,
15245
								  sOsName IN VARCHAR2,
15246
								  sOrigFilePath IN VARCHAR2,
15247
								  sFileName IN VARCHAR2,
15248
								  sDestFilePath IN VARCHAR2,
15249
								  nByteSize IN NUMBER,
15250
								  sCRCcksum IN VARCHAR2 ) IS
15251
 
15252
	nOsId NUMBER;
15253
 
15254
BEGIN
15255
	/*--------------- Business Rules Here -------------------*/
15256
	-- OS Name Requirements --
15257
	IF (sOsName IS NULL) THEN
15258
		RAISE_APPLICATION_ERROR (-20000, 'OsName cannot be NULL.');
15259
	END IF;
15260
 
15261
 
15262
	-- File Requirements --
15263
	IF (NOT sFileName IS NULL) THEN
15264
 
15265
		IF (nByteSize IS NULL) THEN
15266
			RAISE_APPLICATION_ERROR (-20000, 'Byte Size cannot be NULL.');
15267
 
15268
		ELSIF (sCRCcksum IS NULL) THEN
15269
			RAISE_APPLICATION_ERROR (-20000, 'CRC CKSUM cannot be NULL.');
15270
 
15271
		END IF;
15272
 
15273
	END IF;
15274
 
15275
 
15276
	-- Folder Requirements --
15277
	-- No requirements for now.
15278
 
15279
	/*-------------------------------------------------------*/
15280
 
15281
	-- Get OsId
15282
	nOsId := Get_OsId ( sOsName );
15283
 
15284
 
15285
	-- Insert component entry
15286
	INSERT INTO PRODUCT_COMPONENTS ( PV_ID, OS_ID, FILE_PATH, FILE_NAME, DESTINATION_PATH, BYTE_SIZE, CRC_CKSUM )
15287
    VALUES (
15288
			  nPvId,
15289
			  nOsId,
15290
			  sOrigFilePath,
15291
			  sFileName,
15292
			  sDestFilePath,
15293
			  nByteSize,
15294
			  sCRCcksum
15295
			);
15296
 
15297
 
15298
	EXCEPTION
15299
    WHEN DUP_VAL_ON_INDEX
15300
	THEN
15301
		RAISE_APPLICATION_ERROR (-20000, 'Cannot have duplicate product components.');
15302
 
15303
END;
15304
/*-------------------------------------------------------------------------------------------------------*/
15305
PROCEDURE Remove_All_Product_Components ( nPvId IN NUMBER, sOsName IN VARCHAR2 ) IS
15306
 
15307
	nOsId NUMBER;
15308
 
15309
BEGIN
15310
	/*--------------- Business Rules Here -------------------*/
15311
	/*-------------------------------------------------------*/
15312
 
15313
	-- Get OsId
15314
	nOsId := Get_OsId ( sOsName );
15315
 
15316
 
15317
	-- Delete component entry
15318
	DELETE
15319
	  FROM PRODUCT_COMPONENTS pc
15320
	 WHERE pc.PV_ID = nPvId
15321
	   AND pc.OS_ID = nOsId;
15322
 
15323
 
15324
END;
15325
/*-------------------------------------------------------------------------------------------------------*/
15326
FUNCTION Get_OsId ( sOsName IN VARCHAR2 ) RETURN NUMBER IS
15327
	Code NUMBER;
15328
 
15329
BEGIN
15330
 
15331
	-- Get Platform Code --
15332
	SELECT pf.CODE INTO Code
15333
	  FROM PLATFORMS pf
15334
	 WHERE UPPER( pf.NAME ) = UPPER( sOsName );
15335
 
15336
 
15337
	RETURN Code;	   
15338
 
15339
	EXCEPTION
15340
    	WHEN NO_DATA_FOUND THEN
15341
       		RAISE_APPLICATION_ERROR (-20000, 'Platform '|| sOsName ||' is not valid. It needs to be added to PLATFORMS table in Release Manager.' );
15342
   	RAISE;
15343
END;
15344
/*-------------------------------------------------------------------------------------------------------*/
15345
PROCEDURE Update_Build_Service ( sDatabaseServer IN VARCHAR2,
15346
			  					 sWebServer IN VARCHAR2,
15347
								 sMailServer IN VARCHAR2,
15348
								 sMailSender IN VARCHAR2) IS
15349
 
15350
BEGIN
15351
 
15352
 
15353
	 UPDATE BUILD_SERVICE_CONFIG
15354
	 SET CONFIG = sDatabaseServer
15355
	 WHERE SERVICE = 'DATABASE SERVER'; 
15356
 
15357
	 UPDATE BUILD_SERVICE_CONFIG
15358
	 SET CONFIG = sWebServer
15359
	 WHERE SERVICE = 'WEB SERVER'; 
15360
 
15361
	 UPDATE BUILD_SERVICE_CONFIG
15362
	 SET CONFIG = sMailServer
15363
	 WHERE SERVICE = 'MAIL SERVER'; 
15364
 
15365
	 UPDATE BUILD_SERVICE_CONFIG
15366
	 SET CONFIG = sMailSender
15367
	 WHERE SERVICE = 'BUILD FAILURE MAIL SENDER'; 	 	 									 
15368
 
15369
 
15370
 
15371
END;
15372
/*-------------------------------------------------------------------------------------------------------*/
15373
PROCEDURE ADD_GBE_MACHTYPE ( sGBEValue in VARCHAR2 ) IS
15374
 
15375
GBE_ID NUMBER;
15376
 
15377
BEGIN
15378
 
15379
	-- Get GBE_ID
15380
	SELECT SEQ_GBE_ID.NEXTVAL INTO GBE_ID FROM DUAL;
15381
 
15382
	INSERT INTO GBE_MACHTYPE (GBE_ID, GBE_VALUE)
15383
	VALUES( GBE_ID, sGBEValue);
15384
 
15385
 
15386
END;
15387
/*-------------------------------------------------------------------------------------------------------*/
15388
PROCEDURE REMOVE_GBE_MACHTYPE ( nGBE_ID IN NUMBER ) IS
15389
 
15390
BEGIN
15391
 
15392
	 DELETE FROM GBE_MACHTYPE WHERE GBE_ID = nGBE_ID;
15393
 
15394
END;
15395
/*-------------------------------------------------------------------------------------------------------*/
15396
PROCEDURE UPDATE_GBE_MACHTYPE ( nGBE_ID IN NUMBER, sGBEValue IN VARCHAR2 ) IS
15397
 
15398
BEGIN
15399
 
15400
	 UPDATE GBE_MACHTYPE
15401
	 SET GBE_VALUE = sGBEValue 
15402
	 WHERE GBE_ID = nGBE_ID;
15403
 
15404
 
15405
END;
15406
/*-------------------------------------------------------------------------------------------------------*/
15407
PROCEDURE ADD_DAEMON ( sDaemonHostname IN VARCHAR2, nRtagId IN NUMBER, nGbeId IN NUMBER ) IS
15408
 
15409
nRecordNumber NUMBER;
15410
nRconId NUMBER;
15411
BEGIN
15412
	-- Get RCON_ID
15413
	SELECT SEQ_RCON_ID.NEXTVAL INTO nRconId FROM DUAL; 
15414
 
15415
        SELECT count(*) INTO nRecordNumber 
15416
        FROM RELEASE_CONFIG
15417
        WHERE RTAG_ID = nRtagId;
15418
 
15419
        IF nRecordNumber = 0 THEN
15420
       	   INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15421
           VALUES (nRconId, nRtagId, sDaemonHostname, 'M', nGbeId);
15422
        ELSE
15423
        	INSERT INTO RELEASE_CONFIG (RCON_ID, RTAG_ID, DAEMON_HOSTNAME, DAEMON_MODE, GBE_ID)
15424
        	VALUES (nRconId, nRtagId, sDaemonHostname, 'S', nGbeId);
15425
        END IF;
15426
 
15427
 
15428
 
15429
END;
15430
/*-------------------------------------------------------------------------------------------------------*/        
15431
END PK_BUILDAPI_TEST;
1374 dpurdie 15432
/
15433
--------------------------------------------------------
15434
--  DDL for Procedure ADD_AUTOBUILD_FAILURE_INFO
15435
--------------------------------------------------------
1373 dpurdie 15436
 
15437
  CREATE OR REPLACE PROCEDURE "ADD_AUTOBUILD_FAILURE_INFO" (
15438
   nprojid     IN   NUMBER,
15439
   nviewid     IN   NUMBER,
15440
   suserlist   IN   VARCHAR2
15441
)
15442
IS
15443
   groupid   NUMBER;
15444
/******************************************************************************
15445
   NAME:       ADD_AUTOBUILD_FAILURE
15446
   PURPOSE:
15447
 
15448
   REVISIONS:
15449
   Ver        Date        Author           Description
15450
   ---------  ----------  ---------------  ------------------------------------
15451
   1.0        11/04/2006   Rupesh Solanki Created this procedure.
15452
 
15453
   NOTES:
15454
 
15455
   Automatically available Auto Replace Keywords:
15456
      Object Name:     ADD_AUTOBUILD_FAILURE
15457
      Sysdate:         11/04/2006
15458
      Date and Time:   11/04/2006, 9:28:28 AM, and 11/04/2006 9:28:28 AM
15459
      Username:         (set in TOAD Options, Procedure Editor)
15460
      Table Name:       (set in the "New PL/SQL Object" dialog)
15461
 
15462
******************************************************************************/
15463
BEGIN
15464
   BEGIN
15465
      SELECT group_email_id
15466
        INTO groupid
15467
        FROM autobuild_failure
15468
       WHERE proj_id = nprojid AND view_id = nviewid;
15469
   EXCEPTION
15470
      WHEN NO_DATA_FOUND
15471
      THEN
15472
         --  Create Next Sequence Id ---
15473
         SELECT seq_group_email_id.NEXTVAL
15474
           INTO groupid
15475
           FROM DUAL;
15476
 
15477
         INSERT INTO autobuild_failure
15478
                     (group_email_id, proj_id, view_id
15479
                     )
15480
              VALUES (groupid, nprojid, nviewid
15481
                     );
15482
   END;
15483
 
15484
   add_view_members (groupid, suserlist);
15485
END add_autobuild_failure_info;
1374 dpurdie 15486
/
15487
--------------------------------------------------------
15488
--  DDL for Procedure DEPRECATE_PACKAGE
15489
--------------------------------------------------------
1373 dpurdie 15490
 
15491
  CREATE OR REPLACE PROCEDURE "DEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
15492
	   	  		  							   nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
15493
	   	  		  							   nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
15494
											   sComments IN DEPRECATED_PACKAGES.COMMENTS%TYPE,
15495
											   nUserId IN NUMBER) IS
15496
ext VARCHAR2(50);
15497
 
15498
 
15499
 
15500
 
15501
BEGIN
15502
 
15503
	--Extract the package version extension
15504
	SELECT V_EXT into ext
15505
	FROM PACKAGE_VERSIONS
15506
	WHERE PV_ID = nPvId; 
15507
 
15508
    -- Deprecate Package
15509
    INSERT INTO DEPRECATED_PACKAGES (RTAG_ID, PKG_ID, COMMENTS, V_EXT)
15510
	VALUES (nRtagId, nPkgId, sComments, ext);
15511
 
15512
	IF ext IS NOT NULL THEN
15513
	   UPDATE RELEASE_CONTENT 
15514
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15515
	   WHERE RTAG_ID = nRtagId
15516
	   AND PV_ID IN (SELECT PV.PV_ID 
15517
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15518
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15519
				  	AND PV.V_EXT = ext
15520
				  	AND PKG.PKG_ID = nPkgId
15521
				 	);						
15522
	ELSE
15523
	   UPDATE RELEASE_CONTENT 
15524
	   SET PKG_ID = nPkgId, DEPRECATED_STATE = 6
15525
	   WHERE RTAG_ID = nRtagId
15526
	   AND PV_ID IN (SELECT PV.PV_ID 
15527
		   	  	  	FROM PACKAGE_VERSIONS PV, PACKAGES PKG
15528
				  	WHERE PKG.PKG_ID = PV.PKG_ID
15529
				  	AND PV.V_EXT IS NULL
15530
				  	AND PKG.PKG_ID = nPkgId
15531
				 	);
15532
	END IF;
15533
 
15534
	UPDATE RELEASE_CONTENT
15535
	SET PKG_ID = nPkgId, DEPRECATED_STATE = 7
15536
	WHERE RTAG_ID = nRtagId
15537
	AND PV_ID IN (		   SELECT DISTINCT
15538
 	 		  	 		   qry.PV_ID
15539
						        FROM (
15540
								 	  SELECT dep.*,
15541
									  LEVEL AS LEVEL_NUM
15542
									  FROM PACKAGE_DEPENDENCIES dep 
15543
 								START WITH dep.DPV_ID IN ( nPvId ) 
15544
								CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
15545
 								) qry,
15546
								PACKAGES pkg,
15547
								PACKAGE_VERSIONS pv,
15548
								RELEASE_CONTENT rc
15549
						 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
15550
							 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
15551
							 AND rc.DEPRECATED_STATE IS NULL
15552
				 );			 
15553
 
15554
    /* LOG ACTION */
15555
   	/*Log_Action ( nPkgId, 'deprecated_package', nUserId );*/
15556
 
15557
 
15558
END Deprecate_Package;
1374 dpurdie 15559
/
15560
--------------------------------------------------------
15561
--  DDL for Procedure LOG_PROJECT_ACTION
15562
--------------------------------------------------------
1373 dpurdie 15563
 
15564
  CREATE OR REPLACE PROCEDURE "LOG_PROJECT_ACTION" ( nProjId IN NUMBER,
15565
												 enumActionTypeName IN VARCHAR2,
15566
		                                         nUserId IN NUMBER,
15567
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL,
15568
												 nRtagId IN NUMBER  ) IS
15569
/* ---------------------------------------------------------------------------
15570
    Version: 3.0
15571
   --------------------------------------------------------------------------- */
15572
 
15573
    ActionTypeId NUMBER;
15574
 
15575
BEGIN
15576
 
15577
    -- Get Action Type FK
15578
    SELECT act.ACTTYPE_ID INTO ActionTypeId
15579
      FROM ACTION_TYPE act
15580
     WHERE act.NAME = enumActionTypeName;
15581
 
15582
 
15583
    INSERT INTO PROJECT_ACTION_LOG ( USER_ID, ACTION_DATETIME, PROJ_ID, DESCRIPTION, ACTTYPE_ID, RTAG_ID)
15584
    VALUES ( nUserId, ORA_SYSDATETIME, nProjId, sAdditionalComments, ActionTypeId, nRtagId);
15585
 
15586
 
15587
END Log_Project_Action;
1374 dpurdie 15588
/
15589
--------------------------------------------------------
15590
--  DDL for Procedure RIPPLE_PACKAGE
15591
--------------------------------------------------------
1373 dpurdie 15592
 
15593
  CREATE OR REPLACE PROCEDURE "RIPPLE_PACKAGE" (
15594
        sPvIdList IN VARCHAR2,
15595
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
15596
        nUserId IN NUMBER
15597
    ) IS
15598
/* ---------------------------------------------------------------------------
15599
    Version: 4.1
15600
   --------------------------------------------------------------------------- */
15601
 
15602
BEGIN
15603
 
15604
    IF (sPvIdList IS NULL) THEN
15605
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
15606
    END IF;
15607
 
15608
    -- Ripple Package
15609
    DELETE FROM DO_NOT_RIPPLE
15610
    WHERE RTAG_ID = nRtagId
15611
    AND PV_ID IN (
15612
        SELECT *
15613
        FROM THE (
15614
            SELECT CAST( IN_LIST_NUMBER( sPvIdList )
15615
            AS RELMGR_NUMBER_TAB_t )
15616
            FROM DUAL
15617
        )
15618
    );
15619
 
15620
    /* LOG ACTION */
15621
    Log_Action_Bulk ( sPvIdList, 'ripple_package', nUserId );
15622
 
15623
END Ripple_Package;
1374 dpurdie 15624
/
15625
--------------------------------------------------------
15626
--  DDL for Procedure DT_SETPROPERTYBYID
15627
--------------------------------------------------------
1373 dpurdie 15628
 
15629
  CREATE OR REPLACE PROCEDURE "DT_SETPROPERTYBYID" ( PARAM_ID   IN NUMBER, PARAM_PROPERTY IN VARCHAR2, PARAM_VALUE  IN VARCHAR2, PARAM_LVALUE  IN LONG RAW ) AS BEGIN DECLARE X NUMBER(40); BEGIN SELECT COUNT(*) INTO X FROM MICROSOFTDTPROPERTIES WHERE OBJECTID=PARAM_ID AND PROPERTY=PARAM_PROPERTY; IF X = 0 THEN INSERT INTO MICROSOFTDTPROPERTIES (ID, PROPERTY, OBJECTID, VALUE, LVALUE, VERSION) VALUES (MICROSOFTSEQDTPROPERTIES.NEXTVAL, PARAM_PROPERTY, PARAM_ID, PARAM_VALUE, PARAM_LVALUE, 0); ELSE UPDATE MICROSOFTDTPROPERTIES SET VALUE=PARAM_VALUE, LVALUE=PARAM_LVALUE, VERSION=VERSION+1 WHERE OBJECTID=PARAM_ID AND PROPERTY=PARAM_PROPERTY; END IF; END; END DT_SETPROPERTYBYID;
1374 dpurdie 15630
/
15631
--------------------------------------------------------
15632
--  DDL for Procedure BASIC_CLONE
15633
--------------------------------------------------------
1373 dpurdie 15634
 
15635
  CREATE OR REPLACE PROCEDURE "BASIC_CLONE" ( nFROMpv_id IN NUMBER,
15636
                        nTOpv_id IN NUMBER,
15637
                        nRtag_id IN NUMBER,
15638
                        nUser_id IN NUMBER,
15639
                        nTOpkg_id IN NUMBER DEFAULT NULL,
15640
                        enumISSUES_STATE_IMPORTED IN NUMBER DEFAULT NULL ) IS
15641
 
15642
   FromVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
15643
   major NUMBER;
15644
   minor NUMBER;
15645
   patch NUMBER;
15646
   buildn NUMBER;
15647
   from_vcs_type_id NUMBER;
15648
BEGIN
15649
------------------------------ Version Control System ------------------------------------------
15650
   SELECT vcs_type_id
15651
      INTO from_vcs_type_id
15652
      FROM package_versions WHERE pv_id = nFROMpv_id;
15653
 
15654
   UPDATE package_versions
15655
      SET vcs_type_id = from_vcs_type_id
15656
      WHERE pv_id = nTOpv_id;
15657
------------------------------------- Limits ---------------------------------------------------
15658
   select major_limit, minor_limit, patch_limit, build_number_limit
15659
   into major, minor, patch, buildn
15660
   from package_versions where pv_id=nFROMpv_id;
15661
    UPDATE package_versions SET
15662
           major_limit = major,
15663
           minor_limit = minor,
15664
           patch_limit = patch,
15665
           build_number_limit = buildn
15666
     WHERE PV_ID = nTOpv_id;
15667
------------------------------------- Clone Dependencies ---------------------------------------------------
15668
   IF NOT nRtag_id IS NULL
15669
   THEN
15670
      -- Auto Update Dependencies --
15671
      INSERT INTO PACKAGE_DEPENDENCIES
15672
           SELECT nTOpv_id AS pv_id,
15673
                  DECODE(nUser_id,
15674
                         frc.modifier_id,
15675
                         frc.pv_id,
15676
                         DECODE(frc.dlocked,
15677
                                'Y',
15678
                                frc.pv_id,
15679
                                dep.dpv_id)
15680
                         ) AS dpv_id,
15681
                  nTOpkg_id AS pkg_id,
15682
                  dep.dpkg_id,
15683
                  dep.build_type,
15684
                  dep.display_order
15685
             FROM PACKAGE_DEPENDENCIES dep,
15686
                  PACKAGE_VERSIONS pv,
15687
                  (
15688
                  /* Full Release Contents used for reference*/
15689
                  SELECT rpv.pv_id, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext, rpv.modifier_id, rpv.dlocked
15690
                  FROM RELEASE_CONTENT rel, PACKAGE_VERSIONS rpv
15691
                  WHERE rel.pv_id = rpv.pv_id AND rtag_id = nRtag_id
15692
                  ) frc
15693
            WHERE dep.pv_id = nFROMpv_id
15694
              AND dep.dpv_id = pv.pv_id
15695
              AND pv.pkg_id = frc.pkg_id(+)
15696
              AND NVL(pv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+);
15697
   ELSE
15698
      -- Clone Dependencies --
15699
      INSERT INTO PACKAGE_DEPENDENCIES
15700
           SELECT nTOpv_id         AS pv_id,
15701
                  dep.dpv_id,
15702
                  nTOpkg_id        AS pkg_id,
15703
                  dep.dpkg_id,
15704
                  dep.build_type,
15705
                  dep.display_order
15706
             FROM PACKAGE_DEPENDENCIES dep
15707
            WHERE dep.pv_id = nFROMpv_id;
15708
 
15709
   END IF;
15710
 
15711
----------------------------------------- Clone Issues -------------------------------------------------------
15712
   IF enumISSUES_STATE_IMPORTED IS NULL
15713
   THEN
15714
        /* All Issues */
15715
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15716
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15717
              FROM CQ_ISSUES
15718
             WHERE pv_id = nFROMpv_id;
15719
   ELSE
15720
       /* Outstanding Issues Only */
15721
       INSERT INTO CQ_ISSUES ( pv_id, iss_db, iss_id, iss_state, mod_date, notes )
15722
            SELECT nTOpv_id AS pv_id, iss_db, iss_id, iss_state, mod_date, notes
15723
              FROM CQ_ISSUES
15724
             WHERE pv_id = nFROMpv_id
15725
               AND iss_state = enumISSUES_STATE_IMPORTED;
15726
   END IF;
15727
 
15728
------------------------------------ Clone Runtime Dependencies -----------------------------------------------
15729
   INSERT INTO RUNTIME_DEPENDENCIES (pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user)
15730
       SELECT nTOpv_id AS pv_id, rtd_id, rtd_url, rtd_comments, mod_date, mod_user
15731
       FROM RUNTIME_DEPENDENCIES WHERE pv_id = nFROMpv_id;
15732
 
15733
--------------------------------------- Clone Additional Notes ------------------------------------------------
15734
   INSERT INTO ADDITIONAL_NOTES ( NOTE_ID, PV_ID, NOTE_TITLE, NOTE_BODY, MOD_DATE, MOD_USER )
15735
        SELECT an.NOTE_ID,
15736
               nTOpv_id AS PV_ID,
15737
               an.NOTE_TITLE,
15738
               an.NOTE_BODY,
15739
               an.MOD_DATE,
15740
               an.MOD_USER
15741
          FROM ADDITIONAL_NOTES an
15742
         WHERE an.PV_ID = nFROMpv_id;
15743
 
15744
-------------------------------------------- Clone Unit Tests -------------------------------------------------
15745
   -- Clone only Automatic unit tests --
15746
   INSERT INTO UNIT_TESTS (
15747
                           TEST_ID,
15748
                           PV_ID,
15749
                           TEST_TYPES_FK,
15750
                           TEST_SUMMARY,
15751
                           COMPLETION_DATE,
15752
                           COMPLETED_BY,
15753
                           RESULTS_URL,
15754
                           RESULTS_ATTACHMENT_NAME,
15755
                           NUMOF_TEST
15756
                          )
15757
        SELECT ut.TEST_ID,
15758
               nTOpv_id AS PV_ID,
15759
               ut.TEST_TYPES_FK,
15760
               ut.TEST_SUMMARY,
15761
               Ora_Sysdate AS COMPLETION_DATE,
15762
               nUser_id AS COMPLETED_BY,
15763
               ut.RESULTS_URL,
15764
               ut.RESULTS_ATTACHMENT_NAME,
15765
               ut.NUMOF_TEST
15766
          FROM UNIT_TESTS ut
15767
         WHERE ut.PV_ID = nFROMpv_id
15768
           AND ut.TEST_TYPES_FK IN ( 5, 7 );
15769
 
15770
    -- Clone only Interactive Unit Tests --
15771
    INSERT INTO UNIT_TESTS (
15772
                            TEST_ID,
15773
                            PV_ID,
15774
                            TEST_TYPES_FK,
15775
                            TEST_SUMMARY
15776
                           )
15777
       SELECT ut.TEST_ID,
15778
              nTOpv_id AS PV_ID,
15779
              ut.TEST_TYPES_FK,
15780
              ut.TEST_SUMMARY
15781
         FROM UNIT_TESTS ut
15782
        WHERE ut.PV_ID = nFROMpv_id
15783
          AND ut.TEST_TYPES_FK IN (6);
15784
 
15785
-------------------------------------------- Clone Package Documents ------------------------------------------
15786
   INSERT INTO PACKAGE_DOCUMENTS ( PV_ID, TEST_ID, DOC_NUM, DOC_ID, IS_LATEST )
15787
        SELECT nTOpv_id AS PV_ID,
15788
               pd.test_id,
15789
               pd.doc_num,
15790
               pd.doc_id,
15791
               pd.IS_LATEST
15792
          FROM PACKAGE_DOCUMENTS pd
15793
         WHERE pd.PV_ID = nFROMpv_id;
15794
 
15795
-------------------------------------------- Clone Build Environments -----------------------------------------
15796
    INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID, BUILD_TYPE )
15797
    SELECT nTOpv_id AS PV_ID,
15798
           pkgbe.BE_ID,
15799
           pkgbe.BUILD_TYPE
15800
      FROM PACKAGE_BUILD_ENV pkgbe
15801
     WHERE pkgbe.PV_ID = nFROMpv_id;
15802
---------------------------------------------Clone Package Build Info------------------------------------------
15803
    INSERT INTO PACKAGE_BUILD_INFO (PV_ID, BM_ID, BSA_ID)
15804
    SELECT nTOpv_id AS PV_ID,
15805
           pkgbinfo.BM_ID,
15806
           pkgbinfo.BSA_ID
15807
      FROM PACKAGE_BUILD_INFO pkgbinfo
15808
     WHERE pkgbinfo.PV_ID = nFROMpv_id;
15809
---------------------------------------------Clone Package Version Processes-----------------------------------
15810
    INSERT INTO PACKAGE_PROCESSES ( PV_ID, PROC_ID )
15811
    SELECT nTOpv_id AS PV_ID,
15812
           pp.PROC_ID
15813
      FROM PACKAGE_PROCESSES pp
15814
     WHERE pp.PV_ID = nFROMpv_id;
15815
---------------------------------------------Clone Licencing Associations-----------------------------------
15816
    PK_LICENCING.CLONE_LICENCING(nFROMpv_id, nTOpv_id, nUser_id);
15817
---------------------------------------------------------------------------------------------------------------
15818
 
15819
    /* LOG ACTION */
15820
    SELECT pv.PKG_VERSION INTO FromVersion
15821
      FROM PACKAGE_VERSIONS pv
15822
     WHERE pv.PV_ID = nFROMpv_id;
15823
 
15824
    Log_Action ( nTOpv_id, 'clone_from', nUser_id,
15825
                 'Details cloned from: '|| FromVersion );
15826
 
15827
---------------------------------------------------------------------------------------------------------------
15828
 
15829
END Basic_Clone;
1374 dpurdie 15830
/
15831
--------------------------------------------------------
15832
--  DDL for Procedure UPDATE_UNIT_TEST
15833
--------------------------------------------------------
1373 dpurdie 15834
 
15835
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST" ( nTest_id IN NUMBER,
15836
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
15837
											   nPv_id IN NUMBER,
15838
											   nUserId IN NUMBER,
15839
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
15840
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
15841
	                                           sCompletion_date IN VARCHAR2,
15842
											   sDpkg_path IN VARCHAR2,
15843
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
15844
											   sResults IN VARCHAR2,
15845
											   outFileName OUT VARCHAR2
15846
                                              ) IS
15847
/* ---------------------------------------------------------------------------
15848
    Version: 3.1.0
15849
   --------------------------------------------------------------------------- */
15850
 
15851
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
15852
 
15853
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
15854
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
15855
 
15856
 
15857
BEGIN
15858
 
15859
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
15860
       	ResultsURL := sResults;
15861
       ELSE
15862
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
15863
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
15864
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
15865
           END IF;
15866
       END IF;
15867
 
15868
	--- Update Unit Test ---
15869
    UPDATE UNIT_TESTS SET
15870
           TEST_SUMMARY = sTest_summary,
15871
		   NUMOF_TEST = sNumof_test,
15872
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
15873
		   COMPLETED_BY = nUserId,
15874
		   RESULTS_URL = ResultsURL,
15875
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
15876
     WHERE TEST_ID = nTest_id
15877
       AND PV_ID = nPv_id;
15878
 
15879
END Update_Unit_Test;
1374 dpurdie 15880
/
15881
--------------------------------------------------------
15882
--  DDL for Procedure SET_TO_AUTOBUILDABLE
15883
--------------------------------------------------------
1373 dpurdie 15884
 
15885
  CREATE OR REPLACE PROCEDURE "SET_TO_AUTOBUILDABLE" (
15886
   nrtagid     IN   NUMBER,
15887
   spvidlist   IN   VARCHAR2
15888
)
15889
IS
15890
/******************************************************************************
15891
   NAME:       SET_TO_AUTOBUILDABLE
15892
   PURPOSE:
15893
 
15894
   REVISIONS:
15895
   Ver        Date        Author           Description
15896
   ---------  ----------  ---------------  ------------------------------------
15897
   1.0        15/12/2006   Rupesh Solanki       1. Created this procedure.
15898
 
15899
   NOTES:
15900
 
15901
   Automatically available Auto Replace Keywords:
15902
      Object Name:     SET_TO_AUTOBUILDABLE
15903
      Sysdate:         15/12/2006
15904
      Date and Time:   15/12/2006, 11:42:29 AM, and 15/12/2006 11:42:29 AM
15905
      Username:         (set in TOAD Options, Procedure Editor)
15906
      Table Name:       (set in the "New PL/SQL Object" dialog)
15907
 
15908
******************************************************************************/
15909
   npvidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
15910
   PvId NUMBER;
15911
BEGIN
15912
 
15913
   npvidcollector := in_list_number2 (spvidlist);
15914
 
15915
   UPDATE package_versions
15916
      SET is_autobuildable = 'N'
15917
    WHERE pv_id IN (SELECT pv_id
15918
                      FROM release_content
15919
                     WHERE rtag_id = nrtagid);
15920
 
15921
 
15922
 
15923
   	FOR i IN 1..npvidcollector.COUNT
15924
	LOOP
15925
		PvId := npvidcollector(i);
15926
 
15927
		UPDATE package_versions
15928
		set is_autobuildable = 'Y'
15929
		where pv_id = PvId;
15930
 
15931
	END LOOP;
15932
 
15933
 
15934
END set_to_autobuildable;
1374 dpurdie 15935
/
15936
--------------------------------------------------------
15937
--  DDL for Procedure LEVEL_N_CONFLICTS
15938
--------------------------------------------------------
1373 dpurdie 15939
 
15940
  CREATE OR REPLACE PROCEDURE "LEVEL_N_CONFLICTS" (
15941
   nnrtag_id       IN       NUMBER,
15942
   nnsession_num   IN       NUMBER,
15943
   nnrowcnt        OUT      NUMBER,
15944
   nniteration     IN       NUMBER
15945
)
15946
IS
15947
/* ---------------------------------------------------------------------------
15948
    Version: 3.0.1
15949
   --------------------------------------------------------------------------- */
15950
   previteration   NUMBER := nniteration - 1;
15951
BEGIN
15952
   /* ---------  LEVEL 1 CONFILCTS -----------
15953
   || Following states are used:
15954
   || 0 -> NOT FOUND
15955
   || 1 -> MAJOR
15956
   || 2 -> MINOR MINOR
15957
   */
15958
   INSERT INTO temp_env_states
15959
      SELECT DISTINCT nnsession_num AS session_num, nniteration AS level_num,
15960
                      pv.pv_id, pv.pkg_id, pv.v_ext,
15961
                      DECODE (tes.tes_state, 2, 2, 1) AS MESSAGE
15962
                 FROM package_dependencies dep,
15963
                      package_versions dpv,
15964
                      package_versions pv,
15965
                      release_content rel,
15966
                      temp_env_states tes
15967
                WHERE rel.pv_id = dep.pv_id
15968
                  AND rel.rtag_id = nnrtag_id
15969
                  AND dep.pv_id = pv.pv_id
15970
                  AND dep.dpv_id = dpv.pv_id
15971
                  AND dpv.pkg_id = tes.pkg_id
15972
                  AND NVL (dpv.v_ext, '|LINK_A_NULL|') =
15973
                                              NVL (tes.v_ext, '|LINK_A_NULL|')
15974
                  AND tes.session_num = nnsession_num
15975
                  AND tes.level_num = previteration
15976
                  AND (dep.pv_id, dep.dpv_id) IN 
15977
                                                   /* Remove packages listed in IGNORE_WARNINGS table and
15978
                                                 || packages already stored in Temp Table.
15979
                                                 */
15980
                      (
15981
                         SELECT pd.pv_id, pd.dpv_id
15982
                           FROM package_dependencies pd, release_content rc
15983
                          WHERE pd.pv_id = rc.pv_id AND rc.rtag_id = nnrtag_id
15984
                         --AND pd.pv_id NOT IN ( SELECT pv_id FROM temp_env_states WHERE session_num = NNsession_num AND level_num > 5 )
15985
                         MINUS
15986
                         SELECT igw.pv_id, igw.dpv_id
15987
                           FROM ignore_warnings igw
15988
                          WHERE igw.rtag_id = nnrtag_id);
15989
 
15990
   nnrowcnt := SQL%ROWCOUNT;
15991
END level_n_conflicts;
1374 dpurdie 15992
/
15993
--------------------------------------------------------
15994
--  DDL for Procedure REMOVE_COMPONENTS
15995
--------------------------------------------------------
1373 dpurdie 15996
 
15997
  CREATE OR REPLACE PROCEDURE "REMOVE_COMPONENTS" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE ) IS
15998
/* ---------------------------------------------------------------------------
15999
    Version: 3.0.0
16000
   --------------------------------------------------------------------------- */
16001
 
16002
 
16003
BEGIN
16004
 
16005
	 --- Delete From RELEASE_COMPONENTS
16006
	 DELETE FROM RELEASE_COMPONENTS
16007
	 WHERE PV_ID = nPvId;
16008
 
16009
END Remove_Components;
1374 dpurdie 16010
/
16011
--------------------------------------------------------
16012
--  DDL for Procedure ADD_COMPONENT
16013
--------------------------------------------------------
1373 dpurdie 16014
 
16015
  CREATE OR REPLACE PROCEDURE "ADD_COMPONENT" ( nPvId IN RELEASE_COMPONENTS.PV_ID%TYPE,
16016
	   	  		  						  	sFileName IN RELEASE_COMPONENTS.FILE_NAME%TYPE,
16017
											sFilePath IN RELEASE_COMPONENTS.FILE_PATH%TYPE DEFAULT NULL,
16018
											nByteSize IN RELEASE_COMPONENTS.BYTE_SIZE%TYPE,
16019
											sCRCcksum IN RELEASE_COMPONENTS.CRC_CKSUM%TYPE DEFAULT NULL,
16020
											sCRCmodcrc IN RELEASE_COMPONENTS.CRC_MODCRC%TYPE DEFAULT NULL
16021
                                           ) IS
16022
/* ---------------------------------------------------------------------------
16023
    Version: 3.0.0
16024
   --------------------------------------------------------------------------- */
16025
 
16026
 
16027
BEGIN
16028
 
16029
	 --- Insert into RELEASE_COMPONENTS
16030
	 INSERT INTO RELEASE_COMPONENTS ( PV_ID, FILE_NAME, FILE_PATH, BYTE_SIZE, CRC_CKSUM, CRC_MODCRC )
16031
	 VALUES ( nPvId, sFileName, sFilePath, nByteSize, sCRCcksum, sCRCmodcrc  );
16032
 
16033
 
16034
 
16035
 
16036
END Add_Component;
1374 dpurdie 16037
/
16038
--------------------------------------------------------
16039
--  DDL for Procedure ADD_PACKAGE_INTEREST
16040
--------------------------------------------------------
1373 dpurdie 16041
 
16042
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
16043
	   	  		  								  nPkgIdList IN VARCHAR2,
16044
												  nUserId IN NUMBER
16045
	   	  		  								  ) IS
16046
 
16047
/******************************************************************************
16048
   NAME:       ADD_PACKAGE_INTEREST
16049
   PURPOSE:    
16050
 
16051
   REVISIONS:
16052
   Ver        Date        Author           Description
16053
   ---------  ----------  ---------------  ------------------------------------
16054
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
16055
 
16056
   NOTES:
16057
 
16058
   Automatically available Auto Replace Keywords:
16059
      Object Name:     ADD_PACKAGE_INTEREST
16060
      Sysdate:         12/05/2006
16061
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
16062
      Username:         (set in TOAD Options, Procedure Editor)
16063
      Table Name:       (set in the "New PL/SQL Object" dialog)
16064
 
16065
******************************************************************************/
16066
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
16067
   nPkgId NUMBER;
16068
BEGIN
16069
 
16070
	 npkgidcollector := in_list_number2 (nPkgIdList);
16071
 
16072
	FOR i IN 1..npkgidcollector.COUNT
16073
	LOOP
16074
		nPkgId := npkgidcollector(i);
16075
 
16076
	 --- Insert into PACKAGE_INTEREST TABLE
16077
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
16078
	 VALUES(nProjId, nPkgId, nUserId);
16079
	END LOOP;	 
16080
 
16081
 
16082
END ADD_PACKAGE_INTEREST;
1374 dpurdie 16083
/
16084
--------------------------------------------------------
16085
--  DDL for Procedure UNLOCK_PACKAGE
16086
--------------------------------------------------------
1373 dpurdie 16087
 
16088
  CREATE OR REPLACE PROCEDURE "UNLOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16089
											 nUserId IN NUMBER ) IS
16090
/* ---------------------------------------------------------------------------
16091
    Author: Rupesh Solanki
16092
 
16093
	Version: 4.0
16094
   --------------------------------------------------------------------------- */
16095
   STATE CHAR;
16096
 
16097
BEGIN
16098
 
16099
	SELECT DLOCKED INTO STATE
16100
	FROM PACKAGE_VERSIONS
16101
	WHERE PV_ID = nPvId; 
16102
 
16103
	IF STATE = 'A' THEN --It was made official for autobuilds
16104
		-- Unlock Package
16105
		UPDATE PACKAGE_VERSIONS pv SET
16106
		pv.DLOCKED = 'P'
16107
		WHERE pv.PV_ID = nPvId;	
16108
	ELSE
16109
		-- Unlock Package
16110
		UPDATE PACKAGE_VERSIONS pv SET
16111
		pv.DLOCKED = 'N'
16112
		WHERE pv.PV_ID = nPvId;	
16113
 
16114
	END IF;	   
16115
 
16116
    /* LOG ACTION */
16117
   	Log_Action ( nPvId, 'unlock_package', nUserId );
16118
 
16119
END Unlock_Package;
1374 dpurdie 16120
/
16121
--------------------------------------------------------
16122
--  DDL for Procedure REMOVE_PROJECT_VIEW_OWNER
16123
--------------------------------------------------------
1373 dpurdie 16124
 
16125
  CREATE OR REPLACE PROCEDURE "REMOVE_PROJECT_VIEW_OWNER" (nProjId IN NUMBER,
16126
	   	  		  						 			  nViewId IN NUMBER,
16127
										 			  sUserIdList IN VARCHAR2,
16128
										 			  nUserId IN NUMBER ) IS
16129
 
16130
GroupId NUMBER;													  
16131
 
16132
 
16133
 
16134
/******************************************************************************
16135
   NAME:       UPDATE_VIEW
16136
   PURPOSE:    
16137
 
16138
   REVISIONS:
16139
   Ver        Date        Author           		Description
16140
   ---------  ----------  ---------------  ------------------------------------
16141
   1.0        10/04/2006     Rupesh Solanki     1. Created this procedure.
16142
 
16143
   NOTES:
16144
 
16145
   Automatically available Auto Replace Keywords:
16146
      Object Name:     UPDATE_VIEW
16147
      Sysdate:         10/04/2006
16148
      Date and Time:   10/04/2006, 1:55:19 PM, and 10/04/2006 1:55:19 PM
16149
      Username:         (set in TOAD Options, Procedure Editor)
16150
      Table Name:       (set in the "New PL/SQL Object" dialog)
16151
 
16152
******************************************************************************/
16153
 
16154
BEGIN
16155
	 SELECT GROUP_EMAIL_ID into GroupId
16156
	 FROM AUTOBUILD_FAILURE
16157
	 WHERE PROJ_ID = nProjId
16158
	 AND VIEW_ID = nViewId;
16159
 
16160
	 DELETE FROM MEMBERS_GROUP
16161
	 WHERE GROUP_EMAIL_ID = GroupId
16162
	 AND USER_ID IN (
16163
	 SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
16164
	 );
16165
 
16166
 
16167
 
16168
END REMOVE_PROJECT_VIEW_OWNER;
1374 dpurdie 16169
/
16170
--------------------------------------------------------
16171
--  DDL for Procedure DEPLOY_TO_RELEASE
16172
--------------------------------------------------------
1373 dpurdie 16173
 
16174
  CREATE OR REPLACE PROCEDURE "DEPLOY_TO_RELEASE" IS
16175
 
16176
/******************************************************************************
16177
 
16178
 
16179
******************************************************************************/
16180
 
16181
	CURSOR curInfo IS
16182
    SELECT DISTINCT
16183
        qry.DPV_ID
16184
     FROM (
16185
             SELECT dep.*,
16186
                    LEVEL AS LEVEL_NUM
16187
               FROM PACKAGE_DEPENDENCIES dep
16188
             START WITH dep.PV_ID IN ( 
16189
 
16190
                        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
16191
 
16192
                        ) 
16193
 			CONNECT BY PRIOR dep.DPV_ID = dep.PV_ID
16194
 		) qry,
16195
 		PACKAGES pkg,
16196
		PACKAGE_VERSIONS pv
16197
 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
16198
         and (pv.is_patch is null or pv.is_patch = 'N');
16199
    recInfo curInfo%ROWTYPE;
16200
 
16201
 
16202
BEGIN
16203
 
16204
	OPEN curInfo;
16205
    FETCH curInfo INTO recInfo;
16206
 
16207
	WHILE curInfo%FOUND
16208
	LOOP
16209
 
16210
	insert into release_content(RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE)
16211
    VALUES(8027, recInfo.dpv_id, 7, ora_sysdatetime, 0, 0);
16212
 
16213
    FETCH curInfo INTO recInfo;
16214
 
16215
	END LOOP;
16216
 
16217
	CLOSE curInfo;
16218
 
16219
 
16220
 
16221
 
16222
END DEPLOY_TO_RELEASE; 
1374 dpurdie 16223
/
16224
--------------------------------------------------------
16225
--  DDL for Procedure TOUCH_RELEASE
16226
--------------------------------------------------------
1373 dpurdie 16227
 
16228
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE" ( nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
16229
/* ---------------------------------------------------------------------------
16230
    The purpose of this procedure is to flag in the database that the specified
16231
    release has changed to an extent that the procedure Rebuild_Environment
16232
    should be called at the next opportunity in order that the package state
16233
    icons are all re-evaluated.
16234
    The package state icons are controlled using the pkg_state column in the
16235
    release_content table, and Rebuild_Environment updates that column.
16236
    It will be through user action in the website that Rebuild_Environment will
16237
    be called, for example:
16238
      a) when setting/clearing ignore warnings checkboxes
16239
      b) when someone opens a page upon a rtag/pvid and rebuild_en flag is set
16240
      c) when someone opens the build order report form
16241
      d) when someone modifies dependencies of a package
16242
      + other scenarios (?)
16243
   --------------------------------------------------------------------------- */
16244
BEGIN
16245
   -- Touch Release for Rebuild
16246
   UPDATE RELEASE_TAGS rt SET
16247
          rt.REBUILD_ENV = 'Y',
16248
          rt.REBUILD_STAMP = 0
16249
    WHERE rt.RTAG_ID = nRtagId;
16250
 
16251
END Touch_Release;
1374 dpurdie 16252
/
16253
--------------------------------------------------------
16254
--  DDL for Procedure UNRIPPLE_PACKAGE
16255
--------------------------------------------------------
1373 dpurdie 16256
 
16257
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE" (
16258
        sPvIdList IN VARCHAR2,
16259
        nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
16260
        nUserId IN NUMBER
16261
    ) IS
16262
/* ---------------------------------------------------------------------------
16263
    Version: 4.1
16264
   --------------------------------------------------------------------------- */
16265
 
16266
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
16267
 
16268
BEGIN
16269
 
16270
    IF (sPvIdList IS NULL) THEN
16271
        RAISE_APPLICATION_ERROR (-20000, 'Please select at least one package.' );
16272
    END IF;
16273
 
16274
    oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
16275
 
16276
    -- UnRipple Package
16277
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID )
16278
    SELECT nRtagId, pv.PV_ID
16279
    FROM PACKAGE_VERSIONS pv
16280
    WHERE pv.PV_ID IN (
16281
        SELECT *
16282
        FROM TABLE (
16283
            CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t )
16284
        )
16285
    );
16286
 
16287
    /* LOG ACTION */
16288
    Log_Action_Bulk ( sPvIdList, 'unripple_package', nUserId );
16289
 
16290
END UnRipple_Package;
1374 dpurdie 16291
/
16292
--------------------------------------------------------
16293
--  DDL for Procedure DT_DROPUSEROBJECTBYID
16294
--------------------------------------------------------
1373 dpurdie 16295
 
16296
  CREATE OR REPLACE PROCEDURE "DT_DROPUSEROBJECTBYID" ( PARAM_ID IN NUMBER ) AS BEGIN DELETE FROM MICROSOFTDTPROPERTIES WHERE OBJECTID = PARAM_ID; END DT_DROPUSEROBJECTBYID;
1374 dpurdie 16297
/
16298
--------------------------------------------------------
16299
--  DDL for Procedure UNRIPPLE_PACKAGE_INDIRECT
16300
--------------------------------------------------------
1373 dpurdie 16301
 
16302
  CREATE OR REPLACE PROCEDURE "UNRIPPLE_PACKAGE_INDIRECT" (
16303
        nPvId IN NUMBER,
16304
        nRtagId IN NUMBER,
16305
        nUserId IN NUMBER,
16306
        nrootCausePvId IN NUMBER,
16307
        srootCause IN VARCHAR2,
16308
        srootFile IN VARCHAR2
16309
    ) IS
16310
    ReleaseLocation VARCHAR2(4000);
16311
BEGIN
16312
 
16313
    -- UnRipple Package
16314
    delete from do_not_ripple where rtag_id=nRtagId and pv_id=nPvId;
16315
    INSERT INTO DO_NOT_RIPPLE ( RTAG_ID, PV_ID, ROOT_PV_ID, ROOT_CAUSE, ROOT_FILE ) values (nRtagId, nPvId, nrootCausePvId, srootCause, srootFile);
16316
 
16317
    /* LOG ACTION */
16318
   SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16319
              FROM PROJECTS proj,
16320
                   RELEASE_TAGS rt
16321
             WHERE rt.RTAG_ID = nRtagId
16322
               AND rt.PROJ_ID = proj.PROJ_ID;
16323
 
16324
    /* LOG ACTION */
16325
    Log_Action ( nPvId, 'unripple_package', nUserId, 'Location: '|| ReleaseLocation );
16326
 
16327
END UnRipple_Package_Indirect;
1374 dpurdie 16328
/
16329
--------------------------------------------------------
16330
--  DDL for Procedure TO_INSERT_VTREE_ID
16331
--------------------------------------------------------
1373 dpurdie 16332
 
16333
  CREATE OR REPLACE PROCEDURE "TO_INSERT_VTREE_ID" IS
16334
 
16335
/******************************************************************************
16336
   NAME:       TO_INSERT_VTREE_ID
16337
   PURPOSE:    
16338
 
16339
   REVISIONS:
16340
   Ver        Date        Author           Description
16341
   ---------  ----------  ---------------  ------------------------------------
16342
   1.0        2/02/2007          1. Created this procedure.
16343
 
16344
   NOTES:
16345
 
16346
   Automatically available Auto Replace Keywords:
16347
      Object Name:     TO_INSERT_VTREE_ID
16348
      Sysdate:         2/02/2007
16349
      Date and Time:   2/02/2007, 8:42:56 AM, and 2/02/2007 8:42:56 AM
16350
      Username:         (set in TOAD Options, Procedure Editor)
16351
      Table Name:       (set in the "New PL/SQL Object" dialog)
16352
 
16353
******************************************************************************/
16354
VTreeId NUMBER;																			  																	   
16355
 
16356
 
16357
	CURSOR curInfo IS
16358
    SELECT RTAG_ID
16359
	FROM RELEASE_TAGS
16360
	WHERE VTREE_ID IS NULL;
16361
    recInfo curInfo%ROWTYPE;
16362
 
16363
 
16364
BEGIN
16365
 
16366
	OPEN curInfo;
16367
    FETCH curInfo INTO recInfo;
16368
 
16369
	WHILE curInfo%FOUND
16370
	LOOP
16371
		SELECT SEQ_VTREE_ID.nextval INTO VTreeId FROM DUAL;
16372
 
16373
		UPDATE RELEASE_TAGS
16374
		SET VTREE_ID = VTreeId
16375
		WHERE RTAG_ID = recInfo.RTAG_ID;
16376
 
16377
		FETCH curInfo INTO recInfo;
16378
	END LOOP;
16379
 
16380
	CLOSE curInfo;
16381
 
16382
END TO_INSERT_VTREE_ID;
1374 dpurdie 16383
/
16384
--------------------------------------------------------
16385
--  DDL for Procedure CHANGE_RELEASE_MODE
16386
--------------------------------------------------------
1373 dpurdie 16387
 
16388
  CREATE OR REPLACE PROCEDURE "CHANGE_RELEASE_MODE" ( nModeCode IN NUMBER, nRtagId IN NUMBER, UserId IN NUMBER ) IS
16389
/* ---------------------------------------------------------------------------
16390
    Version: 3.0.0
16391
   --------------------------------------------------------------------------- */
16392
 
16393
	cMode CHAR(1) := NULL;  
16394
	nProjId NUMBER; 
16395
 
16396
BEGIN
16397
 
16398
 
16399
	/*
16400
	Author: Rupesh Solanki
16401
	Modified: 24th October 2006
16402
	Reason: Added the archive mode state into Release Manager 
16403
	||	1 - Open Mode
16404
	||	2 - Restrictive Mode
16405
	||	3 - Closed Mode
16406
	||	4 - CCB Mode
16407
	||	5 - Archive Mode
16408
	*/	
16409
	-- Get project Id
16410
	SELECT rt.PROJ_ID INTO nProjId
16411
	  FROM RELEASE_TAGS rt
16412
	 WHERE rt.RTAG_ID = nRtagId; 
16413
 
16414
	IF nModeCode = 1 THEN
16415
		-- Open Mode
16416
		cMode := 'N';
16417
 
16418
		/* LOG ACTION */
16419
   		Log_Project_Action ( nProjId, 'set_to_open_mode', UserId, 'Release is set to Open Mode', nRtagId );
16420
 
16421
	ELSIF nModeCode = 2 THEN
16422
		-- Restrictive Mode
16423
		cMode := 'R';
16424
 
16425
		/* LOG ACTION */
16426
   		Log_Project_Action ( nProjId, 'set_to_restrictive_mode', UserId, 'Release is set to Restrictive Mode', nRtagId );
16427
 
16428
	ELSIF nModeCode = 3 THEN
16429
		-- Closed Mode
16430
		cMode := 'Y';
16431
 
16432
		/* LOG ACTION */
16433
   		Log_Project_Action ( nProjId, 'set_to_closed_mode', UserId, 'Release is set to Closed Mode', nRtagId  );
16434
 
16435
	ELSIF nModeCode = 4 THEN
16436
		-- CCB Mode
16437
		cMode := 'C';
16438
 
16439
		/* LOG ACTION */
16440
   		Log_Project_Action ( nProjId, 'set_to_ccb_mode', UserId, 'Release is set to CCB Mode', nRtagId  );
16441
 
16442
	ELSIF nModeCode = 5 THEN
16443
		-- Archive Mode
16444
		cMode := 'A';
16445
 
16446
		/* LOG ACTION */
16447
   		Log_Project_Action ( nProjId, 'set_to_archive_mode', UserId, 'Release is set to Archive Mode', nRtagId  );	
16448
 
16449
 
16450
	END IF;
16451
 
16452
 
16453
 
16454
	-- Now update table
16455
	IF NOT cMode IS NULL THEN
16456
		UPDATE RELEASE_TAGS rt SET
16457
		rt.OFFICIAL = cMode
16458
		WHERE rt.RTAG_ID = nRtagId;
16459
 
16460
	END IF;
16461
 
16462
 
16463
END CHANGE_RELEASE_MODE;
1374 dpurdie 16464
/
16465
--------------------------------------------------------
16466
--  DDL for Procedure UPDATE_UNIT_TEST_TEST
16467
--------------------------------------------------------
1373 dpurdie 16468
 
16469
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_TEST" ( nTest_id IN NUMBER,
16470
	   	  		  							   nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,  	
16471
											   nPv_id IN NUMBER,
16472
											   nUserId IN NUMBER,
16473
	                                           sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
16474
											   sNumof_test IN UNIT_TESTS.NUMOF_TEST%TYPE,
16475
	                                           sCompletion_date IN VARCHAR2,
16476
											   sDpkg_path IN VARCHAR2,
16477
											   enumTEST_TYPE_AUTOMATIC IN NUMBER,
16478
											   sResults IN VARCHAR2,
16479
											   outFileName OUT VARCHAR2
16480
                                              ) IS
16481
/* ---------------------------------------------------------------------------
16482
    Version: 3.1.0
16483
   --------------------------------------------------------------------------- */
16484
 
16485
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
16486
 
16487
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
16488
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
16489
 
16490
 
16491
BEGIN
16492
 
16493
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
16494
       	ResultsURL := sResults;
16495
       ELSE
16496
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16497
        	outFileName := FILENAME_PREFIX || nTest_id ||'_'|| sResults;
16498
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
16499
           END IF;
16500
       END IF;
16501
 
16502
       /*	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
16503
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
16504
    		sResults_url:= 'doc' || '/' || 
16505
			;
16506
        END IF;*/
16507
	--- Update Unit Test ---
16508
    UPDATE UNIT_TESTS SET
16509
           TEST_SUMMARY = sTest_summary,
16510
		   NUMOF_TEST = sNumof_test,
16511
           COMPLETION_DATE = TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
16512
		   COMPLETED_BY = nUserId,
16513
		   RESULTS_URL = ResultsURL,
16514
		   RESULTS_ATTACHMENT_NAME = ResultsAttachment
16515
     WHERE TEST_ID = nTest_id
16516
       AND PV_ID = nPv_id;
16517
 
16518
END Update_Unit_Test_Test;
1374 dpurdie 16519
/
16520
--------------------------------------------------------
16521
--  DDL for Procedure NEW_VERSION
16522
--------------------------------------------------------
1373 dpurdie 16523
 
16524
  CREATE OR REPLACE PROCEDURE "NEW_VERSION" ( NNorig_pv_id IN NUMBER,
16525
                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE DEFAULT NULL,
16526
                                          NNsetto_pv_id IN NUMBER DEFAULT NULL,
16527
                                          NNrtag_id IN NUMBER,
16528
                                          NNuser_id IN NUMBER,
16529
                                          enumISSUES_STATE_IMPORTED IN NUMBER,
16530
                                          retPv_id OUT NUMBER ) IS
16531
 
16532
 
16533
  TO BE REMOVED   !!!										  
16534
 
16535
 
16536
 
16537
 
16538
/* ---------------------------------------------------------------------------
16539
    Version: 3.3
16540
   --------------------------------------------------------------------------- */
16541
 
16542
    ReleaseLocation VARCHAR2(4000);
16543
    origPkg_id PACKAGE_VERSIONS.pkg_id%TYPE;
16544
    origDlocked PACKAGE_VERSIONS.dlocked%TYPE;
16545
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
16546
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
16547
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
16548
    nIssuesTypes NUMBER;
16549
 
16550
    CURSOR package_versions_cur IS
16551
        SELECT pv.pv_id, pv.is_patch
16552
          FROM PACKAGE_VERSIONS pv
16553
         WHERE pv.pkg_version = SSpkg_version
16554
           AND pv.pkg_id IN ( SELECT DISTINCT origpv.pkg_id FROM PACKAGE_VERSIONS origpv WHERE origpv.pv_id = NNorig_pv_id );
16555
    package_versions_rec package_versions_cur%ROWTYPE;
16556
 
16557
    CURSOR clone_package_versions_cur IS
16558
        SELECT DISTINCT pkg_id, dlocked FROM PACKAGE_VERSIONS WHERE pv_id = NNorig_pv_id;
16559
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
16560
 
16561
BEGIN
16562
	IF NNsetto_pv_id IS NULL
16563
    THEN
16564
		-- SetToPv_id is not supplied, hence proceed.
16565
 
16566
	    /* ---------------------------------------------------- */
16567
	    /* Find id package_version exists                       */
16568
	    /* ---------------------------------------------------- */
16569
 
16570
	    OPEN package_versions_cur;
16571
	    FETCH package_versions_cur INTO package_versions_rec;
16572
 
16573
	    IF package_versions_cur%NOTFOUND
16574
	    THEN
16575
	        SELECT SEQ_PV_ID.NEXTVAL INTO retPv_id FROM DUAL;
16576
	        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
16577
 
16578
	        OPEN clone_package_versions_cur;
16579
	        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
16580
	        origPkg_id := clone_package_versions_rec.pkg_id;
16581
	        origDlocked := clone_package_versions_rec.dlocked;
16582
	        CLOSE clone_package_versions_cur;
16583
 
16584
	        -- Clone Package Version Details --
16585
	        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,
16586
	                                       src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, IS_DEPLOYABLE, IS_BUILD_ENV_REQUIRED )
16587
	            SELECT retPv_id         AS pv_id,
16588
	                   origPkg_id       AS pkg_id,
16589
	                   SSpkg_version    AS pkg_version,
16590
	                   'N'              AS dlocked,
16591
	                   Ora_Sysdate      AS created_stamp,
16592
	                   NNuser_id        AS creator_id,
16593
	                   Ora_Sysdatetime  AS modified_stamp,
16594
	                   NNuser_id        AS modifier_id,
16595
	                   SSV_MM           AS V_MM,
16596
	                   SSV_NMM          AS V_NMM,
16597
	                   SSV_EXT          AS V_EXT,
16598
	                   pv.src_path,
16599
	                   pv.pv_description,
16600
                       pv.PV_OVERVIEW,
16601
                       NNorig_pv_id 	AS LAST_PV_ID,
16602
	                   pv.owner_id,
16603
					   pv.IS_DEPLOYABLE,
16604
					   pv.IS_BUILD_ENV_REQUIRED
16605
	              FROM PACKAGE_VERSIONS pv
16606
	             WHERE pv.pv_id = NNorig_pv_id;
16607
 
16608
 
16609
	        -- Set Issues Type for cloning ---
16610
	        IF origDlocked = 'Y'
16611
	        THEN
16612
            	nIssuesTypes := enumISSUES_STATE_IMPORTED;
16613
	        ELSE
16614
            	nIssuesTypes := NULL;
16615
	        END IF;
16616
 
16617
			Basic_Clone ( NNorig_pv_id, retPv_id, NNrtag_id, NNuser_id, origPkg_id, nIssuesTypes );
16618
 
16619
 
16620
 
16621
	    ELSE
16622
	        retPv_id := package_versions_rec.pv_id;
16623
 
16624
	    END IF;
16625
 
16626
        CLOSE package_versions_cur;
16627
 
16628
	ELSE
16629
    	retPv_id := NNsetto_pv_id;
16630
    END IF;
16631
 
16632
 
16633
    /* ---------------------------------------------------- */
16634
    /* Insert into Release Contents (EXCLUDE PATCHES)       */
16635
    /* ---------------------------------------------------- */
16636
	IF (package_versions_rec.is_patch != 'Y') OR (package_versions_rec.is_patch IS NULL) THEN
16637
	    UPDATE RELEASE_CONTENT
16638
	       SET pv_id = retPv_id,
16639
	           insert_stamp = Ora_Sysdate,
16640
	           insertor_id = NNuser_id
16641
	     WHERE rtag_id = NNrtag_id
16642
	       AND pv_id = NNorig_pv_id;
16643
 
16644
        /* LOG ACTION */
16645
        SELECT proj.PROJ_NAME ||' / '|| vt.VTREE_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
16646
		  FROM PROJECTS proj,
16647
		  	   VTREES vt,
16648
		       RELEASE_TAGS rt
16649
		 WHERE rt.VTREE_ID = vt.VTREE_ID
16650
		   AND vt.PROJ_ID = proj.PROJ_ID
16651
		   AND rt.RTAG_ID = NNrtag_id;
16652
 
16653
        Log_Action ( NNorig_pv_id, 'replaced_with', NNuser_id, 'Replacing version: '|| SSpkg_version ||' at '|| ReleaseLocation );
16654
   		Log_Action ( retPv_id, 'add', NNuser_id, 'Location: '|| ReleaseLocation );
16655
 
16656
	END IF;
16657
 
16658
 
16659
END New_Version;
1374 dpurdie 16660
/
16661
--------------------------------------------------------
16662
--  DDL for Procedure ADD_RUNTIME_DEPENDENCY
16663
--------------------------------------------------------
1373 dpurdie 16664
 
16665
  CREATE OR REPLACE PROCEDURE "ADD_RUNTIME_DEPENDENCY" ( NNpv_id IN NUMBER,
16666
                                                     SSrtd_name IN PACKAGES.pkg_name%TYPE,
16667
                                                     SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
16668
                                                     NNuser_id IN NUMBER
16669
                                                    ) IS
16670
/* ---------------------------------------------------------------------------
16671
    Version: 3.1
16672
   --------------------------------------------------------------------------- */
16673
 
16674
    retRTD_ID NUMBER;
16675
 
16676
	CURSOR rtd_cur IS
16677
        SELECT rtd_id FROM runtime_dependencies WHERE pv_id = NNpv_id AND rtd_id = retRTD_ID;
16678
    rtd_rec rtd_cur%ROWTYPE;
16679
 
16680
BEGIN
16681
    --- Seed database with package_name and version if required ---
16682
    Seed_Package_Names_Versions ( SSrtd_name, SSrtd_version, NNuser_id, retRTD_ID );
16683
 
16684
	OPEN rtd_cur;
16685
    FETCH rtd_cur INTO rtd_rec;
16686
 
16687
    IF rtd_cur%NOTFOUND
16688
    THEN
16689
		/* Make sure it does not exists already as runtime dependency */
16690
 
16691
		--- Add new Runtime Dependency ---
16692
	    INSERT INTO runtime_dependencies ( pv_id, rtd_id, mod_date, mod_user )
16693
	    VALUES (  NNpv_id, retRTD_ID, ORA_SYSDATE , NNuser_id );
16694
 
16695
    	/* LOG ACTION */
16696
        Log_Action ( NNpv_id, 'runtime_add', NNuser_id,
16697
    			     'Runtime package: '|| SSrtd_name ||' '|| SSrtd_version );
16698
 
16699
	END IF;
16700
 
16701
 
16702
END Add_Runtime_Dependency;
1374 dpurdie 16703
/
16704
--------------------------------------------------------
16705
--  DDL for Procedure LEVEL_ONE_CONFLICTS
16706
--------------------------------------------------------
1373 dpurdie 16707
 
16708
  CREATE OR REPLACE PROCEDURE "LEVEL_ONE_CONFLICTS" (
16709
   nnrtag_id       IN   NUMBER,
16710
   nnsession_num   IN   NUMBER
16711
)
16712
IS
16713
BEGIN
16714
   /* ---------  LEVEL 1 CONFILCTS -----------
16715
   || Following states are used:
16716
   || 0 -> NOT FOUND
16717
   || 1 -> MAJOR
16718
   || 2 -> MINOR MINOR
16719
   */
16720
   INSERT INTO temp_env_states
16721
      SELECT DISTINCT nnsession_num AS session_num, 1 AS level_num,
16722
                      err.pv_id, errpkg.pkg_id, errpkg.v_ext,
16723
                      DECODE (frc.v_nmm,
16724
                              NULL, 0,
16725
                              errpv.v_nmm, DECODE (frc.v_mm,
16726
                                                   errpv.v_mm, NULL,
16727
                                                   2
16728
                                                  ),
16729
                              1
16730
                             ) AS MESSAGE
16731
                 FROM (
16732
                       /* Full Release Contents used for reference*/
16733
                        SELECT rel.rtag_id, rpv.pv_id, rpv.pkg_id,
16734
                                NVL (rpv.v_ext, '|LINK_A_NULL|') AS v_ext,
16735
                                rpv.pkg_version, rpv.v_nmm, rpv.v_mm,
16736
                                (SELECT COUNT(*)
16737
                                   FROM ADVISORY_RIPPLE avr
16738
                                  WHERE avr.rtag_id = rel.rtag_id
16739
                                    AND avr.pv_id = rel.pv_id
16740
                                ) AS IsAvr
16741
                          FROM release_content rel,
16742
                                package_versions rpv
16743
                          WHERE rel.pv_id = rpv.pv_id
16744
                             AND rtag_id = nnrtag_id
16745
                      ) frc,
16746
 
16747
                      (
16748
                       /* DPV_IDs not found in release (excluding those from pegged versions whose dependencies will not
16749
                          necessarily be satisfied in the release) */
16750
                       SELECT dep.pv_id, dep.dpv_id AS err_dpv
16751
                         FROM package_dependencies dep,
16752
                              package_versions dep_dpv
16753
                        WHERE dep.dpv_id = dep_dpv.pv_id
16754
                          AND dep.pv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16755
                          AND NOT dep.pv_id IN (SELECT pegv.pv_id FROM PEGGED_VERSIONS pegv WHERE pegv.rtag_id = nnrtag_id)
16756
                          AND NOT dep.dpv_id IN (SELECT pv_id FROM release_content WHERE rtag_id = nnrtag_id)
16757
                       MINUS
16758
                       /* MINUS Dependencies to be ignored */
16759
                       SELECT igw.pv_id, igw.dpv_id AS err_dpv
16760
                         FROM ignore_warnings igw,
16761
                              package_versions igw_dpv
16762
                        WHERE igw.dpv_id = igw_dpv.pv_id
16763
                          AND igw.rtag_id = nnrtag_id
16764
                      ) err,
16765
                      package_versions errpkg,
16766
                      package_versions errpv
16767
                WHERE err.err_dpv = errpv.pv_id
16768
                  AND errpv.pkg_id = frc.pkg_id(+)
16769
                  AND NVL (errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
16770
                  AND err.pv_id = errpkg.pv_id
16771
                  AND frc.IsAvr = 0;
16772
END level_one_conflicts;
1374 dpurdie 16773
/
16774
--------------------------------------------------------
16775
--  DDL for Procedure OLE
16776
--------------------------------------------------------
1373 dpurdie 16777
 
16778
  CREATE OR REPLACE PROCEDURE "OLE" 
16779
IS retval VARCHAR2(40);   
16780
BEGIN   retval := RELEASE_MANAGER.Pk_Rmapi.RETURN_WIP ( 'daf_br_applets', 2362 ) 
16781
DBMS_OUTPUT.PUT_LINE(retval);
1374 dpurdie 16782
/
16783
--------------------------------------------------------
16784
--  DDL for Procedure SYNC_PROJECTS_NEW_VERSION
16785
--------------------------------------------------------
1373 dpurdie 16786
 
16787
  CREATE OR REPLACE PROCEDURE "SYNC_PROJECTS_NEW_VERSION" ( nPv_id 				IN NUMBER,
16788
														  sSyncRtagsInList		IN VARCHAR2,
16789
				                                          nUser_id 				IN NUMBER ) IS
16790
/* ---------------------------------------------------------------------------
16791
    Version: 3.0.0
16792
   --------------------------------------------------------------------------- */
16793
 
16794
	CURSOR sync_rtags_cur IS
16795
        SELECT rc.RTAG_ID, rc.BASE_VIEW_ID, pv.pv_id
16796
		  FROM release_content rc,
16797
		  	   package_versions pv,
16798
		       package_versions opv
16799
		 WHERE rc.pv_id = pv.pv_id
16800
		   AND opv.pkg_id = pv.pkg_id
16801
		   AND NVL(opv.v_ext, '|LINK_A_NULL|') = NVL(pv.v_ext, '|LINK_A_NULL|')
16802
		   AND opv.pv_id = nPv_id
16803
		   AND rtag_id IN ( SELECT *
16804
		   	   		   	      FROM THE (
16805
					   	   		   	    SELECT CAST( IN_LIST_NUMBER( sSyncRtagsInList ) AS RELMGR_NUMBER_TAB_t )
16806
					       		   	    FROM dual
16807
									   )
16808
						  );
16809
    sync_rtags_rec sync_rtags_cur%ROWTYPE;
16810
 
16811
BEGIN
16812
 
16813
	OPEN sync_rtags_cur;
16814
	FETCH sync_rtags_cur INTO sync_rtags_rec;
16815
 
16816
	WHILE sync_rtags_cur%FOUND
16817
	LOOP
16818
		DELETE FROM RELEASE_CONTENT
16819
		 WHERE rtag_id = sync_rtags_rec.rtag_id
16820
	       AND pv_id = sync_rtags_rec.pv_id;
16821
 
16822
		INSERT INTO RELEASE_CONTENT ( RTAG_ID, PV_ID, BASE_VIEW_ID, INSERT_STAMP, INSERTOR_ID, PKG_STATE )
16823
	   		   VALUES ( sync_rtags_rec.rtag_id,
16824
		       		  	nPv_id,
16825
						sync_rtags_rec.BASE_VIEW_ID,
16826
	           			Ora_Sysdate,
16827
	           			nUser_id,
16828
 
16829
	      	   		   );
16830
 
16831
-- 		UPDATE RELEASE_CONTENT
16832
-- 	       SET pv_id = nPv_id,
16833
-- 	           insert_stamp = Ora_Sysdate,
16834
-- 	           insertor_id = nUser_id
16835
-- 	     WHERE rtag_id = sync_rtags_rec.rtag_id
16836
-- 	       AND pv_id = sync_rtags_rec.pv_id;
16837
 
16838
		FETCH sync_rtags_cur INTO sync_rtags_rec;
16839
	END LOOP;
16840
 
16841
	CLOSE sync_rtags_cur;
16842
 
16843
END Sync_Projects_New_Version;
1374 dpurdie 16844
/
16845
--------------------------------------------------------
16846
--  DDL for Procedure LOCK_PACKAGE
16847
--------------------------------------------------------
1373 dpurdie 16848
 
16849
  CREATE OR REPLACE PROCEDURE "LOCK_PACKAGE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
16850
											 nUserId IN NUMBER ) IS
16851
/* ---------------------------------------------------------------------------
16852
    Version: 4.0
16853
   --------------------------------------------------------------------------- */
16854
 
16855
BEGIN
16856
 
16857
    -- Lock Package
16858
    UPDATE PACKAGE_VERSIONS pv SET
16859
    	pv.DLOCKED = 'Y'
16860
    WHERE pv.PV_ID = nPvId;
16861
 
16862
    /* LOG ACTION */
16863
   	Log_Action ( nPvId, 'lock_package', nUserId );
16864
 
16865
END Lock_Package;
1374 dpurdie 16866
/
16867
--------------------------------------------------------
16868
--  DDL for Procedure UPDATE_PACKAGE_STATES
16869
--------------------------------------------------------
1373 dpurdie 16870
 
16871
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_STATES" ( NNrtag_id IN NUMBER,
16872
                                                    NNsession_num IN NUMBER ) IS
16873
/* =============  STATE RULES =================== */
16874
/*
16875
   MNR   MRR   MN   MR    |   pkg_state
16876
   ------------------------------------
16877
 
16878
 
16879
 
16880
 
16881
   ------------------------------------
16882
 
16883
 
16884
 
16885
 
16886
   ------------------------------------
16887
    1     0     0     0   |      MINOR_READY
16888
    1     0     0     1   |      MAJOR
16889
    1     0     1     0   |      MINOR
16890
    1     0     1     1   |      MAJOR
16891
   ------------------------------------
16892
    1     1     0     0   |      MAJOR_READY
16893
    1     1     0     1   |      MAJOR
16894
    1     1     1     0   |      MAJOR
16895
    1     1     1     1   |      MAJOR
16896
   ------------------------------------
16897
*/
16898
BEGIN
16899
    /*----------------------------------------------
16900
    ||              MINOR READY
16901
    */----------------------------------------------
16902
 
16903
    UPDATE release_content
16904
       SET pkg_state = 4
16905
     WHERE rtag_id = NNrtag_id
16906
       AND pv_id IN
16907
           (
16908
           SELECT DISTINCT pv_id
16909
           FROM temp_env_states
16910
           WHERE session_num = NNsession_num
16911
             AND level_num = 1
16912
             AND tes_state = 2
16913
           );
16914
 
16915
    /*----------------------------------------------
16916
    ||              MAJOR READY
16917
    */----------------------------------------------
16918
    UPDATE release_content
16919
       SET pkg_state = 3
16920
     WHERE rtag_id = NNrtag_id
16921
       AND pv_id IN
16922
           (
16923
           SELECT DISTINCT pv_id
16924
           FROM temp_env_states
16925
           WHERE session_num = NNsession_num
16926
             AND level_num = 1
16927
             AND tes_state IN (0,1)
16928
           );
16929
 
16930
    /*----------------------------------------------
16931
    ||                MINOR
16932
    */----------------------------------------------
16933
    UPDATE release_content
16934
       SET pkg_state = 2
16935
     WHERE rtag_id = NNrtag_id
16936
       AND pv_id IN
16937
           (
16938
           SELECT DISTINCT pv_id
16939
            FROM temp_env_states
16940
            WHERE session_num = NNsession_num
16941
              AND level_num >= 2
16942
              AND tes_state = 2
16943
            MINUS
16944
           SELECT pv_id
16945
             FROM release_content
16946
            WHERE rtag_id = NNrtag_id
16947
              AND pkg_state = 3
16948
           );
16949
 
16950
    /*----------------------------------------------
16951
    ||                MAJOR
16952
    */----------------------------------------------
16953
    UPDATE release_content
16954
       SET pkg_state = 1
16955
     WHERE rtag_id = NNrtag_id
16956
       AND pv_id IN
16957
           (
16958
           SELECT DISTINCT pv_id
16959
           FROM temp_env_states
16960
           WHERE session_num = NNsession_num
16961
             AND level_num >= 2
16962
             AND tes_state IN (0,1)
16963
           /* MAJOR EXCEPTION - When package has Major Ready and Minor */
16964
           UNION
16965
           SELECT DISTINCT tes.pv_id
16966
           FROM temp_env_states tes,
16967
                release_content rc
16968
           WHERE tes.session_num = NNsession_num
16969
             AND tes.level_num >= 2
16970
             AND tes.tes_state = 2
16971
             AND rtag_id = NNrtag_id
16972
             AND rc.pv_id = tes.pv_id
16973
             AND rc.pkg_state = 3
16974
           );
16975
 
16976
    /*----------------------------------------------
16977
    ||                 OK
16978
    */----------------------------------------------
16979
    UPDATE release_content
16980
       SET pkg_state = 0
16981
     WHERE rtag_id = NNrtag_id
16982
       AND pv_id IN
16983
           (
16984
           SELECT rc.pv_id
16985
             FROM release_content rc
16986
            WHERE rc.rtag_id = NNrtag_id
16987
              AND NOT rc.pv_id IN
16988
                    (
16989
                     SELECT DISTINCT pv_id
16990
                     FROM temp_env_states WHERE session_num = NNsession_num
16991
                    )
16992
           );
16993
 
16994
      Update_Deprecation_State (NNrtag_id);
16995
 
16996
    /*----------------------------------------------
16997
    ||              PEGGED VERSIONS DEPENDENT
16998
    */----------------------------------------------
16999
    UPDATE release_content
17000
       SET pkg_state = 10
17001
     WHERE rtag_id = NNrtag_id
17002
       AND pv_id IN
17003
           (
17004
           SELECT DISTINCT pv_id
17005
           FROM pegged_versions pegv
17006
           WHERE pegv.rtag_id = NNrtag_id
17007
           );
17008
 
17009
    /*----------------------------------------------
17010
    ||              ADVISORY RIPPLE
17011
    */----------------------------------------------
17012
    UPDATE release_content
17013
       SET pkg_state = 8
17014
     WHERE rtag_id = NNrtag_id
17015
       AND pv_id IN
17016
           (
17017
           SELECT DISTINCT pv_id
17018
           FROM advisory_ripple ar
17019
           WHERE ar.rtag_id = NNrtag_id
17020
           )
17021
       AND pv_id IN
17022
           (
17023
           SELECT DISTINCT pv_id
17024
           FROM release_content rc
17025
           WHERE rc.rtag_id = NNrtag_id
17026
           );
17027
 
17028
END Update_Package_States;
1374 dpurdie 17029
/
17030
--------------------------------------------------------
17031
--  DDL for Procedure REMOVE_DOCUMENT
17032
--------------------------------------------------------
1373 dpurdie 17033
 
17034
  CREATE OR REPLACE PROCEDURE "REMOVE_DOCUMENT" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
17035
											  nDocId IN PACKAGE_DOCUMENTS.DOC_ID%TYPE,
17036
                                              nUserId IN NUMBER ) IS
17037
/* ---------------------------------------------------------------------------
17038
    Version: 3.0
17039
   --------------------------------------------------------------------------- */
17040
 
17041
   DocNumber PACKAGE_DOCUMENTS.DOC_NUM%TYPE;
17042
 
17043
BEGIN
17044
 
17045
	-- Get Doc Num
17046
    SELECT pd.DOC_NUM INTO DocNumber
17047
      FROM PACKAGE_DOCUMENTS pd
17048
     WHERE pd.PV_ID = nPvId
17049
       AND pd.DOC_ID = nDocId;
17050
 
17051
 
17052
	-- Delete Document
17053
    DELETE
17054
      FROM PACKAGE_DOCUMENTS pd
17055
     WHERE pd.PV_ID = nPvId
17056
       AND pd.DOC_ID = nDocId;
17057
 
17058
 
17059
    /* LOG ACTION */
17060
   	Log_Action ( nPvId, 'document_remove', nUserId,
17061
   			     'Document number: '|| DocNumber );
17062
 
17063
 
17064
END Remove_Document;
1374 dpurdie 17065
/
17066
--------------------------------------------------------
17067
--  DDL for Procedure SPLIT_VERSION
17068
--------------------------------------------------------
1373 dpurdie 17069
 
17070
  CREATE OR REPLACE PROCEDURE "SPLIT_VERSION" ( SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17071
                                            SSV_MM OUT PACKAGE_VERSIONS.V_MM%TYPE,
17072
                                            SSV_NMM OUT PACKAGE_VERSIONS.V_NMM%TYPE,
17073
                                            SSV_EXT OUT PACKAGE_VERSIONS.V_EXT%TYPE  ) IS
17074
/* ---------------------------------------------------------------------------
17075
    Version: 3.0.0
17076
   --------------------------------------------------------------------------- */
17077
 
17078
    TYPE VERSION_COMPONENTS_TYPE IS TABLE OF VARCHAR2(50)
17079
        INDEX BY BINARY_INTEGER;
17080
 
17081
    version_components VERSION_COMPONENTS_TYPE;
17082
    lastDot NUMBER := 0;
17083
    currDot NUMBER := 0;
17084
 
17085
BEGIN
17086
    currDot := INSTR ( SSpkg_version, '.', -1 );      -- Find 1st dot from the right
17087
 
17088
    IF ( currDot > 0 )
17089
    THEN
17090
        -- YES dot separator found --
17091
        SSV_EXT := GET_V_EXT( SSpkg_version );
17092
 
17093
        IF NOT SSV_EXT IS NULL
17094
        THEN
17095
            lastDot := currDot;
17096
            currDot := INSTR ( SSpkg_version, '.', -1, 2 );   -- Find 2nd dot from the right
17097
 
17098
            IF ( currDot > 0 )
17099
            THEN
17100
                -- XXXX.M.E
17101
                SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, lastDot - currDot - 1);
17102
                SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot ) || SSV_EXT;
17103
            ELSE
17104
                -- XXXX.E
17105
                SSV_MM := NULL;
17106
                SSV_NMM := SSpkg_version;
17107
            END IF;
17108
 
17109
        ELSE
17110
            -- XXXX.M
17111
            SSV_MM := SUBSTR ( SSpkg_version, currDot + 1, LENGTH(SSpkg_version) - currDot );
17112
            SSV_NMM := SUBSTR ( SSpkg_version, 0, currDot );
17113
 
17114
        END IF;
17115
 
17116
    ELSE
17117
        -- NO dot separator found --
17118
        -- XXXXXX
17119
        SSV_MM  := NULL;
17120
        SSV_NMM := SSpkg_version;
17121
        SSV_EXT := NULL;
17122
 
17123
    END IF;
17124
 
17125
END Split_Version;
1374 dpurdie 17126
/
17127
--------------------------------------------------------
17128
--  DDL for Procedure ADD_PACKAGE_INTEREST_TEST
17129
--------------------------------------------------------
1373 dpurdie 17130
 
17131
  CREATE OR REPLACE PROCEDURE "ADD_PACKAGE_INTEREST_TEST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
17132
	   	  		  								  nPkgIdList IN VARCHAR2,
17133
												  nUserId IN NUMBER
17134
	   	  		  								  ) IS
17135
 
17136
/******************************************************************************
17137
   NAME:       ADD_PACKAGE_INTEREST
17138
   PURPOSE:    
17139
 
17140
   REVISIONS:
17141
   Ver        Date        Author           Description
17142
   ---------  ----------  ---------------  ------------------------------------
17143
   1.0        12/05/2006  Rupesh Solanki     1. Created this procedure.
17144
 
17145
   NOTES:
17146
 
17147
   Automatically available Auto Replace Keywords:
17148
      Object Name:     ADD_PACKAGE_INTEREST
17149
      Sysdate:         12/05/2006
17150
      Date and Time:   12/05/2006, 9:11:12 AM, and 12/05/2006 9:11:12 AM
17151
      Username:         (set in TOAD Options, Procedure Editor)
17152
      Table Name:       (set in the "New PL/SQL Object" dialog)
17153
 
17154
******************************************************************************/
17155
   npkgidcollector   relmgr_number_tab_t := relmgr_number_tab_t ();
17156
   nPkgId NUMBER;
17157
BEGIN
17158
 
17159
	 npkgidcollector := in_list_number2 (nPkgIdList);
17160
 
17161
	FOR i IN 1..npkgidcollector.COUNT
17162
	LOOP
17163
		nPkgId := npkgidcollector(i);
17164
 
17165
	 --- Insert into PACKAGE_INTEREST TABLE
17166
	 INSERT INTO PACKAGE_INTEREST (PROJ_ID, PKG_ID, USER_ID)
17167
	 VALUES(nProjId, nPkgId, nUserId);
17168
	END LOOP;	 
17169
 
17170
 
17171
END ADD_PACKAGE_INTEREST_TEST;
1374 dpurdie 17172
/
17173
--------------------------------------------------------
17174
--  DDL for Procedure CLONED_PROCESSES
17175
--------------------------------------------------------
1373 dpurdie 17176
 
17177
  CREATE OR REPLACE PROCEDURE "CLONED_PROCESSES" 
17178
IS
17179
 
17180
proc_id NUMBER;
17181
/******************************************************************************
17182
   NAME:       DELETE_DO_NOT_RIPPLE
17183
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
17184
               IS RELEASED
17185
 
17186
   REVISIONS:
17187
   Ver        Date        Author           Description
17188
   ---------  ----------  ---------------  ------------------------------------
17189
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
17190
 
17191
   NOTES:
17192
 
17193
   Automatically available Auto Replace Keywords:
17194
      Object Name:     DELETE_DO_NOT_RIPPLE
17195
      Sysdate:         21/04/2006
17196
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
17197
      Username:         (set in TOAD Options, Procedure Editor)
17198
      Table Name:       (set in the "New PL/SQL Object" dialog)
17199
 
17200
******************************************************************************/
17201
   CURSOR ripple_cur
17202
   IS
17203
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
17204
 
17205
   ripple_rec   ripple_cur%ROWTYPE;
17206
BEGIN
17207
   OPEN ripple_cur;
17208
 
17209
   FETCH ripple_cur
17210
    INTO ripple_rec;
17211
 
17212
   WHILE ripple_cur%FOUND
17213
   LOOP
17214
 
17215
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
17216
 
17217
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
17218
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
17219
 
17220
      FETCH ripple_cur
17221
       INTO ripple_rec;
17222
   END LOOP;
17223
END CLONED_PROCESSES;
1374 dpurdie 17224
/
17225
--------------------------------------------------------
17226
--  DDL for Procedure ADD_VIEW_MEMBERS
17227
--------------------------------------------------------
1373 dpurdie 17228
 
17229
  CREATE OR REPLACE PROCEDURE "ADD_VIEW_MEMBERS" (nGroupId IN NUMBER, sUserList IN VARCHAR2) IS
17230
 
17231
/******************************************************************************
17232
   NAME:       ADD_VIEW_MEMBERS
17233
   PURPOSE:    
17234
 
17235
   REVISIONS:
17236
   Ver        Date        Author           Description
17237
   ---------  ----------  ---------------  ------------------------------------
17238
   1.0        11/04/2006          1. Created this procedure.
17239
 
17240
   NOTES:
17241
 
17242
   Automatically available Auto Replace Keywords:
17243
      Object Name:     ADD_VIEW_MEMBERS
17244
      Sysdate:         11/04/2006
17245
      Date and Time:   11/04/2006, 9:52:58 AM, and 11/04/2006 9:52:58 AM
17246
      Username:         (set in TOAD Options, Procedure Editor)
17247
      Table Name:       (set in the "New PL/SQL Object" dialog)
17248
 
17249
******************************************************************************/
17250
CURSOR user_cur IS
17251
	SELECT u.USER_ID
17252
	  FROM USERS u
17253
	 WHERE u.USER_ID IN (
17254
	 	   			   	SELECT * 
17255
						  FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserList ) AS RELMGR_NUMBER_TAB_t ) FROM dual ) 
17256
						);
17257
user_rec user_cur%ROWTYPE;
17258
 
17259
 
17260
BEGIN
17261
 
17262
	 OPEN user_cur;
17263
	 FETCH user_cur INTO user_rec;
17264
 
17265
	 WHILE user_cur%FOUND
17266
	 LOOP
17267
	 	 INSERT INTO MEMBERS_GROUP (GROUP_EMAIL_ID, USER_ID)
17268
	 	 VALUES ( nGroupId, user_rec.USER_ID);
17269
 
17270
	 	 FETCH user_cur INTO user_rec;	 
17271
	 END LOOP;	 
17272
 
17273
 
17274
 
17275
END ADD_VIEW_MEMBERS;
1374 dpurdie 17276
/
17277
--------------------------------------------------------
17278
--  DDL for Procedure RESET_IGNORE_WARNINGS
17279
--------------------------------------------------------
1373 dpurdie 17280
 
17281
  CREATE OR REPLACE PROCEDURE "RESET_IGNORE_WARNINGS" ( sPvIdList IN VARCHAR2,
17282
                                                    nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
17283
/* ---------------------------------------------------------------------------
17284
    Version: 5.0
17285
   --------------------------------------------------------------------------- */
17286
 
17287
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17288
 
17289
BEGIN
17290
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
17291
 
17292
    -- Remove Ignore Warnings
17293
     DELETE
17294
       FROM ignore_warnings
17295
	  WHERE (rtag_id, pv_id, dpv_id) IN
17296
	     (
17297
	      SELECT igw.rtag_id, igw.pv_id, igw.dpv_id
17298
	        FROM ignore_warnings igw,
17299
	             package_versions dpv,
17300
	             package_versions pv
17301
	       WHERE igw.dpv_id = dpv.pv_id
17302
	         AND igw.rtag_id = nRTagId
17303
	         AND dpv.pkg_id = pv.pkg_id
17304
	         AND NVL(dpv.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|')
17305
	         AND pv.pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
17306
         );
17307
 
17308
END Reset_Ignore_Warnings;
1374 dpurdie 17309
/
17310
--------------------------------------------------------
17311
--  DDL for Procedure INSERT_INTO_PACKAGE_BUILD_INFO
17312
--------------------------------------------------------
1373 dpurdie 17313
 
17314
  CREATE OR REPLACE PROCEDURE "INSERT_INTO_PACKAGE_BUILD_INFO" IS
17315
 
17316
/******************************************************************************
17317
   NAME:       INSERT_INTO_PACKAGE_BUILD_INFO
17318
   PURPOSE:    
17319
 
17320
   REVISIONS:
17321
   Ver        Date        Author           Description
17322
   ---------  ----------  ---------------  ------------------------------------
17323
   1.0        6/12/2006          1. Created this procedure.
17324
 
17325
   NOTES:
17326
 
17327
   Automatically available Auto Replace Keywords:
17328
      Object Name:     INSERT_INTO_PACKAGE_BUILD_INFO
17329
      Sysdate:         6/12/2006
17330
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
17331
      Username:         (set in TOAD Options, Procedure Editor)
17332
      Table Name:       (set in the "New PL/SQL Object" dialog)
17333
 
17334
******************************************************************************/
17335
 
17336
	CURSOR curInfo IS
17337
    SELECT PV_ID
17338
	FROM PACKAGE_BUILD_ENV
17339
	WHERE BE_ID IN (11, 12);
17340
    recInfo curInfo%ROWTYPE;
17341
 
17342
 
17343
BEGIN
17344
 
17345
	OPEN curInfo;
17346
    FETCH curInfo INTO recInfo;
17347
 
17348
	WHILE curInfo%FOUND
17349
	LOOP
17350
 
17351
		INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID, BSA_ID )
17352
		VALUES( recInfo.PV_ID, 2, 5);
17353
 
17354
		UPDATE PACKAGE_VERSIONS SET BS_ID = 2 WHERE PV_ID = recInfo.PV_ID;
17355
 
17356
		FETCH curInfo INTO recInfo;
17357
 
17358
	END LOOP;
17359
 
17360
	CLOSE curInfo;
17361
 
17362
 
17363
 
17364
 
17365
END INSERT_INTO_PACKAGE_BUILD_INFO;
1374 dpurdie 17366
/
17367
--------------------------------------------------------
17368
--  DDL for Procedure UPDATE_ADDITIONAL_NOTE
17369
--------------------------------------------------------
1373 dpurdie 17370
 
17371
  CREATE OR REPLACE PROCEDURE "UPDATE_ADDITIONAL_NOTE" ( pnNote_id IN NUMBER,
17372
													 pnPv_id IN NUMBER,
17373
                                                     psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
17374
                                                     psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
17375
                                                     pnUser_id IN NUMBER,
17376
                                                     outErrCode OUT NUMBER
17377
                                                    ) IS
17378
/* ---------------------------------------------------------------------------
17379
    Version: 3.0.1
17380
   --------------------------------------------------------------------------- */
17381
 
17382
    newID NUMBER;
17383
 
17384
    /* Disallow duplicate Note Titles */
17385
	CURSOR an_duplicate_cur IS
17386
        SELECT COUNT(*) AS cnt_note
17387
          FROM ADDITIONAL_NOTES
17388
         WHERE pv_id = pnPv_id
17389
           AND note_id != pnNote_id
17390
           AND note_title = psNote_title;
17391
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
17392
 
17393
BEGIN
17394
	outErrCode := -1;		-- Set default return error code to ERROR state
17395
 
17396
	OPEN an_duplicate_cur;
17397
    FETCH an_duplicate_cur INTO an_duplicate_rec;
17398
 
17399
    IF an_duplicate_rec.cnt_note < 1
17400
    THEN
17401
		--- Update Additional Note ---
17402
	    UPDATE ADDITIONAL_NOTES SET
17403
		       note_title = psNote_title,
17404
		       note_body = psNote_body,
17405
		       mod_date = Ora_Sysdate,
17406
		       mod_user = pnUser_id
17407
         WHERE note_id = pnNote_id
17408
           AND pv_id = pnPv_id;
17409
		outErrCode := 0;		-- Set return to SUCCESS
17410
	END IF;
17411
 
17412
	CLOSE an_duplicate_cur;
17413
END Update_Additional_Note;
1374 dpurdie 17414
/
17415
--------------------------------------------------------
17416
--  DDL for Procedure NEW_UNIT_TEST
17417
--------------------------------------------------------
1373 dpurdie 17418
 
17419
  CREATE OR REPLACE PROCEDURE "NEW_UNIT_TEST" ( nPv_id IN NUMBER,
17420
                                            nTestTypeId IN UNIT_TESTS.TEST_TYPES_FK%TYPE,
17421
                                            sTest_summary IN UNIT_TESTS.TEST_SUMMARY%TYPE,
17422
                                            sNumOfTest IN UNIT_TESTS.NUMOF_TEST%TYPE,
17423
                                            sDpkg_path IN VARCHAR2,
17424
                                            sResults IN VARCHAR2,
17425
                                            sCompletion_date IN VARCHAR2,
17426
                                            nCompleted_by IN NUMBER,
17427
											enumTEST_TYPE_AUTOMATIC IN NUMBER,
17428
											enumTEST_TYPE_NOT_DONE IN NUMBER,
17429
											outFileName OUT VARCHAR2
17430
                                           ) IS
17431
/* ---------------------------------------------------------------------------
17432
    Version: 3.2.0
17433
   --------------------------------------------------------------------------- */
17434
 
17435
   	FILENAME_PREFIX CONSTANT VARCHAR2(50) := 'RM_UNIT_TEST';
17436
 
17437
    newID NUMBER;
17438
    ResultsURL UNIT_TESTS.RESULTS_URL%TYPE DEFAULT NULL;
17439
    ResultsAttachment UNIT_TESTS.RESULTS_ATTACHMENT_NAME%TYPE DEFAULT NULL;
17440
 
17441
BEGIN
17442
 
17443
	-- Get new ID --
17444
   	SELECT SEQ_UNIT_TESTS.NEXTVAL INTO newID FROM DUAL;
17445
 
17446
       IF nTestTypeId = enumTEST_TYPE_AUTOMATIC THEN
17447
       	ResultsURL := sResults;
17448
       ELSE
17449
       	IF (sResults <> '') OR ( NOT sResults IS NULL ) THEN
17450
        	outFileName := FILENAME_PREFIX || newID ||'_'|| sResults;
17451
    		ResultsAttachment := sDpkg_path || '/' || outFileName;
17452
           END IF;
17453
       END IF;
17454
 
17455
	-- Remove NOT_DONE entry if exists
17456
	DELETE FROM UNIT_TESTS
17457
	 WHERE pv_id = nPv_id
17458
	   AND test_types_fk = enumTEST_TYPE_NOT_DONE;
17459
 
17460
	--- Add Additional Note ---
17461
    INSERT INTO UNIT_TESTS ( TEST_ID,
17462
								PV_ID,
17463
								TEST_TYPES_FK,
17464
								TEST_SUMMARY,
17465
								COMPLETION_DATE,
17466
								COMPLETED_BY,
17467
								RESULTS_URL,
17468
								RESULTS_ATTACHMENT_NAME,
17469
								NUMOF_TEST )
17470
    VALUES (
17471
       	newID,
17472
           nPv_id,
17473
           nTestTypeId,
17474
           sTest_summary,
17475
           TO_DATE( sCompletion_date,'DD/MM/YYYY' ),
17476
           nCompleted_by,
17477
           ResultsURL,
17478
           ResultsAttachment,
17479
		   sNumOfTest );
17480
 
17481
END New_Unit_Test;
1374 dpurdie 17482
/
17483
--------------------------------------------------------
17484
--  DDL for Procedure SWITCH_REPRODUCIBLE_PACKAGE
17485
--------------------------------------------------------
1373 dpurdie 17486
 
17487
  CREATE OR REPLACE PROCEDURE "SWITCH_REPRODUCIBLE_PACKAGE" (nPvId IN NUMBER, nUserId IN NUMBER)IS
17488
Auto CHAR;
17489
/******************************************************************************
17490
   NAME:       SWITCH_REPRODUCIBLE_PACKAGE
17491
   PURPOSE:    
17492
 
17493
   REVISIONS:
17494
   Ver        Date        Author           Description
17495
   ---------  ----------  ---------------  ------------------------------------
17496
   1.0        14/12/2006   Rupesh Solanki       1. Created this procedure.
17497
 
17498
   NOTES:
17499
 
17500
   Automatically available Auto Replace Keywords:
17501
      Object Name:     SWITCH_REPRODUCIBLE_PACKAGE
17502
      Sysdate:         14/12/2006
17503
      Date and Time:   14/12/2006, 11:35:15 AM, and 14/12/2006 11:35:15 AM
17504
      Username:         (set in TOAD Options, Procedure Editor)
17505
      Table Name:       (set in the "New PL/SQL Object" dialog)
17506
 
17507
******************************************************************************/
17508
BEGIN
17509
 
17510
	 SELECT IS_AUTOBUILDABLE into Auto
17511
	 FROM PACKAGE_VERSIONS 
17512
	 WHERE PV_ID = nPvId;
17513
 
17514
	 IF Auto = 'N' Then
17515
 
17516
	 	UPDATE PACKAGE_VERSIONS
17517
	 	SET IS_AUTOBUILDABLE = 'Y'
17518
	 	WHERE PV_ID = nPvId;
17519
 
17520
 
17521
	 	/* LOG ACTION */
17522
   		Log_Action ( nPvId, 'reproducible_package', nUserId );	 
17523
 
17524
	 Else
17525
 
17526
		 UPDATE PACKAGE_VERSIONS
17527
		 SET IS_AUTOBUILDABLE = 'N'
17528
		 WHERE PV_ID = nPvId;
17529
 
17530
 
17531
	 	 /* LOG ACTION */
17532
   	 	 Log_Action ( nPvId, 'unreproducible_package', nUserId );	 
17533
 
17534
	 End If;
17535
 
17536
 
17537
 
17538
 
17539
 
17540
 
17541
 
17542
 
17543
END SWITCH_REPRODUCIBLE_PACKAGE;
1374 dpurdie 17544
/
17545
--------------------------------------------------------
17546
--  DDL for Procedure LOG_DAEMON_ACTION
17547
--------------------------------------------------------
1373 dpurdie 17548
 
17549
  CREATE OR REPLACE PROCEDURE "LOG_DAEMON_ACTION" ( nRconId IN NUMBER,
17550
												 enumActionTypeName IN VARCHAR2,
17551
		                                         nUserId IN NUMBER,
17552
												 sAdditionalComments IN VARCHAR2 DEFAULT NULL  ) IS
17553
/* ---------------------------------------------------------------------------
17554
    Version: 3.0
17555
   --------------------------------------------------------------------------- */
17556
 
17557
    ActionTypeId NUMBER;
17558
 
17559
BEGIN
17560
 
17561
    -- Get Action Type FK
17562
    SELECT act.ACTTYPE_ID INTO ActionTypeId
17563
      FROM ACTION_TYPE act
17564
     WHERE act.NAME = enumActionTypeName;
17565
 
17566
 
17567
    INSERT INTO DAEMON_ACTION_LOG
17568
    VALUES ( nUserId, ORA_SYSDATETIME, nRconId, sAdditionalComments, ActionTypeId );
17569
 
17570
 
17571
END Log_Daemon_Action;
1374 dpurdie 17572
/
17573
--------------------------------------------------------
17574
--  DDL for Procedure UPDATE_MISC_VIEW
17575
--------------------------------------------------------
1373 dpurdie 17576
 
17577
  CREATE OR REPLACE PROCEDURE "UPDATE_MISC_VIEW" IS
17578
/******************************************************************************
17579
   NAME:       UPDATE_MISC_VIEW
17580
   PURPOSE:    
17581
 
17582
   REVISIONS:
17583
   Ver        Date        Author           Description
17584
   ---------  ----------  ---------------  ------------------------------------
17585
   1.0        16/03/2007          1. Created this procedure.
17586
 
17587
   NOTES:
17588
 
17589
   Automatically available Auto Replace Keywords:
17590
      Object Name:     UPDATE_MISC_VIEW
17591
      Sysdate:         16/03/2007
17592
      Date and Time:   16/03/2007, 8:56:29 AM, and 16/03/2007 8:56:29 AM
17593
      Username:         (set in TOAD Options, Procedure Editor)
17594
      Table Name:       (set in the "New PL/SQL Object" dialog)
17595
 
17596
******************************************************************************/
17597
   CURSOR view_cur /*Create a record set to store the ripple data*/
17598
   IS
17599
   	 SELECT pkg.pkg_id, rc.base_view_id 
17600
	 FROM package_versions pv, packages pkg, release_content rc
17601
	 where rc.rtag_id = 2362
17602
	 and rc.pv_id = pv.pv_id
17603
	 and pv.pkg_id = pkg.pkg_id;
17604
   view_rec   view_cur%ROWTYPE;
17605
 
17606
 
17607
 
17608
BEGIN
17609
   OPEN view_cur;
17610
 
17611
   FETCH view_cur
17612
    INTO view_rec;
17613
 
17614
   WHILE view_cur%FOUND
17615
   LOOP
17616
 
17617
 
17618
	   update release_content
17619
	   set base_view_id = view_rec.base_view_id
17620
	   where rtag_id = 8027
17621
	   and pv_id IN 
17622
	   (
17623
	   	select pv.pv_id from release_content rc, package_versions pv
17624
		where rc.rtag_id = 8027
17625
		and pv.pv_id = rc.pv_id
17626
		and pv.pkg_id = view_rec.pkg_id 
17627
 
17628
	   );
17629
 
17630
 
17631
 
17632
 
17633
 
17634
 
17635
 
17636
 
17637
 
17638
   FETCH view_cur
17639
   		 INTO view_rec;
17640
   END LOOP;	 
17641
 
17642
 
17643
 
17644
 
17645
 
17646
END UPDATE_MISC_VIEW; 
1374 dpurdie 17647
/
17648
--------------------------------------------------------
17649
--  DDL for Procedure CHECK_NEW_PATCHES
17650
--------------------------------------------------------
1373 dpurdie 17651
 
17652
  CREATE OR REPLACE PROCEDURE "CHECK_NEW_PATCHES" (
17653
   nrtagid   IN   release_content.rtag_id%TYPE
17654
)
17655
IS
17656
/* ---------------------------------------------------------------------------
17657
    Version: 3.0
17658
   --------------------------------------------------------------------------- */
17659
BEGIN
17660
   /*--------------- Business Rules Here -------------------*/
17661
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
17662
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
17663
   END IF
17664
 
17665
   /*-------------------------------------------------------*/
17666
   UPDATE release_content rc
17667
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
17668
    WHERE rc.pv_id IN (
17669
             SELECT prod.pv_id
17670
               FROM (SELECT   pp.pv_id AS orig_parent_id,
17671
                              COUNT (*) AS num_of_patches
17672
                         FROM release_content rc, package_patches pp
17673
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17674
                     GROUP BY pp.pv_id) orig,
17675
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
17676
                              COUNT (*) AS num_of_patches
17677
                         FROM release_content rc,
17678
                              package_patches pp,
17679
                              package_dependencies dep,
17680
                              package_versions pv,
17681
                              package_patches prodpp
17682
                        WHERE rc.pv_id = pp.pv_id
17683
                          AND rc.rtag_id = nrtagid
17684
                          AND pp.patch_id = dep.dpv_id
17685
                          AND dep.pv_id = pv.pv_id
17686
                          AND pv.is_patch = 'Y'
17687
                          AND pv.dlocked = 'Y'
17688
                          AND prodpp.patch_id = dep.pv_id
17689
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
17690
                    release_content rc
17691
              WHERE orig.orig_parent_id = prod.pv_id
17692
                AND orig.num_of_patches != prod.num_of_patches
17693
                AND rc.rtag_id = nrtagid
17694
                AND rc.pv_id = prod.pv_id
17695
                AND rc.pkg_state = 0
17696
             UNION
17697
             SELECT   prodpp.pv_id
17698
                 FROM release_content rc,
17699
                      package_patches pp,
17700
                      package_dependencies dep,
17701
                      package_versions pv,
17702
                      package_patches prodpp
17703
                WHERE rc.pv_id = pp.pv_id
17704
                  AND rc.rtag_id = nrtagid
17705
                  AND pp.patch_id = dep.dpv_id
17706
                  AND dep.pv_id = pv.pv_id
17707
                  AND pv.is_patch = 'Y'
17708
                  AND pv.dlocked = 'Y'
17709
                  AND prodpp.patch_id = dep.pv_id
17710
             GROUP BY prodpp.pv_id, pp.pv_id
17711
             MINUS
17712
             SELECT   pp.pv_id
17713
                 FROM release_content rc, package_patches pp
17714
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
17715
             GROUP BY pp.pv_id);
17716
END check_new_patches;
1374 dpurdie 17717
/
17718
--------------------------------------------------------
17719
--  DDL for Procedure CLEAN_ADVISORY_RIPPLE
17720
--------------------------------------------------------
1373 dpurdie 17721
 
17722
  CREATE OR REPLACE PROCEDURE "CLEAN_ADVISORY_RIPPLE" (nrtagid IN NUMBER)
17723
IS
17724
/******************************************************************************
17725
   NAME:       clean_advisory_ripple
17726
 
17727
   PURPOSE:    To delete entries from the advisory_ripple table based upon
17728
               an RTAG_ID only
17729
 
17730
               This is a tidy-up operation performed against the advisory_ripple
17731
               table, ensuring that the table does not have rtag_id/pv_id
17732
               combinations that cannot be found in the release's wip/pending/release
17733
               tabs.
17734
 
17735
******************************************************************************/
17736
BEGIN
17737
   -- Delete any invalid rtag_id/pv_id combination from the advisory_ripple table.
17738
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
17739
   -- work_in_progress, planned, or release_content table.
17740
   -- NOTE: Planned operations that represent pending additive/subtractive merge
17741
   -- operations are ignored because they have not been approved yet and so
17742
   -- cannot be said to be "in the release".
17743
   DELETE FROM advisory_ripple
17744
         WHERE rtag_id = nrtagid
17745
           AND pv_id not in
17746
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
17747
                 UNION
17748
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
17749
                 UNION
17750
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
17751
               );
17752
END clean_advisory_ripple;
1374 dpurdie 17753
/
17754
--------------------------------------------------------
17755
--  DDL for Procedure NEW_PATCH
17756
--------------------------------------------------------
1373 dpurdie 17757
 
17758
  CREATE OR REPLACE PROCEDURE "NEW_PATCH" ( SSpatch_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
17759
 	   	  		  					  	NNparent_id IN NUMBER,
17760
                                        sPatchIdList IN VARCHAR2,
17761
										NNuser_id IN NUMBER ) IS
17762
/* ---------------------------------------------------------------------------
17763
    Version: 3.5
17764
   --------------------------------------------------------------------------- */
17765
 
17766
    patchPv_id    NUMBER;
17767
	parPkg_id	  NUMBER;
17768
    LastInstallOrder NUMBER;
17769
    isPatchDlocked PACKAGE_VERSIONS.DLOCKED%TYPE;
17770
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
17771
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
17772
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
17773
	oPatchDepCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
17774
 
17775
	CURSOR parent_cur IS
17776
        SELECT pv.*, pkg.pkg_name
17777
          FROM package_versions pv,
17778
		       packages pkg
17779
         WHERE pv.pv_id = NNparent_id
17780
		   AND pv.pkg_id = pkg.pkg_id;
17781
    parent_rec parent_cur%ROWTYPE;
17782
 
17783
    CURSOR patch_cur IS
17784
        SELECT pv.*, pg.pkg_name
17785
          FROM package_versions pv,
17786
		       packages pg
17787
         WHERE pv.pkg_id = parPkg_id
17788
		   AND pv.pkg_version = SSpatch_version
17789
		   AND pv.pkg_id = pg.pkg_id;
17790
    patch_rec patch_cur%ROWTYPE;
17791
 
17792
	CURSOR releases_cur IS
17793
        SELECT rc.pv_id
17794
		  FROM release_content rc
17795
		 WHERE rc.pv_id = patch_rec.pv_id;
17796
    releases_rec releases_cur%ROWTYPE;
17797
 
17798
 
17799
BEGIN
17800
 
17801
	-- Get Last Install Order
17802
    SELECT Count(*) INTO LastInstallOrder
17803
	  FROM PACKAGE_PATCHES pp
17804
	 WHERE pp.PV_ID = NNparent_id;
17805
 
17806
 
17807
    -- Get parent details
17808
	OPEN parent_cur;
17809
    FETCH parent_cur INTO parent_rec;
17810
	parPkg_id := parent_rec.pkg_id;
17811
 
17812
 
17813
	-- Find if patch exists in database
17814
    OPEN patch_cur;
17815
    FETCH patch_cur INTO patch_rec;
17816
 
17817
 
17818
    -- Parent must be official
17819
    IF parent_rec.dlocked = 'Y' THEN
17820
 
17821
	    IF patch_cur%NOTFOUND
17822
	    THEN
17823
        	isPatchDlocked := 'N';
17824
 
17825
	        -- Create new patch version --
17826
	        SELECT SEQ_PV_ID.nextval INTO patchPv_id FROM DUAL;
17827
 
17828
 
17829
	        Split_version ( SSpatch_version, SSV_MM, SSV_NMM, SSV_EXT );
17830
 
17831
	        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 )
17832
				   VALUES (
17833
						   patchPv_id,
17834
	                       parPkg_id,
17835
	                       SSpatch_version,
17836
	                       isPatchDlocked,
17837
	                       ORA_SYSDATE,
17838
	                       NNuser_id,
17839
	                       ORA_SYSDATETIME,
17840
	                       NNuser_id,
17841
	                       SSV_MM,
17842
	                       SSV_NMM,
17843
	                       SSV_EXT,
17844
	                       parent_rec.src_path,
17845
	                       'This is a patch to ' || parent_rec.pkg_name || ' ' || parent_rec.pkg_version,
17846
	                       NNuser_id,
17847
						   'Y',
17848
                           patchPv_id,
17849
						   parent_rec.bs_id,
17850
						   parent_rec.is_autobuildable,
17851
						   parent_rec.ripple_field
17852
 
17853
						   );
17854
 
17855
			INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17856
		    	   ( SELECT NNparent_id AS pv_id,
17857
				            pv.pv_id AS patch_id,
17858
	                        LastInstallOrder + 1 AS INSTALL_ORDER
17859
				       FROM package_versions pv
17860
					  WHERE pv.pv_id = patchPv_id
17861
					    AND pv.is_patch = 'Y' );
17862
 
17863
	        /* LOG ACTION */
17864
            Log_Action ( patchPv_id, 'new_version', NNuser_id,
17865
        			     'Patch version created: '|| SSpatch_version );
17866
 
17867
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17868
        			     'New patch created and attached: '|| SSpatch_version );
17869
 
17870
 
17871
	    ELSE
17872
 
17873
		    patchPv_id := patch_rec.pv_id;
17874
	    	isPatchDlocked := patch_rec.dlocked;
17875
 
17876
			-- Find if pv_id exists in release content (i.e. it cannot be a patch)
17877
		    OPEN releases_cur;
17878
		    FETCH releases_cur INTO releases_rec;
17879
 
17880
			IF releases_cur%NOTFOUND
17881
	   		THEN
17882
				-- This pv_id is trully a patch, hence add Y to column IS_PATCH
17883
				UPDATE package_versions SET
17884
					   is_patch = 'Y'
17885
					   WHERE pv_id = patchPv_id;
17886
 
17887
				INSERT INTO package_patches ( pv_id, patch_id, INSTALL_ORDER )
17888
			    	   ( SELECT NNparent_id AS pv_id,
17889
					            pv.pv_id AS patch_id,
17890
	                            LastInstallOrder + 1 AS INSTALL_ORDER
17891
					       FROM package_versions pv
17892
						  WHERE pv.pv_id = patchPv_id
17893
						    AND pv.is_patch = 'Y' );
17894
 
17895
			END IF;
17896
 
17897
			CLOSE releases_cur;
17898
 
17899
            /* LOG ACTION */
17900
        	Log_Action ( NNparent_id, 'patch_add', NNuser_id,
17901
        			     'Patch version was found and attached: '|| SSpatch_version );
17902
 
17903
	    END IF;
17904
 
17905
 
17906
 
17907
 
17908
    END IF;
17909
 
17910
 
17911
 
17912
    /* Create Patch Dependencies */
17913
    oPatchDepCollector := IN_LIST_NUMBER ( sPatchIdList );
17914
 
17915
 
17916
    -- Make sure patch is unofficial before altering its dependencies
17917
    IF (oPatchDepCollector.COUNT > 0) AND (isPatchDlocked = 'N') THEN
17918
    	-- Delete Existing Dependencies
17919
        DELETE
17920
          FROM PACKAGE_DEPENDENCIES dep
17921
         WHERE dep.PV_ID = patchPv_id;
17922
 
17923
 
17924
        -- Insert new dependencies
17925
        INSERT INTO PACKAGE_DEPENDENCIES ( PV_ID, DPV_ID, PKG_ID, DPKG_ID, BUILD_TYPE )
17926
        SELECT patchPv_id AS PV_ID,
17927
        	   pv.PV_ID AS DPV_ID,
17928
               parPkg_id AS PKG_ID,
17929
               pv.PKG_ID AS DPKG_ID,
17930
               'L' AS BUILD_TYPE
17931
          FROM PACKAGE_VERSIONS pv
17932
         WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPatchDepCollector AS RELMGR_NUMBER_TAB_t ) ) );
17933
 
17934
 
17935
    END IF;
17936
 
17937
 
17938
    CLOSE parent_cur;
17939
    CLOSE patch_cur;
17940
END New_Patch;
1374 dpurdie 17941
/
17942
--------------------------------------------------------
17943
--  DDL for Procedure UPDATE_PROCESSES
17944
--------------------------------------------------------
1373 dpurdie 17945
 
17946
  CREATE OR REPLACE PROCEDURE "UPDATE_PROCESSES" 
17947
IS
17948
 
17949
proc_id NUMBER;
17950
/******************************************************************************
17951
   NAME:       DELETE_DO_NOT_RIPPLE
17952
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
17953
               IS RELEASED
17954
 
17955
   REVISIONS:
17956
   Ver        Date        Author           Description
17957
   ---------  ----------  ---------------  ------------------------------------
17958
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
17959
 
17960
   NOTES:
17961
 
17962
   Automatically available Auto Replace Keywords:
17963
      Object Name:     DELETE_DO_NOT_RIPPLE
17964
      Sysdate:         21/04/2006
17965
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
17966
      Username:         (set in TOAD Options, Procedure Editor)
17967
      Table Name:       (set in the "New PL/SQL Object" dialog)
17968
 
17969
******************************************************************************/
17970
   CURSOR ripple_cur
17971
   IS
17972
      select proc_id,  proc_name, run_as, pkg_owner, is_interface from processes;
17973
 
17974
   ripple_rec   ripple_cur%ROWTYPE;
17975
BEGIN
17976
   OPEN ripple_cur;
17977
 
17978
   FETCH ripple_cur
17979
    INTO ripple_rec;
17980
 
17981
   WHILE ripple_cur%FOUND
17982
   LOOP
17983
 
17984
 
17985
update deployment_manager.processes_config 
17986
set proc_id = ripple_rec.proc_id
17987
where pkg_health_tag = ripple_rec.proc_name
17988
and cmd_interface IS NULL
17989
and pkg_owner IS NULL
17990
and is_interface IS NULL; 
17991
 
17992
 
17993
      FETCH ripple_cur
17994
       INTO ripple_rec;
17995
   END LOOP;
17996
END UPDATE_PROCESSES;
1374 dpurdie 17997
/
17998
--------------------------------------------------------
17999
--  DDL for Procedure DELETE_AUTOBUILD_FAILURE_INFO
18000
--------------------------------------------------------
1373 dpurdie 18001
 
18002
  CREATE OR REPLACE PROCEDURE "DELETE_AUTOBUILD_FAILURE_INFO" 
18003
IS
18004
/******************************************************************************
18005
   NAME:       DELETE_AUTOBUILD_FAILURE_INFO
18006
   PURPOSE:
18007
 
18008
   REVISIONS:
18009
   Ver        Date        Author           Description
18010
   ---------  ----------  ---------------  ------------------------------------
18011
   1.0        2/06/2006    Rupesh Solanki      1. Created this procedure.
18012
 
18013
   NOTES:
18014
 
18015
   Automatically available Auto Replace Keywords:
18016
      Object Name:     DELETE_AUTOBUILD_FAILURE_INFO
18017
      Sysdate:         2/06/2006
18018
      Date and Time:   2/06/2006, 8:44:25 AM, and 2/06/2006 8:44:25 AM
18019
      Username:         (set in TOAD Options, Procedure Editor)
18020
      Table Name:       (set in the "New PL/SQL Object" dialog)
18021
 
18022
******************************************************************************/
18023
BEGIN
18024
   DELETE FROM autobuild_failure
18025
         WHERE group_email_id NOT IN (SELECT group_email_id
18026
                                        FROM members_group);
18027
END delete_autobuild_failure_info;
1374 dpurdie 18028
/
18029
--------------------------------------------------------
18030
--  DDL for Procedure TEST
18031
--------------------------------------------------------
1373 dpurdie 18032
 
18033
  CREATE OR REPLACE PROCEDURE "TEST" 
18034
IS
18035
 
18036
proc_id NUMBER;
18037
/******************************************************************************
18038
   NAME:       DELETE_DO_NOT_RIPPLE
18039
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18040
               IS RELEASED
18041
 
18042
   REVISIONS:
18043
   Ver        Date        Author           Description
18044
   ---------  ----------  ---------------  ------------------------------------
18045
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18046
 
18047
   NOTES:
18048
 
18049
   Automatically available Auto Replace Keywords:
18050
      Object Name:     DELETE_DO_NOT_RIPPLE
18051
      Sysdate:         21/04/2006
18052
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18053
      Username:         (set in TOAD Options, Procedure Editor)
18054
      Table Name:       (set in the "New PL/SQL Object" dialog)
18055
 
18056
******************************************************************************/
18057
   CURSOR ripple_cur
18058
   IS
18059
      select distinct pkg_health_tag, cmd_interface, pkg_owner, is_interface from deployment_manager.processes_config;
18060
 
18061
   ripple_rec   ripple_cur%ROWTYPE;
18062
BEGIN
18063
   OPEN ripple_cur;
18064
 
18065
   FETCH ripple_cur
18066
    INTO ripple_rec;
18067
 
18068
   WHILE ripple_cur%FOUND
18069
   LOOP
18070
 
18071
   select deployment_manager.seq_proc_id.nextval into proc_id from dual;
18072
 
18073
insert into processes (PROC_ID, PROC_NAME, RUN_AS, PKG_OWNER, IS_INTERFACE) 
18074
values(proc_id, ripple_rec.pkg_health_tag, ripple_rec.cmd_interface, ripple_rec.pkg_owner, ripple_rec.is_interface);
18075
 
18076
      FETCH ripple_cur
18077
       INTO ripple_rec;
18078
   END LOOP;
18079
END test;
1374 dpurdie 18080
/
18081
--------------------------------------------------------
18082
--  DDL for Procedure CLEAN_DO_NOT_RIPPLE
18083
--------------------------------------------------------
1373 dpurdie 18084
 
18085
  CREATE OR REPLACE PROCEDURE "CLEAN_DO_NOT_RIPPLE" (nrtagid IN NUMBER)
18086
IS
18087
/******************************************************************************
18088
   NAME:       clean_do_not_ripple
18089
 
18090
   PURPOSE:    To delete entries from the do_not_ripple table based upon
18091
               an RTAG_ID only
18092
 
18093
               This is a tidy-up operation performed against the do_not_ripple
18094
               table, ensuring that the table does not have rtag_id/pv_id
18095
               combinations that cannot be found in the release's wip/pending/release
18096
               tabs.
18097
 
18098
******************************************************************************/
18099
BEGIN
18100
   -- Delete any invalid rtag_id/pv_id combination from the do_not_ripple table.
18101
   -- An invalid rtag_id/pv_id combination is one that cannot be found in the
18102
   -- work_in_progress, planned, or release_content table.
18103
   -- NOTE: Planned operations that represent pending additive/subtractive merge
18104
   -- operations are ignored because they have not been approved yet and so
18105
   -- cannot be said to be "in the release".
18106
   DELETE FROM do_not_ripple
18107
         WHERE rtag_id = nrtagid
18108
           AND pv_id not in
18109
               ((SELECT pv_id FROM release_content WHERE rtag_id = nrtagid)
18110
                 UNION
18111
                (SELECT pv_id FROM work_in_progress WHERE rtag_id = nrtagid)
18112
                 UNION
18113
                (SELECT pv_id FROM planned WHERE rtag_id = nrtagid AND (operation is null OR operation = 'R'))
18114
               );
18115
END clean_do_not_ripple;
1374 dpurdie 18116
/
18117
--------------------------------------------------------
18118
--  DDL for Procedure REBUILD_ENVIRONMENT
18119
--------------------------------------------------------
1373 dpurdie 18120
 
18121
  CREATE OR REPLACE PROCEDURE "REBUILD_ENVIRONMENT" ( NNrtag_id IN NUMBER ) IS
18122
 
18123
/* ---------------------------------------------------------------------------
18124
    Version: 3.3
18125
   --------------------------------------------------------------------------- */
18126
    rowCnt NUMBER := 0;
18127
    iteration NUMBER := 2;          -- Iterations counter
18128
    maxIterations NUMBER := 50;    -- Maximum number of iterations allowed.
18129
                                    -- This will prevent infinite loops if cyrcular dependencies are found
18130
    sessionNum NUMBER;
18131
BEGIN
18132
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18133
 
18134
 
18135
    -- Redo Patch Ignore warnings
18136
    Ignore_Dependency_Warnings ( NNrtag_id, NULL, NULL, TRUE );
18137
 
18138
 
18139
    Level_One_Conflicts ( NNrtag_id, sessionNum );
18140
 
18141
    LOOP
18142
        Level_N_Conflicts ( NNrtag_id, sessionNum, rowCnt, iteration );
18143
        iteration := iteration + 1;
18144
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18145
    END LOOP;
18146
 
18147
    Update_Package_States ( NNrtag_id, sessionNum );
18148
 
18149
    DELETE FROM temp_env_states WHERE temp_env_states.session_num = sessionNum;
18150
 
18151
    -- Flag Packages with New Patches Available
18152
    Check_New_Patches ( NNrtag_id );
18153
 
18154
	Clean_Do_Not_Ripple( NNrtag_id );
18155
 
18156
 
18157
	/* Circular Dependency Flag */
18158
    /*
18159
	IF iteration > maxIterations
18160
	THEN
18161
		UPDATE release_tags SET
18162
		   	   circular_dependency = 'Y'
18163
		 WHERE rtag_id = NNrtag_id;
18164
	ELSE
18165
		UPDATE release_tags SET
18166
		   	   circular_dependency = NULL
18167
		 WHERE rtag_id = NNrtag_id;
18168
	END IF;
18169
    */
18170
END Rebuild_Environment;
1374 dpurdie 18171
/
18172
--------------------------------------------------------
18173
--  DDL for Procedure TEST_MARCO
18174
--------------------------------------------------------
1373 dpurdie 18175
 
18176
  CREATE OR REPLACE PROCEDURE "TEST_MARCO" IS
18177
/******************************************************************************
18178
   NAME:       TEST_MARCO
18179
   PURPOSE:    
18180
 
18181
   REVISIONS:
18182
   Ver        Date        Author           Description
18183
   ---------  ----------  ---------------  ------------------------------------
18184
   1.0        2/03/2007          1. Created this procedure.
18185
 
18186
   NOTES:
18187
 
18188
   Automatically available Auto Replace Keywords:
18189
      Object Name:     TEST_MARCO
18190
      Sysdate:         2/03/2007
18191
      Date and Time:   2/03/2007, 3:11:11 PM, and 2/03/2007 3:11:11 PM
18192
      Username:         (set in TOAD Options, Procedure Editor)
18193
      Table Name:       (set in the "New PL/SQL Object" dialog)
18194
 
18195
******************************************************************************/
18196
 
18197
parPv_id    NUMBER;
18198
parPkg_id   NUMBER;
18199
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18200
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18201
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18202
BEGIN
18203
 
18204
SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18205
 
18206
        /* LOG ACTION */
18207
        Log_Action ( parPv_id, 'new_version', 3764,
18208
        			 'New package version: '|| parPv_id || '.' );
18209
 
18210
        Split_Version ( parPv_id || '.', SSV_MM, SSV_NMM, SSV_EXT );
18211
 
18212
     -- Clone Package Version Details --
18213
            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,
18214
                                           src_path, pv_description, PV_OVERVIEW, LAST_PV_ID, owner_id, BUILD_TYPE, IS_BUILD_ENV_REQUIRED, bs_id, is_autobuildable, is_deployable )
18215
                SELECT parPv_id         AS pv_id,
18216
                       pv.pkg_id        AS pkg_id,
18217
                       parPv_id || '.'    AS pkg_version,
18218
                       'N'              AS dlocked,
18219
                       Ora_Sysdate      AS created_stamp,
18220
                       3764        AS creator_id,
18221
                       Ora_Sysdatetime  AS modified_stamp,
18222
                       3764        AS modifier_id,
18223
                       SSV_MM          AS V_MM,
18224
                       SSV_NMM         AS V_NMM,
18225
                       SSV_EXT          AS V_EXT,
18226
                       pv.src_path,
18227
                       pv.pv_description,
18228
                       pv.PV_OVERVIEW,
18229
                       112982 	AS LAST_PV_ID,
18230
                       pv.owner_id,
18231
					   pv.BUILD_TYPE,
18232
					   pv.IS_BUILD_ENV_REQUIRED,
18233
					   pv.bs_id,
18234
					   pv.is_autobuildable,
18235
					   pv.IS_DEPLOYABLE
18236
                  FROM PACKAGE_VERSIONS pv
18237
                 WHERE pv.pv_id = 112982;		
18238
 
18239
Basic_Clone ( 112982, parPv_id, NULL, 3764, 22325, 0 );
18240
 
18241
 
18242
END TEST_MARCO;
1374 dpurdie 18243
/
18244
--------------------------------------------------------
18245
--  DDL for Procedure LOG_ACTION_BULK
18246
--------------------------------------------------------
1373 dpurdie 18247
 
18248
  CREATE OR REPLACE PROCEDURE "LOG_ACTION_BULK" ( nPvIdList IN VARCHAR2,
18249
										 	  enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18250
                                         	  nUserId IN ACTION_LOG.USER_ID%TYPE,
18251
										 	  sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18252
/* ---------------------------------------------------------------------------
18253
    Version: 3.0
18254
   --------------------------------------------------------------------------- */
18255
 
18256
    ActionTypeId NUMBER;
18257
    oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18258
 
18259
BEGIN
18260
 
18261
    oPvIdCollector := IN_LIST_NUMBER ( nPvIdList );
18262
 
18263
    -- Get Action Type FK
18264
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18265
      FROM ACTION_TYPE act
18266
     WHERE act.NAME = enumActionTypeName;
18267
 
18268
    -- Log Action
18269
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18270
    SELECT nUserId,
18271
    	   ORA_SYSDATETIME,
18272
           pv.PV_ID,
18273
           sAdditionalComments,
18274
           ActionTypeId
18275
      FROM PACKAGE_VERSIONS pv
18276
     WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18277
 
18278
 
18279
END Log_Action_Bulk;
1374 dpurdie 18280
/
18281
--------------------------------------------------------
18282
--  DDL for Procedure CLONED_PACKAGE_PROCESSES
18283
--------------------------------------------------------
1373 dpurdie 18284
 
18285
  CREATE OR REPLACE PROCEDURE "CLONED_PACKAGE_PROCESSES" 
18286
IS
18287
 
18288
proc_id NUMBER;
18289
/******************************************************************************
18290
   NAME:       DELETE_DO_NOT_RIPPLE
18291
   PURPOSE:    TO DELETE ENTRIES FROM THE DO_NOT_RIPPLE TABLE WHEN A PACKAGE
18292
               IS RELEASED
18293
 
18294
   REVISIONS:
18295
   Ver        Date        Author           Description
18296
   ---------  ----------  ---------------  ------------------------------------
18297
   1.0        21/04/2006  Rupesh Solanki     1. Created this procedure.
18298
 
18299
   NOTES:
18300
 
18301
   Automatically available Auto Replace Keywords:
18302
      Object Name:     DELETE_DO_NOT_RIPPLE
18303
      Sysdate:         21/04/2006
18304
      Date and Time:   21/04/2006, 3:21:55 PM, and 21/04/2006 3:21:55 PM
18305
      Username:         (set in TOAD Options, Procedure Editor)
18306
      Table Name:       (set in the "New PL/SQL Object" dialog)
18307
 
18308
******************************************************************************/
18309
   CURSOR ripple_cur
18310
   IS
18311
      select distinct proc_id, prod_id from deployment_manager.processes_config;
18312
 
18313
   ripple_rec   ripple_cur%ROWTYPE;
18314
BEGIN
18315
   OPEN ripple_cur;
18316
 
18317
   FETCH ripple_cur
18318
    INTO ripple_rec;
18319
 
18320
   WHILE ripple_cur%FOUND
18321
   LOOP
18322
 
18323
 
18324
 
18325
insert into package_processes (PROC_ID, PV_ID) 
18326
values( ripple_rec.proc_id, ripple_rec.prod_id);
18327
 
18328
      FETCH ripple_cur
18329
       INTO ripple_rec;
18330
   END LOOP;
18331
END CLONED_PACKAGE_PROCESSES;
1374 dpurdie 18332
/
18333
--------------------------------------------------------
18334
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS2
18335
--------------------------------------------------------
1373 dpurdie 18336
 
18337
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS2" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
18338
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18339
                                                          NNuser_id IN NUMBER,
18340
                                                          retPV_ID OUT NUMBER,
18341
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
18342
/* ---------------------------------------------------------------------------
18343
    Version: 4.0
18344
   --------------------------------------------------------------------------- */
18345
 
18346
    parPkg_id   NUMBER;
18347
    parPv_id    NUMBER;
18348
    cloneFrom_pv_id NUMBER;
18349
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
18350
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
18351
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
18352
 
18353
    CURSOR packages_cur IS
18354
        SELECT pkg_id FROM PACKAGES
18355
        WHERE pkg_name = SSpkg_name;
18356
    packages_rec packages_cur%ROWTYPE;
18357
 
18358
    CURSOR package_versions_cur IS
18359
        SELECT pv_id FROM PACKAGE_VERSIONS
18360
        WHERE pkg_id = parPkg_id
18361
        AND pkg_version = SSpkg_version;
18362
    package_versions_rec package_versions_cur%ROWTYPE;
18363
 
18364
    CURSOR clone_package_versions_cur IS
18365
        SELECT MAX(pv_id) AS pv_id
18366
          FROM PACKAGE_VERSIONS
18367
         WHERE pkg_id = parPkg_id
18368
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
18369
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
18370
 
18371
BEGIN
18372
    /* -------------------------------------------- */
18373
    /* Find if pkg_name exists and seed if required */
18374
    /* -------------------------------------------- */
18375
    OPEN packages_cur;
18376
    FETCH packages_cur INTO packages_rec;
18377
 
18378
    IF packages_cur%NOTFOUND
18379
    THEN
18380
        /* INSERT into packages table */
18381
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
18382
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
18383
 
18384
    ELSE
18385
        parPkg_id := packages_rec.pkg_id;
18386
 
18387
    END IF;
18388
 
18389
    CLOSE packages_cur;
18390
 
18391
 
18392
 
18393
    /* ---------------------------------------------------- */
18394
    /* Find if package_version exists and seed if required  */
18395
    /* ---------------------------------------------------- */
18396
    OPEN package_versions_cur;
18397
    FETCH package_versions_cur INTO package_versions_rec;
18398
 
18399
    IF package_versions_cur%NOTFOUND
18400
    THEN
18401
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
18402
 
18403
        /* LOG ACTION */
18404
        Log_Action ( parPv_id, 'new_version', NNuser_id,
18405
        			 'New package version: '|| SSpkg_version );
18406
 
18407
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
18408
 
18409
 
18410
 
18411
 
18412
 
18413
            /* CLONE details from similar version  OR  from nCloneFromPvId */
18414
			IF ( NOT nCloneFromPvId IS NULL) THEN
18415
            	cloneFrom_pv_id := nCloneFromPvId;
18416
			ELSE
18417
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
18418
			END IF;
18419
 
18420
            -- Clone Package Version Details --
18421
            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,
18422
                                           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 )
18423
                SELECT parPv_id         AS pv_id,
18424
                       parPkg_id        AS pkg_id,
18425
                       SSpkg_version    AS pkg_version,
18426
                       'N'              AS dlocked,
18427
                       Ora_Sysdate      AS created_stamp,
18428
                       NNuser_id        AS creator_id,
18429
                       Ora_Sysdatetime  AS modified_stamp,
18430
                       NNuser_id        AS modifier_id,
18431
                       SSV_MM           AS V_MM,
18432
                       SSV_NMM          AS V_NMM,
18433
                       SSV_EXT          AS V_EXT,
18434
                       pv.src_path,
18435
                       pv.pv_description,
18436
                       pv.PV_OVERVIEW,
18437
                       cloneFrom_pv_id 	AS LAST_PV_ID,
18438
                       pv.owner_id,
18439
					   pv.BUILD_TYPE,
18440
					   pv.IS_BUILD_ENV_REQUIRED,
18441
					   pv.bs_id,
18442
					   pv.is_autobuildable,
18443
					   pv.IS_DEPLOYABLE,
18444
					   pv.ripple_field
18445
                  FROM PACKAGE_VERSIONS pv
18446
                 WHERE pv.pv_id = cloneFrom_pv_id;
18447
 
18448
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
18449
 
18450
        retPV_ID := parPv_id;
18451
 
18452
    ELSE
18453
        retPV_ID := package_versions_rec.pv_id;
18454
 
18455
    END IF;
18456
 
18457
    CLOSE package_versions_cur;
18458
 
18459
 
18460
 
18461
 
18462
END Seed_Package_Names_Versions2;
1374 dpurdie 18463
/
18464
--------------------------------------------------------
18465
--  DDL for Procedure BUILD_TREE
18466
--------------------------------------------------------
1373 dpurdie 18467
 
18468
  CREATE OR REPLACE PROCEDURE "BUILD_TREE" ( nRtag_id IN NUMBER,
18469
	   	  		  					     retSessionNum OUT NUMBER ) IS
18470
 
18471
/* ---------------------------------------------------------------------------
18472
    Version: 3.0.0
18473
   --------------------------------------------------------------------------- */
18474
    rowCnt 			NUMBER := 0;						-- Iterations counter
18475
    iteration 		NUMBER := 1;                  -- Maximum number of iterations allowed.
18476
    maxIterations 	NUMBER := 50;      	  	-- This will prevent infinite loops if cyrcular dependencies are found
18477
	UP_THE_TREE 	CONSTANT NUMBER DEFAULT 1;
18478
	DOWN_THE_TREE 	CONSTANT NUMBER DEFAULT -1;
18479
    sessionNum 		NUMBER;
18480
	levelNum		NUMBER;
18481
 
18482
BEGIN
18483
    SELECT SEQ_session_num.nextval INTO sessionNum FROM DUAL;
18484
 
18485
	/*
18486
	||	   Start UP THE TREE
18487
	*/
18488
 
18489
 
18490
	/* Packages with no dependencies */    
18491
    INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18492
		SELECT sessionNum AS SESSION_NUM,
18493
			   iteration AS LEVEL_NUM,
18494
			   UP_THE_TREE AS DIRECTION,
18495
			   rc.pv_id, pv.pkg_id, pv.v_ext
18496
		  FROM release_content rc,
18497
		  	   package_versions pv
18498
		 WHERE rc.rtag_id = nRtag_id
18499
		   AND rc.pv_id = pv.pv_id
18500
		 MINUS
18501
		SELECT sessionNum AS SESSION_NUM, 
18502
			   iteration AS LEVEL_NUM,
18503
			   UP_THE_TREE AS DIRECTION,
18504
			   dep.pv_id, pv.pkg_id, pv.v_ext
18505
		  FROM package_dependencies dep,
18506
		  	   package_versions pv
18507
		 WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtag_id )
18508
		   AND dep.pv_id = pv.pv_id;
18509
 
18510
 
18511
	/* Browse UP the build tree */	   
18512
	iteration := iteration + 1;
18513
    LOOP
18514
 
18515
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18516
			SELECT DISTINCT 
18517
			       sessionNum AS SESSION_NUM,
18518
			       iteration AS LEVEL_NUM,
18519
				   UP_THE_TREE AS DIRECTION, 
18520
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18521
			  FROM (  
18522
			        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
18523
			          FROM package_dependencies dep,
18524
			               release_content rc,
18525
						   package_versions pv,
18526
						   package_versions dpv
18527
			         WHERE dep.pv_id = rc.pv_id
18528
			           AND rc.rtag_id = nRtag_id
18529
					   AND dep.pv_id = pv.pv_id
18530
					   AND dep.dpv_id = dpv.pv_id
18531
					) rdep,
18532
					temp_tree_browse ttb
18533
			 WHERE rdep.dpkg_id  = ttb.pkg_id
18534
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext,'|LINK_A_NULL|')
18535
			   AND ttb.SESSION_NUM = sessionNum
18536
			   AND ttb.LEVEL_NUM = iteration - 1	
18537
			MINUS
18538
			/* Packages with all depencencies NOT matched */  
18539
			SELECT DISTINCT 
18540
			       sessionNum AS SESSION_NUM,
18541
			       iteration AS LEVEL_NUM, 
18542
				   UP_THE_TREE AS DIRECTION,
18543
				   rdep.pv_id, rdep.pkg_id, rdep.v_ext
18544
			  FROM (  
18545
			        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
18546
			          FROM package_dependencies dep,
18547
			               release_content rc,
18548
						   package_versions pv,
18549
						   package_versions dpv
18550
			         WHERE dep.pv_id = rc.pv_id
18551
			           AND rc.rtag_id = nRtag_id
18552
					   AND dep.pv_id = pv.pv_id
18553
					   AND dep.dpv_id = dpv.pv_id
18554
					) rdep,
18555
					(
18556
					 SELECT tb.*
18557
					   FROM temp_tree_browse tb
18558
					  WHERE tb.SESSION_NUM = sessionNum
18559
					) ttb
18560
			 WHERE rdep.dpkg_id  = ttb.pkg_id (+)
18561
			   AND NVL(rdep.dv_ext ,'|LINK_A_NULL|') = NVL(ttb.v_ext (+),'|LINK_A_NULL|')
18562
			   AND ttb.SESSION_NUM IS NULL;
18563
 
18564
		rowCnt := SQL%ROWCOUNT;
18565
		IF rowCnt > 0 THEN
18566
           iteration := iteration + 1;
18567
		END IF;
18568
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
18569
    END LOOP;
18570
 
18571
	/*---------------------------------------------------------------------------------------------------------------------*/
18572
 
18573
	/*     Check for unresolved dependencies
18574
	||  
18575
	*/
18576
	/* UNRESOLVED */
18577
	 SELECT COUNT(*) INTO rowCnt
18578
	   FROM (
18579
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18580
			  FROM release_content rc,
18581
			  	   package_versions pv
18582
			 WHERE rc.rtag_id = nRtag_id
18583
			   AND rc.pv_id = pv.pv_id	   
18584
			MINUS
18585
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18586
			  FROM temp_tree_browse ttb
18587
			 WHERE ttb.session_num = sessionNum
18588
			);
18589
 
18590
 
18591
 
18592
	 IF rowCnt > 0 
18593
	 THEN
18594
	 	 /*     Circular dependencies detected.
18595
		 ||     Try to resolve build order from the top now.
18596
		 ||		Start DOWN THE TREE
18597
		 */
18598
 
18599
		iteration := 0; 
18600
		 /* Top Level packages */	
18601
		INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )	   
18602
			SELECT sessionNum AS SESSION_NUM,
18603
			       iteration AS LEVEL_NUM,
18604
				   DOWN_THE_TREE AS DIRECTION,
18605
				   pv.pv_id, pv.pkg_id, pv.v_ext
18606
			  FROM (		   
18607
					/* Packages no one depends on ( Top level packages )*/
18608
					( 
18609
					/* All parents*/ 
18610
					SELECT pv.pkg_id, pv.v_ext
18611
			          FROM package_dependencies dep,
18612
			               release_content rc,
18613
						   package_versions pv
18614
			         WHERE dep.pv_id = rc.pv_id
18615
			           AND rc.rtag_id = nRtag_id
18616
					   AND dep.pv_id = pv.pv_id
18617
					 MINUS
18618
					 /* All children */
18619
					SELECT dpv.pkg_id, dpv.v_ext
18620
			          FROM package_dependencies dep,
18621
			               release_content rc,
18622
						   package_versions dpv
18623
			         WHERE dep.pv_id = rc.pv_id
18624
			           AND rc.rtag_id = nRtag_id
18625
					   AND dep.dpv_id = dpv.pv_id
18626
					 ) 
18627
					 MINUS
18628
					/* Packages with resolved dependencies from UP THE TREE */ 
18629
					SELECT ttb.pkg_id, ttb.v_ext
18630
					  FROM temp_tree_browse ttb
18631
					 WHERE ttb.session_num = sessionNum
18632
				  ) tpkg,
18633
				  package_versions pv,
18634
				  release_content rc
18635
			WHERE rc.rtag_id = nRtag_id
18636
			  AND rc.pv_id = pv.pv_id
18637
			  AND tpkg.pkg_id = pv.pkg_id
18638
			  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18639
 
18640
 
18641
		 /* Keep taking packages which no one depende on */			  
18642
		 iteration := iteration - 1;  
18643
		 LOOP	  
18644
			   INSERT INTO TEMP_TREE_BROWSE (SESSION_NUM, LEVEL_NUM, DIRECTION, PV_ID, PKG_ID, V_EXT )
18645
					SELECT sessionNum AS SESSION_NUM,
18646
					       iteration AS LEVEL_NUM,
18647
					       DOWN_THE_TREE AS DIRECTION,
18648
					       pv.pv_id, pv.pkg_id, pv.v_ext
18649
					  FROM (		   
18650
					 	/* All Unresolved */
18651
					 	(
18652
					 	SELECT pv.pkg_id, pv.v_ext
18653
					 	  FROM release_content rc,
18654
					 	  	   package_versions pv
18655
					 	 WHERE rc.rtag_id = nRtag_id
18656
					 	   AND rc.pv_id = pv.pv_id	   
18657
					 	MINUS
18658
					 	SELECT ttb.pkg_id, ttb.v_ext
18659
					 	  FROM temp_tree_browse ttb
18660
					 	 WHERE ttb.session_num = sessionNum
18661
					 	)
18662
					 	 MINUS
18663
					 	(  
18664
					 	 /* Children of Unresolved */  
18665
					 	SELECT dpv.pkg_id, dpv.V_EXT
18666
					 	  FROM (
18667
					 			SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18668
					 			  FROM release_content rc,
18669
					 			  	   package_versions pv
18670
					 			 WHERE rc.rtag_id = nRtag_id
18671
					 			   AND rc.pv_id = pv.pv_id	   
18672
					 			MINUS
18673
					 			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18674
					 			  FROM temp_tree_browse ttb
18675
					 			 WHERE ttb.session_num = sessionNum
18676
					 		   ) unr,
18677
					 		   package_dependencies dep,
18678
					 		   package_versions dpv
18679
					 	 WHERE unr.pv_id = dep.pv_id
18680
					 	   AND dep.dpv_id = dpv.pv_id
18681
					 	 )  
18682
					   ) tpkg,
18683
					   package_versions pv,
18684
					   release_content rc
18685
					WHERE rc.rtag_id = nRtag_id
18686
					  AND rc.pv_id = pv.pv_id
18687
					  AND tpkg.pkg_id = pv.pkg_id
18688
					  AND NVL(tpkg.v_ext,'|LINK_A_NULL|') = NVL(pv.v_ext,'|LINK_A_NULL|');
18689
 
18690
            rowCnt := SQL%ROWCOUNT;
18691
        	IF rowCnt > 0 THEN
18692
	           iteration := iteration - 1;
18693
			END IF;
18694
            EXIT WHEN (rowCnt < 1);
18695
     	END LOOP;
18696
 
18697
	 END IF;
18698
 
18699
 
18700
	/*---------------------------------------------------------------------------------------------------------------------*/
18701
 
18702
	/* 
18703
	|| 	 Save results from temp table
18704
	*/	
18705
	/* Clean up build_order table */
18706
	DELETE FROM BUILD_ORDER WHERE rtag_id = nRtag_id;
18707
 
18708
	/* Save UP THE TREE */
18709
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18710
		SELECT nRtag_id AS rtag_id,
18711
			   ttb.level_num AS step_num, 
18712
			   ttb.PV_ID
18713
		  FROM temp_tree_browse ttb
18714
		 WHERE ttb.session_num = sessionNum
18715
		   AND ttb.direction = UP_THE_TREE;	
18716
 
18717
	/*Get last step_num */
18718
	SELECT MAX(ttb.level_num) + 1 INTO levelNum
18719
	FROM temp_tree_browse ttb WHERE ttb.session_num = sessionNum AND ttb.DIRECTION = UP_THE_TREE;
18720
 
18721
	/* UNRESOLVED */
18722
	 SELECT COUNT(*) INTO rowCnt
18723
	   FROM (
18724
			 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18725
			  FROM release_content rc,
18726
			  	   package_versions pv
18727
			 WHERE rc.rtag_id = nRtag_id
18728
			   AND rc.pv_id = pv.pv_id	   
18729
			MINUS
18730
			SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18731
			  FROM temp_tree_browse ttb
18732
			 WHERE ttb.session_num = sessionNum
18733
			);
18734
 
18735
 
18736
	IF rowCnt > 0
18737
	THEN
18738
		/* Save unresolved packages */
18739
 		INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID, UNRESOLVED )
18740
		    SELECT  nRtag_id AS rtag_id,
18741
				    levelNum AS step_num, 
18742
				    upv.PV_ID,
18743
					'Y' AS UNRESOLVED
18744
			   FROM (
18745
					 SELECT pv.pv_id, pv.pkg_id, pv.v_ext
18746
					  FROM release_content rc,
18747
					  	   package_versions pv
18748
					 WHERE rc.rtag_id = nRtag_id
18749
					   AND rc.pv_id = pv.pv_id	   
18750
					MINUS
18751
					SELECT ttb.pv_id, ttb.pkg_id, ttb.v_ext
18752
					  FROM temp_tree_browse ttb
18753
					 WHERE ttb.session_num = sessionNum
18754
					) upv;
18755
	END IF;	
18756
 
18757
	/* Save DOWN THE TREE */
18758
	levelNum := 1000;
18759
	INSERT INTO BUILD_ORDER ( RTAG_ID, STEP_NUM, PV_ID )
18760
		SELECT nRtag_id AS rtag_id,
18761
			   levelNum + ttb.level_num  AS step_num, 
18762
			   ttb.PV_ID
18763
		  FROM temp_tree_browse ttb
18764
		 WHERE ttb.session_num = sessionNum
18765
		   AND ttb.direction = DOWN_THE_TREE;
18766
 
18767
 
18768
	/*---------------------------------------------------------------------------------------------------------------------*/
18769
 
18770
	/* Clean up temp table */
18771
	DELETE FROM TEMP_TREE_BROWSE WHERE session_num = sessionNum;
18772
 
18773
	retSessionNum := sessionNum;
18774
END Build_Tree;
1374 dpurdie 18775
/
18776
--------------------------------------------------------
18777
--  DDL for Procedure CLEAR_ADVISORY_RIPPLE
18778
--------------------------------------------------------
1373 dpurdie 18779
 
18780
  CREATE OR REPLACE PROCEDURE "CLEAR_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18781
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
18782
											 nUserId IN NUMBER ) IS
18783
/* ---------------------------------------------------------------------------
18784
    Version: 4.0
18785
   --------------------------------------------------------------------------- */
18786
 
18787
BEGIN
18788
 
18789
    -- Clear Advisory Ripple Package
18790
    DELETE FROM ADVISORY_RIPPLE
18791
	WHERE PV_ID = nPvId
18792
	AND RTAG_ID = nRtagId;
18793
 
18794
    /* LOG ACTION */
18795
   	Log_Action ( nPvId, 'clear_advisory_ripple', nUserId );
18796
 
18797
	/*Rebuild_Environment(nRtagId);*/
18798
 
18799
END Clear_Advisory_Ripple;
1374 dpurdie 18800
/
18801
--------------------------------------------------------
18802
--  DDL for Procedure REMOVE_RELEASE_CONTENT
18803
--------------------------------------------------------
1373 dpurdie 18804
 
18805
  CREATE OR REPLACE PROCEDURE "REMOVE_RELEASE_CONTENT" ( sPvIdList IN VARCHAR2,
18806
													 sNotPvIdList IN VARCHAR2,
18807
                                                     nRTagId IN RELEASE_CONTENT.RTAG_ID%TYPE ) IS
18808
/* ---------------------------------------------------------------------------
18809
    Version: 3.0
18810
   --------------------------------------------------------------------------- */
18811
 
18812
oPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18813
oNotPvIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
18814
 
18815
BEGIN
18816
	oPvIdCollector := IN_LIST_NUMBER ( sPvIdList );
18817
    oNotPvIdCollector := IN_LIST_NUMBER ( sNotPvIdList );
18818
 
18819
    -- Delete From Release Content
18820
    DELETE
18821
      FROM RELEASE_CONTENT
18822
	 WHERE rtag_id = nRTagId
18823
	   AND pv_id IN ( SELECT * FROM TABLE ( CAST ( oPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
18824
	   AND NOT pv_id IN ( SELECT * FROM TABLE ( CAST ( oNotPvIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
18825
 
18826
 
18827
 
18828
END Remove_Release_Content;
1374 dpurdie 18829
/
18830
--------------------------------------------------------
18831
--  DDL for Procedure UPDATE_PACKAGE_DEPENDENCY
18832
--------------------------------------------------------
1373 dpurdie 18833
 
18834
  CREATE OR REPLACE PROCEDURE "UPDATE_PACKAGE_DEPENDENCY" ( NNpv_id IN NUMBER,
18835
                                                        SSdep_name IN PACKAGES.pkg_name%TYPE,
18836
                                                        SSdep_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
18837
                                                        CCbuild_type IN PACKAGE_DEPENDENCIES.build_type%TYPE,
18838
                                                        NNuser_id IN NUMBER,
18839
                                                        NNdelete_old_dependency IN NUMBER
18840
                                                       ) IS
18841
/* ---------------------------------------------------------------------------
18842
    Version: 3.3
18843
   --------------------------------------------------------------------------- */
18844
 
18845
    retPV_ID NUMBER;
18846
    SSV_EXT PACKAGE_VERSIONS.v_ext%TYPE;
18847
	DepIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18848
    PvIsPatch	PACKAGE_VERSIONS.is_patch%TYPE;
18849
    NNpkg_id NUMBER;
18850
    NNdpkg_id NUMBER;
18851
 
18852
BEGIN
18853
    --- Seed database with package_name and version if required ---
18854
    Seed_Package_Names_Versions ( SSdep_name, SSdep_version, NNuser_id, retPV_ID );
18855
 
18856
    -- get v_ext,pkg_id of current dependency
18857
    SELECT v_ext, pkg_id, is_patch INTO SSV_EXT, NNdpkg_id, DepIsPatch
18858
      FROM PACKAGE_VERSIONS
18859
     WHERE pv_id = retPV_ID;
18860
 
18861
    -- get pkg_id of parent package
18862
    SELECT pkg_id, is_patch INTO NNpkg_id, PvIsPatch
18863
      FROM PACKAGE_VERSIONS
18864
     WHERE pv_id = NNpv_id;
18865
 
18866
 
18867
	IF ( (PvIsPatch IS NULL) AND (DepIsPatch IS NULL) ) OR
18868
    	( (PvIsPatch IS NOT NULL) )THEN
18869
 
18870
	    IF NNdelete_old_dependency = 1 THEN
18871
	        /* Used for CUSTOM dependency add/edit */
18872
 
18873
	        --- Remove old dependency ---
18874
            IF (PvIsPatch IS NULL) THEN
18875
            	-- Do it for Packages
18876
		        DELETE FROM PACKAGE_DEPENDENCIES
18877
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18878
		            (
18879
		            SELECT dep.*
18880
		              FROM PACKAGE_DEPENDENCIES dep,
18881
		                   PACKAGE_VERSIONS dpv,
18882
		                   PACKAGE_VERSIONS pv
18883
		             WHERE dep.dpv_id = dpv.pv_id
18884
		               AND dep.pv_id = NNpv_id
18885
		               AND pv.pv_id = retPV_ID
18886
		               AND dpv.pkg_id = pv.pkg_id
18887
		               AND NVL(dpv.v_ext, '|LINK_A_NULL|') = NVL(SSV_EXT, '|LINK_A_NULL|')
18888
		            );
18889
            ELSE
18890
            	-- Do it for Patches
18891
                DELETE FROM PACKAGE_DEPENDENCIES
18892
		         WHERE ( pv_id, dpv_id, pkg_id, dpkg_id, build_type, display_order ) IN
18893
		            (
18894
		            SELECT dep.*
18895
		              FROM PACKAGE_DEPENDENCIES dep
18896
		             WHERE dep.dpv_id = retPV_ID
18897
		               AND dep.pv_id = NNpv_id
18898
		            );
18899
			END IF;
18900
 
18901
	    END IF;
18902
 
18903
	    /* NOTE: for JATS, ANTS dependency update, it is expected that all dependencies are removed. */
18904
 
18905
	    --- Add new dependency ---
18906
	    INSERT INTO PACKAGE_DEPENDENCIES ( pv_id, dpv_id, pkg_id, dpkg_id, build_type )
18907
	    VALUES ( NNpv_id, retPV_ID, NNpkg_id, NNdpkg_id, CCbuild_type );
18908
 
18909
	END IF;
18910
 
18911
END Update_Package_Dependency;
1374 dpurdie 18912
/
18913
--------------------------------------------------------
18914
--  DDL for Procedure LOG_ACTION
18915
--------------------------------------------------------
1373 dpurdie 18916
 
18917
  CREATE OR REPLACE PROCEDURE "LOG_ACTION" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
18918
										 enumActionTypeName IN ACTION_TYPE.NAME%TYPE,
18919
                                         nUserId IN ACTION_LOG.USER_ID%TYPE,
18920
										 sAdditionalComments IN ACTION_LOG.DESCRIPTION%TYPE DEFAULT NULL  ) IS
18921
/* ---------------------------------------------------------------------------
18922
    Version: 3.0
18923
   --------------------------------------------------------------------------- */
18924
 
18925
    ActionTypeId NUMBER;
18926
 
18927
BEGIN
18928
 
18929
    -- Get Action Type FK
18930
    SELECT act.ACTTYPE_ID INTO ActionTypeId
18931
      FROM ACTION_TYPE act
18932
     WHERE act.NAME = enumActionTypeName;
18933
 
18934
 
18935
    INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
18936
    VALUES ( nUserId, ORA_SYSDATETIME, nPvId, sAdditionalComments, ActionTypeId );
18937
 
18938
 
18939
END Log_Action;
1374 dpurdie 18940
/
18941
--------------------------------------------------------
18942
--  DDL for Procedure REMOVE_PATCH
18943
--------------------------------------------------------
1373 dpurdie 18944
 
18945
  CREATE OR REPLACE PROCEDURE "REMOVE_PATCH" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
18946
										   nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
18947
                                           nUserId IN NUMBER ) IS
18948
/* ---------------------------------------------------------------------------
18949
    Version: 4.0
18950
   --------------------------------------------------------------------------- */
18951
 
18952
PatchVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
18953
 
18954
CURSOR curPatch IS
18955
	SELECT pp.PV_ID,
18956
		   pp.PATCH_ID,
18957
	       ROWNUM AS NEW_INSTALL_ORDER
18958
	  FROM PACKAGE_PATCHES pp
18959
	 WHERE pp.PV_ID = nPvId
18960
	ORDER BY pp.INSTALL_ORDER;
18961
recPatch curPatch%ROWTYPE;
18962
 
18963
BEGIN
18964
 
18965
	 -- Delete Patch
18966
     DELETE
18967
       FROM PACKAGE_PATCHES pp
18968
      WHERE pp.PV_ID = nPvId
18969
        AND pp.PATCH_ID = nPatchId;
18970
 
18971
 
18972
	-- Redo Install Order
18973
    OPEN curPatch;
18974
	FETCH curPatch INTO recPatch;
18975
 
18976
	WHILE curPatch%FOUND
18977
	LOOP
18978
 
18979
		UPDATE PACKAGE_PATCHES pp SET
18980
			pp.INSTALL_ORDER = recPatch.NEW_INSTALL_ORDER
18981
		WHERE pp.PV_ID = nPvId
18982
		  AND pp.PATCH_ID = recPatch.PATCH_ID;
18983
 
18984
		FETCH curPatch INTO recPatch;
18985
	END LOOP;
18986
 
18987
	CLOSE curPatch;
18988
 
18989
 
18990
 
18991
 
18992
    /* LOG ACTION */
18993
    SELECT pv.PKG_VERSION INTO PatchVersion
18994
      FROM PACKAGE_VERSIONS pv
18995
     WHERE pv.PV_ID = nPatchId;
18996
 
18997
   	Log_Action ( nPvId, 'patch_remove', nUserId,
18998
   			     'Version: '|| PatchVersion );
18999
 
19000
END Remove_Patch;
1374 dpurdie 19001
/
19002
--------------------------------------------------------
19003
--  DDL for Procedure SET_PACKAGE_BUILD_ENV_TEMP
19004
--------------------------------------------------------
1373 dpurdie 19005
 
19006
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV_TEMP" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
19007
	   	  		  								  	   	 sBuildEnvIdList IN VARCHAR2,
19008
														 nBuildStandard IN PACKAGE_VERSIONS.BS_ID%TYPE 
19009
														 ) IS
19010
/* ---------------------------------------------------------------------------
19011
    Last Modified: Rupesh Solanki
19012
	Version: 3.0.1
19013
   --------------------------------------------------------------------------- */
19014
 
19015
   nBsCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();   
19016
   BsId NUMBER;
19017
   HackBsId NUMBER;
19018
 
19019
 
19020
BEGIN
19021
 
19022
   nBsCollector := IN_LIST_NUMBER ( sBuildEnvIdList );
19023
 
19024
   -- Delete Current Build Env settings
19025
   DELETE FROM PACKAGE_BUILD_ENV
19026
   WHERE pv_id = nPvId;
19027
 
19028
   -- Delet Current Package Build Info Settings
19029
   DELETE FROM PACKAGE_BUILD_INFO
19030
   WHERE pv_id = nPvId;
19031
 
19032
   -- Reset flag to N
19033
   UPDATE PACKAGE_VERSIONS SET
19034
	   IS_BUILD_ENV_REQUIRED = 'N'
19035
   WHERE PV_ID = nPvId;
19036
 
19037
 
19038
   -- Set new Build Env
19039
   IF NOT sBuildEnvIdList IS NULL THEN
19040
	FOR i IN 1..nBsCollector.COUNT
19041
	LOOP   
19042
 
19043
	BsId := nBsCollector(i);
19044
 
19045
	IF nBuildStandard = 2 THEN
19046
	   IF BsId = 1 THEN
19047
	   	  HackBsId := 11;
19048
	   ELSE
19049
	   	  HackBsId := 12;
19050
	   END IF;
19051
 
19052
   	  -- Insert into PACKAGE_BUILD_ENV
19053
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19054
	  SELECT nPvId AS PV_ID,
19055
	  		 be.BE_ID
19056
	    FROM BUILD_ENVIRONMENTS be
19057
	   WHERE be.BE_ID IN ( HackBsId );
19058
 
19059
   	  -- Insert into PACKAGE_BUILD_INFO
19060
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19061
	  SELECT nPvId AS PV_ID,
19062
	  		 be.BM_ID
19063
	    FROM BUILD_MACHINES be
19064
	   WHERE be.BM_ID IN ( BsId );						 
19065
 
19066
	   -- Set flag to Y
19067
	   UPDATE PACKAGE_VERSIONS SET
19068
		   IS_BUILD_ENV_REQUIRED = 'Y'
19069
	   WHERE PV_ID = nPvId;	
19070
 
19071
 
19072
	ELSE
19073
 
19074
   	  -- Insert into PACKAGE_BUILD_ENV
19075
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
19076
	  SELECT nPvId AS PV_ID,
19077
	  		 be.BE_ID
19078
	    FROM BUILD_ENVIRONMENTS be
19079
	   WHERE be.BE_ID IN ( BsId );
19080
 
19081
   	  -- Insert into PACKAGE_BUILD_INFO
19082
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
19083
	  SELECT nPvId AS PV_ID,
19084
	  		 be.BM_ID
19085
	    FROM BUILD_MACHINES be
19086
	   WHERE be.BM_ID IN ( BsId );						 
19087
 
19088
	   -- Set flag to Y
19089
	   UPDATE PACKAGE_VERSIONS SET
19090
		   IS_BUILD_ENV_REQUIRED = 'Y'
19091
	   WHERE PV_ID = nPvId;
19092
 
19093
	END IF;  
19094
 
19095
 
19096
	END LOOP;	   
19097
 
19098
   END IF;
19099
 
19100
 
19101
END Set_Package_Build_Env_Temp;
1374 dpurdie 19102
/
19103
--------------------------------------------------------
19104
--  DDL for Procedure UPDATE_RUNTIME_DEPENDENCY
19105
--------------------------------------------------------
1373 dpurdie 19106
 
19107
  CREATE OR REPLACE PROCEDURE "UPDATE_RUNTIME_DEPENDENCY" ( NNpv_id IN RUNTIME_DEPENDENCIES.pv_id%TYPE,
19108
				   	  		  						    NNrtd_id IN RUNTIME_DEPENDENCIES.rtd_id%TYPE,
19109
				   	  		  						    SSrtd_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19110
													    SSrtd_url IN RUNTIME_DEPENDENCIES.rtd_url%TYPE,
19111
													    SSrtd_comments IN RUNTIME_DEPENDENCIES.rtd_comments%TYPE,
19112
													    NNuser_id IN NUMBER ) IS
19113
/* ---------------------------------------------------------------------------
19114
    Version: 3.0.1
19115
   --------------------------------------------------------------------------- */
19116
 
19117
    retRTD_ID	NUMBER;
19118
	CURSOR rtd_cur IS
19119
	    SELECT pv.pkg_version, pkg.pkg_name
19120
		  FROM runtime_dependencies rtd,
19121
		       package_versions pv,
19122
			   packages pkg
19123
		 WHERE rtd.rtd_id = pv.pv_id
19124
		   AND pv.pkg_id = pkg.pkg_id
19125
		   AND rtd.pv_id = NNpv_id
19126
		   AND rtd.rtd_id = NNrtd_id;
19127
	   rtd_rec rtd_cur%ROWTYPE;
19128
 
19129
	CURSOR old_rtd_cur IS
19130
	    SELECT pv.pv_id
19131
		  FROM package_versions pv
19132
		 WHERE pv.pkg_id IN ( SELECT rtdpv.pkg_id
19133
		 	   			 	    FROM package_versions rtdpv
19134
							   WHERE rtdpv.pv_id = NNrtd_id )
19135
		   AND pv.pkg_version = SSrtd_version;
19136
	old_rtd_rec old_rtd_cur%ROWTYPE;
19137
 
19138
 
19139
BEGIN
19140
 
19141
    -- Get current runtime dependency details
19142
	OPEN rtd_cur;
19143
    FETCH rtd_cur INTO rtd_rec;
19144
 
19145
 
19146
 
19147
 
19148
	IF rtd_rec.pkg_version != SSrtd_version THEN
19149
           -- Version has changed, hence create new runtime dependency --
19150
	    /* NOTE: You must create new version as updating just a version will affect
19151
		        all packages using this runtime dependency and user does not expect that.
19152
		        It is safer to create new version */
19153
		OPEN old_rtd_cur;
19154
		FETCH old_rtd_cur INTO old_rtd_rec;
19155
 
19156
 
19157
		IF old_rtd_cur%NOTFOUND
19158
		THEN
19159
			-- Version not found, hence Create New version --
19160
    		Seed_Package_Names_Versions ( rtd_rec.pkg_name, SSrtd_version, NNuser_id, retRTD_ID );
19161
 
19162
			-- Update runtime dependency table --
19163
			UPDATE runtime_dependencies SET
19164
				   rtd_id = retRTD_ID,
19165
				   rtd_url = SSrtd_url,
19166
				   rtd_comments = SSrtd_comments
19167
			 WHERE pv_id = NNpv_id
19168
			   AND rtd_id = NNrtd_id;
19169
 
19170
		ELSE
19171
			-- Update runtime dependency table --
19172
			UPDATE runtime_dependencies SET
19173
				   rtd_id = old_rtd_rec.pv_id,
19174
				   rtd_url = SSrtd_url,
19175
				   rtd_comments = SSrtd_comments
19176
			 WHERE pv_id = NNpv_id
19177
			   AND rtd_id = NNrtd_id;
19178
 
19179
		END IF;
19180
 
19181
 
19182
		CLOSE old_rtd_cur;
19183
 
19184
	ELSE
19185
		--  Version has not changed, hence update everithing except	version --
19186
		UPDATE runtime_dependencies SET
19187
			   rtd_url = SSrtd_url,
19188
			   rtd_comments = SSrtd_comments
19189
		 WHERE pv_id = NNpv_id
19190
		   AND rtd_id = NNrtd_id;
19191
 
19192
 
19193
 
19194
	END IF;
19195
 
19196
 
19197
	CLOSE rtd_cur;
19198
 
19199
END Update_Runtime_Dependency;
1374 dpurdie 19200
/
19201
--------------------------------------------------------
19202
--  DDL for Procedure SET_ADVISORY_RIPPLE
19203
--------------------------------------------------------
1373 dpurdie 19204
 
19205
  CREATE OR REPLACE PROCEDURE "SET_ADVISORY_RIPPLE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
19206
	   	  		  							   nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE,
19207
											 nUserId IN NUMBER ) IS
19208
/* ---------------------------------------------------------------------------
19209
    Version: 4.0
19210
   --------------------------------------------------------------------------- */
19211
 
19212
BEGIN
19213
 
19214
    -- Set Advisory Ripple Package
19215
    INSERT INTO ADVISORY_RIPPLE (RTAG_ID, PV_ID)
19216
	VALUES (nRtagId, nPvId);
19217
 
19218
    /* LOG ACTION */
19219
   	Log_Action ( nPvId, 'set_advisory_ripple', nUserId );
19220
 
19221
	/*Rebuild_Environment(nRtagId);*/
19222
 
19223
END Set_Advisory_Ripple;
1374 dpurdie 19224
/
19225
--------------------------------------------------------
19226
--  DDL for Procedure SEED_PACKAGE_NAMES_VERSIONS
19227
--------------------------------------------------------
1373 dpurdie 19228
 
19229
  CREATE OR REPLACE PROCEDURE "SEED_PACKAGE_NAMES_VERSIONS" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
19230
                                                          SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19231
                                                          NNuser_id IN NUMBER,
19232
                                                          retPV_ID OUT NUMBER,
19233
														  nCloneFromPvId IN NUMBER DEFAULT NULL ) IS
19234
/* ---------------------------------------------------------------------------
19235
    Version: 4.0
19236
   --------------------------------------------------------------------------- */
19237
 
19238
    parPkg_id   NUMBER;
19239
    parPv_id    NUMBER;
19240
    cloneFrom_pv_id NUMBER;
19241
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19242
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19243
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19244
 
19245
    CURSOR packages_cur IS
19246
        SELECT pkg_id FROM PACKAGES
19247
        WHERE pkg_name = SSpkg_name;
19248
    packages_rec packages_cur%ROWTYPE;
19249
 
19250
    CURSOR package_versions_cur IS
19251
        SELECT pv_id FROM PACKAGE_VERSIONS
19252
        WHERE pkg_id = parPkg_id
19253
        AND pkg_version = SSpkg_version;
19254
    package_versions_rec package_versions_cur%ROWTYPE;
19255
 
19256
    CURSOR clone_package_versions_cur IS
19257
        SELECT MAX(pv_id) AS pv_id
19258
          FROM PACKAGE_VERSIONS
19259
         WHERE pkg_id = parPkg_id
19260
           AND NVL(v_ext,'LINK_A_NULL') = NVL(SSV_EXT,'LINK_A_NULL');
19261
    clone_package_versions_rec clone_package_versions_cur%ROWTYPE;
19262
 
19263
BEGIN
19264
    /* -------------------------------------------- */
19265
    /* Find if pkg_name exists and seed if required */
19266
    /* -------------------------------------------- */
19267
    OPEN packages_cur;
19268
    FETCH packages_cur INTO packages_rec;
19269
 
19270
    IF packages_cur%NOTFOUND
19271
    THEN
19272
        /* INSERT into packages table */
19273
        SELECT SEQ_PKG_ID.NEXTVAL INTO parPkg_id FROM DUAL;
19274
        INSERT INTO PACKAGES ( pkg_id, pkg_name ) VALUES ( parPkg_id, SSpkg_name );
19275
 
19276
    ELSE
19277
        parPkg_id := packages_rec.pkg_id;
19278
 
19279
    END IF;
19280
 
19281
    CLOSE packages_cur;
19282
 
19283
 
19284
 
19285
    /* ---------------------------------------------------- */
19286
    /* Find if package_version exists and seed if required  */
19287
    /* ---------------------------------------------------- */
19288
    OPEN package_versions_cur;
19289
    FETCH package_versions_cur INTO package_versions_rec;
19290
 
19291
    IF package_versions_cur%NOTFOUND
19292
    THEN
19293
        SELECT SEQ_PV_ID.NEXTVAL INTO parPv_id FROM DUAL;
19294
 
19295
        /* LOG ACTION */
19296
        Log_Action ( parPv_id, 'new_version', NNuser_id,
19297
        			 'New package version: '|| SSpkg_version );
19298
 
19299
        Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19300
 
19301
        /* Find similar pkg_name + ext to clone from */
19302
        OPEN clone_package_versions_cur;
19303
        FETCH clone_package_versions_cur INTO clone_package_versions_rec;
19304
 
19305
 
19306
        IF NOT clone_package_versions_rec.pv_id IS NULL
19307
        THEN
19308
            /* CLONE details from similar version  OR  from nCloneFromPvId */
19309
			IF ( NOT nCloneFromPvId IS NULL) THEN
19310
            	cloneFrom_pv_id := nCloneFromPvId;
19311
			ELSE
19312
				cloneFrom_pv_id := clone_package_versions_rec.pv_id;
19313
			END IF;
19314
 
19315
            -- Clone Package Version Details --
19316
            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,
19317
                                           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  )
19318
                SELECT parPv_id         AS pv_id,
19319
                       parPkg_id        AS pkg_id,
19320
                       SSpkg_version    AS pkg_version,
19321
                       'N'              AS dlocked,
19322
                       Ora_Sysdate      AS created_stamp,
19323
                       NNuser_id        AS creator_id,
19324
                       Ora_Sysdatetime  AS modified_stamp,
19325
                       NNuser_id        AS modifier_id,
19326
                       SSV_MM           AS V_MM,
19327
                       SSV_NMM          AS V_NMM,
19328
                       SSV_EXT          AS V_EXT,
19329
                       pv.src_path,
19330
                       pv.pv_description,
19331
                       pv.PV_OVERVIEW,
19332
                       cloneFrom_pv_id 	AS LAST_PV_ID,
19333
                       pv.owner_id,
19334
					   pv.BUILD_TYPE,
19335
					   pv.IS_BUILD_ENV_REQUIRED,
19336
					   pv.BS_ID,
19337
					   pv.is_autobuildable,
19338
					   pv.IS_DEPLOYABLE, 
19339
					   pv.ripple_field
19340
                  FROM PACKAGE_VERSIONS pv
19341
                 WHERE pv.pv_id = cloneFrom_pv_id;
19342
 
19343
            Basic_Clone ( cloneFrom_pv_id, parPv_id, NULL, NNuser_id, parPkg_id, 0 );
19344
 
19345
        ELSE
19346
            /* BRAND NEW version + ext */
19347
            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 )
19348
        	VALUES (
19349
                    parPv_id,
19350
                    parPkg_id,
19351
                    SSpkg_version,
19352
                    'N',
19353
                    Ora_Sysdate,
19354
                    NNuser_id,
19355
                    Ora_Sysdatetime,
19356
                    NNuser_id,
19357
                    SSV_MM,
19358
                    SSV_NMM,
19359
                    SSV_EXT,
19360
                    NNuser_id,
19361
                    parPv_id,
19362
					'M',
19363
					'b'
19364
                   );
19365
 
19366
        END IF;
19367
 
19368
        CLOSE clone_package_versions_cur;
19369
        retPV_ID := parPv_id;
19370
 
19371
    ELSE
19372
        retPV_ID := package_versions_rec.pv_id;
19373
 
19374
    END IF;
19375
 
19376
    CLOSE package_versions_cur;
19377
 
19378
 
19379
 
19380
 
19381
END Seed_Package_Names_Versions;
1374 dpurdie 19382
/
19383
--------------------------------------------------------
19384
--  DDL for Procedure RENAME_PACKAGE_VERSION
19385
--------------------------------------------------------
1373 dpurdie 19386
 
19387
  CREATE OR REPLACE PROCEDURE "RENAME_PACKAGE_VERSION" ( NNpv_id IN NUMBER,
19388
                                                     SSpkg_version IN PACKAGE_VERSIONS.pkg_version%TYPE,
19389
													 cBuildType IN CHAR,
19390
                                                     NNuser_id IN NUMBER,
19391
                                                     errMessage OUT VARCHAR2 ) IS
19392
/* ---------------------------------------------------------------------------
19393
    Version: 3.2
19394
   --------------------------------------------------------------------------- */
19395
 
19396
    sPackageVersion VARCHAR2(4000);
19397
	sLabel VARCHAR2(4000) := NULL;
19398
    OldPkgVersion PACKAGE_VERSIONS.PKG_VERSION%TYPE;
19399
 
19400
    SSV_MM PACKAGE_VERSIONS.V_MM%TYPE;
19401
    SSV_NMM PACKAGE_VERSIONS.V_NMM%TYPE;
19402
    SSV_EXT PACKAGE_VERSIONS.V_EXT%TYPE;
19403
 
19404
    CURSOR package_versions_cur IS
19405
        SELECT pv_id
19406
     	  FROM package_versions
19407
     	 WHERE pkg_id IN ( SELECT pkg_id FROM package_versions WHERE pv_id = NNpv_id )
19408
     	   AND pkg_version = SSpkg_version;
19409
    package_versions_rec package_versions_cur%ROWTYPE;
19410
 
19411
 
19412
BEGIN
19413
 
19414
    /* ---------------------------------------------------- */
19415
    /* Find if package_version exists                       */
19416
    /* ---------------------------------------------------- */
19417
 
19418
	errMessage := NULL;
19419
 
19420
 
19421
	-- Get previous version
19422
	SELECT pv.PKG_VERSION INTO OldPkgVersion
19423
      FROM PACKAGE_VERSIONS pv
19424
     WHERE pv.PV_ID = NNpv_id;
19425
 
19426
 
19427
	sPackageVersion := SSpkg_version;
19428
 
19429
 
19430
	IF OldPkgVersion != sPackageVersion THEN
19431
 
19432
	    OPEN package_versions_cur;
19433
	    FETCH package_versions_cur INTO package_versions_rec;
19434
 
19435
	    IF package_versions_cur%NOTFOUND
19436
	    THEN
19437
 
19438
			-- Split current version in parts
19439
	    	Split_Version ( SSpkg_version, SSV_MM, SSV_NMM, SSV_EXT );
19440
 
19441
 
19442
		    -- Automated built config
19443
			IF (cBuildType = 'A') THEN
19444
				sPackageVersion := '('|| NNpv_id ||')'|| SSV_EXT;	-- Make sure that version is still unique
19445
			END IF;
19446
 
19447
 
19448
	        -- Packge version not found, hence rename it.
19449
	        UPDATE package_versions
19450
	           SET pkg_version = sPackageVersion,
19451
	               v_mm = SSV_MM,
19452
	               v_nmm = SSV_NMM,
19453
	               v_ext = SSV_EXT,
19454
	               modified_stamp = ORA_SYSDATETIME,
19455
	               modifier_id = NNuser_id,
19456
				   build_type = cBuildType,
19457
				   pkg_label = NULL
19458
	         WHERE pv_id = NNpv_id;
19459
 
19460
 
19461
			IF (cBuildType = 'A') THEN
19462
				sLabel := GET_AUTOMATED_LABEL( NNpv_id );
19463
				UPDATE PACKAGE_VERSIONS pv SET
19464
					pv.PKG_LABEL = sLabel
19465
		         WHERE pv_id = NNpv_id;
19466
			END IF;
19467
 
19468
			/* LOG ACTION */
19469
	      	Log_Action ( NNpv_id, 'rename', NNuser_id, 'From '|| OldPkgVersion ||' to '|| SSpkg_version );
19470
 
19471
	    ELSE
19472
	        -- Package version exists. Cannot proceed.
19473
	        errMessage := 'enum_MSG_VERSION_EXISTS';
19474
 
19475
	    END IF;
19476
 
19477
	    CLOSE package_versions_cur;
19478
 
19479
	END IF;
19480
 
19481
 
19482
 
19483
 
19484
END Rename_Package_Version;
1374 dpurdie 19485
/
19486
--------------------------------------------------------
19487
--  DDL for Procedure PAOLO_BUILD_TREE
19488
--------------------------------------------------------
1373 dpurdie 19489
 
19490
  CREATE OR REPLACE PROCEDURE "PAOLO_BUILD_TREE" ( nRtag_id IN NUMBER ) IS
19491
 
19492
    sessionNumber NUMBER := 0;
19493
    iteration NUMBER := 1; 
19494
    rowCnt NUMBER := 0;
19495
    maxIterations 	NUMBER := 50;
19496
 
19497
BEGIN
19498
 
19499
 
19500
    INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19501
    SELECT sessionNumber, iteration, rc.PV_ID
19502
      FROM RELEASE_CONTENT rc
19503
     WHERE rc.RTAG_ID = nRtag_id;
19504
 
19505
    iteration := iteration + 1;
19506
    LOOP
19507
 
19508
        INSERT INTO TEMP_TREE_BROWSE ( SESSION_NUM, LEVEL_NUM, PV_ID )
19509
		SELECT sessionNumber,     
19510
               iteration,
19511
               dep.DPV_ID
19512
          FROM TEMP_TREE_BROWSE ttb,
19513
               PACKAGE_DEPENDENCIES dep
19514
         WHERE dep.PV_ID = ttb.PV_ID 
19515
           AND ttb.LEVEL_NUM = iteration - 1 
19516
 
19517
         MINUS  
19518
 
19519
        SELECT sessionNumber, iteration, ttb.PV_ID
19520
          FROM TEMP_TREE_BROWSE ttb;   
19521
 
19522
 
19523
 
19524
 
19525
		rowCnt := SQL%ROWCOUNT;
19526
		IF rowCnt > 0 THEN
19527
           iteration := iteration + 1;
19528
		END IF;
19529
        EXIT WHEN (rowCnt < 1) OR (iteration > maxIterations);
19530
    END LOOP; 
19531
 
19532
END PAOLO_Build_Tree;
1374 dpurdie 19533
/
19534
--------------------------------------------------------
19535
--  DDL for Procedure UPDATE_UNIT_TEST_ACCEPTANCE
19536
--------------------------------------------------------
1373 dpurdie 19537
 
19538
  CREATE OR REPLACE PROCEDURE "UPDATE_UNIT_TEST_ACCEPTANCE" ( pnTest_id IN NUMBER,
19539
														  pnPv_id IN NUMBER,
19540
					                                      sAccepted IN UNIT_TESTS.TEST_ACCEPTED%TYPE,
19541
														  sAcceptanceDate IN VARCHAR2,
19542
														  sAcceptedBy IN NUMBER,
19543
					                                      sReviewComments IN UNIT_TESTS.REVIEW_COMMENTS%TYPE,
19544
														  cUpdateAcceptedStateOnly IN CHAR
19545
					                                     ) IS
19546
/* ---------------------------------------------------------------------------
19547
    Version: 3.0.0
19548
   --------------------------------------------------------------------------- */
19549
 
19550
 
19551
 
19552
BEGIN
19553
	IF cUpdateAcceptedStateOnly = 'Y'
19554
	THEN
19555
		--- Update Accepted State Only ---
19556
		IF ( sAccepted IS NULL )
19557
		THEN
19558
			-- Clear alleptance
19559
			UPDATE UNIT_TESTS SET
19560
		           TEST_ACCEPTED = NULL,
19561
		           ACCEPTANCE_DATE = NULL,
19562
				   ACCEPTED_BY = NULL,
19563
				   REVIEW_COMMENTS = NULL
19564
		     WHERE TEST_ID = pnTest_id
19565
		       AND PV_ID = pnPv_id;
19566
 
19567
	    ELSE
19568
			UPDATE UNIT_TESTS SET
19569
		           TEST_ACCEPTED = sAccepted,
19570
		           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19571
				   ACCEPTED_BY = sAcceptedBy
19572
		     WHERE TEST_ID = pnTest_id
19573
		       AND PV_ID = pnPv_id;
19574
 
19575
		END IF;
19576
 
19577
 
19578
	ELSE
19579
		--- Update Unit Test Acceptance ---
19580
	    UPDATE UNIT_TESTS SET
19581
	           TEST_ACCEPTED = sAccepted,
19582
			   REVIEW_COMMENTS = sReviewComments,
19583
	           ACCEPTANCE_DATE = TO_DATE( sAcceptanceDate,'DD/MM/YYYY' ),
19584
			   ACCEPTED_BY = sAcceptedBy
19585
	     WHERE TEST_ID = pnTest_id
19586
	       AND PV_ID = pnPv_id;
19587
 
19588
	END IF;
19589
 
19590
END Update_Unit_Test_Acceptance;
1374 dpurdie 19591
/
19592
--------------------------------------------------------
19593
--  DDL for Procedure NEW_ADDITIONAL_NOTE
19594
--------------------------------------------------------
1373 dpurdie 19595
 
19596
  CREATE OR REPLACE PROCEDURE "NEW_ADDITIONAL_NOTE" ( pnPv_id IN NUMBER,
19597
                                                  psNote_title IN ADDITIONAL_NOTES.NOTE_TITLE%TYPE,
19598
                                                  psNote_body IN ADDITIONAL_NOTES.NOTE_BODY%TYPE,
19599
                                                  pnUser_id IN NUMBER,
19600
                                                  outErrCode OUT NUMBER
19601
                                                 ) IS
19602
/* ---------------------------------------------------------------------------
19603
    Version: 3.0.0
19604
   --------------------------------------------------------------------------- */
19605
 
19606
    newID NUMBER;
19607
 
19608
	CURSOR an_duplicate_cur IS
19609
        SELECT note_id
19610
          FROM ADDITIONAL_NOTES
19611
         WHERE pv_id = pnPv_id
19612
           AND note_title = psNote_title;
19613
    an_duplicate_rec an_duplicate_cur%ROWTYPE;
19614
 
19615
BEGIN
19616
	outErrCode := -1;		-- Set default return error code to ERROR state
19617
 
19618
	OPEN an_duplicate_cur;
19619
    FETCH an_duplicate_cur INTO an_duplicate_rec;
19620
 
19621
    IF an_duplicate_cur%NOTFOUND
19622
    THEN
19623
		/* No duplicate titles */
19624
		-- Get new ID --
19625
    	SELECT SEQ_ADDITIONAL_NOTES.NEXTVAL INTO newID FROM DUAL;
19626
 
19627
		--- Add Additional Note ---
19628
	    INSERT INTO ADDITIONAL_NOTES ( note_id, pv_id, note_title, note_body, mod_date, mod_user  )
19629
	    VALUES (  newID, pnPv_id, psNote_title, psNote_body, Ora_Sysdate, pnUser_id );
19630
		outErrCode := 0;		-- Set return to SUCCESS
19631
	END IF;
19632
 
19633
	CLOSE an_duplicate_cur;
19634
END New_Additional_Note;
1374 dpurdie 19635
/
19636
--------------------------------------------------------
19637
--  DDL for Procedure INSERT_MULTIPLE_STICKY_NOTES
19638
--------------------------------------------------------
1373 dpurdie 19639
 
19640
  CREATE OR REPLACE PROCEDURE "INSERT_MULTIPLE_STICKY_NOTES" IS
19641
 
19642
/******************************************************************************
19643
   NAME:       INSERT_MULTIPLE_STICKY_NOTES
19644
   PURPOSE:    
19645
 
19646
   REVISIONS:
19647
   Ver        Date        Author           Description
19648
   ---------  ----------  ---------------  ------------------------------------
19649
   1.0        6/12/2006          1. Created this procedure.
19650
 
19651
   NOTES:
19652
 
19653
   Automatically available Auto Replace Keywords:
19654
      Object Name:     INSERT_MULTIPLE_STICKY_NOTES
19655
      Sysdate:         6/12/2006
19656
      Date and Time:   6/12/2006, 1:53:40 PM, and 6/12/2006 1:53:40 PM
19657
      Username:         (set in TOAD Options, Procedure Editor)
19658
      Table Name:       (set in the "New PL/SQL Object" dialog)
19659
 
19660
******************************************************************************/
19661
 
19662
	CURSOR curInfo IS
19663
    SELECT PV_ID
19664
	FROM PACKAGE_BUILD_ENV
19665
	WHERE BE_ID IN (11, 12);
19666
    recInfo curInfo%ROWTYPE;
19667
 
19668
 
19669
BEGIN
19670
 
19671
	OPEN curInfo;
19672
    FETCH curInfo INTO recInfo;
19673
 
19674
	WHILE curInfo%FOUND
19675
	LOOP
19676
 
19677
		INSERT INTO NOTE_MANAGER ( NID, LAST_USER, LAST_DATE, DESCRIPTION )
19678
		VALUES( recInfo.PV_ID, 'awehalle', ORA_SYSDATETIME, '' );
19679
 
19680
		FETCH curInfo INTO recInfo;
19681
 
19682
	END LOOP;
19683
 
19684
	CLOSE curInfo;
19685
 
19686
 
19687
 
19688
 
19689
END INSERT_MULTIPLE_STICKY_NOTES;
1374 dpurdie 19690
/
19691
--------------------------------------------------------
19692
--  DDL for Procedure TOUCH_RELEASE_BULK
19693
--------------------------------------------------------
1373 dpurdie 19694
 
19695
  CREATE OR REPLACE PROCEDURE "TOUCH_RELEASE_BULK" ( nRtagIdList IN VARCHAR2 ) IS
19696
/* ---------------------------------------------------------------------------
19697
    Version: 3.0
19698
   --------------------------------------------------------------------------- */
19699
 
19700
oRTagIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19701
 
19702
BEGIN
19703
	 oRTagIdCollector := IN_LIST_NUMBER ( nRtagIdList );
19704
 
19705
	 -- Touch Release for Rebuild
19706
     UPDATE RELEASE_TAGS rt SET
19707
     	rt.REBUILD_ENV = 'Y',
19708
        rt.REBUILD_STAMP = 0
19709
      WHERE rt.RTAG_ID IN ( SELECT * FROM TABLE ( CAST ( oRTagIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19710
 
19711
 
19712
END Touch_Release_Bulk;
1374 dpurdie 19713
/
19714
--------------------------------------------------------
19715
--  DDL for Procedure UPDATE_DEPRECATION_STATE
19716
--------------------------------------------------------
1373 dpurdie 19717
 
19718
  CREATE OR REPLACE PROCEDURE "UPDATE_DEPRECATION_STATE" (nnrtag_id IN NUMBER) AS
19719
 
19720
recno NUMBER;
19721
 
19722
CURSOR deprecate_cur IS
19723
 
19724
SELECT rc.pv_id
19725
FROM release_content rc
19726
WHERE rtag_id = nnrtag_id
19727
 AND deprecated_state IN(7);
19728
 
19729
deprecate_rec deprecate_cur % rowtype;
19730
 
19731
BEGIN
19732
 
19733
  OPEN deprecate_cur;
19734
 
19735
  FETCH deprecate_cur
19736
  INTO deprecate_rec;
19737
 
19738
  WHILE deprecate_cur % FOUND
19739
  LOOP
19740
 
19741
    SELECT COUNT(*)
19742
    INTO recno
19743
    FROM package_dependencies pd,
19744
      release_content rc
19745
    WHERE pd.pv_id = deprecate_rec.pv_id
19746
     AND rc.pv_id = pd.dpv_id
19747
     AND rc.rtag_id = nnrtag_id
19748
     AND rc.deprecated_state IN(6,   7);
19749
 
19750
    IF recno = 0 THEN
19751
 
19752
      UPDATE release_content
19753
      SET pkg_id = NULL, deprecated_state = NULL
19754
      WHERE pv_id = deprecate_rec.pv_id
19755
       AND rtag_id = nnrtag_id;
19756
 
19757
    END IF;
19758
 
19759
    FETCH deprecate_cur
19760
    INTO deprecate_rec;
19761
  END LOOP;
19762
 
19763
END;
1374 dpurdie 19764
/
19765
--------------------------------------------------------
19766
--  DDL for Procedure IGNORE_DEPENDENCY_WARNINGS
19767
--------------------------------------------------------
1373 dpurdie 19768
 
19769
  CREATE OR REPLACE PROCEDURE "IGNORE_DEPENDENCY_WARNINGS" ( nRtagId IN IGNORE_WARNINGS.RTAG_ID%TYPE,
19770
                                                         nPvId IN IGNORE_WARNINGS.PV_ID%TYPE,
19771
                                                         sIgnoreIdList IN VARCHAR2,
19772
                                                         bDoPatchIgnore IN BOOLEAN DEFAULT FALSE,
19773
                                                         nUserId IN NUMBER DEFAULT NULL ) IS
19774
/* ---------------------------------------------------------------------------
19775
    Updates the ignore warnings table - this is really two functions in one.
19776
 
19777
    1) One function updates the table based on a list of dependent PV_IDs and a parent PV_ID
19778
       and is called from the RM website's SetIgnoreWarnings() function after a user changes
19779
       the ignore warnings checkboxes and submits the form.
19780
       This can (at time of writing this) only be done within releases that are not build
19781
       daemon enabled. The ignore warnings feature is a feature we would like to see the end
19782
       of in an ideal world.
19783
       The SetIgnoreWarnings() website function now calls Touch_Release so there is no need to
19784
       do so in this stored procedure, thereby making this stored procedure much more precise in
19785
       that it only updates the ignore_warnings table (action log table too although that is just
19786
       a log and doesn't affect any subsequent business rules behaviour) and it cares nothing
19787
       about website presentation layer states, etc.
19788
 
19789
    2) The other function updates the table for out of sync dependencies that have in fact
19790
       been satisfied by patches made to some other product in the release.
19791
       This seems to be a seldom used feature in current projects.
19792
       It is probably the most often taken path through this function given that it occurs when
19793
       this function is called from Rebuild_Environment, and that is called in many circumstances
19794
       from the RM website whenever the seems to be a possibility that the state of a package
19795
       in a release might have changed and therefore affects the state of other packages in
19796
       that same release.
19797
 
19798
    Parameter Usage:
19799
                        when called from    | when called from
19800
                        Rebuild_Environment | SetIgnoreWarnings()
19801
                        stored procedure.   | in the Website
19802
      --------------------------------------+----------------------------
19803
      nRtagId           RTAG_ID             | RTAG_ID
19804
      nPvId             NULL                | PV_ID
19805
      sIgnoreIdList     NULL                | list of dependent PV_ID's
19806
      bDoPatchIgnore    TRUE                | FALSE
19807
      nUserId           NULL                | current user ID
19808
   --------------------------------------------------------------------------- */
19809
 
19810
oIgnoreIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
19811
ReleaseLocation VARCHAR2(4000);
19812
ActionTypeId NUMBER;
19813
 
19814
BEGIN
19815
 
19816
   IF (NOT bDoPatchIgnore) THEN
19817
      /* Manual Ignore Warnings - this execution path is the one taken when called from SetIgnoreWarnings() in the Website
19818
      */
19819
      oIgnoreIdCollector := IN_LIST_NUMBER ( sIgnoreIdList );
19820
 
19821
 
19822
      /* Log Action */
19823
      -- Get Release Location
19824
      SELECT proj.PROJ_NAME ||' / '|| rt.RTAG_NAME INTO ReleaseLocation
19825
        FROM PROJECTS proj,
19826
             RELEASE_TAGS rt
19827
       WHERE rt.PROJ_ID = proj.PROJ_ID
19828
         AND rt.RTAG_ID = nRtagId;
19829
 
19830
      -- Get Action Type Id for IGNORE_ON
19831
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19832
        FROM ACTION_TYPE act
19833
       WHERE act.NAME = 'ignore_on';
19834
 
19835
      -- Get Ignored (Current MINUS Old)
19836
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19837
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19838
        FROM (
19839
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19840
                FROM PACKAGE_VERSIONS pv
19841
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19842
              MINUS
19843
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19844
                FROM IGNORE_WARNINGS igw
19845
               WHERE igw.RTAG_ID = nRtagId
19846
                 AND igw.PV_ID = nPvId
19847
             ) qry,
19848
             PACKAGE_VERSIONS pv,
19849
             PACKAGES pkg,
19850
             RELEASE_CONTENT rc,
19851
             PACKAGE_VERSIONS rpv
19852
       WHERE pv.PKG_ID = pkg.PKG_ID
19853
         AND rc.RTAG_ID = nRtagId
19854
         AND rc.PV_ID = rpv.PV_ID
19855
         AND rpv.PKG_ID = pv.PKG_ID
19856
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19857
         AND qry.DPV_ID = pv.PV_ID;
19858
 
19859
 
19860
      -- Get Action Type Id for IGNORE_OFF
19861
      SELECT act.ACTTYPE_ID INTO ActionTypeId
19862
        FROM ACTION_TYPE act
19863
       WHERE act.NAME = 'ignore_off';
19864
 
19865
      -- Get UnIgnored (Old MINUS Current)
19866
      INSERT INTO ACTION_LOG ( USER_ID, ACTION_DATETIME, PV_ID, DESCRIPTION, ACTTYPE_ID )
19867
      SELECT nUserId, ORA_SYSDATETIME, nPvId, pkg.PKG_NAME ||' '|| rpv.PKG_VERSION ||' at '|| ReleaseLocation, ActionTypeId
19868
        FROM (
19869
              SELECT igw.RTAG_ID, igw.PV_ID, igw.DPV_ID
19870
                FROM IGNORE_WARNINGS igw
19871
               WHERE igw.RTAG_ID = nRtagId
19872
                 AND igw.PV_ID = nPvId
19873
              MINUS
19874
              SELECT TO_NUMBER(nRtagId) AS RTAG_ID, TO_NUMBER(nPvId), pv.PV_ID AS DPV_ID
19875
                FROM PACKAGE_VERSIONS pv
19876
               WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) )
19877
             ) qry,
19878
             PACKAGE_VERSIONS pv,
19879
             PACKAGES pkg,
19880
             RELEASE_CONTENT rc,
19881
             PACKAGE_VERSIONS rpv
19882
       WHERE pv.PKG_ID = pkg.PKG_ID
19883
         AND rc.RTAG_ID = nRtagId
19884
         AND rc.PV_ID = rpv.PV_ID
19885
         AND rpv.PKG_ID = pv.PKG_ID
19886
         AND NVL( rpv.V_EXT, 'LINK_A_NULL' ) = NVL( pv.V_EXT, 'LINK_A_NULL' )
19887
         AND qry.DPV_ID = pv.PV_ID;
19888
 
19889
 
19890
      -- Delete Current Ignore Warnings
19891
      DELETE
19892
        FROM IGNORE_WARNINGS igw
19893
       WHERE igw.RTAG_ID = nRtagId
19894
         AND igw.PV_ID = nPvId
19895
         AND igw.IS_PATCH_IGNORE IS NULL;
19896
 
19897
 
19898
      IF (oIgnoreIdCollector.COUNT > 0) THEN
19899
         -- Insert Ignore Warnings
19900
         INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID )
19901
         SELECT nRtagId,
19902
                nPvId,
19903
                pv.PV_ID AS DPV_ID
19904
           FROM PACKAGE_VERSIONS pv
19905
          WHERE pv.PV_ID IN ( SELECT * FROM TABLE ( CAST ( oIgnoreIdCollector AS RELMGR_NUMBER_TAB_t ) ) );
19906
      END IF;
19907
 
19908
   ELSE
19909
      /* Patch Ignore Warnings - this execution path is the one taken when called from the Rebuild_Environment stored procedure */
19910
 
19911
      -- Delete Current Patch Ignore Warnings
19912
      DELETE
19913
        FROM IGNORE_WARNINGS igw
19914
       WHERE igw.RTAG_ID = nRtagId
19915
         AND igw.IS_PATCH_IGNORE = 'Y';
19916
 
19917
 
19918
      -- Delete Manual Ignores that need to be Patch Ignores
19919
      DELETE
19920
        FROM IGNORE_WARNINGS igw
19921
       WHERE ( RTAG_ID, PV_ID, DPV_ID ) IN
19922
             (
19923
              SELECT DISTINCT
19924
                     nRtagId,
19925
                     err.PV_ID,
19926
                     err.ERR_DPV AS DPV_ID
19927
               FROM  (
19928
                      /* Full Release Contents used for reference*/
19929
                      SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
19930
                        FROM release_content rel, package_versions rpv
19931
                       WHERE rel.pv_id = rpv.pv_id
19932
                         AND rtag_id = nRtagId
19933
                     ) frc,
19934
                     (
19935
                      /* DPV_IDs not fount in release*/
19936
                      SELECT dep.pv_id, dep.dpv_id AS err_dpv
19937
                        FROM package_dependencies dep
19938
                       WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19939
                         AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19940
                     ) err,
19941
                     (
19942
                      SELECT DISTINCT pp.PV_ID, dep.DPV_ID
19943
                        FROM PACKAGE_PATCHES pp,
19944
                             PACKAGE_DEPENDENCIES dep,
19945
                             RELEASE_CONTENT rc
19946
                       WHERE rc.RTAG_ID = nRtagId
19947
                         AND rc.PV_ID = pp.PV_ID
19948
                         AND dep.PV_ID = pp.PATCH_ID
19949
                     ) pp,
19950
                     package_versions errpkg,
19951
                     package_versions errpv
19952
               WHERE err.err_dpv = errpv.pv_id
19953
                 AND errpv.pkg_id = frc.pkg_id(+)
19954
                 AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
19955
                 AND err.pv_id = errpkg.pv_id
19956
                 AND err.PV_ID = pp.PV_ID
19957
                 AND frc.PV_ID = pp.DPV_ID
19958
             );
19959
 
19960
      /*
19961
      ---------------------------------------------------
19962
      --  Make sure that select statement above and below are same
19963
      ---------------------------------------------------
19964
      */
19965
 
19966
      -- Insert Patch Ignores
19967
      INSERT INTO IGNORE_WARNINGS igw ( RTAG_ID, PV_ID, DPV_ID, IS_PATCH_IGNORE )
19968
      SELECT DISTINCT
19969
             nRtagId,
19970
             err.PV_ID,
19971
             err.ERR_DPV AS DPV_ID,
19972
             'Y'
19973
        FROM (
19974
              /* Full Release Contents used for reference*/
19975
              SELECT rpv.PV_ID, rpv.pkg_id, NVL(rpv.v_ext, '|LINK_A_NULL|') AS v_ext
19976
                FROM release_content rel, package_versions rpv
19977
               WHERE rel.pv_id = rpv.pv_id
19978
                 AND rtag_id = nRtagId
19979
             ) frc,
19980
             (
19981
               /* DPV_IDs not fount in release*/
19982
               SELECT dep.pv_id, dep.dpv_id AS err_dpv
19983
                 FROM package_dependencies dep
19984
                WHERE dep.pv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19985
                  AND NOT dep.dpv_id IN ( SELECT pv_id FROM release_content WHERE rtag_id = nRtagId )
19986
             ) err,
19987
             (
19988
              SELECT DISTINCT pp.PV_ID, dep.DPV_ID
19989
                FROM PACKAGE_PATCHES pp,
19990
                     PACKAGE_DEPENDENCIES dep,
19991
                     RELEASE_CONTENT rc
19992
               WHERE rc.RTAG_ID = nRtagId
19993
                 AND rc.PV_ID = pp.PV_ID
19994
                 AND dep.PV_ID = pp.PATCH_ID
19995
             ) pp,
19996
             package_versions errpkg,
19997
             package_versions errpv
19998
       WHERE err.err_dpv = errpv.pv_id
19999
         AND errpv.pkg_id = frc.pkg_id(+)
20000
         AND NVL(errpv.v_ext, '|LINK_A_NULL|') = frc.v_ext(+)
20001
         AND err.pv_id = errpkg.pv_id
20002
         AND err.PV_ID = pp.PV_ID
20003
         AND frc.PV_ID = pp.DPV_ID;
20004
 
20005
    END IF;
20006
 
20007
END Ignore_Dependency_Warnings;
1374 dpurdie 20008
/
20009
--------------------------------------------------------
20010
--  DDL for Procedure UNDEPRECATE_PACKAGE
20011
--------------------------------------------------------
1373 dpurdie 20012
 
20013
  CREATE OR REPLACE PROCEDURE "UNDEPRECATE_PACKAGE" (nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20014
	   	  		  								 nRtagId IN DEPRECATED_PACKAGES.RTAG_ID%TYPE,
20015
	   	  		  							   	 nPkgId IN DEPRECATED_PACKAGES.PKG_ID%TYPE,
20016
											   	 nUserId IN NUMBER) IS
20017
 
20018
ext VARCHAR2(50);
20019
PvIdList VARCHAR2(32767);
20020
nIdCollector RELMGR_NUMBER_TAB_t := RELMGR_NUMBER_TAB_t();
20021
PvId NUMBER;
20022
sComments VARCHAR2(32767);
20023
 
20024
BEGIN
20025
 
20026
 
20027
 
20028
	--Extract the package extension
20029
	SELECT V_EXT into ext 
20030
	FROM PACKAGE_VERSIONS 
20031
	WHERE PV_ID = nPvId;
20032
 
20033
	--SELECT COMMENTS into sComments 
20034
	--FROM DEPRECATED_PACKAGES
20035
	--WHERE RTAG_ID = nRtagId
20036
	--AND V_EXT = ext
20037
	--AND PKG_ID = nPkgId;
20038
 
20039
	--SELECT PV_ID into PvIdList FROM
20040
	--RELEASE_CONTENT WHERE RTAG_ID = nRtagId
20041
	--AND PKG_STATE = 6
20042
	--AND PV_ID NOT IN nPvId;
20043
 
20044
 
20045
	IF ext IS NOT NULL THEN
20046
       -- Undeprecate Package
20047
       DELETE FROM DEPRECATED_PACKAGES 
20048
	   WHERE RTAG_ID = nRtagId 
20049
	   AND PKG_ID = nPkgId
20050
	   AND V_EXT = ext;	
20051
 
20052
		UPDATE RELEASE_CONTENT 
20053
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20054
		WHERE RTAG_ID = nRtagId
20055
		AND PV_ID IN (SELECT PV.PV_ID 
20056
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20057
					  WHERE PKG.PKG_ID = PV.PKG_ID
20058
					  AND PKG.PKG_ID = nPkgId
20059
					  AND PV.V_EXT = ext
20060
					  UNION
20061
					  SELECT DISTINCT
20062
	 	 		  	 		   qry.PV_ID
20063
							        FROM (
20064
									 	  SELECT dep.*,
20065
										  LEVEL AS LEVEL_NUM
20066
										  FROM PACKAGE_DEPENDENCIES dep
20067
	 								START WITH dep.DPV_ID IN ( nPvId )
20068
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20069
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20070
	 								) qry,
20071
									PACKAGES pkg,
20072
									PACKAGE_VERSIONS pv,
20073
									RELEASE_CONTENT rc
20074
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20075
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20076
 
20077
					 );	 
20078
 
20079
	ELSE
20080
       -- Undeprecate Package
20081
       DELETE FROM DEPRECATED_PACKAGES 
20082
	   WHERE RTAG_ID = nRtagId 
20083
	   AND PKG_ID = nPkgId
20084
	   AND V_EXT IS NULL;	
20085
 
20086
		UPDATE RELEASE_CONTENT 
20087
		SET PKG_ID = NULL, DEPRECATED_STATE = NULL
20088
		WHERE RTAG_ID = nRtagId
20089
		AND PV_ID IN (SELECT PV.PV_ID 
20090
				  	  FROM PACKAGE_VERSIONS PV, PACKAGES PKG
20091
					  WHERE PKG.PKG_ID = PV.PKG_ID
20092
					  AND PKG.PKG_ID = nPkgId
20093
					  AND PV.V_EXT IS NULL
20094
					  UNION
20095
					  SELECT DISTINCT
20096
	 	 		  	 		   qry.PV_ID
20097
							        FROM (
20098
									 	  SELECT dep.*,
20099
										  LEVEL AS LEVEL_NUM
20100
										  FROM PACKAGE_DEPENDENCIES dep
20101
	 								START WITH dep.DPV_ID IN ( nPvId )
20102
									--AND dep.DPV_ID NOT IN ( SELECT PV_ID FROM RELEASE_CONTENT WHERE RTAG_ID = nRtagId AND PKG_STATE = 6 )
20103
									CONNECT BY PRIOR dep.PV_ID = dep.DPV_ID
20104
	 								) qry,
20105
									PACKAGES pkg,
20106
									PACKAGE_VERSIONS pv,
20107
									RELEASE_CONTENT rc
20108
							 	 WHERE qry.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID
20109
								 AND rc.RTAG_ID = nRtagId AND rc.PV_ID = qry.PV_ID
20110
 
20111
					 );	 	   
20112
 
20113
	END IF;
20114
 
20115
	--IF PvIdList IS NOT NULL THEN
20116
 
20117
	 --  nIdCollector := IN_LIST_NUMBER ( PvIdList );
20118
 
20119
	 --  FOR i IN 1..nIdCollector.COUNT
20120
	 --  LOOP
20121
	--	   PvId := nIdCollector(i);
20122
 
20123
 
20124
 
20125
	--		Deprecate_Package (nPvId, nRtagId, nPkgId, sComments, nUserId );
20126
	--		END LOOP;
20127
	--END IF;
20128
 
20129
	Rebuild_environment(nRtagId);			 
20130
 
20131
 
20132
 
20133
END Undeprecate_Package;
1374 dpurdie 20134
/
20135
--------------------------------------------------------
20136
--  DDL for Procedure REMOVE_PACKAGE_INTEREST
20137
--------------------------------------------------------
1373 dpurdie 20138
 
20139
  CREATE OR REPLACE PROCEDURE "REMOVE_PACKAGE_INTEREST" (nProjId IN PROJECTS.PROJ_ID%TYPE,
20140
	   	  		  								  	nPkgId IN PACKAGES.PKG_ID%TYPE,
20141
												  	nUserId IN NUMBER
20142
	   	  		  									) IS
20143
 
20144
/******************************************************************************
20145
   NAME:       REMOVE_PACKAGE_INTEREST
20146
   PURPOSE:    To remove interest in a given package per project
20147
 
20148
   REVISIONS:
20149
   Ver        Date        Author           Description
20150
   ---------  ----------  ---------------  ------------------------------------
20151
   1.0        12/05/2006  Rupesh Solanki      1. Created this procedure.
20152
 
20153
   NOTES:
20154
 
20155
   Automatically available Auto Replace Keywords:
20156
      Object Name:     REMOVE_PACKAGE_INTEREST
20157
      Sysdate:         12/05/2006
20158
      Date and Time:   12/05/2006, 11:28:50 AM, and 12/05/2006 11:28:50 AM
20159
      Username:         (set in TOAD Options, Procedure Editor)
20160
      Table Name:       (set in the "New PL/SQL Object" dialog)
20161
 
20162
******************************************************************************/
20163
BEGIN
20164
 
20165
	 --Delete from PACKAGE_INTEREST
20166
	 DELETE FROM PACKAGE_INTEREST
20167
	 WHERE PROJ_ID = nProjId
20168
	 AND PKG_ID = nPkgId
20169
	 AND USER_ID = nUserId;
20170
 
20171
END REMOVE_PACKAGE_INTEREST;
1374 dpurdie 20172
/
20173
--------------------------------------------------------
20174
--  DDL for Procedure RELEASE_MANAGER_MAILOUT
20175
--------------------------------------------------------
1373 dpurdie 20176
 
20177
  CREATE OR REPLACE PROCEDURE "RELEASE_MANAGER_MAILOUT" (
20178
  sender      IN VARCHAR2,
20179
  recipient   IN VARCHAR2,
20180
  ccrecipient IN VARCHAR2,
20181
  subject     IN VARCHAR2,
20182
  message     IN VARCHAR2
20183
  ) IS
20184
 
20185
  crlf VARCHAR2(2):= UTL_TCP.CRLF;
20186
  connection utl_smtp.connection;
20187
  mailhost VARCHAR2(30) := 'aupera03.aupera.erggroup.com';
20188
  header VARCHAR2(1000);
20189
 
20190
BEGIN
20191
 
20192
  --
20193
  -- Start the connection.
20194
  --
20195
  connection := utl_smtp.open_connection(mailhost,25);
20196
 
20197
  header:= 'Date: '||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
20198
     'From: '||sender||''||crlf||
20199
  'Subject: '||subject||crlf||
20200
       'To: '||recipient||crlf||
20201
       'CC: '||ccrecipient;
20202
 
20203
  --
20204
  -- Handshake with the SMTP server
20205
  --
20206
  utl_smtp.helo(connection, mailhost);
20207
  utl_smtp.mail(connection, sender);
20208
  utl_smtp.rcpt(connection, recipient);
20209
  utl_smtp.rcpt(connection, ccrecipient);
20210
  utl_smtp.open_data(connection);
20211
  --
20212
  -- Write the header
20213
  --
20214
  utl_smtp.write_data(connection, header);
20215
  --
20216
  -- The crlf is required to distinguish that what comes next is not simply part of the header..
20217
  --
20218
  utl_smtp.write_data(connection, crlf ||message);
20219
  utl_smtp.close_data(connection);
20220
  utl_smtp.quit(connection);
20221
 
20222
EXCEPTION
20223
  WHEN UTL_SMTP.INVALID_OPERATION THEN
20224
    dbms_output.put_line(' Invalid Operation in SMTP transaction.');
20225
  WHEN UTL_SMTP.TRANSIENT_ERROR THEN
20226
    dbms_output.put_line(' Temporary problems with sending email - try again later.');
20227
  WHEN UTL_SMTP.PERMANENT_ERROR THEN
20228
    dbms_output.put_line(' Errors in code for SMTP transaction.');
20229
 
20230
END RELEASE_MANAGER_MAILOUT;
1374 dpurdie 20231
/
20232
--------------------------------------------------------
20233
--  DDL for Procedure SET_PACKAGE_BUILD_ENV
20234
--------------------------------------------------------
1373 dpurdie 20235
 
20236
  CREATE OR REPLACE PROCEDURE "SET_PACKAGE_BUILD_ENV" ( nPvId IN PACKAGE_BUILD_ENV.PV_ID%TYPE,
20237
	   	  		  								  	sBuildEnvIdList IN VARCHAR2 ) IS
20238
/* ---------------------------------------------------------------------------
20239
    Last Modified: Rupesh Solanki
20240
	Version: 3.0.1
20241
   --------------------------------------------------------------------------- */
20242
 
20243
 
20244
BEGIN
20245
 
20246
   -- Delete Current Build Env settings
20247
   DELETE FROM PACKAGE_BUILD_ENV
20248
   WHERE pv_id = nPvId;
20249
 
20250
   -- Delet Current Package Build Info Settings
20251
   DELETE FROM PACKAGE_BUILD_INFO
20252
   WHERE pv_id = nPvId;
20253
 
20254
   -- Reset flag to N
20255
   UPDATE PACKAGE_VERSIONS SET
20256
	   IS_BUILD_ENV_REQUIRED = 'N'
20257
   WHERE PV_ID = nPvId;
20258
 
20259
 
20260
   -- Set new Build Env
20261
   IF NOT sBuildEnvIdList IS NULL THEN
20262
   	  -- Insert into PACKAGE_BUILD_ENV
20263
      INSERT INTO PACKAGE_BUILD_ENV ( PV_ID, BE_ID )
20264
	  SELECT nPvId AS PV_ID,
20265
	  		 be.BE_ID
20266
	    FROM BUILD_ENVIRONMENTS be
20267
	   WHERE be.BE_ID IN (
20268
	   		 		  	   SELECT *
20269
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20270
	   		 		  	 );
20271
 
20272
   	  -- Insert into PACKAGE_BUILD_INFO
20273
      INSERT INTO PACKAGE_BUILD_INFO ( PV_ID, BM_ID )
20274
	  SELECT nPvId AS PV_ID,
20275
	  		 be.BM_ID
20276
	    FROM BUILD_MACHINES be
20277
	   WHERE be.BM_ID IN (
20278
	   		 		  	   SELECT *
20279
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sBuildEnvIdList ) AS RELMGR_NUMBER_TAB_t ) FROM dual )
20280
	   		 		  	 );						 
20281
 
20282
	   -- Set flag to Y
20283
	   UPDATE PACKAGE_VERSIONS SET
20284
		   IS_BUILD_ENV_REQUIRED = 'Y'
20285
	   WHERE PV_ID = nPvId;
20286
 
20287
   END IF;
20288
 
20289
 
20290
END Set_Package_Build_Env;
1374 dpurdie 20291
/
20292
--------------------------------------------------------
20293
--  DDL for Procedure SHIFT_INSTALL_ORDER
20294
--------------------------------------------------------
1373 dpurdie 20295
 
20296
  CREATE OR REPLACE PROCEDURE "SHIFT_INSTALL_ORDER" ( nPatchId IN PACKAGE_PATCHES.PATCH_ID%TYPE,
20297
												  nPvId IN PACKAGE_PATCHES.PV_ID%TYPE,
20298
                                                  nToInstallOrder IN PACKAGE_PATCHES.INSTALL_ORDER%TYPE ) IS
20299
/* ---------------------------------------------------------------------------
20300
    Version: 3.0
20301
   --------------------------------------------------------------------------- */
20302
 
20303
currInstallOrder NUMBER;
20304
FromInstallOrder NUMBER;
20305
 
20306
BEGIN
20307
 
20308
	 -- Get Current Install Order
20309
     SELECT pp.INSTALL_ORDER INTO currInstallOrder
20310
       FROM PACKAGE_PATCHES pp
20311
      WHERE pp.PV_ID = nPvId
20312
        AND pp.PATCH_ID = nPatchId;
20313
 
20314
 
20315
	 IF currInstallOrder > nToInstallOrder
20316
	 THEN
20317
 
20318
		FromInstallOrder := nToInstallOrder;
20319
 
20320
	    -- Shift others Up
20321
		UPDATE PACKAGE_PATCHES pp SET
20322
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER + 1
20323
		 WHERE pp.PV_ID = nPvId
20324
           AND pp.PATCH_ID != nPatchId
20325
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  currInstallOrder - 1;
20326
 
20327
 
20328
	 ELSIF currInstallOrder < nToInstallOrder
20329
	 THEN
20330
 
20331
		FromInstallOrder := currInstallOrder + 1;
20332
 
20333
		-- Shift others Down
20334
        UPDATE PACKAGE_PATCHES pp SET
20335
			   pp.INSTALL_ORDER = pp.INSTALL_ORDER - 1
20336
		 WHERE pp.PV_ID = nPvId
20337
           AND pp.PATCH_ID != nPatchId
20338
		   AND pp.INSTALL_ORDER BETWEEN  FromInstallOrder  AND  nToInstallOrder;
20339
 
20340
	 END IF;
20341
 
20342
 
20343
	 -- Move Patch to new install order
20344
     UPDATE PACKAGE_PATCHES pp SET
20345
		    pp.INSTALL_ORDER = nToInstallOrder
20346
	  WHERE pp.PV_ID = nPvId
20347
	    AND pp.PATCH_ID = nPatchId;
20348
 
20349
 
20350
END Shift_Install_Order;
1374 dpurdie 20351
/
20352
--------------------------------------------------------
20353
--  DDL for Procedure NEW_PACKAGE_NAME
20354
--------------------------------------------------------
1373 dpurdie 20355
 
20356
  CREATE OR REPLACE PROCEDURE "NEW_PACKAGE_NAME" ( SSpkg_name IN PACKAGES.pkg_name%TYPE,
20357
                                               retPKG_ID OUT NUMBER ) IS
20358
/* ---------------------------------------------------------------------------
20359
    Version: 3.0.0
20360
   --------------------------------------------------------------------------- */
20361
 
20362
    CURSOR packages_cur IS
20363
        SELECT pkg.pkg_id
20364
          FROM packages pkg
20365
         WHERE pkg.pkg_name = SSpkg_name;
20366
    packages_rec packages_cur%ROWTYPE;
20367
 
20368
 
20369
BEGIN
20370
 
20371
    /* ---------------------------------------------------- */
20372
    /* Find if package name exists                          */
20373
    /* ---------------------------------------------------- */
20374
 
20375
    OPEN packages_cur;
20376
    FETCH packages_cur INTO packages_rec;
20377
 
20378
    IF packages_cur%NOTFOUND
20379
    THEN
20380
        -- Create new pkg_name --
20381
        SELECT SEQ_PKG_ID.nextval INTO retPKG_ID FROM DUAL;
20382
 
20383
        INSERT INTO packages ( pkg_id, pkg_name )
20384
        VALUES ( retPKG_ID, SSpkg_name );
20385
 
20386
    ELSE
20387
        retPKG_ID := packages_rec.pkg_id;
20388
 
20389
    END IF;
20390
 
20391
 
20392
    CLOSE packages_cur;
20393
 
20394
END New_Package_Name;
1374 dpurdie 20395
/
20396
--------------------------------------------------------
20397
--  DDL for Procedure REMOVE_RUNTIME
20398
--------------------------------------------------------
1373 dpurdie 20399
 
20400
  CREATE OR REPLACE PROCEDURE "REMOVE_RUNTIME" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20401
											 nRuntimeId IN RUNTIME_DEPENDENCIES.RTD_ID%TYPE,
20402
                                             nUserId IN NUMBER ) IS
20403
/* ---------------------------------------------------------------------------
20404
    Version: 3.0
20405
   --------------------------------------------------------------------------- */
20406
 
20407
   RuntimeDependency VARCHAR2(4000);
20408
 
20409
BEGIN
20410
 
20411
	-- Get Runtime dependency
20412
    SELECT pkg.PKG_NAME ||' '|| pv.PKG_VERSION  INTO RuntimeDependency
20413
	  FROM RUNTIME_DEPENDENCIES rtd,
20414
	  	   PACKAGES pkg,
20415
	       PACKAGE_VERSIONS pv
20416
	 WHERE rtd.PV_ID = nPvId
20417
	   AND pv.PKG_ID = pkg.PKG_ID
20418
	   AND rtd.RTD_ID = pv.PV_ID
20419
	   AND rtd.RTD_ID = nRuntimeId;
20420
 
20421
 
20422
	-- Delete Document
20423
    DELETE
20424
      FROM RUNTIME_DEPENDENCIES rtd
20425
     WHERE rtd.PV_ID = nPvId
20426
       AND rtd.RTD_ID = nRuntimeId;
20427
 
20428
 
20429
    /* LOG ACTION */
20430
   	Log_Action ( nPvId, 'runtime_remove', nUserId,
20431
   			     'Runtime package: '|| RuntimeDependency );
20432
 
20433
 
20434
END Remove_Runtime;
1374 dpurdie 20435
/
20436
--------------------------------------------------------
20437
--  DDL for Procedure CHANGE_PACKAGE_STATE
20438
--------------------------------------------------------
1373 dpurdie 20439
 
20440
  CREATE OR REPLACE PROCEDURE "CHANGE_PACKAGE_STATE" ( nPvId IN PACKAGE_VERSIONS.PV_ID%TYPE,
20441
											 nRtagId IN RELEASE_TAGS.RTAG_ID%TYPE ) IS
20442
/* ---------------------------------------------------------------------------
20443
    Version: 4.0
20444
   --------------------------------------------------------------------------- */
20445
 
20446
BEGIN
20447
 
20448
    -- Unlock Package
20449
    UPDATE RELEASE_CONTENT rc SET
20450
    	rc.PKG_STATE = 0
20451
    WHERE rc.PV_ID = nPvId
20452
	AND rc.RTAG_ID = nRtagId;
20453
 
20454
    /* LOG ACTION */
20455
   /*	Log_Action ( nPvId, 'unlock_package', nUserId );*/
20456
 
20457
END Change_Package_State;
20458
/