Package org.h2.expression.analysis
Class WindowFunction
- java.lang.Object
-
- org.h2.expression.Expression
-
- org.h2.expression.analysis.DataAnalysisOperation
-
- org.h2.expression.analysis.WindowFunction
-
public class WindowFunction extends DataAnalysisOperation
A window function.
-
-
Field Summary
Fields Modifier and Type Field Description private Expression[]
args
private boolean
fromLast
private boolean
ignoreNulls
private WindowFunctionType
type
-
Fields inherited from class org.h2.expression.analysis.DataAnalysisOperation
over, overOrderBySort, select, STAGE_GROUP, STAGE_RESET, STAGE_WINDOW
-
Fields inherited from class org.h2.expression.Expression
AUTO_PARENTHESES, MAP_IN_AGGREGATE, MAP_IN_WINDOW, MAP_INITIAL, WITH_PARENTHESES, WITHOUT_PARENTHESES
-
Fields inherited from interface org.h2.util.HasSQL
ADD_PLAN_INFORMATION, DEFAULT_SQL_FLAGS, NO_CASTS, QUOTE_ONLY_WHEN_REQUIRED, REPLACE_LOBS_FOR_TRACE, TRACE_SQL_FLAGS
-
-
Constructor Summary
Constructors Constructor Description WindowFunction(WindowFunctionType type, Select select, Expression[] args)
Creates new instance of a window function.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.Object
createAggregateData()
Create aggregate data object specific to the subclass.protected Value
getAggregatedValue(SessionLocal session, java.lang.Object aggregateData)
Returns aggregated value.int
getCost()
Estimate the cost to process the expression.private void
getCumeDist(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> orderedData, int rowIdColumn)
WindowFunctionType
getFunctionType()
Returns the type of this function.private void
getLeadLag(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn, SessionLocal session)
static int
getMaxArgumentCount(WindowFunctionType type)
Returns maximal number of arguments for the specified type.static int
getMinArgumentCount(WindowFunctionType type)
Returns minimal number of arguments for the specified type.private void
getNth(SessionLocal session, java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
private static Value
getNthValue(java.util.Iterator<Value[]> iterator, int number, boolean ignoreNulls)
private static void
getNtile(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> orderedData, int rowIdColumn)
protected int
getNumExpressions()
Returns the number of expressions, excluding OVER clause.protected void
getOrderedResultLoop(SessionLocal session, java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
Returns result of this window function or window aggregate.private void
getRank(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
private static void
getRatioToReport(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
TypeInfo
getType()
Returns the data type.java.lang.StringBuilder
getUnenclosedSQL(java.lang.StringBuilder builder, int sqlFlags)
Get the SQL statement of this expression.boolean
isAggregate()
Checks whether this expression is an aggregate function.void
mapColumnsAnalysis(ColumnResolver resolver, int level, int innerState)
Map the columns of the resolver to expression columns.Expression
optimize(SessionLocal session)
Try to optimize the expression.protected void
rememberExpressions(SessionLocal session, Value[] array)
Stores current values of expressions into the specified array.void
setEvaluatable(TableFilter tableFilter, boolean b)
Tell the expression columns whether the table filter can return values now.void
setFromLast(boolean fromLast)
Sets FROM FIRST or FROM LAST clause value.void
setIgnoreNulls(boolean ignoreNulls)
Sets RESPECT NULLS or IGNORE NULLS clause value.protected void
updateAggregate(SessionLocal session, SelectGroups groupData, int groupRowId)
Update a row of an aggregate.protected void
updateGroupAggregates(SessionLocal session, int stage)
Invoked when processing group stage of grouped window queries to update arguments of this aggregate.-
Methods inherited from class org.h2.expression.analysis.DataAnalysisOperation
appendTailConditions, createOrder, getGroupData, getOverOrderBySort, getValue, getWindowData, isEverything, mapColumns, setOverCondition, updateAggregate, updateOrderedAggregate
-
Methods inherited from class org.h2.expression.Expression
addFilterConditions, createIndexConditions, getAlias, getBooleanValue, getColumnName, getColumnNameForView, getEnclosedSQL, getNonAliasExpression, getNotIfPossible, getNullable, getSchemaName, getSQL, getSQL, getSQL, getSQL, getSubexpression, getSubexpressionCount, getTableAlias, getTableName, getWhenSQL, getWhenValue, isConstant, isIdentity, isNullConstant, isValueSet, isWhenConditionOperand, needParentheses, optimizeCondition, toString, writeExpressions, writeExpressions
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.h2.util.HasSQL
getTraceSQL
-
-
-
-
Field Detail
-
type
private final WindowFunctionType type
-
args
private final Expression[] args
-
fromLast
private boolean fromLast
-
ignoreNulls
private boolean ignoreNulls
-
-
Constructor Detail
-
WindowFunction
public WindowFunction(WindowFunctionType type, Select select, Expression[] args)
Creates new instance of a window function.- Parameters:
type
- the typeselect
- the select statementargs
- arguments, or null
-
-
Method Detail
-
getMinArgumentCount
public static int getMinArgumentCount(WindowFunctionType type)
Returns minimal number of arguments for the specified type.- Parameters:
type
- the type of a window function- Returns:
- minimal number of arguments
-
getMaxArgumentCount
public static int getMaxArgumentCount(WindowFunctionType type)
Returns maximal number of arguments for the specified type.- Parameters:
type
- the type of a window function- Returns:
- maximal number of arguments
-
getNthValue
private static Value getNthValue(java.util.Iterator<Value[]> iterator, int number, boolean ignoreNulls)
-
getFunctionType
public WindowFunctionType getFunctionType()
Returns the type of this function.- Returns:
- the type of this function
-
setFromLast
public void setFromLast(boolean fromLast)
Sets FROM FIRST or FROM LAST clause value.- Parameters:
fromLast
- whether FROM LAST clause was specified.
-
setIgnoreNulls
public void setIgnoreNulls(boolean ignoreNulls)
Sets RESPECT NULLS or IGNORE NULLS clause value.- Parameters:
ignoreNulls
- whether IGNORE NULLS clause was specified
-
isAggregate
public boolean isAggregate()
Description copied from class:DataAnalysisOperation
Checks whether this expression is an aggregate function.- Specified by:
isAggregate
in classDataAnalysisOperation
- Returns:
- true if this is an aggregate function (including aggregates with OVER clause), false if this is a window function
-
updateAggregate
protected void updateAggregate(SessionLocal session, SelectGroups groupData, int groupRowId)
Description copied from class:DataAnalysisOperation
Update a row of an aggregate.- Specified by:
updateAggregate
in classDataAnalysisOperation
- Parameters:
session
- the database sessiongroupData
- data for the aggregate groupgroupRowId
- row id of group
-
updateGroupAggregates
protected void updateGroupAggregates(SessionLocal session, int stage)
Description copied from class:DataAnalysisOperation
Invoked when processing group stage of grouped window queries to update arguments of this aggregate.- Overrides:
updateGroupAggregates
in classDataAnalysisOperation
- Parameters:
session
- the sessionstage
- select stage
-
getNumExpressions
protected int getNumExpressions()
Description copied from class:DataAnalysisOperation
Returns the number of expressions, excluding OVER clause.- Specified by:
getNumExpressions
in classDataAnalysisOperation
- Returns:
- the number of expressions
-
rememberExpressions
protected void rememberExpressions(SessionLocal session, Value[] array)
Description copied from class:DataAnalysisOperation
Stores current values of expressions into the specified array.- Specified by:
rememberExpressions
in classDataAnalysisOperation
- Parameters:
session
- the sessionarray
- array to store values of expressions
-
createAggregateData
protected java.lang.Object createAggregateData()
Description copied from class:DataAnalysisOperation
Create aggregate data object specific to the subclass.- Specified by:
createAggregateData
in classDataAnalysisOperation
- Returns:
- aggregate-specific data object.
-
getOrderedResultLoop
protected void getOrderedResultLoop(SessionLocal session, java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
Description copied from class:DataAnalysisOperation
Returns result of this window function or window aggregate. This method may not be called on window aggregate without window order clause.- Specified by:
getOrderedResultLoop
in classDataAnalysisOperation
- Parameters:
session
- the sessionresult
- the map to append result toordered
- ordered datarowIdColumn
- the index of row id value
-
getRank
private void getRank(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
-
getCumeDist
private void getCumeDist(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> orderedData, int rowIdColumn)
-
getNtile
private static void getNtile(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> orderedData, int rowIdColumn)
-
getLeadLag
private void getLeadLag(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn, SessionLocal session)
-
getNth
private void getNth(SessionLocal session, java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
-
getRatioToReport
private static void getRatioToReport(java.util.HashMap<java.lang.Integer,Value> result, java.util.ArrayList<Value[]> ordered, int rowIdColumn)
-
getAggregatedValue
protected Value getAggregatedValue(SessionLocal session, java.lang.Object aggregateData)
Description copied from class:DataAnalysisOperation
Returns aggregated value.- Specified by:
getAggregatedValue
in classDataAnalysisOperation
- Parameters:
session
- the sessionaggregateData
- the aggregate data- Returns:
- aggregated value.
-
mapColumnsAnalysis
public void mapColumnsAnalysis(ColumnResolver resolver, int level, int innerState)
Description copied from class:DataAnalysisOperation
Map the columns of the resolver to expression columns.- Overrides:
mapColumnsAnalysis
in classDataAnalysisOperation
- Parameters:
resolver
- the column resolverlevel
- the subquery nesting levelinnerState
- one of the Expression MAP_IN_* values
-
optimize
public Expression optimize(SessionLocal session)
Description copied from class:Expression
Try to optimize the expression.- Overrides:
optimize
in classDataAnalysisOperation
- Parameters:
session
- the session- Returns:
- the optimized expression
-
setEvaluatable
public void setEvaluatable(TableFilter tableFilter, boolean b)
Description copied from class:Expression
Tell the expression columns whether the table filter can return values now. This is used when optimizing the query.- Overrides:
setEvaluatable
in classDataAnalysisOperation
- Parameters:
tableFilter
- the table filterb
- true if the table filter can return value
-
getType
public TypeInfo getType()
Description copied from class:Expression
Returns the data type. The data type may be unknown before the optimization phase.- Specified by:
getType
in interfaceTyped
- Specified by:
getType
in classExpression
- Returns:
- the data type
-
getUnenclosedSQL
public java.lang.StringBuilder getUnenclosedSQL(java.lang.StringBuilder builder, int sqlFlags)
Description copied from class:Expression
Get the SQL statement of this expression. This may not always be the original SQL statement, especially after optimization. Enclosing '(' and ')' are never appended.- Specified by:
getUnenclosedSQL
in classExpression
- Parameters:
builder
- string buildersqlFlags
- formatting flags- Returns:
- the specified string builder
-
getCost
public int getCost()
Description copied from class:Expression
Estimate the cost to process the expression. Used when optimizing the query, to calculate the query plan with the lowest estimated cost.- Specified by:
getCost
in classExpression
- Returns:
- the estimated cost
-
-