Package org.h2.command.query

# Class Select

java.lang.Object
org.h2.command.Prepared
org.h2.command.query.Query
org.h2.command.query.Select

public class Select extends Query
This class represents a simple SELECT statement.

For each select statement, visibleColumnCount <= distinctColumnCount <= expressionCount. The expression list count could include ORDER BY and GROUP BY expressions that are not in the select list.

The call sequence is init(), mapColumns() if it's a subquery, prepare().

## Field Summary

### Fields inherited from class org.h2.command.Prepared

`create, parameters, prepareAlways, session, sqlStatement, sqlTokens`

## Constructor Summary

Constructors
Constructor
Description
`Select(SessionLocal session, Select parentSelect)`

## Method Summary

Modifier and Type
Method
Description
`void`
`addCondition(Expression cond)`
Add a condition to the list of conditions.
`void`
`addGlobalCondition(Parameter param, int columnId, int comparisonType)`
Add a condition to the query.
`void`
`addTableFilter(TableFilter filter, boolean isTop)`
Add a table to the query.
`boolean`
`addWindow(String name, Window window)`
Adds a named window definition.
`boolean`
`allowGlobalConditions()`
Check whether adding condition to the query is allowed.
`void`
`fireBeforeSelectTriggers()`
Call the before triggers on all tables.
`Expression`
`getCondition()`
`double`
`getCost()`
Calculate the cost to execute this query.
`ForUpdate`
`getForUpdate()`
Returns FOR UPDATE clause, if any.
`ArrayList<Expression>`
`getGroupBy()`
`SelectGroups`
`getGroupDataIfCurrent(boolean window)`
Get the group data if there is currently a group-by active.
`Expression`
`getHaving()`
`Expression`
`getIfSingleRow()`
If this query is determined as a single-row query, returns a replacement expression.
`Select`
`getParentSelect()`
Returns parent select, or null.
`StringBuilder`
`getPlanSQL(StringBuilder builder, int sqlFlags)`
Appends the SQL statement with the execution plan.
`Expression`
`getQualify()`
`SortOrder`
`getSortOrder()`
`HashSet<Table>`
`getTables()`
Get all tables that are involved in this query.
`TableFilter`
`getTopTableFilter()`
`Window`
`getWindow(String name)`
Returns a window with specified name, or null.
`void`
`init()`
Initialize the query.
`boolean`
`isAnyDistinct()`
`boolean`
`isCacheable()`
`boolean`
`isConstantQuery()`
Check if this query will always return the same value and has no side effects.
`boolean`
`isEverything(ExpressionVisitor visitor)`
Check if this expression and all sub-expressions can fulfill a criteria.
`boolean`
`isGroupQuery()`
Checks if this query is a group query.
`boolean`
`isGroupWindowStage2()`
Checks if window stage of group window query is performed.
`boolean`
`isQuickAggregateQuery()`
Check if this is an aggregate query with direct lookup, for example a query of the type SELECT COUNT(*) FROM TEST or SELECT MAX(ID) FROM TEST.
`boolean`
`isUnion()`
Check if this is a UNION query.
`boolean`
`isWindowQuery()`
Checks if this query contains window functions.
`void`
`mapColumns(ColumnResolver resolver, int level, boolean outer)`
Map the columns to the given column resolver.
`void`
`prepareExpressions()`
`void`
`preparePlan()`
`protected ResultInterface`
`queryWithoutCache(long maxRows, ResultTarget target)`
Execute the query without checking the cache.
`void`
`setDistinct()`
Set the distinct flag.
`void`
`setDistinct(Expression[] distinctExpressions)`
Set the DISTINCT ON expressions.
`void`
`setEvaluatable(TableFilter tableFilter, boolean b)`
Change the evaluatable flag.
`void`
`setExplicitTable()`
Convert this SELECT to an explicit table (TABLE tableName).
`void`
`setExpressions(ArrayList<Expression> expressions)`
`void`
`setForUpdate(ForUpdate b)`
Set the FOR UPDATE clause.
`void`
`setGroupBy(ArrayList<Expression> group)`
`void`
`setGroupQuery()`
Set when SELECT statement contains (non-window) aggregate functions, GROUP BY clause or HAVING clause.
`void`
`setHaving(Expression having)`
`void`
`setQualify(Expression qualify)`
`void`
`setWildcard()`
Sets a wildcard expression as in "SELECT * FROM TEST".
`void`
`setWindowQuery()`
Called if this query contains window functions.
`void`
`updateAggregate(SessionLocal s, int stage)`
Update all aggregate function values.

### Methods inherited from class org.h2.command.query.Query

