- do {
- LedgerAccount acc = new LedgerAccount(name);
- db.execSQL("replace into accounts(profile, name, name_upper, level, keep) values(?, " +
- "?, ?, ?, 1)",
- new Object[]{this.uuid, name, name.toUpperCase(), acc.getLevel()});
- name = acc.getParentName();
- } while (name != null);
+ // replace into is a bad idea because it would reset hidden to its default value
+ // we like the default, but for new accounts only
+ db.execSQL("update accounts set level = ?, keep = 1 where profile=? and name = ?",
+ new Object[]{acc.getLevel(), uuid, acc.getName()});
+ db.execSQL("insert into accounts(profile, name, name_upper, parent_name, level) " +
+ "select ?,?,?,?,? where (select changes() = 0)",
+ new Object[]{uuid, acc.getName(), acc.getName().toUpperCase(), acc.getParentName(),
+ acc.getLevel()
+ });