mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor sql parser, support open/close statement
This commit is contained in:
-48
@@ -1,48 +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.dialect.mysql.ast.statement.MySqlStatementImpl;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
/**
|
||||
*
|
||||
* @Description: MySql cursor close statement
|
||||
* @author zz email:455910092@qq.com
|
||||
* @date 2015-9-14
|
||||
* @version V1.0
|
||||
*/
|
||||
public class MySqlCursorCloseStatement extends MySqlStatementImpl{
|
||||
|
||||
//cursor name
|
||||
private String cursorName;
|
||||
|
||||
public String getCursorName() {
|
||||
return cursorName;
|
||||
}
|
||||
|
||||
public void setCursorName(String cursorName) {
|
||||
this.cursorName = cursorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept0(MySqlASTVisitor visitor) {
|
||||
// TODO Auto-generated method stub
|
||||
visitor.visit(this);
|
||||
visitor.endVisit(this);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
-63
@@ -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<SQLExpr> varList=new ArrayList<SQLExpr>();
|
||||
|
||||
public String getCursorName() {
|
||||
return cursorName;
|
||||
}
|
||||
|
||||
public void setCursorName(String cursorName) {
|
||||
this.cursorName = cursorName;
|
||||
}
|
||||
|
||||
public List<SQLExpr> getVarList() {
|
||||
return varList;
|
||||
}
|
||||
|
||||
public void setVarList(List<SQLExpr> 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);
|
||||
}
|
||||
|
||||
}
|
||||
-48
@@ -1,48 +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.dialect.mysql.ast.statement.MySqlStatementImpl;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
/**
|
||||
*
|
||||
* @Description: MySql cursor open statement
|
||||
* @author zz email:455910092@qq.com
|
||||
* @date 2015-9-14
|
||||
* @version V1.0
|
||||
*/
|
||||
public class MySqlCursorOpenStatement extends MySqlStatementImpl{
|
||||
|
||||
//cursor name
|
||||
private String cursorName;
|
||||
|
||||
public String getCursorName() {
|
||||
return cursorName;
|
||||
}
|
||||
|
||||
public void setCursorName(String cursorName) {
|
||||
this.cursorName = cursorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept0(MySqlASTVisitor visitor) {
|
||||
// TODO Auto-generated method stub
|
||||
visitor.visit(this);
|
||||
visitor.endVisit(this);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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<SQLExpr> parseIntoArgs() {
|
||||
List<SQLExpr> args=new ArrayList<SQLExpr>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
} //
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
} //
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
} //
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,56 +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.oracle.ast.stmt;
|
||||
|
||||
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;
|
||||
|
||||
public class OracleFetchStatement extends OracleStatementImpl {
|
||||
|
||||
private SQLName cursorName;
|
||||
|
||||
private List<SQLExpr> into = new ArrayList<SQLExpr>();
|
||||
|
||||
@Override
|
||||
public void accept0(OracleASTVisitor visitor) {
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, cursorName);
|
||||
acceptChild(visitor, into);
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
|
||||
public SQLName getCursorName() {
|
||||
return cursorName;
|
||||
}
|
||||
|
||||
public void setCursorName(SQLName cursorName) {
|
||||
this.cursorName = cursorName;
|
||||
}
|
||||
|
||||
public List<SQLExpr> getInto() {
|
||||
return into;
|
||||
}
|
||||
|
||||
public void setInto(List<SQLExpr> into) {
|
||||
this.into = into;
|
||||
}
|
||||
|
||||
}
|
||||
+8
-15
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
-11
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
-11
@@ -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;
|
||||
|
||||
+1
-1
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user