CREATE PROCEDURE "V80SP2DB"."PROC_GET_RESOURCE_LOCK"( newLockId IN BIGINT , userId IN BIGINT , lFrom IN VARCHAR(20) , loginTime IN BIGINT , moduleId IN VARCHAR(100) , resourceId IN BIGINT , action IN INT , lockTime IN BIGINT , expireTime IN BIGINT , success OUT INT ) AS
lockId, ownerId, curExpireTime BIGINT ;
lockAction,rollbackFlag INT ;
loginFrom VARCHAR(100) ;
BEGIN
set rollbackFlag = 0;
start transaction;
if(action <> -1)
then
select ID,OWNER,EXPIREATION_TIMEMILLIS,LOGIN_FROM,ACTION into lockId, ownerId,curExpireTime,loginFrom,lockAction from ctp_lock where RESOURCE_ID=resourceId and (ACTION=action or ACTION=-1);
else
select ID,OWNER,EXPIREATION_TIMEMILLIS,LOGIN_FROM,ACTION into lockId, ownerId,curExpireTime,loginFrom,lockAction from ctp_lock where RESOURCE_ID=resourceId;
end if;
if(lockId is null)
then
insert into ctp_lock(ID,OWNER,MODULE,RESOURCE_ID,ACTION,LOGIN_TIMEMILLIS,LOCK_TIMEMILLIS,EXPIREATION_TIMEMILLIS,LOGIN_FROM)VALUES(newLockId,userId,moduleId,resourceId,action,loginTime,lockTime,expireTime,lFrom);
if(rollbackFlag = 0)
then
set success = 1;
else
set success = 0;
end if;
else
if(ownerId = userId and lFrom = loginFrom)
then
update ctp_lock set LOGIN_TIMEMILLIS=loginTime,LOCK_TIMEMILLIS=lockTime,EXPIREATION_TIMEMILLIS=expireTime,ACTION=action where ID=lockId;
set success = 1;
else
if(curExpireTime < lockTime)
then
delete from ctp_lock where ID=lockId;
insert into ctp_lock(ID,OWNER,MODULE,RESOURCE_ID,ACTION,LOGIN_TIMEMILLIS,LOCK_TIMEMILLIS,EXPIREATION_TIMEMILLIS,LOGIN_FROM)VALUES(newLockId,userId,moduleId,resourceId,action,loginTime,lockTime,expireTime,lFrom);
if(rollbackFlag = 0)
then
set success = 1;
end if;
else
set success = 0;
end if;
end if;
end if;
if(rollbackFlag=1)
then
rollback;
else
commit;
end if;
EXCEPTION
WHEN 1062 THEN set rollbackFlag=1,success=0;
END
CREATE PROCEDURE "V80SP2DB"."PROC_GET_RESOURCE_LOCK"( newLockId IN BIGINT , userId IN BIGINT , lFrom IN VARCHAR(20) , loginTime IN BIGINT , moduleId IN VARCHAR(100) , resourceId IN BIGINT , action IN INT , lockTime IN BIGINT , expireTime IN BIGINT , success OUT INT ) AS
lockId, ownerId, curExpireTime BIGINT ;
lockAction,rollbackFlag INT ;
loginFrom VARCHAR(100) ;
BEGIN
set rollbackFlag = 0;
start transaction;
if(action <> -1)
then
select ID,OWNER,EXPIREATION_TIMEMILLIS,LOGIN_FROM,ACTION into lockId, ownerId,curExpireTime,loginFrom,lockAction from ctp_lock where RESOURCE_ID=resourceId and (ACTION=action or ACTION=-1);
else
select ID,OWNER,EXPIREATION_TIMEMILLIS,LOGIN_FROM,ACTION into lockId, ownerId,curExpireTime,loginFrom,lockAction from ctp_lock where RESOURCE_ID=resourceId;
end if;
if(lockId is null)
then
insert into ctp_lock(ID,OWNER,MODULE,RESOURCE_ID,ACTION,LOGIN_TIMEMILLIS,LOCK_TIMEMILLIS,EXPIREATION_TIMEMILLIS,LOGIN_FROM)VALUES(newLockId,userId,moduleId,resourceId,action,loginTime,lockTime,expireTime,lFrom);
if(rollbackFlag = 0)
then
set success = 1;
else
set success = 0;
end if;
else
if(ownerId = userId and lFrom = loginFrom)
then
update ctp_lock set LOGIN_TIMEMILLIS=loginTime,LOCK_TIMEMILLIS=lockTime,EXPIREATION_TIMEMILLIS=expireTime,ACTION=action where ID=lockId;
set success = 1;
else
if(curExpireTime < lockTime)
then
delete from ctp_lock where ID=lockId;
insert into ctp_lock(ID,OWNER,MODULE,RESOURCE_ID,ACTION,LOGIN_TIMEMILLIS,LOCK_TIMEMILLIS,EXPIREATION_TIMEMILLIS,LOGIN_FROM)VALUES(newLockId,userId,moduleId,resourceId,action,loginTime,lockTime,expireTime,lFrom);
if(rollbackFlag = 0)
then
set success = 1;
end if;
else
set success = 0;
end if;
end if;
end if;
if(rollbackFlag=1)
then
rollback;
else
commit;
end if;
EXCEPTION
WHEN 1062 THEN set rollbackFlag=1,success=0;
END