sql parser refactor

This commit is contained in:
温少
2012-05-20 14:10:35 +08:00
15 changed files with 46 additions and 66 deletions
@@ -9,13 +9,10 @@ public class HBQLStatementParser extends SQLStatementParser {
protected SQLExprParser exprParser;
public HBQLStatementParser(String sql){
super(sql);
this.exprParser = new SQLExprParser(lexer);
super(new SQLExprParser(sql));
}
public HBQLStatementParser(Lexer lexer){
super(lexer);
this.exprParser = new SQLExprParser(lexer);
super(new SQLExprParser(lexer));
}
}
@@ -3,19 +3,18 @@ package com.alibaba.druid.sql.dialect.hive.parser;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement;
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement.PartitionedBy;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.SQLCreateTableParser;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.Token;
public class HiveCreateTableParser extends SQLCreateTableParser {
public HiveCreateTableParser(String sql){
super(new HiveLexer(sql));
this.lexer.nextToken();
super(new SQLExprParser(sql));
}
public HiveCreateTableParser(Lexer lexer){
super(lexer);
public HiveCreateTableParser(SQLExprParser exprParser){
super(exprParser);
}
protected HiveCreateTableStatement newCreateStatement() {
@@ -7,22 +7,22 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveShowTablesStatement;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.SQLStatementParser;
import com.alibaba.druid.sql.parser.Token;
public class HiveStatementParser extends SQLStatementParser {
public HiveStatementParser(Lexer lexer){
super(lexer);
super(new SQLExprParser(lexer));
}
public HiveStatementParser(String sql){
super(new HiveLexer(sql));
this.lexer.nextToken();
super(new SQLExprParser(sql));
}
public HiveCreateTableParser getSQLCreateTableParser() {
return new HiveCreateTableParser(lexer);
return new HiveCreateTableParser(this.exprParser);
}
public boolean parseStatementListDialect(List<SQLStatement> statementList) {
@@ -25,21 +25,19 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlTableIndex;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLCreateTableParser;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.Token;
public class MySqlCreateTableParser extends SQLCreateTableParser {
public MySqlCreateTableParser(String sql) throws ParserException{
super(sql);
this.exprParser = new MySqlExprParser(lexer);
super(new MySqlExprParser(sql));
}
public MySqlCreateTableParser(Lexer lexer){
super(lexer);
this.exprParser = new MySqlExprParser(lexer);
public MySqlCreateTableParser(SQLExprParser exprParser){
super(exprParser);
}
public SQLCreateTableStatement parseCrateTable() throws ParserException {
@@ -128,18 +128,15 @@ import com.alibaba.druid.sql.parser.Token;
public class MySqlStatementParser extends SQLStatementParser {
public MySqlStatementParser(String sql) throws ParserException{
this(new MySqlLexer(sql));
this.lexer.nextToken();
this.exprParser = new MySqlExprParser(lexer);
super (new MySqlExprParser(sql));
}
public MySqlStatementParser(Lexer lexer){
super(lexer);
this.exprParser = new MySqlExprParser(lexer);
super(new MySqlExprParser(lexer));
}
public SQLCreateTableStatement parseCreateTable() throws ParserException {
MySqlCreateTableParser parser = new MySqlCreateTableParser(lexer);
MySqlCreateTableParser parser = new MySqlCreateTableParser(this.exprParser);
return parser.parseCrateTable();
}
@@ -271,7 +268,7 @@ public class MySqlStatementParser extends SQLStatementParser {
List<SQLCommentHint> hints = this.exprParser.parseHints();
if (lexer.token() == Token.TABLE || identifierEquals("TEMPORARY")) {
MySqlCreateTableParser parser = new MySqlCreateTableParser(lexer);
MySqlCreateTableParser parser = new MySqlCreateTableParser(this.exprParser);
MySqlCreateTableStatement stmt = parser.parseCrateTable(false);
stmt.setHints(hints);
return stmt;
@@ -15,14 +15,11 @@ import com.alibaba.druid.sql.parser.Token;
public class OracleCreateTableParser extends SQLCreateTableParser {
public OracleCreateTableParser(Lexer lexer){
super(lexer);
this.exprParser = new OracleExprParser(lexer);
super(new OracleExprParser(lexer));
}
public OracleCreateTableParser(String sql){
super(new OracleLexer(sql));
this.lexer.nextToken();
this.exprParser = new OracleExprParser(lexer);
super(new OracleExprParser(sql));
}
protected OracleCreateTableStatement newCreateStatement() {
@@ -99,14 +99,11 @@ import com.alibaba.druid.sql.parser.Token;
public class OracleStatementParser extends SQLStatementParser {
public OracleStatementParser(String sql){
super(new OracleLexer(sql));
this.lexer.nextToken();
this.exprParser = new OracleExprParser(lexer);
super(new OracleExprParser(sql));
}
public OracleStatementParser(Lexer lexer){
super(lexer);
this.exprParser = new OracleExprParser(lexer);
super(new OracleExprParser(lexer));
}
@Override
@@ -28,14 +28,11 @@ import com.alibaba.druid.sql.parser.Token;
public class OracleUpdateParser extends SQLStatementParser {
public OracleUpdateParser(String sql) throws ParserException{
super(new OracleLexer(sql));
this.lexer.nextToken();
this.exprParser = new OracleExprParser(lexer);
super(new OracleExprParser(sql));
}
public OracleUpdateParser(Lexer lexer){
super(lexer);
this.exprParser = new OracleExprParser(lexer);
super(new OracleExprParser(lexer));
}
public OracleUpdateStatement parseUpdateStatement() throws ParserException {
@@ -26,16 +26,15 @@ import com.alibaba.druid.sql.parser.Token;
public class PGSQLStatementParser extends SQLStatementParser {
public PGSQLStatementParser(String sql) throws ParserException{
this(new PGLexer(sql));
this.lexer.nextToken();
super (new PGExprParser(sql));
}
public PGSQLStatementParser(Lexer lexer){
super(lexer);
super(new PGExprParser(lexer));
}
public PGSelectParser createSQLSelectParser() {
return new PGSelectParser(this.lexer);
return new PGSelectParser(this.exprParser);
}
public SQLUpdateStatement parseUpdateStatement() throws ParserException {
@@ -7,7 +7,6 @@ import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.IntoOption;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.SQLSelectParser;
@@ -15,13 +14,12 @@ import com.alibaba.druid.sql.parser.Token;
public class PGSelectParser extends SQLSelectParser {
public PGSelectParser(Lexer lexer){
super(lexer);
public PGSelectParser(SQLExprParser exprParser){
super(exprParser);
}
public PGSelectParser(String sql) throws ParserException{
this(new PGLexer(sql));
this.lexer.nextToken();
this(new PGExprParser(sql));
}
protected SQLExprParser createExprParser() {
@@ -6,7 +6,6 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelect;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock;
import com.alibaba.druid.sql.dialect.sqlserver.ast.Top;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.SQLSelectParser;
@@ -15,12 +14,11 @@ import com.alibaba.druid.sql.parser.Token;
public class SQLServerSelectParser extends SQLSelectParser {
public SQLServerSelectParser(String sql){
super(new SQLServerLexer(sql));
this.lexer.nextToken();
super(new SQLServerExprParser(sql));
}
public SQLServerSelectParser(Lexer lexer){
super(lexer);
public SQLServerSelectParser(SQLExprParser exprParser){
super(exprParser);
}
public SQLSelect select() throws ParserException {
@@ -22,17 +22,15 @@ import com.alibaba.druid.sql.parser.SQLStatementParser;
public class SQLServerStatementParser extends SQLStatementParser {
public SQLServerStatementParser(String sql){
super(new SQLServerLexer(sql));
this.lexer.nextToken();
this.exprParser = new SQLServerExprParser(lexer);
super(new SQLServerExprParser(sql));
}
public SQLSelectParser createSQLSelectParser() {
return new SQLServerSelectParser(this.lexer);
return new SQLServerSelectParser(this.exprParser);
}
public SQLServerStatementParser(Lexer lexer){
super(lexer);
super(new SQLServerExprParser(lexer));
}
}
@@ -25,8 +25,8 @@ public class SQLCreateTableParser extends SQLDDLParser {
super(sql);
}
public SQLCreateTableParser(Lexer lexer){
super(lexer);
public SQLCreateTableParser(SQLExprParser exprParser){
super(exprParser);
}
public SQLCreateTableStatement parseCrateTable() {
@@ -24,8 +24,8 @@ public class SQLDDLParser extends SQLStatementParser {
super(sql);
}
public SQLDDLParser(Lexer lexer){
super(lexer);
public SQLDDLParser(SQLExprParser exprParser){
super(exprParser);
}
protected SQLTableConstaint parseConstraint() {
@@ -59,6 +59,11 @@ public class SQLStatementParser extends SQLParser {
super(lexer);
this.exprParser = new SQLExprParser(lexer);
}
public SQLStatementParser(SQLExprParser exprParser){
super(exprParser.getLexer());
this.exprParser = exprParser;
}
public SQLExprParser getExprParser() {
return exprParser;
@@ -476,7 +481,7 @@ public class SQLStatementParser extends SQLParser {
}
public SQLCreateTableParser getSQLCreateTableParser() {
return new SQLCreateTableParser(lexer);
return new SQLCreateTableParser(this.exprParser);
}
public SQLSelectStatement parseSelect() throws ParserException {