public PGExprParser(Lexer lexer){
super(lexer);
}
protected SQLAggregateExpr parseAggregateExpr(String method_name) throws ParserException {
PGAggregateExpr aggregateExpr;
if (lexer.token() == Token.ALL) {
aggregateExpr = new PGAggregateExpr(method_name, 1);
lexer.nextToken();
} else if (lexer.token() == Token.DISTINCT) {
aggregateExpr = new PGAggregateExpr(method_name, 0);
lexer.nextToken();
} else {
aggregateExpr = new PGAggregateExpr(method_name, 1);
}
exprList(aggregateExpr.getArguments());
accept(Token.RPAREN);
if (lexer.token() == Token.OVER) {
lexer.nextToken();
PGAnalytic over = new PGAnalytic();
accept(Token.LPAREN);
if (identifierEquals("PARTITION")) {
lexer.nextToken();
accept(Token.BY);
if (lexer.token() == (Token.LPAREN)) {
lexer.nextToken();
exprList(over.getPartitionBy());
accept(Token.RPAREN);
} else {
exprList(over.getPartitionBy());
}
}
over.setOrderBy(parseOrderBy());
if (over.getOrderBy() != null) {
//TODO window
}
accept(Token.RPAREN);
aggregateExpr.setOver(over);
}
return aggregateExpr;
}