org.h2.expression

## Class ExpressionVisitor

- java.lang.Object
- - org.h2.expression.ExpressionVisitor

    public class ExpressionVisitor
    extends java.lang.Object

The visitor pattern is used to iterate through all expressions of a query to optimize a statement.

### Field Summary

Fields
`static int` `DETERMINISTIC` Does the expression return the same results for the same parameters?
`static ExpressionVisitor` `DETERMINISTIC_VISITOR` The visitor singleton for the type DETERMINISTIC.
`static int` `EVALUATABLE` Can the expression be evaluated, that means are all columns set to 'evaluatable'?
`static ExpressionVisitor` `EVALUATABLE_VISITOR` The visitor singleton for the type EVALUATABLE.
`static int` `GET_COLUMNS` Get all referenced columns.
`static int` `GET_DEPENDENCIES` Request to get the set of dependencies (addDependency).
`static int` `INDEPENDENT` Is the value independent on unset parameters or on columns of a higher level query, or sequence values (that means can it be evaluated right now)?
`static ExpressionVisitor` `INDEPENDENT_VISITOR` The visitor singleton for the type INDEPENDENT.
`static int` `NOT_FROM_RESOLVER` Does an expression have no relation to the given table filter (getResolver)?
`static int` `OPTIMIZABLE_MIN_MAX_COUNT_ALL` Are all aggregates MIN(column), MAX(column), or COUNT(*) for the given table (getTable)?
`static int` `QUERY_COMPARABLE` Can the expression be added to a condition of an outer query.
`static ExpressionVisitor` `QUERY_COMPARABLE_VISITOR` The visitor singleton for the type QUERY_COMPARABLE.
`static int` `READONLY` Does the expression have no side effects (change the data)?
`static ExpressionVisitor` `READONLY_VISITOR` The visitor singleton for the type EVALUATABLE.
`static int` `SET_MAX_DATA_MODIFICATION_ID` Request to set the latest modification id (addDataModificationId).

### Method Summary

Methods
`void` `addDataModificationId(long value)` Update the field maxDataModificationId if this value is higher than the current value.
`void` `addDependency(DbObject obj)` Add a new dependency to the set of dependencies.
`static java.util.HashSet<Column>` `allColumnsForTableFilters(TableFilter[] filters)` Get the set of columns of all tables.
`static ExpressionVisitor` `getColumnsVisitor(java.util.HashSet<Column> columns)` Create a new visitor to get all referenced columns.
`java.util.HashSet<DbObject>` `getDependencies()` Get the dependency set.
`static ExpressionVisitor` `getDependenciesVisitor(java.util.HashSet<DbObject> dependencies)` Create a new visitor object to collect dependencies.
`long` `getMaxDataModificationId()` Get the last data modification.
`static ExpressionVisitor` `getMaxModificationIdVisitor()`
`static ExpressionVisitor` `getOptimizableVisitor(Table table)` Create a new visitor to check if all aggregates are for the given table.
`ColumnResolver` `getResolver()` Get the column resolver.
`Table` `getTable()` Get the table.
`int` `getType()` Get the visitor type.
`ExpressionVisitor` `incrementQueryLevel(int offset)` Increment or decrement the query level.

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

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

### Field Detail

#### INDEPENDENT

    public static final int INDEPENDENT

Is the value independent on unset parameters or on columns of a higher level query, or sequence values (that means can it be evaluated right now)?

See Also:
  Constant Field Values

#### INDEPENDENT_VISITOR

    public static final ExpressionVisitor INDEPENDENT_VISITOR

The visitor singleton for the type INDEPENDENT.

#### OPTIMIZABLE_MIN_MAX_COUNT_ALL

    public static final int OPTIMIZABLE_MIN_MAX_COUNT_ALL

Are all aggregates MIN(column), MAX(column), or COUNT(*) for the given table (getTable)?

See Also:
  Constant Field Values

#### DETERMINISTIC

    public static final int DETERMINISTIC

Does the expression return the same results for the same parameters?

See Also:
  Constant Field Values

#### DETERMINISTIC_VISITOR

    public static final ExpressionVisitor DETERMINISTIC_VISITOR

The visitor singleton for the type DETERMINISTIC.

#### EVALUATABLE

    public static final int EVALUATABLE

