From d22d27ef013c5a23c3a27c48540ce2319568ec56 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 28 Mar 2013 09:21:08 +0800 Subject: [PATCH] 0.2.15 --- pom.xml | 2 +- .../dialect/mysql/parser/MySqlExprParser.java | 41 +++++++++++------- .../mysql/visitor/MySqlOutputVisitor.java | 11 +++++ .../oracle/parser/OracleExprParser.java | 3 +- .../druid/sql/parser/SQLSelectParser.java | 22 ++++++---- .../sql/visitor/SQLASTOutputVisitor.java | 5 +++ .../druid/sql/visitor/SchemaStatVisitor.java | 15 ++++--- .../com/alibaba/druid/wall/WallProvider.java | 7 ++++ .../druid/wall/spi/WallVisitorUtils.java | 11 ++++- .../druid/bvt/filter/wall/BitwiseAndTest.java | 6 +-- .../bvt/filter/wall/BitwiseInvertTest.java | 10 ++--- .../druid/bvt/filter/wall/BitwiseOrTest.java | 10 ++--- .../druid/bvt/filter/wall/BitwiseXorTest.java | 10 ++--- .../bvt/filter/wall/MySqlWallTest20.java | 37 ++++++++++++++++ .../bvt/filter/wall/MySqlWallTest21.java | 42 +++++++++++++++++++ .../druid/bvt/filter/wall/MySqlWallTest8.java | 4 +- .../bvt/filter/wall/WallSelectWhereTest2.java | 4 +- .../bvt/sql/cobar/DMLDeleteParserTest.java | 7 ++-- .../druid/bvt/sql/mysql/DeleteSyntaxTest.java | 2 +- .../bvt/sql/mysql/MySqlDeleteTest_1.java | 9 ++-- 20 files changed, 195 insertions(+), 63 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest20.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest21.java 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"))); } }