mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser for mysql explain. for issue #1645
This commit is contained in:
@@ -24,6 +24,8 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public class SQLExplainStatement extends SQLStatementImpl {
|
||||
|
||||
private String type;
|
||||
|
||||
protected SQLStatement statement;
|
||||
|
||||
private List<SQLCommentHint> hints;
|
||||
@@ -47,6 +49,14 @@ public class SQLExplainStatement extends SQLStatementImpl {
|
||||
this.statement = statement;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void accept0(SQLASTVisitor visitor) {
|
||||
if (visitor.visit(this)) {
|
||||
|
||||
@@ -2087,6 +2087,15 @@ public class SQLStatementParser extends SQLParser {
|
||||
explain.setHints(this.exprParser.parseHints());
|
||||
}
|
||||
|
||||
if (JdbcConstants.MYSQL.equals(dbType)) {
|
||||
if (identifierEquals("FORMAT")
|
||||
|| identifierEquals("EXTENDED")
|
||||
|| identifierEquals("PARTITIONS")) {
|
||||
explain.setType(lexer.stringVal);
|
||||
lexer.nextToken();
|
||||
}
|
||||
}
|
||||
|
||||
explain.setStatement(parseStatement());
|
||||
|
||||
return explain;
|
||||
|
||||
@@ -2631,6 +2631,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
|
||||
print(' ');
|
||||
printAndAccept(x.getHints(), " ");
|
||||
}
|
||||
|
||||
if (x.getType() != null) {
|
||||
print(' ');
|
||||
print0(x.getType());
|
||||
}
|
||||
println();
|
||||
x.getStatement().accept(this);
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user