Class VerifyAggregateExpressionsVisitor

  • All Implemented Interfaces:
    Visitor

    class VerifyAggregateExpressionsVisitor
    extends java.lang.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.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean skipChildren​(Visitable node)
      Don't visit children under an aggregate, subquery or any node which is equivalent to any of the group by expressions.
      boolean stopTraversal()
      Method that is called to see if query tree traversal should be stopped before visiting all nodes.
      Visitable visit​(Visitable node)
      Verify that this expression is ok for an aggregate query.
      boolean visitChildrenFirst​(Visitable node)
      Method that is called to see if visit() should be called on the children of node before it is called on node itself.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • VerifyAggregateExpressionsVisitor

        VerifyAggregateExpressionsVisitor​(GroupByList groupByList)
    • Method Detail

      • 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