improve sqlwall

This commit is contained in:
Yako
2014-09-09 20:04:50 +08:00
parent e6eddc52cd
commit 663a1c37ff
7 changed files with 71 additions and 25 deletions
@@ -15,16 +15,21 @@
*/
package com.alibaba.druid.sql.ast.statement;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLCreateDatabaseStatement extends SQLStatementImpl {
private SQLName name;
private SQLName name;
private String characterSet;
private String collate;
private String characterSet;
private String collate;
private List<SQLCommentHint> hints;
public SQLCreateDatabaseStatement(){
}
@@ -61,4 +66,12 @@ public class SQLCreateDatabaseStatement extends SQLStatementImpl {
this.collate = collate;
}
public List<SQLCommentHint> getHints() {
return hints;
}
public void setHints(List<SQLCommentHint> hints) {
this.hints = hints;
}
}
@@ -15,13 +15,18 @@
*/
package com.alibaba.druid.sql.ast.statement;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLExplainStatement extends SQLStatementImpl {
protected SQLStatement statement;
protected SQLStatement statement;
private List<SQLCommentHint> hints;
public SQLStatement getStatement() {
return statement;
@@ -41,4 +46,12 @@ public class SQLExplainStatement extends SQLStatementImpl {
}
visitor.endVisit(this);
}
public List<SQLCommentHint> getHints() {
return hints;
}
public void setHints(List<SQLCommentHint> hints) {
this.hints = hints;
}
}
@@ -2537,6 +2537,10 @@ public class MySqlStatementParser extends SQLStatementParser {
if (lexer.token() == Token.DEFAULT) {
lexer.nextToken();
}
if (lexer.token() == Token.HINT) {
stmt.setHints(this.exprParser.parseHints());
}
return stmt;
}
@@ -1123,12 +1123,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
print(" WITH CONSISTENT SNAPSHOT");
}
List<SQLCommentHint> hints = x.getHints();
if (hints != null && !hints.isEmpty()) {
if (x.getHints() != null && x.getHints().size() > 0) {
print(" ");
for (SQLCommentHint hint : hints) {
hint.accept(this);
}
printAndAccept(x.getHints(), " ");
}
if (x.isBegin()) {
@@ -2143,12 +2140,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
x.getTable().accept(this);
}
List<SQLCommentHint> hints = x.getHints();
if (hints != null && !hints.isEmpty()) {
if (x.getHints() != null && x.getHints().size() > 0) {
print(" ");
for (SQLCommentHint hint : hints) {
hint.accept(this);
}
printAndAccept(x.getHints(), " ");
}
return false;
@@ -2685,12 +2679,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
print(x.getLockType().name);
}
List<SQLCommentHint> hints = x.getHints();
if (hints != null && !hints.isEmpty()) {
if (x.getHints() != null && x.getHints().size() > 0) {
print(" ");
for (SQLCommentHint hint : hints) {
hint.accept(this);
}
printAndAccept(x.getHints(), " ");
}
return false;
}
@@ -1534,8 +1534,13 @@ public class SQLStatementParser extends SQLParser {
if (lexer.token() == Token.FOR) {
lexer.nextToken();
}
SQLExplainStatement explain = new SQLExplainStatement();
if(lexer.token == Token.HINT) {
explain.setHints(this.exprParser.parseHints());
}
explain.setStatement(parseStatement());
return explain;
@@ -1149,13 +1149,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print("SET ");
printAndAccept(x.getItems(), ", ");
List<SQLCommentHint> hints = x.getHints();
if (hints != null && !hints.isEmpty()) {
if (x.getHints() != null && x.getHints().size() > 0) {
print(" ");
for (SQLCommentHint hint : hints) {
hint.accept(this);
}
printAndAccept(x.getHints(), " ");
}
return false;
}
@@ -1770,6 +1768,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLExplainStatement x) {
print("EXPLAIN");
if (x.getHints() != null && x.getHints().size() > 0) {
print(" ");
printAndAccept(x.getHints(), " ");
}
println();
x.getStatement().accept(this);
return false;