From 4d205740304827c44eb39b444333cb05cedbfe35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Thu, 17 May 2012 17:33:38 +0800 Subject: [PATCH] refactor --- .../statement/SQLRollbackStatement.java} | 9 +-- .../ast/statement/SQLSavePointStatement.java | 27 +++++++++ .../mysql/ast/MySqlIgnoreIndexHint.java | 17 ++++++ .../oracle/parser/OracleStatementParser.java | 4 +- .../oracle/visitor/OracleASTVisitor.java | 6 +- .../visitor/OracleASTVisitorAdapter.java | 12 +--- .../oracle/visitor/OracleOutputVisitor.java | 14 +---- .../visitor/OracleSchemaStatVisitor.java | 12 +--- .../sql/visitor/SQLASTOutputVisitor.java | 11 ++++ .../druid/sql/visitor/SQLASTVisitor.java | 27 +++++---- .../sql/visitor/SQLASTVisitorAdapter.java | 13 ++++- .../bvt/sql/cobar/DMLUpdateParserTest.java | 57 +++++++++++++++++++ .../druid/bvt/sql/cobar/MTSParserTest.java | 21 +++++++ 13 files changed, 173 insertions(+), 57 deletions(-) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/stmt/OracleRollbackStatement.java => ast/statement/SQLRollbackStatement.java} (57%) create mode 100644 src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MySqlIgnoreIndexHint.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLUpdateParserTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/cobar/MTSParserTest.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleRollbackStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java similarity index 57% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleRollbackStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java index be1881382f..c55d995045 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleRollbackStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLRollbackStatement.java @@ -1,16 +1,17 @@ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleRollbackStatement extends OracleStatementImpl { +public class SQLRollbackStatement extends SQLStatementImpl { private static final long serialVersionUID = 1L; private SQLName to; @Override - public void accept0(OracleASTVisitor visitor) { + protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, to); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java new file mode 100644 index 0000000000..789acd9c42 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSavePointStatement.java @@ -0,0 +1,27 @@ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class SQLSavePointStatement extends SQLStatementImpl { + + private static final long serialVersionUID = 1L; + private SQLExpr name; + + public SQLExpr getName() { + return name; + } + + public void setName(SQLExpr name) { + this.name = name; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MySqlIgnoreIndexHint.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MySqlIgnoreIndexHint.java new file mode 100644 index 0000000000..94a6eae2f4 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/MySqlIgnoreIndexHint.java @@ -0,0 +1,17 @@ +package com.alibaba.druid.sql.dialect.mysql.ast; + +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlIgnoreIndexHint extends MySqlIndexHintImpl { + + private static final long serialVersionUID = 1L; + + @Override + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, getIndexList()); + } + visitor.endVisit(this); + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index ddcf4ec948..6799aa55d3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -33,6 +33,7 @@ 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; @@ -87,7 +88,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleStatement; @@ -386,7 +386,7 @@ public class OracleStatementParser extends SQLStatementParser { if (lexer.token() == Token.ROLLBACK) { lexer.nextToken(); - OracleRollbackStatement stmt = new OracleRollbackStatement(); + SQLRollbackStatement stmt = new SQLRollbackStatement(); if (identifierEquals("TO")) { lexer.nextToken(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index 5a915762c6..6fa1154555 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -16,6 +16,7 @@ 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; @@ -100,7 +101,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement. import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate; @@ -604,10 +604,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleFetchStatement x); - boolean visit(OracleRollbackStatement x); - - void endVisit(OracleRollbackStatement x); - boolean visit(OracleSavePointStatement x); void endVisit(OracleSavePointStatement x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java index e322d904b3..872df73f45 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java @@ -1,6 +1,7 @@ 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; @@ -96,7 +97,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement. import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate; @@ -1361,16 +1361,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleRollbackStatement x) { - return true; - } - - @Override - public void endVisit(OracleRollbackStatement x) { - - } - @Override public boolean visit(OracleSavePointStatement x) { return true; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 6dd31d2faa..5fef48c04f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -34,6 +34,7 @@ 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.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; @@ -138,7 +139,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement. import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate; @@ -2994,17 +2994,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleRollbackStatement x) { - print("ROLLBACK"); - if (x.getTo() != null) { - print(" TO "); - x.getTo().accept(this); - } - return false; - } - - @Override - public void endVisit(OracleRollbackStatement x) { + public void endVisit(SQLRollbackStatement x) { } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index 5275185ddf..d00c11c7f8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -16,6 +16,7 @@ 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; @@ -115,7 +116,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement. import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate; @@ -1778,16 +1778,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleRollbackStatement x) { - return false; - } - - @Override - public void endVisit(OracleRollbackStatement x) { - - } - @Override public boolean visit(OracleSavePointStatement x) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 99110aa053..f1645dce43 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -69,6 +69,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; 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.SQLSavePointStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; @@ -1070,4 +1071,14 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { x.getName().accept(this); return false; } + + @Override + public boolean visit(SQLRollbackStatement x) { + print("ROLLBACK"); + if (x.getTo() != null) { + print(" TO "); + x.getTo().accept(this); + } + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index db8ad39f2e..1fb26789e5 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -66,6 +66,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.ast.statement.SQLSavePointStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause; @@ -204,7 +205,7 @@ public interface SQLASTVisitor { boolean visit(SQLSelectQueryBlock x); void endVisit(SQLSelectQueryBlock x); - + boolean visit(SQLExprTableSource x); void endVisit(SQLExprTableSource x); @@ -336,28 +337,32 @@ public interface SQLASTVisitor { void endVisit(SQLCommentStatement x); boolean visit(SQLCommentStatement x); - + void endVisit(SQLUseStatement x); - + boolean visit(SQLUseStatement x); boolean visit(SQLAlterTableAddColumn x); void endVisit(SQLAlterTableAddColumn x); - + boolean visit(SQLAlterTableDropColumnItem x); - + void endVisit(SQLAlterTableDropColumnItem x); - + boolean visit(SQLDropIndexStatement x); - + void endVisit(SQLDropIndexStatement x); - + boolean visit(SQLDropViewStatement x); - + void endVisit(SQLDropViewStatement x); - + boolean visit(SQLSavePointStatement x); - + void endVisit(SQLSavePointStatement x); + + boolean visit(SQLRollbackStatement x); + + void endVisit(SQLRollbackStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index a647e6bbc4..182e6e5e07 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -51,6 +51,7 @@ import com.alibaba.druid.sql.ast.expr.SQLSomeExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCallStatement; @@ -65,8 +66,8 @@ import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.ast.statement.SQLSavePointStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause; @@ -639,4 +640,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLSavePointStatement x) { } + + @Override + public boolean visit(SQLRollbackStatement x) { + return true; + } + + @Override + public void endVisit(SQLRollbackStatement x) { + + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLUpdateParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLUpdateParserTest.java new file mode 100644 index 0000000000..0315bec0db --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLUpdateParserTest.java @@ -0,0 +1,57 @@ +package com.alibaba.druid.bvt.sql.cobar; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.parser.Token; + +import junit.framework.Assert; +import junit.framework.TestCase; + + +public class DMLUpdateParserTest extends TestCase { + public void test_update_0() throws Exception { + String sql = "upDate LOw_PRIORITY IGNORE test.t1 sEt t1.col1=?, col2=DefaulT"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("UPDATE LOW_PRIORITY IGNORE test.t1\nSET t1.col1 = ?, col2 = DEFAULT", output); + } + + public void test_update_1() throws Exception { + String sql = "upDate IGNORE (t1) set col2=DefaulT order bY t1.col2 "; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("UPDATE IGNORE t1\nSET col2 = DEFAULT\nORDER BY t1.col2", output); + } + + public void test_update_2() throws Exception { + String sql = "upDate (test.t1) SET col2=DefaulT order bY t1.col2 limit ? offset 1"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("UPDATE test.t1\nSET col2 = DEFAULT\nORDER BY t1.col2\nLIMIT 1, ?", output); + } + + public void test_update_3() throws Exception { + String sql = "upDate LOW_PRIORITY t1, test.t2 SET col2=DefaulT , col2='123''4'"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("UPDATE LOW_PRIORITY t1, test.t2\nSET col2 = DEFAULT, col2 = '123''4'", output); + } + + public void test_update_4() throws Exception { + String sql = "upDate LOW_PRIORITY t1, test.t2 SET col2:=DefaulT , col2='123''4' where id='a'"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("UPDATE LOW_PRIORITY t1, test.t2\nSET col2 = DEFAULT, col2 = '123''4'\nWHERE id = 'a'", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/MTSParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/MTSParserTest.java new file mode 100644 index 0000000000..dc4f907780 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/MTSParserTest.java @@ -0,0 +1,21 @@ +package com.alibaba.druid.bvt.sql.cobar; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.parser.Token; + +import junit.framework.Assert; +import junit.framework.TestCase; + + +public class MTSParserTest extends TestCase { + public void test_mts_0() throws Exception { + String sql = " savepoint xx"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("SAVEPOINT xx", output); + } +}