Skip to content

Commit f7b82fd

Browse files
committed
& INNER JOIN 支持单独设置 JOIN 语句中的字段、条件、分组、聚合、排序等
和 < LEFT JOIN, > RIGHT JOIN 一样,例如 "join": { "&/User/id": { "id>": 82001, "@order": "id+" } }
1 parent 5e709ed commit f7b82fd

File tree

1 file changed

+57
-54
lines changed

1 file changed

+57
-54
lines changed

APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,25 +1036,27 @@ public String getGroupString(boolean hasPrefix) {
10361036
//加上子表的 group
10371037
String joinGroup = "";
10381038
if (joinList != null) {
1039-
SQLConfig cfg;
1040-
String c;
10411039
boolean first = true;
10421040
for (Join j : joinList) {
10431041
if (j.isAppJoin()) {
10441042
continue;
10451043
}
10461044

1047-
cfg = j.isLeftOrRightJoin() ? j.getOuterConfig() : j.getJoinConfig();
1048-
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1049-
cfg.setAlias(cfg.getTable());
1050-
}
1045+
SQLConfig ocfg = j.getOuterConfig();
1046+
SQLConfig cfg = (ocfg != null && ocfg.getGroup() != null) || j.isLeftOrRightJoin() ? ocfg : j.getJoinConfig();
10511047

1052-
c = ((AbstractSQLConfig) cfg).getGroupString(false);
1053-
if (StringUtil.isEmpty(c, true) == false) {
1054-
joinGroup += (first ? "" : ", ") + c;
1055-
first = false;
1056-
}
1048+
if (cfg != null) {
1049+
cfg.setMain(false).setKeyPrefix(true);
1050+
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1051+
cfg.setAlias(cfg.getTable());
1052+
}
1053+
String c = ((AbstractSQLConfig) cfg).getGroupString(false);
10571054

1055+
if (StringUtil.isEmpty(c, true) == false) {
1056+
joinGroup += (first ? "" : ", ") + c;
1057+
first = false;
1058+
}
1059+
}
10581060
}
10591061
}
10601062

@@ -1098,25 +1100,27 @@ public String getHavingString(boolean hasPrefix) {
10981100
//加上子表的 having
10991101
String joinHaving = "";
11001102
if (joinList != null) {
1101-
SQLConfig cfg;
1102-
String c;
11031103
boolean first = true;
11041104
for (Join j : joinList) {
11051105
if (j.isAppJoin()) {
11061106
continue;
11071107
}
11081108

1109-
cfg = j.isLeftOrRightJoin() ? j.getOuterConfig() : j.getJoinConfig();
1110-
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1111-
cfg.setAlias(cfg.getTable());
1112-
}
1109+
SQLConfig ocfg = j.getOuterConfig();
1110+
SQLConfig cfg = (ocfg != null && ocfg.getHaving() != null) || j.isLeftOrRightJoin() ? ocfg : j.getJoinConfig();
1111+
1112+
if (cfg != null) {
1113+
cfg.setMain(false).setKeyPrefix(true);
1114+
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1115+
cfg.setAlias(cfg.getTable());
1116+
}
1117+
String c = ((AbstractSQLConfig) cfg).getHavingString(false);
11131118

1114-
c = ((AbstractSQLConfig) cfg).getHavingString(false);
1115-
if (StringUtil.isEmpty(c, true) == false) {
1116-
joinHaving += (first ? "" : ", ") + c;
1117-
first = false;
1119+
if (StringUtil.isEmpty(c, true) == false) {
1120+
joinHaving += (first ? "" : ", ") + c;
1121+
first = false;
1122+
}
11181123
}
1119-
11201124
}
11211125
}
11221126

