public abstract class BaseIndex extends SchemaObjectBase implements Index
Modifier and Type | Field and Description |
---|---|
protected int[] |
columnIds |
protected Column[] |
columns |
protected IndexColumn[] |
indexColumns |
protected IndexType |
indexType |
protected boolean |
isMultiVersion |
protected Table |
table |
comment, database, trace
AGGREGATE, COMMENT, CONSTANT, CONSTRAINT, FUNCTION_ALIAS, INDEX, RIGHT, ROLE, SCHEMA, SEQUENCE, SETTING, SYNONYM, TABLE_OR_VIEW, TRIGGER, USER, USER_DATATYPE
Constructor and Description |
---|
BaseIndex() |
Modifier and Type | Method and Description |
---|---|
boolean |
canFindNext()
Check if the index can get the next higher value.
|
boolean |
canScan()
Can this index iterate over all rows?
|
protected static void |
checkIndexColumnTypes(IndexColumn[] columns)
Check that the index columns are not CLOB or BLOB.
|
void |
commit(int operation,
Row row)
Commit the operation for a row.
|
int |
compareRows(SearchRow rowData,
SearchRow compare)
Compare two rows.
|
IndexLookupBatch |
createLookupBatch(TableFilter[] filters,
int filter)
Creates new lookup batch.
|
Cursor |
find(TableFilter filter,
SearchRow first,
SearchRow last)
Find a row or a list of rows and create a cursor to iterate over the
result.
|
Cursor |
findNext(Session session,
SearchRow higherThan,
SearchRow last)
Find a row or a list of rows that is larger and create a cursor to
iterate over the result.
|
int |
getColumnIndex(Column col)
Get the index of a column in the list of index columns
|
Column[] |
getColumns()
Get the indexed columns.
|
protected long |
getCostRangeIndex(int[] masks,
long rowCount,
TableFilter[] filters,
int filter,
SortOrder sortOrder,
boolean isScanIndex,
HashSet<Column> allColumnsSet)
Calculate the cost for the given mask as if this index was a typical
b-tree range index.
|
String |
getCreateSQL()
Build a SQL statement to re-create this object.
|
String |
getCreateSQLForCopy(Table targetTable,
String quotedName)
Build a SQL statement to re-create the object, or to create a copy of the
object with a different name or referencing a different table
|
String |
getDropSQL()
Build a SQL statement to drop this object.
|
protected DbException |
getDuplicateKeyException(String key)
Create a duplicate key exception with a message that contains the index
name.
|
IndexColumn[] |
getIndexColumns()
Get the indexed columns as index columns (with ordering information).
|
IndexType |
getIndexType()
Get the index type.
|
String |
getPlanSQL()
Get the message to show in a EXPLAIN statement.
|
Row |
getRow(Session session,
long key)
Get the row with the given key.
|
Table |
getTable()
Get the table on which this index is based.
|
int |
getType()
Get the object type.
|
protected void |
initBaseIndex(Table newTable,
int id,
String name,
IndexColumn[] newIndexColumns,
IndexType newIndexType)
Initialize the base index.
|
boolean |
isFindUsingFullTableScan()
Returns
true if find() implementation performs scan over all
index, false if find() performs the fast lookup. |
boolean |
isFirstColumn(Column column)
Check if the given column is the first for this index
|
boolean |
isHidden()
Check whether this is a hidden object that doesn't appear in the meta
data and in the script, and is not dropped on DROP ALL OBJECTS.
|
boolean |
isRowIdIndex()
Does this index support lookup by row id?
|
protected boolean |
mayHaveNullDuplicates(SearchRow searchRow)
Check if this row may have duplicates with the same indexed values in the
current compatibility mode.
|
void |
removeChildrenAndResources(Session session)
Remove all dependent objects and free all resources (files, blocks in
files) of this object.
|
void |
setSortedInsertMode(boolean sortedInsertMode)
Enable or disable the 'sorted insert' optimizations (rows are inserted in
ascending or descending order) if applicable for this index
implementation.
|
getSchema, getSQL, initSchemaObjectBase
checkRename, getChildren, getComment, getDatabase, getId, getModificationId, getName, initDbObjectBase, invalidate, isTemporary, isValid, rename, setComment, setModified, setObjectName, setTemporary, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
add, canGetFirstOrLast, close, find, findFirstOrLast, getCost, getDiskSpaceUsed, getRowCount, getRowCountApproximation, needRebuild, remove, remove, truncate
getSchema
checkRename, getChildren, getComment, getDatabase, getId, getName, getSQL, isTemporary, rename, setComment, setTemporary
protected IndexColumn[] indexColumns
protected Column[] columns
protected int[] columnIds
protected Table table
protected IndexType indexType
protected boolean isMultiVersion
protected void initBaseIndex(Table newTable, int id, String name, IndexColumn[] newIndexColumns, IndexType newIndexType)
newTable
- the tableid
- the object idname
- the index namenewIndexColumns
- the columns that are indexed or null if this is
not yet knownnewIndexType
- the index typeprotected static void checkIndexColumnTypes(IndexColumn[] columns)
columns
- the columnspublic String getDropSQL()
DbObjectBase
getDropSQL
in interface DbObject
getDropSQL
in class DbObjectBase
protected DbException getDuplicateKeyException(String key)
key
- the key valuespublic String getPlanSQL()
Index
getPlanSQL
in interface Index
public void removeChildrenAndResources(Session session)
DbObjectBase
removeChildrenAndResources
in interface DbObject
removeChildrenAndResources
in class DbObjectBase
session
- the sessionpublic boolean canFindNext()
Index
canFindNext
in interface Index
public boolean isFindUsingFullTableScan()
Index
true
if find()
implementation performs scan over all
index, false
if find()
performs the fast lookup.isFindUsingFullTableScan
in interface Index
true
if find()
implementation performs scan over all
index, false
if find()
performs the fast lookuppublic Cursor find(TableFilter filter, SearchRow first, SearchRow last)
Index
public Cursor findNext(Session session, SearchRow higherThan, SearchRow last)
findNext
in interface Index
session
- the sessionhigherThan
- the lower limit (excluding)last
- the last row, or null for no limitDbException
- alwaysprotected final long getCostRangeIndex(int[] masks, long rowCount, TableFilter[] filters, int filter, SortOrder sortOrder, boolean isScanIndex, HashSet<Column> allColumnsSet)
masks
- the IndexCondition search masks, one for each column in the
tablerowCount
- the number of rows in the indexfilters
- all joined table filtersfilter
- the current table filter indexsortOrder
- the sort orderisScanIndex
- whether this is a "table scan" indexallColumnsSet
- the set of all columnspublic int compareRows(SearchRow rowData, SearchRow compare)
Index
compareRows
in interface Index
rowData
- the first rowcompare
- the second rowprotected boolean mayHaveNullDuplicates(SearchRow searchRow)
NULL
values are
allowed in some modes.searchRow
- the row to checktrue
if specified row may have duplicates,
false otherwise
public int getColumnIndex(Column col)
Index
getColumnIndex
in interface Index
col
- the columnpublic boolean isFirstColumn(Column column)
Index
isFirstColumn
in interface Index
column
- the columnpublic String getCreateSQLForCopy(Table targetTable, String quotedName)
DbObject
getCreateSQLForCopy
in interface DbObject
targetTable
- the new tablequotedName
- the quoted namepublic String getCreateSQL()
DbObjectBase
getCreateSQL
in interface DbObject
getCreateSQL
in class DbObjectBase
public IndexColumn[] getIndexColumns()
Index
getIndexColumns
in interface Index
public Column[] getColumns()
Index
getColumns
in interface Index
public IndexType getIndexType()
Index
getIndexType
in interface Index
public int getType()
DbObject
public Table getTable()
Index
public void commit(int operation, Row row)
Index
public Row getRow(Session session, long key)
Index
public boolean isHidden()
SchemaObject
isHidden
in interface SchemaObject
isHidden
in class SchemaObjectBase
public boolean isRowIdIndex()
Index
isRowIdIndex
in interface Index
public boolean canScan()
Index
public void setSortedInsertMode(boolean sortedInsertMode)
Index
setSortedInsertMode
in interface Index
sortedInsertMode
- the new valuepublic IndexLookupBatch createLookupBatch(TableFilter[] filters, int filter)
Index
IndexLookupBatch
instance can be used multiple times.createLookupBatch
in interface Index
filters
- the table filtersfilter
- the filter index (0, 1,...)null
if batched lookup is not supported
by this index.Copyright © 2020 JBoss by Red Hat. All rights reserved.