Class LeafControlRow
- java.lang.Object
-
- org.apache.derby.impl.store.access.btree.ControlRow
-
- org.apache.derby.impl.store.access.btree.LeafControlRow
-
- All Implemented Interfaces:
TypedFormat
,AuxObject
public class LeafControlRow extends ControlRow
Format ID ACCESS_BTREE_LEAFCONTROLROW_V1_ID Purpose Btree pages all have a control row at the front of every page. To determine the type of row, read the first column which is a format id and it tells what kind of control row it is. Upgrade This format was made obsolete in the kimono release. Disk Layout column 1 - control row type : StorableFormatId column 2 - left sibling page number : SQLLongint column 3 - right sibling page number: SQLLongint column 4 - parent page number : SQLLongint column 5 - level number (0 is leaf) : SQLLongint column 6 - isRoot : SQLLongint column 7 - Conglomerate object : null unless it is root else a Conglomerate object, matching that of current table. Currently this field is only used by logical undo and the type of object is inferred by the logical undo code.
-
-
Field Summary
-
Fields inherited from class org.apache.derby.impl.store.access.btree.ControlRow
CR_COLID_FIRST, CR_COLID_LAST, CR_CONGLOM_BITSET, CR_CONGLOM_COLID, CR_ISROOT_BITSET, CR_ISROOT_COLID, CR_LEFTSIB_BITSET, CR_LEFTSIB_COLID, CR_LEVEL_BITSET, CR_LEVEL_COLID, CR_NCOLUMNS, CR_PARENT_BITSET, CR_PARENT_COLID, CR_RIGHTSIB_BITSET, CR_RIGHTSIB_COLID, CR_SLOT, CR_VERSION_BITSET, CR_VERSION_COLID, fetchDesc, last_search_result, page, row, scratch_row, SPLIT_FLAG_FIRST_IN_TABLE, SPLIT_FLAG_FIRST_ON_PAGE, SPLIT_FLAG_LAST_IN_TABLE, SPLIT_FLAG_LAST_ON_PAGE, use_last_search_result_hint
-
-
Constructor Summary
Constructors Constructor Description LeafControlRow()
No arg constructor.LeafControlRow(OpenBTree btree, Page page, ControlRow parent, boolean isRoot)
Constructs a leaf-page control row, for a newly allocated leaf page.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static LeafControlRow
allocate(OpenBTree btree, ControlRow parent)
Allocate a new leaf page to the conglomerate.int
checkConsistency(OpenBTree btree, ControlRow parent, boolean check_other_pages)
Perform consistency checks on a leaf page.protected void
controlRowInit()
Perform page specific initialization.private float
get_left_nondeleted_rowcnt(int startslot)
Return the number of non-deleted rows from slot 1 through "startslot"protected ControlRow
getLeftChild(OpenBTree btree)
Return the left child pointer for the page.protected int
getNumberOfControlRowColumns()
Get the number of columns in the control row.protected ControlRow
getRightChild(OpenBTree btree)
Return the right child pointer for the page.int
getTypeFormatId()
Return my format identifier.private static void
growRoot(OpenBTree open_btree, DataValueDescriptor[] template, LeafControlRow leafroot)
Grow a new root page from a leaf page.static void
initEmptyBtree(OpenBTree open_btree)
Initialize conglomerate with one page, to be a 1 page btree.boolean
isLeftmostLeaf()
Is the current page the leftmost leaf of tree?boolean
isRightmostLeaf()
Is the current page the rightmost leaf of tree?void
printTree(OpenBTree btree)
Recursively print the tree starting at current node in tree.ControlRow
search(SearchParameters sp)
Perform a search of this leaf page, ultimately returning the latched leaf page and row slot after which the given key belongs.protected ControlRow
searchLeft(OpenBTree btree)
Search and return the left most leaf page.protected ControlRow
searchRight(OpenBTree btree)
Search and return the right most leaf page.protected boolean
shrinkFor(OpenBTree btree, DataValueDescriptor[] key)
Perform a recursive shrink operation for the key.protected long
splitFor(OpenBTree open_btree, DataValueDescriptor[] template, BranchControlRow parent_page, DataValueDescriptor[] splitrow, int flag)
Perform a top down split pass making room for the the key in "row".-
Methods inherited from class org.apache.derby.impl.store.access.btree.ControlRow
auxObjectInvalidated, checkGeneric, checkRowOrder, checkSiblings, compareIndexRowFromPageToKey, compareIndexRowToKey, compareRowsOnSiblings, debugPage, get, get, getConglom, getControlRowForPage, getIsRoot, getLeftSibling, getleftSiblingPageNumber, getLevel, getNoWait, getPage, getParentPageNumber, getRightSibling, getrightSiblingPageNumber, getRow, getRowTemplate, getVersion, linkRight, release, searchForEntry, searchForEntryBackward, setIsRoot, setLeftSibling, setLevel, setParent, setRightSibling, setVersion, toString, unlink
-
-
-
-
Constructor Detail
-
LeafControlRow
public LeafControlRow()
No arg constructor.Public no arg constructor is for the monitor to call for format id implemenation, it should not be called for any other reason.
-
LeafControlRow
LeafControlRow(OpenBTree btree, Page page, ControlRow parent, boolean isRoot) throws StandardException
Constructs a leaf-page control row, for a newly allocated leaf page.- Parameters:
btree
- The open btree to allocate this page from.page
- The newly allocated page where the control row will be inserted.parent
- The parent of the leaf page. Set to null for root. RESOLVE (mikem) - set to null otherwise?isRoot
- Is this page the root of the tree?- Throws:
StandardException
- Standard exception policy.
-
-
Method Detail
-
allocate
private static LeafControlRow allocate(OpenBTree btree, ControlRow parent) throws StandardException
Allocate a new leaf page to the conglomerate.- Parameters:
btree
- The open conglomerate from which to get the leaf fromparent
- The parent page of the newly allocated page, null if allocating root page.- Throws:
StandardException
- Standard exception policy.
-
get_left_nondeleted_rowcnt
private float get_left_nondeleted_rowcnt(int startslot) throws StandardException
Return the number of non-deleted rows from slot 1 through "startslot"Return the number of non-deleted rows that exist on the page starting at slot one through "startslot".
RESOLVE (mikem) - is the expense of this routine worth it, it is only used for costing. Could an estimate from the nonDeletedRecordCount() be used instead?
- Parameters:
startslot
- Count non deleted row up to and including this slot.- Returns:
- The requested non_deleted_row_count.
- Throws:
StandardException
- Standard exception policy.
-
controlRowInit
protected final void controlRowInit()
Perform page specific initialization.- Specified by:
controlRowInit
in classControlRow
-
initEmptyBtree
public static void initEmptyBtree(OpenBTree open_btree) throws StandardException
Initialize conglomerate with one page, to be a 1 page btree. Given a conglomerate which already has one page allocated to it, initialize the page to be a leaf-root page with no entries. Allocate the control row and store it on the page.- Parameters:
open_btree
- The open btree to initialize (container is open).- Throws:
StandardException
- Standard exception policy.
-
getNumberOfControlRowColumns
protected final int getNumberOfControlRowColumns()
Get the number of columns in the control row.Control rows all share the first columns as defined by this class and then add columns to the end of the control row. For instance a branch control row add a child page pointer field.
- Specified by:
getNumberOfControlRowColumns
in classControlRow
- Returns:
- The total number of columns in the control row.
-
isLeftmostLeaf
public boolean isLeftmostLeaf() throws StandardException
Is the current page the leftmost leaf of tree?- Specified by:
isLeftmostLeaf
in classControlRow
- Returns:
- true if the current page is the leftmost leaf of the tree, else return false.
- Throws:
StandardException
- Standard exception policy.
-
isRightmostLeaf
public boolean isRightmostLeaf() throws StandardException
Is the current page the rightmost leaf of tree?- Specified by:
isRightmostLeaf
in classControlRow
- Returns:
- true if the current page is the rightmost leaf of the tree, else return false.
- Throws:
StandardException
- Standard exception policy.
-
search
public ControlRow search(SearchParameters sp) throws StandardException
Perform a search of this leaf page, ultimately returning the latched leaf page and row slot after which the given key belongs. The slot is returned in the result structure. If the key exists on the page, the result.exact will be true. Otherwise, result.exact will be false, and the row slot returned will be the one immediately preceding the position at which the key belongs.- Specified by:
search
in classControlRow
- Throws:
StandardException
- Standard exception policy.
-
searchLeft
protected ControlRow searchLeft(OpenBTree btree) throws StandardException
Search and return the left most leaf page.Perform a recursive search, ultimately returning the leftmost leaf page which is the first leaf page in the leaf sibling chain. (This method might better be called getFirstLeafPage()).
- Specified by:
searchLeft
in classControlRow
- Parameters:
btree
- The open btree to associate latches/locks with.- Returns:
- The leftmost leaf page.
- Throws:
StandardException
- Standard exception policy.
-
searchRight
protected ControlRow searchRight(OpenBTree btree) throws StandardException
Search and return the right most leaf page.Perform a recursive search, ultimately returning the rightmost leaf page which is the last leaf page in the leaf sibling chain. (This method might better be called getLastLeafPage()).
- Specified by:
searchRight
in classControlRow
- Parameters:
btree
- The open btree to associate latches/locks with.- Returns:
- The rightmost leaf page.
- Throws:
StandardException
- Standard exception policy.
-
shrinkFor
protected boolean shrinkFor(OpenBTree btree, DataValueDescriptor[] key) throws StandardException
Perform a recursive shrink operation for the key. If this method returns true, the caller should remove the corresponding entry for the page. This routine is not guaranteed to successfully shrink anything. The page lead to by the key might turn out not to be empty by the time shrink gets there, and shrinks will give up if there is a deadlock.The receiver page must be latched on entry and is returned unlatched.
- Specified by:
shrinkFor
in classControlRow
- Throws:
StandardException
- Standard exception policy.
-
splitFor
protected long splitFor(OpenBTree open_btree, DataValueDescriptor[] template, BranchControlRow parent_page, DataValueDescriptor[] splitrow, int flag) throws StandardException
Perform a top down split pass making room for the the key in "row".Perform a split such that a subsequent call to insert given the argument index row will likely find room for it. Since latches are released the client must code for the case where another user has grabbed the space made available by the split pass and be ready to do another split.
On entry, the parent is either null or latched, and the current page is latched. On exit, all pages will have been unlatched. If the parent is null, then this page is a root leaf page.
- Specified by:
splitFor
in classControlRow
- Parameters:
open_btree
- The open btree to associate latches with.template
- A scratch area to use while searching for split pass.parent_page
- The parent page of the current page in the split pass. starts at null for root.splitrow
- The key to make room for during the split pass.flag
- A flag used to direct where point of split should be chosen.- Returns:
- page number of the newly allocated leaf page created by split.
- Throws:
StandardException
- Standard exception policy.
-
growRoot
private static void growRoot(OpenBTree open_btree, DataValueDescriptor[] template, LeafControlRow leafroot) throws StandardException
Grow a new root page from a leaf page. Slightly tricky because we want to retain page 0 as the root.On entry, the current leaf root page is expected to be latched. On exit, all latches will have been released.
The caller cannot not assume success. If we have to release latches this routine just returns and assumes the caller will retry the grow root if necessary.
- Throws:
StandardException
-
getLeftChild
protected ControlRow getLeftChild(OpenBTree btree) throws StandardException
Return the left child pointer for the page.Leaf pages don't have children, so they override this and return null.
- Specified by:
getLeftChild
in classControlRow
- Parameters:
btree
- The open btree to associate latches/locks with.- Returns:
- The page which is the leftmost child of this page.
- Throws:
StandardException
- Standard exception policy.
-
getRightChild
protected ControlRow getRightChild(OpenBTree btree) throws StandardException
Return the right child pointer for the page.Leaf pages don't have children, so they override this and return null.
- Specified by:
getRightChild
in classControlRow
- Parameters:
btree
- The open btree to associate latches/locks with.- Returns:
- The page which is the rightmost child of this page.
- Throws:
StandardException
- Standard exception policy.
-
checkConsistency
public int checkConsistency(OpenBTree btree, ControlRow parent, boolean check_other_pages) throws StandardException
Perform consistency checks on a leaf page. Check consistency of the page and its children, returning the number of pages seen, and throwing errors if inconsistencies are found. The checks specific to a leaf page are: This method also performs the consistency checks that are common to both leaf and branch pages.- Specified by:
checkConsistency
in classControlRow
- Parameters:
btree
- The open btree to associate latches/locks with.parent
- The parent page of this page, "null" if this page is root or if not maintaining parent links.check_other_pages
- Should the consistency check go to other pages (this option breaks the latch protocol).- Returns:
- The identifier to be used to open the conglomerate later.
- Throws:
StandardException
- Standard exception policy.- See Also:
ControlRow.checkGeneric(org.apache.derby.impl.store.access.btree.OpenBTree, org.apache.derby.impl.store.access.btree.ControlRow, boolean)
-
printTree
public void printTree(OpenBTree btree) throws StandardException
Recursively print the tree starting at current node in tree. This is a leaf so return.- Specified by:
printTree
in classControlRow
- Throws:
StandardException
- Standard exception policy.
-
getTypeFormatId
public int getTypeFormatId()
Return my format identifier.- Returns:
- The identifier. (A UUID stuffed in an array of 16 bytes).
- See Also:
TypedFormat.getTypeFormatId()
-
-