Search in sources :

Example 1 with Loop

use of app.hongs.db.link.Loop in project HongsCORE by ihongs.

the class FetchCase method all.

/**
 * 查询并获取全部结果
 * @return
 * @throws HongsException
 */
public List all() throws HongsException {
    List<Map<String, Object>> ra = new ArrayList();
    Map<String, Object> ro;
    try (Loop rs = oll()) {
        while ((ro = rs.next()) != null) {
            ra.add(ro);
        }
    }
    return ra;
}
Also used : Loop(app.hongs.db.link.Loop) ArrayList(java.util.ArrayList) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with Loop

use of app.hongs.db.link.Loop in project HongsCORE by ihongs.

the class FormAction method getForkList.

public void getForkList(Table ft, Table ut, List list, String pid, String pre) throws HongsException {
    Loop units = pid == null ? ut.select("`" + ut.name + "`.`id`, `" + ut.name + "`.`name`").filter("`" + ut.name + "`.`pid` IS NULL").oll() : ut.select("`" + ut.name + "`.`id`, `" + ut.name + "`.`name`").filter("`" + ut.name + "`.`pid` = ?", pid).oll();
    while (units.hasNext()) {
        Map unit = units.next();
        Loop forms = ft.select("`" + ft.name + "`.`id`, `" + ft.name + "`.`name`").filter("`" + ft.name + "`.unit_id", pid).oll();
        while (forms.hasNext()) {
            Map form = forms.next();
            Map item = new HashMap();
            item.put("__name__", /**/
            form.get("id"));
            item.put("__text__", pre + form.get("name"));
            item.put("data-vk", "id");
            item.put("data-tk", "name");
            item.put("data-at", "centra/data/" + form.get("id") + "/search");
            item.put("data-al", "centra/data/" + form.get("id") + "/list4fork.html");
            list.add(item);
        }
        getForkList(ft, ut, list, (String) unit.get("id"), (String) unit.get("name") + "/");
    }
}
Also used : Loop(app.hongs.db.link.Loop) HashMap(java.util.HashMap) HashMap(java.util.HashMap) Map(java.util.Map)

Example 3 with Loop

use of app.hongs.db.link.Loop in project HongsCORE by ihongs.

the class DBFields method imports.

@Override
protected final void imports() throws HongsException {
    fields = new LinkedHashMap();
    Loop rs = db.query("SELECT * FROM `" + tn + "`", 0, 1);
    try {
        ResultSetMetaData md = rs.getMetaData();
        for (int i = 1; i <= md.getColumnCount(); i++) {
            Map field = new HashMap();
            field.put("type", md.getColumnType(i));
            field.put("size", md.getPrecision(i));
            field.put("scale", md.getScale(i));
            field.put("unsigned", !md.isSigned(i));
            field.put("required", md.isNullable(i) == ResultSetMetaData.columnNoNulls);
            field.put("autoIncrement", md.isAutoIncrement(i));
            field.put("caseSensitive", md.isCaseSensitive(i));
            // 用处不大的的属性:
            /*
        field.put("currency",       md.isCurrency(i));
        field.put("readOnly",       md.isReadOnly(i));
        field.put("writable",       md.isWritable(i));
        field.put("searchable",     md.isSearchable(i));
        field.put("tableName",      md.getTableName(i));
        field.put("schemaName",     md.getSchemaName(i));
        field.put("catalogName",    md.getCatalogName(i));
        field.put("label",          md.getColumnLable(i));
        field.put("typeName",       md.getColumnTypeName(i));
        field.put("className",      md.getColumnClassName(i));
        field.put("displaySize",    md.getColumnDisplaySize(i));
        */
            this.fields.put(md.getColumnName(i), field);
        }
    } catch (SQLException ex) {
        throw new HongsException(0x1071, ex);
    } finally {
        rs.close();
    }
}
Also used : Loop(app.hongs.db.link.Loop) ResultSetMetaData(java.sql.ResultSetMetaData) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) SQLException(java.sql.SQLException) HongsException(app.hongs.HongsException) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 4 with Loop

use of app.hongs.db.link.Loop in project HongsCORE by ihongs.

the class FetchMore method join.

/**
 * 获取关联数据
 * @param table 关联表
 * @param caze  附加查询
 * @param map   映射关系
 * @param col   关联字段
 * @throws app.hongs.HongsException
 */
