mysql parser drop user

This commit is contained in:
温少
2012-02-22 21:18:59 +08:00
parent 3a5583c16f
commit 3dafb3aba1
26 changed files with 158 additions and 21 deletions
@@ -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);
@@ -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);
}
@@ -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);
@@ -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<SQLExpr> users = new ArrayList<SQLExpr>(2);
public List<SQLExpr> getUsers() {
return users;
}
public void setUsers(List<SQLExpr> users) {
this.users = users;
}
public void accept0(MySqlASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, users);
}
}
}
@@ -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);
@@ -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);
}
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
}
}
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
}
@@ -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);
@@ -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());
}
}
@@ -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;
}
}
@@ -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);
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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<SQLStatement> statementList) {
return false;
}
public SQLStatement parseDropUser() throws ParserException {
throw new ParserException("TODO " + lexer.token());
}
public SQLCallStatement parseCall() throws ParserException {
acceptIdentifier("CALL");
@@ -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<SQLStatement> 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);
}
}