mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug fixed for StatFitler
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user