Package org.h2.mvstore.db
Class MVSecondaryIndex
- java.lang.Object
-
- org.h2.engine.DbObject
-
- org.h2.schema.SchemaObject
-
- org.h2.index.Index
-
- org.h2.mvstore.db.MVIndex<SearchRow,Value>
-
- org.h2.mvstore.db.MVSecondaryIndex
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classMVSecondaryIndex.MVStoreCursorA cursor.private static classMVSecondaryIndex.Source
-
Field Summary
Fields Modifier and Type Field Description private TransactionMap<SearchRow,Value>dataMapprivate MVTablemvTableThe multi-value table.-
Fields inherited from class org.h2.index.Index
columnIds, columns, indexColumns, indexType, table, uniqueColumnColumn
-
Fields inherited from class org.h2.engine.DbObject
AGGREGATE, comment, COMMENT, CONSTANT, CONSTRAINT, database, DOMAIN, FUNCTION_ALIAS, INDEX, RIGHT, ROLE, SCHEMA, SEQUENCE, SETTING, SYNONYM, TABLE_OR_VIEW, trace, TRIGGER, USER
-
Fields inherited from interface org.h2.util.HasSQL
ADD_PLAN_INFORMATION, DEFAULT_SQL_FLAGS, NO_CASTS, QUOTE_ONLY_WHEN_REQUIRED, REPLACE_LOBS_FOR_TRACE, TRACE_SQL_FLAGS
-
-
Constructor Summary
Constructors Constructor Description MVSecondaryIndex(Database db, MVTable table, int id, java.lang.String indexName, IndexColumn[] columns, int uniqueColumnCount, IndexType indexType)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(SessionLocal session, Row row)Add a row to the index.voidaddBufferedRows(java.util.List<java.lang.String> bufferNames)Add all the index data from the buffers to the index.voidaddRowsToBuffer(java.util.List<Row> rows, java.lang.String bufferName)Add the rows to a temporary storage (not to the index yet).booleancanFindNext()Check if the index can get the next higher value.booleancanGetFirstOrLast()Check if the index can directly look up the lowest or highest value of a column.private voidcheckUnique(boolean repeatableRead, TransactionMap<SearchRow,Value> map, SearchRow row, long newKey)voidclose(SessionLocal session)Close this index.private SearchRowconvertToKey(SearchRow r, java.lang.Boolean minMax)private Cursorfind(SessionLocal session, SearchRow first, boolean bigger, SearchRow last)Cursorfind(SessionLocal session, SearchRow first, SearchRow last)Find a row or a list of rows and create a cursor to iterate over the result.CursorfindFirstOrLast(SessionLocal session, boolean first)Find the first (or last) value of this index.CursorfindNext(SessionLocal 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.doublegetCost(SessionLocal session, int[] masks, TableFilter[] filters, int filter, SortOrder sortOrder, AllColumnsForPlan allColumnsSet)Estimate the cost to search for rows given the search mask.longgetDiskSpaceUsed()Get the used disk space for this index.private TransactionMap<SearchRow,Value>getMap(SessionLocal session)Get the map to store the data.MVMap<SearchRow,VersionedValue<Value>>getMVMap()longgetRowCount(SessionLocal session)Get the row count of this table, for the given session.longgetRowCountApproximation(SessionLocal session)Get the approximated row count for this table.MVTablegetTable()Get the table on which this index is based.booleanneedRebuild()Check if the index needs to be rebuilt.private MVMap<SearchRow,Value>openMap(java.lang.String mapName)voidremove(SessionLocal session)Remove the index.voidremove(SessionLocal session, Row row)Remove a row from the index.private booleanrowsAreEqual(SearchRow rowOne, SearchRow rowTwo)voidtruncate(SessionLocal session)Remove all rows from the index.voidupdate(SessionLocal session, Row oldRow, Row newRow)Update index after row change.-
Methods inherited from class org.h2.index.Index
canScan, checkIndexColumnTypes, compareRows, getColumnIndex, getColumns, getCostRangeIndex, getCreateSQL, getCreateSQLForCopy, getDuplicateKeyException, getDuplicatePrimaryKeyMessage, getIndexColumns, getIndexType, getPlanSQL, getRow, getRowFactory, getType, getUniqueColumnCount, getUniqueRowFactory, isFindUsingFullTableScan, isFirstColumn, isHidden, isRowIdIndex, mayHaveNullDuplicates, removeChildrenAndResources
-
Methods inherited from class org.h2.schema.SchemaObject
getSchema, getSQL, getSQL
-
Methods inherited from class org.h2.engine.DbObject
checkRename, getChildren, getComment, getCreateSQLForMeta, getDatabase, getDropSQL, getId, getModificationId, getName, invalidate, isTemporary, isValid, rename, setComment, setModified, setObjectName, setTemporary, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.h2.util.HasSQL
getTraceSQL
-
-
-
-
Field Detail
-
mvTable
private final MVTable mvTable
The multi-value table.
-
dataMap
private final TransactionMap<SearchRow,Value> dataMap
-
-
Constructor Detail
-
MVSecondaryIndex
public MVSecondaryIndex(Database db, MVTable table, int id, java.lang.String indexName, IndexColumn[] columns, int uniqueColumnCount, IndexType indexType)
-
-
Method Detail
-
addRowsToBuffer
public void addRowsToBuffer(java.util.List<Row> rows, java.lang.String bufferName)
Description copied from class:MVIndexAdd the rows to a temporary storage (not to the index yet). The rows are sorted by the index columns. This is to more quickly build the index.- Specified by:
addRowsToBufferin classMVIndex<SearchRow,Value>- Parameters:
rows- the rowsbufferName- the name of the temporary storage
-
addBufferedRows
public void addBufferedRows(java.util.List<java.lang.String> bufferNames)
Description copied from class:MVIndexAdd all the index data from the buffers to the index. The index will typically use merge sort to add the data more quickly in sorted order.- Specified by:
addBufferedRowsin classMVIndex<SearchRow,Value>- Parameters:
bufferNames- the names of the temporary storage
-
close
public void close(SessionLocal session)
Description copied from class:IndexClose this index.
-
add
public void add(SessionLocal session, Row row)
Description copied from class:IndexAdd a row to the index.
-
checkUnique
private void checkUnique(boolean repeatableRead, TransactionMap<SearchRow,Value> map, SearchRow row, long newKey)
-
remove
public void remove(SessionLocal session, Row row)
Description copied from class:IndexRemove a row from the index.
-
update
public void update(SessionLocal session, Row oldRow, Row newRow)
Description copied from class:IndexUpdate index after row change.
-
find
public Cursor find(SessionLocal session, SearchRow first, SearchRow last)
Description copied from class:IndexFind a row or a list of rows and create a cursor to iterate over the result.
-
find
private Cursor find(SessionLocal session, SearchRow first, boolean bigger, SearchRow last)
-
getTable
public MVTable getTable()
Description copied from class:IndexGet the table on which this index is based.
-
getCost
public double getCost(SessionLocal session, int[] masks, TableFilter[] filters, int filter, SortOrder sortOrder, AllColumnsForPlan allColumnsSet)
Description copied from class:IndexEstimate the cost to search for rows given the search mask. There is one element per column in the search mask. For possible search masks, see IndexCondition.- Specified by:
getCostin classIndex- Parameters:
session- the sessionmasks- per-column comparison bit masks, null means 'always false', see constants in IndexConditionfilters- all joined table filtersfilter- the current table filter indexsortOrder- the sort orderallColumnsSet- the set of all columns- Returns:
- the estimated cost
-
remove
public void remove(SessionLocal session)
Description copied from class:IndexRemove the index.
-
truncate
public void truncate(SessionLocal session)
Description copied from class:IndexRemove all rows from the index.
-
canGetFirstOrLast
public boolean canGetFirstOrLast()
Description copied from class:IndexCheck if the index can directly look up the lowest or highest value of a column.- Overrides:
canGetFirstOrLastin classIndex- Returns:
- true if it can
-
findFirstOrLast
public Cursor findFirstOrLast(SessionLocal session, boolean first)
Description copied from class:IndexFind the first (or last) value of this index. The cursor returned is positioned on the correct row, or on null if no row has been found.- Overrides:
findFirstOrLastin classIndex- Parameters:
session- the sessionfirst- true if the first (lowest for ascending indexes) or last value should be returned- Returns:
- a cursor (never null)
-
needRebuild
public boolean needRebuild()
Description copied from class:IndexCheck if the index needs to be rebuilt. This method is called after opening an index.- Specified by:
needRebuildin classIndex- Returns:
- true if a rebuild is required.
-
getRowCount
public long getRowCount(SessionLocal session)
Description copied from class:IndexGet the row count of this table, for the given session.- Specified by:
getRowCountin classIndex- Parameters:
session- the session- Returns:
- the row count
-
getRowCountApproximation
public long getRowCountApproximation(SessionLocal session)
Description copied from class:IndexGet the approximated row count for this table.- Specified by:
getRowCountApproximationin classIndex- Parameters:
session- the session- Returns:
- the approximated row count
-
getDiskSpaceUsed
public long getDiskSpaceUsed()
Description copied from class:IndexGet the used disk space for this index.- Overrides:
getDiskSpaceUsedin classIndex- Returns:
- the estimated number of bytes
-
canFindNext
public boolean canFindNext()
Description copied from class:IndexCheck if the index can get the next higher value.- Overrides:
canFindNextin classIndex- Returns:
- true if it can
-
findNext
public Cursor findNext(SessionLocal session, SearchRow higherThan, SearchRow last)
Description copied from class:IndexFind a row or a list of rows that is larger and create a cursor to iterate over the result.
-
getMap
private TransactionMap<SearchRow,Value> getMap(SessionLocal session)
Get the map to store the data.- Parameters:
session- the session- Returns:
- the map
-
-