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 -N -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