diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index a2d4c83530..20a8cabe77 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -143,6 +143,8 @@ public abstract class WallProvider { } public void addUpdateCount(WallSqlStat sqlStat, long updateCount) { + sqlStat.addUpdateCount(updateCount); + Map sqlTableStats = sqlStat.getTableStats(); if (sqlTableStats == null) { return; @@ -168,7 +170,7 @@ public abstract class WallProvider { } public void addFetchRowCount(WallSqlStat sqlStat, long fetchRowCount) { - sqlStat.addAndGetEffectRowCount(fetchRowCount); + sqlStat.addAndFetchRowCount(fetchRowCount); Map sqlTableStats = sqlStat.getTableStats(); if (sqlTableStats == null) { diff --git a/src/main/java/com/alibaba/druid/wall/WallSqlStat.java b/src/main/java/com/alibaba/druid/wall/WallSqlStat.java index a16d6707c0..fbe6aa536c 100644 --- a/src/main/java/com/alibaba/druid/wall/WallSqlStat.java +++ b/src/main/java/com/alibaba/druid/wall/WallSqlStat.java @@ -25,13 +25,15 @@ import java.util.concurrent.atomic.AtomicLongFieldUpdater; public class WallSqlStat { private volatile long executeCount; - private volatile long effectRowCount; - - final static AtomicLongFieldUpdater executeCountUpdater = AtomicLongFieldUpdater.newUpdater(WallSqlStat.class, - "executeCount"); - final static AtomicLongFieldUpdater effectRowCountUpdater = AtomicLongFieldUpdater.newUpdater(WallSqlStat.class, - "effectRowCount"); + private volatile long fetchRowCount; + private volatile long updateCount; + final static AtomicLongFieldUpdater executeCountUpdater = AtomicLongFieldUpdater.newUpdater(WallSqlStat.class, + "executeCount"); + final static AtomicLongFieldUpdater fetchRowCountUpdater = AtomicLongFieldUpdater.newUpdater(WallSqlStat.class, + "fetchRowCount"); + final static AtomicLongFieldUpdater updateCountUpdater = AtomicLongFieldUpdater.newUpdater(WallSqlStat.class, + "updateCount"); private final Map tableStats; private final List violations; @@ -71,16 +73,24 @@ public class WallSqlStat { return executeCount; } - public long incrementAndGetEffectRowCount() { - return effectRowCountUpdater.incrementAndGet(this); + public long incrementAndGetFetchRowCount() { + return fetchRowCountUpdater.incrementAndGet(this); } - public long addAndGetEffectRowCount(long delta) { - return effectRowCountUpdater.addAndGet(this, delta); + public long addAndFetchRowCount(long delta) { + return fetchRowCountUpdater.addAndGet(this, delta); } public long getEffectRowCount() { - return effectRowCount; + return fetchRowCount; + } + + public long getUpdateCount() { + return updateCount; + } + + public void addUpdateCount(long delta) { + updateCountUpdater.addAndGet(this, delta); } public Map getTableStats() { @@ -103,7 +113,8 @@ public class WallSqlStat { final WallSqlStatValue statValue = new WallSqlStatValue(); statValue.setExecuteCount(get(this, executeCountUpdater, reset)); - statValue.setEffectRowCount(get(this, effectRowCountUpdater, reset)); + statValue.setFetchRowCount(get(this, fetchRowCountUpdater, reset)); + statValue.setUpdateCount(get(this, updateCountUpdater, reset)); statValue.setSyntaxError(this.syntaxError); statValue.setSqlSample(sample); if (violations.size() > 0) { diff --git a/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java b/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java index ad0d62a33d..5734589ff1 100644 --- a/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java +++ b/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java @@ -23,7 +23,8 @@ public class WallSqlStatValue { private String sql; private String sqlSample; private long executeCount; - private long effectRowCount; + private long fetchRowCount; + private long updateCount; private boolean syntaxError; private String violationMessage; @@ -55,12 +56,20 @@ public class WallSqlStatValue { this.executeCount = executeCount; } - public long getEffectRowCount() { - return effectRowCount; + public long getFetchRowCount() { + return fetchRowCount; } - public void setEffectRowCount(long effectRowCount) { - this.effectRowCount = effectRowCount; + public void setFetchRowCount(long fetchRowCount) { + this.fetchRowCount = fetchRowCount; + } + + public long getUpdateCount() { + return updateCount; + } + + public void setUpdateCount(long updateCount) { + this.updateCount = updateCount; } public boolean isSyntaxError() { @@ -86,8 +95,18 @@ public class WallSqlStatValue { sqlStatMap.put("sample", sqlSample); } sqlStatMap.put("executeCount", getExecuteCount()); - sqlStatMap.put("effectRowCount", getEffectRowCount()); - sqlStatMap.put("violationMessage", getViolationMessage()); + + if (fetchRowCount > 0) { + sqlStatMap.put("fetchRowCount", fetchRowCount); + } + + if (updateCount > 0) { + sqlStatMap.put("updateCount", updateCount); + } + + if (violationMessage != null) { + sqlStatMap.put("violationMessage", violationMessage); + } return sqlStatMap; } diff --git a/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java b/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java index 07bb7c5240..4e9a9c668e 100644 --- a/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java +++ b/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java @@ -164,7 +164,7 @@ public class WallTableStatValue { public void setFetchRowCount(long fetchRowCount) { this.fetchRowCount = fetchRowCount; } - + public Map toMap() { Map map = new LinkedHashMap(); toMap(map); @@ -172,6 +172,8 @@ public class WallTableStatValue { } public Map toMap(Map map) { + map.put("name", name); + if (selectCount > 0) { map.put("selectCount", selectCount); }