Skip to content

Commit 58b4f50

Browse files
committed
Server:增强 LEFT JOIN 和 RIGHT JOIN ,支持 "join": { "</Comment/momentId@": { "@group":"userId" } } 定制子查询外层的 GROUP BY
1 parent f21a1a9 commit 58b4f50

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

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

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -305,16 +305,42 @@ public AbstractSQLConfig setGroup(String group) {
305305
}
306306
@JSONField(serialize = false)
307307
public String getGroupString(boolean hasPrefix) {
308-
//TODO 加上子表的group
308+
//加上子表的 group
309+
String joinGroup = "";
310+
if (joinList != null) {
311+
SQLConfig ecfg;
312+
SQLConfig cfg;
313+
String c;
314+
boolean first = true;
315+
for (Join j : joinList) {
316+
if (j.isAppJoin()) {
317+
continue;
318+
}
309319

310-
group = StringUtil.getTrimedString(group);
311-
if (group.isEmpty()) {
312-
return "";
313-
}
320+
ecfg = j.getOutterConfig();
321+
if (ecfg != null && ecfg.getGroup() != null) { //优先级更高
322+
cfg = ecfg;
323+
}
324+
else {
325+
cfg = j.getJoinConfig();
326+
}
327+
328+
cfg.setAlias(cfg.getTable());
329+
330+
c = ((AbstractSQLConfig) cfg).getGroupString(false);
331+
if (StringUtil.isEmpty(c, true) == false) {
332+
joinGroup += (first ? "" : ", ") + c;
333+
first = false;
334+
}
314335

336+
}
337+
}
338+
339+
340+
group = StringUtil.getTrimedString(group);
315341
String[] keys = StringUtil.split(group);
316342
if (keys == null || keys.length <= 0) {
317-
return "";
343+
return StringUtil.isEmpty(joinGroup, true) ? "" : (hasPrefix ? " GROUP BY " : "") + joinGroup;
318344
}
319345

320346
for (int i = 0; i < keys.length; i++) {
@@ -327,7 +353,7 @@ public String getGroupString(boolean hasPrefix) {
327353
keys[i] = getKey(keys[i]);
328354
}
329355

330-
return " GROUP BY " + StringUtil.getString(keys);
356+
return (hasPrefix ? " GROUP BY " : "") + StringUtil.concat(StringUtil.getString(keys), joinGroup, ", ");
331357
}
332358

333359
@Override
@@ -435,7 +461,7 @@ public AbstractSQLConfig setOrder(String order) {
435461
}
436462
@JSONField(serialize = false)
437463
public String getOrderString(boolean hasPrefix) {
438-
//加上子表的 Order
464+
//加上子表的 order
439465
String joinOrder = "";
440466
if (joinList != null) {
441467
SQLConfig ecfg;

0 commit comments

Comments
 (0)