bug fixed for SchemaStatVisitor

This commit is contained in:
高铁
2016-03-12 11:07:17 +08:00
parent c445f3965d
commit 643ff31da2
8 changed files with 59 additions and 14 deletions
@@ -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, "*");
@@ -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;
@@ -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", "*")));
}
}
@@ -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")));
@@ -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")));
}
}
@@ -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")));
}
@@ -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<SQLStatement> 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")));
}
@@ -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());
}
}