improve sqlparser

This commit is contained in:
Yako
2014-09-25 14:35:39 +08:00
parent 50492859e0
commit 42e58fa44a
16 changed files with 258 additions and 7 deletions
@@ -26,6 +26,7 @@ import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerASTVisitor;
public class SQLServerExecStatement extends SQLServerObjectImpl implements SQLServerStatement {
private SQLName returnStatus;
private SQLName moduleName;
private List<SQLExpr> parameters = new ArrayList<SQLExpr>();
@@ -43,9 +44,18 @@ public class SQLServerExecStatement extends SQLServerObjectImpl implements SQLSe
public void accept0(SQLServerASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, this.returnStatus);
acceptChild(visitor, this.moduleName);
acceptChild(visitor, this.parameters);
}
visitor.endVisit(this);
}
public SQLName getReturnStatus() {
return returnStatus;
}
public void setReturnStatus(SQLName returnStatus) {
this.returnStatus = returnStatus;
}
}
@@ -76,9 +76,16 @@ public class SQLServerStatementParser extends SQLStatementParser {
this.exprParser.exprList(execStmt.getParameters(), execStmt);
accept(Token.RPAREN);
} else {
SQLName moduleName = this.exprParser.name();
execStmt.setModuleName(moduleName);
SQLName sqlNameName = this.exprParser.name();
if (lexer.token() == Token.EQ) {
lexer.nextToken();
execStmt.setReturnStatus(sqlNameName);
execStmt.setModuleName(this.exprParser.name());
} else {
execStmt.setModuleName(sqlNameName);
}
this.exprParser.exprList(execStmt.getParameters(), execStmt);
}
statementList.add(execStmt);
@@ -331,6 +331,13 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerExecStatement x) {
print("EXEC ");
SQLName returnStatus = x.getReturnStatus();
if (returnStatus != null) {
returnStatus.accept(this);
print(" = ");
}
SQLName moduleName = x.getModuleName();
if (moduleName != null) {
moduleName.accept(this);
@@ -21,7 +21,6 @@ import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerColumnDefinition;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerColumnDefinition.Identity;
import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerDeclareItem;