diff --git a/pom.xml b/pom.xml
index bc547c8170..e36c9449f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.alibaba
druid
- 0.2.15-SNAPSHOT
+ 0.2.15
jar
druid
diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java
index 6605f87cf4..2f6b512d78 100644
--- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java
+++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java
@@ -165,8 +165,12 @@ public class MySqlExprParser extends SQLExprParser {
return this.methodRest(new SQLIdentifierExpr("VALUES"), true);
case BINARY:
lexer.nextToken();
- SQLUnaryExpr binaryExpr = new SQLUnaryExpr(SQLUnaryOperator.BINARY, expr());
- return primaryRest(binaryExpr);
+ if (lexer.token() == Token.COMMA || lexer.token() == Token.SEMI || lexer.token() == Token.EOF) {
+ return new SQLIdentifierExpr("BINARY");
+ } else {
+ SQLUnaryExpr binaryExpr = new SQLUnaryExpr(SQLUnaryOperator.BINARY, expr());
+ return primaryRest(binaryExpr);
+ }
default:
return super.primary();
}
@@ -550,8 +554,9 @@ public class MySqlExprParser extends SQLExprParser {
SQLExpr var = primary();
+ String ident = null;
if (var instanceof SQLIdentifierExpr) {
- String ident = ((SQLIdentifierExpr) var).getName();
+ ident = ((SQLIdentifierExpr) var).getName();
if ("GLOBAL".equalsIgnoreCase(ident)) {
ident = lexer.stringVal();
@@ -565,18 +570,26 @@ public class MySqlExprParser extends SQLExprParser {
var = new SQLVariantRefExpr(ident);
}
}
+
+ if ("NAMES".equalsIgnoreCase(ident)) {
+ // skip
+ } else if ("CHARACTER".equalsIgnoreCase(ident)) {
+ var = new SQLIdentifierExpr("CHARACTER SET");
+ accept(Token.SET);
+ if (lexer.token() == Token.EQ) {
+ lexer.nextToken();
+ }
+ } else {
+ if (lexer.token() == Token.COLONEQ) {
+ lexer.nextToken();
+ } else {
+ accept(Token.EQ);
+ }
+ }
+
+ item.setValue(this.expr());
+
item.setTarget(var);
- if (lexer.token() == Token.COLONEQ) {
- lexer.nextToken();
- } else {
- accept(Token.EQ);
- }
- if (lexer.token() == Token.BINARY) {
- lexer.nextToken();
- item.setValue(new SQLIdentifierExpr("BINARY"));
- } else {
- item.setValue(expr());
- }
return item;
}
diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java
index e6cf2df35a..ba20e585ff 100644
--- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java
+++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java
@@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
+import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType;
import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
@@ -2812,4 +2813,14 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
public void endVisit(MySqlAlterTableImportTablespace x) {
}
+
+ @Override
+ public boolean visit(SQLAssignItem x) {
+ x.getTarget().accept(this);
+ if (!"NAMES".equalsIgnoreCase(x.getTarget().toString())) {
+ print(" = ");
+ }
+ x.getValue().accept(this);
+ return false;
+ }
} //
diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java
index fea691cea9..d2e36b9644 100644
--- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java
+++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java
@@ -131,7 +131,8 @@ public class OracleExprParser extends SQLExprParser {
"SUM", //
"VAR_POP", //
"VAR_SAMP", //
- "VARIANCE" //
+ "VARIANCE", //
+ "WM_CONCAT"
};
public OracleExprParser(Lexer lexer){
diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java
index d0cff2ee71..6b51a81f55 100644
--- a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java
+++ b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java
@@ -169,14 +169,14 @@ public class SQLSelectParser extends SQLParser {
protected void withSubquery(SQLSelect select) {
if (lexer.token() == Token.WITH) {
lexer.nextToken();
-
+
SQLWithSubqueryClause withQueryClause = new SQLWithSubqueryClause();
-
+
if (lexer.token == Token.RECURSIVE || identifierEquals("RECURSIVE")) {
lexer.nextToken();
withQueryClause.setRecursive(true);
}
-
+
for (;;) {
SQLWithSubqueryClause.Entry entry = new SQLWithSubqueryClause.Entry();
entry.setName((SQLIdentifierExpr) this.exprParser.name());
@@ -252,7 +252,7 @@ public class SQLSelectParser extends SQLParser {
if (lexer.token() == Token.IDENTIFIER) {
expr = new SQLIdentifierExpr(lexer.stringVal());
lexer.nextTokenComma();
-
+
if (lexer.token() != Token.COMMA) {
expr = this.exprParser.primaryRest(expr);
expr = this.exprParser.exprRest(expr);
@@ -261,13 +261,13 @@ public class SQLSelectParser extends SQLParser {
expr = expr();
}
final String alias = as();
-
+
final SQLSelectItem selectItem = new SQLSelectItem(expr, alias);
selectList.add(selectItem);
if (lexer.token() != Token.COMMA) {
break;
}
-
+
lexer.nextToken();
}
}
@@ -388,9 +388,13 @@ public class SQLSelectParser extends SQLParser {
join.setCondition(expr());
} else if (identifierEquals("USING")) {
lexer.nextToken();
- accept(Token.LPAREN);
- this.exprParser.exprList(join.getUsing());
- accept(Token.RPAREN);
+ if (lexer.token() == Token.LPAREN) {
+ lexer.nextToken();
+ this.exprParser.exprList(join.getUsing());
+ accept(Token.RPAREN);
+ } else {
+ join.getUsing().add(this.expr());
+ }
}
return parseTableSourceRest(join);
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 a7b945d05b..d82c9c3a89 100644
--- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java
+++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java
@@ -1080,6 +1080,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter {
printAndAccept(x.getUsing(), ", ");
print(")");
}
+
+ if (x.getAlias() != null) {
+ print(" AS ");
+ print(x.getAlias());
+ }
decrementIndent();
diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java
index b2bc86fc7b..d7731dc0ac 100644
--- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java
+++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java
@@ -624,7 +624,12 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
}
public boolean visit(SQLJoinTableSource x) {
- return true;
+ x.getLeft().accept(this);
+ x.getRight().accept(this);
+ if (x.getCondition() != null) {
+ x.getCondition().accept(this);
+ }
+ return false;
}
public boolean visit(SQLPropertyExpr x) {
@@ -874,7 +879,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
public boolean visit(SQLUpdateStatement x) {
setAliasMap();
-
+
setMode(x, Mode.Update);
SQLName identName = x.getTableName();
@@ -999,7 +1004,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
public boolean visit(SQLCurrentOfCursorExpr x) {
return false;
}
-
+
@Override
public boolean visit(SQLAlterTableAddColumn x) {
SQLAlterTableStatement stmt = (SQLAlterTableStatement) x.getParent();
@@ -1021,12 +1026,12 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
public boolean visit(SQLRollbackStatement x) {
return false;
}
-
+
public boolean visit(SQLCreateViewStatement x) {
x.getSubQuery().accept(this);
return false;
}
-
+
@Override
public boolean visit(SQLAlterTableDropForeinKey x) {
return false;
diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java
index ac36421c3f..2aeaabe0ed 100644
--- a/src/main/java/com/alibaba/druid/wall/WallProvider.java
+++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java
@@ -251,6 +251,13 @@ public abstract class WallProvider {
}
public WallCheckResult check(String sql) {
+ WallContext context = WallContext.current();
+
+ if (context != null && !this.dbType.equals(context.getDbType())) {
+ WallContext.clearContext();
+ }
+
+ WallContext.createIfNotExists(this.dbType);
WallCheckResult result = new WallCheckResult();
if (config.isDoPrivilegedAllow() && ispPivileged()) {
diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java
index 1753da5042..d1cfba9a86 100644
--- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java
+++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java
@@ -447,8 +447,15 @@ public class WallVisitorUtils {
if (Boolean.FALSE == leftResult || Boolean.FALSE == rightResult) {
return false;
}
-
- if (leftResult == Boolean.TRUE || rightResult == Boolean.TRUE) {
+
+ if (leftResult == Boolean.TRUE) {
+ if (x.getParent() instanceof SQLExpr) {
+ final WallConditionContext current = wallConditionContextLocal.get();
+ if (current != null) {
+ current.setPartAlwayTrue(true);
+ }
+ }
+ } else if (rightResult == Boolean.TRUE) {
final WallConditionContext current = wallConditionContextLocal.get();
if (current != null) {
current.setPartAlwayTrue(true);
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java
index 7f3579daff..d4acbf29f8 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseAndTest.java
@@ -10,14 +10,14 @@ import com.alibaba.druid.wall.WallUtils;
public class BitwiseAndTest extends TestCase {
public void test_false() throws Exception {
- Assert.assertFalse(WallUtils.isValidateMySql(//
+ Assert.assertTrue(WallUtils.isValidateMySql(//
"SELECT * from t where id = 1 & 2")); //
}
public void test_true() throws Exception {
WallConfig config = new WallConfig();
- config.setConditionOpBitwseAllow(true);
- Assert.assertTrue(WallUtils.isValidateMySql(//
+ config.setConditionOpBitwseAllow(false);
+ Assert.assertFalse(WallUtils.isValidateMySql(//
"SELECT * from t where id = 1 & 2", config)); //
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java
index 270b4b8659..c00e8c5e84 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseInvertTest.java
@@ -9,15 +9,15 @@ import com.alibaba.druid.wall.WallUtils;
public class BitwiseInvertTest extends TestCase {
- public void test_false() throws Exception {
- Assert.assertFalse(WallUtils.isValidateMySql(//
+ public void test_true() throws Exception {
+ Assert.assertTrue(WallUtils.isValidateMySql(//
"SELECT * from t where id = ~2")); //
}
- public void test_true() throws Exception {
+ public void test_false() throws Exception {
WallConfig config = new WallConfig();
- config.setConditionOpBitwseAllow(true);
- Assert.assertTrue(WallUtils.isValidateMySql(//
+ config.setConditionOpBitwseAllow(false);
+ Assert.assertFalse(WallUtils.isValidateMySql(//
"SELECT * from t where id = ~2", config)); //
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java
index 9ee5e16e4f..32769b22ae 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseOrTest.java
@@ -9,15 +9,15 @@ import com.alibaba.druid.wall.WallUtils;
public class BitwiseOrTest extends TestCase {
- public void test_false() throws Exception {
- Assert.assertFalse(WallUtils.isValidateMySql(//
+ public void test_true() throws Exception {
+ Assert.assertTrue(WallUtils.isValidateMySql(//
"SELECT * from t where id = 1 | 2")); //
}
- public void test_true() throws Exception {
+ public void test_false() throws Exception {
WallConfig config = new WallConfig();
- config.setConditionOpBitwseAllow(true);
- Assert.assertTrue(WallUtils.isValidateMySql(//
+ config.setConditionOpBitwseAllow(false);
+ Assert.assertFalse(WallUtils.isValidateMySql(//
"SELECT * from t where id = 1 | 2", config)); //
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java
index 2e707a0a36..f2ffa20853 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/BitwiseXorTest.java
@@ -9,15 +9,15 @@ import com.alibaba.druid.wall.WallUtils;
public class BitwiseXorTest extends TestCase {
- public void test_false() throws Exception {
- Assert.assertFalse(WallUtils.isValidateMySql(//
+ public void test_true() throws Exception {
+ Assert.assertTrue(WallUtils.isValidateMySql(//
"SELECT * from t where id = 1 ^ 2")); //
}
- public void test_true() throws Exception {
+ public void test_false() throws Exception {
WallConfig config = new WallConfig();
- config.setConditionOpBitwseAllow(true);
- Assert.assertTrue(WallUtils.isValidateMySql(//
+ config.setConditionOpBitwseAllow(false);
+ Assert.assertFalse(WallUtils.isValidateMySql(//
"SELECT * from t where id = 1 ^ 2", config)); //
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest20.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest20.java
new file mode 100644
index 0000000000..2953bcf87c
--- /dev/null
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest20.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 1999-2011 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.druid.bvt.filter.wall;
+
+import junit.framework.TestCase;
+
+import org.junit.Assert;
+
+import com.alibaba.druid.wall.WallUtils;
+
+/**
+ * SQLServerWallTest
+ *
+ * @author RaymondXiu
+ * @version 1.0, 2012-3-18
+ * @see
+ */
+public class MySqlWallTest20 extends TestCase {
+
+ public void test_true() throws Exception {
+ Assert.assertTrue(WallUtils.isValidateMySql(//
+ "SET sql_mode=?,NAMES ?,CHARACTER SET utf8,CHARACTER_SET_RESULTS=utf8,COLLATION_CONNECTION=?")); //
+ }
+}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest21.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest21.java
new file mode 100644
index 0000000000..6222440a3c
--- /dev/null
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest21.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1999-2011 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.druid.bvt.filter.wall;
+
+import junit.framework.TestCase;
+
+import org.junit.Assert;
+
+import com.alibaba.druid.wall.WallUtils;
+
+/**
+ * SQLServerWallTest
+ *
+ * @author RaymondXiu
+ * @version 1.0, 2012-3-18
+ * @see
+ */
+public class MySqlWallTest21 extends TestCase {
+
+ public void test_true() throws Exception {
+ Assert.assertTrue(WallUtils.isValidateMySql(//
+ "select * from t where 1=1 AND status = 1")); //
+ }
+
+ public void test_false() throws Exception {
+ Assert.assertFalse(WallUtils.isValidateMySql(//
+ "select * from t where status = 1 AND 1=1")); //
+ }
+}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest8.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest8.java
index b288715bf2..cbc45cc605 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest8.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest8.java
@@ -30,8 +30,8 @@ import com.alibaba.druid.wall.WallUtils;
*/
public class MySqlWallTest8 extends TestCase {
- public void test_false() throws Exception {
- Assert.assertFalse(WallUtils.isValidateMySql(//
+ public void test_true() throws Exception {
+ Assert.assertTrue(WallUtils.isValidateMySql(//
"SELECT a.* FROM vote_info a where 1=1 AND FID = ?")); // 前置永真
}
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest2.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest2.java
index 084c0a82ef..0948e63cbe 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest2.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/WallSelectWhereTest2.java
@@ -30,10 +30,10 @@ public class WallSelectWhereTest2 extends TestCase {
private String sql = "SELECT F1, F2 WHERE 1 = 1 AND FID = ?";
public void testMySql() throws Exception {
- Assert.assertFalse(WallUtils.isValidateMySql(sql));
+ Assert.assertTrue(WallUtils.isValidateMySql(sql));
}
public void testORACLE() throws Exception {
- Assert.assertFalse(WallUtils.isValidateOracle(sql));
+ Assert.assertTrue(WallUtils.isValidateOracle(sql));
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLDeleteParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLDeleteParserTest.java
index cf12fc7646..6616f86e24 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLDeleteParserTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLDeleteParserTest.java
@@ -32,8 +32,7 @@ public class DMLDeleteParserTest extends TestCase {
SQLStatement stmt = parser.parseStatementList().get(0);
parser.match(Token.EOF);
String output = SQLUtils.toMySqlString(stmt);
- Assert.assertEquals("DELETE LOW_PRIORITY FROM id1.id, id\n" + //
- "USING t1 a" + //
+ Assert.assertEquals("DELETE LOW_PRIORITY FROM id1.id, id USING (t1) AS a" + //
"\nWHERE col1 = ?", output);
}
@@ -53,8 +52,8 @@ public class DMLDeleteParserTest extends TestCase {
SQLStatement stmt = parser.parseStatementList().get(0);
parser.match(Token.EOF);
String output = SQLUtils.toMySqlString(stmt);
- Assert.assertEquals("DELETE FROM offer.*, wp_image.*\n" + //
- "USING offer a, wp_image b\n" + //
+ Assert.assertEquals("DELETE FROM offer.*, wp_image.*" + //
+ " USING (offer) AS a, wp_image b\n" + //
"WHERE a.member_id = b.member_id\n" + //
"\tAND a.member_id = 'abc'", output);
}
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/DeleteSyntaxTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/DeleteSyntaxTest.java
index e5969c33b7..d991d015d2 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/DeleteSyntaxTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/DeleteSyntaxTest.java
@@ -73,7 +73,7 @@ public class DeleteSyntaxTest extends TestCase {
String text = output(stmtList);
- Assert.assertEquals("DELETE FROM a1, a2\nUSING t1 a1" + //
+ Assert.assertEquals("DELETE FROM a1, a2 USING (t1) AS a1" + //
"\n\tINNER JOIN t2 a2\nWHERE a1.id = a2.id;", text);
}
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_1.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_1.java
index 11677fc912..3c92a3ee67 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_1.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_1.java
@@ -46,14 +46,15 @@ public class MySqlDeleteTest_1 extends MysqlTest {
System.out.println("coditions : " + visitor.getConditions());
System.out.println("orderBy : " + visitor.getOrderByColumns());
- Assert.assertEquals(2, visitor.getTables().size());
+ Assert.assertEquals(3, visitor.getTables().size());
Assert.assertEquals(2, visitor.getColumns().size());
Assert.assertEquals(2, visitor.getConditions().size());
- Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t1")));
+ Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("a1")));
+ Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("a2")));
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t2")));
- Assert.assertTrue(visitor.getColumns().contains(new Column("t1", "id")));
- Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "id")));
+ Assert.assertTrue(visitor.getColumns().contains(new Column("a1", "id")));
+ Assert.assertTrue(visitor.getColumns().contains(new Column("a2", "id")));
}
}