From ee21b1f6beecdb25360a9a6ae16594b7312d765a Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 9 Nov 2012 21:04:44 +0800 Subject: [PATCH] bug fixed for postgresql parser --- .../postgresql/parser/PGSelectParser.java | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSelectParser.java index ea8ba54d86..743122bcb3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSelectParser.java @@ -38,7 +38,7 @@ public class PGSelectParser extends SQLSelectParser { super(exprParser); } - public PGSelectParser(String sql) { + public PGSelectParser(String sql){ this(new PGExprParser(sql)); } @@ -129,24 +129,26 @@ public class PGSelectParser extends SQLSelectParser { queryBlock.setOrderBy(this.createExprParser().parseOrderBy()); - if (lexer.token() == Token.LIMIT) { - lexer.nextToken(); - if (lexer.token() == Token.ALL) { - queryBlock.setLimit(new SQLIdentifierExpr("ALL")); + for (;;) { + if (lexer.token() == Token.LIMIT) { lexer.nextToken(); + if (lexer.token() == Token.ALL) { + queryBlock.setLimit(new SQLIdentifierExpr("ALL")); + lexer.nextToken(); + } else { + SQLExpr limit = expr(); + queryBlock.setLimit(limit); + } + } else if (lexer.token() == Token.OFFSET) { + lexer.nextToken(); + SQLExpr offset = expr(); + queryBlock.setOffset(offset); + + if (lexer.token() == Token.ROW || lexer.token() == Token.ROWS) { + lexer.nextToken(); + } } else { - SQLExpr limit = expr(); - queryBlock.setLimit(limit); - } - } - - if (lexer.token() == Token.OFFSET) { - lexer.nextToken(); - SQLExpr offset = expr(); - queryBlock.setOffset(offset); - - if (lexer.token() == Token.ROW || lexer.token() == Token.ROWS) { - lexer.nextToken(); + break; } }