public void join(Table table, FetchCase caze, Map<String, List> map, String col) throws HongsException {
    if (map.isEmpty()) {
        return;
    }
    DB db = table.db;
    String name = table.name;
    String tableName = table.tableName;
    boolean multi = caze.getOption("ASSOC_MULTI", false);
    boolean merge = caze.getOption("ASSOC_MERGE", false);
    boolean fills = caze.getOption("ASSOC_FILLS", false);
    if (null != caze.name && 0 != caze.name.length()) {
        name = caze.name;
    }
    // 获取id及行号
    Set ids = map.keySet();
    if (ids.isEmpty()) {
        // throw new HongsException(0x10c0, "Ids map is empty");
        return;
    }
    // 识别字段别名
    String rel = col;
    if (table.getFields().containsKey(col)) {
        col = "`" + name + "`.`" + col + "`";
    } else {
        Pattern pattern;
        Matcher matcher;
        do {
            pattern = Pattern.compile("^(.+?)(?:\\s+AS)?\\s+`?(.+?)`?$", Pattern.CASE_INSENSITIVE);
            matcher = pattern.matcher(col);
            if (matcher.find()) {
                col = matcher.group(1);
                rel = matcher.group(2);
                break;
            }
            pattern = Pattern.compile("^(.+?)\\.\\s*`?(.+?)`?$");
            matcher = pattern.matcher(col);
            if (matcher.find()) {
                col = matcher.group(0);
                rel = matcher.group(2);
                break;
            }
        } while (false);
    }
    // 构建查询结构
    caze.filter(col + " IN (?)", ids).from(tableName, name);
    // 获取关联数据
    Loop rs = db.queryMore(caze);
    /**
     * 根据之前的 ID=>行 关系以表名为键放入列表中
     */
    String sid;
    List lst;
    Map row, sub;
    // 登记已关联上的ID
    Set idz = new HashSet();
    // 暂存字段类型字典
    Map tdz = rs.getTypeDict();
    if (!multi) {
        while ((sub = rs.next()) != null) {
            sid = Synt.asString(sub.get(rel));
            lst = map.get(sid);
            idz.add(sid);
            if (lst == null) {
                // throw new HongsException(0x10c0, "Line nums is null");
                continue;
            }
            Iterator it = lst.iterator();
            while (it.hasNext()) {
                row = (Map) it.next();
                if (!merge) {
                    row.put(name, sub);
                } else {
                    sub.putAll(row);
                    row.putAll(sub);
                }
            }
        }
    } else {
        while ((sub = rs.next()) != null) {
            sid = Synt.asString(sub.get(rel));
            lst = map.get(sid);
            idz.add(sid);
            if (lst == null) {
                // throw new HongsException(0x10c0, "Line nums is null");
                continue;
            }
            Iterator it = lst.iterator();
            while (it.hasNext()) {
                row = (Map) it.next();
                if (row.containsKey(name)) {
                    ((List) row.get(name)).add(sub);
                } else {
                    List lzt = new ArrayList();
                    row.put(name, lzt);
                    lzt.add(sub);
                }
            }
        }
    }
    if (!fills) {
        return;
    }
    if (!multi && merge) {
        Set<String> padSet = tdz.keySet();
        for (Map.Entry<String, List> et : map.entrySet()) {
            String colKey = et.getKey();
            if (idz.contains(colKey)) {
                continue;
            }
            List<Map> mapLst = et.getValue();
            for (Map mapRow : mapLst) {
                for (String k : padSet) {
                    if (!mapRow.containsKey(k)) {
                        mapRow.put(k, null);
                    }
                }
            }
        }
    } else {
        Object padDat = !multi ? new HashMap() : new ArrayList();
        for (Map.Entry<String, List> et : map.entrySet()) {
            String colKey = et.getKey();
            if (idz.contains(colKey)) {
                continue;
            }
            List<Map> mapLst = et.getValue();
            for (Map mapRow : mapLst) {
                if (!mapRow.containsKey(name)) {
                    mapRow.put(name, padDat);
                }
            }
        }
    }
}
Also used : Loop(app.hongs.db.link.Loop) Pattern(java.util.regex.Pattern) Set(java.util.Set) HashSet(java.util.HashSet) Matcher(java.util.regex.Matcher) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) DB(app.hongs.db.DB) HashSet(java.util.HashSet)

Aggregations

Loop (app.hongs.db.link.Loop)4 HashMap (java.util.HashMap)4 Map (java.util.Map)4 ArrayList (java.util.ArrayList)2 HongsException (app.hongs.HongsException)1 DB (app.hongs.db.DB)1 ResultSetMetaData (java.sql.ResultSetMetaData)1 SQLException (java.sql.SQLException)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Set (java.util.Set)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1