Index: openacs-4/packages/acs-content-repository/acs-content-repository.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/acs-content-repository.info,v diff -u -r1.18 -r1.19 --- openacs-4/packages/acs-content-repository/acs-content-repository.info 30 Nov 2002 17:14:37 -0000 1.18 +++ openacs-4/packages/acs-content-repository/acs-content-repository.info 6 Jan 2003 17:07:26 -0000 1.19 @@ -7,7 +7,7 @@ t t - + oracle postgresql @@ -18,7 +18,7 @@ 2002-10-27 OpenACS - + @@ -87,6 +87,7 @@ + Index: openacs-4/packages/acs-content-repository/sql/postgresql/content-type.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/content-type.sql,v diff -u -r1.24 -r1.25 --- openacs-4/packages/acs-content-repository/sql/postgresql/content-type.sql 19 Sep 2002 02:02:08 -0000 1.24 +++ openacs-4/packages/acs-content-repository/sql/postgresql/content-type.sql 6 Jan 2003 17:07:49 -0000 1.25 @@ -174,7 +174,16 @@ -- The rule dropping might be redundant as the rule might be dropped -- when the view is dropped. - execute ''drop rule '' || v_table_name || ''_r''; + -- different syntax for dropping a rule in 7.2 and 7.3 so check which + -- version is being used (olah). + + if version() like ''%7.2%'' then + execute ''drop rule '' || v_table_name || ''_r''; + else + -- 7.3 syntax + execute ''drop rule '' || v_table_name || ''_r '' || ''on '' || v_table_name || ''i''; + end if; + execute ''drop view '' || v_table_name || ''x''; execute ''drop view '' || v_table_name || ''i''; @@ -589,7 +598,16 @@ -- drop the old rule if rule_exists(v_table_name || ''_r'', v_table_name || ''i'') then - execute ''drop rule '' || v_table_name || ''_r''; + + -- different syntax for dropping a rule in 7.2 and 7.3 so check which + -- version is being used (olah). + if version() like ''%7.2%'' then + execute ''drop rule '' || v_table_name || ''_r''; + else + -- 7.3 syntax + execute ''drop rule '' || v_table_name || ''_r '' || ''on '' || v_table_name || ''i''; + end if; + end if; -- create the new rule for inserts on the content type Index: openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-4.6-4.6.1.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-4.6-4.6.1.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-4.6-4.6.1.sql 6 Jan 2003 17:08:17 -0000 1.1 @@ -0,0 +1,188 @@ +-- Upgrade script +-- +-- @author Ola Hansson +-- @created 2002-12-30 + +-- fixes bug http://openacs.org/bugtracker/openacs/patch?patch_number=25 + +create or replace function content_type__drop_type (varchar,boolean,boolean) +returns integer as ' +declare + drop_type__content_type alias for $1; + drop_type__drop_children_p alias for $2; -- default ''f'' + drop_type__drop_table_p alias for $3; -- default ''f'' + table_exists_p boolean; + v_table_name varchar; + is_subclassed_p boolean; + child_rec record; + attr_row record; +begin + + -- first we''ll rid ourselves of any dependent child types, if any , + -- along with their own dependent grandchild types + + select + count(*) > 0 into is_subclassed_p + from + acs_object_types + where supertype = drop_type__content_type; + + -- this is weak and will probably break; + -- to remove grand child types, the process will probably + -- require some sort of querying for drop_type + -- methods within the children''s packages to make + -- certain there are no additional unanticipated + -- restraints preventing a clean drop + + if drop_type__drop_children_p and is_subclassed_p then + + for child_rec in select + object_type + from + acs_object_types + where + supertype = drop_type__content_type + LOOP + PERFORM content_type__drop_type(child_rec.object_type, ''t'', ''f''); + end LOOP; + + end if; + + -- now drop all the attributes related to this type + for attr_row in select + attribute_name + from + acs_attributes + where + object_type = drop_type__content_type + LOOP + PERFORM content_type__drop_attribute(drop_type__content_type, + attr_row.attribute_name, + ''f'' + ); + end LOOP; + + -- we''ll remove the associated table if it exists + select + table_exists(lower(table_name)) into table_exists_p + from + acs_object_types + where + object_type = drop_type__content_type; + + if table_exists_p and drop_type__drop_table_p then + select + table_name into v_table_name + from + acs_object_types + where + object_type = drop_type__content_type; + + -- drop the rule and input/output views for the type + -- being dropped. + -- FIXME: this did not exist in the oracle code and it needs to be + -- tested. Thanks to Vinod Kurup for pointing this out. + -- The rule dropping might be redundant as the rule might be dropped + -- when the view is dropped. + + -- different syntax for dropping a rule in 7.2 and 7.3 so check which + -- version is being used (olah). + + if version() like ''%7.2%'' then + execute ''drop rule '' || v_table_name || ''_r''; + else + -- 7.3 syntax + execute ''drop rule '' || v_table_name || ''_r '' || ''on '' || v_table_name || ''i''; + end if; + + execute ''drop view '' || v_table_name || ''x''; + execute ''drop view '' || v_table_name || ''i''; + + execute ''drop table '' || v_table_name; + end if; + + PERFORM acs_object_type__drop_type(drop_type__content_type, ''f''); + + return 0; +end;' language 'plpgsql'; + + +-- procedure refresh_trigger +create or replace function content_type__refresh_trigger (varchar) +returns integer as ' +declare + refresh_trigger__content_type alias for $1; + rule_text text default ''''; + v_table_name acs_object_types.table_name%TYPE; + type_rec record; +begin + + -- get the table name for the content type (determines view name) + + select table_name + into v_table_name + from acs_object_types + where object_type = refresh_trigger__content_type; + + --=================== start building rule code ======================= + + rule_text := ''create rule '' || v_table_name || ''_r as on insert to '' || + v_table_name || ''i do instead ( + update cr_dummy set val = ( + select content_revision__new( + new.title, + new.description, + now(), + new.mime_type, + new.nls_language, + case when new.text is null + then new.data + else new.text + end, + content_symlink__resolve(new.item_id), + new.revision_id, + now(), + new.creation_user, + new.creation_ip + )); + ''; + + -- add an insert statement for each subtype in the hierarchy for this type + + for type_rec in select ot2.object_type, tree_level(ot2.tree_sortkey) as level + from acs_object_types ot1, acs_object_types ot2 + where ot2.object_type <> ''acs_object'' + and ot2.object_type <> ''content_revision'' + and ot1.object_type = refresh_trigger__content_type + and ot1.tree_sortkey between ot2.tree_sortkey and tree_right(ot2.tree_sortkey) + order by level desc + LOOP + rule_text := rule_text || '' '' || content_type__trigger_insert_statement(type_rec.object_type) || '';''; + end loop; + + -- end building the rule definition code + + rule_text := rule_text || '' );''; + + --================== done building rule code ======================= + + -- drop the old rule + if rule_exists(v_table_name || ''_r'', v_table_name || ''i'') then + + -- different syntax for dropping a rule in 7.2 and 7.3 so check which + -- version is being used (olah). + if version() like ''%7.2%'' then + execute ''drop rule '' || v_table_name || ''_r''; + else + -- 7.3 syntax + execute ''drop rule '' || v_table_name || ''_r '' || ''on '' || v_table_name || ''i''; + end if; + + end if; + + -- create the new rule for inserts on the content type + execute rule_text; + + return null; + +end;' language 'plpgsql'; \ No newline at end of file