public Void visit(SqlCall call) { final SqlOperator operator = call.getOperator(); if (operator.isAggregator()) { throw new Util.FoundOne(call); } // User-defined function may not be resolved yet. if (operator instanceof SqlFunction && ((SqlFunction) operator).getFunctionType() == SqlFunctionCategory.USER_DEFINED_FUNCTION) { final List<SqlOperator> list = Lists.newArrayList(); opTab.lookupOperatorOverloads( ((SqlFunction) operator).getSqlIdentifier(), SqlFunctionCategory.USER_DEFINED_FUNCTION, SqlSyntax.FUNCTION, list); for (SqlOperator sqlOperator : list) { if (sqlOperator.isAggregator()) { throw new Util.FoundOne(call); } } } if (call.isA(SqlKind.QUERY)) { // don't traverse into queries return null; } if (call.getKind() == SqlKind.OVER) { if (over) { throw new Util.FoundOne(call); } else { // an aggregate function over a window is not an aggregate! return null; } } return super.visit(call); }
public Void visit(SqlCall call) { final SqlOperator operator = call.getOperator(); if (operator == SqlStdOperatorTable.andOperator) { throw new Found(); } return super.visit(call); }