-- File: DBStorageInternalImpl.mesa
-- Last edited by MBrown on 17-Jun-81 10:33:47
-- Last Edited by: Cattell, January 16, 1983 11:45 am
DIRECTORY
DBCache USING[CacheHandle],
DBCommon USING[DBPage],
DBEnvironment USING[InternalError],
DBHeapStorage USING[Free],
DBSegment USING[SegmentIDFromDBPage],
DBStorage USING[TupleHandle, IndexObjectSize, ReadNWord, WriteNWord],
DBStorageField USING[TuplesetFieldHandle],
DBStorageInternal USING[TupleTree, TupleTreeRecord, TID],
DBStorageTID USING[TID, DecomposeTID],
DBStorageTuple USING[ConsTupleObject, TIDOfTuple];
DBStorageInternalImpl: PROGRAM
IMPORTS
DBEnvironment,
DBHeapStorage,
DBSegment,
DBStorage,
DBStorageField,
DBStorageTID,
DBStorageTuple
EXPORTS
DBStorageInternal
= BEGIN OPEN DBStorageTID;
-- This module implements DBStorageInternal.
ReadIndexObject: PUBLIC PROC[t: DBStorage.TupleHandle, result: DBStorageInternal.TupleTree] = {
-- PARAMETERS: t is an index tuple, i.e. a tuple whose first field is an index object;
--result points to a TupleTreeRecord that may be overwritten.
-- EFFECTS: the index object contained in tuple t is written into result.
tmp: DBStorageInternal.TupleTree;
IF SIZE[DBStorageInternal.TupleTreeRecord] > DBStorage.IndexObjectSize THEN
ERROR DBEnvironment.InternalError; -- [Unknown];
tmp ← DBStorage.ReadNWord[t, DBStorageField.TuplesetFieldHandle[]]; --LOOPHOLE
result↑ ← tmp↑;
DBHeapStorage.Free[tmp];
};--ReadIndexObject
WriteIndexObject: PUBLIC PROC[t: DBStorage.TupleHandle, val: DBStorageInternal.TupleTree] = {
-- PARAMETERS: an index tuple, i.e. a tuple whose first field is an index object,
--and a value for such and object.
-- EFFECTS: writes the value val into the index object field of tuple t.
--Does NOT deallocate val.
tmp: ARRAY [0..DBStorage.IndexObjectSize) OF CARDINAL ← ALL[0];
IF SIZE[DBStorageInternal.TupleTreeRecord] > DBStorage.IndexObjectSize THEN
ERROR DBEnvironment.InternalError; -- [Unknown];
LOOPHOLE[@tmp, DBStorageInternal.TupleTree]↑ ← val↑;
DBStorage.WriteNWord[t, DBStorageField.TuplesetFieldHandle[], @tmp];
};--WriteIndexObject
SegmentIDOfTuple: PUBLIC PROC[t: DBStorage.TupleHandle] RETURNS[--segmentID--DBCommon.DBPage] = {
-- RESULTS: the "segment ID" of the segment that contains tuple t.
dbPage: DBCommon.DBPage;
[dbPage,] ← DecomposeTID[TIDOfTuple[t]];
RETURN[DBSegment.SegmentIDFromDBPage[dbPage]];
};--SegmentIDOfTuple
TIDOfTuple: PUBLIC PROC[t: DBStorage.TupleHandle] RETURNS[DBStorageInternal.TID] = {
-- RESULTS: the TID of tuple t (suitable for storing in an index).
RETURN[DBStorageTuple.TIDOfTuple[t]];
};--TIDOfTuple
MakeTupleHandle: PUBLIC PROC[tid: DBStorageInternal.TID, cacheHint: DBCache.CacheHandle ← NIL]
RETURNS[DBStorage.TupleHandle] = {
-- RESULTS: a tuple handle that contains the given TID and CacheHandle.
RETURN[DBStorageTuple.ConsTupleObject[tid: tid, cacheHint: cacheHint]];
};--MakeTupleHandle
END.--StorageInternalImpl
CHANGE LOG
Created by MBrown on 9-May-80 10:54
Changed by MBrown on June 8, 1980 9:35 PM
-- Changed to use DBStorageField.
Changed by MBrown on June 11, 1980 3:53 PM
-- Changed to use DBStorageTuple.
Changed by MBrown on September 26, 1980 4:35 PM
-- Converted to new DBException.
Changed by MBrown on February 27, 1981 5:25 PM
-- Pre-Pilot changes.
Changed by MBrown on 17-Jun-81 10:32:40
-- ReleaseTupleHandle is now a no-op, remove from here and make INLINE in interface.