mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
Merge pull request #1111 from wenshao/master
bug fixed for SchemaStatVisitor
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user