Skip to content

Commit f21a1a9

Browse files
committed
Server:增强 LEFT JOIN 和 RIGHT JOIN ,支持 "join": { "</User/id@": { "@order":"date-" } } 定制子查询外层的 ORDER BY
1 parent 6566821 commit f21a1a9

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

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

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ public AbstractSQLConfig setGroup(String group) {
304304
return this;
305305
}
306306
@JSONField(serialize = false)
307-
public String getGroupString() {
307+
public String getGroupString(boolean hasPrefix) {
308308
//TODO 加上子表的group
309309

310310
group = StringUtil.getTrimedString(group);
@@ -346,7 +346,7 @@ public AbstractSQLConfig setHaving(String having) {
346346
* @return HAVING conditoin0 AND condition1 OR condition2 ...
347347
*/
348348
@JSONField(serialize = false)
349-
public String getHavingString() {
349+
public String getHavingString(boolean hasPrefix) {
350350
having = StringUtil.getTrimedString(having);
351351
if(having.isEmpty()) {
352352
return "";
@@ -434,24 +434,50 @@ public AbstractSQLConfig setOrder(String order) {
434434
return this;
435435
}
436436
@JSONField(serialize = false)
437-
public String getOrderString() {
438-
//TODO 加上子表的order
437+
public String getOrderString(boolean hasPrefix) {
438+
//加上子表的 Order
439+
String joinOrder = "";
440+
if (joinList != null) {
441+
SQLConfig ecfg;
442+
SQLConfig cfg;
443+
String c;
444+
boolean first = true;
445+
for (Join j : joinList) {
446+
if (j.isAppJoin()) {
447+
continue;
448+
}
439449

440-
order = StringUtil.getTrimedString(order);
441-
if (order.isEmpty()) {
442-
return "";
450+
ecfg = j.getOutterConfig();
451+
if (ecfg != null && ecfg.getOrder() != null) { //优先级更高
452+
cfg = ecfg;
453+
}
454+
else {
455+
cfg = j.getJoinConfig();
456+
}
457+
458+
cfg.setAlias(cfg.getTable());
459+
460+
c = ((AbstractSQLConfig) cfg).getOrderString(false);
461+
if (StringUtil.isEmpty(c, true) == false) {
462+
joinOrder += (first ? "" : ", ") + c;
463+
first = false;
464+
}
465+
466+
}
443467
}
468+
469+
470+
order = StringUtil.getTrimedString(order);
444471
if (order.contains("+")) {//replace没有包含的replacement会崩溃
445472
order = order.replaceAll("\\+", " ASC ");
446473
}
447474
if (order.contains("-")) {
448475
order = order.replaceAll("-", " DESC ");
449476
}
450477

451-
//TODO column, order, group 都改用 List<String> 存储!!!,并且每个字段都要加 Table. 前缀!
452478
String[] keys = StringUtil.split(order);
453479
if (keys == null || keys.length <= 0) {
454-
return "";
480+
return StringUtil.isEmpty(joinOrder, true) ? "" : (hasPrefix ? " ORDER BY " : "") + joinOrder;
455481
}
456482

457483
String origin;
@@ -477,7 +503,7 @@ public String getOrderString() {
477503
keys[i] = getKey(origin) + sort;
478504
}
479505

480-
return " ORDER BY " + StringUtil.getString(keys);
506+
return (hasPrefix ? " ORDER BY " : "") + StringUtil.concat(StringUtil.getString(keys), joinOrder, ", ");
481507
}
482508

483509

@@ -543,7 +569,7 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
543569
return "(" + s + ")";
544570
case GET:
545571
case GETS:
546-
boolean isQuery = RequestMethod.isQueryMethod(method);
572+
boolean isQuery = RequestMethod.isQueryMethod(method); //TODO 这个有啥用?上面应是 getMethod 的值 GET 和 GETS 了。
547573
String joinColumn = "";
548574
if (isQuery && joinList != null) {
549575
SQLConfig ecfg;
@@ -568,10 +594,10 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
568594
c = ((AbstractSQLConfig) cfg).getColumnString(true);
569595
if (StringUtil.isEmpty(c, true) == false) {
570596
joinColumn += (first ? "" : ", ") + c;
597+
first = false;
571598
}
572599

573600
inSQLJoin = true;
574-
first = false;
575601
}
576602
}
577603

@@ -1850,7 +1876,7 @@ private static String getConditionString(String column, String table, AbstractSQ
18501876

18511877
String condition = table + config.getJoinString() + where + (
18521878
RequestMethod.isGetMethod(config.getMethod(), true) == false ?
1853-
"" : config.getGroupString() + config.getHavingString() + config.getOrderString()
1879+
"" : config.getGroupString(true) + config.getHavingString(true) + config.getOrderString(true)
18541880
)
18551881
; //+ config.getLimitString();
18561882

0 commit comments

Comments
 (0)