From ec3d5bb9f5ddd5c7dbcaff82e024068638d8826f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Tue, 15 May 2012 21:02:29 +0800 Subject: [PATCH] refactor --- .../MySqlShowCreateFunctionStatement.java | 12 ++++----- .../MySqlShowCreateProcedureStatement.java | 27 +++++++++++++++++++ .../mysql/parser/MySqlStatementParser.java | 11 +++++++- .../mysql/visitor/MySqlASTVisitor.java | 5 ++++ .../mysql/visitor/MySqlASTVisitorAdapter.java | 11 ++++++++ .../mysql/visitor/MySqlOutputVisitor.java | 15 ++++++++++- .../mysql/visitor/MySqlSchemaStatVisitor.java | 11 ++++++++ .../druid/bvt/sql/cobar/DALParserTest.java | 10 +++++++ 8 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java index ae178beccc..f70b2b5e3e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java @@ -7,21 +7,21 @@ public class MySqlShowCreateFunctionStatement extends MySqlStatementImpl { private static final long serialVersionUID = 1L; - private SQLExpr functionName; + private SQLExpr name; public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { - acceptChild(visitor, functionName); + acceptChild(visitor, name); } visitor.endVisit(this); } - public SQLExpr getFunctionName() { - return functionName; + public SQLExpr getName() { + return name; } - public void setFunctionName(SQLExpr functionName) { - this.functionName = functionName; + public void setName(SQLExpr functionName) { + this.name = functionName; } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java new file mode 100644 index 0000000000..3170932b79 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java @@ -0,0 +1,27 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlShowCreateProcedureStatement extends MySqlStatementImpl { + + private static final long serialVersionUID = 1L; + + private SQLExpr name; + + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public SQLExpr getName() { + return name; + } + + public void setName(SQLExpr functionName) { + this.name = functionName; + } + +} 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 ce49f28d07..d4877bcba2 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 @@ -65,6 +65,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -623,7 +624,15 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); MySqlShowCreateFunctionStatement stmt = new MySqlShowCreateFunctionStatement(); - stmt.setFunctionName(this.exprParser.name()); + stmt.setName(this.exprParser.name()); + return stmt; + } + + if (identifierEquals("PROCEDURE")) { + lexer.nextToken(); + + MySqlShowCreateProcedureStatement stmt = new MySqlShowCreateProcedureStatement(); + stmt.setName(this.exprParser.name()); 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 e170039bc4..a09f70a768 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 @@ -56,6 +56,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -271,4 +272,8 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlShowCreateFunctionStatement x); void endVisit(MySqlShowCreateFunctionStatement x); + + boolean visit(MySqlShowCreateProcedureStatement x); + + void endVisit(MySqlShowCreateProcedureStatement 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 f604d081ee..a33ef543af 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 @@ -43,6 +43,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -586,4 +587,14 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements public void endVisit(MySqlShowCreateFunctionStatement x) { } + + @Override + public boolean visit(MySqlShowCreateProcedureStatement x) { + return true; + } + + @Override + public void endVisit(MySqlShowCreateProcedureStatement 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 2408f99b32..3aeba5f717 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 @@ -75,6 +75,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -1617,7 +1618,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV @Override public boolean visit(MySqlShowCreateFunctionStatement x) { print("SHOW CREATE FUNCTION "); - x.getFunctionName().accept(this); + x.getName().accept(this); return false; } @@ -1625,4 +1626,16 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV public void endVisit(MySqlShowCreateFunctionStatement x) { } + + @Override + public boolean visit(MySqlShowCreateProcedureStatement x) { + print("SHOW CREATE PROCEDURE "); + x.getName().accept(this); + return false; + } + + @Override + public void endVisit(MySqlShowCreateProcedureStatement 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 d6f4951a43..f20002bda9 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 @@ -52,6 +52,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -648,4 +649,14 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public void endVisit(MySqlShowCreateFunctionStatement x) { } + + @Override + public boolean visit(MySqlShowCreateProcedureStatement x) { + return false; + } + + @Override + public void endVisit(MySqlShowCreateProcedureStatement 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 9d44cf8dcc..a5d811a022 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 @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.parser.Token; @@ -367,6 +368,15 @@ public class DALParserTest extends TestCase { Assert.assertEquals("SHOW CREATE FUNCTION x", output); } + public void test_show_create_PROCEDURE() throws Exception { + String sql = "SHOW CREATE PROCEDURE x"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowCreateProcedureStatement show = (MySqlShowCreateProcedureStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW CREATE PROCEDURE x", output); + } + // // public void testShow() throws Exception { //