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.
| Modifier and Type | Field and Description |
|---|---|
| pack-priv boolean | allowDuplicates
Whether the index allows duplicates or not. |
| protected boolean[] | |
| protected int[] | collation_ids
The array of collation id's for each column in the template. |
| protected int | conglom_format_id
Format id of the conglomerate. |
| protected int[] | format_ids
The array of format id's, one for each column in the template. |
| protected boolean | hasCollatedTypes
Tells if there is at least one column in the conglomerate whose collation isn't StringDataValue.COLLATION_TYPE_UCS_BASIC. |
| protected ContainerKey | id
The id of the container in which this b-tree is stored. |
| pack-priv boolean | maintainParentLinks
Whether the parent should maintain links from child pages to their parent. |
| pack-priv static int | maxRowsPerPage
Maximum rows per page to place on a btree leaf or nonleaf page. |
| protected int | nKeyFields
The number of key fields. |
| pack-priv int | nUniqueColumns
The number of uniqueness columns. |
| public static final String | |
| public static final String | PROPERTY_MAX_ROWS_PER_PAGE_PARAMETER
Property name for the maximum number of rows to place in a btree page (leaf or branch). |
| public static final String | |
| public static final String | |
| public static final String | |
| public static final String | |
| public static final long | ROOTPAGEID
The page number of the root page is always at the fixed page number: ROOTPAGEID. |
| pack-priv boolean | uniqueWithDuplicateNulls
Attribute to indicate the index allows duplicate only in case of keys with no part null. |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public void | addColumn(TransactionManager
Transaction to associate the lock with. xact_manager, int The column number to add this column at. column_id, Storable An instance of the column to be added to table. template_column, int Collation id of the added column. collation_id)Implements org. Add a column to the conglomerate. |
| 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. |
| pack-priv final DataValueDescriptor[] | Returns: The new template.Create a branch row template for this conglomerate. |
| public final DataValueDescriptor[] | Returns: The new template.Create a template for this conglomerate. |
| public abstract void | drop(TransactionManager xact_manager)
Redeclares org. Drop this btree. |
| protected abstract 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()
Implements org. Get the containerid of conglomerate. |
| public DynamicCompiledOpenConglomInfo | Returns: The dynamic information.Implements org. Return dynamic information about the conglomerate to be dynamically reused in repeated execution of a statement. |
| public final ContainerKey | Returns: The ContainerKey.Implements org. Get the id of the container of the conglomerate. |
| public boolean | isNull()
Implements org. Return whether the value is null or not. |
| public boolean | Returns: whether conglomerate is temporary or not.Implements org. Is this conglomerate temporary? |
| public final boolean | |
| public boolean | Returns: is index type is uniqueWithDuplicateNullsReturns if the index type is uniqueWithDuplicateNulls. |
| public abstract long | load(TransactionManager
The TransactionController under which this operation
takes place. xact_manager, boolean If true, the conglomerate is being created in the
same operation as the openAndLoadConglomerate.
The enables further optimization as recovery does
not require page allocation to be logged. createConglom, RowLocationRetRowSource Where the rows come from. rowSource)Redeclares org. Load a b-tree. |
| public abstract ConglomerateController | lockTable(TransactionManager
Transaction to associate the lock with. xact_manager, int open_mode, int lock_level, int isolation_level)Lock the base table. |
| public abstract ConglomerateController | open(TransactionManager
The access xact to associate all ops on cc with. xact_manager, Transaction The raw store xact to associate all ops on cc with. rawtran, boolean hold, int A bit mask of TransactionController.MODE_* bits,
indicating info about the open. open_mode, int Either TransactionController.MODE_TABLE or
TransactionController.MODE_RECORD, as passed into
the openConglomerate() call. lock_level, LockingPolicy The LockingPolicy to use to open the conglomerate. locking_policy, StaticCompiledOpenConglomInfo static_info, DynamicCompiledOpenConglomInfo dynamic_info)Redeclares org. Open a b-tree controller. |
| public void | readExternal(ObjectInput
the stream to read data from in order to restore the object in)Implements java. Restore the in-memory representation from the stream. |
| public void | restoreToNull()
Implements org. Restore the in-memory representation to the null value. |
| public void | setUniqueWithDuplicateNulls(boolean
true if the index will be unique only for
non null keys uniqueWithDuplicateNulls)Set if the index is unique only for non null keys |
| public String | |
| public void | writeExternal(ObjectOutput
the stream to write the object to out)Implements java. Store the stored representation of the column value in the stream. |
| allowDuplicates | back to summary |
|---|---|
| pack-priv boolean allowDuplicates Whether the index allows duplicates or not. | |
| ascDescInfo | back to summary |
|---|---|
| protected boolean[] ascDescInfo | |
| collation_ids | back to summary |
|---|---|
| protected int[] collation_ids The array of collation id's for each column in the template. | |
| conglom_format_id | back to summary |
|---|---|
| protected int conglom_format_id Format id of the conglomerate. | |
| format_ids | back to summary |
|---|---|
| protected int[] format_ids The array of format id's, one for each column in the template. | |
| hasCollatedTypes | back to summary |
|---|---|
| protected boolean hasCollatedTypes Tells if there is at least one column in the conglomerate whose collation isn't StringDataValue.COLLATION_TYPE_UCS_BASIC. | |
| id | back to summary |
|---|---|
| protected ContainerKey id The id of the container in which this b-tree is stored. | |
| maintainParentLinks | back to summary |
|---|---|
| pack-priv boolean maintainParentLinks 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 | back to summary |
|---|---|
| pack-priv static int maxRowsPerPage 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 | back to summary |
|---|---|
| protected int nKeyFields The number of key fields. | |
| nUniqueColumns | back to summary |
|---|---|
| pack-priv int nUniqueColumns The number of uniqueness columns. These are the columns that are considered for the purpose of detecting duplicate keys and rows. | |
| PROPERTY_ALLOWDUPLICATES | back to summary |
|---|---|
| public static final String PROPERTY_ALLOWDUPLICATES | |
| PROPERTY_MAX_ROWS_PER_PAGE_PARAMETER | back to summary |
|---|---|
| public static final String PROPERTY_MAX_ROWS_PER_PAGE_PARAMETER 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 | back to summary |
|---|---|
| public static final String PROPERTY_NKEYFIELDS | |
| PROPERTY_NUNIQUECOLUMNS | back to summary |
|---|---|
| public static final String PROPERTY_NUNIQUECOLUMNS | |
| PROPERTY_PARENTLINKS | back to summary |
|---|---|
| public static final String PROPERTY_PARENTLINKS | |
| PROPERTY_UNIQUE_WITH_DUPLICATE_NULLS | back to summary |
|---|---|
| public static final String PROPERTY_UNIQUE_WITH_DUPLICATE_NULLS | |
| ROOTPAGEID | back to summary |
|---|---|
| public static final long ROOTPAGEID 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. | |
| uniqueWithDuplicateNulls | back to summary |
|---|---|
| pack-priv boolean uniqueWithDuplicateNulls Attribute to indicate the index allows duplicate only in case of keys with no part null. This attribute has no effect if unique is true. If unique is false and isUniqueWithDuplicateNulls is set to true the index will allow duplicates of any key with at least one column null, but for non null keys will act like a unique index. | |
| BTree | back to summary |
|---|---|
| public BTree() | |
| addColumn | back to summary |
|---|---|
| public void addColumn(TransactionManager xact_manager, int column_id, Storable template_column, int collation_id) throws StandardException Implements org. Add a column to the conglomerate. Currently B2I does not support this operation. input template column.
| |
| create | back to summary |
|---|---|
| public void create(Transaction rawtran, int segmentId, long input_containerid, DataValueDescriptor[] template, Properties properties, int conglom_format_id, int tmpFlag) throws StandardException 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. :
| |
| createBranchTemplate | back to summary |
|---|---|
| pack-priv final DataValueDescriptor[] createBranchTemplate(Transaction rawtran, DataValueDescriptor page_ptr) throws StandardException 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.
| |
| createTemplate | back to summary |
|---|---|
| public final DataValueDescriptor[] createTemplate(Transaction rawtran) throws StandardException 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.
| |
| drop | back to summary |
|---|---|
| public abstract void drop(TransactionManager xact_manager) throws StandardException Redeclares org. Drop this btree. This must be done by a concrete implementation.
| |
| getBtreeLockingPolicy | back to summary |
|---|---|
| protected abstract BTreeLockingPolicy getBtreeLockingPolicy(Transaction rawtran, int lock_level, int mode, int isolation_level, ConglomerateController base_cc, OpenBTree open_btree) throws StandardException Create a new btree locking policy from scratch.
| |
| getContainerid | back to summary |
|---|---|
| public long getContainerid() Implements org. Doc from org. Get the containerid of conglomerate. Will have to change when a conglomerate could have more than one containerid.
| |
| getDynamicCompiledConglomInfo | back to summary |
|---|---|
| public DynamicCompiledOpenConglomInfo getDynamicCompiledConglomInfo() throws StandardException Implements org. 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, ...
| |
| getId | back to summary |
|---|---|
| public final ContainerKey getId() Implements org. 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.
| |
| isNull | back to summary |
|---|---|
| public boolean isNull() Implements org. Return whether the value is null or not. The containerid being zero is what determines nullness; subclasses are not expected to override this method.
| |
| isTemporary | back to summary |
|---|---|
| public boolean isTemporary() Implements org. Is this conglomerate temporary?
| |
| isUnique | back to summary |
|---|---|
| public final boolean isUnique() Is this a "unique" index? | |
| isUniqueWithDuplicateNulls | back to summary |
|---|---|
| public boolean isUniqueWithDuplicateNulls() Returns if the index type is uniqueWithDuplicateNulls.
| |
| load | back to summary |
|---|---|
| public abstract long load(TransactionManager xact_manager, boolean createConglom, RowLocationRetRowSource rowSource) throws StandardException Redeclares org. Load a b-tree. This must be done by a concrete implementation.
| |
| lockTable | back to summary |
|---|---|
| public abstract ConglomerateController lockTable(TransactionManager xact_manager, int open_mode, int lock_level, int isolation_level) throws StandardException 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.
| |
| open | back to summary |
|---|---|
| public abstract ConglomerateController open(TransactionManager xact_manager, Transaction rawtran, boolean hold, int open_mode, int lock_level, LockingPolicy locking_policy, StaticCompiledOpenConglomInfo static_info, DynamicCompiledOpenConglomInfo dynamic_info) throws StandardException Redeclares org. Open a b-tree controller. This must be done by a concrete implementation.
| |
| readExternal | back to summary |
|---|---|
| public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException Implements java. Restore the in-memory representation from the stream.
| |
| restoreToNull | back to summary |
|---|---|
| public void restoreToNull() Implements org. Restore the in-memory representation to the null value. The containerid being zero is what determines nullness; subclasses are not expected to override this method. | |
| setUniqueWithDuplicateNulls | back to summary |
|---|---|
| public void setUniqueWithDuplicateNulls(boolean uniqueWithDuplicateNulls) Set if the index is unique only for non null keys
| |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. Public toString() Method:
| |
| writeExternal | back to summary |
|---|---|
| public void writeExternal(ObjectOutput out) throws IOException Implements java. 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.
| |