Skip to content

Commit 15cfe4f

Browse files
committed
Server:增强 LEFT JOIN 和 RIGHT JOIN ,支持 "join": { "</Comment/momentId@": { "@having":"momentId>100" } } 定制子查询外层的 HAVING
1 parent 58b4f50 commit 15cfe4f

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

APIJSON-Java-Server/APIJSONORM/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -373,14 +373,41 @@ public AbstractSQLConfig setHaving(String having) {
373373
*/
374374
@JSONField(serialize = false)
375375
public String getHavingString(boolean hasPrefix) {
376-
having = StringUtil.getTrimedString(having);
377-
if(having.isEmpty()) {
378-
return "";
379-
}
376+
//加上子表的 having
377+
String joinHaving = "";
378+
if (joinList != null) {
379+
SQLConfig ecfg;
380+
SQLConfig cfg;
381+
String c;
382+
boolean first = true;
383+
for (Join j : joinList) {
384+
if (j.isAppJoin()) {
385+
continue;
386+
}
380387

388+
ecfg = j.getOutterConfig();
389+
if (ecfg != null && ecfg.getHaving() != null) { //优先级更高
390+
cfg = ecfg;
391+
}
392+
else {
393+
cfg = j.getJoinConfig();
394+
}
395+
396+
cfg.setAlias(cfg.getTable());
397+
398+
c = ((AbstractSQLConfig) cfg).getHavingString(false);
399+
if (StringUtil.isEmpty(c, true) == false) {
400+
joinHaving += (first ? "" : ", ") + c;
401+
first = false;
402+
}
403+
404+
}
405+
}
406+
407+
having = StringUtil.getTrimedString(having);
381408
String[] keys = StringUtil.split(having, ";");
382409
if (keys == null || keys.length <= 0) {
383-
return "";
410+
return StringUtil.isEmpty(joinHaving, true) ? "" : (hasPrefix ? " HAVING " : "") + joinHaving;
384411
}
385412

386413
String expression;
@@ -444,7 +471,8 @@ public String getHavingString(boolean hasPrefix) {
444471
keys[i] = method + "(" + StringUtil.getString(ckeys) + ")" + suffix;
445472
}
446473

447-
return " HAVING " + StringUtil.getString(keys, AND); //TODO 支持 OR, NOT 参考 @combine:"&key0,|key1,!key2"
474+
//TODO 支持 OR, NOT 参考 @combine:"&key0,|key1,!key2"
475+
return (hasPrefix ? " HAVING " : "") + StringUtil.concat(StringUtil.getString(keys, AND), joinHaving, AND);
448476
}
449477

450478
@Override

0 commit comments

Comments
 (0)