org.h2.expression
Class ExpressionVisitor

java.lang.Object
  extended by 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
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
 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 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