Class VerifyAggregateExpressionsVisitor

java.lang.Object
org.apache.derby.impl.sql.compile.VerifyAggregateExpressionsVisitor
All Implemented Interfaces:
Visitor

class VerifyAggregateExpressionsVisitor extends Object implements Visitor
If a RCL (SELECT list) contains an aggregate, then we must verify that the RCL (SELECT list) is valid. For ungrouped queries, the RCL must be composed entirely of valid aggregate expressions - in this case, no column references outside of an aggregate. For grouped aggregates, the RCL must be composed of grouping columns or valid aggregate expressions - in this case, the only column references allowed outside of an aggregate are grouping columns.
  • Field Details

  • Constructor Details

    • VerifyAggregateExpressionsVisitor

      VerifyAggregateExpressionsVisitor(GroupByList groupByList)
  • Method Details

    • visit

      public Visitable visit(Visitable node) throws StandardException
      Verify that this expression is ok for an aggregate query.
      Specified by:
      visit in interface Visitor
      Parameters:
      node - the node to process
      Returns:
      me
      Throws:
      StandardException - on ColumnReference not in group by list, ValueNode or JavaValueNode that isn't under an aggregate
    • skipChildren

      public boolean skipChildren(Visitable node) throws StandardException
      Don't visit children under an aggregate, subquery or any node which is equivalent to any of the group by expressions.
      Specified by:
      skipChildren in interface Visitor
      Parameters:
      node - the node to process
      Returns:
      true/false
      Throws:
      StandardException
    • stopTraversal

      public boolean stopTraversal()
      Description copied from interface: Visitor
      Method that is called to see if query tree traversal should be stopped before visiting all nodes. Useful for short circuiting traversal if we already know we are done.
      Specified by:
      stopTraversal in interface Visitor
      Returns:
      true/false
    • visitChildrenFirst

      public boolean visitChildrenFirst(Visitable node)
      Description copied from interface: Visitor
      Method that is called to see if visit() should be called on the children of node before it is called on node itself. If this method always returns true, the visitor will walk the tree bottom-up. If it always returns false, the tree is visited top-down.
      Specified by:
      visitChildrenFirst in interface Visitor
      Parameters:
      node - the top node of a sub-tree about to be visited
      Returns:
      true if node's children should be visited before node, false otherwise