Package org.h2.expression

# Class ExpressionVisitor

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

public final class ExpressionVisitor extends Object
The visitor pattern is used to iterate through all expressions of a query to optimize a statement.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`DECREMENT_QUERY_LEVEL`
Decrement query level of all expression columns.
`static final int`
`DETERMINISTIC`
Does the expression return the same results for the same parameters?
`static final ExpressionVisitor`
`DETERMINISTIC_VISITOR`
The visitor singleton for the type DETERMINISTIC.
`static final int`
`EVALUATABLE`
Can the expression be evaluated, that means are all columns set to 'evaluatable'?
`static final ExpressionVisitor`
`EVALUATABLE_VISITOR`
The visitor singleton for the type EVALUATABLE.
`static final int`
`GET_COLUMNS1`
Get all referenced columns for the optimiser.
`static final int`
`GET_COLUMNS2`
Get all referenced columns.
`static final int`
`GET_DEPENDENCIES`
Request to get the set of dependencies (addDependency).
`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)?
`static final ExpressionVisitor`
`INDEPENDENT_VISITOR`
The visitor singleton for the type INDEPENDENT.
`static final int`
`NOT_FROM_RESOLVER`
Does an expression have no relation to the given table filter (getResolver)?
`static final int`
`OPTIMIZABLE_AGGREGATE`
Are all aggregates MIN(column), MAX(column), COUNT(*), MEDIAN(column), ENVELOPE(count) for the given table (getTable)?
`static final int`
`QUERY_COMPARABLE`
Can the expression be added to a condition of an outer query.
`static final ExpressionVisitor`
`QUERY_COMPARABLE_VISITOR`
The visitor singleton for the type QUERY_COMPARABLE.
`static final int`
`READONLY`
Does the expression have no side effects (change the data)?
`static final ExpressionVisitor`
`READONLY_VISITOR`
The visitor singleton for the type EVALUATABLE.
`static final int`
`SET_MAX_DATA_MODIFICATION_ID`
Request to set the latest modification id (addDataModificationId).

## Method Summary

Modifier and Type
Method
Description
`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 void`
`allColumnsForTableFilters(TableFilter[] filters, AllColumnsForPlan allColumnsSet)`
Get the set of columns of all tables.
`HashSet<ColumnResolver>`
`getColumnResolvers()`
Get the set of column resolvers.
`static ExpressionVisitor`
`getColumnsVisitor(HashSet<Column> columns, Table table)`
Create a new visitor to get all referenced columns.
`static ExpressionVisitor`
`getColumnsVisitor(AllColumnsForPlan columns)`
Create a new visitor to get all referenced columns.
`static ExpressionVisitor`
`getDecrementQueryLevelVisitor(HashSet<ColumnResolver> columnResolvers, int queryDecrement)`
Create a new visitor to decrement query level in columns with the specified resolvers.
`HashSet<DbObject>`
`getDependencies()`
Get the dependency set.
`static ExpressionVisitor`
`getDependenciesVisitor(HashSet<DbObject> dependencies)`
Create a new visitor object to collect dependencies.
`long`
`getMaxDataModificationId()`
Get the last data modification.
`static ExpressionVisitor`
`getMaxModificationIdVisitor()`
`static ExpressionVisitor`
`getNotFromResolverVisitor(ColumnResolver resolver)`
Create a new visitor to check if no expression depends on the given resolver.
`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 Details

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

public static final int OPTIMIZABLE_AGGREGATE
Are all aggregates MIN(column), MAX(column), COUNT(*), MEDIAN(column), ENVELOPE(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_COLUMNS1

public static final int GET_COLUMNS1
Get all referenced columns for the optimiser.

See Also:
  - Constant Field Values

### GET_COLUMNS2

public static final int GET_COLUMNS2
Get all referenced columns.

See Also:
  - Constant Field Values

### DECREMENT_QUERY_LEVEL

public static final int DECREMENT_QUERY_LEVEL
Decrement query level of all expression 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 Details

### getDependenciesVisitor

public static ExpressionVisitor getDependenciesVisitor(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

### getNotFromResolverVisitor

public static ExpressionVisitor getNotFromResolverVisitor(ColumnResolver resolver)
Create a new visitor to check if no expression depends on the given resolver.

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

### getColumnsVisitor

public static ExpressionVisitor getColumnsVisitor(AllColumnsForPlan columns)
Create a new visitor to get all referenced columns.

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

### getColumnsVisitor

public static ExpressionVisitor getColumnsVisitor(HashSet<Column> columns, Table table)
Create a new visitor to get all referenced columns.

Parameters:
  `columns` - the columns map
  `table` - table to gather columns from, or `null` to gather all columns
Returns:
  the new visitor

### getMaxModificationIdVisitor

public static ExpressionVisitor getMaxModificationIdVisitor()

### getDecrementQueryLevelVisitor

public static ExpressionVisitor getDecrementQueryLevelVisitor(HashSet<ColumnResolver> columnResolvers, int queryDecrement)
Create a new visitor to decrement query level in columns with the specified resolvers.

Parameters:
  `columnResolvers` - column resolvers
  `queryDecrement` - 0 to check whether operation is allowed, 1 to actually perform the decrement
Returns:
  the new visitor

### 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 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:
  this visitor or its clone 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

### getColumnResolvers

public HashSet<ColumnResolver> getColumnResolvers()
Get the set of column resolvers. This is used for `DECREMENT_QUERY_LEVEL` visitors.

Returns:
  the set

### 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 void allColumnsForTableFilters(TableFilter[] filters, AllColumnsForPlan allColumnsSet)
Get the set of columns of all tables.

Parameters:
  `filters` - the filters
  `allColumnsSet` - the on-demand all-columns set