home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************/
- -- These are the required MetaWorlds Stored Procedures.
-
- /******************************************************************************/
- -- At the moment this assumes that the id being passed are valid. Exceptions
- -- will be thrown otherwize.
- CREATE PROCEDURE UserOn_InsertWithId(
- IN _machineId integer,
- IN _serverId integer,
- IN _userId integer,
- IN _timeOut integer
- )
- BEGIN
- DECLARE _userOnId integer;
-
- -- Get the id of row we will be inserting into if not Unique
- SET _userOnId = (SELECT UserOn.id FROM UserOn WHERE
- machineId = _machineId AND
- serverId = _serverId AND
- UserId = _userId);
-
- -- We should be using Update, but I couldn't get it to work.
- IF _userOnId is NOT NULL THEN
- UPDATE UserOn
- SET TimeOut = _timeOut,
- ActionTime = NOW()
- WHERE id = _userOnId;
- ELSE
- -- Create new UserLog entry
- INSERT INTO UserOn (userId, machineId, serverId, timeOut, actionTime)
- VALUES (_userId, _machineId, _serverId, _timeOut, NOW());
- END IF;
- END;
-
- /******************************************************************************/
- -- This function will insert into userOn if it is passed valid data.
- -- RETURNS: 0 if it succeeds.
- -- Preconditions: Machine and Server Tables are setup.
-
- CREATE FUNCTION UserOn_Insert(
- IN _machineName char(72),
- IN _serverName char(72),
- IN _alias char(72),
- IN _timeOut integer
- ) RETURNS INTEGER
- BEGIN
- DECLARE _userId integer;
- DECLARE _machineId integer;
- DECLARE _serverId integer;
-
- DECLARE _userOnId integer;
- DECLARE _userLogId integer;
-
- SET _userId = (SELECT id from Users WHERE alias = _alias);
- SET _machineId = (SELECT id from Machines WHERE MachineName = _machineName);
- SET _serverId = (SELECT id from Servers WHERE name = _serverName);
-
- -- Error Checking
- IF _userId is NULL THEN
- MESSAGE _alias , ' is not in the database';
- RETURN (1);
- END IF;
- IF _machineId is NULL THEN
- MESSAGE _machineName , ' is not in the database';
- RETURN (1);
- END IF;
- IF _serverId is NULL THEN
- MESSAGE _serverName , ' is not in the database';
- RETURN (1);
- END IF;
-
- call UserOn_InsertWithId(_machineId, _serverId, _userId, _timeOut);
-
- RETURN (0); -- This could be set to return the above call.
- END;
-
- /******************************************************************************/
- CREATE PROCEDURE UserOn_DeleteWithId (IN _userId INTEGER)
- BEGIN
- DELETE FROM UserOn WHERE UserId = _userId;
- END;
-
- /******************************************************************************/
- CREATE FUNCTION UserOn_Delete (IN _alias CHAR(72)) RETURNS INTEGER
- BEGIN
- DECLARE _userId INTEGER;
-
- SET _userId = (SELECT id FROM Users WHERE alias = _alias);
- IF _userId is NULL THEN
- RETURN 0;
- ELSE
- CALL UserOn_DeleteWithId(_userId);
- RETURN 1;
- END IF;
- END;
-
- /******************************************************************************/
- CREATE PROCEDURE User_Insert (
- IN _id integer,
- IN _alias char(30),
- IN _fName char(40),
- IN _lName char(40)
- )
- BEGIN
- INSERT INTO Users
- (ID, alias, fName, lName)
- VALUES
- (_ID, _alias, _fName, _lName);
- END;
-
- /******************************************************************************/
- CREATE PROCEDURE WhoIsOnline()
- RESULT (Alias char(30), FirstName char(72), LastName char(72), Server char(72))
- BEGIN
- SELECT alias, fName, lName, name
- FROM Users, Servers, UserOn
- WHERE UserOn.UserId = Users.Id AND
- UserOn.ServerId = Servers.Id
- ORDER BY alias
- END;
-
- /******************************************************************************/
- CREATE PROCEDURE UserOn_CleanUp(
- IN _machineName char(72),
- IN _serverName char(72)
- )
- BEGIN
- DECLARE _machineId integer;
- DECLARE _serverId integer;
-
- SET _machineId = (SELECT id from Machines WHERE machineName = _machineName);
- SET _serverId = (SELECT id from Servers WHERE name = _serverName);
-
- DELETE FROM UserOn WHERE
- UserOn.machineId = _machineId AND
- UserOn.serverId = _serverId;
- END;
-
- /******************************************************************************/
- // This procedure initalizes Machines and Servers table.
- // It also delete users from UserOn.
- CREATE PROCEDURE UserOn_Initialize(
- IN _machineName char(72),
- IN _serverName char(72),
- IN _license INTEGER DEFAULT 0,
- IN _defaultTimeOut INTEGER DEFAULT 0
- )
- BEGIN
- DECLARE _machineId integer;
- DECLARE _serverId integer;
-
- SET _machineId = (SELECT id from Machines WHERE MachineName = _machineName);
- SET _serverId = (SELECT id from Servers WHERE name = _serverName);
-
- IF _machineID is NULL THEN
- INSERT INTO Machines (MachineName, License)
- VALUES (_machineName, _license);
- SET _machineId = @@identity
- END IF;
-
- IF _serverId IS NULL THEN
- INSERT INTO Servers (name, machineId, defaultTimeOut)
- VALUES (_serverName, _machineID, _defaultTimeOut);
- SET _serverId = @@identity;
- ELSE
- UPDATE Servers
- SET machineId = _machineId,
- defaultTimeOut = _defaultTimeOut
- WHERE id = _serverId
- END IF;
-
- DELETE FROM UserOn WHERE
- machineId = _machineId AND serverId = _serverId;
-
- END;
-
-
- /******************************************************************************/
- -- This function will remove users from useron after the timeOut has expired
- -- RETURNS: The number of users deleted.
- -- Preconditions:
- CREATE FUNCTION UserOn_TimedCleanUp()
- RETURNS INTEGER
- BEGIN
- DELETE FROM UserOn WHERE
- timeOut > 0 AND
- Now() > timeOut * 0.00069444444 + actionTime ; // 1 = 1 day
-
- COMMIT work;
- RETURN @@rowCount;
- END;
-
- /******************************************************************************/
- -- This procedure returns the Id of a validated user.
- -- Currently it also does the timedCleanUp (ie. remove users from UserOn whos time has expired
- CREATE PROCEDURE ValidateUser (
- IN _alias char(72),
- IN _pwd char(72)
- )
- RESULT (UserId INTEGER)
- BEGIN
- CALL UserOn_TimedCleanUp();
- SELECT id FROM Users WHERE
- _alias = alias AND
- _pwd = passwd;
- END;
-
- /******************************************************************************/
- create function "dba".ImportPCBUsers(in sAlias char(26),in sFirst char(26),
- in sLast char(26),in sStreet1 char(81),in sStreet2 char(81),in sCity char(41),
- in sState char(21),in sZip char(21),in sCountry char(41),in sPassword char(21),
- in sVoicePhone char(21),in sDataPhone char(21),in sEmailAddr char(81),
- in sCompany char(61),in sPCBUser char(26),in vAcctID integer,in vProfID integer)
- returns integer
- begin
- declare vNewID integer;
- if(select id from users where fname=sFirst and lname=sLast and pcbuser=sPCBUser) is null then
- set vNewID=(select max(id) from users)+1;
- insert into users values(
- vNewID,sAlias,sFirst,sLast,sStreet1,sStreet2,sCity,sState,sZip,sCountry,sPassword,vAcctID,sVoicePhone,sDataPhone,sEmailAddr,sCompany,sPCBUser,'');
- insert into user_profile values(vNewID,vProfID)
- else
- set vNewID=-1
- end if
- ;
- return(vNewID)
- end;
-
- /******************************************************************************/
- create function "dba".ImportConferences(in sConfName char(81),in vConfNum char(21),in vConfID char(21),in vDirNum char(21),in sDirDesc char(81),in vWhichOpt integer)
- returns integer
- begin
- declare ReturnValue integer;
- declare vNewConfID integer;
- declare vNewMsgID integer;
- declare vNewFileID integer;
- declare tStr char(81);
- if vWhichOpt=0 then // Adding a new area & message base or just message base
- set vNewConfID=(select id from subsysin where descript=sConfName and typeid=0);
- if vNewConfID is null then
- insert into subsysin(TypeID,Instparam,Descript) values(0,'area_nb.sht',sConfName);
- set vNewConfID=@@identity;
- insert into area_sub values(0,vNewConfID);
- insert into areas values(vNewConfID)
- end if
- ;
- set vNewMsgID=(select max(ID) from subsysin)+1;
- set tStr=cast(vNewMsgID as char(5))+'&conf='+vConfNum;
- insert into subsysin(id,typeid,instparam,descript) values(vNewMsgID,5,tStr,'Messages');
- insert into area_sub values(vNewConfID,vNewMsgID);
- insert into areas values(vNewMsgID);
- set ReturnValue=vNewConfID
- else // Adding a new file directory
- set tStr='conf='+vConfNum;
- set vNewFileID=(select id from subsysin where descript=sDirDesc and typeid=6 and(locate(subsysin.instparam,tStr)>0));
- if vNewFileID is null then
- insert into subsysin(typeid,descript) values(6,sDirDesc);
- set vNewFileID=@@identity;
- set tStr=cast(vNewFileID as char(5))+'&DOCUMENT=pcbfile.sht&conf='+vConfNum+'&dir='+vDirNum;
- update subsysin set instparam=tStr where id=vNewFileID;
- insert into area_sub values(vConfID,vNewFileID);
- insert into areas values(vNewFileID)
- end if
- ;
- set ReturnValue=vNewFileID
- end if
- ;
- return(ReturnValue)
- end
-