Can the expression be evaluated, that means are all columns set to 'evaluatable'?

See Also:
  Constant Field Values

#### EVALUATABLE_VISITOR

    public static final ExpressionVisitor EVALUATABLE_VISITOR

The visitor singleton for the type EVALUATABLE.

#### SET_MAX_DATA_MODIFICATION_ID

    public static final int SET_MAX_DATA_MODIFICATION_ID

Request to set the latest modification id (addDataModificationId).

See Also:
  Constant Field Values

#### READONLY

    public static final int READONLY

Does the expression have no side effects (change the data)?

See Also:
  Constant Field Values

#### READONLY_VISITOR

    public static final ExpressionVisitor READONLY_VISITOR

The visitor singleton for the type EVALUATABLE.

#### NOT_FROM_RESOLVER

    public static final int NOT_FROM_RESOLVER

Does an expression have no relation to the given table filter (getResolver)?

See Also:
  Constant Field Values

#### GET_DEPENDENCIES

    public static final int GET_DEPENDENCIES

Request to get the set of dependencies (addDependency).

See Also:
  Constant Field Values

#### QUERY_COMPARABLE

    public static final int QUERY_COMPARABLE

Can the expression be added to a condition of an outer query. Example: ROWNUM() can't be added as a condition to the inner query of select id from (select t.*, rownum as r from test t) where r between 2 and 3; Also a sequence expression must not be used.

See Also:
  Constant Field Values

#### GET_COLUMNS

    public static final int GET_COLUMNS

Get all referenced columns.

See Also:
  Constant Field Values

#### QUERY_COMPARABLE_VISITOR

    public static final ExpressionVisitor QUERY_COMPARABLE_VISITOR

The visitor singleton for the type QUERY_COMPARABLE.

### Method Detail

#### getDependenciesVisitor

    public static ExpressionVisitor getDependenciesVisitor(java.util.HashSet<DbObject> dependencies)

Create a new visitor object to collect dependencies.

Parameters:
  `dependencies` - the dependencies set
Returns:
  the new visitor

#### getOptimizableVisitor

    public static ExpressionVisitor getOptimizableVisitor(Table table)

Create a new visitor to check if all aggregates are for the given table.

Parameters:
  `table` - the table
Returns:
  the new visitor

#### getColumnsVisitor

    public static ExpressionVisitor getColumnsVisitor(java.util.HashSet<Column> columns)

Create a new visitor to get all referenced columns.

Parameters:
  `columns` - the columns map
Returns:
  the new visitor

#### getMaxModificationIdVisitor

    public static ExpressionVisitor getMaxModificationIdVisitor()

#### addDependency

    public void addDependency(DbObject obj)

Add a new dependency to the set of dependencies. This is used for GET_DEPENDENCIES visitors.

Parameters:
  `obj` - the additional dependency.

#### getDependencies

    public java.util.HashSet<DbObject> getDependencies()

Get the dependency set. This is used for GET_DEPENDENCIES visitors.

Returns:
  the set

#### incrementQueryLevel

    public ExpressionVisitor incrementQueryLevel(int offset)

Increment or decrement the query level.

Parameters:
  `offset` - 1 to increment, -1 to decrement
Returns:
  a clone of this expression visitor, with the changed query level

#### getResolver

    public ColumnResolver getResolver()

Get the column resolver. This is used for NOT_FROM_RESOLVER visitors.

Returns:
  the column resolver

#### addDataModificationId

    public void addDataModificationId(long value)

Update the field maxDataModificationId if this value is higher than the current value. This is used for SET_MAX_DATA_MODIFICATION_ID visitors.

Parameters:
  `value` - the data modification id

#### getMaxDataModificationId

    public long getMaxDataModificationId()

Get the last data modification. This is used for SET_MAX_DATA_MODIFICATION_ID visitors.

Returns:
  the maximum modification id

#### getTable

    public Table getTable()

Get the table. This is used for OPTIMIZABLE_MIN_MAX_COUNT_ALL visitors.

Returns:
  the table

#### getType

    public int getType()

Get the visitor type.

Returns:
  the type

#### allColumnsForTableFilters

    public static java.util.HashSet<Column> allColumnsForTableFilters(TableFilter[] filters)

Get the set of columns of all tables.

Parameters:
  `filters` - the filters
Returns:
  the set of columns