diff --git a/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java b/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java index 3d5fd3810e..7f69e02d57 100644 --- a/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java +++ b/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java @@ -39,7 +39,7 @@ public final class ConnectionHolder { private final List connectionEventListeners = new CopyOnWriteArrayList(); private final List statementEventListeners = new CopyOnWriteArrayList(); private final long connecttimeMillis; - private long lastActiveTimeMillis; + private transient long lastActiveTimeMillis; private long useCount = 0; private PreparedStatementPool statementPool; @@ -67,14 +67,15 @@ public final class ConnectionHolder { this.lastActiveTimeMillis = connecttimeMillis; this.underlyingAutoCommit = conn.getAutoCommit(); - this.underlyingHoldability = conn.getHoldability(); + this.underlyingHoldability = conn.getHoldability(); this.underlyingReadOnly = conn.isReadOnly(); try { this.underlyingTransactionIsolation = conn.getTransactionIsolation(); } catch (SQLException e) { - if ("com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException".equals(e.getClass().getName())); + if ("com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException".equals(e.getClass().getName())) + ; } - + this.defaultHoldability = underlyingHoldability; this.defaultTransactionIsolation = underlyingTransactionIsolation; this.defaultAutoCommit = underlyingAutoCommit; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index df270b11ea..3162a5e0a1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -318,7 +318,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } public void endVisit(OracleUpdateStatement x) { - clearAliasMap(); } public boolean visit(OracleDeleteStatement x) { @@ -326,7 +325,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } public void endVisit(OracleDeleteStatement x) { - clearAliasMap(); } public boolean visit(OracleSelectQueryBlock x) { @@ -1035,7 +1033,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(OracleMergeStatement x) { - clearAliasMap(); } @Override 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 7161b17f54..0c83ca4473 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -723,7 +723,6 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } public void endVisit(SQLSelectStatement x) { - clearAliasMap(); } public boolean visit(SQLSubqueryTableSource x) { @@ -897,11 +896,10 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } public void endVisit(SQLDeleteStatement x) { - clearAliasMap(); + } public void endVisit(SQLUpdateStatement x) { - clearAliasMap(); } public boolean visit(SQLCreateTableStatement x) { diff --git a/src/main/java/com/alibaba/druid/stat/TableStat.java b/src/main/java/com/alibaba/druid/stat/TableStat.java index 98d3e624c0..bb4cbd794f 100644 --- a/src/main/java/com/alibaba/druid/stat/TableStat.java +++ b/src/main/java/com/alibaba/druid/stat/TableStat.java @@ -337,7 +337,26 @@ public class TableStat { } public String toString() { - return this.column.toString() + " " + this.operator; + StringBuffer buf = new StringBuffer(); + buf.append(this.column.toString()); + buf.append(' '); + buf.append(this.operator); + + if (values.size() == 1) { + buf.append(' '); + buf.append(String.valueOf(this.values.get(0))); + } else if (values.size() > 0) { + buf.append(" ("); + for (int i = 0; i < values.size(); ++i) { + if (i != 0) { + buf.append(", "); + } + buf.append(String.valueOf(values.get(i))); + } + buf.append(")"); + } + + return buf.toString(); } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java b/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java index de8a15f5ca..5fdd3cf575 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java @@ -39,7 +39,7 @@ public class TestActiveTrace extends TestCase { conn.close(); // Assert.assertEquals(1, dataSource.getPoolingCount()); dataSource.shrink(); - Assert.assertEquals(0, dataSource.getPoolingCount()); + Assert.assertEquals("createCount : " + dataSource.getCreateCount(), 0, dataSource.getPoolingCount()); Assert.assertEquals(0, dataSource.getActiveConnections().size()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlSchemaStatVisitorTest_Subquery.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlSchemaStatVisitorTest_Subquery.java index 4ca6ab9937..5647454bd6 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlSchemaStatVisitorTest_Subquery.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlSchemaStatVisitorTest_Subquery.java @@ -13,7 +13,7 @@ import com.alibaba.druid.stat.TableStat.Column; public class MySqlSchemaStatVisitorTest_Subquery extends TestCase { public void test_0() throws Exception { - String sql = "SELECT id2, name2 FROM (select id, name from users limit 10) a"; + String sql = "SELECT id2, name2 FROM (select id, name from users u where id = 22 limit 10) a"; MySqlStatementParser parser = new MySqlStatementParser(sql); List statementList = parser.parseStatementList(); @@ -27,9 +27,12 @@ public class MySqlSchemaStatVisitorTest_Subquery extends TestCase { System.out.println(sql); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns()); + System.out.println("alias : " + visitor.getAliasMap()); + System.out.println("conditions : " + visitor.getConditions()); Assert.assertEquals(1, visitor.getTables().size()); Assert.assertEquals(true, visitor.containsTable("users")); + Assert.assertEquals(22, visitor.getConditions().get(0).getValues().get(0)); Assert.assertEquals(2, visitor.getColumns().size()); Assert.assertEquals(true, visitor.getColumns().contains(new Column("users", "id")));