File: DBStorageInternalImpl.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Last edited by MBrown on 17-Jun-81 10:33:47
Last Edited by: Cattell, September 29, 1983 6:43 pm
Donahue, September 5, 1985 4:20:41 pm PDT
Willie-Sue, February 15, 1985 3:28:06 pm PST
Widom, September 3, 1985 6:29:56 pm PDT
DIRECTORY
DB USING [InternalError],
DBCommon USING[DBPage, CacheHandle],
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: CEDAR PROGRAM
IMPORTS
DB,
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.
IF SIZE[DBStorageInternal.TupleTreeRecord] > DBStorage.IndexObjectSize THEN
ERROR DB.InternalError;
DBStorage.ReadNWord[t, DBStorageField.TuplesetFieldHandle[], result];
};--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.
IF SIZE[DBStorageInternal.TupleTreeRecord] # DBStorage.IndexObjectSize THEN
ERROR DB.InternalError;
DBStorage.WriteNWord[t, DBStorageField.TuplesetFieldHandle[], val];
};--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: DBCommon.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.
Changed by Willie-Sue on February 15, 1985
made Cedar, added tioga formatting.