File: DBStoragePagetags.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Last edited by:
MBrown on September 26, 1980 11:30 AM
Cattell on January 14, 1983 2:04 pm
Willie-Sue, February 15, 1985 11:09:19 am PST
Widom, July 16, 1985 3:35:57 pm PDT
DIRECTORY
DB USING [InternalError];
DBStoragePagetags:
CEDAR
DEFINITIONS
IMPORTS
DB =
BEGIN
This interface defines the values of the page tags found on all pages in the system. One
purpose of having a uniform page tag convention is to aid the scavenger. The page tag is stored
in the first byte of each page. The other byte of the first word is uncommitted. The PageHeader
declaration below is included for purposes of illustration:
PageHeader:
TYPE =
MACHINE
DEPENDENT
RECORD[
pageTag: CARDINAL [0..256),
dontCare: CARDINAL [0..256)
]; -- PageHeader
First word of a page.
Page tag values.
Unused: CARDINAL = 0; -- unused page, obtained by extending Juniper file
Free: CARDINAL = 1; -- page on segment or local free list
AMap: CARDINAL = 2; -- page used to store segment address-map values
Tuple: CARDINAL = 3; -- page used to store tuples
SystemTuple: CARDINAL = 4; -- page used to store system tuples
OverflowTuple: CARDINAL = 5; -- page used to store overflow tuples & long strings
BTree: CARDINAL = 6; -- page used to store part of a B-tree
in future: HashTable, BitVector, etc...
AssertPageIsTuplePage:
PROC[p:
LONG
POINTER] =
TRUSTED INLINE {
SELECT
LOOPHOLE[p,
LONG
POINTER
TO PageHeader].pageTag
FROM
Tuple => {};
ENDCASE => ERROR DB.InternalError; -- BadPageTag
}; -- AssertPageIsTuplePage
AssertPageIsSystemTuplePage:
PROC[p:
LONG
POINTER] =
TRUSTED INLINE {
SELECT
LOOPHOLE[p,
LONG
POINTER
TO PageHeader].pageTag
FROM
SystemTuple => {};
ENDCASE => ERROR DB.InternalError; -- BadPageTag
}; -- AssertPageIsSystemTuplePage
AssertPageIsAnyTuplePage:
PROC[p:
LONG
POINTER] =
TRUSTED INLINE {
SELECT
LOOPHOLE[p,
LONG
POINTER
TO PageHeader].pageTag
FROM
Tuple, SystemTuple => {};
ENDCASE => ERROR DB.InternalError; -- BadPageTag
}; -- AssertPageIsAnyTuplePage
AssertPageIsOverflowTuplePage:
PROC[p:
LONG
POINTER] =
TRUSTED INLINE {
SELECT
LOOPHOLE[p,
LONG
POINTER
TO PageHeader].pageTag
FROM
OverflowTuple => {};
ENDCASE => ERROR DB.InternalError; -- BadPageTag
}; -- AssertPageIsOverflowTuplePage
END. -- DBStoragePagetags
Module History
Created by MBrown on February 15, 1980 11:08 AM
Changed by MBrown on July 9, 1980 9:50 PM
Added AssertPageIsTuplePage, AssertPageIsSystemTuplePage, AssertPageIsAnyTuplePage.
Changed by MBrown on August 13, 1980 4:51 PM
Added AssertPageIsOverflowTuplePage.
Changed by MBrown on September 26, 1980 11:29 AM
Change to new DBException.
Changed by Willie-Sue on February 14, 1985
Made Cedar, added tioga formatting