增加mysql创建存储过程时参数可选类型IN|OUT|INOUT

This commit is contained in:
zhujunxxxxx
2015-09-20 19:37:17 +08:00
parent 44660a589c
commit dc45cd0a92
6 changed files with 217 additions and 3 deletions
@@ -32,8 +32,17 @@ public class MySqlParameter extends MySqlObjectImpl {
private SQLExpr name;
private SQLDataType dataType;
private SQLExpr defaultValue;
private ParameterType paramType;
public SQLExpr getDefaultValue() {
public ParameterType getParamType() {
return paramType;
}
public void setParamType(ParameterType paramType) {
this.paramType = paramType;
}
public SQLExpr getDefaultValue() {
return defaultValue;
}
@@ -66,5 +75,15 @@ public class MySqlParameter extends MySqlObjectImpl {
}
visitor.endVisit(this);
}
/**
* mysql procedure parameter type
*/
public static enum ParameterType
{
DEFAULT,
IN,//in
OUT,//out
INOUT//inout
}
}
@@ -73,6 +73,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter.ParameterType;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement;
@@ -2785,7 +2786,28 @@ public class MySqlStatementParser extends SQLStatementParser {
parameter.setDataType(dataType);
parameter.setDefaultValue(new SQLQueryExpr(select));
} else if (lexer.token() == Token.IN || lexer.token() == Token.OUT || lexer.token() == Token.INOUT) {
if(lexer.token()==Token.IN)
{
parameter.setParamType(ParameterType.IN);
}
else if(lexer.token()==Token.OUT)
{
parameter.setParamType(ParameterType.OUT);
}
else if(lexer.token()==Token.INOUT)
{
parameter.setParamType(ParameterType.INOUT);
}
lexer.nextToken();
parameter.setName(this.exprParser.name());
parameter.setDataType(this.exprParser.parseDataType());
} else {
parameter.setParamType(ParameterType.DEFAULT);//default parameter type is in
parameter.setName(this.exprParser.name());
parameter.setDataType(this.exprParser.parseDataType());
@@ -59,6 +59,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLoopStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlParameter.ParameterType;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement;
@@ -3277,6 +3278,19 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
decrementIndent();
} else {
if(x.getParamType()==ParameterType.IN)
{
print("IN ");
}
else if(x.getParamType()==ParameterType.OUT)
{
print("OUT ");
}
else if(x.getParamType()==ParameterType.INOUT)
{
print("INOUT ");
}
x.getName().accept(this);
print(" ");