bug fixed for StatFitler

This commit is contained in:
wenshao
2012-08-07 10:47:14 +08:00
parent 0c4b481c01
commit 5a83edf523
11 changed files with 48 additions and 25 deletions
@@ -312,7 +312,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
@Override
protected void statementExecuteUpdateAfter(StatementProxy statement, String sql, int updateCount) {
internalAfterStatementExecute(statement, updateCount);
internalAfterStatementExecute(statement, false, updateCount);
}
@Override
@@ -322,7 +322,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
@Override
protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) {
internalAfterStatementExecute(statement);
internalAfterStatementExecute(statement, true);
}
@Override
@@ -331,8 +331,8 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
}
@Override
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {
internalAfterStatementExecute(statement);
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean firstResult) {
internalAfterStatementExecute(statement, firstResult);
}
@Override
@@ -356,7 +356,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
@Override
protected void statementExecuteBatchAfter(StatementProxy statement, int[] result) {
internalAfterStatementExecute(statement, result);
internalAfterStatementExecute(statement, false, result);
}
@@ -406,7 +406,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
}
}
private final void internalAfterStatementExecute(StatementProxy statement, int... updateCountArray) {
private final void internalAfterStatementExecute(StatementProxy statement, boolean firstResult, int... updateCountArray) {
final JdbcStatementStat.Entry entry = getStatementInfo(statement);
@@ -426,7 +426,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
}
sqlStat.decrementRunningCount();
sqlStat.addExecuteTime(statement.getLastExecuteType(), nanoSpan);
sqlStat.addExecuteTime(statement.getLastExecuteType(), firstResult, nanoSpan);
statement.setLastExecuteTimeNano(nanoSpan);
if ((!statement.isFirstResultSet()) && statement.getLastExecuteType() == StatementExecuteType.Execute) {
try {
@@ -525,7 +525,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (sqlStat != null) {
sqlStat.error(error);
sqlStat.addExecuteTime(statement.getLastExecuteType(), nanoSpan);
sqlStat.addExecuteTime(statement.getLastExecuteType(), statement.isFirstResultSet(), nanoSpan);
statement.setLastExecuteTimeNano(nanoSpan);
}
@@ -235,12 +235,12 @@ public class MockDriver implements Driver, MockDriverMBean {
return true;
}
protected ResultSet executeQuery(MockStatement stmt, String sql) throws SQLException {
public ResultSet executeQuery(MockStatementBase stmt, String sql) throws SQLException {
if (logExecuteQueryEnable && LOG.isDebugEnabled()) {
LOG.debug("executeQuery " + sql);
}
MockConnection conn = stmt.getMockConnection();
MockConnection conn = stmt.getConnection();
long idleTimeMillis = System.currentTimeMillis() - conn.getLastActiveTimeMillis();
if (idleTimeMillis >= this.idleTimeCount) {
@@ -21,7 +21,7 @@ import java.sql.SQLException;
import com.alibaba.druid.util.jdbc.PreparedStatementBase;
public class MockPreparedStatement extends PreparedStatementBase implements PreparedStatement {
public class MockPreparedStatement extends PreparedStatementBase implements MockStatementBase, PreparedStatement {
private final String sql;
@@ -22,7 +22,7 @@ import java.sql.Statement;
import com.alibaba.druid.util.jdbc.StatementBase;
public class MockStatement extends StatementBase implements Statement {
public class MockStatement extends StatementBase implements MockStatementBase, Statement {
public final static String ERROR_SQL = "THROW ERROR";
@@ -46,7 +46,7 @@ public class MockStatement extends StatementBase implements Statement {
}
}
public MockConnection getMockConnection() {
public MockConnection getConnection() {
return mockConnection;
}
@@ -3,9 +3,9 @@ package com.alibaba.druid.mock.handler;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.alibaba.druid.mock.MockStatement;
import com.alibaba.druid.mock.MockStatementBase;
public interface MockExecuteHandler {
ResultSet executeQuery(MockStatement statement, String sql) throws SQLException;
ResultSet executeQuery(MockStatementBase statement, String sql) throws SQLException;
}
@@ -8,7 +8,7 @@ import java.util.List;
import com.alibaba.druid.mock.MockResultSet;
import com.alibaba.druid.mock.MockResultSetMetaData;
import com.alibaba.druid.mock.MockStatement;
import com.alibaba.druid.mock.MockStatementBase;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
@@ -35,7 +35,7 @@ import com.alibaba.druid.util.jdbc.ResultSetMetaDataBase.ColumnMetaData;
public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler {
@Override
public ResultSet executeQuery(MockStatement statement, String sql) throws SQLException {
public ResultSet executeQuery(MockStatementBase statement, String sql) throws SQLException {
SQLStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> stmtList = parser.parseStatementList(); //
@@ -67,7 +67,7 @@ public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler {
throw new SQLException("TODO");
}
public ResultSet executeQuery(MockStatement statement, SQLSelectQueryBlock query) throws SQLException {
public ResultSet executeQuery(MockStatementBase statement, SQLSelectQueryBlock query) throws SQLException {
SQLTableSource from = query.getFrom();
if (from instanceof SQLExprTableSource) {
@@ -87,7 +87,7 @@ public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler {
}
}
public ResultSet showStatus(MockStatement statement) throws SQLException {
public ResultSet showStatus(MockStatementBase statement) throws SQLException {
MockResultSet rs = new MockResultSet(statement);
MockResultSetMetaData metaData = rs.getMockMetaData();
@@ -102,7 +102,7 @@ public class MySqlMockExecuteHandlerImpl implements MockExecuteHandler {
return rs;
}
public ResultSet executeQueryFromDual(MockStatement statement, SQLSelectQueryBlock query) throws SQLException {
public ResultSet executeQueryFromDual(MockStatementBase statement, SQLSelectQueryBlock query) throws SQLException {
MockResultSet rs = new MockResultSet(statement);
MockResultSetMetaData metaData = rs.getMockMetaData();
@@ -277,7 +277,21 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
if (isTestOnBorrow() || isTestOnReturn() || isTestWhileIdle()) {
if (this.getValidationQuery() == null || this.getValidationQuery().length() == 0) {
LOG.error("validationQuery not set");
String errorMessage = "";
if (isTestOnBorrow()) {
errorMessage += "testOnBorrow is true, ";
}
if (isTestOnReturn()) {
errorMessage += "testOnReturn is true, ";
}
if (isTestWhileIdle()) {
errorMessage += "testWhileIdle is true, ";
}
LOG.error(errorMessage + "validationQuery not set");
}
}
@@ -26,10 +26,11 @@ public class MultiDataSourcePreparedStatement extends PreparedStatementProxyImpl
FilterChain chain = createChain();
if (chain.getFilterSize() == 0) {
return this.statement.execute();
firstResultSet = this.statement.execute();
} else {
firstResultSet = chain.preparedStatement_execute(this);
}
firstResultSet = chain.preparedStatement_execute(this);
return firstResultSet;
}
@@ -93,6 +93,7 @@ public class PreparedStatementProxyImpl extends StatementProxyImpl implements Pr
@Override
public ResultSet executeQuery() throws SQLException {
firstResultSet = true;
updateCount = null;
lastExecuteType = StatementExecuteType.ExecuteQuery;
return createChain().preparedStatement_executeQuery(this);
@@ -100,6 +101,7 @@ public class PreparedStatementProxyImpl extends StatementProxyImpl implements Pr
@Override
public int executeUpdate() throws SQLException {
firstResultSet = false;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
updateCount = createChain().preparedStatement_executeUpdate(this);
return updateCount;
@@ -141,6 +141,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public int[] executeBatch() throws SQLException {
firstResultSet = false;
lastExecuteType = StatementExecuteType.ExecuteBatch;
int[] updateCounts = createChain().statement_executeBatch(this);
@@ -153,6 +154,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public ResultSet executeQuery(String sql) throws SQLException {
firstResultSet = true;
updateCount = null;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteQuery;
@@ -161,6 +163,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public int executeUpdate(String sql) throws SQLException {
firstResultSet = false;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
updateCount = createChain().statement_executeUpdate(this, sql);
@@ -169,6 +172,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
firstResultSet = false;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
updateCount = createChain().statement_executeUpdate(this, sql, autoGeneratedKeys);
@@ -177,6 +181,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
firstResultSet = false;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
updateCount = createChain().statement_executeUpdate(this, sql, columnIndexes);
@@ -185,6 +190,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public int executeUpdate(String sql, String[] columnNames) throws SQLException {
firstResultSet = false;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
updateCount = createChain().statement_executeUpdate(this, sql, columnNames);
@@ -336,8 +336,8 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
return executeSuccessCount.get();
}
public void addExecuteTime(StatementExecuteType executeType, long nanoSpan) {
if (StatementExecuteType.ExecuteQuery != executeType) {
public void addExecuteTime(StatementExecuteType executeType, boolean firstResultSet, long nanoSpan) {
if (StatementExecuteType.ExecuteQuery != executeType && !firstResultSet) {
executeAndResultHoldTimeHistogram.record((nanoSpan) / 1000 / 1000);
}
addExecuteTime(nanoSpan);