home *** CD-ROM | disk | FTP | other *** search
/ MetaWorlds Beta 17 / MSQMW17.ZIP / DATA.Z / DBGEN_P.SQL < prev    next >
Encoding:
Text File  |  1996-12-23  |  9.1 KB  |  271 lines

  1. /******************************************************************************/
  2. -- These are the required MetaWorlds Stored Procedures.
  3.  
  4. /******************************************************************************/
  5. -- At the moment this assumes that the id being passed are valid. Exceptions 
  6. -- will be thrown otherwize.
  7. CREATE PROCEDURE UserOn_InsertWithId(
  8.         IN _machineId integer,
  9.         IN _serverId integer,
  10.         IN _userId integer,
  11.         IN _timeOut integer
  12. )
  13. BEGIN
  14.     DECLARE _userOnId               integer;
  15.  
  16.     -- Get the id of row we will be inserting into if not Unique
  17.     SET _userOnId = (SELECT UserOn.id FROM UserOn WHERE
  18.                 machineId       = _machineId    AND
  19.                 serverId                = _serverId             AND
  20.                 UserId          = _userId);
  21.  
  22.     -- We should be using Update, but I couldn't get it to work.
  23.     IF _userOnId is NOT NULL THEN
  24.         UPDATE UserOn 
  25.             SET TimeOut = _timeOut,
  26.                 ActionTime = NOW()
  27.             WHERE id = _userOnId;
  28.     ELSE
  29.         -- Create new UserLog entry     
  30.         INSERT INTO UserOn (userId, machineId, serverId, timeOut, actionTime)
  31.             VALUES (_userId, _machineId, _serverId, _timeOut, NOW());
  32.     END IF;
  33. END;
  34.  
  35. /******************************************************************************/
  36. -- This function will insert into userOn if it is passed valid data.
  37. -- RETURNS: 0 if it succeeds.
  38. -- Preconditions: Machine and Server Tables are setup.
  39.  
  40. CREATE FUNCTION UserOn_Insert(
  41.         IN _machineName char(72),
  42.         IN _serverName char(72),
  43.         IN _alias char(72),
  44.         IN _timeOut integer
  45. ) RETURNS INTEGER
  46. BEGIN
  47.     DECLARE _userId                 integer;
  48.     DECLARE _machineId      integer;
  49.     DECLARE _serverId               integer;
  50.  
  51.     DECLARE _userOnId       integer;
  52.     DECLARE _userLogId      integer;
  53.  
  54.     SET _userId     = (SELECT id from Users WHERE alias                             = _alias);
  55.     SET _machineId = (SELECT id from Machines WHERE MachineName     = _machineName);
  56.     SET _serverId   = (SELECT id from Servers WHERE name                    = _serverName);
  57.  
  58.     -- Error Checking
  59.     IF _userId is NULL THEN
  60.         MESSAGE _alias , ' is not in the database';
  61.         RETURN (1);
  62.     END IF;
  63.     IF _machineId is NULL THEN
  64.         MESSAGE _machineName , ' is not in the database';
  65.         RETURN (1);
  66.     END IF;
  67.     IF _serverId is NULL THEN
  68.         MESSAGE _serverName , ' is not in the database';
  69.         RETURN (1);
  70.     END IF;
  71.  
  72.     call UserOn_InsertWithId(_machineId, _serverId, _userId, _timeOut);
  73.  
  74.     RETURN (0);             -- This could be set to return the above call.
  75. END;
  76.  
  77. /******************************************************************************/
  78. CREATE PROCEDURE UserOn_DeleteWithId (IN _userId INTEGER)
  79. BEGIN
  80.     DELETE FROM UserOn WHERE UserId = _userId;
  81. END;
  82.  
  83. /******************************************************************************/
  84. CREATE FUNCTION UserOn_Delete (IN _alias CHAR(72)) RETURNS INTEGER
  85. BEGIN
  86.     DECLARE _userId INTEGER;
  87.  
  88.     SET _userId = (SELECT id FROM Users WHERE alias = _alias);
  89.     IF _userId is NULL THEN
  90.         RETURN 0;
  91.     ELSE
  92.         CALL UserOn_DeleteWithId(_userId);
  93.         RETURN 1;
  94.     END IF;
  95. END;
  96.  
  97. /******************************************************************************/
  98. CREATE PROCEDURE User_Insert (
  99.             IN _id  integer,
  100.             IN _alias char(30),
  101.             IN _fName char(40),
  102.             IN _lName char(40)
  103. )
  104. BEGIN
  105.     INSERT INTO Users
  106.         (ID, alias, fName, lName)
  107.     VALUES
  108.         (_ID, _alias, _fName, _lName);
  109. END;
  110.  
  111. /******************************************************************************/
  112. CREATE PROCEDURE WhoIsOnline()
  113. RESULT (Alias char(30), FirstName char(72), LastName char(72), Server char(72))
  114. BEGIN
  115.     SELECT alias, fName, lName, name 
  116.         FROM Users, Servers, UserOn 
  117.         WHERE UserOn.UserId = Users.Id AND
  118.                 UserOn.ServerId = Servers.Id
  119.         ORDER BY alias  
  120. END;
  121.  
  122. /******************************************************************************/
  123. CREATE PROCEDURE UserOn_CleanUp(
  124.     IN _machineName char(72),
  125.     IN _serverName  char(72)
  126. BEGIN
  127.     DECLARE _machineId      integer;
  128.     DECLARE _serverId               integer;
  129.  
  130.     SET _machineId = (SELECT id from Machines WHERE machineName = _machineName);
  131.     SET _serverId   = (SELECT id from Servers WHERE name                    = _serverName);
  132.  
  133.     DELETE FROM UserOn WHERE
  134.         UserOn.machineId        = _machineId AND
  135.         UserOn.serverId         = _serverId;
  136. END;    
  137.  
  138. /******************************************************************************/
  139. // This procedure initalizes Machines and Servers table.
  140. // It also delete users from UserOn.
  141. CREATE PROCEDURE UserOn_Initialize(
  142.         IN _machineName char(72),
  143.         IN _serverName char(72),
  144.         IN _license INTEGER DEFAULT 0,
  145.         IN _defaultTimeOut INTEGER DEFAULT 0
  146. BEGIN
  147.     DECLARE _machineId      integer;
  148.     DECLARE _serverId               integer;
  149.  
  150.     SET _machineId = (SELECT id from Machines WHERE MachineName     = _machineName);
  151.     SET _serverId   = (SELECT id from Servers WHERE name                    = _serverName);
  152.  
  153.     IF _machineID is NULL THEN
  154.         INSERT INTO Machines (MachineName, License)
  155.         VALUES (_machineName, _license);
  156.         SET _machineId = @@identity
  157.     END IF;
  158.  
  159.     IF _serverId IS NULL THEN
  160.         INSERT INTO Servers (name, machineId, defaultTimeOut)
  161.         VALUES (_serverName, _machineID, _defaultTimeOut);
  162.         SET _serverId = @@identity;
  163.     ELSE
  164.         UPDATE Servers
  165.             SET machineId           = _machineId,
  166.                 defaultTimeOut = _defaultTimeOut
  167.             WHERE id = _serverId
  168.     END IF;
  169.  
  170.     DELETE FROM UserOn WHERE
  171.         machineId = _machineId AND serverId = _serverId;
  172.  
  173. END;            
  174.  
  175.  
  176. /******************************************************************************/
  177. -- This function will remove users from useron after the timeOut has expired 
  178. -- RETURNS: The number of users deleted.
  179. -- Preconditions: 
  180. CREATE FUNCTION UserOn_TimedCleanUp()
  181. RETURNS INTEGER
  182. BEGIN
  183.     DELETE FROM UserOn WHERE
  184.         timeOut > 0 AND
  185.         Now() > timeOut * 0.00069444444 + actionTime    ;               // 1 = 1 day
  186.  
  187.     COMMIT work;
  188.     RETURN @@rowCount;
  189. END;
  190.  
  191. /******************************************************************************/
  192. -- This procedure returns the Id of a validated user.
  193. -- Currently it also does the timedCleanUp (ie. remove users from UserOn whos time has expired
  194. CREATE PROCEDURE ValidateUser (
  195.         IN _alias char(72),
  196.         IN _pwd char(72)
  197. )
  198. RESULT (UserId INTEGER)
  199. BEGIN
  200.     CALL UserOn_TimedCleanUp();     
  201.     SELECT id FROM Users WHERE 
  202.         _alias = alias AND
  203.         _pwd = passwd;
  204. END;
  205.  
  206. /******************************************************************************/
  207. create function "dba".ImportPCBUsers(in sAlias char(26),in sFirst char(26),
  208.      in sLast char(26),in sStreet1 char(81),in sStreet2 char(81),in sCity char(41),
  209.      in sState char(21),in sZip char(21),in sCountry char(41),in sPassword char(21),
  210.      in sVoicePhone char(21),in sDataPhone char(21),in sEmailAddr char(81),
  211.      in sCompany char(61),in sPCBUser char(26),in vAcctID integer,in vProfID integer)
  212. returns integer
  213. begin
  214.   declare vNewID integer;
  215.   if(select id from users where fname=sFirst and lname=sLast and pcbuser=sPCBUser) is null then
  216.     set vNewID=(select max(id) from users)+1;
  217.     insert into users values(
  218.       vNewID,sAlias,sFirst,sLast,sStreet1,sStreet2,sCity,sState,sZip,sCountry,sPassword,vAcctID,sVoicePhone,sDataPhone,sEmailAddr,sCompany,sPCBUser,'');
  219.     insert into user_profile values(vNewID,vProfID)
  220.   else
  221.     set vNewID=-1
  222.   end if
  223.   ;
  224.   return(vNewID)
  225. end;
  226.  
  227. /******************************************************************************/
  228. 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)
  229. returns integer
  230. begin
  231.   declare ReturnValue integer;
  232.   declare vNewConfID integer;
  233.   declare vNewMsgID integer;
  234.   declare vNewFileID integer;
  235.   declare tStr char(81);
  236.   if vWhichOpt=0 then // Adding a new area & message base or just message base
  237.     set vNewConfID=(select id from subsysin where descript=sConfName and typeid=0);
  238.     if vNewConfID is null then
  239.       insert into subsysin(TypeID,Instparam,Descript) values(0,'area_nb.sht',sConfName);
  240.       set vNewConfID=@@identity;
  241.       insert into area_sub values(0,vNewConfID);
  242.       insert into areas values(vNewConfID)
  243.     end if
  244.     ;
  245.     set vNewMsgID=(select max(ID) from subsysin)+1;
  246.     set tStr=cast(vNewMsgID as char(5))+'&conf='+vConfNum;
  247.     insert into subsysin(id,typeid,instparam,descript) values(vNewMsgID,5,tStr,'Messages');
  248.     insert into area_sub values(vNewConfID,vNewMsgID);
  249.     insert into areas values(vNewMsgID);
  250.     set ReturnValue=vNewConfID
  251.   else // Adding a new file directory
  252.     set tStr='conf='+vConfNum;
  253.     set vNewFileID=(select id from subsysin where descript=sDirDesc and typeid=6 and(locate(subsysin.instparam,tStr)>0));
  254.     if vNewFileID is null then
  255.       insert into subsysin(typeid,descript) values(6,sDirDesc);
  256.       set vNewFileID=@@identity;
  257.       set tStr=cast(vNewFileID as char(5))+'&DOCUMENT=pcbfile.sht&conf='+vConfNum+'&dir='+vDirNum;
  258.       update subsysin set instparam=tStr where id=vNewFileID;
  259.       insert into area_sub values(vConfID,vNewFileID);
  260.       insert into areas values(vNewFileID)
  261.     end if
  262.     ;
  263.     set ReturnValue=vNewFileID
  264.   end if
  265.   ;
  266.   return(ReturnValue)
  267. end
  268.  
  269.