Высоты ООП

    Date: 04/12/07 (Code WTF)    Keywords: sql

     

    	/**
    
    * @param sql
    * @param tpl
    * @param id - ==0 это корневой шаблон, >0 - это обновление строки подшаблона, <0 - это добавление строки подшаблона
    * @param pid
    * @param values
    * @param tableNameSuffix
    * @return
    * @throws Exception
    */
    public static long storeTplValues(
    SqlDb sql,
    UnitTemplate tpl,
    long id,
    long pid,
    Map< Long, Object> values,
    String tableNameSuffix) throws SQLException {

    Object params[] = new Object[tpl.getNumFieldsNotTemplate() + 1/*for pid*/ + (id!=0?1:0)/*for insert or update*/];
    StringBuffer fieldsBuf = new StringBuffer();
    StringBuffer valuesBuf = new StringBuffer();
    int i = 0;
    for(UnitTemplateField f : tpl.fields) {
    if(!f.isTemplate()) {
    if(i>0) fieldsBuf.append(',');
    fieldsBuf.append("field").append(f.id);
    if(id >= 0) fieldsBuf.append("=?"); // for update or root-template
    valuesBuf.append("?,");
    //System.out.println(f.id + ": "+ values.get(f.id).getClass().getName());
    params[i++] = f.getValue(values);
    }
    }
    params[i++] = pid;

    String tableName = TemplateTable.getTableName(tpl, tableNameSuffix);
    if(id < 0) {
    // new sub-template item
    id = GlobalId.getId(sql);
    params[i++] = id;
    sql.insert(
    "INSERT INTO "+tableName+
    " ("+fieldsBuf.toString()+", pid, id)" +
    "VALUES("+valuesBuf.toString()+"?,?);",
    params
    );
    return id; // уровни тройной вложенности пока не поддерживаются!
    } else
    if(id > 0) {
    // update sup-template item
    params[i++] = id;
    sql.update(
    "UPDATE "+tableName+" SET "+fieldsBuf.toString()+",pid=? WHERE id=?;",
    params);
    return id; // уровни тройной вложенности пока не поддерживаются!
    } else {
    // main-template item
    id = pid;
    if(0 == sql.update("UPDATE "+tableName+" SET "+fieldsBuf.toString()+" WHERE pid=?;", params)) {
    sql.insert(
    "INSERT INTO "+tableName+
    " ("+fieldsBuf.toString().replaceAll("=\\?", "")+",pid) " +
    "VALUES("+valuesBuf.toString()+"?);",
    params);
    }
    }

    for(UnitTemplateField f : tpl.fields) {
    if(f.isTemplate()) {
    Map< Long, Map< Long, Object>> list = (Map< Long, Map< Long, Object>>)values.get(f.id);
    if(list == null) continue;
    Vector>> listCopy = new Vector< Map.Entry< Long, Map< Long, Object>>>();
    listCopy.addAll(list.entrySet());

    // имя таблицы подшаблона
    String subTableName = TemplateTable.getTableNameSuffix(f.id, tableNameSuffix);
    // подшаблон
    UnitTemplate subTpl = UnitTemplate.getTemplate(Long.parseLong(f.defValue));

    for(Map.Entry> e : listCopy) {
    if(e.getValue() == null) {
    // строку подшаблона удалили
    sql.update("DELETE FROM " + TemplateTable.getTableName(subTpl, subTableName) + " WHERE id=?", e.getKey());
    continue;
    }

    long key = storeTplValues(
    sql,
    subTpl,
    e.getKey(),
    id,
    e.getValue(),
    subTableName
    );

    if(e.getKey() < 0) {
    list.put(key, e.getValue());
    list.remove(e.getKey());
    }
    }
    }
    }

    return id;
    }


    Если кто не понимает "где WTF" ответьте на вопрос почему

    ERROR: column "field21053265" of relation "place21053089" does not exist

    Source: http://community.livejournal.com/code_wtf/80468.html

« хтмэ-эльный... || Да зраствует... »


antivirus | apache | asp | blogging | browser | bugtracking | cms | crm | css | database | ebay | ecommerce | google | hosting | html | java | jsp | linux | microsoft | mysql | offshore | offshoring | oscommerce | php | postgresql | programming | rss | security | seo | shopping | software | spam | spyware | sql | technology | templates | tracker | virus | web | xml | yahoo | home