| java.lang.Object org.apache.derby.impl.store.access.btree.ControlRow
All known Subclasses: org.apache.derby.impl.store.access.btree.LeafControlRow, org.apache.derby.impl.store.access.btree.BranchControlRow,
ControlRow | abstract public class ControlRow implements AuxObject,TypedFormat(Code) | | Base class for leaf and branch control rows.
Concurrency Notes
All access through control rows is serialized by an exclusive latch on
the page the control row is for. The page is latched when the control
row is "gotten" (ControlRow#Get), and unlatched when the control row
is released (ControlRow#release).
To Do List
|
Method Summary | |
public static int | CompareIndexRowFromPageToKey(ControlRow indexpage, int slot, DataValueDescriptor[] indexrow, DataValueDescriptor[] key, int nCompareCols, int partialKeyOrder, boolean[] ascOrDesc) Compare two orderable rows, considering nCompareCols, and return -1, 0, or 1
depending on whether the first row (indexrow) is less than, equal to, or
greater than the second (key). | public static int | CompareIndexRowToKey(DataValueDescriptor[] indexrow, DataValueDescriptor[] key, int nCompareCols, int partialKeyOrder, boolean[] ascOrDesc) | abstract protected void | ControlRowInit() Perform page specific initialization. | public static ControlRow | Get(OpenBTree open_btree, long pageNumber) Get the control row from the given page in the b-tree. | public static ControlRow | Get(ContainerHandle container, long pageNumber) | protected static ControlRow | GetControlRowForPage(ContainerHandle container, Page page) | public static ControlRow | GetNoWait(OpenBTree open_btree, long pageNumber) Get the control row for the given page if the latch on the
page can be obtained without waiting, else return null. | public void | auxObjectInvalidated() | abstract protected int | checkConsistency(OpenBTree btree, ControlRow parent, boolean check_other_pages) Check consistency of the page and its children, returning the number of
pages seen, and throwing errors if inconsistencies are found. | protected void | checkGeneric(OpenBTree btree, ControlRow parent, boolean check_other_pages) Perform consistency checks which are common to all
pages that derive from ControlRow (both leaf and
branch pages). | protected boolean | checkRowOrder(OpenBTree btree, ControlRow parent) Check that all rows on the page are in order. | protected void | checkSiblings(OpenBTree btree) Perform checks on the siblings of this page: make sure
that they're at the same level as this page, that they're
mutually linked together, and that the first/last keys
on sibling pages are in order. | protected boolean | compareRowsOnSiblings(OpenBTree btree, ControlRow left_sib, ControlRow right_sib) | public String | debugPage(OpenBTree open_btree) Dump complete information about control row and rows on the page. | public BTree | getConglom(int format_id) Get format id information for row on page.
Returns the format id information for a row on the page. | protected boolean | getIsRoot() | abstract protected ControlRow | getLeftChild(OpenBTree btree) Return the left child pointer for the page. | public ControlRow | getLeftSibling(OpenBTree btree) Get the control row for this page's left sibling, or null if there is no
left sibling (which probably means it's the leftmost page at its level). | protected int | getLevel() | abstract protected int | getNumberOfControlRowColumns() Get the number of columns in the control row. | public Page | getPage() | protected long | getParentPageNumber() Get the page number of the parent, if it's being maintained. | abstract protected ControlRow | getRightChild(OpenBTree btree) Return the right child pointer for the page. | protected ControlRow | getRightSibling(OpenBTree open_btree) Return the control row for this page's right sibling. | final protected DataValueDescriptor[] | getRow() Get the row. | public DataValueDescriptor[] | getRowTemplate(OpenBTree open_btree) Return a new template for reading a data row from the current page. | protected int | getVersion() Get version of the control row. | public long | getleftSiblingPageNumber() Get the page number of the left sibling. | protected long | getrightSiblingPageNumber() Get the page number of the right sibling. | abstract public boolean | isLeftmostLeaf() | abstract public boolean | isRightmostLeaf() | void | linkRight(OpenBTree btree, ControlRow target) Link this page to the right of the target page.
Upon entry, this page and the target must be
latched. | abstract public void | printTree(OpenBTree btree) Recursively print the tree starting at current node in tree. | public void | release() Release this control row's resources. | abstract public ControlRow | search(SearchParameters search_params) Perform a recursive search, ultimately returning the latched
leaf page and row slot after which the given key belongs.
The slot is returned in the result structure. | protected void | searchForEntry(SearchParameters params) Search this index page.
This method is very performance sensitive. | protected void | searchForEntryBackward(SearchParameters params) | abstract protected ControlRow | searchLeft(OpenBTree btree) 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. | abstract protected ControlRow | searchRight(OpenBTree btree) 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. | protected void | setIsRoot(boolean isRoot) | protected void | setLeftSibling(ControlRow leftsib) | protected void | setLevel(int newlevel) | void | setParent(long parent) | protected void | setRightSibling(ControlRow rightsib) | protected void | setVersion(int version) Set version of the control row.
Sets the version of the control row. | abstract protected boolean | shrinkFor(OpenBTree btree, DataValueDescriptor[] key) 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. | abstract protected long | splitFor(OpenBTree open_btree, DataValueDescriptor[] template, BranchControlRow parentpage, DataValueDescriptor[] row, int flag) 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. | public String | toString() The standard toString(). | boolean | unlink(OpenBTree btree) Unlink this page from its siblings. |
CR_COLID_FIRST | final protected static int CR_COLID_FIRST(Code) | | Column number assignments for columns of the control row.
The control row is stored as the first row in a btree page. The row
is an array of columns. The Control row columns are the columns numbered
from ControlRow.CR_COLID_FIRST through ControlRow.CR_COLID_LAST. The
classes which implement the concrete derived classes of ControlRow may
add columns to the control row, but they must be added after the
ControlRow columns.
|
CR_COLID_LAST | final protected static int CR_COLID_LAST(Code) | | |
CR_CONGLOM_COLID | final protected static int CR_CONGLOM_COLID(Code) | | |
CR_ISROOT_COLID | final protected static int CR_ISROOT_COLID(Code) | | |
CR_LEFTSIB_COLID | final protected static int CR_LEFTSIB_COLID(Code) | | |
CR_LEVEL_COLID | final protected static int CR_LEVEL_COLID(Code) | | |
CR_NCOLUMNS | final protected static int CR_NCOLUMNS(Code) | | |
CR_PARENT_COLID | final protected static int CR_PARENT_COLID(Code) | | |
CR_RIGHTSIB_COLID | final protected static int CR_RIGHTSIB_COLID(Code) | | |
CR_SLOT | final protected static int CR_SLOT(Code) | | The slot at which all control rows reside.
|
CR_VERSION_BITSET | final protected static FormatableBitSet CR_VERSION_BITSET(Code) | | bit sets used to fetch single columns at a time.
|
CR_VERSION_COLID | final protected static int CR_VERSION_COLID(Code) | | |
SPLIT_FLAG_FIRST_IN_TABLE | final public static int SPLIT_FLAG_FIRST_IN_TABLE(Code) | | |
SPLIT_FLAG_FIRST_ON_PAGE | final public static int SPLIT_FLAG_FIRST_ON_PAGE(Code) | | |
SPLIT_FLAG_LAST_IN_TABLE | final public static int SPLIT_FLAG_LAST_IN_TABLE(Code) | | |
SPLIT_FLAG_LAST_ON_PAGE | final public static int SPLIT_FLAG_LAST_ON_PAGE(Code) | | Values passed in the flag argument to splitFor.
|
fetchDesc | protected FetchDescriptor fetchDesc(Code) | | FetchDescriptor used to replace fetchFieldFromSlot() calls.
|
last_search_result | protected transient int last_search_result(Code) | | In memory hint about where to begin the binary search to find a key
on the the current control page.
|
page | protected Page page(Code) | | The page that this control row describes.
|
use_last_search_result_hint | protected transient boolean use_last_search_result_hint(Code) | | In memory hint about whether to use the last_search_result hint during
search.
|
ControlRow | protected ControlRow()(Code) | | No arg constructor.
GetControlRowForPage() will call this constructor when it uses the
monitor to create a control row dynamically given a given format id.
|
ControlRow | protected ControlRow(OpenBTree btree, Page page, int level, ControlRow parent, boolean isRoot) throws StandardException(Code) | | Constructor for making a new control row as part of allocating a new
page. Fills in all the fields but does not write them anywhere.
Changes to this constructor will probably require changes to the
corresponding accessor(s).
Parameters: btree - Static information about the btree. Parameters: page - The page described by this control row. Parameters: parent - The parent page of this page, "null" if this page is root or if not maintaining parent links. Parameters: isRoot - Is this page the root of the tree? exception: StandardException - Standard exception policy. |
ControlRow | protected ControlRow(ContainerHandle container, Page page) throws StandardException(Code) | | Constructor for making a control row for an existing page.
Not all the fields are filled in; their values will get faulted in from
the page as necessary.
Classes which extend ControlRow must delegate to this constructor
and may want to override it as well.
Changes to this constructor will probably require changes to the
corresponding accessor(s).
Parameters: container - Open container Parameters: page - The page described by this control row. exception: StandardException - Standard exception policy. |
CompareIndexRowFromPageToKey | public static int CompareIndexRowFromPageToKey(ControlRow indexpage, int slot, DataValueDescriptor[] indexrow, DataValueDescriptor[] key, int nCompareCols, int partialKeyOrder, boolean[] ascOrDesc) throws StandardException(Code) | | Compare two orderable rows, considering nCompareCols, and return -1, 0, or 1
depending on whether the first row (indexrow) is less than, equal to, or
greater than the second (key). The key may have fewer columns present
than nCompareCols.
In such a case, if all the columns of the partial key match all of the
corresponding columns in the index row, then the value passed in in
partialKeyOrder is returned. The caller should pass in partialKeyOrder=1
if the index rows which match a partial key should be considered to be
greater than the partial key, and -1 if they should be considered to be
less.
This routine only reads objects off the page if it needs them, so if a
multi-part key differs in the first column the subsequent columns are not
read.
Parameters: indexpage - Controlrow of page to get target row from. Parameters: slot - Slot to get control row from. Parameters: indexrow - template of the target row (the row in the index). Parameters: key - the (possibly partial) search key. Parameters: nCompareCols - the number of columns to compare. Parameters: partialKeyOrder - what to return on a partial key match. Parameters: ascOrDesc - column sort order information throws: StandardException - if lower levels have a problem. exception: StandardException - Standard exception policy. |
ControlRowInit | abstract protected void ControlRowInit()(Code) | | Perform page specific initialization.
|
Get | public static ControlRow Get(OpenBTree open_btree, long pageNumber) throws StandardException(Code) | | Get the control row from the given page in the b-tree.
The returned control row will be of the correct type
for the page (i.e., either a LeafControlRow or a
BranchControlRow).
exception: StandardException - Standard exception policy. |
auxObjectInvalidated | public void auxObjectInvalidated()(Code) | | Called when the page is being evicted from cache or when a rollback
happened on the page and may possibly have changed the control row's
value
See Also: AuxObject.auxObjectInvalidated |
checkConsistency | abstract protected int checkConsistency(OpenBTree btree, ControlRow parent, boolean check_other_pages) throws StandardException(Code) | | Check consistency of the page and its children, returning the number of
pages seen, and throwing errors if inconsistencies are found.
The identifier to be used to open the conglomerate later. Parameters: btree - The open btree to associate latches/locks with. Parameters: parent - The parent page of this page, "null" if this page is root or if not maintaining parent links. Parameters: check_other_pages - Should the consistency check go to other pages (this option breaks the latch protocol). exception: StandardException - Standard exception policy. |
checkGeneric | protected void checkGeneric(OpenBTree btree, ControlRow parent, boolean check_other_pages) throws StandardException(Code) | | Perform consistency checks which are common to all
pages that derive from ControlRow (both leaf and
branch pages). The checks are:
Note that these last two are really only true if there
are never duplicate keys.
exception: StandardException - Standard exception policy. |
checkSiblings | protected void checkSiblings(OpenBTree btree) throws StandardException(Code) | | Perform checks on the siblings of this page: make sure
that they're at the same level as this page, that they're
mutually linked together, and that the first/last keys
on sibling pages are in order.
exception: StandardException - Standard exception policy. |
getConglom | public BTree getConglom(int format_id) throws StandardException(Code) | | Get format id information for row on page.
Returns the format id information for a row on the page. faulting it
in from the page if necessary.
format id of a row on the page. exception: StandardException - Standard exception policy. |
getLeftChild | abstract protected ControlRow getLeftChild(OpenBTree btree) throws StandardException(Code) | | Return the left child pointer for the page.
Leaf pages don't have children, so they override this and return null.
The page which is the leftmost child of this page. Parameters: btree - The open btree to associate latches/locks with. exception: StandardException - Standard exception policy. |
getLeftSibling | public ControlRow getLeftSibling(OpenBTree btree) throws StandardException, WaitError(Code) | | Get the control row for this page's left sibling, or null if there is no
left sibling (which probably means it's the leftmost page at its level).
Since right-to-left traversal of an index level is deadlock-prone, this
method will only get get the left sibling if it can latch it without
waiting.
exception: WaitError - if the latch request would have had to wait. exception: StandardException - Standard exception policy. |
getNumberOfControlRowColumns | abstract protected int getNumberOfControlRowColumns()(Code) | | 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.
The total number of columns in the control row. |
getParentPageNumber | protected long getParentPageNumber() throws StandardException(Code) | | Get the page number of the parent, if it's being maintained.
Note that there is intentionally no way to get the control
row for the parent page - the b-tree code NEVER traverses
up the tree, even in consistency checks.
exception: StandardException - Standard exception policy. |
getRightChild | abstract protected ControlRow getRightChild(OpenBTree btree) throws StandardException(Code) | | Return the right child pointer for the page.
Leaf pages don't have children, so they override this and return null.
The page which is the rightmost child of this page. Parameters: btree - The open btree to associate latches/locks with. exception: StandardException - Standard exception policy. |
getRightSibling | protected ControlRow getRightSibling(OpenBTree open_btree) throws StandardException(Code) | | Return the control row for this page's right sibling. Unlike getting
the left sibling, it's ok to wait for the right sibling latch since
left-to-right is the deadlock-free ordering.
exception: StandardException - Standard exception policy. |
getRow | final protected DataValueDescriptor[] getRow()(Code) | | Get the row.
Return the object array that represents the control row for use
in raw store fetch, insert, and/or update.
The row. |
getRowTemplate | public DataValueDescriptor[] getRowTemplate(OpenBTree open_btree) throws StandardException(Code) | | Return a new template for reading a data row from the current page.
Default implementation for rows which are the same as the conglomerates
template, sub-classes can alter if underlying template is different
(for instance branch rows add an extra field at the end).
Newly allocated template. exception: StandardException - Standard exception policy. |
getVersion | protected int getVersion() throws StandardException(Code) | | Get version of the control row.
Returns the version of the control row, faulting it in from the page
if necessary.
version of the control row. exception: StandardException - Standard exception policy. |
getleftSiblingPageNumber | public long getleftSiblingPageNumber() throws StandardException(Code) | | Get the page number of the left sibling. Fault it's value in if it
hasn't been yet.
exception: StandardException - Standard exception policy. |
getrightSiblingPageNumber | protected long getrightSiblingPageNumber() throws StandardException(Code) | | Get the page number of the right sibling. Fault it's value in if it
hasn't been yet.
exception: StandardException - Standard exception policy. |
isLeftmostLeaf | abstract public boolean isLeftmostLeaf() throws StandardException(Code) | | Is the current page the leftmost leaf of tree?
true if the current page is the leftmost leaf of the tree,else return false. exception: StandardException - Standard exception policy. |
isRightmostLeaf | abstract public boolean isRightmostLeaf() throws StandardException(Code) | | Is the current page the rightmost leaf of tree?
true if the current page is the rightmost leaf of the tree,else return false. exception: StandardException - Standard exception policy. |
linkRight | void linkRight(OpenBTree btree, ControlRow target) throws StandardException(Code) | | Link this page to the right of the target page.
Upon entry, this page and the target must be
latched. Upon exit, this page and the target
remain latched.
This method carefully acquires pages from left
to right in order to avoid deadlocks.
exception: StandardException - Standard exception policy. |
release | public void release()(Code) | | Release this control row's resources.
|
search | abstract public ControlRow search(SearchParameters search_params) throws StandardException(Code) | | Perform a recursive search, 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 resultExact field will be true. Otherwise,
resultExact field will be false, and the row slot returned will be
the one immediately preceding the position at which the key
belongs.
exception: StandardException - Standard exception policy. |
searchForEntry | protected void searchForEntry(SearchParameters params) throws StandardException(Code) | | Search this index page.
This method is very performance sensitive. It is the intention that no
object allocations occur during the execution of this method.
This method performs a binary search on the page and finds the entry i on
the page such that entry[i] <= key < entry[i+1]. The result of the search
is filled into the passed in params structure.
Parameters: params - the parameters of the search exception: StandardException - could be thrown by underlying raw store operations. See Also: SearchParameters |
searchLeft | abstract protected ControlRow searchLeft(OpenBTree btree) throws StandardException(Code) | | 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()).
The leftmost leaf page. Parameters: btree - The open btree to associate latches/locks with. exception: StandardException - Standard exception policy. |
searchRight | abstract protected ControlRow searchRight(OpenBTree btree) throws StandardException(Code) | | 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()).
The rightmost leaf page. Parameters: btree - The open btree to associate latches/locks with. exception: StandardException - Standard exception policy. |
setVersion | protected void setVersion(int version) throws StandardException(Code) | | Set version of the control row.
Sets the version of the control row. Updates both the in-memory
control row and the disk copy.
exception: StandardException - Standard exception policy. |
shrinkFor | abstract protected boolean shrinkFor(OpenBTree btree, DataValueDescriptor[] key) throws StandardException(Code) | | 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.
As currently implemented shrinkFor must be executed while holding
an exclusive container lock on the entire table. It is expected that
this call is made within an internal transaction which has been called
by a post commit thread. Latches are released by the code. The raw
store guarantees that deallocated pages are not seen by other xacts
until the transaction has been committed.
Note that a non-table level lock implementation must hold latches on
pages affected until end transaction.
On entry, the current page is latched. On exit, all pages will have
been unlatched.
exception: StandardException - Standard exception policy. |
splitFor | abstract protected long splitFor(OpenBTree open_btree, DataValueDescriptor[] template, BranchControlRow parentpage, DataValueDescriptor[] row, int flag) throws StandardException(Code) | | 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.
page number of the newly allocated leaf page created by split. Parameters: open_btree - The open btree to associate latches with. Parameters: template - A scratch area to use while searching for split pass. Parameters: parentpage - The parent page of the current page in the split pass.starts at null for root. Parameters: row - The key to make room for during the split pass. Parameters: flag - A flag used to direct where point of split should bechosen. exception: StandardException - Standard exception policy. |
toString | public String toString()(Code) | | The standard toString().
This is a concise print out of the info in the control row, does not
include anything the page.
|
unlink | boolean unlink(OpenBTree btree) throws StandardException(Code) | | Unlink this page from its siblings. This method
will give up and return false rather than run the
risk of a deadlock.
On entry this page must be latched. The siblings
are latched and unlatched during the operation. Upon
exit, this page will remain latched, but unlinked from
its siblings and deallocated from the container.
The seemingly odd situation that this page will be
returned latched but deallocated is intentional.
The container will not be able to reuse this page
until the latch is released, and the caller may still
need to read information out of it.
exception: StandardException - Standard exception policy. |
|
|