org.h2.mvstore.db

## Class MVTable

- java.lang.Object
- - org.h2.engine.DbObject
  - - org.h2.schema.SchemaObject
    - - org.h2.table.Table
      - - org.h2.table.TableBase
        - - org.h2.mvstore.db.MVTable

All Implemented Interfaces:
  HasSQL

    public class MVTable
    extends TableBase

A table stored in a MVStore.

### Field Summary

Fields
`static DebuggingThreadLocal<java.util.ArrayList<java.lang.String>>` `EXCLUSIVE_LOCKS` The table names this thread has exclusively locked.
`static DebuggingThreadLocal<java.util.ArrayList<java.lang.String>>` `SHARED_LOCKS` The tables names this thread has a shared lock on.
`static DebuggingThreadLocal<java.lang.String>` `WAITING_FOR_LOCK` The table name this thread is waiting to lock.

### Fields inherited from class org.h2.table.Table

`columns, compareMode, isHidden, TYPE_CACHED, TYPE_MEMORY`

### 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 and Description
`MVTable(CreateTableData data, Store store)`

### Method Summary

All Methods Instance Methods Concrete Methods
`Index` `addIndex(SessionLocal session, java.lang.String indexName, int indexId, IndexColumn[] cols, int uniqueColumnCount, IndexType indexType, boolean create, java.lang.String indexComment)` Create an index for this table
`void` `addRow(SessionLocal session, Row row)` Add a row to the table and all indexes.
`boolean` `canDrop()` Check if this table can be dropped.
`boolean` `canGetRowCount(SessionLocal session)` Check if the row count can be retrieved quickly.
`boolean` `canTruncate()` Check if this table can be truncated.
`java.util.ArrayList<SessionLocal>` `checkDeadlock(SessionLocal session, SessionLocal clash, java.util.Set<SessionLocal> visited)` Check if a deadlock occurred.
`void` `checkSupportAlter()` Check if this table supports ALTER TABLE.
`void` `close(SessionLocal session)` Close the table object and flush changes.
`void` `commit()` Mark the transaction as committed, so that the modification counter of the database is incremented.
`boolean` `getContainsLargeObject()`
`long` `getDiskSpaceUsed()`
`java.util.ArrayList<Index>` `getIndexes()` Get all indexes for this table.
`int` `getMainIndexColumn()` Returns ID of main index column, or `SearchRow.ROWID_INDEX`.
`java.lang.String` `getMapName()`
`long` `getMaxDataModificationId()` Get the last data modification id.
`Row` `getRow(SessionLocal session, long key)` Get the given row.
`long` `getRowCount(SessionLocal session)` Get the row count for this table.
`long` `getRowCountApproximation(SessionLocal session)` Get the approximated row count for this table.
`Column` `getRowIdColumn()` Get the row id column if this table has one.
`Index` `getScanIndex(SessionLocal session)` Get the scan index to iterate through all rows.
`TableType` `getTableType()` Get the table type name
`protected void` `invalidate()` Set the main attributes to null to make sure the object is no longer used.
`boolean` `isDeterministic()` Check if the table is deterministic.
`boolean` `isLockedExclusively()` Check if this table is locked exclusively.
`boolean` `isLockedExclusivelyBy(SessionLocal session)` Check if the table is exclusively locked by this session.
`boolean` `isRowLockable()` Views, function tables, links, etc.
`boolean` `lock(SessionLocal session, boolean exclusive, boolean forceLockEvenInMvcc)` Lock the table for the given session.
`Row` `lockRow(SessionLocal session, Row row)` Locks row, preventing any updated to it, except from the session specified.
`void` `removeChildrenAndResources(SessionLocal session)` Delete all dependent children objects and resources of this object.
`void` `removeRow(SessionLocal session, Row row)` Remove a row from the table and all indexes.
`java.lang.String` `toString()`
`long` `truncate(SessionLocal session)` Remove all rows from the table and indexes.
`void` `unlock(SessionLocal s)` Release the lock for this session.
`void` `updateRow(SessionLocal session, Row oldRow, Row newRow)` Update a row to the table and all indexes.

### Methods inherited from class org.h2.table.TableBase

`getCreateSQL, getCreateSQLForMeta, getDropSQL, getMainIndexColumn, isGlobalTemporary`

### Methods inherited from class org.h2.table.Table

`addConstraint, addDependencies, addDependentView, addSequence, addSynonym, addTrigger, canReference, checkWritingAllowed, compareValues, convertInsertRow, convertUpdateRow, createRow, createRow, doesColumnExist, dropMultipleColumnsConstraintsAndIndexes, findColumn, findPrimaryKey, fire, fireAfterRow, fireBeforeRow, fireRow, getBestPlanItem, getCheckForeignKeyConstraints, getChildren, getColumn, getColumn, getColumn, getColumns, getCompareMode, getConstraints, getCreateSQLForCopy, getDependentViews, getIdentityColumn, getIndex, getIndexForColumn, getNullRow, getOnCommitDrop, getOnCommitTruncate, getPrimaryKey, getRowFactory, getScanIndex, getSQLTableType, getTemplateRow, getTemplateSimpleRow, getTriggers, getType, hasSelectTrigger, isHidden, isInsertable, isPersistData, isPersistIndexes, isQueryComparable, isTableExpression, isView, removeColumnExpressionsDependencies, removeConstraint, removeDependentView, removeIndex, removeIndexOrTransferOwnership, removeSequence, removeSynonym, removeTrigger, rename, renameColumn, setCheckForeignKeyConstraints, setColumns, setHidden, setOnCommitDrop, setOnCommitTruncate, setTableExpression, updateRows`

