diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorCloseStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCloseStatement.java similarity index 74% rename from src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorCloseStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLCloseStatement.java index 3a1b8d2cde..4243d17b9c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorCloseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCloseStatement.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.mysql.ast.clause; +package com.alibaba.druid.sql.ast.statement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; /** * * @Description: MySql cursor close statement @@ -24,7 +24,7 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; * @date 2015-9-14 * @version V1.0 */ -public class MySqlCursorCloseStatement extends MySqlStatementImpl{ +public class SQLCloseStatement extends SQLStatementImpl{ //cursor name private String cursorName; @@ -38,8 +38,7 @@ public class MySqlCursorCloseStatement extends MySqlStatementImpl{ } @Override - public void accept0(MySqlASTVisitor visitor) { - // TODO Auto-generated method stub + protected void accept0(SQLASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleFetchStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLFetchStatement.java similarity index 81% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleFetchStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLFetchStatement.java index c50b753f23..bd3de54377 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleFetchStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLFetchStatement.java @@ -13,23 +13,24 @@ * 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.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; -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 OracleFetchStatement extends OracleStatementImpl { +public class SQLFetchStatement extends SQLStatementImpl { private SQLName cursorName; private List into = new ArrayList(); @Override - public void accept0(OracleASTVisitor visitor) { + protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, cursorName); acceptChild(visitor, into); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorOpenStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLOpenStatement.java similarity index 76% rename from src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorOpenStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLOpenStatement.java index 9a82dd7f9e..d25a1205e7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorOpenStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLOpenStatement.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.mysql.ast.clause; +package com.alibaba.druid.sql.ast.statement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; /** * * @Description: MySql cursor open statement @@ -24,7 +24,7 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; * @date 2015-9-14 * @version V1.0 */ -public class MySqlCursorOpenStatement extends MySqlStatementImpl{ +public class SQLOpenStatement extends SQLStatementImpl{ //cursor name private String cursorName; @@ -38,7 +38,7 @@ public class MySqlCursorOpenStatement extends MySqlStatementImpl{ } @Override - public void accept0(MySqlASTVisitor visitor) { + protected void accept0(SQLASTVisitor visitor) { // TODO Auto-generated method stub visitor.visit(this); visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorFetchIntoStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorFetchIntoStatement.java deleted file mode 100644 index 509b350a6e..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/clause/MySqlCursorFetchIntoStatement.java +++ /dev/null @@ -1,63 +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.dialect.mysql.ast.statement.MySqlStatementImpl; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -import com.alibaba.druid.sql.ast.SQLExpr; -/** - * - * @Description: MySql procedure cursor fetch into statement - * @author zz email:455910092@qq.com - * @date 2015-9-14 - * @version V1.0 - */ -public class MySqlCursorFetchIntoStatement extends MySqlStatementImpl{ - - //cursor name - private String cursorName; - //var list - private List varList=new ArrayList(); - - public String getCursorName() { - return cursorName; - } - - public void setCursorName(String cursorName) { - this.cursorName = cursorName; - } - - public List getVarList() { - return varList; - } - - public void setVarList(List varList) { - this.varList = varList; - } - - @Override - public void accept0(MySqlASTVisitor visitor) { - // TODO Auto-generated method stub - if (visitor.visit(this)) { - acceptChild(visitor, varList); - } - visitor.endVisit(this); - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlCharExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlCharExpr.java index 809afc1194..5287c2fb05 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlCharExpr.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlCharExpr.java @@ -15,7 +15,6 @@ */ package com.alibaba.druid.sql.dialect.mysql.ast.expr; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; 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 964c19c09e..05d54819e6 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 @@ -64,17 +64,14 @@ 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.MySqlCursorCloseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorFetchIntoStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorOpenStatement; 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; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIfStatement.MySqlElseIfStatement; 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; @@ -1185,7 +1182,7 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } - if (identifierEquals("OPEN")) { + if (lexer.token() == Token.OPEN || identifierEquals("OPEN")) { lexer.nextToken(); acceptIdentifier(TABLES); MySqlShowOpenTablesStatement stmt = new MySqlShowOpenTablesStatement(); @@ -2998,19 +2995,19 @@ public class MySqlStatementParser extends SQLStatementParser { // open cursor if (lexer.token() == Token.OPEN) { - statementList.add(this.parseCursorOpen()); + statementList.add(this.parseOpen()); continue; } // close cursor if (lexer.token() == Token.CLOSE) { - statementList.add(this.parseCursorClose()); + statementList.add(this.parseClose()); continue; } // fetch cursor into if (lexer.token() == Token.FETCH) { - statementList.add(this.parseCursorFetchInto()); + statementList.add(this.parseFetch()); continue; } @@ -3400,71 +3397,4 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } - /** - * parse cursor open statement - * @return - */ - public MySqlCursorOpenStatement parseCursorOpen() - { - MySqlCursorOpenStatement stmt=new MySqlCursorOpenStatement(); - accept(Token.OPEN); - stmt.setCursorName(exprParser.name().getSimpleName()); - accept(Token.SEMI); - return stmt; - } - - /** - * parse cursor close statement - * @return - */ - public MySqlCursorCloseStatement parseCursorClose() - { - MySqlCursorCloseStatement stmt=new MySqlCursorCloseStatement(); - accept(Token.CLOSE); - stmt.setCursorName(exprParser.name().getSimpleName()); - accept(Token.SEMI); - return stmt; - } - - /** - * parse cursor fetch into statement - * @return - */ - public MySqlCursorFetchIntoStatement parseCursorFetchInto() - { - MySqlCursorFetchIntoStatement stmt=new MySqlCursorFetchIntoStatement(); - accept(Token.FETCH); - stmt.setCursorName(exprParser.name().getSimpleName()); - stmt.setVarList(parseIntoArgs()); - return stmt; - } - - /** - * parse fetch into var list - * @return - */ - protected List parseIntoArgs() { - List args=new ArrayList(); - if (lexer.token() == (Token.INTO)) { - accept(Token.INTO); - //lexer.nextToken(); - for (;;) { - SQLExpr var = exprParser.primary(); - if (var instanceof SQLIdentifierExpr) { - var = new SQLVariantRefExpr( - ((SQLIdentifierExpr) var).getName()); - } - args.add(var); - if (lexer.token() == Token.COMMA) { - accept(Token.COMMA); - continue; - } - else - { - break; - } - } - } - return args; - } } 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 76f5e799e4..74e7918cdb 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 @@ -25,10 +25,7 @@ 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.MySqlCursorCloseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorFetchIntoStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorOpenStatement; 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; @@ -653,16 +650,5 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlCursorDeclareStatement x); void endVisit(MySqlCursorDeclareStatement x); - - boolean visit(MySqlCursorOpenStatement x); - void endVisit(MySqlCursorOpenStatement x); - - boolean visit(MySqlCursorCloseStatement x); - - void endVisit(MySqlCursorCloseStatement x); - - boolean visit(MySqlCursorFetchIntoStatement x); - - void endVisit(MySqlCursorFetchIntoStatement 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 1a72135090..6fd4e3964d 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 @@ -25,10 +25,7 @@ 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.MySqlCursorCloseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorFetchIntoStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorOpenStatement; 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; @@ -1470,40 +1467,4 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } - @Override - public boolean visit(MySqlCursorOpenStatement x) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void endVisit(MySqlCursorOpenStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlCursorCloseStatement x) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void endVisit(MySqlCursorCloseStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlCursorFetchIntoStatement x) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void endVisit(MySqlCursorFetchIntoStatement 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 de6b30519d..5ef99443f0 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 @@ -15,6 +15,9 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; +import java.util.List; +import java.util.Map; + import com.alibaba.druid.sql.ast.SQLCommentHint; import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLExpr; @@ -47,10 +50,7 @@ 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.MySqlCursorCloseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorFetchIntoStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorOpenStatement; 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; @@ -169,9 +169,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnlockTablesStatem import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; -import java.util.List; -import java.util.Map; - public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTVisitor { public MySqlOutputVisitor(Appendable appender){ @@ -3574,49 +3571,4 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } - @Override - public boolean visit(MySqlCursorOpenStatement x) { - print("OPEN "); - print(x.getCursorName()); - return false; - } - - @Override - public void endVisit(MySqlCursorOpenStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlCursorCloseStatement x) { - print("CLOSE "); - print(x.getCursorName()); - return false; - } - - @Override - public void endVisit(MySqlCursorCloseStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlCursorFetchIntoStatement x) { - print("FETCH "); - print(x.getCursorName()); - print(" INTO "); - for (int i = 0; i < x.getVarList().size(); i++) { - x.getVarList().get(i).accept(this); - if(i!=x.getVarList().size()-1) - print(","); - } - return false; - } - - @Override - public void endVisit(MySqlCursorFetchIntoStatement x) { - // TODO Auto-generated method stub - - } - } // 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 056df1415e..5c261e8f21 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 @@ -40,10 +40,7 @@ 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.MySqlCursorCloseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorFetchIntoStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorOpenStatement; 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; @@ -1574,40 +1571,4 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } - @Override - public boolean visit(MySqlCursorOpenStatement x) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void endVisit(MySqlCursorOpenStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlCursorCloseStatement x) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void endVisit(MySqlCursorCloseStatement x) { - // TODO Auto-generated method stub - - } - - @Override - public boolean visit(MySqlCursorFetchIntoStatement x) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void endVisit(MySqlCursorFetchIntoStatement x) { - // TODO Auto-generated method stub - - } - } 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 03c453bf22..d2a9e32c5e 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 @@ -82,7 +82,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; @@ -266,20 +265,8 @@ public class OracleStatementParser extends SQLStatementParser { continue; } - if (identifierEquals("FETCH")) { - lexer.nextToken(); - OracleFetchStatement stmt = new OracleFetchStatement(); - stmt.setCursorName(this.exprParser.name()); - accept(Token.INTO); - for (;;) { - stmt.getInto().add(this.exprParser.name()); - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - continue; - } - - break; - } + if (lexer.token() == Token.FETCH || identifierEquals("FETCH")) { + SQLStatement stmt = parseFetch(); statementList.add(stmt); continue; } @@ -491,6 +478,12 @@ public class OracleStatementParser extends SQLStatementParser { statementList.add(stmt); continue; } + + if (lexer.token() == Token.OPEN) { + SQLStatement stmt = this.parseOpen(); + statementList.add(stmt); + continue; + } throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); } 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 6a75728a79..7cf2f3b65e 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 @@ -81,7 +81,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForeignKey; @@ -540,10 +539,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleExitStatement x); - boolean visit(OracleFetchStatement x); - - void endVisit(OracleFetchStatement x); - boolean visit(OracleSavePointStatement x); void endVisit(OracleSavePointStatement 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 481c9910eb..e5023784ac 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 @@ -89,7 +89,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForeignKey; @@ -1210,16 +1209,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleFetchStatement x) { - return true; - } - - @Override - public void endVisit(OracleFetchStatement x) { - - } - @Override public boolean visit(OracleSavePointStatement 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 ea0f1afb98..4d4f8041b7 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 @@ -123,7 +123,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForeignKey; @@ -2974,20 +2973,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public boolean visit(OracleFetchStatement x) { - print("FETCH "); - x.getCursorName().accept(this); - print(" INTO "); - printAndAccept(x.getInto(), ", "); - return false; - } - - @Override - public void endVisit(OracleFetchStatement x) { - - } - @Override public void endVisit(SQLRollbackStatement 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 d91d5a8d5c..2dc2e5e84d 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 @@ -112,7 +112,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForeignKey; @@ -1610,16 +1609,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleFetchStatement x) { - return true; - } - - @Override - public void endVisit(OracleFetchStatement x) { - - } - @Override public boolean visit(OracleSavePointStatement x) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerSelectParser.java index a42389cfb2..d41d8215c8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerSelectParser.java @@ -99,7 +99,7 @@ public class SQLServerSelectParser extends SQLSelectParser { acceptIdentifier("ROWS"); select.setOffset(offset); - if (identifierEquals("FETCH")) { + if (lexer.token() == Token.FETCH) { lexer.nextToken(); acceptIdentifier("NEXT"); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 18b06bdc4c..76e5b2d976 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -328,6 +328,8 @@ public class SQLExprParser extends SQLParser { case ORDER: case CONSTRAINT: case TYPE: + case OPEN: + case REPEAT: sqlExpr = new SQLIdentifierExpr(lexer.stringVal()); lexer.nextToken(); break; diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index f7b860479b..daf3f5a83c 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -52,6 +52,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterViewRenameStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; 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.SQLConstraint; @@ -75,10 +76,12 @@ import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; import com.alibaba.druid.sql.ast.statement.SQLGrantStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLObjectType; +import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; import com.alibaba.druid.sql.ast.statement.SQLRevokeStatement; @@ -2006,6 +2009,45 @@ public class SQLStatementParser extends SQLParser { accept(Token.RPAREN); return item; } + + /** + * parse cursor open statement + * @return + */ + public SQLOpenStatement parseOpen() { + SQLOpenStatement stmt=new SQLOpenStatement(); + accept(Token.OPEN); + stmt.setCursorName(exprParser.name().getSimpleName()); + accept(Token.SEMI); + return stmt; + } + + public SQLFetchStatement parseFetch() { + accept(Token.FETCH); + + SQLFetchStatement stmt = new SQLFetchStatement(); + stmt.setCursorName(this.exprParser.name()); + accept(Token.INTO); + for (;;) { + stmt.getInto().add(this.exprParser.name()); + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + + break; + } + + return stmt; + } + + public SQLStatement parseClose() { + SQLCloseStatement stmt=new SQLCloseStatement(); + accept(Token.CLOSE); + stmt.setCursorName(exprParser.name().getSimpleName()); + accept(Token.SEMI); + return stmt; + } public boolean isParseCompleteValues() { return parseCompleteValues; 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 9b5fc27dc7..dd5f747f0f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -98,6 +98,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; +import com.alibaba.druid.sql.ast.statement.SQLCloseStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnCheck; import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; @@ -126,12 +127,14 @@ import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; import com.alibaba.druid.sql.ast.statement.SQLExprHint; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +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.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.SQLPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl; @@ -2394,4 +2397,28 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab print("]"); return false; } + + + @Override + public boolean visit(SQLOpenStatement x) { + print("OPEN "); + print(x.getCursorName()); + return false; + } + + @Override + public boolean visit(SQLFetchStatement x) { + print("FETCH "); + x.getCursorName().accept(this); + print(" INTO "); + printAndAccept(x.getInto(), ", "); + return false; + } + + @Override + public boolean visit(SQLCloseStatement x) { + print("CLOSE "); + print(x.getCursorName()); + return false; + } } 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 73dd87134a..50007cffc5 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -82,6 +82,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; +import com.alibaba.druid.sql.ast.statement.SQLCloseStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnCheck; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey; @@ -107,10 +108,12 @@ import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; import com.alibaba.druid.sql.ast.statement.SQLExprHint; 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.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl; import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; import com.alibaba.druid.sql.ast.statement.SQLRevokeStatement; @@ -624,4 +627,16 @@ public interface SQLASTVisitor { boolean visit(SQLArrayExpr x); + void endVisit(SQLOpenStatement x); + + boolean visit(SQLOpenStatement x); + + void endVisit(SQLFetchStatement x); + + boolean visit(SQLFetchStatement x); + + void endVisit(SQLCloseStatement x); + + boolean visit(SQLCloseStatement 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 45ee4694e2..4594ae66bd 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -83,6 +83,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; +import com.alibaba.druid.sql.ast.statement.SQLCloseStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnCheck; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey; @@ -108,11 +109,13 @@ import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; import com.alibaba.druid.sql.ast.statement.SQLExprHint; 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.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.SQLPrimaryKeyImpl; import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; import com.alibaba.druid.sql.ast.statement.SQLRevokeStatement; @@ -1236,4 +1239,34 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { return true; } + @Override + public void endVisit(SQLOpenStatement x) { + + } + + @Override + public boolean visit(SQLOpenStatement x) { + return true; + } + + @Override + public void endVisit(SQLFetchStatement x) { + + } + + @Override + public boolean visit(SQLFetchStatement x) { + return true; + } + + @Override + public void endVisit(SQLCloseStatement x) { + + } + + @Override + public boolean visit(SQLCloseStatement x) { + return true; + } + } 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 9d156d96d5..619bccf93f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -50,6 +50,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; 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; @@ -68,11 +69,13 @@ import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; 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.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; import com.alibaba.druid.sql.ast.statement.SQLObjectType; +import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLRevokeStatement; import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; @@ -1379,4 +1382,20 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { exp.accept(this); return false; } + + @Override + public boolean visit(SQLOpenStatement x) { + return false; + } + + @Override + public boolean visit(SQLFetchStatement x) { + return false; + } + + @Override + public boolean visit(SQLCloseStatement x) { + return false; + } + } 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 8487935e21..49bb789a19 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 @@ -3,6 +3,7 @@ package com.alibaba.druid.bvt.sql.oracle.visitor; import junit.framework.TestCase; import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; +import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename; import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; @@ -74,7 +75,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; @@ -187,7 +187,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new OracleCreateDatabaseDbLinkStatement().accept(adapter); new OracleCreateProcedureStatement().accept(adapter); new OracleSavePointStatement().accept(adapter); - new OracleFetchStatement().accept(adapter); + new SQLFetchStatement().accept(adapter); new OracleExitStatement().accept(adapter); new OracleExplainStatement().accept(adapter); new OracleAlterProcedureStatement().accept(adapter);