Personal_wikis: Update invalid page_ids to valid page_ids

pull/620/head
gnosygnu 7 years ago
parent 95632e0e98
commit caa1eb2237

@ -92,9 +92,8 @@ public class Xopg_db_mgr {
// delete from page
core_db.Tbl__page().Delete(page_id);
}
public static void Update_page_id(Xowe_wiki wiki, int old_id, int new_id) {
public static void Update_page_id(Xow_db_mgr db_mgr, int old_id, int new_id) {
// init vars
Xow_db_mgr db_mgr = wiki.Data__core_mgr();
Xow_db_file core_db = db_mgr.Db__core();
Xowd_page_itm tmp = new Xowd_page_itm();
@ -118,7 +117,9 @@ public class Xopg_db_mgr {
gplx.xowa.addons.wikis.ctgs.edits.Xoctg_edit_mgr.Update_page_id(db_mgr, ns_id, old_id, new_id);
// search_link
Srch_search_addon.Get(wiki).Update_links(ns_id, old_id, new_id);
gplx.xowa.addons.wikis.searchs.dbs.Srch_db_mgr srch_db_mgr = new gplx.xowa.addons.wikis.searchs.dbs.Srch_db_mgr(db_mgr);
srch_db_mgr.Update_links(ns_id, old_id, new_id);
// NOTE: should clear search_results_cache, but for now, update_page_id is only called as a maint proc when wiki is loaded
// delete from page
core_db.Tbl__page().Update_page_id(old_id, new_id);

@ -84,17 +84,28 @@ public class Xow_wiki_factory {
core_db_props.Verify(Bool_.N, String_.new_u8(domain), core_db_url);
// check for page_ids < 1
// Xowd_page_tbl page_tbl = new Xowd_page_tbl(core_db_conn, Bool_.N);
// int[] page_ids = page_tbl.Select_invalid();
// int page_ids_len = page_ids.length;
// if (page_ids_len > 0) {
// int next_id = cfg_tbl.Select_int("db", "page.id_next");
// for (int i = 0; i < page_ids_len; i++) {
// int old_page_id = page_ids[i];
// int new_page_id = next_id + i;
// Xopg_db_mgr.Update_page_id(wiki, old_id, new_id);
// }
// cfg_tbl.Upsert_int("db", "page.id_next", next_id + page_ids_len);
// }
// select from page_tbl for page_id < 1
Xow_db_mgr db_mgr = new Xow_db_mgr(dir_url, String_.new_u8(domain));
db_mgr.Init_by_load(core_db_url);
Xowd_page_tbl page_tbl = db_mgr.Db__core().Tbl__page();
List_adp page_ids_list = List_adp_.New();
Db_rdr page_rdr = page_tbl.Conn().Stmt_sql(Db_sql_.Make_by_fmt(String_.Ary("SELECT page_id FROM page WHERE page_id < 1"))).Exec_select__rls_auto();
try {
while (page_rdr.Move_next()) {
page_ids_list.Add(page_rdr.Read_int("page_id"));
}
} finally {page_rdr.Rls();}
// update page_id if any found
int page_ids_len = page_ids_list.Len();
if (page_ids_len > 0) {
int next_id = db_mgr.Db__core().Tbl__cfg().Select_int("db", "page.id_next");
for (int i = 0; i < page_ids_len; i++) {
int old_page_id = (int)page_ids_list.Get_at(i);
int new_page_id = next_id + i;
Xopg_db_mgr.Update_page_id(db_mgr, old_page_id, new_page_id);
}
db_mgr.Db__core().Tbl__cfg().Upsert_int("db", "page.id_next", next_id + page_ids_len);
}
}
}

@ -34,19 +34,10 @@ public class Srch_search_addon implements Xoax_addon_itm, Srch_search_addon_api
public void Search(Srch_search_qry qry, Srch_rslt_cbk cbk) {search_mgr.Search(qry, cbk);}
public void Clear_rslts_cache() {search_mgr.Clear_rslts_cache();}
public void Delete_links(int ns_id, int page_id) {
if (db_mgr.Tbl__link__len() == 0) return;// NOTE: personal_wikis may not have search_link; exit early else assert will fail; DATE:2017-02-15
int search_link_db_id = db_mgr.Tbl__link__get_idx(ns_id);
Srch_link_tbl search_link_tbl = db_mgr.Tbl__link__get_at(search_link_db_id);
if (search_link_tbl.conn.Meta_tbl_exists("search_link")) { // NOTE: personal_wikis may not have search_link; exit early else delete will fail; DATE:2017-02-15
search_link_tbl.Delete(page_id);
}
this.Clear_rslts_cache();
}
public void Update_links(int ns_id, int old_id, int new_id) {
int search_link_db_id = db_mgr.Tbl__link__get_idx(ns_id);
Srch_link_tbl search_link_tbl = db_mgr.Tbl__link__get_at(search_link_db_id);
if (search_link_tbl.conn.Meta_tbl_exists("search_link")) { // NOTE: personal_wikis may not have search_link; exit early else delete will fail; DATE:2017-02-15
search_link_tbl.Update_page_id(old_id, new_id);
}
search_link_tbl.Delete(page_id);
this.Clear_rslts_cache();
}

@ -99,6 +99,13 @@ public class Srch_db_mgr {
Tbl__link__ary__new(tbl__lreg, tbl__link__ary, db_mgr, 1, Bool_.N, null);
}
}
public void Update_links(int ns_id, int old_id, int new_id) {
if (this.Tbl__link__len() == 0) return;// NOTE: personal_wikis may not have search_link; exit early else assert will fail; DATE:2017-02-15
int search_link_db_id = this.Tbl__link__get_idx(ns_id);
Srch_link_tbl search_link_tbl = this.Tbl__link__get_at(search_link_db_id);
search_link_tbl.Update_page_id(old_id, new_id);
}
private static Srch_link_tbl Tbl__link__ary__set(Srch_link_tbl[] ary, int idx, Xow_db_file db) {
Srch_link_tbl tbl = new Srch_link_tbl(db.Conn());
ary[idx] = tbl;

@ -20,7 +20,7 @@ public class Xopg_wtxt_data {
public Xopg_toc_mgr Toc() {return toc;} private final Xopg_toc_mgr toc = new Xopg_toc_mgr();
public int Ctgs__len() {return ctg_hash == null ? 0 : ctg_hash.Len();} private Ordered_hash ctg_hash;
public Xoa_ttl Ctgs__get_at(int i) {return (Xoa_ttl)ctg_hash.Get_at(i);}
public Xoa_ttl[] Ctgs__to_ary() {return (Xoa_ttl[])ctg_hash.To_ary(Xoa_ttl.class);}
public Xoa_ttl[] Ctgs__to_ary() {return ctg_hash == null ? new Xoa_ttl[0] : (Xoa_ttl[])ctg_hash.To_ary(Xoa_ttl.class);}
public void Ctgs__add(Xoa_ttl ttl) {
if (ctg_hash == null) ctg_hash = Ordered_hash_.New_bry();
ctg_hash.Add_if_dupe_use_1st(ttl.Full_db(), ttl);

Loading…
Cancel
Save