Prozeduren Previous topic Chapter index Next topic

RELEASE_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: Es wurde nichts gemacht
1: Es gibt keinen Lock auf den Record
2: Es gibt einen Lock auf den Record, aber dieser gehört einer fremden Session

 

Beschreibung

Entfernt bei den DABiS Premium Modulen den Lock von einem bestimmten Datensatz, wenn der Datensatz für eine bestimmte Session/Server-Kombination reserviert wurde.

 

Definition

CREATE PROCEDURE RELEASE_RECORD_SESSION(
    TYPENAME VARCHAR(100),
    RECORDID INTEGER,
    SESSIONID VARCHAR(255),
    SERVERID VARCHAR(100))
RETURNS (
    RESULT SMALLINT)
AS
declare variable CURRENTSERVERID varchar(100);
declare variable CURRENTSESSIONID varchar(255);
declare variable CURRENTLOCKTIME date;
declare variable CURRENTRECORDID integer;
begin
  /* entfernt den lock von einem bestimmten datensatz,
     wenn der datensatz fuer eine bestimmte session/server-
   kombination reserviert wurde. */

  result = 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
        /* es gibt keinen lock auf den record:
           es gibt daher nichts zu loeschen, aber auch keinen fehler */
        result = 1;
    end else if ((currentsessionid = sessionid) and (currentserverid = serverid)) then
    begin
      delete from recordlocks where rltypename = :typename and rlrecordid = :recordid;
      result = 1;
    end else
    begin
      /* es gibt einen lock auf den record, aber dieser gehoert einer
         fremden session > fehler, loeschen verboten */
      result = 2;
    end

  end

end

 

     Previous topic Chapter index Next topic