diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java new file mode 100644 index 0000000000..74f2df894a --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java @@ -0,0 +1,14 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + + +public class MySqlShowPluginsStatement extends MySqlStatementImpl { + + private static final long serialVersionUID = 1L; + + 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/MySqlShowPrivilegesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPrivilegesStatement.java new file mode 100644 index 0000000000..01797d3297 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPrivilegesStatement.java @@ -0,0 +1,14 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + + +public class MySqlShowPrivilegesStatement extends MySqlStatementImpl { + + private static final long serialVersionUID = 1L; + + public void accept0(MySqlASTVisitor visitor) { + visitor.visit(this); + visitor.endVisit(this); + } +} 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 11d114860d..5536c6a3cc 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 @@ -83,6 +83,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -821,6 +823,18 @@ public class MySqlStatementParser extends SQLStatementParser { } return stmt; } + + if (identifierEquals("PLUGINS")) { + lexer.nextToken(); + MySqlShowPluginsStatement stmt = new MySqlShowPluginsStatement(); + return stmt; + } + + if (identifierEquals("PRIVILEGES")) { + lexer.nextToken(); + MySqlShowPrivilegesStatement stmt = new MySqlShowPrivilegesStatement(); + return stmt; + } throw new ParserException("TODO " + lexer.stringVal()); } 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 0b82aed38a..9963a1741a 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 @@ -74,6 +74,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -351,4 +353,12 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlShowOpenTablesStatement x); void endVisit(MySqlShowOpenTablesStatement x); + + boolean visit(MySqlShowPluginsStatement x); + + void endVisit(MySqlShowPluginsStatement x); + + boolean visit(MySqlShowPrivilegesStatement x); + + void endVisit(MySqlShowPrivilegesStatement 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 d06a71757e..8ad49ab38b 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 @@ -61,6 +61,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -761,4 +763,24 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements public void endVisit(MySqlShowOpenTablesStatement x) { } + + @Override + public boolean visit(MySqlShowPluginsStatement x) { + return true; + } + + @Override + public void endVisit(MySqlShowPluginsStatement x) { + + } + + @Override + public boolean visit(MySqlShowPrivilegesStatement x) { + return true; + } + + @Override + public void endVisit(MySqlShowPrivilegesStatement x) { + + } } 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 67e17333f8..a7dbc6aa44 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 @@ -93,6 +93,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -1905,4 +1907,26 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV public void endVisit(MySqlShowOpenTablesStatement x) { } + + @Override + public boolean visit(MySqlShowPluginsStatement x) { + print("SHOW PLUGINS"); + return false; + } + + @Override + public void endVisit(MySqlShowPluginsStatement x) { + + } + + @Override + public boolean visit(MySqlShowPrivilegesStatement x) { + print("SHOW PRIVILEGES"); + return false; + } + + @Override + public void endVisit(MySqlShowPrivilegesStatement x) { + + } } 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 2baf4aa1f2..094853ca98 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 @@ -70,6 +70,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -824,4 +826,24 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public void endVisit(MySqlShowOpenTablesStatement x) { } + + @Override + public boolean visit(MySqlShowPluginsStatement x) { + return false; + } + + @Override + public void endVisit(MySqlShowPluginsStatement x) { + + } + + @Override + public boolean visit(MySqlShowPrivilegesStatement x) { + return false; + } + + @Override + public void endVisit(MySqlShowPrivilegesStatement x) { + + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java index ee1c1933e9..490e9ba747 100755 --- a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java @@ -39,6 +39,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.parser.Token; @@ -752,6 +754,24 @@ public class DALParserTest extends TestCase { Assert.assertEquals("SHOW OPEN TABLES FROM mysql WHERE 1 = 1", output); } + public void test_show_open_plugins() throws Exception { + String sql = "SHOW plugins"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowPluginsStatement show = (MySqlShowPluginsStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW PLUGINS", output); + } + + public void test_show_PRIVILEGES() throws Exception { + String sql = "SHOW PRIVILEGES"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowPrivilegesStatement show = (MySqlShowPrivilegesStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW PRIVILEGES", output); + } + // // public void testShow() throws Exception { //