Search in sources :

Example 21 with Table

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;
    }
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) Table(app.hongs.db.Table) HongsException(app.hongs.HongsException) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

Table (app.hongs.db.Table)21 Map (java.util.Map)19 HashMap (java.util.HashMap)14 HashSet (java.util.HashSet)11 Set (java.util.Set)10 HongsException (app.hongs.HongsException)7 DB (app.hongs.db.DB)5 ArrayList (java.util.ArrayList)5 List (java.util.List)5 FetchCase (app.hongs.db.util.FetchCase)4 Iterator (java.util.Iterator)3 ActionHelper (app.hongs.action.ActionHelper)2 Action (app.hongs.action.anno.Action)2 Matcher (java.util.regex.Matcher)2 Pattern (java.util.regex.Pattern)2 Document (org.apache.lucene.document.Document)2 FormSet (app.hongs.action.FormSet)1 Verify (app.hongs.action.anno.Verify)1 Cmdlet (app.hongs.cmdlet.anno.Cmdlet)1 RoleSet (app.hongs.serv.auth.RoleSet)1