### Methods inherited from class org.h2.schema.SchemaObject

`getSchema, getSQL, getSQL`

### Methods inherited from class org.h2.engine.DbObject

`checkRename, getComment, getDatabase, getId, getModificationId, getName, isTemporary, isValid, setComment, setModified, setObjectName, setTemporary`

### 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

#### WAITING_FOR_LOCK

    public static final DebuggingThreadLocal<java.lang.String> WAITING_FOR_LOCK

The table name this thread is waiting to lock.

#### EXCLUSIVE_LOCKS

    public static final DebuggingThreadLocal<java.util.ArrayList<java.lang.String>> EXCLUSIVE_LOCKS

The table names this thread has exclusively locked.

#### SHARED_LOCKS

    public static final DebuggingThreadLocal<java.util.ArrayList<java.lang.String>> SHARED_LOCKS

The tables names this thread has a shared lock on.

### Constructor Detail

#### MVTable

    public MVTable(CreateTableData data,
                   Store store)

### Method Detail

#### getMapName

    public java.lang.String getMapName()

#### lock

    public boolean lock(SessionLocal session,
                        boolean exclusive,
                        boolean forceLockEvenInMvcc)

Description copied from class: `Table`
Lock the table for the given session. This method waits until the lock is granted.

Overrides:
  `lock` in class `Table`
Parameters:
  `session` - the session
  `exclusive` - true for write locks, false for read locks
  `forceLockEvenInMvcc` - lock even in the MVCC mode
Returns:
  true if the table was already exclusively locked by this session.

#### unlock

    public void unlock(SessionLocal s)

Description copied from class: `Table`
Release the lock for this session.

Overrides:
  `unlock` in class `Table`
Parameters:
  `s` - the session

#### close

    public void close(SessionLocal session)

Description copied from class: `Table`
Close the table object and flush changes.

Specified by:
  `close` in class `Table`
Parameters:
  `session` - the session

#### getRow

    public Row getRow(SessionLocal session,
                      long key)

Description copied from class: `Table`
Get the given row.

Overrides:
  `getRow` in class `Table`
Parameters:
  `session` - the session
  `key` - the primary key
Returns:
  the row

#### addIndex

    public Index addIndex(SessionLocal session,
                          java.lang.String indexName,
                          int indexId,
                          IndexColumn[] cols,
                          int uniqueColumnCount,
                          IndexType indexType,
                          boolean create,
                          java.lang.String indexComment)

Description copied from class: `Table`
Create an index for this table

Specified by:
  `addIndex` in class `Table`
Parameters:
  `session` - the session
  `indexName` - the name of the index
  `indexId` - the id
  `cols` - the index columns
  `uniqueColumnCount` - the count of unique columns
  `indexType` - the index type
  `create` - whether this is a new index
  `indexComment` - the comment
Returns:
  the index

#### removeRow

    public void removeRow(SessionLocal session,
                          Row row)

Description copied from class: `Table`
Remove a row from the table and all indexes.

Specified by:
  `removeRow` in class `Table`
Parameters:
  `session` - the session
  `row` - the row

#### truncate

    public long truncate(SessionLocal session)

Description copied from class: `Table`
Remove all rows from the table and indexes.

Specified by:
  `truncate` in class `Table`
Parameters:
  `session` - the session
Returns:
  number of removed rows, possibly including uncommitted rows

#### addRow

    public void addRow(SessionLocal session,
                       Row row)

Description copied from class: `Table`
Add a row to the table and all indexes.

Specified by:
  `addRow` in class `Table`
Parameters:
  `session` - the session
  `row` - the row

#### updateRow

    public void updateRow(SessionLocal session,
                          Row oldRow,
                          Row newRow)

Description copied from class: `Table`
Update a row to the table and all indexes.

Overrides:
  `updateRow` in class `Table`
Parameters:
  `session` - the session
  `oldRow` - the row to update
  `newRow` - the row with updated values (_rowid_ suppose to be the same)

#### lockRow

    public Row lockRow(SessionLocal session,
                       Row row)

Description copied from class: `Table`
Locks row, preventing any updated to it, except from the session specified.

Overrides:
  `lockRow` in class `Table`
Parameters:
  `session` - the session
  `row` - to lock
Returns:
  locked row, or null if row does not exist anymore

#### getScanIndex

    public Index getScanIndex(SessionLocal session)

Description copied from class: `Table`
Get the scan index to iterate through all rows.

Specified by:
  `getScanIndex` in class `Table`
Parameters:
  `session` - the session
