rem {{ $Header: L:\\\\model\\jin\\RCS\\jrilabel.jpb 40.5 1998/11/26 11:27:58 wstallar Exp $ rem {{ -----------------------------------------------------------------------+ rem File: $Workfile: jrpblman.sql $ rem Author: $Author: wstallar $ rem Date: $Date: 1998/11/26 11:27:58 $ rem Version: $Revision: 40.5 $ rem Status: $State: Exp $ rem Locked_by: $Locker: $ rem Project: The Oracle Repository rem Description: Generate version labels. This is string manipulation only. rem Notes: rem Notes: rem RealAuth: Patrick Lorrimer rem IncepDate: 17 Sept 1997 rem Copyright: (c) Oracle Corporation 1997. All Rights Reserved. rem Tagline: -- Repository: Managing *all* your data -+ rem --------------------------------------------------------------------------+ rem Log of Changes from Source Control System rem --------------------------------------------------------------------------+ rem $Log: jrilabel.jpb $ rem Revision 40.5 1998/11/26 11:27:58 wstallar rem Removed redundant method check_in(). rem Removed redundant parameter from first rem Added method next_check_out to generate new vlabels if current one is being rem used. rem Ammended method next() to generate labels based on root label and sequence of rem rem node along branch. rem rem Revision 40.4 1998/08/17 15:50:26 wstallar rem Ammended version label service to cope with non-standard user input VLABELs rem rem Revision 40.3 1998/07/23 10:49:13 plorrime rem see http://des2000.uk.oracle.com:8002/repos/specinfo/netdoc/version/release.htm rem Handles Repository wide policies rem rem Revision 40.2 1998/05/27 13:08:14 eharding rem Moved reference JR_* PL/SQL from ClearCase rem rem rem Rev 1.1 14 Jan 1998 18:06:50 kmchorto rem Restructuring: Checkpoint for Jon & DavidD rem rem Rev 1.0 12 Jan 1998 20:35:22 kmchorto rem Checkpoint for Schema Cutover rem rem Rev 1.5 23 Sep 1997 16:22:40 plorrime rem Disallow creation ob objects in checked in state. rem rem Rev 1.4 23 Sep 1997 15:59:38 plorrime rem Can now create with null vlabel. This is same as CO state. rem rem Rev 1.3 22 Sep 1997 14:19:24 plorrime rem Merge conflicts rem rem Rev 1.2 19 Sep 1997 17:09:02 jgitterm rem Comment changes rem rem Rev 1.1 18 Sep 1997 11:16:52 jwetherb rem Fix header to use rem instead of // rem rem Rev 1.0 17 Sep 1997 17:32:10 plorrime rem Initial revision. rem }} -----------------------------------------------------------------------+ rem rem DETAILED DOCUMENTATION FOR THIS PACKAGE IS IN THE PACKAGE HEADER FILE. prompt Package Body: jr_version_label create or replace package body jr_version_label is ----------------------------------+ -- label of first check in ----------------------------------+ function first return VARCHAR2 is vlabel varchar2(32); begin vlabel := '1.0'; -- dbms_output.put_line('jr_version_label.first='||vlabel); return vlabel; end ; ----------------------------------+ ----------------------------------+ -- jr_version_label.next() -- Get the next version label, based on the label for the first -- version on the current branch (i_root_label), and the sequence -- on the branch for this version. -- This procudes version labels in the sequence x.y,x.y+1,x.y+2,x.y+3 -- (e.g. 1.0,1.1,1.2,1.3...) -- If the root version label has no trailing number, we add a number -- to later versions. (e.g. DOG,DOG.1,DOG.2,DOG.3...) ----------------------------------+ function next (i_root_label varchar2, i_sequence number ) return VARCHAR2 is dot_pos number; dot_num number; dot_size integer; dot_str varchar2(32); left_str varchar2(32); new_label varchar2(32); begin --Find the last dot in the root label dot_pos := INSTR(i_root_label , '.' , -1 ); if dot_pos > 0 then --We found a dot in the root version label begin --Convert stuff after last dot in root label to a number dot_num := TO_NUMBER(SUBSTR(i_root_label , dot_pos + 1 )); left_str := SUBSTR(i_root_label,1,dot_pos); --Calculate number to add after dot in new version label dot_num := dot_num + (i_sequence-1); --Convert to a varchar2 dot_str := TO_CHAR(dot_num); --Calcualte size of the dot + number dot_size:= LENGTH(dot_str); --Create new version label using the number we've calculated --Trim off trailing characters if necessary, to get it to fit new_label := SUBSTR(left_str,1,(32-dot_size))||dot_str; exception when VALUE_ERROR then --Stuff after last dot wasn't a number, so we'll tack a .num after it. dot_str := '.'||to_char(i_sequence-1); dot_size:= LENGTH(dot_str); new_label := SUBSTR(i_root_label,1,(32-dot_size))||dot_str; end; else --We didn't find a dot, so just tack a .num after it. dot_str := '.'||to_char(i_sequence-1); dot_size:= LENGTH(dot_str); new_label := SUBSTR(i_root_label,1,(32-dot_size))||dot_str; end if; return new_label; end; ----------------------------------+ ----------------------------------+ function branch (i_vlabel VARCHAR2 , depth number) return VARCHAR2 is branch_str varchar2(32); str_size integer; maj_s varchar2(32); begin if (i_vlabel is null or is_invalid_label(i_vlabel)) then -- dbms_output.put_line('jr_version_label.branch=null'); return null; end if; -- dbms_output.put_line('jr_version_label.branch='||maj_s); branch_str:='.'||to_char(depth+1)||'.0'; str_size:=length(branch_str); maj_s := SUBSTR(i_vlabel,1,(32-str_size))||branch_str; return maj_s ; end branch; ----------------------------------+ ----------------------------------+ --Modify version label to indicate --first checked out version. ----------------------------------+ function check_out(i_vlabel VARCHAR2) return VARCHAR2 is use_part varchar2(32); co_str varchar2(32); co_size integer; begin co_str:='CO(1)'; co_size:=LENGTH(co_str); use_part := SUBSTR(i_vlabel,1,(32-co_size)) || co_str ; -- dbms_output.put_line('jr_version_label.check_out='||use_part); return use_part; end check_out; ----------------------------------+ ----------------------------------+ --Modify a version label for a --checked out object version in --the event that the version label --is already used. (Object version --may be checked out more than once) ----------------------------------+ function next_check_out(i_vlabel VARCHAR2) return VARCHAR2 is new_label varchar2(32); co_pos number; close_bracket number; co_number varchar2(28); begin co_pos:=INSTR(i_vlabel,'CO(',-1); if co_pos = 0 then return check_out(i_vlabel); end if; close_bracket := INSTR(i_vlabel,')',co_pos+3); co_number:=SUBSTR(i_vlabel,co_pos+3,close_bracket-(co_pos+3)); --Increase the number in bracket by one... co_number:=to_char(to_number(co_number)+1); new_label:=SUBSTR(i_vlabel,1,co_pos+2)||co_number||')'; return new_label; end; --------------------------------------------------+ -- Determine if version label is in suitable format --------------------------------------------------+ function is_invalid_label(i_vlabel in varchar2) return boolean is dot_pos number; last_num number; begin dot_pos := INSTR(i_vlabel , '.' , -1 ); if (dot_pos=0 and dot_pos = LENGTH (i_vlabel)) then -- No '.', or '.' at end, so can't be valid format... return TRUE; else --Found a '.', check that stuff following it is a number... last_num := TO_NUMBER(SUBSTR( i_vlabel , dot_pos + 1 )); return FALSE; end if; exception when VALUE_ERROR then --Stuff after dot wasn't a number, so invalid format... return TRUE; end; ----------------------------------+ ---------------- -- Use to enable or diable auto version label generation ---------------- procedure automatic_vlabel_policy (i_enable boolean) is begin if i_enable then jr_policy.set_policy('automatic_vlabel','TRUE'); else jr_policy.set_policy('automatic_vlabel','FALSE'); end if; end; ---------------- ---------------- -- Use to find out if auto version label generation is enabled ---------------- function get_automatic_vlabel_policy return boolean is val varchar2(30); begin val := jr_policy.get_policy('automatic_vlabel'); if val=null or val='FALSE' then return FALSE; end if; return TRUE; end; --OCI Readable wrapper function automatic_vlabel_policy return integer is begin if get_automatic_vlabel_policy then return 1; else return 0; end if; end; end jr_version_label; / rem rem ---------------------------------------------------------------------------+ rem }} End of file $Workfile: jrpblman.sql $ $$Header_is_done rem ---------------------------------------------------------------------------+