begin; drop function if exists file_storage__copy_file( copy_file__file_id integer, copy_file__target_folder_id integer, copy_file__creation_user integer, copy_file__creation_ip character varying ); -- added select define_function_args('file_storage__copy_file','file_id,target_folder_id,creation_user,creation_ip,name;null,title;null'); -- -- procedure file_storage__copy_file/6 -- -- -- Copy a file, but only copy the live_revision -- CREATE OR REPLACE FUNCTION file_storage__copy_file( copy_file__file_id integer, copy_file__target_folder_id integer, copy_file__creation_user integer, copy_file__creation_ip varchar, copy_file__name cr_items.name%TYPE default null, copy_file__title cr_revisions.title%TYPE default null ) RETURNS integer AS $$ DECLARE v_name cr_items.name%TYPE; v_live_revision cr_items.live_revision%TYPE; v_filename cr_revisions.title%TYPE; v_description cr_revisions.description%TYPE; v_mime_type cr_revisions.mime_type%TYPE; v_content_length cr_revisions.content_length%TYPE; v_lob_id cr_revisions.lob%TYPE; v_new_lob_id cr_revisions.lob%TYPE; v_file_path cr_revisions.content%TYPE; v_new_file_id cr_items.item_id%TYPE; v_new_version_id cr_revisions.revision_id%TYPE; v_indb_p boolean; v_isurl boolean; v_content_type cr_items.content_type%TYPE; v_package_id apm_packages.package_id%TYPE; BEGIN v_isurl:= false; select content_type into v_content_type from cr_items where item_id = copy_file__file_id; if v_content_type = 'content_extlink' then v_isurl:= true; end if; -- We copy only the title from the file being copied, and attributes of the live revision if v_isurl = false then select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length, (case when i.storage_type = 'lob' then true else false end) into v_name,v_live_revision,v_filename,v_description,v_mime_type,v_content_length,v_indb_p from cr_items i, cr_revisions r where r.item_id = i.item_id and r.revision_id = i.live_revision and i.item_id = copy_file__file_id; select package_id into v_package_id from acs_objects where object_id = copy_file__file_id; v_name := coalesce(copy_file__name, v_name); v_filename := coalesce(copy_file__title, v_filename); v_new_file_id := file_storage__new_file( v_name, -- name copy_file__target_folder_id, -- folder_id copy_file__creation_user, -- creation_user copy_file__creation_ip, -- creation_ip v_indb_p, -- indb_p v_package_id -- package_id ); v_new_version_id := file_storage__new_version ( v_filename, -- title v_description, -- description v_mime_type, -- mime_type v_new_file_id, -- item_id copy_file__creation_user, -- creation_user copy_file__creation_ip -- creation_ip ); if v_indb_p then -- Lob to copy from select lob into v_lob_id from cr_revisions where revision_id = v_live_revision; -- New lob id v_new_lob_id := empty_lob(); -- copy the blob perform lob_copy(v_lob_id,v_new_lob_id); -- Update the lob id on the new version update cr_revisions set lob = v_new_lob_id, content_length = v_content_length where revision_id = v_new_version_id; else -- For now, we simply copy the file name select content into v_file_path from cr_revisions where revision_id = v_live_revision; -- Update the file path update cr_revisions set content = v_file_path, content_length = v_content_length where revision_id = v_new_version_id; end if; perform acs_object__update_last_modified(copy_file__target_folder_id,copy_file__creation_user,copy_file__creation_ip); return v_new_version_id; else perform content_extlink__copy (copy_file__file_id, copy_file__target_folder_id, copy_file__creation_user,copy_file__creation_ip,v_name); return 0; end if; END; $$ LANGUAGE plpgsql; end;