From 643ff31da2ee8c6a7a021191c344bae99ed0dea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sat, 12 Mar 2016 11:07:17 +0800 Subject: [PATCH] bug fixed for SchemaStatVisitor --- .../druid/sql/visitor/SchemaStatVisitor.java | 7 +++++ .../druid/support/http/WebStatFilter.java | 1 + .../bvt/sql/mysql/MySqlDeleteTest_3.java | 7 +++-- .../oceanbase/OceanbaseHintTest_parallel.java | 2 +- .../bvt/sql/oracle/OracleSelectTest22.java | 9 +++--- .../bvt/sql/oracle/OracleSelectTest23.java | 4 +-- .../bvt/sql/oracle/OracleSelectTest24.java | 13 ++++---- .../bvt/sql/schemaStat/SchemaStatTest3.java | 30 +++++++++++++++++++ 8 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest3.java 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 e6b2353ffc..ed32cf5d5b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -903,6 +903,13 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { if (subQueryMap.containsKey(currentTable)) { return false; } + + if (x.getParent() instanceof SQLAggregateExpr) { + SQLAggregateExpr aggregateExpr = (SQLAggregateExpr) x.getParent(); + if ("count".equalsIgnoreCase(aggregateExpr.getMethodName())) { + return false; + } + } if (currentTable != null) { Column column = addColumn(currentTable, "*"); diff --git a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java index 242f4c98c4..b50dca3288 100644 --- a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java +++ b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java @@ -327,6 +327,7 @@ public class WebStatFilter extends AbstractWebStatImpl implements Filter { this.status = statusCode; } + @SuppressWarnings("deprecation") public void setStatus(int statusCode, String statusMessage) { super.setStatus(statusCode, statusMessage); this.status = statusCode; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_3.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_3.java index b7839b4702..327000107f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_3.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDeleteTest_3.java @@ -54,13 +54,16 @@ public class MySqlDeleteTest_3 extends MysqlTest { System.out.println("orderBy : " + visitor.getOrderByColumns()); Assert.assertEquals(5, visitor.getTables().size()); - Assert.assertEquals(6, visitor.getColumns().size()); + Assert.assertEquals(5, visitor.getColumns().size()); Assert.assertEquals(1, visitor.getConditions().size()); Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t1"))); Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t2"))); Assert.assertTrue(visitor.getColumns().contains(new Column("t1", "s11"))); - Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new Column("t2", "s1"))); + Assert.assertTrue(visitor.getColumns().contains(new Column("t3", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new Column("t4", "s1"))); + Assert.assertTrue(visitor.getColumns().contains(new Column("t5", "*"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oceanbase/OceanbaseHintTest_parallel.java b/src/test/java/com/alibaba/druid/bvt/sql/oceanbase/OceanbaseHintTest_parallel.java index bcdc3e2882..4fce2b3d92 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oceanbase/OceanbaseHintTest_parallel.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oceanbase/OceanbaseHintTest_parallel.java @@ -50,7 +50,7 @@ public class OceanbaseHintTest_parallel extends MysqlTest { System.out.println("orderBy : " + visitor.getOrderByColumns()); Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertEquals(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getColumns().size()); Assert.assertEquals(0, visitor.getConditions().size()); // Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("t_basic_store"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java index a52c95c053..225226deed 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java @@ -51,10 +51,11 @@ public class OracleSelectTest22 extends OracleTest { Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY"))); - Assert.assertEquals(15, visitor.getColumns().size()); + Assert.assertEquals(14, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW", "HT_TASK_TRADE_HISTORY.ID"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW", "HT_TASK_TRADE_HISTORY.GMT_MODIFIED"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW", "HT_TASK_TRADE_HISTORY.GMT_CREATE"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW", "ESCROW.HT_TASK_TRADE_HISTORY.TRADE_ID"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java index ad8c92f2a9..756a79ebfb 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java @@ -53,9 +53,9 @@ public class OracleSelectTest23 extends OracleTest { Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.user$"))); Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("dba_jobs"))); - Assert.assertEquals(10, visitor.getColumns().size()); + Assert.assertEquals(9, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("sys.user$", "name"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java index fa6cb7befa..6f4e0a9c83 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java @@ -20,6 +20,7 @@ import java.util.List; import org.junit.Assert; import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; @@ -33,13 +34,15 @@ public class OracleSelectTest24 extends OracleTest { OracleStatementParser parser = new OracleStatementParser(sql); List statementList = parser.parseStatementList(); - SQLStatement statemen = statementList.get(0); - print(statementList); + SQLStatement stmt = statementList.get(0); + + String output = SQLUtils.toOracleString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + System.out.println(output); Assert.assertEquals(1, statementList.size()); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); - statemen.accept(visitor); + stmt.accept(visitor); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns()); @@ -51,9 +54,9 @@ public class OracleSelectTest24 extends OracleTest { Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY"))); - Assert.assertEquals(5, visitor.getColumns().size()); + Assert.assertEquals(4, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW.HT_TASK_TRADE_HISTORY", "*"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW.HT_TASK_TRADE_HISTORY", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest3.java new file mode 100644 index 0000000000..fee4cea778 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest3.java @@ -0,0 +1,30 @@ +package com.alibaba.druid.bvt.sql.schemaStat; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import junit.framework.TestCase; + +public class SchemaStatTest3 extends TestCase { + public void test_schemaStat() throws Exception { + String sql = "select count(*) from t"; + + + String dbType = JdbcConstants.MYSQL; + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType); + SQLStatement stmt = parser.parseStatementList().get(0); + + SchemaStatVisitor statVisitor = SQLUtils.createSchemaStatVisitor(dbType); + stmt.accept(statVisitor); + + System.out.println(statVisitor.getColumns()); + + Assert.assertEquals(0, statVisitor.getColumns().size()); + } +}