Returns:
  the index

#### getIndexes

    public java.util.ArrayList<Index> getIndexes()

Description copied from class: `Table`
Get all indexes for this table.

Specified by:
  `getIndexes` in class `Table`
Returns:
  the list of indexes

#### getMaxDataModificationId

    public long getMaxDataModificationId()

Description copied from class: `Table`
Get the last data modification id.

Specified by:
  `getMaxDataModificationId` in class `Table`
Returns:
  the modification id

#### removeChildrenAndResources

    public void removeChildrenAndResources(SessionLocal session)

Description copied from class: `DbObject`
Delete all dependent children objects and resources of this object.

Overrides:
  `removeChildrenAndResources` in class `Table`
Parameters:
  `session` - the session

#### getRowCount

    public long getRowCount(SessionLocal session)

Description copied from class: `Table`
Get the row count for this table.

Specified by:
  `getRowCount` in class `Table`
Parameters:
  `session` - the session
Returns:
  the row count

#### getRowCountApproximation

    public long getRowCountApproximation(SessionLocal session)

Description copied from class: `Table`
Get the approximated row count for this table.

Specified by:
  `getRowCountApproximation` in class `Table`
Parameters:
  `session` - the session
Returns:
  the approximated row count

#### getDiskSpaceUsed

    public long getDiskSpaceUsed()

Overrides:
  `getDiskSpaceUsed` in class `Table`

#### isRowLockable

    public boolean isRowLockable()

Description copied from class: `Table`
Views, function tables, links, etc. do not support locks

Overrides:
  `isRowLockable` in class `Table`
Returns:
  true if table supports row-level locks

#### commit

    public void commit()

Mark the transaction as committed, so that the modification counter of the database is incremented.

#### getMainIndexColumn

    public int getMainIndexColumn()

Description copied from class: `Table`
Returns ID of main index column, or `SearchRow.ROWID_INDEX`.

Overrides:
  `getMainIndexColumn` in class `Table`
Returns:
  ID of main index column, or `SearchRow.ROWID_INDEX`

#### canDrop

    public boolean canDrop()

Description copied from class: `Table`
Check if this table can be dropped.

Specified by:
  `canDrop` in class `Table`
Returns:
  true if it can

#### canGetRowCount

    public boolean canGetRowCount(SessionLocal session)

Description copied from class: `Table`
Check if the row count can be retrieved quickly.

Specified by:
  `canGetRowCount` in class `Table`
Parameters:
  `session` - the session
Returns:
  true if it can

#### canTruncate

    public boolean canTruncate()

Description copied from class: `Table`
Check if this table can be truncated.

Overrides:
  `canTruncate` in class `Table`
Returns:
  true if it can

#### checkDeadlock

    public java.util.ArrayList<SessionLocal> checkDeadlock(SessionLocal session,
                                                           SessionLocal clash,
                                                           java.util.Set<SessionLocal> visited)

Description copied from class: `Table`
Check if a deadlock occurred. This method is called recursively. There is a circle if the session to be tested has already being visited. If this session is part of the circle (if it is the clash session), the method must return an empty object array. Once a deadlock has been detected, the methods must add the session to the list. If this session is not part of the circle, or if no deadlock is detected, this method returns null.

Overrides:
  `checkDeadlock` in class `Table`
Parameters:
  `session` - the session to be tested for
  `clash` - set with sessions already visited, and null when starting verification
  `visited` - set with sessions already visited, and null when starting verification
Returns:
  an object array with the sessions involved in the deadlock, or null

#### checkSupportAlter

    public void checkSupportAlter()

Description copied from class: `Table`
Check if this table supports ALTER TABLE.

Specified by:
  `checkSupportAlter` in class `Table`

#### getContainsLargeObject

    public boolean getContainsLargeObject()

#### getRowIdColumn

    public Column getRowIdColumn()

Description copied from class: `Table`
Get the row id column if this table has one.

Overrides:
  `getRowIdColumn` in class `Table`
Returns:
  the row id column, or null

#### getTableType

    public TableType getTableType()

Description copied from class: `Table`
Get the table type name

Specified by:
  `getTableType` in class `Table`
Returns:
  the table type name

#### isDeterministic

    public boolean isDeterministic()

Description copied from class: `Table`
Check if the table is deterministic.

Specified by:
  `isDeterministic` in class `Table`
Returns:
  true if it is

#### isLockedExclusively

    public boolean isLockedExclusively()

Description copied from class: `Table`
Check if this table is locked exclusively.

Overrides:
  `isLockedExclusively` in class `Table`
Returns:
  true if it is.

#### isLockedExclusivelyBy

    public boolean isLockedExclusivelyBy(SessionLocal session)

Description copied from class: `Table`
Check if the table is exclusively locked by this session.

Overrides:
  `isLockedExclusivelyBy` in class `Table`
Parameters:
  `session` - the session
Returns:
  true if it is

#### invalidate

    protected void invalidate()

Description copied from class: `DbObject`
Set the main attributes to null to make sure the object is no longer used.

Overrides:
  `invalidate` in class `DbObject`

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `DbObject`