/** * INTERNAL * Returns true if the specified expr is a valid SELECT clause expression. */ private boolean isValidSelectExpr(Node expr) { if (expr.isAggregateNode()) { return true; } else if (expr.isConstructorNode()) { List args = ((ConstructorNode)expr).getConstructorItems(); for (Iterator i = args.iterator(); i.hasNext(); ) { Node arg = (Node)i.next(); if (!isValidSelectExpr(arg)) { return false; } } return true; } return isGroupbyItem(expr); }