use of app.hongs.db.Table in project HongsCORE by ihongs.
the class AssocMore method fetchMore.
private static void fetchMore(Table table, FetchCase caze, List rows2, List lnks2) throws HongsException {
Set tns = (Set) caze.getOption("ASSOCS");
Set tps = (Set) caze.getOption("ASSOC_TYPES");
FetchMore join = new FetchMore(rows2);
while (!lnks2.isEmpty()) {
List lnkz2 = new ArrayList();
for (Map assoc : (List<Map>) lnks2) {
String tp = (String) assoc.get("type");
String jn = (String) assoc.get("join");
String an = (String) assoc.get("name");
String rn = (String) assoc.get("tableName");
String pn = (String) assoc.get("assocName");
if (rn == null || rn.length() == 0)
rn = an;
if (rn == null || rn.length() == 0)
continue;
// 检查是否许可关联
if (tns != null && !tns.contains(rn) && !tns.contains(an)) {
continue;
}
if (tps != null && !tps.contains(tp)) {
continue;
}
Map assocs2 = (Map) assoc.get("assocs");
String fk = (String) assoc.get("foreignKey");
String pk = (String) assoc.get("primaryKey");
Table table2 = table.db.getTable(rn);
FetchCase caze2 = caze.gotJoin(an).from(table2.tableName);
// 准备关联关系
if ("BLS_TO".equals(tp)) {
// 上级外键连接下级主键, 交换主外键
String xk = fk;
fk = pk;
pk = xk;
if (fk == null)
fk = table2.primaryKey;
caze2.setOption("ASSOC_MULTI", false);
} else if ("HAS_ONE".equals(tp)) {
// 上级主键连接下级外键
if (pk == null)
pk = table.primaryKey;
caze2.setOption("ASSOC_MULTI", false);
} else if ("HAS_MANY".equals(tp)) {
// 上级主键连接下级外键
if (pk == null)
pk = table.primaryKey;
caze2.setOption("ASSOC_MULTI", true);
} else if ("HAS_MORE".equals(tp)) {
// 上级主键连接下级外键
if (pk == null)
pk = table.primaryKey;
caze2.setOption("ASSOC_MULTI", true);
// 将下层数据合并到本层
if (assocs2 != null) {
for (Map ass : (Collection<Map>) assocs2.values()) {
if (ass.containsKey("join") != true) {
ass.put("join", "MERGE");
}
}
}
} else {
throw new HongsException(0x10c2, "Unrecognized assoc type '" + tp + "'");
}
caze2.setOption("ASSOC_MERGE", "MERGE".equals(jn));
if (assocs2 != null) {
fetchMore(table2, caze2, assocs2, lnkz2, null);
}
checkCase(caze2, (Map) assoc.get("params"), null, null, null);
if (pn != null && !pn.equals("") && !pn.equals(caze.getName())) {
pk = pn + "." + pk;
}
join.join(table2, caze2, pk, fk);
}
lnks2 = lnkz2;
}
}
Aggregations