| org.apache.derby.impl.store.access.conglomerate.GenericConglomerate org.apache.derby.impl.store.access.btree.BTree
All known Subclasses: org.apache.derby.impl.store.access.btree.index.B2I,
BTree | abstract public class BTree extends GenericConglomerate (Code) | | A b-tree object corresponds to an instance of a b-tree conglomerate. It
contains the static information about a conglomerate which is built at
create conglomerate time.
This generic implementation is expected to be extended by the concreate
implementations.
The fields are set when the conglomerate is created and never changed
thereafter. When alter table is supported then it will change under the
control of a table level lock.
They have package scope because they're read by the scans and controllers.
A table of all conglomerates in the system is maintained by the accessmanager.
A cache of conglomerates is maintained in the accessmanager, and references
to the read only objects are handed out. A copy of the Conglomerate
object is kept in the control row of the root page, so that during logical
undo this information can be read without needing to access the possibly
corrupt table maintained by the access manager.
|
Method Summary | |
public void | addColumn(TransactionManager xact_manager, int column_id, Storable template_column) Add a column to the conglomerate.
Currently B2I does not support this operation.
input template column. | public void | create(Transaction rawtran, int segmentId, long input_containerid, DataValueDescriptor[] template, Properties properties, int conglom_format_id, int tmpFlag) Do the generic part of creating a b-tree conglomerate. | final DataValueDescriptor[] | createBranchTemplate(DataValueDescriptor page_ptr) Create a branch row template for this conglomerate.
Reads the format id's of each of the columns and manufactures object of
the given type for each. | final public DataValueDescriptor[] | createTemplate() Create a template for this conglomerate.
Reads the format id's of each of the columns and manufactures object of
the given type for each. | abstract public void | drop(TransactionManager xact_manager) Drop this btree. | abstract protected BTreeLockingPolicy | getBtreeLockingPolicy(Transaction rawtran, int lock_level, int mode, int isolation_level, ConglomerateController base_cc, OpenBTree open_btree) Create a new btree locking policy from scratch. | public long | getContainerid() | public DynamicCompiledOpenConglomInfo | getDynamicCompiledConglomInfo(long conglomId) Return dynamic information about the conglomerate to be dynamically
reused in repeated execution of a statement.
The dynamic info is a set of variables to be used in a given
ScanController or ConglomerateController. | final public ContainerKey | getId() Get the id of the container of the conglomerate.
Will have to change when a conglomerate could have more than one
container. | public boolean | isNull() Return whether the value is null or not. | public boolean | isTemporary() | final public boolean | isUnique() | abstract public long | load(TransactionManager xact_manager, boolean createConglom, RowLocationRetRowSource rowSource) Load a b-tree. | abstract public ConglomerateController | lockTable(TransactionManager xact_manager, int open_mode, int lock_level, int isolation_level) Lock the base table. | abstract public ConglomerateController | open(TransactionManager xact_manager, Transaction rawtran, boolean hold, int open_mode, int lock_level, LockingPolicy locking_policy, StaticCompiledOpenConglomInfo static_info, DynamicCompiledOpenConglomInfo dynamic_info) Open a b-tree controller. | public void | readExternal(ObjectInput in) Restore the in-memory representation from the stream. | public void | readExternalFromArray(ArrayInputStream in) | public void | restoreToNull() Restore the in-memory representation to the null value. | public String | toString() | public void | writeExternal(ObjectOutput out) Store the stored representation of the column value in the stream. |
PROPERTY_ALLOWDUPLICATES | final public static String PROPERTY_ALLOWDUPLICATES(Code) | | |
PROPERTY_MAX_ROWS_PER_PAGE_PARAMETER | final public static String PROPERTY_MAX_ROWS_PER_PAGE_PARAMETER(Code) | | Property name for the maximum number of rows to place in a btree page (leaf
or branch). Equal to 'derby.access.btreeMaxRowPerPage'. Used by tests
and debugging to exactly control split points, and to make it easier to test
tall trees without needing lots of data.
|
PROPERTY_NKEYFIELDS | final public static String PROPERTY_NKEYFIELDS(Code) | | |
PROPERTY_NUNIQUECOLUMNS | final public static String PROPERTY_NUNIQUECOLUMNS(Code) | | |
PROPERTY_PARENTLINKS | final public static String PROPERTY_PARENTLINKS(Code) | | |
ROOTPAGEID | final public static long ROOTPAGEID(Code) | | The page number of the root page is always at the fixed page number:
ROOTPAGEID. This means that given an open container, during logical
undo one can always find the root page and look up the conglomerate
information.
|
allowDuplicates | boolean allowDuplicates(Code) | | Whether the index allows duplicates or not.
|
ascDescInfo | protected boolean[] ascDescInfo(Code) | | |
conglom_format_id | protected int conglom_format_id(Code) | | Format id of the conglomerate.
|
format_ids | int[] format_ids(Code) | | The array of format id's, one for each column in the template.
|
maintainParentLinks | boolean maintainParentLinks(Code) | | Whether the parent should maintain links from child pages to their parent.
These links are only used for consistency checking purposes. They improve
consistency checking at the cost of run-time efficiency.
|
maxRowsPerPage | static int maxRowsPerPage(Code) | | Maximum rows per page to place on a btree leaf or nonleaf page. Used
by testing to finely control split points. Only changed for debugging
purposes.
RESOLVE (mikem) - this should not be static. Need to design a way in
debugging mode to get btree created with a persistent "maxRowsPerPage".
This hack makes all btrees get created with the "last" maxRowsPerPage
value set.
|
nKeyFields | protected int nKeyFields(Code) | | The number of key fields.
|
nUniqueColumns | int nUniqueColumns(Code) | | The number of uniqueness columns. These are the columns that
are considered for the purpose of detecting duplicate keys and rows.
|
addColumn | public void addColumn(TransactionManager xact_manager, int column_id, Storable template_column) throws StandardException(Code) | | Add a column to the conglomerate.
Currently B2I does not support this operation.
input template column.
Parameters: xact_manager - Transaction to associate the lock with. Parameters: column_id - The column number to add this column at. Parameters: template_column - An instance of the column to be added to table. exception: StandardException - Standard exception policy. |
create | public void create(Transaction rawtran, int segmentId, long input_containerid, DataValueDescriptor[] template, Properties properties, int conglom_format_id, int tmpFlag) throws StandardException(Code) | | Do the generic part of creating a b-tree conglomerate. This method
is called from the concrete subclass (which may also read some properties).
This method processes all properties which are generic to all BTree's. It
creates the container for the btree.
The following properties are generic to a b-tree conglomerate. :
- "allowDuplicates" (boolean). If set to true the table will allow
rows which are duplicate in key column's 0 through (nUniqueColumns - 1).
Currently only supports "false".
This property is optional, defaults to false.
- "nKeyFields" (integer) Columns 0 through (nKeyFields - 1) will be
included in key of the conglomerate.
This implementation requires that "nKeyFields" must be the same as the
number of fields in the conglomerate, including the rowLocationColumn.
Other implementations may relax this restriction to allow non-key fields
in the index.
This property is required.
- "nUniqueColumns" (integer) Columns 0 through "nUniqueColumns" will be
used to check for uniqueness. So for a standard SQL non-unique index
implementation set "nUniqueColumns" to the same value as "nKeyFields"; and
for a unique index set "nUniqueColumns" to "nKeyFields" - 1 (ie. don't
include the rowLocationColumn in the uniqueness check).
This property is required.
- "maintainParentLinks" (boolean)
Whether the b-tree pages maintain the page number of their parent. Only
used for consistency checking. It takes a certain amount more effort to
maintain these links, but they're really handy for ensuring that the index
is consistent.
This property is optional, defaults to true.
exception: StandardException - Thrown by underlying raw store, or thrown bythis routine on an invalid containerid. |
createBranchTemplate | final DataValueDescriptor[] createBranchTemplate(DataValueDescriptor page_ptr) throws StandardException(Code) | | Create a branch row template for this conglomerate.
Reads the format id's of each of the columns and manufactures object of
the given type for each. It then uses these "empty" objects to create
a template row. The object passed in is then added to the last column
of the row.
The new template. exception: StandardException - Standard exception policy. |
createTemplate | final public DataValueDescriptor[] createTemplate() throws StandardException(Code) | | Create a template for this conglomerate.
Reads the format id's of each of the columns and manufactures object of
the given type for each. It then uses these "empty" objects to create
a template row.
This method is public so that B2IUndo() can call it.
The new template. exception: StandardException - Standard exception policy. |
getContainerid | public long getContainerid()(Code) | | |
getDynamicCompiledConglomInfo | public DynamicCompiledOpenConglomInfo getDynamicCompiledConglomInfo(long conglomId) throws StandardException(Code) | | Return dynamic information about the conglomerate to be dynamically
reused in repeated execution of a statement.
The dynamic info is a set of variables to be used in a given
ScanController or ConglomerateController. It can only be used in one
controller at a time. It is up to the caller to insure the correct
thread access to this info. The type of info in this is a scratch
template for btree traversal, other scratch variables for qualifier
evaluation, ...
The dynamic information. Parameters: conglomId - The identifier of the conglomerate to open. exception: StandardException - Standard exception policy. |
getId | final public ContainerKey getId()(Code) | | Get the id of the container of the conglomerate.
Will have to change when a conglomerate could have more than one
container. The ContainerKey is a combination of the container id
and segment id.
The ContainerKey. |
isTemporary | public boolean isTemporary()(Code) | | Is this conglomerate temporary?
whether conglomerate is temporary or not. |
isUnique | final public boolean isUnique()(Code) | | Is this a "unique" index?
|
lockTable | abstract public ConglomerateController lockTable(TransactionManager xact_manager, int open_mode, int lock_level, int isolation_level) throws StandardException(Code) | | Lock the base table.
Assumes that segment of the base container is the same as the segment
of the btree segment.
RESOLVE - we really want to get the lock without opening the container.
raw store will be providing this.
Parameters: xact_manager - Transaction to associate the lock with. exception: StandardException - Standard exception policy. |
toString | public String toString()(Code) | | Public toString() Method:
|
writeExternal | public void writeExternal(ObjectOutput out) throws IOException(Code) | | Store the stored representation of the column value in the stream.
It might be easier to simply store the properties - which would certainly
make upgrading easier.
exception: IOException - thrown by writeObject() |
|
|