/** * Finds an aggregate. * * @param node Parse tree to search * @return First aggregate function in parse tree, or null if not found */ public SqlNode findAgg(SqlNode node) { try { node.accept(this); return null; } catch (Util.FoundOne e) { Util.swallow(e, null); return (SqlNode) e.getNode(); } }
/** * Returns whether a given node contains a RexCall with a specified operator * * @param operator to look for * @param node a RexNode tree */ public static RexCall findOperatorCall(final SqlOperator operator, RexNode node) { try { RexVisitor<Void> visitor = new RexVisitorImpl<Void>(true) { public Void visitCall(RexCall call) { if (call.getOperator().equals(operator)) { throw new Util.FoundOne(call); } return super.visitCall(call); } }; node.accept(visitor); return null; } catch (Util.FoundOne e) { Util.swallow(e, null); return (RexCall) e.getNode(); } }