Class WindowFunction

All Implemented Interfaces:
HasSQL, Typed

public class WindowFunction extends DataAnalysisOperation
A window function.
  • Field Details

    • type

      private final WindowFunctionType type
    • args

      private final Expression[] args
    • fromLast

      private boolean fromLast
    • ignoreNulls

      private boolean ignoreNulls
  • Constructor Details

    • WindowFunction

      public WindowFunction(WindowFunctionType type, Select select, Expression[] args)
      Creates new instance of a window function.
      Parameters:
      type - the type
      select - the select statement
      args - arguments, or null
  • Method Details

    • 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(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 class DataAnalysisOperation
      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 class DataAnalysisOperation
      Parameters:
      session - the database session
      groupData - data for the aggregate group
      groupRowId - 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 class DataAnalysisOperation
      Parameters:
      session - the session
      stage - select stage
    • getNumExpressions

      protected int getNumExpressions()
      Description copied from class: DataAnalysisOperation
      Returns the number of expressions, excluding OVER clause.
      Specified by:
      getNumExpressions in class DataAnalysisOperation
      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 class DataAnalysisOperation
      Parameters:
      session - the session
      array - array to store values of expressions
    • createAggregateData

      protected Object createAggregateData()
      Description copied from class: DataAnalysisOperation
      Create aggregate data object specific to the subclass.
      Specified by:
      createAggregateData in class DataAnalysisOperation
      Returns:
      aggregate-specific data object.
    • getOrderedResultLoop

      protected void getOrderedResultLoop(SessionLocal session, HashMap<Integer,Value> result, 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 class DataAnalysisOperation
      Parameters:
      session - the session
      result - the map to append result to
      ordered - ordered data
      rowIdColumn - the index of row id value
    • getRank

      private void getRank(HashMap<Integer,Value> result, ArrayList<Value[]> ordered, int rowIdColumn)
    • getCumeDist

      private void getCumeDist(HashMap<Integer,Value> result, ArrayList<Value[]> orderedData, int rowIdColumn)
    • getNtile

      private static void getNtile(HashMap<Integer,Value> result, ArrayList<Value[]> orderedData, int rowIdColumn)
    • getLeadLag

      private void getLeadLag(HashMap<Integer,Value> result, ArrayList<Value[]> ordered, int rowIdColumn, SessionLocal session)
    • getNth

      private void getNth(SessionLocal session, HashMap<Integer,Value> result, ArrayList<Value[]> ordered, int rowIdColumn)
    • getRatioToReport

      private static void getRatioToReport(HashMap<Integer,Value> result, ArrayList<Value[]> ordered, int rowIdColumn)
    • getAggregatedValue

      protected Value getAggregatedValue(SessionLocal session, Object aggregateData)
      Description copied from class: DataAnalysisOperation
      Returns aggregated value.
      Specified by:
      getAggregatedValue in class DataAnalysisOperation
      Parameters:
      session - the session
      aggregateData - 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 class DataAnalysisOperation
      Parameters:
      resolver - the column resolver
      level - the subquery nesting level
      innerState - 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 class DataAnalysisOperation
      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 class DataAnalysisOperation
      Parameters:
      tableFilter - the table filter
      b - 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 interface Typed
      Specified by:
      getType in class Expression
      Returns:
      the data type
    • getUnenclosedSQL

      public StringBuilder getUnenclosedSQL(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 class Expression
      Parameters:
      builder - string builder
      sqlFlags - 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 class Expression
      Returns:
      the estimated cost