mysql parser

This commit is contained in:
温少
2012-05-17 21:20:54 +08:00
parent 4d20574030
commit 5ea37c07f0
16 changed files with 210 additions and 51 deletions
@@ -15,17 +15,24 @@
*/
package com.alibaba.druid.sql.dialect.mysql.ast.statement;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class MySqlRollbackStatement extends MySqlStatementImpl {
public class MySqlRollbackStatement extends SQLRollbackStatement implements MySqlStatement {
private static final long serialVersionUID = 1L;
private boolean work = false;
private Boolean chain;
private Boolean release;
private SQLExpr force;
public MySqlRollbackStatement(){
}
public Boolean getChain() {
return chain;
}
@@ -42,17 +49,31 @@ public class MySqlRollbackStatement extends MySqlStatementImpl {
this.release = release;
}
public boolean isWork() {
return work;
}
public void setWork(boolean work) {
this.work = work;
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor instanceof MySqlASTVisitor) {
accept0((MySqlASTVisitor) visitor);
} else {
throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName());
}
}
@Override
public void accept0(MySqlASTVisitor visitor) {
visitor.visit(this);
if (visitor.visit(this)) {
acceptChild(visitor, getTo());
acceptChild(visitor, getForce());
}
visitor.endVisit(this);
}
public SQLExpr getForce() {
return force;
}
public void setForce(SQLExpr force) {
this.force = force;
}
}
@@ -1329,14 +1329,14 @@ public class MySqlStatementParser extends SQLStatementParser {
return stmt;
}
public MySqlRollbackStatement parseRollback() throws ParserException {
@Override
public MySqlRollbackStatement parseRollback() {
acceptIdentifier("ROLLBACK");
MySqlRollbackStatement stmt = new MySqlRollbackStatement();
if (identifierEquals("WORK")) {
lexer.nextToken();
stmt.setWork(true);
}
if (lexer.token() == Token.AND) {
@@ -1350,6 +1350,16 @@ public class MySqlStatementParser extends SQLStatementParser {
stmt.setChain(Boolean.TRUE);
}
}
if (identifierEquals("TO")) {
lexer.nextToken();
if (identifierEquals("SAVEPOINT")) {
lexer.nextToken();
}
stmt.setTo(this.exprParser.name());
}
return stmt;
}
@@ -31,7 +31,6 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
@@ -165,7 +164,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
if (x.isHignPriority()) {
print("HIGH_PRIORITY ");
}
if (x.isStraightJoin()) {
print("STRAIGHT_JOIN ");
}
@@ -1028,10 +1027,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
public boolean visit(MySqlRollbackStatement x) {
print("ROLLBACK");
if (x.isWork()) {
print(" WORK");
}
if (x.getChain() != null) {
if (x.getChain().booleanValue()) {
print(" AND CHAIN");
@@ -1048,6 +1043,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
}
}
if (x.getTo() != null) {
print(" TO ");
x.getTo().accept(this);
}
return false;
}
@@ -1465,11 +1465,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public boolean visit(MySqlUpdateStatement x) {
print("UPDATE ");
if (x.isLowPriority()) {
print("LOW_PRIORITY ");
}
if (x.isIgnore()) {
print("IGNORE ");
}
@@ -1491,12 +1491,12 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
x.getWhere().setParent(x);
x.getWhere().accept(this);
}
if (x.getOrderBy() != null) {
println();
x.getOrderBy().accept(this);
}
if (x.getLimit() != null) {
println();
x.getLimit().accept(this);
@@ -2404,9 +2404,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
@Override
public void endVisit(MySqlUseIndexHint x) {
}
@Override
public boolean visit(MySqlIgnoreIndexHint x) {
print("IGNORE INDEX ");
@@ -2420,10 +2420,10 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
print(')');
return false;
}
@Override
public void endVisit(MySqlIgnoreIndexHint x) {
}
public boolean visit(SQLExprTableSource x) {
@@ -2433,7 +2433,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
print(' ');
print(x.getAlias());
}
for (int i = 0; i < x.getHints().size(); ++i) {
print(' ');
x.getHints().get(i).accept(this);
@@ -127,7 +127,6 @@ public class OracleLexer extends Lexer {
map.put("ELSE", Token.ELSE);
map.put("GOTO", Token.GOTO);
map.put("COMMIT", Token.COMMIT);
map.put("ROLLBACK", Token.ROLLBACK);
map.put("SAVEPOINT", Token.SAVEPOINT);
map.put("CROSS", Token.CROSS);
@@ -33,7 +33,6 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLConstaint;
import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLInsertInto;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
@@ -383,20 +382,6 @@ public class OracleStatementParser extends SQLStatementParser {
continue;
}
if (lexer.token() == Token.ROLLBACK) {
lexer.nextToken();
SQLRollbackStatement stmt = new SQLRollbackStatement();
if (identifierEquals("TO")) {
lexer.nextToken();
stmt.setTo(this.exprParser.name());
}
statementList.add(stmt);
continue;
}
if (lexer.token() == Token.SAVEPOINT) {
lexer.nextToken();
@@ -16,7 +16,6 @@
package com.alibaba.druid.sql.dialect.oracle.visitor;
import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause;
@@ -1,7 +1,6 @@
package com.alibaba.druid.sql.dialect.oracle.visitor;
import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause;
@@ -34,8 +34,8 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint;
@@ -16,7 +16,6 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLTableSource;