Index: openacs-4/packages/acs-service-contract/acs-service-contract.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/acs-service-contract.info,v diff -u -N -r1.6 -r1.7 --- openacs-4/packages/acs-service-contract/acs-service-contract.info 3 Aug 2002 17:53:12 -0000 1.6 +++ openacs-4/packages/acs-service-contract/acs-service-contract.info 17 Aug 2002 03:59:38 -0000 1.7 @@ -7,17 +7,17 @@ t t - + oracle postgresql Kapil Thangavelu Neophytos Demetriou - 2002-05-15 + 2002-08-14 OpenACS - + Index: openacs-4/packages/acs-service-contract/sql/oracle/acs-sc-packages-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/oracle/acs-sc-packages-create.sql,v diff -u -N -r1.6 -r1.7 --- openacs-4/packages/acs-service-contract/sql/oracle/acs-sc-packages-create.sql 6 Feb 2002 21:58:55 -0000 1.6 +++ openacs-4/packages/acs-service-contract/sql/oracle/acs-sc-packages-create.sql 17 Aug 2002 03:59:38 -0000 1.7 @@ -76,7 +76,7 @@ impl_name acs_sc_impls.impl_name%TYPE ); - /* not sure if this should get folded into the impl package or not*/ + /* Next 2 functions are deprecated but left here for backwards compatability */ function new_alias ( impl_contract_name acs_sc_contracts.contract_name%TYPE, @@ -97,6 +97,26 @@ / show error +create or replace package acs_sc_impl_alias +as + function new ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE, + impl_alias acs_sc_impl_aliases.impl_alias%TYPE, + impl_pl acs_sc_impl_aliases.impl_pl%TYPE + ) return acs_sc_impl_aliases.impl_id%TYPE; + + function delete ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE + ) return acs_sc_impls.impl_id%TYPE; + +end acs_sc_impl_alias; +/ +show error + create or replace package acs_sc_binding as procedure new ( @@ -381,7 +401,7 @@ end delete; - /* not sure if this should get folded into the impl package */ + /* next 2 functions are deprecated. */ function new_alias ( impl_contract_name acs_sc_contracts.contract_name%TYPE, @@ -393,32 +413,87 @@ is v_impl_id acs_sc_impls.impl_id%TYPE; begin + -- FUNCTION DEPRECATED. USE acs_sc_impl_alias.new + dbms_output.put_line('acs_sc_impl.new_alias DEPRECATED. Use acs_sc_impl_alias.new'); + v_impl_id := acs_sc_impl_alias.new( + impl_contract_name, + impl_name, + impl_operation_name, + impl_alias, + impl_pl + ); + + return v_impl_id; + + end new_alias; + + function delete_alias ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE + ) return acs_sc_impls.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + -- FUNCTION DEPRECATED. USE acs_sc_impl_alias.delete + dbms_output.put_line('acs_sc_impl.delete_alias DEPRECATED. Use acs_sc_impl_alias.delete'); + + v_impl_id := acs_sc_impl_alias.delete( + impl_contract_name, + impl_name, + impl_operation_name + ); + + return v_impl_id; + + end delete_alias; + +end acs_sc_impl; +/ +show errors + + + +create or replace package body acs_sc_impl_alias +as + + function new ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE, + impl_alias acs_sc_impl_aliases.impl_alias%TYPE, + impl_pl acs_sc_impl_aliases.impl_pl%TYPE + ) return acs_sc_impl_aliases.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + v_impl_id := acs_sc_impl.get_id(impl_contract_name,impl_name); insert into acs_sc_impl_aliases ( impl_id, - impl_name, - impl_contract_name, - impl_operation_name, - impl_alias, - impl_pl + impl_name, + impl_contract_name, + impl_operation_name, + impl_alias, + impl_pl ) values ( v_impl_id, - impl_name, - impl_contract_name, - impl_operation_name, - impl_alias, - impl_pl + impl_name, + impl_contract_name, + impl_operation_name, + impl_alias, + impl_pl ); return v_impl_id; - end new_alias; + end new; - function delete_alias ( + function delete ( impl_contract_name acs_sc_contracts.contract_name%TYPE, - impl_name acs_sc_impls.impl_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, impl_operation_name acs_sc_operations.operation_name%TYPE ) return acs_sc_impls.impl_id%TYPE is @@ -433,14 +508,12 @@ return v_impl_id; - end delete_alias; + end delete; -end acs_sc_impl; +end acs_sc_impl_alias; / show errors - - create or replace package body acs_sc_binding as -- you can pick a pair of args, either ids or names to pass in. @@ -535,22 +608,17 @@ end delete; function exists_p ( - contract_name acs_sc_contracts.contract_name%TYPE, - impl_name acs_sc_impls.impl_name%TYPE + contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE ) return integer is - v_contract_id acs_sc_contracts.contract_id%TYPE; - v_impl_id acs_sc_impls.impl_id%TYPE; - v_exists_p integer; + v_exists_p integer; begin - v_contract_id := acs_sc_contract.get_id(contract_name); - v_impl_id := acs_sc_impl.get_id(contract_name,impl_name); - select decode(count(*),0, 0, 1) into v_exists_p - from acs_sc_bindings - where contract_id = v_contract_id - and impl_id = v_impl_id; - + from acs_sc_bindings + where contract_id = acs_sc_contract.get_id(contract_name) + and impl_id = acs_sc_impl.get_id(contract_name,impl_name); + return v_exists_p; end exists_p; Index: openacs-4/packages/acs-service-contract/sql/oracle/upgrade/upgrade-4.5-4.5.1.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/oracle/upgrade/upgrade-4.5-4.5.1.sql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-service-contract/sql/oracle/upgrade/upgrade-4.5-4.5.1.sql 17 Aug 2002 03:59:38 -0000 1.1 @@ -0,0 +1,339 @@ +-- packages/acs-service-contract/sql/oracle/upgrade/upgrade-4.5-4.5.1.sql +-- +-- @author Vinod Kurup (vinod@kurup.com) +-- @creation_date 2002-08-14 +-- +-- $Id: upgrade-4.5-4.5.1.sql,v 1.1 2002/08/17 03:59:38 vinodk Exp $ + +-- UPGRADE ISSUE 1 +-- PG version has 2 packages acs_sc_impl and acs_sc_impl_alias +-- For consistency, we're making it the same in Oracle +-- Oracle function acs_sc_impl.new_alias -> acs_sc_impl_alias.new +-- acs_sc_impl.delete_alias -> acs_sc_impl_alias.delete +-- Old functions deprecated, but still work. + +create or replace package acs_sc_impl_alias +as + function new ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE, + impl_alias acs_sc_impl_aliases.impl_alias%TYPE, + impl_pl acs_sc_impl_aliases.impl_pl%TYPE + ) return acs_sc_impl_aliases.impl_id%TYPE; + + function delete ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE + ) return acs_sc_impls.impl_id%TYPE; + +end acs_sc_impl_alias; +/ +show error + +-- now the new package bodies + +create or replace package body acs_sc_impl +as + + function new ( + impl_contract_name acs_sc_impls.impl_contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_owner_name acs_sc_impls.impl_owner_name%TYPE + ) return acs_sc_impls.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + v_impl_id := acs_object.new (object_type => 'acs_sc_implementation'); + + insert into acs_sc_impls ( + impl_id, + impl_name, + impl_owner_name, + impl_contract_name + ) values ( + v_impl_id, + impl_name, + impl_owner_name, + impl_contract_name + ); + + return v_impl_id; + end new; + + function get_id ( + impl_contract_name acs_sc_impls.impl_contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE + ) return acs_sc_impls.impl_id%TYPE + as + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + + select impl_id into v_impl_id + from acs_sc_impls + where impl_name = get_id.impl_name + and impl_contract_name = get_id.impl_contract_name; + + return v_impl_id; + + end get_id; + + + function get_name ( + impl_id acs_sc_impls.impl_id%TYPE + ) return acs_sc_impls.impl_name%TYPE + as + v_impl_name acs_sc_impls.impl_name%TYPE; + begin + + select impl_name into v_impl_name + from acs_sc_impls + where impl_id = get_name.impl_id; + + return v_impl_name; + + end get_name; + + procedure delete ( + impl_contract_name acs_sc_impls.impl_contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE + ) + as + begin + delete from acs_sc_impls + where impl_contract_name = acs_sc_impl.delete.impl_contract_name + and impl_name = acs_sc_impl.delete.impl_name; + end delete; + + + /* next 2 functions are deprecated. */ + + function new_alias ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE, + impl_alias acs_sc_impl_aliases.impl_alias%TYPE, + impl_pl acs_sc_impl_aliases.impl_pl%TYPE + ) return acs_sc_impl_aliases.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + -- FUNCTION DEPRECATED. USE acs_sc_impl_alias.new + dbms_output.put_line('acs_sc_impl.new_alias DEPRECATED. Use acs_sc_impl_alias.new'); + + v_impl_id := acs_sc_impl_alias.new( + impl_contract_name, + impl_name, + impl_operation_name, + impl_alias, + impl_pl + ); + + return v_impl_id; + + end new_alias; + + function delete_alias ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE + ) return acs_sc_impls.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + -- FUNCTION DEPRECATED. USE acs_sc_impl_alias.delete + dbms_output.put_line('acs_sc_impl.delete_alias DEPRECATED. Use acs_sc_impl_alias.delete'); + + v_impl_id := acs_sc_impl_alias.delete( + impl_contract_name, + impl_name, + impl_operation_name + ); + + return v_impl_id; + + end delete_alias; + +end acs_sc_impl; +/ +show errors + + + +create or replace package body acs_sc_impl_alias +as + + function new ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE, + impl_alias acs_sc_impl_aliases.impl_alias%TYPE, + impl_pl acs_sc_impl_aliases.impl_pl%TYPE + ) return acs_sc_impl_aliases.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + + v_impl_id := acs_sc_impl.get_id(impl_contract_name,impl_name); + + insert into acs_sc_impl_aliases ( + impl_id, + impl_name, + impl_contract_name, + impl_operation_name, + impl_alias, + impl_pl + ) values ( + v_impl_id, + impl_name, + impl_contract_name, + impl_operation_name, + impl_alias, + impl_pl + ); + + return v_impl_id; + + end new; + + function delete ( + impl_contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE, + impl_operation_name acs_sc_operations.operation_name%TYPE + ) return acs_sc_impls.impl_id%TYPE + is + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + v_impl_id := acs_sc_impl.get_id(impl_contract_name,impl_name); + + delete from acs_sc_impl_aliases + where impl_contract_name = delete_alias.impl_contract_name + and impl_name = delete_alias.impl_name + and impl_operation_name = delete_alias.impl_operation_name; + + return v_impl_id; + + end delete; + +end acs_sc_impl_alias; +/ +show errors + + +-- UPGRADE ISSUE 2 +-- acs_sc_binding.exists_p was broken on Oracle if you installed +-- tested a binding for which the implementation was installed, but the +-- contract wasn't. + +create or replace package body acs_sc_binding +as + -- you can pick a pair of args, either ids or names to pass in. + procedure new ( + contract_id acs_sc_operations.contract_id%TYPE default null, + impl_id acs_sc_bindings.impl_id%TYPE default null, + contract_name acs_sc_contracts.contract_name%TYPE default null, + impl_name acs_sc_impls.impl_name%TYPE default null + ) + is + v_contract_name acs_sc_contracts.contract_name%TYPE; + v_contract_id acs_sc_contracts.contract_id%TYPE; + v_impl_name acs_sc_impls.impl_name%TYPE; + v_impl_id acs_sc_impls.impl_id%TYPE; + v_count integer; + begin + + if impl_id is not null and contract_id is not null + then + + v_contract_name := acs_sc_contract.get_name(contract_id); + v_impl_name := acs_sc_impl.get_name(impl_id); + v_contract_id := contract_id; + v_impl_id := impl_id; + + elsif contract_name is not null and impl_name is not null + then + v_contract_id := acs_sc_contract.get_id(contract_name); + v_impl_id := acs_sc_impl.get_id(contract_name,impl_name); + v_impl_name := impl_name; + v_contract_name := contract_name; + + else + raise_application_error(-20001, 'Service Contracts:Invalid args to binding new'); + end if; + + + select count(*) into v_count + from acs_sc_operations + where contract_id = new.contract_id + and operation_name not in (select impl_operation_name + from acs_sc_impl_aliases + where impl_contract_name = v_contract_name + and impl_id = v_impl_id); + + if v_count > 0 + then + raise_application_error(-20001, 'Binding of ' || + v_contract_name || + ' to ' || + v_impl_name || + ' failed.'); + end if; + + insert into acs_sc_bindings ( + contract_id, + impl_id + ) values ( + v_contract_id, + v_impl_id + ); + + end new; + + procedure delete( + contract_id acs_sc_contracts.contract_id%TYPE default null, + contract_name acs_sc_contracts.contract_name%TYPE default null, + impl_id acs_sc_impls.impl_id%TYPE default null, + impl_name acs_sc_impls.impl_name%TYPE default null + ) + is + v_contract_id acs_sc_contracts.contract_id%TYPE; + v_impl_id acs_sc_impls.impl_id%TYPE; + begin + + if impl_id is not null and contract_id is not null + then + v_impl_id := impl_id; + v_contract_id := contract_id; + + elsif impl_name is not null and contract_name is not null + then + v_impl_id := acs_sc_impl.get_id(contract_name,impl_name); + v_contract_id := acs_sc_contract.get_id(contract_name); + else + raise_application_error(-20001, 'Service contract binding delete invalid args'); + end if; + + delete from acs_sc_bindings + where contract_id = v_contract_id + and impl_id = v_impl_id; + end delete; + + function exists_p ( + contract_name acs_sc_contracts.contract_name%TYPE, + impl_name acs_sc_impls.impl_name%TYPE + ) return integer + is + v_exists_p integer; + begin + select decode(count(*),0, 0, 1) into v_exists_p + from acs_sc_bindings + where contract_id = acs_sc_contract.get_id(contract_name) + and impl_id = acs_sc_impl.get_id(contract_name,impl_name); + + return v_exists_p; + end exists_p; + +end acs_sc_binding; +/ +show errors