Package org.h2.table

# Class TableFilter

java.lang.Object
org.h2.table.TableFilter

All Implemented Interfaces:
  `ColumnResolver`

public class TableFilter extends Object implements ColumnResolver
A table filter represents a table that is used in a query. There is one such object whenever a table (or view) is used in a query. For example the following query has 2 table filters: SELECT * FROM TEST T1, TEST T2.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`TableFilter.TableFilterVisitor`
A visitor for table filters.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected boolean`
`joinOuterIndirect`
Whether this is a direct or indirect (nested) outer join
`static final Comparator<TableFilter>`
`ORDER_IN_FROM_COMPARATOR`
Comparator that uses order in FROM clause as a sort key.

## Constructor Summary

Constructors
Constructor
Description
`TableFilter(SessionLocal session, Table table, String alias, boolean rightsChecked, Select select, int orderInFrom, IndexHints indexHints)`
Create a new table filter object.

## Method Summary

Modifier and Type
Method
Description
`void`
`addCommonJoinColumns(Column leftColumn, Column replacementColumn, TableFilter replacementFilter)`
Add a column to the common join column list for a left table filter.
`void`
`addCommonJoinColumnToExclude(Column columnToExclude)`
Add an excluded column to the common join column list.
`void`
`addFilter(Expression on)`
Add the join condition.
`void`
`addFilterCondition(Expression condition, boolean isJoin)`
Add a filter condition.
`void`
`addIndexCondition(IndexCondition condition)`
Add an index condition.
`void`
`addJoin(TableFilter filter, boolean outer, Expression on)`
Add a joined table.
`void`
`createIndexConditions()`
Create the index conditions for this filter if needed.
`Column`
`findColumn(String name)`
Get the column with the specified name.
`Row`
`get()`
Get the current row.
`PlanItem`
`getBestPlanItem(SessionLocal s, TableFilter[] filters, int filter, AllColumnsForPlan allColumnsSet)`
Get the best plan item (index, cost) to use for the current join order.
`Column`
`getColumn(String columnName, boolean ifExists)`
Get the column with the given name.
`String`
`getColumnName(Column column)`
Get the name of the specified column.
`Column[]`
`getColumns()`
Get the column list.
`LinkedHashMap<Column,Column>`
`getCommonJoinColumns()`
Returns common join columns map.
`TableFilter`
`getCommonJoinColumnsFilter()`
Returns common join columns table filter.
`Expression`
`getFilterCondition()`
`Index`
`getIndex()`
`ArrayList<IndexCondition>`
`getIndexConditions()`
`IndexCursor`
`getIndexCursor()`
`IndexHints`
`getIndexHints()`
`TableFilter`
`getJoin()`
`Expression`
`getJoinCondition()`
`int[]`
`getMasks()`
`TableFilter`
`getNestedJoin()`
`int`
`getOrderInFrom()`
Get the order number (index) of this table filter in the "from" clause of the query.
`StringBuilder`
`getPlanSQL(StringBuilder builder, boolean isJoin, int sqlFlags)`
Get the query execution plan text to use for this table filter and append it to the specified builder.
`Column`
`getRowIdColumn()`
Get the row id pseudo column, if there is one.
`String`
`getSchemaName()`
Get the schema name or null.
`Select`
`getSelect()`
Get the select statement.
`SessionLocal`
`getSession()`
`Column[]`
`getSystemColumns()`
Get the system columns that this table understands.
`Table`
`getTable()`
`String`
`getTableAlias()`
Get the table alias name.
`TableFilter`
`getTableFilter()`
Get the table filter.
`Value`
`getValue(Column column)`
Get the value for the given column.
`boolean`
`hasDerivedColumnList()`
Returns whether this column resolver has a derived column list.
`int`
`hashCode()`
`boolean`
`hasInComparisons()`
Are there any index conditions that involve IN(...).
`boolean`
`isCommonJoinColumnToExclude(Column c)`
Check if the given column is an excluded common join column.
`boolean`
`isEvaluatable()`
`boolean`
`isJoinOuter()`
Whether this is an outer joined table.
`boolean`
`isJoinOuterIndirect()`
Whether this is indirectly an outer joined table (nested within an inner join).
`boolean`
`isNoFromClauseFilter()`
Returns whether this is a table filter with implicit DUAL table for a SELECT without a FROM clause.
`boolean`
`isNullRow()`
`boolean`
`isUsed()`
`void`
`lock(SessionLocal s)`
Lock the table.
`void`
`mapColumns(ColumnResolver resolver, int level, boolean outer)`
Map the columns to the given column resolver.
`boolean`
`next()`
Check if there are more rows to read.
`void`
`prepare()`
Prepare reading rows.
`void`
`removeFilterCondition()`
Remove the filter condition.
`void`
`removeJoin()`
Remove the joined table
`void`
`removeJoinCondition()`
Remove the join condition.
`void`
`reset()`
Reset to the current position.
`void`
`set(Row current)`
Set the current row.
`void`
`setAlias(String alias)`
`void`
`setDerivedColumns(ArrayList<String> derivedColumnNames)`
Set derived column list.
`void`
`setEvaluatable(boolean evaluatable)`
`void`
`setEvaluatable(TableFilter filter, boolean b)`
Update the filter and join conditions of this and all joined tables with the information that the given table filter and all nested filter can now return rows or not.
`void`
`setFullCondition(Expression condition)`
`void`
`setIndex(Index index, boolean reverse)`
`void`
`setNestedJoin(TableFilter filter)`
Set a nested joined table.
`protected void`
`setNullRow()`
Set the state of this and all nested tables to the NULL row.
`void`
`setPlanItem(PlanItem item)`
Set what plan item (index, cost, masks) to use.
`void`
`setUsed(boolean used)`
`void`
`startQuery(SessionLocal s)`
Start the query.
`String`
`toString()`
`void`
`visit(TableFilter.TableFilterVisitor visitor)`
Visit this and all joined or nested table filters.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.h2.table.ColumnResolver

`optimize`

## Field Details

### ORDER_IN_FROM_COMPARATOR

public static final Comparator<TableFilter> ORDER_IN_FROM_COMPARATOR
Comparator that uses order in FROM clause as a sort key.

### joinOuterIndirect

protected boolean joinOuterIndirect
Whether this is a direct or indirect (nested) outer join

## Constructor Details

### TableFilter

public TableFilter(SessionLocal session, Table table, String alias, boolean rightsChecked, Select select, int orderInFrom, IndexHints indexHints)
Create a new table filter object.

Parameters:
  `session` - the session
  `table` - the table from where to read data
  `alias` - the alias name
  `rightsChecked` - true if rights are already checked
  `select` - the select statement
  `orderInFrom` - original order number (index) of this table filter in
  `indexHints` - the index hints to be used by the query planner

## Method Details

### getOrderInFrom

public int getOrderInFrom()
Get the order number (index) of this table filter in the "from" clause of the query.

Returns:
  the index (0, 1, 2,...)

### getIndexCursor

public IndexCursor getIndexCursor()

### getSelect

public Select getSelect()
Description copied from interface: `ColumnResolver`
Get the select statement.

Specified by:
  `getSelect` in interface `ColumnResolver`
Returns:
  the select statement

### getTable

public Table getTable()

### lock

public void lock(SessionLocal s)
Lock the table. This will also lock joined tables.

Parameters:
  `s` - the session

### getBestPlanItem

public PlanItem getBestPlanItem(SessionLocal s, TableFilter[] filters, int filter, AllColumnsForPlan allColumnsSet)
Get the best plan item (index, cost) to use for the current join order.

Parameters:
  `s` - the session
  `filters` - all joined table filters
  `filter` - the current table filter index
  `allColumnsSet` - the set of all columns
Returns:
  the best plan item

### setPlanItem

public void setPlanItem(PlanItem item)
Set what plan item (index, cost, masks) to use.

Parameters:
  `item` - the plan item

### prepare

public void prepare()
Prepare reading rows. This method will remove all index conditions that can not be used, and optimize the conditions.

### startQuery

public void startQuery(SessionLocal s)
Start the query. This will reset the scan counts.

Parameters:
  `s` - the session

### reset

public void reset()
Reset to the current position.

### next

public boolean next()
Check if there are more rows to read.

Returns:
  true if there are

### isNullRow

public boolean isNullRow()

### setNullRow

protected void setNullRow()
Set the state of this and all nested tables to the NULL row.

### get

public Row get()
Get the current row.

Returns:
  the current row, or null

### set

public void set(Row current)
Set the current row.

Parameters:
  `current` - the current row

### getTableAlias

public String getTableAlias()
Get the table alias name. If no alias is specified, the table name is returned.

Specified by:
  `getTableAlias` in interface `ColumnResolver`
Returns:
  the alias name

### addIndexCondition

public void addIndexCondition(IndexCondition condition)
Add an index condition.

Parameters:
  `condition` - the index condition

### addFilterCondition

public void addFilterCondition(Expression condition, boolean isJoin)
Add a filter condition.

Parameters:
  `condition` - the condition
  `isJoin` - if this is in fact a join condition

### addJoin

public void addJoin(TableFilter filter, boolean outer, Expression on)
Add a joined table.

Parameters:
  `filter` - the joined table filter
  `outer` - if this is an outer join
  `on` - the join condition

### setNestedJoin

public void setNestedJoin(TableFilter filter)
Set a nested joined table.

Parameters:
  `filter` - the joined table filter

### addFilter

public void addFilter(Expression on)
Add the join condition.

Parameters:
  `on` - the condition

### mapColumns

public void mapColumns(ColumnResolver resolver, int level, boolean outer)
Map the columns to the given column resolver.

Parameters:
  `resolver` - the resolver
  `level` - the subquery level (0 is the top level query, 1 is the first subquery level)
  `outer` - whether this method was called from the outer query

### createIndexConditions

public void createIndexConditions()
Create the index conditions for this filter if needed.

### getJoin

public TableFilter getJoin()

### isJoinOuter

public boolean isJoinOuter()
Whether this is an outer joined table.

Returns:
  true if it is

### isJoinOuterIndirect

public boolean isJoinOuterIndirect()
Whether this is indirectly an outer joined table (nested within an inner join).

Returns:
  true if it is

### getPlanSQL

public StringBuilder getPlanSQL(StringBuilder builder, boolean isJoin, int sqlFlags)
Get the query execution plan text to use for this table filter and append it to the specified builder.

Parameters:
  `builder` - string builder to append to
  `isJoin` - if this is a joined table
  `sqlFlags` - formatting flags
Returns:
  the specified builder

### getMasks

public int[] getMasks()

### getIndexConditions

public ArrayList<IndexCondition> getIndexConditions()

### getIndex

public Index getIndex()

### setIndex

public void setIndex(Index index, boolean reverse)

### setUsed

public void setUsed(boolean used)

### isUsed

public boolean isUsed()

### removeJoin

public void removeJoin()
Remove the joined table

### getJoinCondition

public Expression getJoinCondition()

### removeJoinCondition

public void removeJoinCondition()
Remove the join condition.

### getFilterCondition

public Expression getFilterCondition()

### removeFilterCondition

public void removeFilterCondition()
Remove the filter condition.

### setFullCondition

public void setFullCondition(Expression condition)

### setEvaluatable

public void setEvaluatable(TableFilter filter, boolean b)
Update the filter and join conditions of this and all joined tables with the information that the given table filter and all nested filter can now return rows or not.

Parameters:
  `filter` - the table filter
  `b` - the new flag

### setEvaluatable

public void setEvaluatable(boolean evaluatable)

### getSchemaName

public String getSchemaName()
Description copied from interface: `ColumnResolver`
Get the schema name or null.

Specified by:
  `getSchemaName` in interface `ColumnResolver`
Returns:
  the schema name or null

### getColumns

public Column[] getColumns()
Description copied from interface: `ColumnResolver`
Get the column list.

Specified by:
  `getColumns` in interface `ColumnResolver`
Returns:
  the column list

### findColumn

public Column findColumn(String name)
Description copied from interface: `ColumnResolver`
Get the column with the specified name.

Specified by:
  `findColumn` in interface `ColumnResolver`
Parameters:
  `name` - the column name, must be a derived name if this column resolver has a derived column list
Returns:
  the column with the specified name, or `null`

### getColumnName

public String getColumnName(Column column)
Description copied from interface: `ColumnResolver`
Get the name of the specified column.

Specified by:
  `getColumnName` in interface `ColumnResolver`
Parameters:
  `column` - column
Returns:
  column name

### hasDerivedColumnList

public boolean hasDerivedColumnList()
Description copied from interface: `ColumnResolver`
Returns whether this column resolver has a derived column list.

Specified by:
  `hasDerivedColumnList` in interface `ColumnResolver`
Returns:
  `true` if this column resolver has a derived column list, `false` otherwise

### getColumn

public Column getColumn(String columnName, boolean ifExists)
Get the column with the given name.

Parameters:
  `columnName` - the column name
  `ifExists` - if `true` return `null` if column does not exist
Returns:
  the column
Throws:
  `DbException` - if the column was not found and `ifExists` is `false`

### getSystemColumns

public Column[] getSystemColumns()
Get the system columns that this table understands. This is used for compatibility with other databases. The columns are only returned if the current mode supports system columns.

Specified by:
  `getSystemColumns` in interface `ColumnResolver`
Returns:
  the system columns

### getRowIdColumn

public Column getRowIdColumn()
Description copied from interface: `ColumnResolver`
Get the row id pseudo column, if there is one.

Specified by:
  `getRowIdColumn` in interface `ColumnResolver`
Returns:
  the row id column or null

### getValue

public Value getValue(Column column)
Description copied from interface: `ColumnResolver`
Get the value for the given column.

Specified by:
  `getValue` in interface `ColumnResolver`
Parameters:
  `column` - the column
Returns:
  the value

### getTableFilter

public TableFilter getTableFilter()
Description copied from interface: `ColumnResolver`
Get the table filter.

Specified by:
  `getTableFilter` in interface `ColumnResolver`
Returns:
  the table filter

### setAlias

public void setAlias(String alias)

### setDerivedColumns

public void setDerivedColumns(ArrayList<String> derivedColumnNames)
Set derived column list.

Parameters:
  `derivedColumnNames` - names of derived columns

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### addCommonJoinColumns

public void addCommonJoinColumns(Column leftColumn, Column replacementColumn, TableFilter replacementFilter)
Add a column to the common join column list for a left table filter.

Parameters:
  `leftColumn` - the column on the left side
  `replacementColumn` - the column to use instead, may be the same as column on the left side
  `replacementFilter` - the table filter for replacement columns

### addCommonJoinColumnToExclude

public void addCommonJoinColumnToExclude(Column columnToExclude)
Add an excluded column to the common join column list.

Parameters:
  `columnToExclude` - the column to exclude

### getCommonJoinColumns

public LinkedHashMap<Column,Column> getCommonJoinColumns()
Returns common join columns map.

Returns:
  common join columns map, or `null`

### getCommonJoinColumnsFilter

public TableFilter getCommonJoinColumnsFilter()
Returns common join columns table filter.

Returns:
  common join columns table filter, or `null`

### isCommonJoinColumnToExclude

public boolean isCommonJoinColumnToExclude(Column c)
Check if the given column is an excluded common join column.

Parameters:
  `c` - the column to check
Returns:
  true if this is an excluded common join column

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### hasInComparisons

public boolean hasInComparisons()
Are there any index conditions that involve IN(...).

Returns:
  whether there are IN(...) comparisons

### getNestedJoin

public TableFilter getNestedJoin()

### visit

public void visit(TableFilter.TableFilterVisitor visitor)
Visit this and all joined or nested table filters.

Parameters:
  `visitor` - the visitor

### isEvaluatable

public boolean isEvaluatable()

### getSession

public SessionLocal getSession()

### getIndexHints

public IndexHints getIndexHints()

### isNoFromClauseFilter

public boolean isNoFromClauseFilter()
Returns whether this is a table filter with implicit DUAL table for a SELECT without a FROM clause.

Returns:
  whether this is a table filter with implicit DUAL table