refactor sql parser. sqlite support limit clause. #1556

This commit is contained in:
wenshao
2016-12-26 20:11:49 +08:00
parent 74b456d659
commit 77bfab01f5
32 changed files with 396 additions and 270 deletions
@@ -17,10 +17,7 @@ package com.alibaba.druid.sql.parser;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLOrderBy;
import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.ast.*;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
@@ -206,6 +203,8 @@ public class SQLSelectParser extends SQLParser {
parseGroupBy(queryBlock);
parseFetchClause(queryBlock);
return queryRest(queryBlock);
}
@@ -555,6 +554,12 @@ public class SQLSelectParser extends SQLParser {
}
public void parseFetchClause(SQLSelectQueryBlock queryBlock) {
if (lexer.token() == Token.LIMIT) {
SQLLimit limit = this.exprParser.parseLimit();
queryBlock.setLimit(limit);
return;
}
if (identifierEquals("OFFSET") || lexer.token() == Token.OFFSET) {
lexer.nextToken();
SQLExpr offset = this.exprParser.primary();