-- File DBStorageTuple.mesa
-- Last edited by
--   MBrown on December 3, 1982 9:14 pm
--   Cattell on November 4, 1983 2:27 am


  DIRECTORY
    DBCache USING [CacheHandle],
    DBCommon USING [Segment],
    DBStorage USING [TupleHandle],
    DBStorageTID USING [TID];

DBStorageTuple: DEFINITIONS = BEGIN
  -- This interface defines a collection of operations on DBStorage.TupleObjects that
  --may be used by storage-level modules that don't export DBStorage.TupleObject.
  -- Some modules export DBStorage.TupleObject simply to get read access to the TID without
  --the cost of a procedure call, and use these procedures for other accesses.

  Init: PROC [freeTuples: NAT];
    -- Called from DBStorage.Initialize.  Allocate a free pool of freeTuples tuples.

  ConsTupleObject: PROC [tid: DBStorageTID.TID, cacheHint: DBCache.CacheHandle ← NIL]
   RETURNS [DBStorage.TupleHandle];
    -- Returns a handle for a new tuple object with the given tid and cacheHint.

  TIDOfTuple: PROC [x: DBStorage.TupleHandle] RETURNS [DBStorageTID.TID];
    -- Returns the TID of x.

  EqualTuple: PROC [x, y: DBStorage.TupleHandle] RETURNS [BOOLEAN];
    -- Returns TIDOfTuple[x] = TIDOfTuple[y].
    
  NullTupleHandle: PROC [] RETURNS [DBStorage.TupleHandle];
    -- Returns a TupleHandle x such that TIDOfTuple[x] = NullTID.
    -- No caller should modify the contents of this TupleObject in any way!!!

  InvalidateMatchingTuples: PROC [x: DBStorage.TupleHandle];
    -- For all tuple handles y on active list such that y.tid = x.tid, makes y.tid=NullTID.

  IsValidTuple: PROC [x: DBStorage.TupleHandle] RETURNS [valid: BOOL];
    -- IF DBSegment.IsValidTID[x.tid] THEN RETURN [valid: TRUE]
    -- ELSE { x.tid ← NullTID;  RETURN [valid: FALSE] }

  InvalidateTuple: PROC [x: DBStorage.TupleHandle];
    -- x.tid ← NullTID

  CallAfterFinishTransaction: PROC [s: DBCommon.Segment];
    -- Invalidates (by setting tid = NullTID, cacheHint = NIL) all TupleObjects on the active
    -- list that reference segment s.

  PrintTupleObject: PROC [t: DBStorage.TupleHandle];
    -- Prints t to debug stream, without a terminating CR.

  CheckState: PROC [doPrinting: BOOLEAN ← FALSE];
    -- Checks internal state of tuple manager;  if doPrinting, also prints contents
    --of tuple manager to debug stream.

END.--DBStorageTuple


CHANGE LOG

Created by MBrown on June 10, 1980  8:14 PM
-- Moved TIDOfTupleHandle here from DBStoragePrivateA, defined other apparently useful procs.

Changed by MBrown on July 9, 1980  4:32 PM
-- Added Invalidate, for use by tuple deletion.

Changed by MBrown on August 4, 1980  10:25 PM
-- Added ReInitialize, for use by CloseDatabase.

Changed by MBrown on August 14, 1980  2:34 PM
-- Added CheckState, for debugging convenience.

Changed by MBrown on August 20, 1980  8:58 PM
-- Added PrintTupleObject.

Changed by MBrown on September 12, 1980  2:32 PM
-- Added Finalize.

Changed by MBrown on 9-Jun-81 16:20:30
-- Conversion to collectable storage: flushed CopyTupleObject, FreeTupleObject,
--Finalize.  Added NullTupleHandle.  Fixed comments about function of ReInitialize.

Changed by MBrown on December 2, 1982 2:44 pm
-- Added CallAfterFinishTransaction; flushed ReInitialize.