diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerIfStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLIfStatement.java similarity index 54% rename from src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerIfStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLIfStatement.java index a5f1064916..0b586b6b4d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/ast/stmt/SQLServerIfStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLIfStatement.java @@ -13,29 +13,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.sqlserver.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObjectImpl; 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; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class SQLServerIfStatement extends SQLServerObjectImpl implements SQLServerStatement { +public class SQLIfStatement extends SQLStatementImpl { private SQLExpr condition; private List statements = new ArrayList(); + private List elseIfList = new ArrayList(); private Else elseItem; - private String dbType; @Override - public void accept0(SQLServerASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, condition); acceptChild(visitor, statements); + acceptChild(visitor, elseIfList); acceptChild(visitor, elseItem); } visitor.endVisit(this); @@ -56,6 +57,15 @@ public class SQLServerIfStatement extends SQLServerObjectImpl implements SQLServ public void setStatements(List statements) { this.statements = statements; } + + public List getElseIfList() { + return elseIfList; + } + + + public void setElseIfList(List elseIfList) { + this.elseIfList = elseIfList; + } public Else getElseItem() { return elseItem; @@ -65,12 +75,46 @@ public class SQLServerIfStatement extends SQLServerObjectImpl implements SQLServ this.elseItem = elseItem; } - public static class Else extends SQLServerObjectImpl { + public static class ElseIf extends SQLObjectImpl { + + private SQLExpr condition; + private List statements = new ArrayList(); + + @Override + public void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, condition); + acceptChild(visitor, statements); + } + visitor.endVisit(this); + } + + public List getStatements() { + return statements; + } + + public void setStatements(List statements) { + this.statements = statements; + } + + public SQLExpr getCondition() { + return condition; + } + + public void setCondition(SQLExpr condition) { + if (condition != null) { + condition.setParent(this); + } + this.condition = condition; + } + } + + public static class Else extends SQLObjectImpl { private List statements = new ArrayList(); @Override - public void accept0(SQLServerASTVisitor visitor) { + public void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, statements); } @@ -86,12 +130,4 @@ public class SQLServerIfStatement extends SQLServerObjectImpl implements SQLServ } } - - public String getDbType() { - return dbType; - } - - public void setDbType(String dbType) { - this.dbType = dbType; - } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCaseStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCaseStatement.java index 37ab19f73f..1e8325701e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCaseStatement.java @@ -20,6 +20,7 @@ import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; @@ -36,7 +37,7 @@ public class MySqlCaseStatement extends MySqlStatementImpl{ //when statement list private List whenList=new ArrayList(); //else statement - private MySqlElseStatement elseItem; + private SQLIfStatement.Else elseItem; public SQLExpr getCondition() { return condition; @@ -59,11 +60,11 @@ public class MySqlCaseStatement extends MySqlStatementImpl{ this.whenList.add(stmt); } - public MySqlElseStatement getElseItem() { + public SQLIfStatement.Else getElseItem() { return elseItem; } - public void setElseItem(MySqlElseStatement elseItem) { + public void setElseItem(SQLIfStatement.Else elseItem) { this.elseItem = elseItem; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlElseStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlElseStatement.java deleted file mode 100644 index bd12372ac1..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlElseStatement.java +++ /dev/null @@ -1,52 +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.MySqlObjectImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; - -/** - * - * @Description: MySql procedure else statement - * @author zz email:455910092@qq.com - * @date 2015-9-14 - * @version V1.0 - */ -public class MySqlElseStatement extends MySqlObjectImpl { - - 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; - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlIfStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlIfStatement.java deleted file mode 100644 index 5c1050e133..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlIfStatement.java +++ /dev/null @@ -1,114 +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.SQLExpr; -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; - -/** - * - * @Description: MySql procedure if statement - * @author zz email:455910092@qq.com - * @date 2015-9-14 - * @version V1.0 - */ -public class MySqlIfStatement extends MySqlStatementImpl{ - private SQLExpr condition; - private List statements = new ArrayList(); - private List elseIfList = new ArrayList(); - private MySqlElseStatement elseItem; - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, condition); - acceptChild(visitor, statements); - acceptChild(visitor, elseIfList); - acceptChild(visitor, elseItem); - } - visitor.endVisit(this); - } - public SQLExpr getCondition() { - return condition; - } - public void setCondition(SQLExpr condition) { - this.condition = condition; - } - public List getStatements() { - return statements; - } - public void setStatements(List statements) { - this.statements = statements; - } - public List getElseIfList() { - return elseIfList; - } - public void setElseIfList(List elseIfList) { - this.elseIfList = elseIfList; - } - public MySqlElseStatement getElseItem() { - return elseItem; - } - public void setElseItem(MySqlElseStatement elseItem) { - this.elseItem = elseItem; - } - /** - * - * @Description: MySql procedure else if statement - * @author zz email:455910092@qq.com - * @date 2015-9-14 - * @version V1.0 - */ - public static class MySqlElseIfStatement extends MySqlObjectImpl { - - private SQLExpr condition; - private List statements = new ArrayList(); - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, condition); - acceptChild(visitor, statements); - } - visitor.endVisit(this); - } - - public SQLExpr getCondition() { - return condition; - } - - public void setCondition(SQLExpr condition) { - this.condition = condition; - } - - public List getStatements() { - return statements; - } - - public void setStatements(List statements) { - this.statements = statements; - } - - } - - -} 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 2790e2dcb5..c38755436c 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 @@ -40,8 +40,6 @@ public enum MySqlStatementType { DELETE(MySqlDeleteStatement.class.getName()), //while statement WHILE(MySqlWhileStatement.class.getName()), - //if statement - IF(MySqlIfStatement.class.getName()), //begin-end BLOCK(MySqlBlockStatement.class.getName()), //declare statement 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 586a058d11..ff00f6c5ff 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 @@ -49,6 +49,7 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; 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.SQLPrimaryKey; @@ -65,9 +66,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWh 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.MySqlElseStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement.MySqlElseIfStatement; 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; @@ -3090,10 +3088,10 @@ public class MySqlStatementParser extends SQLStatementParser { * parse if statement * @return MySqlIfStatement */ - public MySqlIfStatement parseIf() { + public SQLIfStatement parseIf() { accept(Token.IF); - MySqlIfStatement stmt = new MySqlIfStatement(); + SQLIfStatement stmt = new SQLIfStatement(); stmt.setCondition(this.exprParser.expr()); @@ -3107,7 +3105,7 @@ public class MySqlStatementParser extends SQLStatementParser { if (lexer.token() == Token.IF) { lexer.nextToken(); - MySqlElseIfStatement elseIf = new MySqlElseIfStatement(); + SQLIfStatement.ElseIf elseIf = new SQLIfStatement.ElseIf(); elseIf.setCondition(this.exprParser.expr()); @@ -3116,7 +3114,7 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.getElseIfList().add(elseIf); } else { - MySqlElseStatement elseItem = new MySqlElseStatement(); + SQLIfStatement.Else elseItem = new SQLIfStatement.Else(); this.parseProcedureStatementList(elseItem.getStatements()); stmt.setElseItem(elseItem); break; @@ -3210,7 +3208,7 @@ public class MySqlStatementParser extends SQLStatementParser { if(lexer.token()==Token.ELSE) { //parse else block - MySqlElseStatement elseStmt=new MySqlElseStatement(); + SQLIfStatement.Else elseStmt=new SQLIfStatement.Else(); parseProcedureStatementList(elseStmt.getStatements()); stmt.setElseItem(elseStmt); } @@ -3237,7 +3235,7 @@ public class MySqlStatementParser extends SQLStatementParser { { accept(Token.ELSE); //else block - MySqlElseStatement elseStmt=new MySqlElseStatement(); + SQLIfStatement.Else elseStmt=new SQLIfStatement.Else(); parseProcedureStatementList(elseStmt.getStatements()); stmt.setElseItem(elseStmt); } 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 06d47742a1..d2f6d80b53 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 @@ -27,9 +27,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWh 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.MySqlElseStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement.MySqlElseIfStatement; 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; @@ -600,18 +597,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlWhileStatement x); - boolean visit(MySqlIfStatement x); - - void endVisit(MySqlIfStatement x); - - boolean visit(MySqlElseIfStatement x); - - void endVisit(MySqlElseIfStatement x); - - boolean visit(MySqlElseStatement x); - - void endVisit(MySqlElseStatement x); - boolean visit(MySqlCaseStatement x); void endVisit(MySqlCaseStatement 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 428d9ced5a..754a357738 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 @@ -27,9 +27,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWh 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.MySqlElseStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement.MySqlElseIfStatement; 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; @@ -1278,182 +1275,122 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq */ @Override public boolean visit(MySqlCreateProcedureStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlCreateProcedureStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlParameter x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlParameter x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlWhileStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlWhileStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlIfStatement x) { - // TODO Auto-generated method stub - return true; - } - - @Override - public void endVisit(MySqlIfStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlElseIfStatement x) { - // TODO Auto-generated method stub - return true; - } - - @Override - public void endVisit(MySqlElseIfStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlElseStatement x) { - // TODO Auto-generated method stub - return true; - } - - @Override - public void endVisit(MySqlElseStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlCaseStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlCaseStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlDeclareStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlDeclareStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlSelectIntoStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlSelectIntoStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlWhenStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlWhenStatement x) { - // TODO Auto-generated method stub } //add:end @Override public boolean visit(MySqlLoopStatement x) { - // TODO Auto-generated method stub return true; } @Override public void endVisit(MySqlLoopStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlLeaveStatement x) { - // TODO Auto-generated method stub return false; } @Override public void endVisit(MySqlLeaveStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlIterateStatement x) { - // TODO Auto-generated method stub return false; } @Override public void endVisit(MySqlIterateStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlRepeatStatement x) { - // TODO Auto-generated method stub return false; } @Override public void endVisit(MySqlRepeatStatement x) { - // TODO Auto-generated method stub } @Override public boolean visit(MySqlCursorDeclareStatement x) { - // TODO Auto-generated method stub return false; } @Override public void endVisit(MySqlCursorDeclareStatement x) { - // TODO Auto-generated method stub } 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 27d42f4163..d8a89510cc 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 @@ -38,6 +38,7 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; 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.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; @@ -52,9 +53,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWh 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.MySqlElseStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement.MySqlElseIfStatement; 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; @@ -3336,7 +3334,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public boolean visit(MySqlIfStatement x) { + public boolean visit(SQLIfStatement x) { print0(ucase ? "IF " : "if "); x.getCondition().accept(this); print0(ucase ? " THEN" : " then"); @@ -3350,7 +3348,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } } println(); - for (MySqlElseIfStatement iterable_element : x.getElseIfList()) { + for (SQLIfStatement.ElseIf iterable_element : x.getElseIfList()) { iterable_element.accept(this); } @@ -3362,12 +3360,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public void endVisit(MySqlIfStatement x) { - - } - - @Override - public boolean visit(MySqlElseIfStatement x) { + public boolean visit(SQLIfStatement.ElseIf x) { print0(ucase ? "ELSE IF " : "else if "); x.getCondition().accept(this); print0(ucase ? " THEN" : " then"); @@ -3385,12 +3378,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public void endVisit(MySqlElseIfStatement x) { - - } - - @Override - public boolean visit(MySqlElseStatement x) { + public boolean visit(SQLIfStatement.Else x) { print0(ucase ? "ELSE " : "else "); println(); for (int i = 0, size = x.getStatements().size(); i < size; ++i) { @@ -3405,11 +3393,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(MySqlElseStatement x) { - - } - @Override public boolean visit(MySqlCaseStatement x) { print0(ucase ? "CASE " : "case "); 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 c7132f8771..3071eaa249 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 @@ -17,9 +17,11 @@ package com.alibaba.druid.sql.dialect.mysql.visitor; import java.util.Map; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; @@ -42,9 +44,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWh 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.MySqlElseStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement.MySqlElseIfStatement; 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; @@ -1419,41 +1418,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } - @Override - public boolean visit(MySqlIfStatement x) { - accept(x.getStatements()); - accept(x.getElseIfList()); - accept(x.getElseItem()); - return false; - } - - @Override - public void endVisit(MySqlIfStatement x) { - - } - - @Override - public boolean visit(MySqlElseIfStatement x) { - accept(x.getStatements()); - return false; - } - - @Override - public void endVisit(MySqlElseIfStatement x) { - - } - - @Override - public boolean visit(MySqlElseStatement x) { - accept(x.getStatements()); - return false; - } - - @Override - public void endVisit(MySqlElseStatement x) { - - } - @Override public boolean visit(MySqlCaseStatement x) { accept(x.getWhenList()); @@ -1467,6 +1431,13 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS @Override public boolean visit(MySqlDeclareStatement x) { + for (SQLExpr item : x.getVarList()) { + item.setParent(x); + + SQLVariantRefExpr var = (SQLVariantRefExpr)item; + this.variants.put(var.getName(), var); + } + return false; } 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 42e2281879..a772efd7a8 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 @@ -28,6 +28,7 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLConstraint; 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; @@ -39,7 +40,6 @@ 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.SQLServerIfStatement; 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; @@ -449,10 +449,10 @@ public class SQLServerStatementParser extends SQLStatementParser { } } - public SQLServerIfStatement parseIf() { + public SQLIfStatement parseIf() { accept(Token.IF); - SQLServerIfStatement stmt = new SQLServerIfStatement(); + SQLIfStatement stmt = new SQLIfStatement(); stmt.setCondition(this.exprParser.expr()); @@ -465,7 +465,7 @@ public class SQLServerStatementParser extends SQLStatementParser { if (lexer.token() == Token.ELSE) { lexer.nextToken(); - SQLServerIfStatement.Else elseItem = new SQLServerIfStatement.Else(); + SQLIfStatement.Else elseItem = new SQLIfStatement.Else(); this.parseStatementList(elseItem.getStatements(), 1); stmt.setElseItem(elseItem); } 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 829d1ca73e..accbf7341e 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 @@ -27,8 +27,6 @@ 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.SQLServerIfStatement; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerIfStatement.Else; 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; @@ -91,14 +89,6 @@ public interface SQLServerASTVisitor extends SQLASTVisitor { void endVisit(SQLServerDeclareStatement x); - boolean visit(Else x); - - void endVisit(Else x); - - boolean visit(SQLServerIfStatement x); - - void endVisit(SQLServerIfStatement x); - boolean visit(SQLServerBlockStatement x); void endVisit(SQLServerBlockStatement 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 cabb471ae3..1fb3ee75b9 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 @@ -27,8 +27,6 @@ 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.SQLServerIfStatement; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerIfStatement.Else; 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; @@ -169,26 +167,6 @@ public class SQLServerASTVisitorAdapter extends SQLASTVisitorAdapter implements } - @Override - public boolean visit(Else x) { - return true; - } - - @Override - public void endVisit(Else x) { - - } - - @Override - public boolean visit(SQLServerIfStatement x) { - return true; - } - - @Override - public void endVisit(SQLServerIfStatement x) { - - } - @Override public boolean visit(SQLServerBlockStatement 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 0d39066cd6..f2ea0e0995 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 @@ -36,8 +36,6 @@ 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.SQLServerIfStatement; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerIfStatement.Else; 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; @@ -485,58 +483,6 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe } - @Override - public boolean visit(Else x) { - print0(ucase ? "ELSE" : "else"); - incrementIndent(); - println(); - - for (int i = 0, size = x.getStatements().size(); i < size; ++i) { - if (i != 0) { - println(); - } - SQLStatement item = x.getStatements().get(i); - item.setParent(x); - item.accept(this); - } - - decrementIndent(); - return false; - } - - @Override - public void endVisit(Else x) { - - } - - @Override - public boolean visit(SQLServerIfStatement x) { - print0(ucase ? "IF " : "if "); - x.getCondition().accept(this); - 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(); - - if (x.getElseItem() != null) { - println(); - x.getElseItem().accept(this); - } - return false; - } - - @Override - public void endVisit(SQLServerIfStatement x) { - - } - @Override public boolean visit(SQLServerBlockStatement x) { print0(ucase ? "BEGIN" : "begin"); 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 c01db613b0..904cec0ea7 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 @@ -34,8 +34,6 @@ 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.SQLServerIfStatement; -import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerIfStatement.Else; 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; @@ -205,26 +203,6 @@ public class SQLServerSchemaStatVisitor extends SchemaStatVisitor implements SQL } - @Override - public boolean visit(Else x) { - return true; - } - - @Override - public void endVisit(Else x) { - - } - - @Override - public boolean visit(SQLServerIfStatement x) { - return true; - } - - @Override - public void endVisit(SQLServerIfStatement x) { - - } - @Override public boolean visit(SQLServerBlockStatement x) { return true; 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 e5e607d861..c493c7c602 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -132,11 +132,12 @@ import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyConstraint; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl; 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.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; -import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; 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; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl; import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; @@ -2459,6 +2460,69 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return false; } + @Override + public boolean visit(SQLIfStatement x) { + print0(ucase ? "IF " : "if "); + x.getCondition().accept(this); + 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(); + + if (x.getElseItem() != null) { + println(); + x.getElseItem().accept(this); + } + return false; + } + + @Override + public boolean visit(SQLIfStatement.Else x) { + print0(ucase ? "ELSE" : "else"); + incrementIndent(); + println(); + + for (int i = 0, size = x.getStatements().size(); i < size; ++i) { + if (i != 0) { + println(); + } + SQLStatement item = x.getStatements().get(i); + item.setParent(x); + item.accept(this); + } + + decrementIndent(); + return false; + } + + @Override + public boolean visit(SQLIfStatement.ElseIf x) { + print0(ucase ? "ELSE IF" : "else if"); + x.getCondition().accept(this); + print0(ucase ? " THEN" : " then"); + incrementIndent(); + println(); + + for (int i = 0, size = x.getStatements().size(); i < size; ++i) { + if (i != 0) { + println(); + } + SQLStatement item = x.getStatements().get(i); + item.setParent(x); + item.accept(this); + } + + decrementIndent(); + 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 dd019e9017..99414e794b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -112,6 +112,7 @@ import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl; 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.SQLOpenStatement; @@ -643,4 +644,16 @@ public interface SQLASTVisitor { boolean visit(SQLGroupingSetExpr x); void endVisit(SQLGroupingSetExpr x); + + boolean visit(SQLIfStatement x); + + void endVisit(SQLIfStatement x); + + boolean visit(SQLIfStatement.ElseIf x); + + void endVisit(SQLIfStatement.ElseIf x); + + boolean visit(SQLIfStatement.Else x); + + void endVisit(SQLIfStatement.Else 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 5712167c4d..9fcbf14fd2 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -113,6 +113,7 @@ import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl; 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.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; @@ -1279,5 +1280,35 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLGroupingSetExpr x) { } + + @Override + public boolean visit(SQLIfStatement x) { + return true; + } + + @Override + public void endVisit(SQLIfStatement x) { + + } + + @Override + public boolean visit(SQLIfStatement.Else x) { + return true; + } + + @Override + public void endVisit(SQLIfStatement.Else x) { + + } + + @Override + public boolean visit(SQLIfStatement.ElseIf x) { + return true; + } + + @Override + public void endVisit(SQLIfStatement.ElseIf x) { + + } }