@@ -1255,25 +1259,27 @@ public String getOrderString(boolean hasPrefix) {
12551259
//加上子表的 order
12561260
String joinOrder = "";
12571261
if (joinList != null) {
1258-
SQLConfig cfg;
1259-
String c;
12601262
boolean first = true;
12611263
for (Join j : joinList) {
12621264
if (j.isAppJoin()) {
12631265
continue;
12641266
}
12651267

1266-
cfg = j.isLeftOrRightJoin() ? j.getOuterConfig() : j.getJoinConfig();
1267-
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1268-
cfg.setAlias(cfg.getTable());
1269-
}
1268+
SQLConfig ocfg = j.getOuterConfig();
1269+
SQLConfig cfg = (ocfg != null && ocfg.getOrder() != null) || j.isLeftOrRightJoin() ? ocfg : j.getJoinConfig();
12701270

1271-
c = ((AbstractSQLConfig) cfg).getOrderString(false);
1272-
if (StringUtil.isEmpty(c, true) == false) {
1273-
joinOrder += (first ? "" : ", ") + c;
1274-
first = false;
1275-
}
1271+
if (cfg != null) {
1272+
cfg.setMain(false).setKeyPrefix(true);
1273+
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1274+
cfg.setAlias(cfg.getTable());
1275+
}
1276+
String c = ((AbstractSQLConfig) cfg).getOrderString(false);
12761277

1278+
if (StringUtil.isEmpty(c, true) == false) {
1279+
joinOrder += (first ? "" : ", ") + c;
1280+
first = false;
1281+
}
1282+
}
12771283
}
12781284
}
12791285

@@ -1499,41 +1505,38 @@ public String getColumnString(boolean inSQLJoin) throws Exception {
14991505
case GETS:
15001506
String joinColumn = "";
15011507
if (joinList != null) {
1502-
SQLConfig ecfg;
1503-
SQLConfig cfg;
1504-
String c;
15051508
boolean first = true;
15061509
for (Join j : joinList) {
15071510
if (j.isAppJoin()) {
15081511
continue;
15091512
}
15101513

1511-
if (j.isLeftOrRightJoin()) {
1514+
SQLConfig ocfg = j.getOuterConfig();
1515+
boolean isEmpty = ocfg == null || ocfg.getColumn() == null;
1516+
boolean isLeftOrRightJoin = j.isLeftOrRightJoin();
1517+
1518+
if (isEmpty && isLeftOrRightJoin) {
15121519
// 改为 SELECT ViceTable.* 解决 SELECT sum(ViceTable.id) LEFT/RIGHT JOIN (SELECT sum(id) FROM ViceTable...) AS ViceTable
15131520
// 不仅导致 SQL 函数重复计算,还有时导致 SQL 报错或对应字段未返回
15141521
String quote = getQuote();
15151522
joinColumn += (first ? "" : ", ") + quote + (StringUtil.isEmpty(j.getAlias(), true) ? j.getTable() : j.getAlias()) + quote + ".*";
15161523
first = false;
15171524
} else {
1518-
ecfg = j.getOuterConfig();
1519-
if (ecfg != null && ecfg.getColumn() != null) { //优先级更高
1520-
cfg = ecfg;
1521-
}
1522-
else {
1523-
cfg = j.getJoinConfig();
1524-
}
1525-
1526-
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1527-
cfg.setAlias(cfg.getTable());
1528-
}
1529-
1530-
c = ((AbstractSQLConfig) cfg).getColumnString(true);
1531-
if (StringUtil.isEmpty(c, true) == false) {
1532-
joinColumn += (first ? "" : ", ") + c;
1533-
first = false;
1525+
SQLConfig cfg = isLeftOrRightJoin == false && isEmpty ? j.getJoinConfig() : ocfg;
1526+
if (cfg != null) {
1527+
cfg.setMain(false).setKeyPrefix(true);
1528+
if (StringUtil.isEmpty(cfg.getAlias(), true)) {
1529+
cfg.setAlias(cfg.getTable());
1530+
}
1531+
1532+
String c = ((AbstractSQLConfig) cfg).getColumnString(true);
1533+
if (StringUtil.isEmpty(c, true) == false) {
1534+
joinColumn += (first ? "" : ", ") + c;
1535+
first = false;
1536+
}
15341537
}
15351538
}
1536-
1539+
15371540
inSQLJoin = true;
15381541
}
15391542
}

0 commit comments

Comments
 (0)