Skip to content

Commit

Permalink
@having 支持复杂条件组合,且新增 @having& 简化 AND 连接的写法
Browse files Browse the repository at this point in the history
  • Loading branch information
TommyLemon committed Mar 20, 2022
1 parent a3d9c90 commit 9776408
Show file tree
Hide file tree
Showing 4 changed files with 468 additions and 308 deletions.
11 changes: 10 additions & 1 deletion APIJSONORM/src/main/java/apijson/JSONObject.java
Expand Up @@ -147,6 +147,7 @@ public JSONObject setUserIdIn(List<Object> list) {
public static final String KEY_COMBINE = "@combine"; //条件组合,每个条件key前面可以放&,|,!逻辑关系 "id!{},&sex,!name&$"
public static final String KEY_GROUP = "@group"; //分组方式
public static final String KEY_HAVING = "@having"; //聚合函数条件,一般和@group一起用
public static final String KEY_HAVING_AND = "@having&"; //聚合函数条件,一般和@group一起用
public static final String KEY_ORDER = "@order"; //排序方式
public static final String KEY_RAW = "@raw"; // 自定义原始 SQL 片段
public static final String KEY_JSON = "@json"; //SQL Server 把字段转为 JSON 输出
Expand All @@ -167,6 +168,7 @@ public JSONObject setUserIdIn(List<Object> list) {
TABLE_KEY_LIST.add(KEY_COMBINE);
TABLE_KEY_LIST.add(KEY_GROUP);
TABLE_KEY_LIST.add(KEY_HAVING);
TABLE_KEY_LIST.add(KEY_HAVING_AND);
TABLE_KEY_LIST.add(KEY_ORDER);
TABLE_KEY_LIST.add(KEY_RAW);
TABLE_KEY_LIST.add(KEY_JSON);
Expand Down Expand Up @@ -350,7 +352,14 @@ public JSONObject setHaving(String... keys) {
* @return
*/
public JSONObject setHaving(String keys) {
return puts(KEY_HAVING, keys);
return setHaving(keys, false);
}
/**set keys for having
* @param keys "key0,key1,key2..."
* @return
*/
public JSONObject setHaving(String keys, boolean isAnd) {
return puts(isAnd ? KEY_HAVING_AND : KEY_HAVING, keys);
}

/**set keys for order by
Expand Down
9 changes: 5 additions & 4 deletions APIJSONORM/src/main/java/apijson/orm/AbstractParser.java
Expand Up @@ -1063,13 +1063,13 @@ public JSONObject onObjectParse(final JSONObject request
boolean isExplain = cfg.isExplain();
cfg.setExplain(false);

Subquery subq = new Subquery();
subq.setFrom(cfg.getTable());
subq.setConfig(cfg);
Subquery subqy = new Subquery();
subqy.setFrom(cfg.getTable());
subqy.setConfig(cfg);

SQLConfig countSQLCfg = createSQLConfig();
countSQLCfg.setColumn(Arrays.asList("count(*):count"));
countSQLCfg.setFrom(subq);
countSQLCfg.setFrom(subqy);

rp = executeSQL(countSQLCfg, false);

Expand Down Expand Up @@ -1358,6 +1358,7 @@ else if (childKeys.length == 1 && JSONRequest.isTableKey(childKeys[0])) { //
JOIN_COPY_KEY_LIST.add(JSONRequest.KEY_COMBINE);
JOIN_COPY_KEY_LIST.add(JSONRequest.KEY_GROUP);
JOIN_COPY_KEY_LIST.add(JSONRequest.KEY_HAVING);
JOIN_COPY_KEY_LIST.add(JSONRequest.KEY_HAVING_AND);
JOIN_COPY_KEY_LIST.add(JSONRequest.KEY_ORDER);
JOIN_COPY_KEY_LIST.add(JSONRequest.KEY_RAW);
}
Expand Down

0 comments on commit 9776408

Please sign in to comment.