Index: openacs-4/packages/acs-kernel/acs-kernel.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/acs-kernel.info,v diff -u -r1.150 -r1.151 --- openacs-4/packages/acs-kernel/acs-kernel.info 28 Jan 2019 21:44:12 -0000 1.150 +++ openacs-4/packages/acs-kernel/acs-kernel.info 8 Feb 2019 17:11:29 -0000 1.151 @@ -9,15 +9,15 @@ f t - + OpenACS Core Team Routines and data models providing the foundation for OpenACS-based Web services. 2017-08-06 OpenACS The OpenACS kernel contains the core datamodel create and drop scripts for such things as objects, groups, partiies and the supporting PL/SQL and PL/pgSQL procedures. 3 - + Index: openacs-4/packages/acs-kernel/sql/oracle/utilities-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/sql/oracle/utilities-create.sql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-kernel/sql/oracle/utilities-create.sql 7 Aug 2017 23:47:56 -0000 1.4 +++ openacs-4/packages/acs-kernel/sql/oracle/utilities-create.sql 8 Feb 2019 17:11:29 -0000 1.5 @@ -36,6 +36,42 @@ function index_exists ( name in varchar2) return boolean; + + function foreign_key_exists ( + table IN varchar2, + column IN varchar2, + reftable IN varchar2, + refcolumn IN varchar2) + return boolean; + + function unique_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean; + + function primary_key_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean; + + function not_null_exists ( + table IN varchar2, + column IN varchar2) + return boolean; + + function get_default ( + table IN varchar2, + column IN varchar2) + return LONG; + + TYPE primary_keys IS TABLE OF varchar2; + + function get_primary_keys(table IN varchar2) + return primary_keys + PIPELINED; + end util; / show errors @@ -168,6 +204,156 @@ return v_exists; END index_exists; + function foreign_key_exists ( + table IN varchar2, + column IN varchar2, + reftable IN varchar2, + refcolumn IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from user_constraints cons + left join user_cons_columns cols on cols.constraint_name = cons.constraint_name + left join user_constraints cons_r on cons_r.constraint_name = cons.r_constraint_name + left join user_cons_columns cols_r on cols_r.constraint_name = cons.r_constraint_name + where cons.constraint_type = 'R' + and cons.table_name = foreign_key_exists.table + and cols.column_name = foreign_key_exists.column + and cons_r.table_name = foreign_key_exists.reftable + and cols_r.column_name = foreign_key_exists.refcolumn; + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + end foreign_key_exists; + + function unique_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from all_constraints c + join all_cons_columns cc on (c.owner = cc.owner + and c.constraint_name = cc.constraint_name) + where c.constraint_type = 'U' + and c.table_name = unique_exists.table + and cc.column_name = unique_exists.column + and (not unique_exists.single_p or ( + select count(*) from all_cons_columns + where constraint_name = c.constraint_name) = 1); + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END unique_exists; + + function primary_key_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from all_constraints c + join all_cons_columns cc on (c.owner = cc.owner + and c.constraint_name = cc.constraint_name) + where c.constraint_type = 'P' + and c.table_name = primary_key_exists.table + and cc.column_name = primary_key_exists.column + and (not primary_key_exists.single_p or ( + select count(*) from all_cons_columns + where constraint_name = c.constraint_name + and owner = c.owner) = 1); + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END primary_key_exists; + + function not_null_exists ( + table IN varchar2, + column IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from all_tab_columns + where table_name = not_null_exists.table + and column_name = not_null_exists.column + and nullable = 'N'; + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END not_null_exists; + + function get_default ( + table in varchar2, + column in varchar2) + return long + as + v_value long; + + begin + select data_default into v_value + from all_tab_columns + where table_name = get_default.table + and column_name = get_default.column; + + return v_value; + end get_default; + + function get_primary_keys( + table in varchar2) + return primary_keys + as + v_rec primary_keys; + + begin + select cols.column_name + bulk collect into v_rec + from all_constraints cons, all_cons_columns cols + where cols.table_name = get_primary_keys.table + and cons.constraint_type = 'P' + and cons.constraint_name = cols.constraint_name + and cons.owner = cols.owner + order by cols.table_name, cols.position; + + return v_rec; + end get_primary_keys; + end util; / show errors Index: openacs-4/packages/acs-kernel/sql/oracle/upgrade/upgrade-5.10.0d11-5.10.0d12.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/sql/oracle/upgrade/upgrade-5.10.0d11-5.10.0d12.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-kernel/sql/oracle/upgrade/upgrade-5.10.0d11-5.10.0d12.sql 8 Feb 2019 17:11:29 -0000 1.1 @@ -0,0 +1,353 @@ +PROMPT starting utilities-create.sql.... +-- +-- Rebuild the utilities +-- + +create or replace package util +as + function multiple_nextval( + v_sequence_name in varchar2, + v_count in integer) + return varchar2; + + function logical_negation ( + true_or_false IN varchar2) + return varchar2; + + function table_exists ( + name in varchar2) + return boolean; + + function table_column_exists ( + t_name in varchar2, + c_name in varchar2) + return boolean; + + function view_exists ( + name in varchar2) + return boolean; + + function index_exists ( + name in varchar2) + return boolean; + + function foreign_key_exists ( + table IN varchar2, + column IN varchar2, + reftable IN varchar2, + refcolumn IN varchar2) + return boolean; + + function unique_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean; + + function primary_key_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean; + + function not_null_exists ( + table IN varchar2, + column IN varchar2) + return boolean; + + function get_default ( + table IN varchar2, + column IN varchar2) + return LONG; + + TYPE primary_keys IS TABLE OF varchar2; + + function get_primary_keys(table IN varchar2) + return primary_keys + PIPELINED; + +end util; +/ +show errors + +create or replace package body util +as + -- Retrieves v_count (not necessarily consecutive) nextval values from the + -- sequence named v_sequence_name. + function multiple_nextval( + v_sequence_name in varchar2, + v_count in integer + ) + return varchar2 + is + a_sequence_values varchar2(4000); + begin + execute immediate ' + declare + a_nextval integer; + begin + for counter in 1..:v_count loop + select ' || v_sequence_name || '.nextval into a_nextval from dual; + :a_sequence_values := :a_sequence_values || '','' || a_nextval; + end loop; + end; + ' using in v_count, in out a_sequence_values; + return substr(a_sequence_values, 2); + end; + + function logical_negation ( + true_or_false IN varchar2) + return varchar2 + as + begin + IF true_or_false is null THEN + return null; + ELSIF true_or_false = 'f' THEN + return 't'; + ELSE + return 'f'; + END IF; + END logical_negation; + + function table_exists ( + name IN varchar2) + return boolean + as + + v_count integer; + v_exists boolean; + + begin + + select decode(count(*),0,0,1) into v_count + from user_tables where table_name = upper(table_exists.name); + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + + END table_exists; + + function table_column_exists ( + t_name IN varchar2, + c_name IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + + select decode(count(*),0,0,1) into v_count from user_tab_columns + where table_name = upper(table_column_exists.t_name) + and column_name = upper(table_column_exists.c_name); + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + + END table_column_exists; + + function view_exists ( + name IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + + select decode(count(*),0,0,1) into v_count + from user_views where view_name = upper(view_exists.name); + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + + END view_exists; + + function index_exists ( + name IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from user_indexes where index_name = upper(index_exists.name); + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END index_exists; + + function foreign_key_exists ( + table IN varchar2, + column IN varchar2, + reftable IN varchar2, + refcolumn IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from user_constraints cons + left join user_cons_columns cols on cols.constraint_name = cons.constraint_name + left join user_constraints cons_r on cons_r.constraint_name = cons.r_constraint_name + left join user_cons_columns cols_r on cols_r.constraint_name = cons.r_constraint_name + where cons.constraint_type = 'R' + and cons.table_name = foreign_key_exists.table + and cols.column_name = foreign_key_exists.column + and cons_r.table_name = foreign_key_exists.reftable + and cols_r.column_name = foreign_key_exists.refcolumn; + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + end foreign_key_exists; + + function unique_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from all_constraints c + join all_cons_columns cc on (c.owner = cc.owner + and c.constraint_name = cc.constraint_name) + where c.constraint_type = 'U' + and c.table_name = unique_exists.table + and cc.column_name = unique_exists.column + and (not unique_exists.single_p or ( + select count(*) from all_cons_columns + where constraint_name = c.constraint_name) = 1); + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END unique_exists; + + function primary_key_exists ( + table IN varchar2, + column IN varchar2, + single_p IN boolean default true) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from all_constraints c + join all_cons_columns cc on (c.owner = cc.owner + and c.constraint_name = cc.constraint_name) + where c.constraint_type = 'P' + and c.table_name = primary_key_exists.table + and cc.column_name = primary_key_exists.column + and (not primary_key_exists.single_p or ( + select count(*) from all_cons_columns + where constraint_name = c.constraint_name + and owner = c.owner) = 1); + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END primary_key_exists; + + function not_null_exists ( + table IN varchar2, + column IN varchar2) + return boolean + as + v_count integer; + v_exists boolean; + + begin + select decode(count(*),0,0,1) into v_count + from all_tab_columns + where table_name = not_null_exists.table + and column_name = not_null_exists.column + and nullable = 'N'; + + if v_count = 1 then + v_exists := true; + else + v_exists := false; + end if; + + return v_exists; + END not_null_exists; + + function get_default ( + table in varchar2, + column in varchar2) + return long + as + v_value long; + + begin + select data_default into v_value + from all_tab_columns + where table_name = get_default.table + and column_name = get_default.column; + + return v_value; + end get_default; + + function get_primary_keys( + table in varchar2) + return primary_keys + as + v_rec primary_keys; + + begin + select cols.column_name + bulk collect into v_rec + from all_constraints cons, all_cons_columns cols + where cols.table_name = get_primary_keys.table + and cons.constraint_type = 'P' + and cons.constraint_name = cols.constraint_name + and cons.owner = cols.owner + order by cols.table_name, cols.position; + + return v_rec; + end get_primary_keys; + +end util; +/ +show errors