/**
  * Locate the select clause that is part of this select statement. Note, that this might return
  * null as derived select clauses (i.e., no select clause at the HQL-level) get generated much
  * later than when we get created; thus it depends upon lifecycle.
  *
  * @return Our select clause, or null.
  */
 public final SelectClause getSelectClause() {
   // Due to the complexity in initializing the SelectClause, do not generate one here.
   // If it is not found; simply return null...
   //
   // Also, do not cache since it gets generated well after we are created.
   return (SelectClause) ASTUtil.findTypeInChildren(this, SqlTokenTypes.SELECT_CLAUSE);
 }
  public final OrderByClause getOrderByClause() {
    if (orderByClause == null) {
      orderByClause = locateOrderByClause();

      // if there is no order by, make one
      if (orderByClause == null) {
        log.debug("getOrderByClause() : Creating a new ORDER BY clause");
        orderByClause =
            (OrderByClause)
                ASTUtil.create(getWalker().getASTFactory(), SqlTokenTypes.ORDER, "ORDER");

        // Find the WHERE; if there is no WHERE, find the FROM...
        AST prevSibling = ASTUtil.findTypeInChildren(this, SqlTokenTypes.WHERE);
        if (prevSibling == null) {
          prevSibling = ASTUtil.findTypeInChildren(this, SqlTokenTypes.FROM);
        }

        // Now, inject the newly built ORDER BY into the tree
        orderByClause.setNextSibling(prevSibling.getNextSibling());
        prevSibling.setNextSibling(orderByClause);
      }
    }
    return orderByClause;
  }
 private OrderByClause locateOrderByClause() {
   return (OrderByClause) ASTUtil.findTypeInChildren(this, SqlTokenTypes.ORDER);
 }