diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/CobarShowStatus.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/CobarShowStatus.java index ec23338a28..31dca9b8a7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/CobarShowStatus.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/CobarShowStatus.java @@ -6,7 +6,7 @@ public class CobarShowStatus extends MySqlStatementImpl { private static final long serialVersionUID = 1L; - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBinlogStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBinlogStatement.java index fd06e7b803..85f75ebfa6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBinlogStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBinlogStatement.java @@ -16,7 +16,7 @@ public class MySqlBinlogStatement extends MySqlStatementImpl { this.expr = expr; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, expr); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCommitStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCommitStatement.java index 75724b1243..401914906d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCommitStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCommitStatement.java @@ -50,7 +50,7 @@ public class MySqlCommitStatement extends MySqlStatementImpl { this.work = work; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropUser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropUser.java new file mode 100644 index 0000000000..12c815c35e --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropUser.java @@ -0,0 +1,28 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import java.util.ArrayList; +import java.util.List; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlDropUser extends MySqlStatementImpl { + + private static final long serialVersionUID = 1L; + + private List users = new ArrayList(2); + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } + + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, users); + } + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlExecuteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlExecuteStatement.java index 1ab3c146b8..f46bf7043c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlExecuteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlExecuteStatement.java @@ -41,7 +41,7 @@ public class MySqlExecuteStatement extends MySqlStatementImpl { return parameters; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, statementName); acceptChild(visitor, parameters); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlKillStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlKillStatement.java index 4f9e41ce8c..354ad02666 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlKillStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlKillStatement.java @@ -28,7 +28,7 @@ public class MySqlKillStatement extends MySqlStatementImpl { this.threadId = threadId; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, threadId); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadDataInFileStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadDataInFileStatement.java index 4cd44c3760..2be844c626 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadDataInFileStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadDataInFileStatement.java @@ -175,7 +175,7 @@ public class MySqlLoadDataInFileStatement extends MySqlStatementImpl { return setList; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, fileName); acceptChild(visitor, tableName); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadXmlStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadXmlStatement.java index 8820641a0e..7bca63950b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadXmlStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLoadXmlStatement.java @@ -130,7 +130,7 @@ public class MySqlLoadXmlStatement extends MySqlStatementImpl { return setList; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, fileName); acceptChild(visitor, tableName); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPrepareStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPrepareStatement.java index 583e1dbc27..beb816805a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPrepareStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPrepareStatement.java @@ -49,7 +49,7 @@ public class MySqlPrepareStatement extends MySqlStatementImpl { this.from = from; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, name); acceptChild(visitor, from); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlReplicateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlReplicateStatement.java index 425599e3a2..79856f85d8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlReplicateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlReplicateStatement.java @@ -83,7 +83,7 @@ public class MySqlReplicateStatement extends MySqlStatementImpl { return setItems; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, tableName); acceptChild(visitor, columns); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlResetStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlResetStatement.java index 9604995f4c..5fdc36befd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlResetStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlResetStatement.java @@ -18,7 +18,7 @@ public class MySqlResetStatement extends MySqlStatementImpl { this.options = options; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { visitor.visit(this); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java index 7e85045cb9..116f1bc0c9 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlRollbackStatement.java @@ -50,7 +50,7 @@ public class MySqlRollbackStatement extends MySqlStatementImpl { this.work = work; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java index 7eb5555157..f467dc557d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java @@ -70,7 +70,7 @@ public class MySqlShowColumnsStatement extends MySqlStatementImpl { this.where = where; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, table); acceptChild(visitor, database); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java index 65573f627c..975c62803f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java @@ -51,7 +51,7 @@ public class MySqlShowDatabasesStatement extends MySqlStatementImpl { this.where = where; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, database); acceptChild(visitor, like); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java index 244863c340..7fe54294cc 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java @@ -60,7 +60,7 @@ public class MySqlShowStatusStatement extends MySqlStatementImpl { this.where = where; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, like); acceptChild(visitor, where); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java index 14a295471f..b599aaaa5c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java @@ -61,7 +61,7 @@ public class MySqlShowTablesStatement extends MySqlStatementImpl { this.where = where; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, database); acceptChild(visitor, like); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java index 6d97a69ca7..ee701c23f0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java @@ -41,7 +41,7 @@ public class MySqlShowWarningsStatement extends MySqlStatementImpl { this.limit = limit; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, limit); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStartTransactionStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStartTransactionStatement.java index f963b31552..d166a650fd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStartTransactionStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStartTransactionStatement.java @@ -50,7 +50,7 @@ public class MySqlStartTransactionStatement extends MySqlStatementImpl { this.work = work; } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java index 1eef30d406..023690f5e3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlStatementImpl.java @@ -32,7 +32,7 @@ public abstract class MySqlStatementImpl extends SQLStatementImpl { } } - protected void accept0(MySqlASTVisitor visitor) { + public void accept0(MySqlASTVisitor visitor) { throw new UnsupportedOperationException(this.getClass().getName()); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index c81d98ae86..d430341685 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -37,6 +37,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableParser; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; @@ -202,12 +203,12 @@ public class MySqlStatementParser extends SQLStatementParser { } stmt.getUsers().add(userSpec); - + if (lexer.token() == Token.COMMA) { lexer.nextToken(); continue; } - + break; } @@ -960,4 +961,28 @@ public class MySqlStatementParser extends SQLStatementParser { return insertStatement; } + + public SQLStatement parseDropUser() throws ParserException { + accept(Token.USER); + + MySqlDropUser stmt = new MySqlDropUser(); + for (;;) { + SQLCharExpr expr = (SQLCharExpr) this.createExprParser().expr(); + String user = expr.toString(); + if (lexer.token() == Token.VARIANT) { + lexer.nextToken(); + SQLCharExpr expr2 = (SQLCharExpr) this.createExprParser().expr(); + user += '@'; + user += expr2.toString(); + } + stmt.getUsers().add(new SQLIdentifierExpr(user)); + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + break; + } + + return stmt; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java index 873dd0cdaa..6a70e82064 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java @@ -27,6 +27,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; @@ -165,6 +166,10 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlResetStatement x); + void endVisit(MySqlDropUser x); + + boolean visit(MySqlDropUser x); + void endVisit(MySqlCreateUserStatement x); boolean visit(MySqlCreateUserStatement x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java index 7b930721ee..76cd785638 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java @@ -13,6 +13,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; @@ -366,5 +367,15 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements public boolean visit(UserSpecification x) { return true; } + + @Override + public void endVisit(MySqlDropUser x) { + + } + + @Override + public boolean visit(MySqlDropUser x) { + return true; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 15bee85a18..23e82d6ecd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -42,6 +42,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; @@ -1284,4 +1285,16 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } return false; } + + @Override + public void endVisit(MySqlDropUser x) { + + } + + @Override + public boolean visit(MySqlDropUser x) { + print("DROP USER "); + printAndAccept(x.getUsers(), ", "); + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 19e1304bbc..c721d58d96 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -16,7 +16,9 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; @@ -27,7 +29,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplicateStatement import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectGroupBy; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; @@ -429,4 +430,14 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public boolean visit(UserSpecification x) { return true; } + + @Override + public void endVisit(MySqlDropUser x) { + + } + + @Override + public boolean visit(MySqlDropUser x) { + return true; + } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 51ac7f713d..b37623700a 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -126,6 +126,12 @@ public class SQLStatementParser extends SQLParser { statementList.add(stmt); continue; + } else if (lexer.token() == Token.USER) { + SQLStatement stmt = parseDropUser(); + statementList.add(stmt); + continue; + } else { + throw new ParserException("TODO " + lexer.token()); } } @@ -190,6 +196,10 @@ public class SQLStatementParser extends SQLParser { public boolean parseStatementListDialect(List statementList) { return false; } + + public SQLStatement parseDropUser() throws ParserException { + throw new ParserException("TODO " + lexer.token()); + } public SQLCallStatement parseCall() throws ParserException { acceptIdentifier("CALL"); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/DropUserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/DropUserTest.java new file mode 100644 index 0000000000..f7b907cf13 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/DropUserTest.java @@ -0,0 +1,34 @@ +package com.alibaba.druid.bvt.sql.mysql; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.MysqlTest; +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; + +public class DropUserTest extends MysqlTest { + + public void test_0() throws Exception { + String sql = "DROP USER 'jeffrey'@'localhost';"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + System.out.println(output(statementList)); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getFields()); + + Assert.assertTrue(visitor.getTables().size() == 0); + } + + +}