`collectDependencies, disableCache, exists, getColumnCount, getCostAsExpression, getExpressions, getFetch, getMaxDataModificationId, getOffset, getOuterQueryScope, getRowDataType, getType, hasOrder, invalidateCachedResult, isFetchPercent, isInPredicateResult, isNeverLazy, isQuery, isReadOnly, isRetryable, isStandardDistinct, isTransactional, isWithTies, prepare, query, query, queryMeta, setDistinctIfPossible, setFetch, setFetchPercent, setInPredicateResult, setInPredicateResultSortTypes, setNeverLazy, setOffset, setOrder, setOuterQueryScope, setWithClause, setWithTies, toTable, writeWithList`

### Methods inherited from class org.h2.command.Prepared

`checkCanceled, checkParameters, getCurrentRowNumber, getDatabase, getObjectId, getParameters, getPersistedObjectId, getPlanSQL, getSession, getSimpleSQL, getSQL, getSQLTokens, isWithParamValues, needRecompile, setCommand, setCurrentRowNumber, setParameterList, setPersistedObjectId, setPrepareAlways, setRow, setSession, setSQL, setWithParamValues, toString, update`

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

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

## Constructor Details

### Select

public Select(SessionLocal session, Select parentSelect)

## Method Details

### isUnion

public boolean isUnion()
Description copied from class: `Query`
Check if this is a UNION query.

Specified by:
  `isUnion` in class `Query`
Returns:
  `true` if this is a UNION query

### addTableFilter

public void addTableFilter(TableFilter filter, boolean isTop)
Add a table to the query.

Parameters:
  `filter` - the table to add
  `isTop` - if the table can be the first table in the query plan

### setExpressions

public void setExpressions(ArrayList<Expression> expressions)

### setExplicitTable

public void setExplicitTable()
Convert this SELECT to an explicit table (TABLE tableName).

### setWildcard

public void setWildcard()
Sets a wildcard expression as in "SELECT * FROM TEST".

### setGroupQuery

public void setGroupQuery()
Set when SELECT statement contains (non-window) aggregate functions, GROUP BY clause or HAVING clause.

### setWindowQuery

public void setWindowQuery()
Called if this query contains window functions.

### setGroupBy

public void setGroupBy(ArrayList<Expression> group)

### getGroupBy

public ArrayList<Expression> getGroupBy()

### getGroupDataIfCurrent

public SelectGroups getGroupDataIfCurrent(boolean window)
Get the group data if there is currently a group-by active.

Parameters:
  `window` - is this a window function
Returns:
  the grouped data

### setDistinct

public void setDistinct()
Set the distinct flag.

### setDistinct

public void setDistinct(Expression[] distinctExpressions)
Set the DISTINCT ON expressions.

Parameters:
  `distinctExpressions` - array of expressions

### isAnyDistinct

public boolean isAnyDistinct()

Overrides:
  `isAnyDistinct` in class `Query`
Returns:
  whether this query is a `DISTINCT` or `DISTINCT ON (...)` query

### addWindow

public boolean addWindow(String name, Window window)
Adds a named window definition.

Parameters:
  `name` - name
  `window` - window definition
Returns:
  true if a new definition was added, false if old definition was replaced

### getWindow

public Window getWindow(String name)
Returns a window with specified name, or null.

Parameters:
  `name` - name of the window
Returns:
  the window with specified name, or null

### addCondition

public void addCondition(Expression cond)
Add a condition to the list of conditions.

Parameters:
  `cond` - the condition to add

### getCondition

public Expression getCondition()

### queryWithoutCache

protected ResultInterface queryWithoutCache(long maxRows, ResultTarget target)
Description copied from class: `Query`
Execute the query without checking the cache. If a target is specified, the results are written to it, and the method returns null. If no target is specified, a new LocalResult is created and returned.

Specified by:
  `queryWithoutCache` in class `Query`
Parameters:
  `maxRows` - the limit as specified in the JDBC method call
  `target` - the target to write results to
Returns:
  the result

### init

public void init()
Description copied from class: `Query`
Initialize the query.

Specified by:
  `init` in class `Query`

### prepareExpressions

public void prepareExpressions()

Specified by:
  `prepareExpressions` in class `Query`

### preparePlan

public void preparePlan()

Specified by:
  `preparePlan` in class `Query`

### getCost

public double getCost()
Description copied from class: `Query`
Calculate the cost to execute this query.

Specified by:
  `getCost` in class `Query`
Returns:
  the cost

### getTables

public HashSet<Table> getTables()
Description copied from class: `Query`
Get all tables that are involved in this query.

Specified by:
  `getTables` in class `Query`
