修复存储过程语句句尾需要分号

This commit is contained in:
zhujunxxxxx
2015-09-14 13:19:47 +08:00
parent 6469d239eb
commit 01de65e16e
14 changed files with 141 additions and 78 deletions
@@ -8,11 +8,11 @@ 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;
/**
* MySql procedure case statement
* @author zz
*
*
* @Description: MySql procedure Case statement
* @author zz email:455910092@qq.com
* @version V1.0
*/
public class MySqlCaseStatement extends MySqlStatementImpl{
@@ -9,9 +9,10 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
/**
* MySql create procedure statement
* @author zz
*
*
* @Description: MySql create procedure statement
* @author zz email:455910092@qq.com
* @version V1.0
*/
public class MySqlCreateProcedureStatement extends MySqlStatementImpl {
private boolean orReplace;
@@ -5,13 +5,14 @@ import java.util.List;
import com.alibaba.druid.sql.ast.SQLDataType;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
/**
* MySql declare statement
* @author sei.zz
*
*
* @Description: MySql declare statement
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlDeclareStatement extends MySqlStatementImpl{
@@ -8,9 +8,11 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
/**
* MySql procedure else statement
* @author zz
*
*
* @Description: MySql procedure else statement
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlElseStatement extends MySqlObjectImpl {
@@ -10,9 +10,11 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
/**
* MySql procedure if statement
* @author sei.zz
*
*
* @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;
@@ -55,9 +57,11 @@ public class MySqlIfStatement extends MySqlStatementImpl{
this.elseItem = elseItem;
}
/**
* comment: else if语句
* @author sei.zz
*
*
* @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 {
@@ -21,9 +21,11 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
/**
* MySql procedure parameter
* @author sei.zz
*
*
* @Description: MySql procedure parameter
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlParameter extends MySqlObjectImpl {
@@ -4,14 +4,15 @@ import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
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;
import com.alibaba.druid.sql.ast.SQLExpr;
/**
* MySql procedure select into statement
* @author sei.zz
*
*
* @Description: MySql procedure select into statement
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlSelectIntoStatement extends MySqlStatementImpl{
@@ -8,9 +8,11 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement;
/**
* MySql procedure statement type
* @author zz
*
*
* @Description: MySql procedure statement type
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public enum MySqlStatementType {
//select statement
@@ -9,13 +9,15 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStatementImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
/**
* comment: 存储过程中while循环语句
* @author 小竹zz
*
*
* @Description: MySql procedure while statement
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlWhileStatement extends MySqlStatementImpl {
//while循环的表达式
//while expr
private SQLExpr condition;
private List<SQLStatement> statements = new ArrayList<SQLStatement>();
@@ -5,9 +5,11 @@ import java.util.List;
import com.alibaba.druid.sql.ast.SQLStatement;
/**
* comment: mysql存储过程执行器
* @author sei.zz
*
*
* @Description: MySql procedure executor
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlProcedureExecutor {
@@ -46,9 +46,11 @@ import com.alibaba.druid.sql.parser.SQLSelectParser;
import com.alibaba.druid.sql.parser.Token;
/**
* parse select into statement
* @author sei.zz
*
*
* @Description: parse select into statement
* @author zz email:455910092@qq.com
* @date 2015-9-14
* @version V1.0
*/
public class MySqlSelectIntoParser extends SQLSelectParser {
private List<SQLExpr> argsList;
@@ -187,7 +189,10 @@ public class MySqlSelectIntoParser extends SQLSelectParser {
return queryRest(queryBlock);
}
/**
* parser the select into arguments
* @return
*/
protected List<SQLExpr> parseIntoArgs() {
List<SQLExpr> args=new ArrayList<SQLExpr>();
@@ -714,8 +714,6 @@ public class MySqlStatementParser extends SQLStatementParser {
MySqlBlockStatement block = new MySqlBlockStatement();
accept(Token.BEGIN);
//parseStatementList(block.getStatementList());
parseProcedureStatementList(block.getStatementList());
accept(Token.END);
@@ -2806,7 +2804,7 @@ public class MySqlStatementParser extends SQLStatementParser {
}
/**
* parse procedure statement block
* parse procedure statement block,not support begin-end block
* @param statementList
*/
private void parseProcedureStatementList(List<SQLStatement> statementList)
@@ -2948,8 +2946,8 @@ public class MySqlStatementParser extends SQLStatementParser {
if (lexer.token() == Token.DECLARE) {
statementList.add(this.parseDeclare());
continue;
}
}
throw new ParserException("TODO : " + lexer.token() + " "
+ lexer.stringVal());
}
@@ -2995,6 +2993,7 @@ public class MySqlStatementParser extends SQLStatementParser {
accept(Token.END);
accept(Token.IF);
accept(Token.SEMI);
return stmt;
}
@@ -3016,6 +3015,8 @@ public class MySqlStatementParser extends SQLStatementParser {
accept(Token.END);
accept(Token.WHILE);
accept(Token.SEMI);
return stmt;
@@ -3082,7 +3083,7 @@ public class MySqlStatementParser extends SQLStatementParser {
}
accept(Token.END);
accept(Token.CASE);
accept(Token.SEMI);
return stmt;
}
@@ -3212,12 +3212,10 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
/**
* comment: visit procedure node
* author ��zz
* visit procedure create node
*/
@Override
public boolean visit(MySqlCreateProcedureStatement x) {
// TODO Auto-generated method stub
if (x.isOrReplace()) {
print("CREATE OR REPLACE PROCEDURE ");
} else {
@@ -3254,13 +3252,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlCreateProcedureStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlParameter x) {
// TODO Auto-generated method stub
if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) {
print("CURSOR ");
x.getName().accept(this);
@@ -3288,14 +3284,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlParameter x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlWhileStatement x) {
// TODO Auto-generated method stub
print("WHILE ");
x.getCondition().accept(this);
print(" DO");
@@ -3315,13 +3308,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlWhileStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlIfStatement x) {
// TODO Auto-generated method stub
print("IF ");
x.getCondition().accept(this);
print(" THEN");
@@ -3348,14 +3339,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlIfStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlElseIfStatement x) {
// TODO Auto-generated method stub
print("ELSE IF ");
x.getCondition().accept(this);
print(" THEN");
@@ -3374,13 +3362,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlElseIfStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlElseStatement x) {
// TODO Auto-generated method stub
print("ELSE ");
println();
for (int i = 0, size = x.getStatements().size(); i < size; ++i) {
@@ -3397,22 +3383,17 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlElseStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlCaseStatement x) {
// TODO Auto-generated method stub
print("CASE ");
x.getCondition().accept(this);
println();
for (int i = 0; i < x.getWhenList().size(); i++) {
x.getWhenList().get(i).accept(this);
// if (i != x.getWhenList().size() - 1) {
// println();
// }
}
if(x.getElseItem()!=null)
x.getElseItem().accept(this);
@@ -3422,16 +3403,12 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlCaseStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlDeclareStatement x) {
// TODO Auto-generated method stub
print("DECLARE ");
for (int i = 0; i < x.getVarList().size(); i++) {
x.getVarList().get(i).accept(this);
if(i!=x.getVarList().size()-1)
@@ -3439,39 +3416,33 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
}
print(" ");
x.getType().accept(this);
return false;
}
@Override
public void endVisit(MySqlDeclareStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlSelectIntoStatement x) {
// TODO Auto-generated method stub
x.getSelect().accept(this);
print(" INTO ");
for (int i = 0; i < x.getVarList().size(); i++) {
x.getVarList().get(i).accept(this);
if(i!=x.getVarList().size()-1)
print(",");
//println(x.getVarList().get(i).toString());
}
return false;
}
@Override
public void endVisit(MySqlSelectIntoStatement x) {
// TODO Auto-generated method stub
}
@Override
public boolean visit(MySqlWhenfStatement x) {
// TODO Auto-generated method stub
print("WHEN ");
x.getCondition().accept(this);
println(" THEN");
@@ -3487,7 +3458,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlWhenfStatement x) {
// TODO Auto-generated method stub
}