From 6fa8ec32ac11bf79611ee463571129989a83f528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sat, 9 Jan 2016 20:37:53 +0800 Subject: [PATCH] refactor sql parser --- .../SQLParameter.java} | 33 ++++--- .../statement/SQLBlockStatement.java} | 28 ++++-- .../SQLCreateProcedureStatement.java} | 28 +++--- .../statement/SQLLoopStatement.java} | 19 +++- .../clause/MySqlCreateProcedureStatement.java | 80 ----------------- .../mysql/ast/clause/MySqlLoopStatement.java | 62 ------------- .../mysql/ast/clause/MySqlParameter.java | 89 ------------------- .../mysql/ast/clause/MySqlStatementType.java | 10 ++- .../ast/statement/MySqlBlockStatement.java | 58 ------------ .../mysql/parser/MySqlStatementParser.java | 55 ++++++------ .../mysql/visitor/MySqlASTVisitor.java | 21 ----- .../mysql/visitor/MySqlASTVisitorAdapter.java | 47 ---------- .../mysql/visitor/MySqlOutputVisitor.java | 75 +++++----------- .../mysql/visitor/MySqlSchemaStatVisitor.java | 48 ---------- .../oracle/parser/OracleStatementParser.java | 28 +++--- .../oracle/visitor/OracleASTVisitor.java | 20 ----- .../visitor/OracleASTVisitorAdapter.java | 44 --------- .../oracle/visitor/OracleOutputVisitor.java | 55 +++--------- .../visitor/OracleSchemaStatVisitor.java | 53 ----------- .../ast/stmt/SQLServerBlockStatement.java | 55 ------------ .../parser/SQLServerStatementParser.java | 10 +-- .../visitor/SQLServerASTVisitor.java | 5 -- .../visitor/SQLServerASTVisitorAdapter.java | 11 --- .../visitor/SQLServerOutputVisitor.java | 9 +- .../visitor/SQLServerSchemaStatVisitor.java | 11 --- .../sql/visitor/SQLASTOutputVisitor.java | 22 +++++ .../druid/sql/visitor/SQLASTVisitor.java | 20 +++++ .../sql/visitor/SQLASTVisitorAdapter.java | 44 +++++++++ .../druid/sql/visitor/SchemaStatVisitor.java | 21 +++++ .../visitor/OracleASTVisitorAdapterTest.java | 16 ++-- 30 files changed, 281 insertions(+), 796 deletions(-) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/clause/OracleParameter.java => ast/SQLParameter.java} (64%) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/stmt/OracleBlockStatement.java => ast/statement/SQLBlockStatement.java} (58%) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/stmt/OracleCreateProcedureStatement.java => ast/statement/SQLCreateProcedureStatement.java} (62%) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/stmt/OracleLoopStatement.java => ast/statement/SQLLoopStatement.java} (68%) delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCreateProcedureStatement.java delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlLoopStatement.java delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlParameter.java delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBlockStatement.java delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerBlockStatement.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleParameter.java b/src/main/java/com/alibaba/druid/sql/ast/SQLParameter.java similarity index 64% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleParameter.java rename to src/main/java/com/alibaba/druid/sql/ast/SQLParameter.java index 8dc77f2a0d..7f01b63c47 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleParameter.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLParameter.java @@ -13,18 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.oracle.ast.clause; +package com.alibaba.druid.sql.ast; -import com.alibaba.druid.sql.ast.SQLDataType; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleParameter extends OracleSQLObjectImpl { +public class SQLParameter extends SQLObjectImpl { - private SQLExpr name; - private SQLDataType dataType; - private SQLExpr defaultValue; + private SQLExpr name; + private SQLDataType dataType; + private SQLExpr defaultValue; + private ParameterType paramType; public SQLExpr getDefaultValue() { return defaultValue; @@ -49,9 +47,17 @@ public class OracleParameter extends OracleSQLObjectImpl { public void setDataType(SQLDataType dataType) { this.dataType = dataType; } + + public ParameterType getParamType() { + return paramType; + } + + public void setParamType(ParameterType paramType) { + this.paramType = paramType; + } @Override - public void accept0(OracleASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, name); acceptChild(visitor, dataType); @@ -59,4 +65,11 @@ public class OracleParameter extends OracleSQLObjectImpl { } visitor.endVisit(this); } + + public static enum ParameterType { + DEFAULT, // + IN, // in + OUT, // out + INOUT// inout + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleBlockStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLBlockStatement.java similarity index 58% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleBlockStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLBlockStatement.java index fd0586d9df..aeb60d0913 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleBlockStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLBlockStatement.java @@ -13,20 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleBlockStatement extends OracleStatementImpl { +public class SQLBlockStatement extends SQLStatementImpl { + private String labelName; - private List parameters = new ArrayList(); + private List parameters = new ArrayList(); - private List statementList = new ArrayList(); + private List statementList = new ArrayList(); public List getStatementList() { return statementList; @@ -35,9 +37,17 @@ public class OracleBlockStatement extends OracleStatementImpl { public void setStatementList(List statementList) { this.statementList = statementList; } + + public String getLabelName() { + return labelName; + } + + public void setLabelName(String labelName) { + this.labelName = labelName; + } @Override - public void accept0(OracleASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, parameters); acceptChild(visitor, statementList); @@ -45,11 +55,11 @@ public class OracleBlockStatement extends OracleStatementImpl { visitor.endVisit(this); } - public List getParameters() { + public List getParameters() { return parameters; } - public void setParameters(List parameters) { + public void setParameters(List parameters) { this.parameters = parameters; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateProcedureStatement.java similarity index 62% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateProcedureStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateProcedureStatement.java index 6d315688a7..63519fa99b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateProcedureStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateProcedureStatement.java @@ -13,24 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLParameter; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleCreateProcedureStatement extends OracleStatementImpl { +public class SQLCreateProcedureStatement extends SQLStatementImpl { - private boolean orReplace; - private SQLName name; - private OracleBlockStatement block; - private List parameters = new ArrayList(); + private boolean orReplace; + private SQLName name; + private SQLStatement block; + private List parameters = new ArrayList(); @Override - public void accept0(OracleASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, name); acceptChild(visitor, parameters); @@ -39,11 +41,11 @@ public class OracleCreateProcedureStatement extends OracleStatementImpl { visitor.endVisit(this); } - public List getParameters() { + public List getParameters() { return parameters; } - public void setParameters(List parameters) { + public void setParameters(List parameters) { this.parameters = parameters; } @@ -55,11 +57,11 @@ public class OracleCreateProcedureStatement extends OracleStatementImpl { this.name = name; } - public OracleBlockStatement getBlock() { + public SQLStatement getBlock() { return block; } - public void setBlock(OracleBlockStatement block) { + public void setBlock(SQLStatement block) { this.block = block; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLoopStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLLoopStatement.java similarity index 68% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLoopStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLLoopStatement.java index 143ba19a74..619103caf5 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLoopStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLLoopStatement.java @@ -13,20 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleLoopStatement extends OracleStatementImpl { +public class SQLLoopStatement extends SQLStatementImpl { + + private String labelName; private List statements = new ArrayList(); @Override - public void accept0(OracleASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, statements); } @@ -41,4 +44,12 @@ public class OracleLoopStatement extends OracleStatementImpl { this.statements = statements; } + public String getLabelName() { + return labelName; + } + + public void setLabelName(String labelName) { + this.labelName = labelName; + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCreateProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCreateProcedureStatement.java deleted file mode 100644 index 43e78f6713..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCreateProcedureStatement.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.mysql.ast.clause; - -import java.util.ArrayList; -import java.util.List; - -import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; - -/** - * - * @Description: MySql create procedure statement - * @author zz email:455910092@qq.com - * @version V1.0 - */ -public class MySqlCreateProcedureStatement extends MySqlStatementImpl { - private boolean orReplace; - private SQLName name; - private MySqlBlockStatement block; - private List parameters = new ArrayList(); - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, name); - acceptChild(visitor, parameters); - acceptChild(visitor, block); - } - visitor.endVisit(this); - } - - public List getParameters() { - return parameters; - } - - public void setParameters(List parameters) { - this.parameters = parameters; - } - - public SQLName getName() { - return name; - } - - public void setName(SQLName name) { - this.name = name; - } - - public MySqlBlockStatement getBlock() { - return block; - } - - public void setBlock(MySqlBlockStatement block) { - this.block = block; - } - - public boolean isOrReplace() { - return orReplace; - } - - public void setOrReplace(boolean orReplace) { - this.orReplace = orReplace; - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlLoopStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlLoopStatement.java deleted file mode 100644 index aa98e7a607..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlLoopStatement.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.mysql.ast.clause; - -import java.util.ArrayList; -import java.util.List; - -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; - -/** - * - * @Description: MySql procedure loop statement - * @author zz email:455910092@qq.com - * @date 2015-9-14 - * @version V1.0 - */ -public class MySqlLoopStatement extends MySqlStatementImpl { - - private String labelName; - - private List statements = new ArrayList(); - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, statements); - } - visitor.endVisit(this); - } - - public List getStatements() { - return statements; - } - - public void setStatements(List statements) { - this.statements = statements; - } - - public String getLabelName() { - return labelName; - } - - public void setLabelName(String labelName) { - this.labelName = labelName; - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlParameter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlParameter.java deleted file mode 100644 index df9f3e1621..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlParameter.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.mysql.ast.clause; - -import com.alibaba.druid.sql.ast.SQLDataType; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; - -/** - * - * @Description: MySql procedure parameter - * @author zz email:455910092@qq.com - * @date 2015-9-14 - * @version V1.0 - */ -public class MySqlParameter extends MySqlObjectImpl { - - private SQLExpr name; - private SQLDataType dataType; - private SQLExpr defaultValue; - private ParameterType paramType; - - public ParameterType getParamType() { - return paramType; - } - - public void setParamType(ParameterType paramType) { - this.paramType = paramType; - } - - public SQLExpr getDefaultValue() { - return defaultValue; - } - - public void setDefaultValue(SQLExpr deaultValue) { - this.defaultValue = deaultValue; - } - - public SQLExpr getName() { - return name; - } - - public void setName(SQLExpr name) { - this.name = name; - } - - public SQLDataType getDataType() { - return dataType; - } - - public void setDataType(SQLDataType dataType) { - this.dataType = dataType; - } - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, name); - acceptChild(visitor, dataType); - acceptChild(visitor, defaultValue); - } - visitor.endVisit(this); - } - /** - * mysql procedure parameter type - */ - public static enum ParameterType - { - DEFAULT, - IN,//in - OUT,//out - INOUT//inout - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlStatementType.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlStatementType.java index c38755436c..60bf3e34c8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlStatementType.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlStatementType.java @@ -16,8 +16,10 @@ package com.alibaba.druid.sql.dialect.mysql.ast.clause; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; +import com.alibaba.druid.sql.ast.statement.SQLIfStatement; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; @@ -41,7 +43,11 @@ public enum MySqlStatementType { //while statement WHILE(MySqlWhileStatement.class.getName()), //begin-end - BLOCK(MySqlBlockStatement.class.getName()), + IF(SQLIfStatement.class.getName()), + //begin-end + LOOP(SQLLoopStatement.class.getName()), + //begin-end + BLOCK(SQLBlockStatement.class.getName()), //declare statement DECLARE(MySqlDeclareStatement.class.getName()), //select into diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBlockStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBlockStatement.java deleted file mode 100644 index 08e4afd4aa..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlBlockStatement.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.mysql.ast.statement; - -import java.util.ArrayList; -import java.util.List; - -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; - -public class MySqlBlockStatement extends MySqlStatementImpl { - - /** - * begin-end block label name - * @author zz - */ - private String labelName; - - private List statementList = new ArrayList(); - - public List getStatementList() { - return statementList; - } - - public void setStatementList(List statementList) { - this.statementList = statementList; - } - - public String getLabelName() { - return labelName; - } - - public void setLabelName(String labelName) { - this.labelName = labelName; - } - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, statementList); - } - 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 ff00f6c5ff..8344596dae 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 @@ -23,6 +23,8 @@ import com.alibaba.druid.sql.ast.SQLDataTypeImpl; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLOrderBy; +import com.alibaba.druid.sql.ast.SQLParameter; +import com.alibaba.druid.sql.ast.SQLParameter.ParameterType; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; @@ -45,13 +47,16 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; @@ -63,14 +68,10 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter.ParameterType; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; @@ -87,7 +88,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; @@ -714,8 +714,8 @@ public class MySqlStatementParser extends SQLStatementParser { return false; } - public MySqlBlockStatement parseBlock() { - MySqlBlockStatement block = new MySqlBlockStatement(); + public SQLBlockStatement parseBlock() { + SQLBlockStatement block = new SQLBlockStatement(); accept(Token.BEGIN); parseProcedureStatementList(block.getStatementList()); @@ -2744,11 +2744,11 @@ public class MySqlStatementParser extends SQLStatementParser { /** * parse create procedure statement */ - public MySqlCreateProcedureStatement parseCreateProcedure() { + public SQLCreateProcedureStatement parseCreateProcedure() { /** * CREATE OR REPALCE PROCEDURE SP_NAME(parameter_list) BEGIN block_statement END */ - MySqlCreateProcedureStatement stmt = new MySqlCreateProcedureStatement(); + SQLCreateProcedureStatement stmt = new SQLCreateProcedureStatement(); accept(Token.CREATE); if (lexer.token() == Token.OR) { @@ -2766,7 +2766,7 @@ public class MySqlStatementParser extends SQLStatementParser { parserParameters(stmt.getParameters()); accept(Token.RPAREN);// match ")" } - MySqlBlockStatement block = this.parseBlock(); + SQLBlockStatement block = this.parseBlock(); stmt.setBlock(block); @@ -2777,9 +2777,9 @@ public class MySqlStatementParser extends SQLStatementParser { * parse create procedure parameters * @param parameters */ - private void parserParameters(List parameters) { + private void parserParameters(List parameters) { for (;;) { - MySqlParameter parameter = new MySqlParameter(); + SQLParameter parameter = new SQLParameter(); if (lexer.token() == Token.CURSOR) { lexer.nextToken(); @@ -3304,9 +3304,9 @@ public class MySqlStatementParser extends SQLStatementParser { /** * parse loop statement */ - public MySqlLoopStatement parseLoop() + public SQLLoopStatement parseLoop() { - MySqlLoopStatement loopStmt=new MySqlLoopStatement(); + SQLLoopStatement loopStmt=new SQLLoopStatement(); accept(Token.LOOP); parseProcedureStatementList(loopStmt.getStatements()); accept(Token.END); @@ -3318,24 +3318,23 @@ public class MySqlStatementParser extends SQLStatementParser { /** * parse loop statement with label */ - public MySqlLoopStatement parseLoop(String label) - { - MySqlLoopStatement loopStmt=new MySqlLoopStatement(); - loopStmt.setLabelName(label); - accept(Token.LOOP); - parseProcedureStatementList(loopStmt.getStatements()); - accept(Token.END); - accept(Token.LOOP); - acceptIdentifier(label); - accept(Token.SEMI); - return loopStmt; - } + public SQLLoopStatement parseLoop(String label) { + SQLLoopStatement loopStmt = new SQLLoopStatement(); + loopStmt.setLabelName(label); + accept(Token.LOOP); + parseProcedureStatementList(loopStmt.getStatements()); + accept(Token.END); + accept(Token.LOOP); + acceptIdentifier(label); + accept(Token.SEMI); + return loopStmt; + } /** * parse loop statement with label */ - public MySqlBlockStatement parseBlock(String label) { - MySqlBlockStatement block = new MySqlBlockStatement(); + public SQLBlockStatement parseBlock(String label) { + SQLBlockStatement block = new SQLBlockStatement(); block.setLabelName(label); accept(Token.BEGIN); parseProcedureStatementList(block.getStatementList()); 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 d2f6d80b53..26fdcf9cdc 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 @@ -24,13 +24,10 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; @@ -54,7 +51,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; @@ -576,23 +572,10 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlSelectGroupByExpr x); void endVisit(MySqlSelectGroupByExpr x); - - boolean visit(MySqlBlockStatement x); - - void endVisit(MySqlBlockStatement x); - /** * support procedure */ - boolean visit(MySqlCreateProcedureStatement x); - - void endVisit(MySqlCreateProcedureStatement x); - - boolean visit(MySqlParameter x); - - void endVisit(MySqlParameter x); - boolean visit(MySqlWhileStatement x); void endVisit(MySqlWhileStatement x); @@ -613,10 +596,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlWhenStatement x); - boolean visit(MySqlLoopStatement x); - - void endVisit(MySqlLoopStatement x); - boolean visit(MySqlLeaveStatement x); void endVisit(MySqlLeaveStatement 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 754a357738..328671300e 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 @@ -24,13 +24,10 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; @@ -54,7 +51,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; @@ -1260,39 +1256,6 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } - @Override - public boolean visit(MySqlBlockStatement x) { - return true; - } - - @Override - public void endVisit(MySqlBlockStatement x) { - - } - - /** - * support procedure - */ - @Override - public boolean visit(MySqlCreateProcedureStatement x) { - return true; - } - - @Override - public void endVisit(MySqlCreateProcedureStatement x) { - - } - - @Override - public boolean visit(MySqlParameter x) { - return true; - } - - @Override - public void endVisit(MySqlParameter x) { - - } - @Override public boolean visit(MySqlWhileStatement x) { return true; @@ -1344,16 +1307,6 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } //add:end - @Override - public boolean visit(MySqlLoopStatement x) { - return true; - } - - @Override - public void endVisit(MySqlLoopStatement x) { - - } - @Override public boolean visit(MySqlLeaveStatement x) { return false; 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 d8a89510cc..39a0fd3dd2 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 @@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLOrderBy; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; @@ -33,12 +34,15 @@ import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLIfStatement; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; @@ -50,14 +54,10 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter.ParameterType; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; @@ -81,7 +81,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; @@ -3180,7 +3179,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public boolean visit(MySqlBlockStatement x) { + public boolean visit(SQLBlockStatement x) { if (x.getLabelName() != null && !x.getLabelName().equals("")) { print0(x.getLabelName()); print0(": "); @@ -3207,17 +3206,12 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(MySqlBlockStatement x) { - - } - /** * visit procedure create node */ @Override - public boolean visit(MySqlCreateProcedureStatement x) { + public boolean visit(SQLCreateProcedureStatement x) { if (x.isOrReplace()) { print0(ucase ? "CREATE OR REPLACE PROCEDURE " : "create or replace procedure "); } else { @@ -3237,7 +3231,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV print0(", "); println(); } - MySqlParameter param = x.getParameters().get(i); + SQLParameter param = x.getParameters().get(i); param.accept(this); } @@ -3252,14 +3246,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(MySqlCreateProcedureStatement x) { - - } - - @Override - public boolean visit(MySqlParameter x) { - if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) { + @Override + public boolean visit(SQLParameter x) { + if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) { print0(ucase ? "CURSOR " : "cursor "); x.getName().accept(this); print0(ucase ? " IS" : " is"); @@ -3270,19 +3259,14 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV decrementIndent(); } else { - - if(x.getParamType()==ParameterType.IN) - { - print0(ucase ? "IN " : "in "); - } - else if(x.getParamType()==ParameterType.OUT) - { - print0(ucase ? "OUT " : "out "); - } - else if(x.getParamType()==ParameterType.INOUT) - { - print0(ucase ? "INOUT " : "inout "); - } + + if (x.getParamType() == SQLParameter.ParameterType.IN) { + print0(ucase ? "IN " : "in "); + } else if (x.getParamType() == SQLParameter.ParameterType.OUT) { + print0(ucase ? "OUT " : "out "); + } else if (x.getParamType() == SQLParameter.ParameterType.INOUT) { + print0(ucase ? "INOUT " : "inout "); + } x.getName().accept(this); print(' '); @@ -3295,12 +3279,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } return false; - } - - @Override - public void endVisit(MySqlParameter x) { - - } + } @Override public boolean visit(MySqlWhileStatement x) { @@ -3469,11 +3448,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public boolean visit(MySqlLoopStatement x) { - if(x.getLabelName()!=null&&!x.getLabelName().equals("")) { - print0(x.getLabelName()); - print0(": "); - } + public boolean visit(SQLLoopStatement x) { + if (x.getLabelName() != null && !x.getLabelName().equals("")) { + print0(x.getLabelName()); + print0(": "); + } print0(ucase ? "LOOP " : "loop "); println(); @@ -3494,12 +3473,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(MySqlLoopStatement x) { - // TODO Auto-generated method stub - - } - @Override public boolean visit(MySqlLeaveStatement x) { print0(ucase ? "LEAVE " : "leave "); 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 3071eaa249..8d3dd2ec63 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 @@ -41,13 +41,10 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; @@ -71,7 +68,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBlockStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; @@ -1359,16 +1355,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS @Override public void endVisit(MySqlSelectGroupByExpr x) { - } - - @Override - public boolean visit(MySqlBlockStatement x) { - return true; - } - - @Override - public void endVisit(MySqlBlockStatement x) { - } @Override @@ -1384,29 +1370,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS /** * support procedure */ - @Override - public boolean visit(MySqlCreateProcedureStatement x) { - String name = x.getName().toString(); - this.variants.put(name, x); - accept(x.getBlock()); - return false; - } - - @Override - public void endVisit(MySqlCreateProcedureStatement x) { - - } - - @Override - public boolean visit(MySqlParameter x) { - return true; - } - - @Override - public void endVisit(MySqlParameter x) { - - } - @Override public boolean visit(MySqlWhileStatement x) { accept(x.getStatements()); @@ -1467,17 +1430,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } - @Override - public boolean visit(MySqlLoopStatement x) { - accept(x.getStatements()); - return false; - } - - @Override - public void endVisit(MySqlLoopStatement x) { - - } - @Override public boolean visit(MySqlLeaveStatement x) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index eec7f3be88..9ae67da705 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -18,6 +18,7 @@ package com.alibaba.druid.sql.dialect.oracle.parser; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.SQLDataTypeImpl; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLHint; @@ -28,6 +29,9 @@ import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem; @@ -50,7 +54,6 @@ import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleErrorLoggingClause; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; @@ -70,12 +73,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDat import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; @@ -90,7 +91,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement.LockMode; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; @@ -544,10 +544,10 @@ public class OracleStatementParser extends SQLStatementParser { return stmt; } - public OracleLoopStatement parseLoop() { + public SQLLoopStatement parseLoop() { accept(Token.LOOP); - OracleLoopStatement stmt = new OracleLoopStatement(); + SQLLoopStatement stmt = new SQLLoopStatement(); this.parseStatementList(stmt.getStatements()); accept(Token.END); @@ -1034,14 +1034,14 @@ public class OracleStatementParser extends SQLStatementParser { return stmt; } - public OracleBlockStatement parseBlock() { - OracleBlockStatement block = new OracleBlockStatement(); + public SQLBlockStatement parseBlock() { + SQLBlockStatement block = new SQLBlockStatement(); if (lexer.token() == Token.DECLARE) { lexer.nextToken(); parserParameters(block.getParameters()); - for (OracleParameter param : block.getParameters()) { + for (SQLParameter param : block.getParameters()) { param.setParent(block); } } @@ -1055,9 +1055,9 @@ public class OracleStatementParser extends SQLStatementParser { return block; } - private void parserParameters(List parameters) { + private void parserParameters(List parameters) { for (;;) { - OracleParameter parameter = new OracleParameter(); + SQLParameter parameter = new SQLParameter(); if (lexer.token() == Token.CURSOR) { lexer.nextToken(); @@ -1648,8 +1648,8 @@ public class OracleStatementParser extends SQLStatementParser { return stmt; } - public OracleCreateProcedureStatement parseCreateProcedure() { - OracleCreateProcedureStatement stmt = new OracleCreateProcedureStatement(); + public SQLCreateProcedureStatement parseCreateProcedure() { + SQLCreateProcedureStatement stmt = new SQLCreateProcedureStatement(); accept(Token.CREATE); if (lexer.token() == Token.OR) { lexer.nextToken(); @@ -1669,7 +1669,7 @@ public class OracleStatementParser extends SQLStatementParser { accept(Token.AS); - OracleBlockStatement block = this.parseBlock(); + SQLBlockStatement block = this.parseBlock(); stmt.setBlock(block); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index fdb6efc0d3..783f37b74d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -26,7 +26,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.Vers import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleErrorLoggingClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OraclePartitionByRangeClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleRangeValuesClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; @@ -66,12 +65,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDat import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCheck; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; @@ -87,7 +84,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.ConditionalInsertClause; @@ -331,10 +327,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleSelectQueryBlock x); - boolean visit(OracleBlockStatement x); - - void endVisit(OracleBlockStatement x); - boolean visit(OracleLockTableStatement x); void endVisit(OracleLockTableStatement x); @@ -455,10 +447,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleLabelStatement x); - boolean visit(OracleParameter x); - - void endVisit(OracleParameter x); - boolean visit(OracleCommitStatement x); void endVisit(OracleCommitStatement x); @@ -511,10 +499,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OraclePartitionByRangeClause x); - boolean visit(OracleLoopStatement x); - - void endVisit(OracleLoopStatement x); - boolean visit(OracleExitStatement x); void endVisit(OracleExitStatement x); @@ -523,10 +507,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleSavePointStatement x); - boolean visit(OracleCreateProcedureStatement x); - - void endVisit(OracleCreateProcedureStatement x); - boolean visit(OracleCreateDatabaseDbLinkStatement x); void endVisit(OracleCreateDatabaseDbLinkStatement x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java index 663bfedcf3..aac2388ff6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java @@ -34,7 +34,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.QueryPartitio import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleErrorLoggingClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OraclePartitionByRangeClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleRangeValuesClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; @@ -74,12 +73,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDat import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCheck; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; @@ -95,7 +92,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeInsertClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeUpdateClause; @@ -694,16 +690,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleBlockStatement x) { - return true; - } - - @Override - public void endVisit(OracleBlockStatement x) { - - } - @Override public boolean visit(OracleLockTableStatement x) { return true; @@ -1004,16 +990,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleParameter x) { - return true; - } - - @Override - public void endVisit(OracleParameter x) { - - } - @Override public boolean visit(OracleCommitStatement x) { return true; @@ -1144,16 +1120,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleLoopStatement x) { - return true; - } - - @Override - public void endVisit(OracleLoopStatement x) { - - } - @Override public boolean visit(OracleExitStatement x) { return true; @@ -1174,16 +1140,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleCreateProcedureStatement x) { - return true; - } - - @Override - public void endVisit(OracleCreateProcedureStatement x) { - - } - @Override public boolean visit(OracleCreateDatabaseDbLinkStatement x) { return true; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index af0ceda307..4765466b51 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.oracle.visitor; import java.util.List; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLHint; import com.alibaba.druid.sql.ast.SQLObject; @@ -28,6 +29,8 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; @@ -64,7 +67,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReferenceMode import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleErrorLoggingClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OraclePartitionByRangeClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleRangeValuesClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; @@ -108,13 +110,11 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDat import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCheck; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; @@ -130,7 +130,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeInsertClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeUpdateClause; @@ -184,14 +183,14 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } if ((!isPrintPostSemi()) // - && (!(x.getParent() instanceof OracleBlockStatement))) { + && (!(x.getParent() instanceof SQLBlockStatement))) { return; } if (x instanceof OraclePLSQLCommitStatement) { return; } - if (x.getParent() instanceof OracleCreateProcedureStatement) { + if (x.getParent() instanceof SQLCreateProcedureStatement) { return; } @@ -1646,7 +1645,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleBlockStatement x) { + public boolean visit(SQLBlockStatement x) { if (x.getParameters().size() != 0) { print0(ucase ? "DECLARE" : "declare"); incrementIndent(); @@ -1656,7 +1655,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS if (i != 0) { println(); } - OracleParameter param = x.getParameters().get(i); + SQLParameter param = x.getParameters().get(i); param.accept(this); print(';'); } @@ -1682,7 +1681,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public void endVisit(OracleBlockStatement x) { + public void endVisit(SQLBlockStatement x) { } @@ -2270,7 +2269,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } protected void visitColumnDefault(SQLColumnDefinition x) { - if (x.getParent() instanceof OracleBlockStatement) { + if (x.getParent() instanceof SQLBlockStatement) { print0(" := "); } else { print0(ucase ? " DEFAULT " : " default "); @@ -2554,7 +2553,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleParameter x) { + public boolean visit(SQLParameter x) { if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) { print0(ucase ? "CURSOR " : "cursor "); x.getName().accept(this); @@ -2581,7 +2580,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public void endVisit(OracleParameter x) { + public void endVisit(SQLParameter x) { } @@ -2900,32 +2899,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public boolean visit(OracleLoopStatement x) { - print0(ucase ? "LOOP" : "loop"); - incrementIndent(); - println(); - - for (int i = 0, size = x.getStatements().size(); i < size; ++i) { - SQLStatement item = x.getStatements().get(i); - item.setParent(x); - item.accept(this); - if (i != size - 1) { - println(); - } - } - - decrementIndent(); - println(); - print0(ucase ? "END LOOP" : "end loop"); - return false; - } - - @Override - public void endVisit(OracleLoopStatement x) { - - } - @Override public boolean visit(OracleExitStatement x) { print0(ucase ? "EXIT" : "exit"); @@ -2962,7 +2935,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleCreateProcedureStatement x) { + public boolean visit(SQLCreateProcedureStatement x) { if (x.isOrReplace()) { print0(ucase ? "CREATE OR REPLACE PROCEDURE " : "create or replace procedure "); } else { @@ -2982,7 +2955,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS print0(", "); println(); } - OracleParameter param = x.getParameters().get(i); + SQLParameter param = x.getParameters().get(i); param.accept(this); } @@ -2998,7 +2971,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public void endVisit(OracleCreateProcedureStatement x) { + public void endVisit(SQLCreateProcedureStatement x) { } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index e67e5346f8..7c382db225 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -57,7 +57,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.QueryPartitio import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleErrorLoggingClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OraclePartitionByRangeClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleRangeValuesClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; @@ -97,12 +96,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDat import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCheck; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; @@ -118,7 +115,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeInsertClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeUpdateClause; @@ -1049,22 +1045,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleBlockStatement x) { - for (OracleParameter param : x.getParameters()) { - param.setParent(x); - - SQLExpr name = param.getName(); - this.variants.put(name.toString(), name); - } - return true; - } - - @Override - public void endVisit(OracleBlockStatement x) { - - } - @Override public boolean visit(OracleAlterSessionStatement x) { return false; @@ -1404,16 +1384,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleParameter x) { - return true; - } - - @Override - public void endVisit(OracleParameter x) { - - } - @Override public boolean visit(OracleCommitStatement x) { return true; @@ -1544,16 +1514,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleLoopStatement x) { - return true; - } - - @Override - public void endVisit(OracleLoopStatement x) { - - } - @Override public boolean visit(OracleExitStatement x) { return true; @@ -1574,19 +1534,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleCreateProcedureStatement x) { - String name = x.getName().toString(); - this.variants.put(name, x); - accept(x.getBlock()); - return false; - } - - @Override - public void endVisit(OracleCreateProcedureStatement x) { - - } - @Override public boolean visit(OracleCreateDatabaseDbLinkStatement x) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerBlockStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerBlockStatement.java deleted file mode 100644 index 707a77fe5c..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerBlockStatement.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.sqlserver.ast.stmt; - -import java.util.ArrayList; -import java.util.List; - -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerObjectImpl; -import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerStatement; -import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor; - -public class SQLServerBlockStatement extends SQLServerObjectImpl implements SQLServerStatement { - - private List statementList = new ArrayList(); - - private String dbType; - - public List getStatementList() { - return statementList; - } - - public void setStatementList(List statementList) { - this.statementList = statementList; - } - - @Override - public void accept0(SQLServerASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, statementList); - } - visitor.endVisit(this); - } - - public String getDbType() { - return dbType; - } - - public void setDbType(String dbType) { - this.dbType = dbType; - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java index a772efd7a8..b0e7d06158 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerStatementParser.java @@ -24,11 +24,12 @@ import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLConstraint; +import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; -import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLSetStatement; import com.alibaba.druid.sql.ast.statement.SQLTableElement; import com.alibaba.druid.sql.ast.statement.SQLTableSource; @@ -36,17 +37,16 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerDeclareItem; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerOutput; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerBlockStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerCommitStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerDeclareStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement; +import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement.SQLServerParameter; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerInsertStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerRollbackStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerSetStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerSetTransactionIsolationLevelStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerUpdateStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerWaitForStatement; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement.SQLServerParameter; import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLSelectParser; @@ -473,8 +473,8 @@ public class SQLServerStatementParser extends SQLStatementParser { return stmt; } - public SQLServerBlockStatement parseBlock() { - SQLServerBlockStatement block = new SQLServerBlockStatement(); + public SQLBlockStatement parseBlock() { + SQLBlockStatement block = new SQLBlockStatement(); accept(Token.BEGIN); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java index accbf7341e..33313ebc5b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitor.java @@ -22,7 +22,6 @@ import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelect; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.sql.dialect.sqlserver.ast.expr.SQLServerObjectReferenceExpr; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerBlockStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerCommitStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerDeclareStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement; @@ -89,10 +88,6 @@ public interface SQLServerASTVisitor extends SQLASTVisitor { void endVisit(SQLServerDeclareStatement x); - boolean visit(SQLServerBlockStatement x); - - void endVisit(SQLServerBlockStatement x); - boolean visit(SQLServerSelect x); void endVisit(SQLServerSelect x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java index 1fb3ee75b9..1bfb3350cc 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerASTVisitorAdapter.java @@ -22,7 +22,6 @@ import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelect; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.sql.dialect.sqlserver.ast.expr.SQLServerObjectReferenceExpr; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerBlockStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerCommitStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerDeclareStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement; @@ -167,16 +166,6 @@ public class SQLServerASTVisitorAdapter extends SQLASTVisitorAdapter implements } - @Override - public boolean visit(SQLServerBlockStatement x) { - return true; - } - - @Override - public void endVisit(SQLServerBlockStatement x) { - - } - @Override public boolean visit(SQLServerSelect x) { return true; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java index f2ea0e0995..e27f57b7d2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java @@ -19,6 +19,7 @@ import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -31,7 +32,6 @@ import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelect; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.sql.dialect.sqlserver.ast.expr.SQLServerObjectReferenceExpr; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerBlockStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerCommitStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerDeclareStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement; @@ -484,7 +484,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe } @Override - public boolean visit(SQLServerBlockStatement x) { + public boolean visit(SQLBlockStatement x) { print0(ucase ? "BEGIN" : "begin"); incrementIndent(); println(); @@ -503,11 +503,6 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe return false; } - @Override - public void endVisit(SQLServerBlockStatement x) { - - } - @Override protected void printGrantOn(SQLGrantStatement x) { if (x.getOn() != null) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java index 904cec0ea7..7b3444425f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerSchemaStatVisitor.java @@ -29,7 +29,6 @@ import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelect; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelectQueryBlock; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; import com.alibaba.druid.sql.dialect.sqlserver.ast.expr.SQLServerObjectReferenceExpr; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerBlockStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerCommitStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerDeclareStatement; import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement; @@ -203,16 +202,6 @@ public class SQLServerSchemaStatVisitor extends SchemaStatVisitor implements SQL } - @Override - public boolean visit(SQLServerBlockStatement x) { - return true; - } - - @Override - public void endVisit(SQLServerBlockStatement x) { - - } - @Override public boolean visit(SQLServerSelect x) { return super.visit(x); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index cd673e12a3..5986786f43 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -136,6 +136,7 @@ import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType; import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; @@ -2527,6 +2528,27 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab decrementIndent(); return false; } + + @Override + public boolean visit(SQLLoopStatement x) { + print0(ucase ? "LOOP" : "loop"); + incrementIndent(); + println(); + + for (int i = 0, size = x.getStatements().size(); i < size; ++i) { + SQLStatement item = x.getStatements().get(i); + item.setParent(x); + item.accept(this); + if (i != size - 1) { + println(); + } + } + + decrementIndent(); + println(); + print0(ucase ? "END LOOP" : "end loop"); + return false; + } public boolean isUppCase() { return ucase; diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index 99414e794b..87b8402967 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.SQLOver; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr; import com.alibaba.druid.sql.ast.expr.SQLAllExpr; @@ -80,6 +81,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableTouch; import com.alibaba.druid.sql.ast.statement.SQLAlterViewRenameStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; @@ -92,6 +94,7 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnUniqueKey; import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; @@ -115,6 +118,7 @@ import com.alibaba.druid.sql.ast.statement.SQLGrantStatement; import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl; import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; @@ -656,4 +660,20 @@ public interface SQLASTVisitor { boolean visit(SQLIfStatement.Else x); void endVisit(SQLIfStatement.Else x); + + boolean visit(SQLLoopStatement x); + + void endVisit(SQLLoopStatement x); + + boolean visit(SQLParameter x); + + void endVisit(SQLParameter x); + + boolean visit(SQLCreateProcedureStatement x); + + void endVisit(SQLCreateProcedureStatement x); + + boolean visit(SQLBlockStatement x); + + void endVisit(SQLBlockStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index 9fcbf14fd2..e337bd8f48 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -21,6 +21,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.SQLOver; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr; import com.alibaba.druid.sql.ast.expr.SQLAllExpr; @@ -81,6 +82,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableTouch; import com.alibaba.druid.sql.ast.statement.SQLAlterViewRenameStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; @@ -93,6 +95,7 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnUniqueKey; import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; @@ -117,6 +120,7 @@ import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl; import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; @@ -1310,5 +1314,45 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLIfStatement.ElseIf x) { } + + @Override + public boolean visit(SQLLoopStatement x) { + return true; + } + + @Override + public void endVisit(SQLLoopStatement x) { + + } + + @Override + public boolean visit(SQLParameter x) { + return true; + } + + @Override + public void endVisit(SQLParameter x) { + + } + + @Override + public boolean visit(SQLCreateProcedureStatement x) { + return true; + } + + @Override + public void endVisit(SQLCreateProcedureStatement x) { + + } + + @Override + public boolean visit(SQLBlockStatement x) { + return true; + } + + @Override + public void endVisit(SQLBlockStatement x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index dc174689a7..444a0f420b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -28,6 +28,7 @@ import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.SQLOrderingSpecification; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr; import com.alibaba.druid.sql.ast.expr.SQLArrayExpr; @@ -48,12 +49,14 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLCheck; import com.alibaba.druid.sql.ast.statement.SQLCloseStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; @@ -1418,4 +1421,22 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } + @Override + public boolean visit(SQLCreateProcedureStatement x) { + String name = x.getName().toString(); + this.variants.put(name, x); + accept(x.getBlock()); + return false; + } + + @Override + public boolean visit(SQLBlockStatement x) { + for (SQLParameter param : x.getParameters()) { + param.setParent(x); + + SQLExpr name = param.getName(); + this.variants.put(name.toString(), name); + } + return true; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java index 04ec24025a..9ac15b7792 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java @@ -1,10 +1,14 @@ package com.alibaba.druid.bvt.sql.oracle.visitor; +import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.expr.SQLGroupingSetExpr; import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; +import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename; +import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp; @@ -22,7 +26,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ModelRulesCla import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.QueryPartitionClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleErrorLoggingClause; -import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OraclePartitionByRangeClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleRangeValuesClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; @@ -60,11 +63,9 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDat import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateDatabaseDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; @@ -79,7 +80,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLabelStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeInsertClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement.MergeUpdateClause; @@ -135,7 +135,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new OracleCreateSequenceStatement().accept(adapter); new OracleRangeValuesClause().accept(adapter); new OraclePartitionByRangeClause().accept(adapter); - new OracleLoopStatement().accept(adapter); + new SQLLoopStatement().accept(adapter); new OracleIntervalExpr().accept(adapter); new OracleDeleteStatement().accept(adapter); new OracleUpdateStatement().accept(adapter); @@ -167,7 +167,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new ConditionalInsertClause().accept(adapter); new ConditionalInsertClauseItem().accept(adapter); new OracleSelectQueryBlock().accept(adapter); - new OracleBlockStatement().accept(adapter); + new SQLBlockStatement().accept(adapter); new OracleLockTableStatement().accept(adapter); new OracleAlterSessionStatement().accept(adapter); new OracleExprStatement().accept(adapter); @@ -182,7 +182,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new OracleDataTypeTimestamp().accept(adapter); new OracleDropDbLinkStatement().accept(adapter); new OracleCreateDatabaseDbLinkStatement().accept(adapter); - new OracleCreateProcedureStatement().accept(adapter); + new SQLCreateProcedureStatement().accept(adapter); new OracleSavePointStatement().accept(adapter); new SQLFetchStatement().accept(adapter); new OracleExitStatement().accept(adapter); @@ -208,7 +208,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new OracleStorageClause().accept(adapter); new OracleGotoStatement().accept(adapter); new OracleLabelStatement().accept(adapter); - new OracleParameter().accept(adapter); + new SQLParameter().accept(adapter); new OracleCommitStatement().accept(adapter); new OracleAlterTriggerStatement().accept(adapter); new OracleAlterSynonymStatement().accept(adapter);