Page: TYPE = DBIndex.Page;
State: TYPE = DBIndex.State;
IndexKey: TYPE = DBIndex.IndexKey;
OverFlow: PROC [p: Page, key: IndexKey] RETURNS [BOOLEAN];
EntrySize:
PROC [p: Page, i:
CARDINAL]
RETURNS [
CARDINAL];
Returns the size of the entry: key plus value
SplitPage:
PROC [p: Page, loc:
CARDINAL, insertSize:
INTEGER]
RETURNS [splitLoc: CARDINAL, splitKey: IndexKey, overflow: Page];
SplitLeaf:
PROC [p: Page, key: IndexKey, value:
LONG
CARDINAL]
RETURNS [Page, IndexKey];
The page overflows if we insert <key, value> pair. We allocate
a page to the right of p and moves contents, and insert
<key, value> at the same time.
SplitInternal:
PROC [p: Page, insertLoc:
CARDINAL, key: IndexKey, value:
LONG
CARDINAL]
RETURNS [Page, IndexKey];
InsertInInternalPage:
PROC [
p: Page, i: CARDINAL, newPage: LONG CARDINAL, newKey: IndexKey]
RETURNS [State, Page, IndexKey];
DeleteFromLeafPage:
PROC [p: Page, key: IndexKey, tid: DBStorageInternal.
TID]
RETURNS [State, Page, IndexKey];
MergeInLeafPage:
PROC [p: Page, son: Page, index:
CARDINAL]
RETURNS [State, Page, IndexKey];
ChangeKey:
PROC[p: Page, newKey: IndexKey, index:
CARDINAL]
RETURNS[state: State, overflow: Page, key: IndexKey];
Sets indexed key in leaf page p to be newKey.
MoveScanIndexLeft:
PUBLIC
PROC [from, to: Page, nentries:
CARDINAL];
"from" is to the right of "to"
moves the first "nentries" in "from" to "to"
MoveScanIndexRight:
PUBLIC
PROC [from, to: Page, after:
CARDINAL];
moves the scan index on "from" to "to", if the index
is greater than "after"
"to" is empty
DecrementScanIndex:
PROC [page: Page, atOrAfter:
CARDINAL];
Decrements any effected scan indices by one, if they are on "page" with index
greater or equal to "atOrAfter"
IncrementScanIndex:
PUBLIC
PROC [
page: Page, atOrAfter: CARDINAL, howMuch: CARDINAL← 1];
Increments any effected scan indices by howMuch, if they are on "page" with index
greater or equal to "atOrAfter"
}.
By Cattell September 22, 1982 9:20 am: Re-organized DBIndex interfaces for isolating page writes. Moved some procs from here to DBIndexMod.