Prozeduren Previous topic Chapter index Next topic

LOCK_RECORD_SESSION

 

Eingabeparameter

Parameter

Typ

Beschreibung

TYPENAME

VARCHAR(100)

Typ Name

RECORDID

INTEGER

Record ID

SESSIONID

VARCHAR(255)

Session ID

SERVERID

VARCHAR(100)

Server ID

 

Ausgabeparameter

Parameter

Typ

Beschreibung

RESULT

SMALLINT

Rückgabe Wert
0: Record ID ist NULL
1: Update vom RecordLock
2: Insert vom RecordLock
3: Keine Änderung

 

Beschreibung

Reserviert bei den DABiS Premium Modulen einen Datensatz für eine bestimmte Session/Server-Kombination.

 

Definition

CREATE PROCEDURE LOCK_RECORD_SESSION(
    TYPENAME VARCHAR(100),
    RECORDID INTEGER,
    SESSIONID VARCHAR(255),
    SERVERID VARCHAR(100))
RETURNS (
    RESULT SMALLINT)
AS
declare variable CURRENTSERVERID varchar(100);
declare variable OK smallint;
declare variable CURRENTSESSIONID varchar(255);
declare variable CURRENTLOCKTIME date;
declare variable CURRENTRECORDID integer;
begin
  /* reserviert einen Datensatz fuer eine bestimmte
     session/server-Kombination */   
  ok = 0;
  currentrecordid = null;
  /* Testen, ob es den Record gibt

  spaeter vielleicht

  if (typename = 'BLOCK') then
  begin
    select BKID from bloecke where bloecke.bkid = :RECORDID into :currentrecordid;
  end
  else if (typename = '') then
  begin
    OK = 1;
  end
  */
  /* testweise, bis die existenz des records ermittelt wird (s.o.)*/
  currentrecordid = recordid;

  if (currentrecordid is not null) then
  begin
    select RLSESSIONID, RLLOCKTIME, RLSERVERID from RECORDLOCKS where RLTYPENAME = :TYPENAME and RLRECORDID = :RECORDID into :CURRENTSESSIONID, :CURRENTLOCKTIME, :CURRENTSERVERID;
    if (currentlocktime IS NULL) then
    begin
        insert into recordlocks (rltypename, rlrecordid, rlsessionid, rllocktime, rlserverid) values (:TYPENAME, :RECORDID, :SESSIONID, current_timestamp, :serverid);
        ok = 2;
    end else if ((currentsessionid = sessionid) and (currentserverid = serverid)) then
    begin
      update recordlocks set rllocktime = current_timestamp where rltypename = :TYPENAME and rlrecordid = :recordid;
      ok = 1;
    end else
    begin
      ok = 3;
    end
  end
  RESULT = OK;
end

 

     Previous topic Chapter index Next topic