-- @author Victor Guerra (vguerra@gmail.com) -- @creation-date 2010-09-29 -- -- The following function gets rid of the foreign key constraint -- between cr_folders(folder_id) and cr_items(item_id), at some point -- ( upgrade-5.4.2d1-5.42d2 ) it was added using the statement "alter -- table add foreign key .. " which will add a constraint with name -- $1, since this is not for sure ( could have also other name -- assigned), we better look for the right constraint name to be -- deleted using pg_constraint and pg_class table create function inline_0 () returns integer as ' declare constraints RECORD; begin for constraints in select conname from pg_constraint con ,pg_class cla1, pg_class cla2 where con.contype = ''f'' and con.conrelid = cla1.oid and cla1.relname = ''cr_folders'' and con.confrelid = cla2.oid and cla2.relname = ''cr_items'' loop EXECUTE ''alter table cr_folders drop constraint '' || constraints.conname; end loop; return null; end;' language 'plpgsql'; select inline_0(); drop function inline_0(); -- Now we create the foreign key constraint with the right name alter table cr_folders add constraint cr_folders_folder_id_fk foreign key (folder_id) references cr_items(item_id) on delete cascade; create or replace function content_template__new (varchar,integer,integer,timestamptz,integer,varchar) returns integer as ' declare new__name alias for $1; new__parent_id alias for $2; -- default null new__template_id alias for $3; -- default null new__creation_date alias for $4; -- default now() new__creation_user alias for $5; -- default null new__creation_ip alias for $6; -- default null v_template_id cr_templates.template_id%TYPE; v_parent_id cr_items.parent_id%TYPE; begin if new__parent_id is null then select c_root_folder_id into v_parent_id from content_template_globals; else v_parent_id := new__parent_id; end if; -- make sure we''re allowed to create a template in this folder if content_folder__is_folder(new__parent_id) = ''t'' and content_folder__is_registered(new__parent_id,''content_template'',''f'') = ''f'' then raise EXCEPTION ''-20000: This folder does not allow templates to be created''; else v_template_id := content_item__new ( new__name, v_parent_id, new__template_id, null, new__creation_date, new__creation_user, null, new__creation_ip, ''content_item'', ''content_template'', null, null, ''text/plain'', null, null, ''text'' ); insert into cr_templates ( template_id ) values ( v_template_id ); return v_template_id; end if; end;' language 'plpgsql'; create or replace function content_template__new (varchar,integer,integer,timestamptz,integer,varchar,text,bool) returns integer as ' declare new__name alias for $1; new__parent_id alias for $2; -- default null new__template_id alias for $3; -- default null new__creation_date alias for $4; -- default now() new__creation_user alias for $5; -- default null new__creation_ip alias for $6; -- default null new__text alias for $7; -- default null new__is_live alias for $8; -- default ''f'' v_template_id cr_templates.template_id%TYPE; v_parent_id cr_items.parent_id%TYPE; begin if new__parent_id is null then select c_root_folder_id into v_parent_id from content_template_globals; else v_parent_id := new__parent_id; end if; -- make sure we''re allowed to create a template in this folder if content_folder__is_folder(new__parent_id) = ''t'' and content_folder__is_registered(new__parent_id,''content_template'',''f'') = ''f'' then raise EXCEPTION ''-20000: This folder does not allow templates to be created''; else v_template_id := content_item__new ( new__template_id, -- new__item_id new__name, -- new__name v_parent_id, -- new__parent_id null, -- new__title new__creation_date, -- new__creation_date new__creation_user, -- new__creation_user null, -- new__context_id new__creation_ip, -- new__creation_ip new__is_live, -- new__is_live ''text/plain'', -- new__mime_type new__text, -- new__text ''text'', -- new__storage_type ''t'', -- new__security_inherit_p ''CR_FILES'', -- new__storage_area_key ''content_item'', -- new__item_subtype ''content_template'' -- new__content_type ); insert into cr_templates ( template_id ) values ( v_template_id ); return v_template_id; end if; end;' language 'plpgsql';