10000 解决 SQL JOIN 同名副表返回数据错乱,解决有时 SELECT 和 ON 中的表别名对应错误,解决 Oracle 某些情况下用了不允… · APIJSON/APIJSON@e5261ec · GitHub
[go: up one dir, main page]

Skip to content

Commit e5261ec

Browse files
committed
解决 SQL JOIN 同名副表返回数据错乱,解决有时 SELECT 和 ON 中的表别名对应错误,解决 Oracle 某些情况下用了不允许的 AS 别名;优化代码 - JOIN 副表未指定 @column 会导致冗余查询
1 parent 2f5d947 commit e5261ec

File tree

6 files changed

+183
-163
lines changed

6 files changed

+183
-163
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ public AbstractObjectParser parse(String name, boolean isReuse) throws Exception
290290
}
291291
else if (value instanceof JSONObject) { // JSONObject,往下一级提取
292292
if (childMap != null) { // 添加到childMap,最后再解析
293-
childMap.put(key, (JSONObject)value);
293+
childMap.put(key, (JSONObject) value);
294294
}
295295
else { // 直接解析并替换原来的,[]:{} 内必须直接解析,否则会因为丢掉count等属性,并且total@:"/[]/total"必须在[]:{} 后!
296296
JSON cache = index <= 0 || type != TYPE_ITEM || viceItem == null ? null : viceItem.getJSONObject(key);
@@ -457,10 +457,10 @@ else if (value instanceof String) { // //key{}@ getRealKey, 引用赋值路径
457457
if (isTable && (key.startsWith("@") == false || JSONRequest.TABLE_KEY_LIST.contains(key))) {
458458
Log.e(TAG, "onParse isTable && (key.startsWith(@) == false"
459459
+ " || JSONRequest.TABLE_KEY_LIST.contains(key)) >> return null;");
460+
// FIXME getCache() != null 时 return true,解决 RIGHT/OUTER/FOREIGN JOIN 主表无数据导致副表数据也不返回
460461
return false; // 获取不到就不用再做无效的 query 了。不考虑 Table:{Table:{}} 嵌套
461462
}
462463

463-
464464
Log.d(TAG, "onParse isTable(table) == false >> return true;");
465465
return true; // 舍去,对Table无影响
466466
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1734,7 +1734,7 @@ else if (join != null){
17341734
throw new IllegalArgumentException(e.getKey() + ":'/targetTable:targetAlias/targetKey' 中 targetAlias 值 " + targetAlias + " 不合法!必须满足英文单词变量名格式!");
17351735
}
17361736

1737-
targetTable = targetTableKey; // 主表允许别名
1737+
//targetTable = targetTableKey; // 主表允许别名
17381738
if (StringUtil.isName(targetTable) == false) {
17391739
throw new IllegalArgumentException(e.getKey() + ":'/targetTable/targetKey' 中 targetTable 值 " + targetTable + " 不合法!必须满足大写字母开头的表对象英文单词 key 格式!");
17401740
}
@@ -1760,6 +1760,7 @@ else if (join != null){
17601760

17611761
on.setOriginKey(originKey);
17621762
on.setOriginValue((String) refEntry.getValue());
1763+
on.setTargetTableKey(targetTableKey);
17631764
on.setTargetTable(targetTable);
17641765
on.setTargetAlias(targetAlias);
17651766
on.setTargetKey(targetKey);

0 commit comments

Comments
 (0)
0