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 -N -r1.99 -r1.100
--- openacs-4/packages/acs-content-repository/acs-content-repository.info 6 Jul 2011 19:13:24 -0000 1.99
+++ openacs-4/packages/acs-content-repository/acs-content-repository.info 11 Jul 2011 09:38:09 -0000 1.100
@@ -7,7 +7,7 @@
t
t
-
+
OpenACS
The canonical repository for OpenACS content.
2010-06-17
@@ -20,7 +20,7 @@
GPL
3
-
+
Index: openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.8.0d1-5.8.0d2.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.8.0d1-5.8.0d2.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.8.0d1-5.8.0d2.sql 11 Jul 2011 09:38:09 -0000 1.1
@@ -0,0 +1,683 @@
+
+--- geting rid of backslashes used with the purpose of scaping
+
+-- function is_assigned
+select define_function_args ('content_keyword__is_assigned','item_id,keyword_id,recurse;none');
+--
+-- procedure content_keyword__is_assigned/3
+--
+CREATE OR REPLACE FUNCTION content_keyword__is_assigned(
+ is_assigned__item_id integer,
+ is_assigned__keyword_id integer,
+ is_assigned__recurse varchar -- default 'none'
+
+) RETURNS boolean AS $$
+DECLARE
+ v_ret boolean;
+ v_is_assigned__recurse varchar;
+BEGIN
+ if is_assigned__recurse is null then
+ v_is_assigned__recurse := 'none';
+ else
+ v_is_assigned__recurse := is_assigned__recurse;
+ end if;
+
+ -- Look for an exact match
+ if v_is_assigned__recurse = 'none' then
+ return count(*) > 0 from cr_item_keyword_map
+ where item_id = is_assigned__item_id
+ and keyword_id = is_assigned__keyword_id;
+ end if;
+
+ -- Look from specific to general
+ if v_is_assigned__recurse = 'up' then
+ return count(*) > 0
+ where exists (select 1
+ from (select keyword_id from cr_keywords c, cr_keywords c2
+ where c2.keyword_id = is_assigned__keyword_id
+ and c.tree_sortkey between c2.tree_sortkey and tree_right(c2.tree_sortkey)) t,
+ cr_item_keyword_map m
+ where t.keyword_id = m.keyword_id
+ and m.item_id = is_assigned__item_id);
+ end if;
+
+ if v_is_assigned__recurse = 'down' then
+ return count(*) > 0
+ where exists (select 1
+ from (select k2.keyword_id
+ from cr_keywords k1, cr_keywords k2
+ where k1.keyword_id = is_assigned__keyword_id
+ and k1.tree_sortkey between k2.tree_sortkey and tree_right(k2.tree_sortkey)) t,
+ cr_item_keyword_map m
+ where t.keyword_id = m.keyword_id
+ and m.item_id = is_assigned__item_id);
+
+ end if;
+
+ -- Tried none, up and down - must be an invalid parameter
+ raise EXCEPTION '-20000: The recurse parameter to content_keyword.is_assigned should be ''none'', ''up'' or ''down''';
+
+ return null;
+END;
+$$ LANGUAGE plpgsql stable;
+
+select define_function_args('content_item__generic_move','item_id,target_item_id,name');
+
+
+-- getting rid of extra end if on function
+
+--
+-- procedure content_item__generic_move/3
+--
+CREATE OR REPLACE FUNCTION content_item__generic_move(
+ move__item_id integer,
+ move__target_item_id integer,
+ move__name varchar
+) RETURNS integer AS $$
+DECLARE
+BEGIN
+
+ if move__target_item_id is null then
+ raise exception 'attempt to move item_id % to null folder_id', move__item_id;
+ end if;
+
+ if content_folder__is_folder(move__item_id) = 't' then
+
+ PERFORM content_folder__move(move__item_id, move__target_item_id);
+
+ elsif content_folder__is_folder(move__target_item_id) = 't' then
+
+ if content_folder__is_registered(move__target_item_id,
+ content_item__get_content_type(move__item_id),'f') = 't' and
+ content_folder__is_registered(move__target_item_id,
+ content_item__get_content_type(content_symlink__resolve(move__item_id)),'f') = 't'
+ then
+ end if;
+ end if;
+
+ -- update the parent_id for the item
+
+ update cr_items
+ set parent_id = move__target_item_id,
+ name = coalesce(move__name, name)
+ where item_id = move__item_id;
+
+ -- GN: the following "end if" appears to be not needed
+ -- end if;
+
+ if move__name is not null then
+ update acs_objects
+ set title = move__name
+ where object_id = move__item_id;
+ end if;
+
+ return 0;
+END;
+$$ LANGUAGE plpgsql;
+
+
+--- Removing 7.2 vs 7.3 querying
+
+select define_function_args('content_type__refresh_trigger','content_type');
+--
+-- procedure content_type__refresh_trigger/1
+--
+CREATE OR REPLACE FUNCTION content_type__refresh_trigger(
+ refresh_trigger__content_type varchar
+) RETURNS integer AS $$
+DECLARE
+ rule_text text default '';
+ function_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)
+ raise NOTICE 'refresh trigger for % ', refresh_trigger__content_type;
+
+ -- Since we allow null table name use object type if table name is null so
+ -- we still can have a view.
+ select coalesce(table_name,object_type)
+ into v_table_name
+ from acs_object_types
+ where object_type = refresh_trigger__content_type;
+
+ --=================== start building rule code =======================
+
+ function_text := function_text ||
+ 'create or replace function ' || v_table_name || '_f (p_new '|| v_table_name || 'i)
+ returns void as ''
+ declare
+ v_revision_id integer;
+ begin
+
+ select content_revision__new(
+ p_new.title,
+ p_new.description,
+ now(),
+ p_new.mime_type,
+ p_new.nls_language,
+ case when p_new.text is null
+ then p_new.data
+ else p_new.text
+ end,
+ content_symlink__resolve(p_new.item_id),
+ p_new.revision_id,
+ now(),
+ p_new.creation_user,
+ p_new.creation_ip,
+ p_new.object_package_id
+ ) into v_revision_id;
+ ';
+
+ -- 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)
+ and ot1.table_name is not null
+ order by level asc
+ LOOP
+ function_text := function_text || ' ' || content_type__trigger_insert_statement(type_rec.object_type) || ';
+ ';
+ end loop;
+
+ function_text := function_text || '
+ return;
+ end;'' language ''plpgsql'';
+ ';
+ -- end building the rule definition code
+
+ -- create the new function
+ execute function_text;
+
+ rule_text := 'create rule ' || v_table_name || '_r as on insert to ' ||
+ v_table_name || 'i do instead SELECT ' || v_table_name || '_f(new); ' ;
+ --================== done building rule code =======================
+
+ -- drop the old rule
+ if rule_exists(v_table_name || '_r', v_table_name || 'i') then
+ execute 'drop rule ' || v_table_name || '_r ' || 'on ' || v_table_name || 'i';
+ end if;
+
+ -- create the new rule for inserts on the content type
+ execute rule_text;
+
+ return null;
+
+END;
+$$ LANGUAGE plpgsql;
+
+select define_function_args('content_type__drop_type','content_type,drop_children_p;f,drop_table_p;f,drop_objects_p;f');
+--
+-- procedure content_type__drop_type/4
+--
+CREATE OR REPLACE FUNCTION content_type__drop_type(
+ drop_type__content_type varchar,
+ drop_type__drop_children_p boolean, -- default 'f'
+ drop_type__drop_table_p boolean, -- default 'f'
+ drop_type__drop_objects_p boolean -- default 'f'
+
+) RETURNS integer AS $$
+DECLARE
+ table_exists_p boolean;
+ v_table_name varchar;
+ is_subclassed_p boolean;
+ child_rec record;
+ attr_row record;
+ revision_row record;
+ item_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', drop_type__drop_table_p, drop_type__drop_objects_p);
+ 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).
+
+ execute 'drop table ' || v_table_name || ' cascade';
+
+ end if;
+
+ -- If we are dealing with a revision, delete the revision with revision__delete
+ -- This way the integrity constraint with live revision is dealt with correctly
+ if drop_type__drop_objects_p then
+ for revision_row in
+ select revision_id
+ from cr_revisions, acs_objects
+ where revision_id = object_id
+ and object_type = drop_type__content_type
+ loop
+ PERFORM content_revision__delete(revision_row.revision_id);
+ end loop;
+
+ for item_row in
+ select item_id
+ from cr_items
+ where content_type = drop_type__content_type
+ loop
+ PERFORM content_item__delete(item_row.item_id);
+ end loop;
+
+ end if;
+
+ PERFORM acs_object_type__drop_type(drop_type__content_type, drop_type__drop_objects_p);
+
+ return 0;
+END;
+$$ LANGUAGE plpgsql;
+
+
+-- geting right definition of function's arguments
+
+select define_function_args('cr_items_get_tree_sortkey','item_id');
+select define_function_args('cr_keywords_get_tree_sortkey','keyword_id');
+select define_function_args('content_extlink__new','name;null,url,label;null,description;null,parent_id,extlink_id;null,creation_date;now,creation_user;null,creation_ip;null,package_id;null');
+select define_function_args('content_extlink__delete','extlink_id');
+select define_function_args('content_extlink__is_extlink','item_id');
+select define_function_args('content_extlink__copy','extlink_id,target_folder_id,creation_user,creation_ip;null,name');
+select define_function_args('content_folder__new','name,label,description;null,parent_id;null,context_id;null,folder_id;null,creation_date;now,creation_user;null,creation_ip;null,security_inherit_p;t,package_id;null');
+select define_function_args('content_folder__del','folder_id,cascade_p;f');
+select define_function_args('content_folder__delete','folder_id,cascade_p;f');
+select define_function_args('content_folder__edit_name','folder_id,name;null,label;null,description;null');
+select define_function_args('content_folder__move','folder_id,target_folder_id,name;null');
+select define_function_args('content_folder__copy','folder_id,target_folder_id,creation_user,creation_ip;null,name;null');
+select define_function_args('content_folder__is_folder','item_id');
+select define_function_args('content_folder__is_sub_folder','folder_id,target_folder_id');
+select define_function_args('content_folder__is_empty','folder_id');
+select define_function_args('content_folder__register_content_type','folder_id,content_type,include_subtypes;f');
+select define_function_args('content_folder__unregister_content_type','folder_id,content_type,include_subtypes;f');
+select define_function_args('content_folder__is_registered','folder_id,content_type,include_subtypes;f');
+select define_function_args('content_folder__get_label','folder_id');
+select define_function_args('content_folder__get_index_page','folder_id');
+select define_function_args('content_folder__is_root','folder_id');
+select define_function_args('image__new','name,parent_id;null,item_id;null,revision_id;null,mime_type;jpeg,creation_user;null,creation_ip;null,relation_tag;null,title;null,description;null,is_live;f,publish_date;now(),path,file_size,height,width,package_id;null');
+select define_function_args('image__new_revision','item_id,revision_id,title,description,publish_date,mime_type,nls_language,creation_user,creation_ip,height,width,package_id');
+select define_function_args('image__delete','v_item_id');
+select define_function_args('content_item__get_root_folder','item_id;null');
+select define_function_args('content_item__new','name,parent_id;null,item_id;null,locale;null,creation_date;now,creation_user;null,context_id;null,creation_ip;null,item_subtype;content_item,content_type;content_revision,title;null,description;null,mime_type;text/plain,nls_language;null,text;null,data;null,relation_tag;null,is_live;f,storage_type;null,package_id;null');
+select define_function_args('content_item__is_published','item_id');
+select define_function_args('content_item__is_publishable','item_id');
+select define_function_args('content_item__is_valid_child','item_id,content_type,relation_tag');
+select define_function_args('content_item__del','item_id');
+select define_function_args('content_item__delete','item_id');
+select define_function_args('content_item__edit_name','item_id,name');
+select define_function_args('content_item__get_id','item_path,root_folder_id;null,resolve_index;f');
+select define_function_args('content_item__get_path','item_id,root_folder_id;null');
+select define_function_args('content_item__get_virtual_path','item_id,root_folder_id;-100');
+select define_function_args('content_item__write_to_file','item_id,root_path');
+select define_function_args('content_item__register_template','item_id,template_id,use_context');
+select define_function_args('content_item__unregister_template','item_id,template_id;null,use_context;null');
+select define_function_args('content_item__get_template','item_id,use_context');
+select define_function_args('content_item__get_content_type','item_id');
+select define_function_args('content_item__get_live_revision','item_id');
+select define_function_args('content_item__get_live_revision','item_id');
+select define_function_args('content_item__set_live_revision','revision_id,publish_status;ready');
+select define_function_args('content_item__set_live_revision','revision_id,publish_status;ready');
+select define_function_args('content_item__unset_live_revision','item_id');
+select define_function_args('content_item__set_release_period','item_id,start_when;null,end_when;null');
+select define_function_args('content_item__get_revision_count','item_id');
+select define_function_args('content_item__get_revision_count','item_id');
+select define_function_args('content_item__get_context','item_id');
+select define_function_args('content_item__move','item_id,target_folder_id,name');
+select define_function_args('content_item__generic_move','item_id,target_item_id,name');
+select define_function_args('content_item__copy2','item_id,target_folder_id,creation_user,creation_ip;null');
+select define_function_args('content_item__copy','item_id,target_folder_id,creation_user,creation_ip;null,name;null');
+select define_function_args('content_item__get_latest_revision','item_id');
+select define_function_args('content_item__get_best_revision','item_id');
+select define_function_args('content_item__get_title','item_id,is_live;f');
+select define_function_args('content_item__get_publish_date','item_id,is_live;f');
+select define_function_args('content_item__is_subclass','object_type,supertype');
+select define_function_args('content_item__relate','item_id,object_id,relation_tag;generic,order_n;null,relation_type;cr_item_rel');
+select define_function_args('content_item__unrelate','rel_id');
+select define_function_args('content_item__unrelate','rel_id');
+select define_function_args('content_item__is_index_page','item_id,folder_id');
+select define_function_args('content_item__is_index_page','item_id,folder_id');
+select define_function_args('content_item__get_parent_folder','item_id');
+select define_function_args ('content_keyword__get_heading','keyword_id');
+select define_function_args ('content_keyword__get_description','keyword_id');
+select define_function_args ('content_keyword__set_heading','keyword_id,heading');
+select define_function_args ('content_keyword__set_description','keyword_id,description');
+select define_function_args ('content_keyword__is_leaf','keyword_id');
+select define_function_args('content_keyword__new','heading,description;null,parent_id;null,keyword_id;null,creation_date;now,creation_user;null,creation_ip;null,object_type;content_keyword');
+select define_function_args ('content_keyword__del','keyword_id');
+select define_function_args('content_keyword__delete','keyword_id');
+select define_function_args ('content_keyword__item_assign','item_id,keyword_id,context_id;null,creation_user;null,creation_ip;null');
+select define_function_args ('content_keyword__item_unassign','item_id,keyword_id');
+select define_function_args ('content_keyword__is_assigned','item_id,keyword_id,recurse;none');
+select define_function_args ('content_keyword__get_path','keyword_id');
+select define_function_args('content_permission__inherit_permissions','parent_object_id,child_object_id,child_creator_id;null');
+select define_function_args('content_permission__has_grant_authority','object_id,holder_id,privilege');
+select define_function_args('content_permission__has_revoke_authority','object_id,holder_id,privilege,revokee_id');
+select define_function_args('content_permission__grant_permission_h','object_id,grantee_id,privilege');
+select define_function_args('content_permission__grant_permission','object_id,holder_id,privilege,recepient_id,is_recursive;f,object_type;content_item');
+select define_function_args('content_permission__revoke_permission_h','object_id,revokee_id,privilege');
+select define_function_args('content_permission__revoke_permission','object_id,holder_id,privilege,revokee_id,is_recursive;f,object_type;content_item');
+select define_function_args('content_permission__permission_p','object_id,holder_id,privilege');
+select define_function_args('content_revision__new','title,description;null,publish_date;now(),mime_type;text/plain,nls_language;null,text; ,item_id,revision_id;null,creation_date;now(),creation_user;null,creation_ip;null,content_length;null,package_id;null');
+select define_function_args('content_revision__copy_attributes','content_type,revision_id,copy_id');
+select define_function_args('content_revision__copy','revision_id,copy_id;null,target_item_id;null,creation_user;null,creation_ip;null');
+select define_function_args('content_revision__del','revision_id');
+select define_function_args('content_revision__delete','revision_id');
+select define_function_args('content_revision__get_number','revision_id');
+select define_function_args('content_revision__revision_name','revision_id');
+select define_function_args('content_revision__to_html','revision_id');
+select define_function_args('content_revision__is_live','revision_id');
+select define_function_args('content_revision__is_latest','revision_id');
+select define_function_args('content_revision__to_temporary_clob','revision_id');
+select define_function_args('content_revision__content_copy','revision_id,revision_id_dest;null');
+select define_function_args('content_revision__get_content','revision_id');
+select define_function_args('content_symlink__new','name;null,label;null,target_id,parent_id,symlink_id;null,creation_date;now,creation_user;null,creation_ip;null,package_id;null');
+select define_function_args('content_symlink__delete','symlink_id');
+select define_function_args('content_symlink__del','symlink_id');
+select define_function_args('content_symlink__is_symlink','item_id');
+select define_function_args('content_symlink__copy','symlink_id,target_folder_id,creation_user,creation_ip;null,name;null');
+select define_function_args('content_symlink__resolve','item_id');
+select define_function_args('content_symlink__resolve_content_type','item_id');
+select define_function_args('content_template__new','name,parent_id;null,template_id;null,creation_date;now,creation_user;null,creation_ip;null,text;null,is_live;f');
+select define_function_args('content_template__del','template_id');
+select define_function_args('content_template__delete','template_id');
+select define_function_args('content_template__is_template','template_id');
+select define_function_args('content_template__get_path','template_id,root_folder_id;content_template_globals.c_root_folder_id');
+select define_function_args('content_test__save_val','v_id,v_name');
+select define_function_args('content_type__create_type','content_type,supertype;content_revision,pretty_name,pretty_plural,table_name,id_column;XXX,name_method;null');
+select define_function_args('content_type__drop_type','content_type,drop_children_p;f,drop_table_p;f,drop_objects_p;f');
+select define_function_args('content_type__drop_type','content_type,drop_children_p;f,drop_table_p;f,drop_objects_p;f');
+select define_function_args('content_type__create_attribute','content_type,attribute_name,datatype,pretty_name,pretty_plural;null,sort_order;null,default_value;null,column_spec;text');
+select define_function_args('content_type__drop_attribute','content_type,attribute_name,drop_column;f');
+select define_function_args('content_type__register_template','content_type,template_id,use_context,is_default;f');
+select define_function_args('content_type__set_default_template','content_type,template_id,use_context');
+select define_function_args('content_type__get_template','content_type,use_context');
+select define_function_args('content_type__unregister_template','content_type;null,template_id,use_context;null');
+select define_function_args('content_type__trigger_insert_statement','content_type');
+select define_function_args('content_type__refresh_trigger','content_type');
+select define_function_args('content_type__refresh_view','content_type');
+select define_function_args('content_type__register_child_type','parent_type,child_type,relation_tag;generic,min_n;0,max_n;null');
+select define_function_args('content_type__register_child_type','parent_type,child_type,relation_tag;generic,min_n;0,max_n;null');
+select define_function_args('content_type__unregister_child_type','parent_type,child_type,relation_tag');
+select define_function_args('content_type__register_relation_type','content_type,target_type,relation_tag;generic,min_n;0,max_n;null');
+select define_function_args('content_type__unregister_relation_type','content_type,target_type,relation_tag;null');
+select define_function_args('content_type__register_mime_type','content_type,mime_type');
+select define_function_args('content_type__unregister_mime_type','content_type,mime_type');
+select define_function_args('content_type__is_content_type','object_type');
+select define_function_args('content_type__rotate_template','template_id,v_content_type,use_context');
+select define_function_args('table_exists','table_name');
+select define_function_args('column_exists','table_name,column_name');
+select define_function_args('trigger_exists','trigger_name,on_table');
+select define_function_args('trigger_func_exists','trigger_name');
+select define_function_args('rule_exists','rule_name,table_name');
+select define_function_args('doc__get_proc_header','proc_name,package_name');
+select define_function_args('doc__get_package_header','package_name');
+
+
+-- right return type for fuctions used in triggers and right naming
+-- vguerra - NOTE: ALTER TRIGGER could be used for renaming the triggers but it
+-- is available starting from PG 8.2 on, so for backwards compatibility
+-- we simply drop and recreate the triggers.
+
+--
+-- procedure cr_revision_del_ri_tr/0
+--
+CREATE OR REPLACE FUNCTION cr_revision_del_ri_tr(
+
+) RETURNS trigger AS $$
+DECLARE
+ dummy integer;
+ v_latest integer;
+ v_live integer;
+BEGIN
+ select 1 into dummy
+ from
+ cr_revisions
+ where
+ revision_id = old.live_revision;
+
+ if FOUND then
+ raise EXCEPTION 'Referential Integrity: live_revision still exists: %', old.live_revision;
+ end if;
+
+ select 1 into dummy
+ from
+ cr_revisions
+ where
+ revision_id = old.latest_revision;
+
+ if FOUND then
+ raise EXCEPTION 'Referential Integrity: latest_revision still exists: %', old.latest_revision;
+ end if;
+
+ return old;
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+--
+-- procedure cr_revision_ins_ri_tr/0
+--
+CREATE OR REPLACE FUNCTION cr_revision_ins_ri_tr(
+
+) RETURNS trigger AS $$
+DECLARE
+ dummy integer;
+ v_latest integer;
+ v_live integer;
+BEGIN
+ select 1 into dummy
+ from
+ cr_revisions
+ where
+ revision_id = new.live_revision;
+
+ if NOT FOUND and new.live_revision is NOT NULL then
+ raise EXCEPTION 'Referential Integrity: live_revision does not exist: %', new.live_revision;
+ end if;
+
+ select 1 into dummy
+ from
+ cr_revisions
+ where
+ revision_id = new.latest_revision;
+
+ if NOT FOUND and new.latest_revision is NOT NULL then
+ raise EXCEPTION 'Referential Integrity: latest_revision does not exist: %', new.latest_revision;
+ end if;
+
+ return new;
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+--
+-- procedure cr_revision_up_ri_tr/0
+--
+CREATE OR REPLACE FUNCTION cr_revision_up_ri_tr(
+
+) RETURNS trigger AS $$
+DECLARE
+ dummy integer;
+ v_latest integer;
+ v_live integer;
+BEGIN
+ select 1 into dummy
+ from
+ cr_revisions
+ where
+ revision_id = new.live_revision;
+
+ if NOT FOUND and new.live_revision <> old.live_revision and new.live_revision is NOT NULL then
+ raise EXCEPTION 'Referential Integrity: live_revision does not exist: %', new.live_revision;
+ end if;
+
+ select 1 into dummy
+ from
+ cr_revisions
+ where
+ revision_id = new.latest_revision;
+
+ if NOT FOUND and new.latest_revision <> old.latest_revision and new.latest_revision is NOT NULL then
+ raise EXCEPTION 'Referential Integrity: latest_revision does not exist: %', new.latest_revision;
+ end if;
+
+ return new;
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+--
+-- procedure cr_revision_del_rev_ri_tr/0
+--
+CREATE OR REPLACE FUNCTION cr_revision_del_rev_ri_tr(
+
+) RETURNS trigger AS $$
+DECLARE
+ dummy integer;
+BEGIN
+ select 1 into dummy
+ from
+ cr_items
+ where
+ item_id = old.item_id
+ and
+ live_revision = old.revision_id;
+
+ if FOUND then
+ raise EXCEPTION 'Referential Integrity: attempting to delete live_revision: %', old.revision_id;
+ end if;
+
+ select 1 into dummy
+ from
+ cr_items
+ where
+ item_id = old.item_id
+ and
+ latest_revision = old.revision_id;
+
+ if FOUND then
+ raise EXCEPTION 'Referential Integrity: attempting to delete latest_revision: %', old.revision_id;
+ end if;
+
+ return old;
+END;
+$$ LANGUAGE plpgsql;
+
+--
+-- procedure cr_cleanup_cr_files_del_tr/0
+--
+CREATE OR REPLACE FUNCTION cr_cleanup_cr_files_del_tr(
+
+) RETURNS trigger AS $$
+DECLARE
+
+BEGIN
+ insert into cr_files_to_delete
+ select r.content as path, i.storage_area_key
+ from cr_items i, cr_revisions r
+ where i.item_id = r.item_id
+ and r.revision_id = old.revision_id
+ and i.storage_type = 'file';
+
+ return old;
+END;
+$$ LANGUAGE plpgsql;
+
+create trigger cr_revision_del_ri_tr
+after delete on cr_items
+for each row execute procedure cr_revision_del_ri_tr();
+
+create trigger cr_revision_up_ri_tr
+after update on cr_items
+for each row execute procedure cr_revision_up_ri_tr();
+
+create trigger cr_revision_ins_ri_tr
+after insert on cr_items
+for each row execute procedure cr_revision_ins_ri_tr();
+
+create trigger cr_revision_del_rev_ri_tr
+after delete on cr_revisions
+for each row execute procedure cr_revision_del_rev_ri_tr();
+
+create trigger cr_cleanup_cr_files_del_tr
+before delete on cr_revisions
+for each row execute procedure cr_cleanup_cr_files_del_tr();
+
+drop trigger cr_revision_del_ri_trg on cr_items;
+drop trigger cr_revision_up_ri_trg on cr_items;
+drop trigger cr_revision_ins_ri_trg on cr_items;
+drop trigger cr_revision_del_rev_ri_trg on cr_revisions;
+drop trigger cr_cleanup_cr_files_del_trg on cr_revisions;
+
+drop function cr_revision_del_ri_trg();
+drop function cr_revision_up_ri_trg();
+drop function cr_revision_ins_ri_trg();
+drop function cr_revision_del_rev_ri_trg();
+drop function cr_cleanup_cr_files_del_trg();
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 -N -r1.123 -r1.124
--- openacs-4/packages/acs-kernel/acs-kernel.info 6 Jul 2011 19:13:24 -0000 1.123
+++ openacs-4/packages/acs-kernel/acs-kernel.info 11 Jul 2011 09:38:09 -0000 1.124
@@ -7,15 +7,15 @@
t
t
-
+
OpenACS Core Team
Routines and data models providing the foundation for OpenACS-based Web services.
2010-06-17
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/postgresql/upgrade/upgrade-5.8.0d1-5.8.0d2.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/sql/postgresql/upgrade/upgrade-5.8.0d1-5.8.0d2.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-kernel/sql/postgresql/upgrade/upgrade-5.8.0d1-5.8.0d2.sql 11 Jul 2011 09:38:09 -0000 1.1
@@ -0,0 +1,310 @@
+-- getting rid of backslashes using for escaping
+
+--
+-- procedure drop_package/1
+--
+CREATE OR REPLACE FUNCTION drop_package(
+ package_name varchar
+) RETURNS varchar AS $$
+DECLARE
+ v_rec record;
+ v_drop_cmd varchar;
+ v_pkg_name varchar;
+BEGIN
+ raise NOTICE 'DROP PACKAGE: %', package_name;
+ v_pkg_name := package_name || '__' || '%';
+
+ for v_rec in select proname
+ from pg_proc
+ where proname like v_pkg_name
+ order by proname
+ LOOP
+ raise NOTICE 'DROPPING FUNCTION: %', v_rec.proname;
+ v_drop_cmd := get_func_drop_command (v_rec.proname::varchar);
+ EXECUTE v_drop_cmd;
+ end loop;
+
+ if NOT FOUND then
+ raise NOTICE 'PACKAGE: % NOT FOUND', package_name;
+ else
+ raise NOTICE 'PACKAGE: %: DROPPED', package_name;
+ end if;
+
+ return null;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+--
+-- procedure get_func_definition/2
+--
+CREATE OR REPLACE FUNCTION get_func_definition(
+ fname varchar,
+ args oidvector
+) RETURNS text AS $$
+DECLARE
+ nargs integer default 0;
+ v_pos integer;
+ v_funcdef text default '';
+ v_args varchar;
+ v_one_arg varchar;
+ v_one_type varchar;
+ v_nargs integer;
+ v_src text;
+ v_rettype varchar;
+BEGIN
+ select proargtypes, pronargs, number_src(prosrc),
+ (select typname from pg_type where oid = p.prorettype::integer)
+ into v_args, v_nargs, v_src, v_rettype
+ from pg_proc p
+ where proname = fname::name
+ and proargtypes = args;
+
+ v_funcdef := v_funcdef || '
+create or replace function ' || fname || '(';
+
+ v_pos := position(' ' in v_args);
+
+ while nargs < v_nargs loop
+ nargs := nargs + 1;
+ if nargs = v_nargs then
+ v_one_arg := v_args;
+ v_args := '';
+ else
+ v_one_arg := substr(v_args, 1, v_pos - 1);
+ v_args := substr(v_args, v_pos + 1);
+ v_pos := position(' ' in v_args);
+ end if;
+ select case when nargs = 1
+ then typname
+ else ',' || typname
+ end into v_one_type
+ from pg_type
+ where oid = v_one_arg::integer;
+ v_funcdef := v_funcdef || v_one_type;
+ end loop;
+ v_funcdef := v_funcdef || ') returns ' || v_rettype || E' as ''\n' || v_src || ''' language ''plpgsql'';';
+
+ return v_funcdef;
+
+END;
+$$ LANGUAGE plpgsql stable strict;
+
+-- geting right definition of function's arguments
+
+select define_function_args('acs__add_user','user_id;null,object_type;user,creation_date;now(),creation_user;null,creation_ip;null,authority_id,username,email,url;null,first_names,last_name,password,salt,screen_name;null,email_verified_p;t,member_state;approved');
+select define_function_args('acs__remove_user','user_id');
+select define_function_args('acs__magic_object_id','name');
+select define_function_args('acs_log__notice','log_key,message');
+select define_function_args('acs_log__warn','log_key,message');
+select define_function_args('acs_log__error','log_key,message');
+select define_function_args('acs_log__debug','log_key,message');
+select define_function_args('acs_object_type_get_tree_sortkey','object_type');
+select define_function_args('acs_object_type__create_type','object_type,pretty_name,pretty_plural,supertype,table_name;null,id_column;null,package_name;null,abstract_p;f,type_extension_table;null,name_method;null,create_table_p;f,dynamic_p;f');
+select define_function_args('acs_object_type__drop_type','object_type,drop_children_p;f,drop_table_p;f');
+select define_function_args('acs_object_type__pretty_name','object_type');
+select define_function_args('acs_object_type__is_subtype_p','object_type_1,object_type_2');
+select define_function_args('acs_attribute__create_attribute','object_type,attribute_name,datatype,pretty_name,pretty_plural;null,table_name;null,column_name;null,default_value;null,min_n_values;1,max_n_values;1,sort_order;null,storage;type_specific,static_p;f,create_column_p;f,database_type;null,size;null,null_p;t,references;null,check_expr;null,column_spec;null');
+select define_function_args('acs_attribute__drop_attribute','object_type,attribute_name,drop_column_p;f');
+select define_function_args('acs_attribute__add_description','object_type,attribute_name,description_key,description');
+select define_function_args('acs_attribute__drop_description','object_type,attribute_name,description_key');
+select define_function_args('acs_datatype__date_output_function','attribute_name');
+select define_function_args('acs_datatype__timestamp_output_function','attribute_name');
+select define_function_args('acs_objects_get_tree_sortkey','object_id');
+select define_function_args('acs_object__initialize_attributes','initialize_attributes__object_id');
+select define_function_args('acs_object__new','object_id;null,object_type;acs_object,creation_date;now(),creation_user;null,creation_ip;null,context_id;null,security_inherit_p;t,title;null,package_id;null');
+select define_function_args('acs_object__delete','object_id');
+select define_function_args('acs_object__name','name__object_id');
+select define_function_args('acs_object__default_name','default_name__object_id');
+select define_function_args('acs_object__object_id','p_object_id');
+select define_function_args('acs_object__package_id','object_id');
+select define_function_args('acs_object__get_attribute_storage','object_id_in,attribute_name_in');
+select define_function_args('acs_object__get_attr_storage_column','v_vals');
+select define_function_args('acs_object__get_attr_storage_table','v_vals');
+select define_function_args('acs_object__get_attr_storage_sql','v_vals');
+select define_function_args('acs_object__get_attribute','object_id_in,attribute_name_in');
+select define_function_args('acs_object__set_attribute','object_id_in,attribute_name_in,value_in');
+select define_function_args('acs_object__check_context_index','check_context_index__object_id,check_context_index__ancestor_id,check_context_index__n_generations');
+select define_function_args('acs_object__check_object_ancestors','object_id,ancestor_id,n_generations');
+select define_function_args('acs_object__check_object_descendants','object_id,descendant_id,n_generations');
+select define_function_args('acs_object__check_path','check_path__object_id,check_path__ancestor_id');
+select define_function_args('acs_object__check_representation','check_representation__object_id');
+select define_function_args('acs_object__update_last_modified','update_last_modified__object_id,update_last_modified__modifying_user,update_last_modified__modifying_ip,update_last_modified__last_modified;now()');
+select define_function_args('acs_object_util__object_type_exist_p','object_type');
+select define_function_args('acs_object_util__get_object_type','object_id');
+select define_function_args('acs_object_util__type_ancestor_type_p','object_type1,object_type2');
+select define_function_args('acs_object_util__object_ancestor_type_p','object_id,object_type');
+select define_function_args('acs_object_util__object_type_p','object_id,object_type');
+select define_function_args('priv_recurse_subtree','nkey,child_priv');
+select define_function_args('acs_privilege__create_privilege','privilege,pretty_name;null,pretty_plural;null');
+select define_function_args('acs_privilege__drop_privilege','privilege');
+select define_function_args('acs_privilege__add_child','privilege,child_privilege');
+select define_function_args('acs_privilege__remove_child','privilege,child_privilege');
+select define_function_args('acs_permission__grant_permission','object_id,grantee_id,privilege');
+select define_function_args('acs_permission__revoke_permission','object_id,grantee_id,privilege');
+select define_function_args('acs_permission__permission_p','object_id,party_id,privilege');
+select define_function_args('acs_rel_type__create_role','role,pretty_name;null,pretty_plural;null');
+select define_function_args('acs_rel_type__drop_role','role');
+select define_function_args('acs_rel_type__role_pretty_name','role');
+select define_function_args('acs_rel_type__role_pretty_plural','role');
+select define_function_args('acs_rel_type__create_type','rel_type,pretty_name,pretty_plural,supertype;relationship,table_name,id_column,package_name,object_type_one,role_one;null,min_n_rels_one,max_n_rels_one,object_type_two,role_two;null,min_n_rels_two,max_n_rels_two');
+select define_function_args('acs_rel_type__drop_type','rel_type,cascade_p;f');
+select define_function_args('acs_rel__new','rel_id;null,rel_type;relationship,object_id_one,object_id_two,context_id;null,creation_user;null,creation_ip;null');
+select define_function_args('acs_rel__delete','rel_id');
+select define_function_args('apm__register_package','package_key,pretty_name,pretty_plural,package_uri,package_type,initial_install_p;f,singleton_p;f,implements_subsite_p;f,inherit_templates_p;f,spec_file_path;null,spec_file_mtime;null');
+select define_function_args('apm__update_package','package_key,pretty_name;null,pretty_plural;null,package_uri;null,package_type;null,initial_install_p;null,singleton_p;null,implements_subsite_p;f,inherit_templates_p;f,spec_file_path;null,spec_file_mtime;null');
+select define_function_args('apm__unregister_package','package_key,cascade_p;t');
+select define_function_args('apm__register_p','package_key');
+select define_function_args('apm__register_application','package_key,pretty_name,pretty_plural,package_uri,initial_install_p;f,singleton_p;f,implements_subsite_p;f,inherit_templates_p;f,spec_file_path;null,spec_file_mtime;null');
+select define_function_args('apm__unregister_application','package_key,cascade_p;f');
+select define_function_args('apm__register_service','package_key,pretty_name,pretty_plural,package_uri,initial_install_p;f,singleton_p;f,implements_subsite_p;f,inherit_templates_p;f,spec_file_path;null,spec_file_mtime;null');
+select define_function_args('apm__unregister_service','package_key,cascade_p;f');
+select define_function_args('apm__register_parameter','parameter_id;null,package_key,parameter_name,description;null,scope,datatype;string,default_value;null,section_name;null,min_n_values;1,max_n_values;1');
+select define_function_args('apm__update_parameter','parameter_id,parameter_name;null,description;null,datatype;string,default_value;null,section_name;null,min_n_values;1,max_n_values;1');
+select define_function_args('apm__parameter_p','package_key,parameter_name');
+select define_function_args('apm__unregister_parameter','parameter_id;null');
+select define_function_args('apm__id_for_name','package_key,parameter_name');
+select define_function_args('apm__get_value','package_key,parameter_name');
+select define_function_args('apm__set_value','package_key,parameter_name,attr_value');
+select define_function_args('apm_package__is_child','parent_package_key,child_package_key');
+select define_function_args('apm_package__initialize_parameters','package_id,package_key');
+select define_function_args('apm_package__new','package_id;null,instance_name;null,package_key,object_type;apm_package,creation_date;now(),creation_user;null,creation_ip;null,context_id;null');
+select define_function_args('apm_package__delete','package_id');
+select define_function_args('apm_package__initial_install_p','package_key');
+select define_function_args('apm_package__singleton_p','package_key');
+select define_function_args('apm_package__num_instances','package_key');
+select define_function_args('apm_package__name','package_id');
+select define_function_args('apm_package__highest_version','package_key');
+select define_function_args('apm_package__parent_id','parent_id__package_id');
+select define_function_args('apm_package_version__new','version_id;null,package_key,version_name;null,version_uri,summary,description_format,description,release_date,vendor,vendor_uri,auto_mount,installed_p;f,data_model_loaded_p;f');
+select define_function_args('apm_package_version__delete','version_id');
+select define_function_args('apm_package_version__enable','version_id');
+select define_function_args('apm_package_version__disable','version_id');
+select define_function_args('apm_package_version__copy','version_id,new_version_id;null,new_version_name,new_version_uri,copy_owners_p');
+select define_function_args('apm_package_version__edit','new_version_id;null,version_id,version_name;null,version_uri,summary,description_format,description,release_date,vendor,vendor_uri,auto_mount,installed_p;f,data_model_loaded_p;f');
+select define_function_args('apm_package_version__add_interface','interface_id;null,version_id,interface_uri,interface_version');
+select define_function_args('apm_package_version__remove_interface','interface_uri,interface_version,version_id');
+select define_function_args('apm_package_version__add_dependency','dependency_type,dependency_id;null,version_id,dependency_uri,dependency_version');
+select define_function_args('apm_package_version__remove_dependency','dependency_uri,dependency_version,version_id');
+select define_function_args('apm_package_version__sortable_version_name','version_name');
+select define_function_args('apm_package_version__version_name_greater','version_name_one,version_name_two');
+select define_function_args('apm_package_version__upgrade_p','path,initial_version_name,final_version_name');
+select define_function_args('apm_package_version__upgrade','version_id');
+select define_function_args('apm_package_type__create_type','package_key,pretty_name,pretty_plural,package_uri,package_type,initial_install_p,singleton_p,implements_subsite_p,inherit_templates_p,spec_file_path;null,spec_file_mtime;null');
+select define_function_args('apm_package_type__update_type','package_key,pretty_name;null,pretty_plural;null,package_uri;null,package_type;null,initial_install_p;null,singleton_p;null,implements_subsite_p;null,inherit_templates_p;null,spec_file_path;null,spec_file_mtime;null');
+select define_function_args('apm_package_type__drop_type','package_key,cascade_p;f');
+select define_function_args('apm_package_type__num_parameters','package_key');
+select define_function_args('apm_parameter_value__new','value_id;null,package_id,parameter_id,attr_value');
+select define_function_args('apm_parameter_value__delete','value_id;null');
+select define_function_args('apm_application__new','application_id;null,instance_name;null,package_key,object_type;apm_application,creation_date;now(),creation_user;null,creation_ip;null,context_id;null');
+select define_function_args('apm_application__delete','application_id');
+select define_function_args('apm_service__new','service_id;null,instance_name;null,package_key,object_type;apm_service,creation_date;now(),creation_user;null,creation_ip;null,context_id;null');
+select define_function_args('apm_service__delete','service_id');
+select define_function_args('authority__new','authority_id;null,object_type;authority,short_name,pretty_name,enabled_p;t,sort_order,auth_impl_id;null,pwd_impl_id;null,forgotten_pwd_url;null,change_pwd_url;null,register_impl_id;null,register_url;null,help_contact_text;null,creation_user;null,creation_ip;null,context_id;null');
+select define_function_args('authority__del','authority_id');
+select define_function_args('party__new','party_id;null,object_type;party,creation_date;now(),creation_user;null,creation_ip;null,email,url;null,context_id;null');
+select define_function_args('party__delete','party_id');
+select define_function_args('party__name','party_id');
+select define_function_args('party__email','party_id');
+select define_function_args('person__new','person_id;null,object_type;person,creation_date;now(),creation_user;null,creation_ip;null,email,url;null,first_names,last_name,context_id;null');
+select define_function_args('person__delete','person_id');
+select define_function_args('person__name','person_id');
+select define_function_args('person__first_names','person_id');
+select define_function_args('person__last_name','person_id');
+select define_function_args('user__new','user_id,object_type;user,creation_date;now(),creation_user,creation_ip,authority_id,username,email,url,first_names,last_name,password,salt,screen_name,email_verified_p;t,context_id');
+select define_function_args('acs_user__new','user_id;null,object_type;user,creation_date;now(),creation_user;null,creation_ip;null,authority_id,username,email,url;null,first_names,last_name,password,salt,screen_name;null,email_verified_p;t,context_id;null');
+select define_function_args('acs_user__receives_alerts_p','user_id');
+select define_function_args('acs_user__approve_email','user_id');
+select define_function_args('acs_user__unapprove_email','user_id');
+select define_function_args('acs_user__delete','user_id');
+select define_function_args('composition_rel__new','rel_id;null,rel_type;composition_rel,object_id_one,object_id_two,creation_user;null,creation_ip;null');
+select define_function_args('composition_rel__delete','rel_id');
+select define_function_args('composition_rel__check_path_exists_p','component_id,container_id');
+select define_function_args('composition_rel__check_index','component_id,container_id');
+select define_function_args('composition_rel__check_representation','rel_id');
+select define_function_args('membership_rel__new','rel_id;null,rel_type;membership_rel,object_id_one,object_id_two,member_state;approved,creation_user;null,creation_ip;null');
+select define_function_args('membership_rel__ban','rel_id');
+select define_function_args('membership_rel__approve','rel_id');
+select define_function_args('membership_rel__reject','rel_id');
+select define_function_args('membership_rel__unapprove','rel_id');
+select define_function_args('membership_rel__deleted','rel_id');
+select define_function_args('membership_rel__delete','rel_id');
+select define_function_args('membership_rel__merge','rel_id');
+select define_function_args('membership_rel__check_index','group_id,member_id,container_id');
+select define_function_args('membership_rel__check_representation','rel_id');
+select define_function_args('acs_group__new','group_id;null,object_type;group,creation_date;now(),creation_user;null,creation_ip;null,email;null,url;null,group_name,join_policy;null,context_id;null');
+select define_function_args('acs_group__delete','group_id');
+select define_function_args('acs_group__name','group_id');
+select define_function_args('acs_group__member_p','party_id,group_id,cascade_membership');
+select define_function_args('acs_group__check_representation','group_id');
+select define_function_args('admin_rel__new','rel_id;null,rel_type;admin_rel,object_id_one,object_id_two,member_state;approved,creation_user;null,creation_ip;null');
+select define_function_args('admin_rel__delete','rel_id');
+select define_function_args('group_contains_p','group_id,component_id,rel_id');
+select define_function_args('journal_entry__new','journal_id;null,object_id,action,action_pretty;null,creation_date;now(),creation_user;null,creation_ip;null,msg;null');
+select define_function_args('journal_entry__delete','journal_id');
+select define_function_args('journal_entry__delete_for_object','object_id');
+select define_function_args('lob_get_data','lob_id');
+select define_function_args('lob_copy','from_id,to_id');
+select define_function_args('lob_length','id');
+select define_function_args('instr','str,pat,dir,cnt');
+select define_function_args('split','string,split_char,element');
+select define_function_args('get_func_drop_command','fname');
+select define_function_args('drop_package','package_name');
+select define_function_args('number_src','v_src');
+select define_function_args('get_func_definition','fname,args');
+select define_function_args('get_func_header','fname,args');
+select define_function_args('int_to_tree_key','intkey');
+select define_function_args('tree_key_to_int','tree_key,level');
+select define_function_args('tree_ancestor_key','tree_key,level');
+select define_function_args('tree_root_key','tree_key');
+select define_function_args('tree_leaf_key_to_int','tree_key');
+select define_function_args('tree_next_key','parent_key,child_value');
+select define_function_args('tree_increment_key','child_sort_key');
+select define_function_args('tree_left','key');
+select define_function_args('tree_right','key');
+select define_function_args('tree_level','tree_key');
+select define_function_args('tree_ancestor_p','potential_ancestor,potential_child');
+select define_function_args('define_function_args','function,arg_list');
+select define_function_args('trigger_type','tgtype');
+select define_function_args('rel_constraint__new','constraint_id;null,constraint_type;rel_constraint,constraint_name,rel_segment,rel_side;two,required_rel_segment,context_id;null,creation_user;null,creation_ip;null');
+select define_function_args('rel_constraint__delete','constraint_id');
+select define_function_args('rel_constraint__get_constraint_id','rel_segment,rel_side,required_rel_segment');
+select define_function_args('rel_constraint__violation','rel_id');
+select define_function_args('rel_constraint__violation_if_removed','rel_id');
+select define_function_args('rel_segment__new','segment_id;null,object_type;rel_segment,creation_date;now(),creation_user;null,creation_ip;null,email;null,url;null,segment_name,group_id,rel_type,context_id;null');
+select define_function_args('rel_segment__delete','segment_id');
+select define_function_args('rel_segment__get','group_id,rel_type');
+select define_function_args('rel_segment__get_or_new','group_id,rel_type,segment_name;null');
+select define_function_args('rel_segment__name','segment_id');
+select define_function_args('party_approved_member__add_one','party_id,member_id,rel_id');
+select define_function_args('party_approved_member__add','party_id,member_id,rel_id,rel_type');
+select define_function_args('party_approved_member__remove_one','party_id,member_id,rel_id');
+select define_function_args('party_approved_member__remove','party_id,member_id,rel_id,rel_type');
+select define_function_args('site_node_object_map__new', 'object_id,node_id');
+select define_function_args('site_node_object_map__del', 'object_id');
+select define_function_args('site_node_get_tree_sortkey','node_id');
+select define_function_args('site_node__new','node_id;null,parent_id;null,name,object_id;null,directory_p,pattern_p;f,creation_user;null,creation_ip;null');
+select define_function_args('site_node__delete','node_id');
+select define_function_args('site_node__find_pattern','node_id');
+select define_function_args('site_node__node_id','url,parent_id;null');
+select define_function_args('site_node__url','node_id');
+select define_function_args('util__multiple_nextval','v_sequence_name,v_count');
+select define_function_args('util__logical_negation','true_or_false');
+
+
+--- getting triggers right ( names and return values )
+
+CREATE OR REPLACE FUNCTION lobs_delete_tr() RETURNS trigger AS $$
+BEGIN
+ delete from lob_data where lob_id = old.lob_id;
+ return old;
+END;
+$$ LANGUAGE plpgsql;
+
+create trigger lobs_delete_tr before delete on lobs
+for each row execute procedure lobs_delete_tr();
+
+drop trigger lobs_delete_trig on lobs;
+drop function on_lobs_delete();