mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
+16
-21
@@ -57,7 +57,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatem
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStartTransactionStatement;
|
||||
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;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import com.alibaba.druid.sql.parser.Token;
|
||||
@@ -67,16 +66,12 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
public MySqlStatementParser(String sql) throws ParserException{
|
||||
this(new MySqlLexer(sql));
|
||||
this.lexer.nextToken();
|
||||
this.exprParser = this.createExprParser();
|
||||
this.exprParser = new MySqlExprParser(lexer);
|
||||
}
|
||||
|
||||
public MySqlStatementParser(Lexer lexer){
|
||||
super(lexer);
|
||||
this.exprParser = this.createExprParser();
|
||||
}
|
||||
|
||||
protected SQLExprParser createExprParser() {
|
||||
return new MySqlExprParser(lexer);
|
||||
this.exprParser = new MySqlExprParser(lexer);
|
||||
}
|
||||
|
||||
public SQLCreateTableStatement parseCreateTable() throws ParserException {
|
||||
@@ -179,11 +174,11 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
for (;;) {
|
||||
MySqlCreateUserStatement.UserSpecification userSpec = new MySqlCreateUserStatement.UserSpecification();
|
||||
|
||||
SQLCharExpr expr = (SQLCharExpr) this.createExprParser().expr();
|
||||
SQLCharExpr expr = (SQLCharExpr) exprParser.expr();
|
||||
String user = expr.toString();
|
||||
if (lexer.token() == Token.VARIANT) {
|
||||
lexer.nextToken();
|
||||
SQLCharExpr expr2 = (SQLCharExpr) this.createExprParser().expr();
|
||||
SQLCharExpr expr2 = (SQLCharExpr) exprParser.expr();
|
||||
user += '@';
|
||||
user += expr2.toString();
|
||||
}
|
||||
@@ -198,12 +193,12 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
SQLCharExpr password = (SQLCharExpr) this.createExprParser().expr();
|
||||
SQLCharExpr password = (SQLCharExpr) this.exprParser.expr();
|
||||
userSpec.setPassword(password);
|
||||
} else if (lexer.token() == Token.WITH) {
|
||||
lexer.nextToken();
|
||||
|
||||
SQLCharExpr text = (SQLCharExpr) this.createExprParser().expr();
|
||||
SQLCharExpr text = (SQLCharExpr) this.exprParser.expr();
|
||||
userSpec.setAuthPlugin(text);
|
||||
}
|
||||
}
|
||||
@@ -346,7 +341,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
statementList.add(stmt);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (identifierEquals("DESCRIBE")) {
|
||||
SQLStatement stmt = parseDescribe();
|
||||
statementList.add(stmt);
|
||||
@@ -355,13 +350,13 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public SQLStatement parseDescribe() throws ParserException {
|
||||
acceptIdentifier("DESCRIBE");
|
||||
|
||||
|
||||
MySqlDescribeStatement stmt = new MySqlDescribeStatement();
|
||||
stmt.setObject(this.exprParser.name());
|
||||
|
||||
|
||||
return stmt;
|
||||
}
|
||||
|
||||
@@ -487,15 +482,15 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
|
||||
MySqlSelectQueryBlock.Limit limit = new MySqlSelectQueryBlock.Limit();
|
||||
|
||||
SQLExpr temp = this.createExprParser().expr();
|
||||
SQLExpr temp = this.exprParser.expr();
|
||||
if (lexer.token() == (Token.COMMA)) {
|
||||
limit.setOffset(temp);
|
||||
lexer.nextToken();
|
||||
limit.setRowCount(createExprParser().expr());
|
||||
limit.setRowCount(exprParser.expr());
|
||||
} else if (identifierEquals("OFFSET")) {
|
||||
limit.setRowCount(temp);
|
||||
lexer.nextToken();
|
||||
limit.setOffset(createExprParser().expr());
|
||||
limit.setOffset(exprParser.expr());
|
||||
} else {
|
||||
limit.setRowCount(temp);
|
||||
}
|
||||
@@ -991,11 +986,11 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
|
||||
MySqlDropUser stmt = new MySqlDropUser();
|
||||
for (;;) {
|
||||
SQLCharExpr expr = (SQLCharExpr) this.createExprParser().expr();
|
||||
SQLCharExpr expr = (SQLCharExpr) this.exprParser.expr();
|
||||
String user = expr.toString();
|
||||
if (lexer.token() == Token.VARIANT) {
|
||||
lexer.nextToken();
|
||||
SQLCharExpr expr2 = (SQLCharExpr) this.createExprParser().expr();
|
||||
SQLCharExpr expr2 = (SQLCharExpr) this.exprParser.expr();
|
||||
user += '@';
|
||||
user += expr2.toString();
|
||||
}
|
||||
@@ -1035,7 +1030,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
}
|
||||
return stmt;
|
||||
}
|
||||
|
||||
|
||||
public SQLSelectParser createSQLSelectParser() {
|
||||
return new MySqlSelectParser(this.lexer);
|
||||
}
|
||||
|
||||
+15
-11
@@ -102,16 +102,21 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
public OracleStatementParser(String sql){
|
||||
super(new OracleLexer(sql));
|
||||
this.lexer.nextToken();
|
||||
this.exprParser = createExprParser();
|
||||
this.exprParser = new OracleExprParser(lexer);
|
||||
}
|
||||
|
||||
public OracleStatementParser(Lexer lexer){
|
||||
super(lexer);
|
||||
this.exprParser = createExprParser();
|
||||
this.exprParser = new OracleExprParser(lexer);
|
||||
}
|
||||
|
||||
protected OracleExprParser createExprParser() {
|
||||
return new OracleExprParser(lexer);
|
||||
@Override
|
||||
public OracleExprParser getExprParser() {
|
||||
return (OracleExprParser) exprParser;
|
||||
}
|
||||
|
||||
public void parseHints(List<OracleHint> hints) {
|
||||
this.getExprParser().parseHints(hints);
|
||||
}
|
||||
|
||||
public OracleCreateTableParser getSQLCreateTableParser() {
|
||||
@@ -121,10 +126,10 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
protected void parseInsert0_hinits(SQLInsertInto insertStatement) {
|
||||
if (insertStatement instanceof OracleInsertStatement) {
|
||||
OracleInsertStatement stmt = (OracleInsertStatement) insertStatement;
|
||||
this.createExprParser().parseHints(stmt.getHints());
|
||||
this.getExprParser().parseHints(stmt.getHints());
|
||||
} else {
|
||||
List<OracleHint> hints = new ArrayList<OracleHint>();
|
||||
this.createExprParser().parseHints(hints);
|
||||
this.getExprParser().parseHints(hints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1124,8 +1129,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
|
||||
OracleMergeStatement stmt = new OracleMergeStatement();
|
||||
|
||||
OracleExprParser exprParser = this.createExprParser();
|
||||
exprParser.parseHints(stmt.getHints());
|
||||
parseHints(stmt.getHints());
|
||||
|
||||
accept(Token.INTO);
|
||||
stmt.setInto(exprParser.name());
|
||||
@@ -1241,7 +1245,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
|
||||
List<OracleHint> hints = new ArrayList<OracleHint>();
|
||||
|
||||
this.createExprParser().parseHints(hints);
|
||||
parseHints(hints);
|
||||
|
||||
if (lexer.token() == Token.INTO) {
|
||||
OracleInsertStatement stmt = new OracleInsertStatement();
|
||||
@@ -1290,7 +1294,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
|
||||
OracleMultiInsertStatement.ConditionalInsertClauseItem item = new OracleMultiInsertStatement.ConditionalInsertClauseItem();
|
||||
|
||||
item.setWhen(this.createExprParser().expr());
|
||||
item.setWhen(this.exprParser.expr());
|
||||
accept(Token.THEN);
|
||||
OracleMultiInsertStatement.InsertIntoClause insertInto = new OracleMultiInsertStatement.InsertIntoClause();
|
||||
parseInsert0(insertInto);
|
||||
@@ -1430,7 +1434,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
if (lexer.token() == Token.DELETE) {
|
||||
lexer.nextToken();
|
||||
|
||||
this.createExprParser().parseHints(deleteStatement.getHints());
|
||||
parseHints(deleteStatement.getHints());
|
||||
|
||||
if (lexer.token() == (Token.FROM)) {
|
||||
lexer.nextToken();
|
||||
|
||||
@@ -22,18 +22,20 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement;
|
||||
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 OracleUpdateParser extends SQLStatementParser {
|
||||
|
||||
public OracleUpdateParser(String sql) throws ParserException{
|
||||
super(sql);
|
||||
super(new OracleLexer(sql));
|
||||
this.lexer.nextToken();
|
||||
this.exprParser = new OracleExprParser(lexer);
|
||||
}
|
||||
|
||||
public OracleUpdateParser(Lexer lexer){
|
||||
super(lexer);
|
||||
this.exprParser = new OracleExprParser(lexer);
|
||||
}
|
||||
|
||||
public OracleUpdateStatement parseUpdateStatement() throws ParserException {
|
||||
@@ -142,8 +144,4 @@ public class OracleUpdateParser extends SQLStatementParser {
|
||||
lexer.nextToken();
|
||||
}
|
||||
}
|
||||
|
||||
protected SQLExprParser createExprParser() {
|
||||
return new OracleExprParser(lexer);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -124,7 +124,7 @@ public class PGSQLStatementParser extends SQLStatementParser {
|
||||
break;
|
||||
}
|
||||
} else if (lexer.token() == (Token.SELECT)) {
|
||||
SQLQueryExpr queryExpr = (SQLQueryExpr) this.createExprParser().expr();
|
||||
SQLQueryExpr queryExpr = (SQLQueryExpr) this.exprParser.expr();
|
||||
stmt.setQuery(queryExpr.getSubQuery());
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@ public class PGSQLStatementParser extends SQLStatementParser {
|
||||
if (lexer.token() == Token.USING) {
|
||||
lexer.nextToken();
|
||||
for (;;) {
|
||||
SQLName name = this.createExprParser().name();
|
||||
SQLName name = this.exprParser.name();
|
||||
deleteStatement.getUsing().add(name);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
@@ -271,13 +271,13 @@ public class PGSQLStatementParser extends SQLStatementParser {
|
||||
|
||||
private PGWithQuery withQuery() {
|
||||
PGWithQuery withQuery = new PGWithQuery();
|
||||
withQuery.setName(this.createExprParser().expr());
|
||||
withQuery.setName(this.exprParser.expr());
|
||||
|
||||
if (lexer.token() == Token.LPAREN) {
|
||||
lexer.nextToken();
|
||||
|
||||
for (;;) {
|
||||
SQLExpr expr = this.createExprParser().expr();
|
||||
SQLExpr expr = this.exprParser.expr();
|
||||
withQuery.getColumns().add(expr);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.alibaba.druid.sql.dialect.sqlserver.ast.expr;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
|
||||
|
||||
public interface SQLServerExpr extends SQLExpr {
|
||||
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
package com.alibaba.druid.sql.dialect.sqlserver.ast.expr;
|
||||
|
||||
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerObjectImpl;
|
||||
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor;
|
||||
|
||||
public class SQLServerObjectReferenceExpr extends SQLServerObjectImpl implements SQLServerExpr {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String server;
|
||||
private String database;
|
||||
private String schema;
|
||||
private String object;
|
||||
|
||||
@Override
|
||||
public void accept0(SQLServerASTVisitor visitor) {
|
||||
|
||||
}
|
||||
|
||||
public void output(StringBuffer buf) {
|
||||
boolean flag = false;
|
||||
if (server != null) {
|
||||
buf.append(server);
|
||||
buf.append('.');
|
||||
flag = true;
|
||||
}
|
||||
|
||||
if (database != null) {
|
||||
buf.append(database);
|
||||
buf.append('.');
|
||||
flag = true;
|
||||
} else {
|
||||
if (flag) {
|
||||
buf.append('.');
|
||||
}
|
||||
}
|
||||
|
||||
if (schema != null) {
|
||||
buf.append(schema);
|
||||
buf.append('.');
|
||||
flag = true;
|
||||
} else {
|
||||
if (flag) {
|
||||
buf.append('.');
|
||||
}
|
||||
}
|
||||
|
||||
buf.append(object);
|
||||
}
|
||||
|
||||
public String getServer() {
|
||||
return server;
|
||||
}
|
||||
|
||||
public void setServer(String server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public String getDatabase() {
|
||||
return database;
|
||||
}
|
||||
|
||||
public void setDatabase(String database) {
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
public String getSchema() {
|
||||
return schema;
|
||||
}
|
||||
|
||||
public void setSchema(String schema) {
|
||||
this.schema = schema;
|
||||
}
|
||||
|
||||
public String getObject() {
|
||||
return object;
|
||||
}
|
||||
|
||||
public void setObject(String object) {
|
||||
this.object = object;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.alibaba.druid.sql.dialect.sqlserver.parser;
|
||||
|
||||
import com.alibaba.druid.sql.parser.Lexer;
|
||||
import com.alibaba.druid.sql.parser.ParserException;
|
||||
import com.alibaba.druid.sql.parser.SQLExprParser;
|
||||
|
||||
public class SQLServerExprParser extends SQLExprParser {
|
||||
|
||||
public SQLServerExprParser(Lexer lexer){
|
||||
super(lexer);
|
||||
}
|
||||
|
||||
public SQLServerExprParser(String sql) throws ParserException{
|
||||
super(new SQLServerLexer(sql));
|
||||
this.lexer.nextToken();
|
||||
}
|
||||
|
||||
}
|
||||
+1
@@ -24,6 +24,7 @@ public class SQLServerStatementParser extends SQLStatementParser {
|
||||
public SQLServerStatementParser(String sql){
|
||||
super(new SQLServerLexer(sql));
|
||||
this.lexer.nextToken();
|
||||
this.exprParser = new SQLServerExprParser(lexer);
|
||||
}
|
||||
|
||||
public SQLSelectParser createSQLSelectParser() {
|
||||
|
||||
@@ -47,16 +47,16 @@ public class SQLStatementParser extends SQLParser {
|
||||
public SQLStatementParser(String sql){
|
||||
super(sql);
|
||||
|
||||
this.exprParser = createExprParser();
|
||||
this.exprParser = new SQLExprParser(lexer);
|
||||
}
|
||||
|
||||
public SQLStatementParser(Lexer lexer){
|
||||
super(lexer);
|
||||
this.exprParser = createExprParser();
|
||||
this.exprParser = new SQLExprParser(lexer);
|
||||
}
|
||||
|
||||
protected SQLExprParser createExprParser() {
|
||||
return new SQLExprParser(lexer);
|
||||
public SQLExprParser getExprParser() {
|
||||
return exprParser;
|
||||
}
|
||||
|
||||
public List<SQLStatement> parseStatementList() throws ParserException {
|
||||
@@ -255,7 +255,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
insertStatement.setValues(values);
|
||||
accept(Token.RPAREN);
|
||||
} else if (acceptSubQuery && (lexer.token() == Token.SELECT || lexer.token() == Token.LPAREN)) {
|
||||
SQLQueryExpr queryExpr = (SQLQueryExpr) this.createExprParser().expr();
|
||||
SQLQueryExpr queryExpr = (SQLQueryExpr) this.exprParser.expr();
|
||||
insertStatement.setQuery(queryExpr.getSubQuery());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
|
||||
import com.alibaba.druid.stat.TableStat;
|
||||
import com.alibaba.druid.stat.TableStat.Column;
|
||||
|
||||
public class MySqlDescribteTest extends MysqlTest {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user