Returns:
  the set of tables

### fireBeforeSelectTriggers

public void fireBeforeSelectTriggers()
Description copied from class: `Query`
Call the before triggers on all tables.

Specified by:
  `fireBeforeSelectTriggers` in class `Query`

### getPlanSQL

public StringBuilder getPlanSQL(StringBuilder builder, int sqlFlags)
Description copied from class: `Prepared`
Appends the SQL statement with the execution plan.

Overrides:
  `getPlanSQL` in class `Prepared`
Parameters:
  `builder` - string builder
  `sqlFlags` - formatting flags
Returns:
  the execution plan

### setHaving

public void setHaving(Expression having)

### getHaving

public Expression getHaving()

### setQualify

public void setQualify(Expression qualify)

### getQualify

public Expression getQualify()

### getTopTableFilter

public TableFilter getTopTableFilter()

### getForUpdate

public ForUpdate getForUpdate()
Description copied from class: `Query`
Returns FOR UPDATE clause, if any.

Overrides:
  `getForUpdate` in class `Query`
Returns:
  FOR UPDATE clause or `null`

### setForUpdate

public void setForUpdate(ForUpdate b)
Description copied from class: `Query`
Set the FOR UPDATE clause.

Specified by:
  `setForUpdate` in class `Query`
Parameters:
  `b` - the new FOR UPDATE clause

### mapColumns

public void mapColumns(ColumnResolver resolver, int level, boolean outer)
Description copied from class: `Query`
Map the columns to the given column resolver.

Specified by:
  `mapColumns` in class `Query`
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

### setEvaluatable

public void setEvaluatable(TableFilter tableFilter, boolean b)
Description copied from class: `Query`
Change the evaluatable flag. This is used when building the execution plan.

Specified by:
  `setEvaluatable` in class `Query`
Parameters:
  `tableFilter` - the table filter
  `b` - the new value

### isQuickAggregateQuery

public boolean isQuickAggregateQuery()
Check if this is an aggregate query with direct lookup, for example a query of the type SELECT COUNT(*) FROM TEST or SELECT MAX(ID) FROM TEST.

Returns:
  true if a direct lookup is possible

### isGroupQuery

public boolean isGroupQuery()
Checks if this query is a group query.

Returns:
  whether this query is a group query.

### isWindowQuery

public boolean isWindowQuery()
Checks if this query contains window functions.

Returns:
  whether this query contains window functions

### isGroupWindowStage2

public boolean isGroupWindowStage2()
Checks if window stage of group window query is performed. If true, column resolver may not be used.

Returns:
  true if window stage of group window query is performed

### addGlobalCondition

public void addGlobalCondition(Parameter param, int columnId, int comparisonType)
Description copied from class: `Query`
Add a condition to the query. This is used for views.

Specified by:
  `addGlobalCondition` in class `Query`
Parameters:
  `param` - the parameter
  `columnId` - the column index (0 meaning the first column)
  `comparisonType` - the comparison type

### updateAggregate

public void updateAggregate(SessionLocal s, int stage)
Description copied from class: `Query`
Update all aggregate function values.

Specified by:
  `updateAggregate` in class `Query`
Parameters:
  `s` - the session
  `stage` - select stage

### isEverything

public boolean isEverything(ExpressionVisitor visitor)
Description copied from class: `Query`
Check if this expression and all sub-expressions can fulfill a criteria. If any part returns false, the result is false.

Specified by:
  `isEverything` in class `Query`
Parameters:
  `visitor` - the visitor
Returns:
  if the criteria can be fulfilled

### isCacheable

public boolean isCacheable()

Overrides:
  `isCacheable` in class `Prepared`

### allowGlobalConditions

public boolean allowGlobalConditions()
Description copied from class: `Query`
Check whether adding condition to the query is allowed. This is not allowed for views that have an order by and a limit, as it would affect the returned results.

Specified by:
  `allowGlobalConditions` in class `Query`
Returns:
  true if adding global conditions is allowed

### getSortOrder

public SortOrder getSortOrder()

### getParentSelect

public Select getParentSelect()
Returns parent select, or null.

Returns:
  parent select, or null

### isConstantQuery

public boolean isConstantQuery()
Description copied from class: `Query`
Check if this query will always return the same value and has no side effects.

Overrides:
  `isConstantQuery` in class `Query`
Returns:
  if this query will always return the same value and has no side effects.

### getIfSingleRow

public Expression getIfSingleRow()
Description copied from class: `Query`
If this query is determined as a single-row query, returns a replacement expression.

Overrides:
  `getIfSingleRow` in class `Query`
Returns:
  the expression, or `null`