Пример #1
0
        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);
        }
Пример #2
0
        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];
        }
Пример #3
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]);
        }