protected ResourceBE SaveResource(ResourceBE res) { ResourceBE ret = null; if (res.IsNewResource()) { //New attachments get a legacy fileid mapping. uint fileId = ResourceMapBL.GetNewFileId(); res.MetaXml.FileId = fileId; ret = _resourceBL.SaveResource(res); ResourceMapBL.UpdateFileIdMapping(fileId, ret.ResourceId); } else { ret = _resourceBL.SaveResource(res); } return(ret); }
public ResourceBE Resources_SaveRevision(ResourceBE resource) { string query = string.Empty; string contentUpdateQuery = string.Empty; bool contentUpdated = false; if(resource.Content != null && resource.Content.IsNewContent()){ contentUpdated = true; ResourceContentBE content = Resources_ContentInsert(resource.Content); resource.Content = content; resource.ContentId = content.ContentId; } if(resource.IsNewResource()) { query = @" /* Resources_SaveRevision (new resource) */ set @resourceid = 0; insert into resources set res_headrev = ?RES_HEADREV, res_type = ?RES_TYPE, res_deleted = ?RES_DELETED, res_create_timestamp = ?RES_CREATE_TIMESTAMP, res_update_timestamp = ?RES_UPDATE_TIMESTAMP, res_create_user_id = ?RES_CREATE_USER_ID, res_update_user_id = ?RES_UPDATE_USER_ID, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META; select last_insert_id() into @resourceid; insert into resourcerevs set resrev_res_id = @resourceid, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META; update resourcecontents set rescontent_res_id = @resourceid, rescontent_res_rev = ?RESREV_REV where rescontent_id = ?RESREV_CONTENT_ID; select * from resources left join resourcecontents on resources.resrev_content_id = resourcecontents.rescontent_id where res_id = @resourceid; /* End of ResourceDA::InsertResourceRevision (new resource) */ "; } else { resource.Revision = ++resource.ResourceHeadRevision; if(contentUpdated) { resource.Content.Revision = (uint) resource.Revision; } query = @" /* Resources_SaveRevision + concurrency check (new revision) */ update resources set res_headrev = ?RES_HEADREV, res_type = ?RES_TYPE, res_deleted = ?RES_DELETED, res_update_timestamp = ?RESREV_TIMESTAMP, res_update_user_id = ?RES_UPDATE_USER_ID, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META WHERE res_id = ?RES_ID AND res_headrev = ?RES_HEADREV - 1 AND res_update_timestamp = ?RES_UPDATE_TIMESTAMP; select ROW_COUNT() into @affectedRows; select * from resources where @affectedrows > 0 and res_id = ?RES_ID; "; if(ArrayUtil.IsNullOrEmpty(Resources_ExecuteInsertUpdateQuery(resource, query))) { //Cleanup content row if resource could not be updated Resources_ContentDelete(resource.ContentId); throw new ResourceConcurrencyException(resource.ResourceId); } query = @" /* Resources_SaveRevision (new revision) */ replace into resourcerevs set resrev_res_id = ?RES_ID, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META; update resourcecontents set rescontent_res_id = ?RES_ID, rescontent_res_rev = ?RESCONTENT_RES_REV where rescontent_id = ?RESREV_CONTENT_ID; select * from resources left join resourcecontents on resources.resrev_content_id = resourcecontents.rescontent_id where res_id = ?RES_ID; "; } ResourceBE[] ret = Resources_ExecuteInsertUpdateQuery(resource, query); return (ArrayUtil.IsNullOrEmpty(ret)) ? null : ret[0]; }
public ResourceBE Resources_SaveRevision(ResourceBE resource) { string query = string.Empty; bool contentUpdated = false; if (resource.Content != null && resource.Content.IsNewContent()) { contentUpdated = true; ResourceContentBE content = Resources_ContentInsert(resource.Content); resource.Content = content; resource.ContentId = content.ContentId; } if (resource.IsNewResource()) { query = @" /* Resources_SaveRevision (new resource) */ set @resourceid = 0; insert into resources set res_headrev = ?RES_HEADREV, res_type = ?RES_TYPE, res_deleted = ?RES_DELETED, res_create_timestamp = ?RES_CREATE_TIMESTAMP, res_update_timestamp = ?RES_UPDATE_TIMESTAMP, res_create_user_id = ?RES_CREATE_USER_ID, res_update_user_id = ?RES_UPDATE_USER_ID, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META; select last_insert_id() into @resourceid; insert into resourcerevs set resrev_res_id = @resourceid, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META; update resourcecontents set rescontent_res_id = @resourceid, rescontent_res_rev = ?RESREV_REV where rescontent_id = ?RESREV_CONTENT_ID; select * from resources left join resourcecontents on resources.resrev_content_id = resourcecontents.rescontent_id where res_id = @resourceid; /* End of ResourceDA::InsertResourceRevision (new resource) */ "; } else { resource.Revision = ++resource.ResourceHeadRevision; if (contentUpdated) { resource.Content.Revision = (uint)resource.Revision; } query = @" /* Resources_SaveRevision + concurrency check (new revision) */ update resources set res_headrev = ?RES_HEADREV, res_type = ?RES_TYPE, res_deleted = ?RES_DELETED, res_update_timestamp = ?RESREV_TIMESTAMP, res_update_user_id = ?RES_UPDATE_USER_ID, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META WHERE res_id = ?RES_ID AND res_headrev = ?RES_HEADREV - 1 AND res_update_timestamp = ?RES_UPDATE_TIMESTAMP; select ROW_COUNT() into @affectedRows; select * from resources where @affectedrows > 0 and res_id = ?RES_ID; "; if (ArrayUtil.IsNullOrEmpty(Resources_ExecuteInsertUpdateQuery(resource, query))) { //Cleanup content row if resource could not be updated Resources_ContentDelete(resource.ContentId); throw new ResourceConcurrencyException(resource.ResourceId); } query = @" /* Resources_SaveRevision (new revision) */ replace into resourcerevs set resrev_res_id = ?RES_ID, resrev_rev = ?RESREV_REV, resrev_user_id = ?RESREV_USER_ID, resrev_parent_id = ?RESREV_PARENT_ID, resrev_parent_page_id = ?RESREV_PARENT_PAGE_ID, resrev_parent_user_id = ?RESREV_PARENT_USER_ID, resrev_change_mask = ?RESREV_CHANGE_MASK, resrev_name = ?RESREV_NAME, resrev_change_description = ?RESREV_CHANGE_DESCRIPTION, resrev_timestamp = ?RESREV_TIMESTAMP, resrev_content_id = ?RESREV_CONTENT_ID, resrev_deleted = ?RESREV_DELETED, resrev_changeset_id = ?RESREV_CHANGESET_ID, resrev_size = ?RESREV_SIZE, resrev_mimetype = ?RESREV_MIMETYPE, resrev_language = ?RESREV_LANGUAGE, resrev_is_hidden = ?RESREV_IS_HIDDEN, resrev_meta = ?RESREV_META; update resourcecontents set rescontent_res_id = ?RES_ID, rescontent_res_rev = ?RESCONTENT_RES_REV where rescontent_id = ?RESREV_CONTENT_ID; select * from resources left join resourcecontents on resources.resrev_content_id = resourcecontents.rescontent_id where res_id = ?RES_ID; "; } ResourceBE[] ret = Resources_ExecuteInsertUpdateQuery(resource, query); return((ArrayUtil.IsNullOrEmpty(ret)) ? null : ret[0]); }