mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -123,10 +123,10 @@ public class PagerUtils {
|
||||
}
|
||||
|
||||
OracleSelectQueryBlock countQueryBlock = new OracleSelectQueryBlock();
|
||||
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLPropertyExpr(new SQLIdentifierExpr("_X"), "*")));
|
||||
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLIdentifierExpr("ROWNUM"), "_RN"));
|
||||
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLPropertyExpr(new SQLIdentifierExpr("XX"), "*")));
|
||||
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLIdentifierExpr("ROWNUM"), "RN"));
|
||||
|
||||
countQueryBlock.setFrom(new SQLSubqueryTableSource(select, "_X"));
|
||||
countQueryBlock.setFrom(new SQLSubqueryTableSource(select, "XX"));
|
||||
countQueryBlock.setWhere(new SQLBinaryOpExpr(new SQLIdentifierExpr("ROWNUM"), //
|
||||
SQLBinaryOperator.LessThanOrEqual, //
|
||||
new SQLNumberExpr(count + offset)));
|
||||
@@ -136,8 +136,8 @@ public class PagerUtils {
|
||||
|
||||
OracleSelectQueryBlock offsetQueryBlock = new OracleSelectQueryBlock();
|
||||
offsetQueryBlock.getSelectList().add(new SQLSelectItem(new SQLAllColumnExpr()));
|
||||
offsetQueryBlock.setFrom(new SQLSubqueryTableSource(new SQLSelect(countQueryBlock), "_XX"));
|
||||
offsetQueryBlock.setWhere(new SQLBinaryOpExpr(new SQLIdentifierExpr("_RN"), //
|
||||
offsetQueryBlock.setFrom(new SQLSubqueryTableSource(new SQLSelect(countQueryBlock), "XXX"));
|
||||
offsetQueryBlock.setWhere(new SQLBinaryOpExpr(new SQLIdentifierExpr("RN"), //
|
||||
SQLBinaryOperator.GreaterThan, //
|
||||
new SQLNumberExpr(offset)));
|
||||
|
||||
|
||||
@@ -120,6 +120,17 @@ public final class DruidStatService implements DruidStatServiceMBean {
|
||||
if (url.startsWith("/sql.json")) {
|
||||
return returnJSONResult(RESULT_CODE_SUCCESS, getSqlStatDataList(parameters));
|
||||
}
|
||||
|
||||
if (url.startsWith("/wall.json")) {
|
||||
Object result = statManagerFacade.getWallStatMap(null);
|
||||
return returnJSONResult(RESULT_CODE_SUCCESS, result);
|
||||
}
|
||||
|
||||
if (url.startsWith("/wall-") && url.indexOf(".json") > 0) {
|
||||
Integer dataSourceId = StringUtils.subStringToInteger(url, "wall-", ".json");
|
||||
Object result = statManagerFacade.getWallStatMap(dataSourceId);
|
||||
return returnJSONResult(result == null ? RESULT_CODE_ERROR : RESULT_CODE_SUCCESS, result);
|
||||
}
|
||||
|
||||
if (url.startsWith("/sql-") && url.indexOf(".json") > 0) {
|
||||
Integer id = StringUtils.subStringToInteger(url, "sql-", ".json");
|
||||
|
||||
@@ -348,10 +348,10 @@ public class StatViewServlet extends HttpServlet {
|
||||
if (isRequireAuth()
|
||||
&& session.getAttribute(SESSION_USER_KEY) == null
|
||||
&& !("/login.html".equals(path) || path.startsWith("/css") || path.startsWith("/js") || path.startsWith("/img"))) {
|
||||
if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
|
||||
response.sendRedirect("/login.html");
|
||||
if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
|
||||
response.sendRedirect("/druid/login.html");
|
||||
} else {
|
||||
response.sendRedirect("login.html");
|
||||
response.sendRedirect("druid/login.html");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,73 +1,82 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Druid Stat JSON API</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
|
||||
<link href='css/bootstrap.min.css' rel="stylesheet" />
|
||||
<link href="css/style.css" type="text/css" rel="stylesheet"/>
|
||||
<script type="text/javascript" src="js/jquery.min.js"></script>
|
||||
<script src="js/common.js" type="text/javascript" charset="utf8"></script>
|
||||
<script>
|
||||
function init() {
|
||||
druid.common.buildHead(7);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init();">
|
||||
<div class="container">
|
||||
<h3>
|
||||
JSON API
|
||||
</h3>
|
||||
<table class="table table-bordered responsive-utilities" style="background-color: #fff">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="250px" class="td_lable">Name</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
|
||||
<td>basic info.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="datasource.json" target="_blank">datasource.json</a></td>
|
||||
<td>DatsSourceStat List</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable">datasource-{id}.json</td>
|
||||
<td>DatasourceStat for id={id},id is DatsSourceStat.ID<br />
|
||||
Example: druid/datasource-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable">activeConnectionStackTrace-{datasourceId}.json</td>
|
||||
<td>StrackTrace for activeConnection in datasource which datasource.id={datasourceId},id is DatsSourceStat.ID<br />
|
||||
Required: set removeAbandoned=true<br />
|
||||
Example: druid/activeConnectionStackTrace-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="sql.json" target="_blank">sql.json</a></td>
|
||||
<td>SqlStat for id={id} ,id is SqlStat.ID<br />
|
||||
Example: druid/sql-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="weburi.json" target="_blank">weburi.json</a></td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="websession.json" target="_blank">websession.json</a></td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"> <a href="reset-all.json" target="_blank">reset-all.json</a> </td>
|
||||
<td> Reset all stat </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Druid Stat JSON API</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
|
||||
<link href='css/bootstrap.min.css' rel="stylesheet" />
|
||||
<link href="css/style.css" type="text/css" rel="stylesheet"/>
|
||||
<script type="text/javascript" src="js/jquery.min.js"></script>
|
||||
<script src="js/common.js" type="text/javascript" charset="utf8"></script>
|
||||
<script>
|
||||
function init() {
|
||||
druid.common.buildHead(7);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init();">
|
||||
<div class="container">
|
||||
<h3>
|
||||
JSON API
|
||||
</h3>
|
||||
<table class="table table-bordered responsive-utilities" style="background-color: #fff">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="250px" class="td_lable">Name</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
|
||||
<td>basic info.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="datasource.json" target="_blank">datasource.json</a></td>
|
||||
<td>DatsSourceStat List</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable">datasource-{id}.json</td>
|
||||
<td>DatasourceStat for id={id},id is DatsSourceStat.ID<br />
|
||||
Example: druid/datasource-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable">activeConnectionStackTrace-{datasourceId}.json</td>
|
||||
<td>StrackTrace for activeConnection in datasource which datasource.id={datasourceId},id is DatsSourceStat.ID<br />
|
||||
Required: set removeAbandoned=true<br />
|
||||
Example: druid/activeConnectionStackTrace-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="sql.json" target="_blank">sql.json</a></td>
|
||||
<td>SqlStat for id={id} ,id is SqlStat.ID<br />
|
||||
Example: druid/sql-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="wall.json" target="_blank">WallStat.json</a></td>
|
||||
<td>WallStat List</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable">wall-{id}.json</td>
|
||||
<td>WallStat for id={id},id is DatsSourceStat.ID<br />
|
||||
Example: druid/wall-1.json</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="weburi.json" target="_blank">weburi.json</a></td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"><a href="websession.json" target="_blank">websession.json</a></td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_lable"> <a href="reset-all.json" target="_blank">reset-all.json</a> </td>
|
||||
<td> Reset all stat </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -12,11 +12,11 @@ public class PagerUtilsTest_Limit_oracle_0 extends TestCase {
|
||||
public void test_oracle_oderby_0() throws Exception {
|
||||
String sql = "select * from t order by id";
|
||||
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 0, 10);
|
||||
Assert.assertEquals("SELECT _X.*, ROWNUM AS _RN" + //
|
||||
Assert.assertEquals("SELECT XX.*, ROWNUM AS RN" + //
|
||||
"\nFROM (SELECT *" + //
|
||||
"\n\tFROM t" + //
|
||||
"\n\tORDER BY id" + //
|
||||
"\n\t) _X" + //
|
||||
"\n\t) XX" + //
|
||||
"\nWHERE ROWNUM <= 10", result);
|
||||
}
|
||||
|
||||
@@ -32,39 +32,39 @@ public class PagerUtilsTest_Limit_oracle_0 extends TestCase {
|
||||
String sql = "select * from t";
|
||||
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 10, 10);
|
||||
Assert.assertEquals("SELECT *" + //
|
||||
"\nFROM (SELECT _X.*, ROWNUM AS _RN" + //
|
||||
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
|
||||
"\n\tFROM (SELECT *" + //
|
||||
"\n\t\tFROM t" + //
|
||||
"\n\t\t) _X" + //
|
||||
"\n\t\t) XX" + //
|
||||
"\n\tWHERE ROWNUM <= 20" + //
|
||||
"\n\t) _XX" + //
|
||||
"\nWHERE _RN > 10", result);
|
||||
"\n\t) XXX" + //
|
||||
"\nWHERE RN > 10", result);
|
||||
}
|
||||
|
||||
public void test_oracle_2() throws Exception {
|
||||
String sql = "select * from t";
|
||||
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 20, 10);
|
||||
Assert.assertEquals("SELECT *" + //
|
||||
"\nFROM (SELECT _X.*, ROWNUM AS _RN" + //
|
||||
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
|
||||
"\n\tFROM (SELECT *" + //
|
||||
"\n\t\tFROM t" + //
|
||||
"\n\t\t) _X" + //
|
||||
"\n\t\t) XX" + //
|
||||
"\n\tWHERE ROWNUM <= 30" + //
|
||||
"\n\t) _XX" + //
|
||||
"\nWHERE _RN > 20", result);
|
||||
"\n\t) XXX" + //
|
||||
"\nWHERE RN > 20", result);
|
||||
}
|
||||
|
||||
public void test_oracle_3() throws Exception {
|
||||
String sql = "select id, name, salary from t order by id, name";
|
||||
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 20, 10);
|
||||
Assert.assertEquals("SELECT *" + //
|
||||
"\nFROM (SELECT _X.*, ROWNUM AS _RN" + //
|
||||
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
|
||||
"\n\tFROM (SELECT id, name, salary" + //
|
||||
"\n\t\tFROM t" + //
|
||||
"\n\t\tORDER BY id, name" + //
|
||||
"\n\t\t) _X" + //
|
||||
"\n\t\t) XX" + //
|
||||
"\n\tWHERE ROWNUM <= 30" + //
|
||||
"\n\t) _XX" + //
|
||||
"\nWHERE _RN > 20", result);
|
||||
"\n\t) XXX" + //
|
||||
"\nWHERE RN > 20", result);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user