long nanoSpan = nowNano - entry.getLastExecuteStartNano();
dataSourceStat.getStatementStat().afterExecute(nanoSpan);
// // SQL
final JdbcSqlStat sqlStat = statement.getSqlStat();
if (sqlStat != null) {
sqlStat.incrementExecuteSuccessCount();
for (int updateCount : updateCountArray) {
sqlStat.addUpdateCount(updateCount);
}
sqlStat.decrementRunningCount();
sqlStat.addExecuteTime(statement.getLastExecuteType(), nanoSpan);
statement.setLastExecuteTimeNano(nanoSpan);
if ((!statement.isFirstResultSet()) && statement.getLastExecuteType() == StatementExecuteType.Execute) {
try {
int updateCount = statement.getUpdateCount();
sqlStat.addUpdateCount(updateCount);
} catch (SQLException e) {
LOG.error("getUpdateCount error", e);
}
}
long millis = nanoSpan / (1000 * 1000);
if (millis >= slowSqlMillis) {
StringBuilder buf = new StringBuilder();
buf.append('[');
int index = 0;
for (JdbcParameter parameter : statement.getParameters().values()) {
if (index != 0) {
buf.append(',');
}
Object value = parameter.getValue();
if (value == null) {
buf.append("null");
} else if (value instanceof String) {
buf.append('"');
String text = (String) value;
if (text.length() > 100) {
for (int i = 0; i < 97; ++i) {
char ch = text.charAt(i);
if (ch == '\'') {
buf.append('\\');
buf.append(ch);
} else {
buf.append(ch);
}
}
buf.append("...");
} else {
for (int i = 0; i < text.length(); ++i) {
char ch = text.charAt(i);
if (ch == '\'') {
buf.append('\\');
buf.append(ch);
} else {
buf.append(ch);
}
}
}
buf.append('"');
} else if (value instanceof Number) {
buf.append(value.toString());
} else if (value instanceof java.util.Date) {
java.util.Date date = (java.util.Date) value;
buf.append(date.getClass().getSimpleName());
buf.append('(');
buf.append(date.getTime());
buf.append(')');
} else if (value instanceof Boolean) {
buf.append(value.toString());
} else if (value instanceof InputStream) {
buf.append("<InputStream>");
} else if (value instanceof Clob) {
buf.append("<Clob>");
} else if (value instanceof NClob) {
buf.append("<NClob>");
} else if (value instanceof Blob) {
buf.append("<Blob>");
} else {
buf.append('<');
buf.append(value.getClass().getName());
buf.append('>');
}
index++;
}
buf.append(']');
sqlStat.setLastSlowParameters(buf.toString());
}
}
}