From f75e0cd7405b2ac0beb3430f204d28457ef7a583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Wed, 16 May 2012 10:31:49 +0800 Subject: [PATCH] mysql parser show --- .../statement/MySqlShowMasterStatusStatement.java | 14 ++++++++++++++ .../dialect/mysql/parser/MySqlStatementParser.java | 9 +++++++-- .../sql/dialect/mysql/visitor/MySqlASTVisitor.java | 5 +++++ .../mysql/visitor/MySqlASTVisitorAdapter.java | 11 +++++++++++ .../dialect/mysql/visitor/MySqlOutputVisitor.java | 12 ++++++++++++ .../mysql/visitor/MySqlSchemaStatVisitor.java | 11 +++++++++++ .../alibaba/druid/bvt/sql/cobar/DALParserTest.java | 10 ++++++++++ 7 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java new file mode 100644 index 0000000000..0af624e17d --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.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 MySqlShowMasterStatusStatement 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 4b19a94f43..42022fb872 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 @@ -81,6 +81,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; 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.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -524,8 +525,12 @@ public class MySqlStatementParser extends SQLStatementParser { if (identifierEquals("MASTER")) { lexer.nextToken(); - acceptIdentifier("LOGS"); - return new MySqlShowMasterLogsStatement(); + if (identifierEquals("LOGS")) { + lexer.nextToken(); + return new MySqlShowMasterLogsStatement(); + } + acceptIdentifier("STATUS"); + return new MySqlShowMasterStatusStatement(); } if (identifierEquals("CHARACTER")) { 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 5a0222f4cf..69a492caca 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 @@ -72,6 +72,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; 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.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -341,4 +342,8 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlShowKeysStatement x); void endVisit(MySqlShowKeysStatement x); + + boolean visit(MySqlShowMasterStatusStatement x); + + void endVisit(MySqlShowMasterStatusStatement 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 b0a06e2936..c107ea89f2 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 @@ -59,6 +59,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; 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.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -739,4 +740,14 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements public void endVisit(MySqlShowKeysStatement x) { } + + @Override + public boolean visit(MySqlShowMasterStatusStatement x) { + return true; + } + + @Override + public void endVisit(MySqlShowMasterStatusStatement 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 f08de11525..745fb0156e 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 @@ -91,6 +91,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; 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.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -1865,4 +1866,15 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV public void endVisit(MySqlShowKeysStatement x) { } + + @Override + public boolean visit(MySqlShowMasterStatusStatement x) { + print("SHOW MASTER STATUS"); + return false; + } + + @Override + public void endVisit(MySqlShowMasterStatusStatement 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 9d0eafbb72..9ad6631c23 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 @@ -68,6 +68,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; 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.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -802,4 +803,14 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public void endVisit(MySqlShowKeysStatement x) { } + + @Override + public boolean visit(MySqlShowMasterStatusStatement x) { + return false; + } + + @Override + public void endVisit(MySqlShowMasterStatusStatement 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 2dec0931bf..be68870dca 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 @@ -37,6 +37,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; 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.parser.MySqlStatementParser; import com.alibaba.druid.sql.parser.Token; @@ -696,6 +697,15 @@ public class DALParserTest extends TestCase { Assert.assertEquals("SHOW KEYS FROM db.tb1", output); } + public void test_master_status() throws Exception { + String sql = "SHOW MASTER STATUS"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowMasterStatusStatement show = (MySqlShowMasterStatusStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW MASTER STATUS", output); + } + // // public void testShow() throws Exception { // sql = "SHOW master status";