1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-09-29 23:10:52 +00:00

Personal_wikis: Update invalid page_ids to valid page_ids

This commit is contained in:
gnosygnu 2017-02-18 11:09:32 -05:00
parent 95632e0e98
commit caa1eb2237
5 changed files with 37 additions and 27 deletions

View File

@ -92,9 +92,8 @@ public class Xopg_db_mgr {
// delete from page // delete from page
core_db.Tbl__page().Delete(page_id); 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 // init vars
Xow_db_mgr db_mgr = wiki.Data__core_mgr();
Xow_db_file core_db = db_mgr.Db__core(); Xow_db_file core_db = db_mgr.Db__core();
Xowd_page_itm tmp = new Xowd_page_itm(); 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); gplx.xowa.addons.wikis.ctgs.edits.Xoctg_edit_mgr.Update_page_id(db_mgr, ns_id, old_id, new_id);
// search_link // 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 // delete from page
core_db.Tbl__page().Update_page_id(old_id, new_id); core_db.Tbl__page().Update_page_id(old_id, new_id);

View File

@ -84,17 +84,28 @@ public class Xow_wiki_factory {
core_db_props.Verify(Bool_.N, String_.new_u8(domain), core_db_url); core_db_props.Verify(Bool_.N, String_.new_u8(domain), core_db_url);
// check for page_ids < 1 // check for page_ids < 1
// Xowd_page_tbl page_tbl = new Xowd_page_tbl(core_db_conn, Bool_.N); // select from page_tbl for page_id < 1
// int[] page_ids = page_tbl.Select_invalid(); Xow_db_mgr db_mgr = new Xow_db_mgr(dir_url, String_.new_u8(domain));
// int page_ids_len = page_ids.length; db_mgr.Init_by_load(core_db_url);
// if (page_ids_len > 0) { Xowd_page_tbl page_tbl = db_mgr.Db__core().Tbl__page();
// int next_id = cfg_tbl.Select_int("db", "page.id_next"); List_adp page_ids_list = List_adp_.New();
// for (int i = 0; i < page_ids_len; i++) { 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();
// int old_page_id = page_ids[i]; try {
// int new_page_id = next_id + i; while (page_rdr.Move_next()) {
// Xopg_db_mgr.Update_page_id(wiki, old_id, new_id); page_ids_list.Add(page_rdr.Read_int("page_id"));
// } }
// cfg_tbl.Upsert_int("db", "page.id_next", next_id + page_ids_len); } 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);
}
} }
} }

View File

@ -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 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 Clear_rslts_cache() {search_mgr.Clear_rslts_cache();}
public void Delete_links(int ns_id, int page_id) { 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); 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); 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);
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);
}
this.Clear_rslts_cache(); this.Clear_rslts_cache();
} }

View File

@ -99,6 +99,13 @@ public class Srch_db_mgr {
Tbl__link__ary__new(tbl__lreg, tbl__link__ary, db_mgr, 1, Bool_.N, null); 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) { 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()); Srch_link_tbl tbl = new Srch_link_tbl(db.Conn());
ary[idx] = tbl; ary[idx] = tbl;

View File

@ -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 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 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__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) { public void Ctgs__add(Xoa_ttl ttl) {
if (ctg_hash == null) ctg_hash = Ordered_hash_.New_bry(); if (ctg_hash == null) ctg_hash = Ordered_hash_.New_bry();
ctg_hash.Add_if_dupe_use_1st(ttl.Full_db(), ttl); ctg_hash.Add_if_dupe_use_1st(ttl.Full_db(), ttl);