mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
@@ -93,7 +93,7 @@ public final class PreparedStatementHolder {
|
||||
}
|
||||
|
||||
public boolean isInUse() {
|
||||
return inUseCount <= 0;
|
||||
return inUseCount > 0;
|
||||
}
|
||||
|
||||
public void incrementInUseCount() {
|
||||
|
||||
@@ -103,18 +103,6 @@ public class SQLUtils {
|
||||
}
|
||||
|
||||
public static String format(String sql, String dbType) {
|
||||
if (JdbcUtils.ORACLE.equals(dbType)) {
|
||||
return formatOracle(sql);
|
||||
}
|
||||
|
||||
if (JdbcUtils.MYSQL.equals(dbType)) {
|
||||
return formatMySql(sql);
|
||||
}
|
||||
|
||||
if (JdbcUtils.POSTGRESQL.equals(dbType)) {
|
||||
return formatPGSql(sql);
|
||||
}
|
||||
|
||||
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
|
||||
|
||||
+47
-38
@@ -300,15 +300,8 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
for (;;) {
|
||||
MySqlCreateUserStatement.UserSpecification userSpec = new MySqlCreateUserStatement.UserSpecification();
|
||||
|
||||
SQLCharExpr expr = (SQLCharExpr) exprParser.expr();
|
||||
String user = expr.toString();
|
||||
if (lexer.token() == Token.VARIANT) {
|
||||
lexer.nextToken();
|
||||
SQLCharExpr expr2 = (SQLCharExpr) exprParser.expr();
|
||||
user += '@';
|
||||
user += expr2.toString();
|
||||
}
|
||||
userSpec.setUser(new SQLIdentifierExpr(user));
|
||||
SQLExpr expr = exprParser.primary();
|
||||
userSpec.setUser(expr);
|
||||
|
||||
if (lexer.token() == Token.IDENTIFIED) {
|
||||
lexer.nextToken();
|
||||
@@ -478,7 +471,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
}
|
||||
|
||||
public MySqlDescribeStatement parseDescribe() throws ParserException {
|
||||
if (identifierEquals("DESC") || identifierEquals("DESCRIBE")) {
|
||||
if (lexer.token() == Token.DESC || identifierEquals("DESCRIBE")) {
|
||||
lexer.nextToken();
|
||||
} else {
|
||||
throw new ParserException("expect DESC, actual " + lexer.token());
|
||||
@@ -1626,7 +1619,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
SQLName tableName = this.exprParser.name();
|
||||
insertStatement.setTableName(tableName);
|
||||
|
||||
if (lexer.token() == Token.IDENTIFIER) {
|
||||
if (lexer.token() == Token.IDENTIFIER && !identifierEquals("VALUE")) {
|
||||
insertStatement.setAlias(lexer.stringVal());
|
||||
lexer.nextToken();
|
||||
}
|
||||
@@ -1639,7 +1632,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
accept(Token.RPAREN);
|
||||
}
|
||||
|
||||
if (lexer.token() == (Token.VALUES)) {
|
||||
if (lexer.token() == Token.VALUES || identifierEquals("VALUE")) {
|
||||
lexer.nextToken();
|
||||
|
||||
for (;;) {
|
||||
@@ -1656,6 +1649,29 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (lexer.token() == Token.SET) {
|
||||
lexer.nextToken();
|
||||
|
||||
SQLInsertStatement.ValuesClause values = new SQLInsertStatement.ValuesClause();
|
||||
insertStatement.getValuesList().add(values);
|
||||
|
||||
for (;;) {
|
||||
SQLName name = this.exprParser.name();
|
||||
insertStatement.getColumns().add(name);
|
||||
if (lexer.token() == Token.EQ) {
|
||||
lexer.nextToken();
|
||||
} else {
|
||||
accept(Token.COLONEQ);
|
||||
}
|
||||
values.getValues().add(this.exprParser.expr());
|
||||
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (lexer.token() == (Token.SELECT)) {
|
||||
SQLQueryExpr queryExpr = (SQLQueryExpr) this.exprParser.expr();
|
||||
@@ -1679,15 +1695,8 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
|
||||
MySqlDropUser stmt = new MySqlDropUser();
|
||||
for (;;) {
|
||||
SQLCharExpr expr = (SQLCharExpr) this.exprParser.expr();
|
||||
String user = expr.toString();
|
||||
if (lexer.token() == Token.VARIANT) {
|
||||
lexer.nextToken();
|
||||
SQLCharExpr expr2 = (SQLCharExpr) this.exprParser.expr();
|
||||
user += '@';
|
||||
user += expr2.toString();
|
||||
}
|
||||
stmt.getUsers().add(new SQLIdentifierExpr(user));
|
||||
SQLExpr expr = this.exprParser.expr();
|
||||
stmt.getUsers().add(expr);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
@@ -1727,7 +1736,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (identifierEquals("RESTRICT")) {
|
||||
stmt.setOption("RESTRICT");
|
||||
lexer.nextToken();
|
||||
@@ -1735,25 +1744,25 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
stmt.setOption("CASCADE");
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
|
||||
return stmt;
|
||||
}
|
||||
|
||||
|
||||
protected SQLDropViewStatement parseDropView(boolean acceptDrop) {
|
||||
if (acceptDrop) {
|
||||
accept(Token.DROP);
|
||||
}
|
||||
|
||||
|
||||
MySqlDropViewStatement stmt = new MySqlDropViewStatement();
|
||||
|
||||
|
||||
accept(Token.VIEW);
|
||||
|
||||
|
||||
if (lexer.token() == Token.IF) {
|
||||
lexer.nextToken();
|
||||
accept(Token.EXISTS);
|
||||
stmt.setIfExists(true);
|
||||
}
|
||||
|
||||
|
||||
for (;;) {
|
||||
SQLName name = this.exprParser.name();
|
||||
stmt.addTableSource(name);
|
||||
@@ -1763,7 +1772,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (identifierEquals("RESTRICT")) {
|
||||
stmt.setOption("RESTRICT");
|
||||
lexer.nextToken();
|
||||
@@ -1771,7 +1780,7 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
stmt.setOption("CASCADE");
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
|
||||
return stmt;
|
||||
}
|
||||
|
||||
@@ -2009,30 +2018,30 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
}
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
|
||||
|
||||
public SQLStatement parseRename() {
|
||||
MySqlRenameTableStatement stmt = new MySqlRenameTableStatement();
|
||||
|
||||
|
||||
acceptIdentifier("RENAME");
|
||||
|
||||
|
||||
accept(Token.TABLE);
|
||||
|
||||
|
||||
for (;;) {
|
||||
MySqlRenameTableStatement.Item item = new MySqlRenameTableStatement.Item();
|
||||
item.setName(this.exprParser.name());
|
||||
acceptIdentifier("TO");
|
||||
item.setTo(this.exprParser.name());
|
||||
|
||||
|
||||
stmt.getItems().add(item);
|
||||
|
||||
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return stmt;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -767,8 +767,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
|
||||
if (x.getColumns().size() > 0) {
|
||||
incrementIndent();
|
||||
println();
|
||||
print("(");
|
||||
print(" (");
|
||||
for (int i = 0, size = x.getColumns().size(); i < size; ++i) {
|
||||
if (i != 0) {
|
||||
if (i % 5 == 0) {
|
||||
@@ -785,8 +784,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
|
||||
if (x.getValuesList().size() != 0) {
|
||||
println();
|
||||
print("VALUES");
|
||||
println();
|
||||
print("VALUES ");
|
||||
for (int i = 0, size = x.getValuesList().size(); i < size; ++i) {
|
||||
if (i != 0) {
|
||||
print(", ");
|
||||
|
||||
@@ -381,7 +381,7 @@ public class OracleExprParser extends SQLExprParser {
|
||||
accept(Token.RPAREN);
|
||||
}
|
||||
|
||||
identifierEquals("TO");
|
||||
acceptIdentifier("TO");
|
||||
if (identifierEquals("SECOND")) {
|
||||
lexer.nextToken();
|
||||
interval.setToType(OracleIntervalType.SECOND);
|
||||
@@ -462,7 +462,7 @@ public class OracleExprParser extends SQLExprParser {
|
||||
}
|
||||
|
||||
public OracleDateExpr parseDate() {
|
||||
identifierEquals("DATE");
|
||||
acceptIdentifier("DATE");
|
||||
|
||||
OracleDateExpr timestamp = new OracleDateExpr();
|
||||
|
||||
@@ -829,4 +829,16 @@ public class OracleExprParser extends SQLExprParser {
|
||||
|
||||
return column;
|
||||
}
|
||||
|
||||
public SQLExpr exprRest(SQLExpr expr) throws ParserException {
|
||||
expr = super.exprRest(expr);
|
||||
|
||||
if (lexer.token() == Token.COLONEQ) {
|
||||
lexer.nextToken();
|
||||
SQLExpr right = expr();
|
||||
expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.Assignment, right);
|
||||
}
|
||||
|
||||
return expr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1138,7 +1138,7 @@ public class SQLExprParser extends SQLParser {
|
||||
if (lexer.token() == token) {
|
||||
lexer.nextToken();
|
||||
} else {
|
||||
throw new SQLParseException("syntax error, expect " + token + ", actual " + lexer.token());
|
||||
throw new SQLParseException("syntax error, expect " + token + ", actual " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user