1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-10-27 20:34:16 +00:00

Wikibase: Add isValidEntityId

This commit is contained in:
gnosygnu 2018-06-23 10:52:47 -04:00
parent fbe19f4614
commit 29a8fb7824
38 changed files with 197 additions and 70 deletions

View File

@ -16,7 +16,11 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
package gplx.core.threads; import gplx.*; import gplx.core.*;
public class Thread_adp_ {
public static void Sleep(int milliseconds) {
try {Thread.sleep(milliseconds);} catch (InterruptedException e) {throw Err_.new_exc(e, "core", "thread interrupted", "milliseconds", milliseconds);}
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
throw Err_.new_exc(e, "core", "thread interrupted", "milliseconds", milliseconds);
}
}
public static Thread_adp Start_by_key(String thread_name, Gfo_invk invk_itm, String invk_cmd) {return Start(thread_name, Cancelable_.Never, invk_itm, invk_cmd , GfoMsg_.new_cast_(invk_cmd));}
public static Thread_adp Start_by_val(String thread_name, Gfo_invk invk_itm, String invk_cmd, Object val) {return Start(thread_name, Cancelable_.Never, invk_itm, invk_cmd , GfoMsg_.new_cast_(invk_cmd).Add("v", val));}

View File

@ -40,6 +40,9 @@ public class Dbmeta_fld_list {
public String Add_str_null(String name, int len) {return Add(Dbmeta_fld_itm.new_str(name, len).Nullable_y_());}
public String Add_str_dflt(String name, int len, String dflt)
{return Add(Dbmeta_fld_itm.new_str(name, len).Default_(dflt));}
public Dbmeta_fld_list Bld_str(String name) {return Bld_str(name, 255);}
public Dbmeta_fld_list Bld_str(String name, int len){Add_str(name, len); return this;}
public String Add(Dbmeta_fld_itm fld) {
fld_ary = null; str_ary = null;
String name = fld.Name();

View File

@ -49,5 +49,5 @@ public class Db_conn_fxt implements Rls_able {
public static Db_conn Tdb(String fileName) {return Db_conn_pool.Instance.Get_or_new(Db_conn_info_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));}
public static Db_conn Postgres() {return Db_conn_pool.Instance.Get_or_new(Postgres_conn_info.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));}
public static Db_conn Sqlite() {return Db_conn_pool.Instance.Get_or_new(Sqlite_conn_info.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));}
public static final boolean SkipPostgres = Tfds.SkipDb || true;
public static final boolean SkipPostgres = Tfds.SkipDb || true;
}

View File

@ -176,7 +176,7 @@ public class Xop_fxt {
public static void Init_page_create_static(Xowe_wiki wiki, String ttl_str, String text_str) {
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, Bry_.new_u8(ttl_str));
byte[] text = Bry_.new_u8(text_str);
wiki.Db_mgr().Save_mgr().Data_create(ttl, text);
wiki.Db_mgr().Save_mgr().Data_create(wiki, ttl, text);
}
public static void Init_msg(Xowe_wiki wiki, String key, String val) {
wiki.Lang().Msg_mgr().Itm_by_key_or_new(key, val);

View File

@ -181,7 +181,7 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm {
public void Init_by_wiki() {Init_assert();}
public Xowe_wiki Init_assert() {if (init_needed) Init_wiki(app.Usere()); return this;}
public void Init_db_mgr() {
Io_url core_db_url = gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(this);
Io_url core_db_url = Xow_db_file__core_.Find_core_fil_or_null(this);
if (core_db_url == null) {
tdb_fsys_mgr.Scan_dirs();
}

View File

@ -32,7 +32,7 @@ public class Db_mgr_fxt {
public Xowd_page_itm doc_ttl_(int id, String title) {return bldr_fxt.doc_(id, "2012-01-02 03:04", title, "IGNORE");}
public Db_mgr_fxt Init_fil(String url, String raw) {return Init_fil(Io_url_.new_fil_(url), raw);}
public Db_mgr_fxt Init_fil(Io_url url, String raw) {Io_mgr.Instance.SaveFilStr(url, raw); return this;}
public Db_mgr_fxt Exec_run(Xob_page_wkr wkr) {bldr_fxt.Run(wkr); return this;}
public Db_mgr_fxt Exec_run(Xob_page_wkr wkr) {bldr_fxt.Run_page_wkrs(wkr); return this;}
public Db_mgr_fxt Exec_run(Xob_cmd cmd) {bldr_fxt.Run_cmds(cmd); return this;}
public Db_mgr_fxt Exec_run(Xobd_parser_wkr wkr) {bldr_fxt.Run(wkr); return this;}
public void Init_page_insert(Int_obj_ref page_id_next, int ns_id, String[] ttls) {

View File

@ -49,7 +49,7 @@ public class Xob_cmd_mgr implements Gfo_invk {
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_util_download)) return Add(new Xob_download_cmd(bldr, wiki));
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_util_xml_dump)) return Add(new Xob_xml_dumper_cmd(bldr, wiki));
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_qid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_qid_sql().Ctor(bldr, wiki));
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_pid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_pid_sql().Ctor(bldr, wiki));
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_pid)) return Xml_rdr_direct_add(wiki, new Xob_wdata_pid_sql(wiki.Data__core_mgr().Db__wbase().Conn()).Ctor(bldr, wiki));
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wbase_db)) return Add(new Xob_wdata_db_cmd(bldr, wiki));
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_site_meta)) return Add(new Xob_site_meta_cmd(bldr, wiki));

View File

@ -18,6 +18,8 @@ import gplx.core.tests.*; import gplx.core.ios.*; import gplx.core.times.*;
import gplx.dbs.*; import gplx.xowa.wikis.tdbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.bldrs.cmds.texts.tdbs.*;
import gplx.xowa.bldrs.wkrs.*;
public class Xob_fxt {
private final Tst_mgr tst_mgr = new Tst_mgr();
private final DateAdp_parser dateParser = DateAdp_parser.new_();
public Xob_fxt Ctor_mem() {
Io_mgr.Instance.InitEngine_mem();
return Ctor(Io_url_.mem_dir_("mem/xowa/"));
@ -32,14 +34,6 @@ public class Xob_fxt {
public Xoae_app App() {return app;} private Xoae_app app;
public Xob_bldr Bldr() {return bldr;} private Xob_bldr bldr;
public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki;
public Io_url fil_ns_title(int ns_id, int idx) {return wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_ttl, ns_id, idx);}
public Io_url fil_ns_page(int ns_id, int idx) {return wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_page, ns_id, idx);}
public Io_url fil_ns_sttl(int ns_id, int idx) {return wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_search_ttl, ns_id, idx);}
public Io_url fil_site(byte tid, int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(tid, idx);}
public Io_url fil_site_ctg(int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(Xotdb_dir_info_.Tid_category, idx);}
public Io_url fil_site_id(int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(Xotdb_dir_info_.Tid_id, idx);}
public Io_url fil_reg(byte tid) {return wiki.Tdb_fsys_mgr().Url_site_reg(tid);}
public Io_url fil_reg(int ns_id, byte tid) {return wiki.Tdb_fsys_mgr().Url_ns_reg(Int_.To_str_pad_bgn_zero(ns_id, 3), tid);}
public Xob_fxt Fil_expd(Io_url url, String... expd) {
String text = String_.Concat_lines_nl_skip_last(expd); // skipLast b/c if trailing line wanted, easier to pass in extra argument for ""
expd_list.Add(new Io_fil_chkr(url, text));
@ -61,7 +55,7 @@ public class Xob_fxt {
}
public Xob_fxt Run_id() {
Xob_make_id_wkr wkr = new Xob_make_id_wkr(bldr, wiki);
Run(wkr);
Run_page_wkrs(wkr);
return this;
}
private void Run_wkr(Xob_page_wkr wkr) {
@ -98,10 +92,10 @@ public class Xob_fxt {
int len = wkrs.length;
for (int i = 0; i < len; i++)
parser_wkr.Wkr_add(wkrs[i]);
Run(parser_wkr);
Run_page_wkrs(parser_wkr);
return this;
}
public Xob_fxt Run(Xob_page_wkr... wkrs) {
public Xob_fxt Run_page_wkrs(Xob_page_wkr... wkrs) {
int doc_ary_len = doc_ary.length;
for (int j = 0; j < wkrs.length; j++) {
Xob_page_wkr wkr = wkrs[j];
@ -147,6 +141,14 @@ public class Xob_fxt {
list.Add(fil);
}
}
Tst_mgr tst_mgr = new Tst_mgr();
DateAdp_parser dateParser = DateAdp_parser.new_();
public void Run_page_wkr(Xob_page_wkr wkr, Xowd_page_itm... pages) {
int len = pages.length;
wkr.Page_wkr__bgn();
for (int i = 0; i < len; i++) {
Xowd_page_itm page = pages[i];
wkr.Page_wkr__run(page);
}
wkr.Page_wkr__end();
}
}

View File

@ -118,7 +118,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id);
int pg_id = pg_bgn;
while (true) {
page_src.Get_pages(pages, db_id, ns_id, pg_id);
page_src.Get_pages(wiki.Appe(), pages, db_id, ns_id, pg_id);
int pages_len = pages.Count();
if (pages_len == 0) { // no more pages in db;
if (pg_id > pg_bgn) // reset pg_bgn to 0 only if pg_bgn seen;
@ -235,7 +235,7 @@ class Xob_dump_mgr_base_ {
int load_count = 0;
usr_dlg.Note_many("", "", "tmpl_load init");
while (true) {
page_src.Get_pages(pages, 0, Xow_ns_.Tid__template, cur_page_id); // 0 is always template db
page_src.Get_pages(wiki.Appe(), pages, 0, Xow_ns_.Tid__template, cur_page_id); // 0 is always template db
int page_count = pages.Count();
if (page_count == 0) break; // no more pages in db;
Xowd_page_itm page = null;

View File

@ -26,14 +26,14 @@ class Xob_dump_src_id {
this.page_db_url = db_mgr.Core_data_mgr().Db__core().Url().Raw();
return this;
}
public void Get_pages(List_adp list, int text_db_idx, int cur_ns, int prv_id) {
public void Get_pages(Xoae_app app, List_adp list, int text_db_idx, int cur_ns, int prv_id) {
DataRdr rdr = DataRdr_.Null;
int size_len = 0;
list.Clear();
try {
rdr = New_rdr(db_mgr, page_db_url, text_db_idx, cur_ns, prv_id, redirect);
while (rdr.MoveNextPeer()) {
Xowd_page_itm page = New_page(db_mgr, cur_ns, rdr);
Xowd_page_itm page = New_page(app, db_mgr, cur_ns, rdr);
list.Add(page);
size_len += page.Text_len();
if (size_len > size_max)
@ -52,7 +52,7 @@ class Xob_dump_src_id {
}
return text_stmt.Clear().Val_int(prv_id).Val_int(cur_ns).Exec_select();
}
private static Xowd_page_itm New_page(Xodb_mgr_sql db_mgr, int ns_id, DataRdr rdr) {
private static Xowd_page_itm New_page(Xoae_app app, Xodb_mgr_sql db_mgr, int ns_id, DataRdr rdr) {
Xowd_page_tbl page_core_tbl = db_mgr.Core_data_mgr().Tbl__page();
Xowd_page_itm rv = new Xowd_page_itm();
rv.Id_(rdr.ReadInt(page_core_tbl.Fld_page_id()));
@ -61,7 +61,7 @@ class Xob_dump_src_id {
String text_data_name = db_mgr.Core_data_mgr().Db__core().Tbl__text().Fld_text_data();
byte[] text_data = rdr.ReadBry(text_data_name);
text_data = db_mgr.Wiki().Appe().Zip_mgr().Unzip(db_mgr.Core_data_mgr().Props().Zip_tid_text(), text_data);
text_data = app.Zip_mgr().Unzip(db_mgr.Core_data_mgr().Props().Zip_tid_text(), text_data);
rv.Text_(text_data);
return rv;
}

View File

@ -61,7 +61,7 @@ public class Xob_site_meta_cmd implements Xob_cmd {
break;
}
if (json_text == null) {// if wmf_api never returns, exit else CONSTRAINT error upon INSERT; EX:als.wiktionary.org; DATE:2018-04-17
app.Usr_dlg().Note_many("", "", "wm.api: failed; wiki=~{0} api=~{1}", domain_str);
app.Usr_dlg().Note_many("", "", "wm.api: failed; wiki=~{0}", domain_str);
continue;
}
byte[] domain_bry = Bry_.new_u8(domain_str);

View File

@ -26,6 +26,7 @@ public abstract class Xob_itm_basic_base implements Gfo_invk {
}
@gplx.Virtual public Xob_cmd Cmd_clone(Xob_bldr bldr, Xowe_wiki wiki) {return null;}
@gplx.Virtual protected void Cmd_ctor_end(Xob_bldr bldr, Xowe_wiki wiki) {}
@gplx.Virtual public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_owner)) return bldr.Cmd_mgr();
else return Gfo_invk_.Rv_unhandled;

View File

@ -74,6 +74,7 @@ public class Xow_file_mgr implements Gfo_invk {
// if non-wmf, set fsdb_mgr to fs.dir; DATE:2017-02-01
if (wiki.Domain_tid() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__other) {
if (wiki.Data__core_mgr() == null) return; // HACK: ignore if null; occurs when importing wikia wikis; TODO: rewrite data_core layer; DATE:2018-06-16
String cfg_domain_str = wiki.Data__core_mgr().Db__core().Tbl__cfg().Select_str_or("xowa.bldr.session", "wiki_domain", wiki.Domain_str()); // NOTE: or is "wiki.domain" for user_wikis
// FOLDER.RENAME: do not change to fs.dir if renamed; DATE:2017-02-06
if (String_.Eq(cfg_domain_str, wiki.Domain_str())) {
@ -112,8 +113,9 @@ public class Xow_file_mgr implements Gfo_invk {
}
if (this.Version() == Version_1) return new Db_cfg_hash("");
this.Init_file_mgr_by_load(wiki); // make sure fsdb is init'd
Fsm_mnt_itm mnt_itm = fsdb_mgr.Mnt_mgr().Mnts__get_main_or_null(); // NOTE: can be null for embeddable parser; DATE:2017-06-06
return mnt_itm == null ? new Db_cfg_hash("") : mnt_itm.Cfg_mgr().Grps_get_or_load(grp);
Fsm_mnt_mgr mnt_mgr = fsdb_mgr.Mnt_mgr();
Fsm_mnt_itm mnt_itm = mnt_mgr == null ? null : mnt_mgr.Mnts__get_main_or_null(); // NOTE: will be null for non-wmf wikis; DATE:2018-04-18
return mnt_itm == null ? new Db_cfg_hash("") : mnt_itm.Cfg_mgr().Grps_get_or_load(grp); // NOTE: can be null for embeddable parser DATE:2017-06-06
}
public Xof_fsdb_mgr Fsdb_mgr() {return fsdb_mgr;} private Xof_fsdb_mgr fsdb_mgr = new Xof_fsdb_mgr__sql();
public void Clear_for_tests() { // NOTE: must clear else fsdb_mode will be cached for multiple runs; will generally be v1, but some tests will set to v2; DATE:2015-12-22

View File

@ -70,7 +70,7 @@ public class Xof_xfer_queue_base_fxt {
public void Init_page_create(Xowe_wiki wiki, String ttl, String txt) {
Xoa_ttl page_ttl = Xoa_ttl.Parse(wiki, Bry_.new_u8(ttl));
byte[] page_raw = Bry_.new_u8(txt);
wiki.Db_mgr().Save_mgr().Data_create(page_ttl, page_raw);
wiki.Db_mgr().Save_mgr().Data_create(wiki, page_ttl, page_raw);
}
Xof_repo_itm Ini_repo_add(Xof_file_mgr file_mgr, byte[] key, String root, String wiki, boolean trg) {
Xof_repo_itm repo = file_mgr.Repo_mgr().Set(String_.new_u8(key), root, wiki).Ext_rules_(Xof_rule_grp.Grp_app_default).Dir_depth_(2);

View File

@ -26,7 +26,7 @@ public class Xog_tab_itm_edit_mgr {
byte[] new_text = Get_new_text(tab, page.Db().Text().Text_bry());
int page_id = page.Db().Page().Id();
if (page.Edit_mode() == Xoa_page_.Edit_mode_create) {
page_id = wiki.Db_mgr().Save_mgr().Data_create(page.Ttl(), new_text);
page_id = wiki.Db_mgr().Save_mgr().Data_create(wiki, page.Ttl(), new_text);
page.Db().Page().Id_(page_id);
page.Edit_mode_update_(); // set to update so that next save does not try to create
}

View File

@ -50,7 +50,7 @@ class Xol_msg_mgr_fxt {
}
public void Test_mediaWiki_msg(String raw, String expd) {
byte[] msg_ttl = Bry_.new_a7("MediaWiki:msg_ttl");
wiki.Db_mgr().Save_mgr().Data_create(Xoa_ttl.Parse(wiki, msg_ttl), Bry_.new_a7(raw));
wiki.Db_mgr().Save_mgr().Data_create(wiki, Xoa_ttl.Parse(wiki, msg_ttl), Bry_.new_a7(raw));
Tfds.Eq(expd, String_.new_u8(wiki.Msg_mgr().Val_by_key_obj(Bry_.new_a7("msg_ttl"))));
}
public void Test_val_html_accesskey_and_title(String init_title, String init_accesskey, String expd) {

View File

@ -54,7 +54,7 @@ public class Move_page implements Xow_special_page {
if (trg_page_exists)
save_mgr.Data_update(page, page.Db().Text().Text_bry());
else
save_mgr.Data_create(trg_ttl, page.Db().Text().Text_bry());
save_mgr.Data_create(wiki, trg_ttl, page.Db().Text().Text_bry());
}
else
save_mgr.Data_rename(page, trg_ns_id, trg_ttl_bry);

View File

@ -34,7 +34,7 @@ class Xou_user_ {
}
public static void Bookmarks_make(Xoae_app app, Xowe_wiki home_wiki) {
app.Usr_dlg().Log_many(GRP_KEY, "bookmarks.create", "creating bookmarks page");
home_wiki.Db_mgr().Save_mgr().Data_create(Xoa_ttl.Parse(home_wiki, Bry_.new_a7("Data:Bookmarks")), Bry_.new_a7(Bookmarks_text));
home_wiki.Db_mgr().Save_mgr().Data_create(home_wiki, Xoa_ttl.Parse(home_wiki, Bry_.new_a7("Data:Bookmarks")), Bry_.new_a7(Bookmarks_text));
}
public static final String User_system_cfg_text = String_.Concat_lines_nl
( "app.scripts.txns.get('user.prefs.general').version_('" + Xoa_app_.Version + "').bgn();"

View File

@ -131,7 +131,7 @@ class Xow_data_mgr_fxt {
}
public Xow_data_mgr_fxt Create(String ttl_str, String data) {
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, Bry_.new_u8(ttl_str));
wiki.Db_mgr().Save_mgr().Data_create(ttl, Bry_.new_u8(data));
wiki.Db_mgr().Save_mgr().Data_create(wiki, ttl, Bry_.new_u8(data));
return this;
}
public Xow_data_mgr_fxt Update(String ttl_str, String data) {

View File

@ -20,10 +20,9 @@ import gplx.xowa.htmls.core.dbs.*; import gplx.xowa.addons.wikis.searchs.dbs.*;
import gplx.xowa.addons.wikis.htmls.css.dbs.*;
import gplx.xowa.xtns.wbases.dbs.*;
public class Xow_db_file {
protected Xow_db_file(Db_cfg_tbl cfg_tbl, Xowd_core_db_props props, Xob_info_session info_session, Xob_info_file info_file, Xow_db_file_schema_props schema_props, int id, byte tid, Io_url url, String ns_ids, int part_id, Guid_adp guid, Db_conn conn, byte cmd_mode) {
Xow_db_file(Db_cfg_tbl cfg_tbl, Xowd_core_db_props props, Xob_info_session info_session, Xob_info_file info_file, Xow_db_file_schema_props schema_props, int id, byte tid, Io_url url, String ns_ids, int part_id, Guid_adp guid, Db_conn conn, byte cmd_mode) {
this.id = id; this.tid = tid; this.url = url; this.ns_ids = ns_ids; this.part_id = part_id; this.guid = guid; this.db_props = props;
this.conn = conn; this.cmd_mode = cmd_mode;
this.url_rel = url.NameAndExt();
boolean schema_is_1 = props.Schema_is_1();
this.tbl__cfg = cfg_tbl;
this.tbl__db = new Xowd_xowa_db_tbl(conn, schema_is_1);
@ -47,7 +46,6 @@ public class Xow_db_file {
public byte Tid() {return tid;} private final byte tid;
public Db_conn Conn() {return conn;} private final Db_conn conn;
public Io_url Url() {return url;} private final Io_url url;
public String Url_rel() {return url_rel;} private final String url_rel;
public Xowd_core_db_props Db_props() {return db_props;} private final Xowd_core_db_props db_props;
public String Ns_ids() {return ns_ids;} private final String ns_ids;
public int Ns_id_or_fail() {return Int_.Parse(ns_ids);}
@ -68,7 +66,7 @@ public class Xow_db_file {
public Xowd_cat_link_tbl Tbl__cat_link() {return tbl__cat_link;} private final Xowd_cat_link_tbl tbl__cat_link;
public Xowd_site_stats_tbl Tbl__site_stats() {return tbl__site_stats;} private final Xowd_site_stats_tbl tbl__site_stats;
public Xowd_wbase_qid_tbl Tbl__wbase_qid() {return tbl__wbase_qid;} private final Xowd_wbase_qid_tbl tbl__wbase_qid;
public Xowd_wbase_pid_tbl Tbl__wbase_pid() {return tbl__wbase_pid;} private final Xowd_wbase_pid_tbl tbl__wbase_pid;
Xowd_wbase_pid_tbl Tbl__wbase_pid() {return tbl__wbase_pid;} private final Xowd_wbase_pid_tbl tbl__wbase_pid;
public Xowb_prop_tbl Tbl__wbase_prop() {return tbl__wbase_prop;} private final Xowb_prop_tbl tbl__wbase_prop;
public Xob_info_session Info_session() {
if (info_session == null) // NOTE: null when load; !null when make

View File

@ -15,7 +15,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
public class Xow_db_layout {
public Xow_db_layout(int tid) {this.tid = tid;}
Xow_db_layout(int tid) {this.tid = tid;}
public int Tid() {return tid;} private final int tid;
public boolean Tid_is_all() {return tid == Tid__all;}
public boolean Tid_is_all_or_few() {return tid != Tid__lot;}

View File

@ -17,7 +17,8 @@ package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xow
import gplx.core.ios.*; import gplx.core.ios.streams.*; import gplx.dbs.*; import gplx.dbs.cfgs.*;
import gplx.dbs.metas.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.wikis.dbs.*;
public class Xowd_core_db_props {
public Xowd_core_db_props(int schema, Xow_db_layout layout_text, Xow_db_layout layout_html, Xow_db_layout layout_file
public Xowd_core_db_props(int schema
, Xow_db_layout layout_text, Xow_db_layout layout_html, Xow_db_layout layout_file
, byte zip_tid_text, byte zip_tid_html, boolean hzip_enabled, boolean hzip_mode_is_b256) {
this.schema = schema;
this.layout_text = layout_text; this.layout_html = layout_html; this.layout_file = layout_file;
@ -45,6 +46,7 @@ public class Xowd_core_db_props {
tbl.Insert_yn (Cfg_grp, Cfg_key__hzip_mode_is_b256 , hzip_mode_is_b256);
tbl.Conn().Txn_end();
}
public static Xowd_core_db_props Cfg_load(Db_conn conn) {return Cfg_load(conn, gplx.xowa.wikis.data.Xowd_cfg_tbl_.New(conn));}
public static Xowd_core_db_props Cfg_load(Db_conn conn, Db_cfg_tbl cfg_tbl) {
return cfg_tbl.Select_int_or(Cfg_grp, Cfg_key__schema_version, 1) == 1
@ -76,5 +78,6 @@ public class Xowd_core_db_props {
, Cfg_key__hzip_enabled = "hzip_enabled"
, Cfg_key__hzip_mode_is_b256 = "hzip_mode_is_b256"
;
public static final Xowd_core_db_props Test = new Xowd_core_db_props(2, Xow_db_layout.Itm_few, Xow_db_layout.Itm_few, Xow_db_layout.Itm_few, Io_stream_tid_.Tid__raw, Io_stream_tid_.Tid__raw, Bool_.Y, Bool_.Y);
}

View File

@ -81,7 +81,8 @@ public class Xowd_xowa_db_tbl implements Db_tbl {
itm.Cmd_mode_(Db_cmd_mode.Tid_ignore);
}
private void Commit_itm_vals(Db_stmt stmt, Xow_db_file itm) {
stmt.Val_byte(fld_type, itm.Tid()).Val_str(fld_url, itm.Url_rel()).Val_str(fld_ns_ids, itm.Ns_ids()).Val_int(fld_part_id, itm.Part_id()).Val_str(fld_guid, itm.Guid().To_str());
String url_rel = itm.Url().NameAndExt();
stmt.Val_byte(fld_type, itm.Tid()).Val_str(fld_url, url_rel).Val_str(fld_ns_ids, itm.Ns_ids()).Val_int(fld_part_id, itm.Part_id()).Val_str(fld_guid, itm.Guid().To_str());
}
public void Rls() {}

View File

@ -24,7 +24,7 @@ public interface Xodb_load_mgr {
boolean Load_by_id (Xowd_page_itm rv, int id);
void Load_by_ids (Cancelable cancelable, List_adp rv, int bgn, int end);
boolean Load_by_ttl (Xowd_page_itm rv, Xow_ns ns, byte[] ttl);
void Load_by_ttls (Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end);
void Load_by_ttls (Xowe_wiki wiki, Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end);
void Load_ttls_for_all_pages (Cancelable cancelable, List_adp rslt_list, Xowd_page_itm rslt_nxt, Xowd_page_itm rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
void Load_ttls_for_search_suggest(Cancelable cancelable, List_adp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
byte[] Find_random_ttl (Xow_ns ns);

View File

@ -20,6 +20,7 @@ import gplx.xowa.apps.gfs.*;
import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.metas.*; import gplx.xowa.wikis.data.*;
public class Xodb_load_mgr_sql implements Xodb_load_mgr {
private final Xodb_mgr_sql db_mgr;
private Xowd_wbase_pid_tbl wbase_pid_tbl;
public Xodb_load_mgr_sql(Xodb_mgr_sql db_mgr) {this.db_mgr = db_mgr;}
public void Load_init(Xowe_wiki wiki) {
Xow_db_file db_core = wiki.Data__core_mgr().Db__core();
@ -53,8 +54,8 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
public boolean Load_by_ttl(Xowd_page_itm rv, Xow_ns ns, byte[] ttl) {
return db_mgr.Core_data_mgr().Tbl__page().Select_by_ttl(rv, ns, ttl);
}
public void Load_by_ttls(Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end) {
db_mgr.Core_data_mgr().Tbl__page().Select_in__ns_ttl(cancelable, rv, db_mgr.Wiki().Ns_mgr(), fill_idx_fields_only, bgn, end);
public void Load_by_ttls(Xowe_wiki wiki, Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end) {
db_mgr.Core_data_mgr().Tbl__page().Select_in__ns_ttl(cancelable, rv, wiki.Ns_mgr(), fill_idx_fields_only, bgn, end);
}
public void Load_page(Xowd_page_itm rv, Xow_ns ns) {
if (rv.Text_db_id() == -1) return; // NOTE: page_sync will create pages with -1 text_db_id; DATE:2017-05-06
@ -73,8 +74,15 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
db_mgr.Core_data_mgr().Tbl__page().Select_for_search_suggest(cancelable, rslt_list, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
}
public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) {return db_mgr.Core_data_mgr().Db__wbase().Tbl__wbase_qid().Select_qid(wiki_alias, ns_num, ttl);}
public int Load_pid(byte[] lang_key, byte[] pid_name) {return db_mgr.Core_data_mgr().Db__wbase().Tbl__wbase_pid().Select_pid(lang_key, pid_name);}
public byte[] Find_random_ttl(Xow_ns ns) {return db_mgr.Core_data_mgr().Tbl__page().Select_random(ns);}
public Xodb_page_rdr Get_page_rdr(Xowe_wiki wiki) {return new Xodb_page_rdr__sql(wiki);}
public int Load_pid(byte[] lang_key, byte[] pid_name) {
if (wbase_pid_tbl == null) {
Xow_db_mgr core_db_mgr = db_mgr.Core_data_mgr();
wbase_pid_tbl = new Xowd_wbase_pid_tbl(core_db_mgr.Db__wbase().Conn(), core_db_mgr.Props().Schema_is_1());
}
return wbase_pid_tbl.Select_pid(lang_key, pid_name);
}
public void Clear() {}
}

View File

@ -46,7 +46,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
Xotdb_page_itm_.Txt_ttl_load(rv, tmp_xdat_itm.Itm_bry());
return Bry_.Eq(rv.Ttl_page_db(), ttl);
}
public void Load_by_ttls(Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end) {// NOTE: Load_by_ttls just a wrapper around Load_by_ttl; for xdat, Load_by_ttl is fast enough
public void Load_by_ttls(Xowe_wiki wiki, Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end) {// NOTE: Load_by_ttls just a wrapper around Load_by_ttl; for xdat, Load_by_ttl is fast enough
for (int i = bgn; i < end; i++) {
if (cancelable.Canceled()) return;
Xowd_page_itm page = (Xowd_page_itm)rv.Get_at(i);

View File

@ -18,6 +18,7 @@ import gplx.core.ios.*; import gplx.core.ios.streams.*; import gplx.dbs.*; impor
import gplx.xowa.apps.gfs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.xowa.htmls.core.*;
import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*;
public class Xodb_mgr_sql implements Xodb_mgr, Gfo_invk {
private final Xowe_wiki wiki;
public Xodb_mgr_sql(Xowe_wiki wiki) {
this.wiki = wiki;
this.core_data_mgr = new Xow_db_mgr(wiki.Fsys_mgr().Root_dir(), wiki.Domain_str());
@ -26,7 +27,6 @@ public class Xodb_mgr_sql implements Xodb_mgr, Gfo_invk {
}
public byte Tid() {return Tid_sql;} public String Tid_name() {return "sqlite3";} public static final byte Tid_sql = 1;
public Xow_db_mgr Core_data_mgr() {return core_data_mgr;} private final Xow_db_mgr core_data_mgr;
public Xowe_wiki Wiki() {return wiki;} private final Xowe_wiki wiki;
public Xodb_load_mgr Load_mgr() {return load_mgr;} private final Xodb_load_mgr_sql load_mgr;
public Xodb_save_mgr Save_mgr() {return save_mgr;} private final Xodb_save_mgr_sql save_mgr;
public byte Category_version() {return category_version;} private byte category_version = Xoa_ctg_mgr.Version_null;

View File

@ -18,7 +18,7 @@ public interface Xodb_save_mgr {
boolean Create_enabled(); void Create_enabled_(boolean v);
boolean Update_modified_on_enabled(); void Update_modified_on_enabled_(boolean v);
int Page_id_next(); void Page_id_next_(int v);
int Data_create(Xoa_ttl ttl, byte[] text);
int Data_create(Xowe_wiki wiki, Xoa_ttl ttl, byte[] text);
void Data_update(Xoae_page page, byte[] text);
void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl);
void Clear();

View File

@ -22,7 +22,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
public boolean Create_enabled() {return create_enabled;} public void Create_enabled_(boolean v) {create_enabled = v;} private boolean create_enabled;
public boolean Update_modified_on_enabled() {return update_modified_on_enabled;} public void Update_modified_on_enabled_(boolean v) {update_modified_on_enabled = v;} private boolean update_modified_on_enabled;
public int Page_id_next() {return page_id_next;} public void Page_id_next_(int v) {page_id_next = v;} private int page_id_next;
public int Data_create(Xoa_ttl ttl, byte[] text_raw) {
public int Data_create(Xowe_wiki wiki, Xoa_ttl ttl, byte[] text_raw) {
int ns_id = ttl.Ns().Id();
Xow_db_file db_file = db_mgr.Core_data_mgr().Db__core();
int ns_count = db_file.Tbl__ns().Select_ns_count(ns_id) + 1;
@ -44,7 +44,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
if (page_text_db == null) page_text_db = fsys_mgr.Db__core(); // HACK: needed for create new wiki DATE:2016-10-29
Xowd_text_tbl page_text_tbl = page_text_db.Tbl__text();
byte[] text_zip = page_text_tbl.Zip(text_raw);
boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text_raw, text_raw.length);
boolean redirect = wiki.Redirect_mgr().Is_redirect(text_raw, text_raw.length);
Xowd_page_tbl page_core_tbl = db_mgr.Core_data_mgr().Tbl__page();
page_core_tbl.Insert_bgn();
page_text_tbl.Insert_bgn();
@ -59,7 +59,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
return page_id;
}
public void Data_update(Xoae_page page, byte[] text_raw) {
boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text_raw, text_raw.length);
boolean redirect = page.Wikie().Redirect_mgr().Is_redirect(text_raw, text_raw.length);
DateAdp modified = update_modified_on_enabled ? Datetime_now.Get() : page.Db().Page().Modified_on();
int page_id = page.Db().Page().Id();
db_mgr.Core_data_mgr().Tbl__page().Update__redirect__modified(page_id, redirect, modified);

View File

@ -29,7 +29,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
public boolean Update_modified_on_enabled() {return update_modified_on_enabled;} public void Update_modified_on_enabled_(boolean v) {update_modified_on_enabled = v;} private boolean update_modified_on_enabled;
public int Page_id_next() {return page_id_next;} public void Page_id_next_(int v) {page_id_next = v;} private int page_id_next = 0;
public void Clear() {page_id_next = 0;} // TEST: needed for ctg_test
public int Data_create(Xoa_ttl ttl, byte[] text) {
public int Data_create(Xowe_wiki wiki, Xoa_ttl ttl, byte[] text) {
Xow_ns ns_itm = ttl.Ns(); byte[] ttl_bry = ttl.Page_db();
Xowd_page_itm db_page = Xowd_page_itm.new_tmp();
boolean found = load_mgr.Load_by_ttl(db_page, ns_itm, ttl_bry);

View File

@ -854,6 +854,10 @@ public class Xow_domain_regy {
, "hi.wikiversity.org"
, "hi.wikivoyage.org"
, "hif.wiktionary.org"
, "inh.wikipedia.org"
, "lfn.wikipedia.org"
, "gor.wikipedia.org"
, "eu.wikisource.org"
};
//, "als.wikisource.org"
//, "als.wikinews.org"

View File

@ -57,6 +57,7 @@ public class Scrib_lib_wikibase implements Scrib_lib {
case Proc_incrementExpensiveFunctionCount: return IncrementExpensiveFunctionCount(args, rslt);
case Proc_getPropertyOrder: return GetPropertyOrder(args, rslt);
case Proc_orderProperties: return OrderProperties(args, rslt);
case Proc_isValidEntityId: return IsValidEntityId(args, rslt);
default: throw Err_.new_unhandled(key);
}
}
@ -64,17 +65,18 @@ public class Scrib_lib_wikibase implements Scrib_lib {
Proc_getLabel = 0 //, Proc_getLabelByLanguage = 1
, Proc_getEntity = 2, Proc_getEntityStatements = 3, Proc_getSetting = 4, Proc_getEntityUrl = 5, Proc_renderSnak = 6//, Proc_formatValue = 7
, Proc_renderSnaks = 8, Proc_getEntityId = 9, Proc_getUserLang = 10, Proc_getDescription = 11, Proc_resolvePropertyId = 12
, Proc_getSiteLinkPageName = 13, Proc_incrementExpensiveFunctionCount = 14, Proc_getPropertyOrder = 15, Proc_orderProperties = 16;
, Proc_getSiteLinkPageName = 13, Proc_incrementExpensiveFunctionCount = 14, Proc_getPropertyOrder = 15, Proc_orderProperties = 16, Proc_isValidEntityId = 17;
public static final String
Invk_getLabel = "getLabel", Invk_getLabelByLanguage = "getLabelByLanguage", Invk_getEntity = "getEntity", Invk_getEntityStatements = "getEntityStatements"
, Invk_getSetting = "getSetting", Invk_getEntityUrl = "getEntityUrl", Invk_renderSnak = "renderSnak", Invk_formatValue = "formatValue", Invk_renderSnaks = "renderSnaks"
, Invk_getEntityId = "getEntityId", Invk_getUserLang = "getUserLang", Invk_getDescription = "getDescription", Invk_resolvePropertyId = "resolvePropertyId"
, Invk_getSiteLinkPageName = "getSiteLinkPageName", Invk_incrementExpensiveFunctionCount = "incrementExpensiveFunctionCount", Invk_getPropertyOrder = "getPropertyOrder", Invk_orderProperties = "orderProperties"
, Invk_isValidEntityId = "isValidEntityId"
;
private static final String[] Proc_names = String_.Ary
( Invk_getLabel, Invk_getLabelByLanguage, Invk_getEntity, Invk_getEntityStatements, Invk_getSetting, Invk_getEntityUrl, Invk_renderSnak, Invk_formatValue, Invk_renderSnaks
, Invk_getEntityId, Invk_getUserLang, Invk_getDescription, Invk_resolvePropertyId, Invk_getSiteLinkPageName, Invk_incrementExpensiveFunctionCount
, Invk_getPropertyOrder, Invk_orderProperties
, Invk_getPropertyOrder, Invk_orderProperties, Invk_isValidEntityId
);
public void Notify_page_changed() {if (notify_page_changed_fnc != null) core.Interpreter().CallFunction(notify_page_changed_fnc.Id(), Keyval_.Ary_empty);}
public boolean GetLabel(Scrib_proc_args args, Scrib_proc_rslt rslt) {
@ -144,7 +146,9 @@ public class Scrib_lib_wikibase implements Scrib_lib {
return rslt.Init_null();
return rslt.Init_obj(Scrib_lib_wikibase_srl.Srl_claims_prop_ary(prop_mgr, String_.new_u8(propertyId), statements, 1));
}
/*
public boolean IsValidEntityId(Scrib_proc_args args, Scrib_proc_rslt rslt) {
return rslt.Init_obj(true);
} /*
public function formatValues( $snaksSerialization ) {
$this->checkType( 'formatValues', 1, $snaksSerialization, 'table' );
try {

View File

@ -19,18 +19,20 @@ import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wkrs.*;
public abstract class Xob_wdata_pid_base extends Xob_itm_dump_base implements Xob_page_wkr, Gfo_invk {
private Json_parser parser;
public Xob_wdata_pid_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); return this;}
public abstract String Page_wkr__key();
public abstract void Pid_bgn();
public abstract void Pid_add(byte[] src_lang, byte[] src_ttl, byte[] trg_ttl);
public abstract void Pid_datatype(byte[] pid, byte[] datatype_bry);
public abstract void Pid_end();
public abstract String Page_wkr__key();
public void Page_wkr__bgn() {
this.Init_dump(this.Page_wkr__key(), wiki.Tdb_fsys_mgr().Site_dir().GenSubDir_nest("data", "pid")); // NOTE: must pass in correct make_dir in order to delete earlier version (else make_dirs will append)
parser = bldr.App().Wiki_mgr().Wdata_mgr().Jdoc_parser();
this.parser = bldr.App().Wiki_mgr().Wdata_mgr().Jdoc_parser();
this.Pid_bgn();
}
public void Page_wkr__run(Xowd_page_itm page) {
if (page.Ns_id() != Wdata_wiki_mgr.Ns_property) return;
Json_doc jdoc = parser.Parse(page.Text());
if (jdoc == null) {
bldr.Usr_dlg().Warn_many(GRP_KEY, "json.invalid", "json is invalid: ns=~{0} id=~{1}", page.Ns_id(), String_.new_u8(page.Ttl_page_db()));
@ -56,5 +58,5 @@ public abstract class Xob_wdata_pid_base extends Xob_itm_dump_base implements Xo
}
}
public void Page_wkr__end() {this.Pid_end();}
static final String GRP_KEY = "xowa.wdata.pid_wkr";
private static final String GRP_KEY = "xowa.wdata.pid_wkr";
}

View File

@ -16,8 +16,9 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
package gplx.xowa.xtns.wbases.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*;
import org.junit.*;
import gplx.xowa.wikis.*; import gplx.xowa.wikis.tdbs.*;
import gplx.xowa.bldrs.*;
public class Xob_wdata_pid_base_tst {
gplx.xowa.bldrs.Xob_fxt fxt = new gplx.xowa.bldrs.Xob_fxt().Ctor_mem();
private final Xob_fxt fxt = new Xob_fxt().Ctor_mem();
Io_url reg_(Xowe_wiki wdata, String wiki) {return Wdata_idx_wtr.dir_pid_(wdata, wiki).GenSubFil(Xotdb_dir_info_.Name_reg_fil);}
Io_url ttl_(Xowe_wiki wdata, String wiki, int fil_id) {
Io_url root = Wdata_idx_wtr.dir_pid_(wdata, wiki);
@ -51,7 +52,7 @@ public class Xob_wdata_pid_base_tst {
, "0|p1_fr|p2_fr|2"
, ""
)
.Run(new Xob_wdata_pid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
.Run_page_wkrs(new Xob_wdata_pid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
;
}
public static String json_(String entity_id, String grp_key, String[] grp_vals) {

View File

@ -17,13 +17,15 @@ package gplx.xowa.xtns.wbases.imports; import gplx.*; import gplx.xowa.*; import
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.tbls.*;
import gplx.xowa.xtns.wbases.dbs.*; import gplx.xowa.xtns.wbases.claims.enums.*;
public class Xob_wdata_pid_sql extends Xob_wdata_pid_base {
private final Db_conn conn;
private Xowd_wbase_pid_tbl tbl__pid;
private Xowb_prop_tbl tbl__prop;
private final Ordered_hash datatype_hash = Ordered_hash_.New_bry();
public Xob_wdata_pid_sql(Db_conn conn) {
this.conn = conn;
}
@Override public String Page_wkr__key() {return gplx.xowa.bldrs.Xob_cmd_keys.Key_wbase_pid;}
@Override public void Pid_bgn() {
Xow_db_mgr db_mgr = wiki.Data__core_mgr();
// init datatype_hash
Wbase_enum_hash enum_hash = Wbase_claim_type_.Reg;
byte len = (byte)enum_hash.Len();
@ -33,12 +35,12 @@ public class Xob_wdata_pid_sql extends Xob_wdata_pid_base {
}
// init wbase_pid
tbl__pid = db_mgr.Db__wbase().Tbl__wbase_pid();
tbl__pid = new Xowd_wbase_pid_tbl(conn, false); // schema_is_1 == false b/c new wbase_db will always be latest version
tbl__pid.Create_tbl();
tbl__pid.Insert_bgn();
// init wbase_prop
tbl__prop = db_mgr.Db__wbase().Tbl__wbase_prop();
tbl__prop = new Xowb_prop_tbl(conn);
tbl__prop.Create_tbl();
tbl__prop.Insert_bgn();
}

View File

@ -0,0 +1,91 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.xtns.wbases.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*;
import org.junit.*; import gplx.core.tests.*;
import gplx.*;
import gplx.dbs.*;
import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wkrs.*;
public class Xob_wdata_pid_sql_tst {
private Db_conn conn;
private final Xob_fxt fxt = new Xob_fxt().Ctor_mem();
private final Gfo_db_tester db_tester = new Gfo_db_tester();
@Before public void init() {
Io_mgr.Instance.InitEngine_mem();
Db_conn_bldr.Instance.Reg_default_mem();
this.conn = Db_conn_bldr.Instance.New(Io_url_.mem_fil_("mem/db/wbase.xowa"));
}
@Test public void Basic() {
fxt.Wiki().Ns_mgr().Add_new(Wdata_wiki_mgr.Ns_property, "Property");
Xob_wdata_pid_sql wkr = new Xob_wdata_pid_sql(conn);
wkr.Ctor(fxt.Bldr(), fxt.Wiki());
fxt.Run_page_wkr(wkr
, fxt.doc_wo_date_(2, "Property:P2", Xob_wdata_tst_utl.Json("p2", "label", String_.Ary("en", "p2_en", "fr", "p2_fr")))
, fxt.doc_wo_date_(1, "Property:P1", Xob_wdata_tst_utl.Json("p1", "label", String_.Ary("en", "p1_en", "fr", "p1_fr")))
);
db_tester.Test__select_tbl(conn
, "wbase_pid", new Dbmeta_fld_list().Bld_str("src_lang").Bld_str("src_ttl").Bld_str("trg_ttl")
, String_.Ary("en", "p2_en", "p2")
, String_.Ary("fr", "p2_fr", "p2")
, String_.Ary("en", "p1_en", "p1")
, String_.Ary("fr", "p1_fr", "p1")
);
}
}
class Gfo_db_tester {
public void Test__select_tbl(Db_conn conn, String tbl, Dbmeta_fld_list flds, String[]... expd_rows) {
Db_rdr rdr = Db_rdr_.Empty;
try {
rdr = conn.Stmt_select_all(tbl, flds).Exec_select__rls_auto();
int row_idx = 0;
while (rdr.Move_next()) {
String[] actl_row = new String[flds.Len()];
for (int i = 0; i < flds.Len(); i++)
actl_row[i] = Object_.Xto_str_strict_or_null(rdr.Read_at(i));
String[] expd_row = expd_rows[row_idx++];
Gftest.Eq__ary(expd_row, actl_row, "row compare failed", "row", row_idx);
}
}
finally {
rdr.Rls();
}
}
public void Test__objary(Object[][] expd, Object[][] actl) {
// gplx.core.strings.String_bldr_.new_()
}
}
class Xob_wdata_tst_utl {
public static String Json(String entity_id, String grp_key, String[] grp_vals) {
Bry_bfr bfr = Bry_bfr_.New();
bfr.Add_str_a7("{ 'entity':'").Add_str_u8(entity_id).Add_byte(Byte_ascii.Apos).Add_byte_nl();
bfr.Add_str_a7(", 'datatype':'commonsMedia'\n");
bfr.Add_str_a7(", '").Add_str_u8(grp_key).Add_str_a7("':").Add_byte_nl();
int len = grp_vals.length;
for (int i = 0; i < len; i += 2) {
bfr.Add_byte_repeat(Byte_ascii.Space, 2);
bfr.Add_byte(i == 0 ? Byte_ascii.Curly_bgn : Byte_ascii.Comma).Add_byte(Byte_ascii.Space);
bfr.Add_byte(Byte_ascii.Apos).Add_str_u8(grp_vals[i ]).Add_byte(Byte_ascii.Apos).Add_byte(Byte_ascii.Colon);
bfr.Add_byte(Byte_ascii.Apos).Add_str_u8(grp_vals[i + 1]).Add_byte(Byte_ascii.Apos).Add_byte_nl();
}
bfr.Add_str_a7(" }").Add_byte_nl();
bfr.Add_str_a7("}").Add_byte_nl();
return String_.Replace(bfr.To_str_and_clear(), "'", "\"");
}
}

View File

@ -51,7 +51,7 @@ public class Xob_wdata_qid_base_tst {
, "0|Q1_fr|Q2_fr|2"
, ""
)
.Run(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
.Run_page_wkrs(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
;
}
@Test public void Ns() {
@ -84,7 +84,7 @@ public class Xob_wdata_qid_base_tst {
, "0|Q1_fr|Q1_fr|1"
, ""
)
.Run(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
.Run_page_wkrs(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
;
}
@Test public void Links_w_name() { // PURPOSE: wikidata changed links node from "enwiki:A" to "enwiki:{name:A,badges:[]}"; DATE:2013-09-14
@ -130,7 +130,7 @@ public class Xob_wdata_qid_base_tst {
, "0|Q1_fr|Q2_fr|2"
, ""
)
.Run(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
.Run_page_wkrs(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
;
}
@Test public void Spaces() { // PURPOSE: assert that ttls with spaces are converted to unders DATE:2015-04-21
@ -160,7 +160,7 @@ public class Xob_wdata_qid_base_tst {
, "0|Q1_fr|Q2_fr|2"
, ""
)
.Run(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
.Run_page_wkrs(new Xob_wdata_qid_txt().Ctor(fxt.Bldr(), this.fxt.Wiki()))
;
}
public static Io_url reg_(Xowe_wiki wdata, String wiki, String ns_id) {

View File

@ -22,7 +22,7 @@ import gplx.xowa.xtns.wbases.core.*; import gplx.xowa.xtns.wbases.parsers.*;
class Xowb_json_dump_db {
private final Xoae_app app; private final Gfo_usr_dlg usr_dlg; private final Xowe_wiki wiki; private final Xob_bldr bldr;
private final Json_parser json_parser;
private final Xob_wdata_pid_sql pid_cmd = new Xob_wdata_pid_sql(); private final Xob_wdata_qid_sql qid_cmd = new Xob_wdata_qid_sql();
private final Xob_wdata_pid_sql pid_cmd; private final Xob_wdata_qid_sql qid_cmd = new Xob_wdata_qid_sql();
private Xow_ns_mgr ns_mgr; private Xow_db_mgr db_mgr;
private Xowd_page_tbl page_tbl; private Xob_ns_to_db_mgr ns_to_db_mgr;
private Io_stream_zip_mgr text_zip_mgr; private byte text_zip_tid;
@ -32,6 +32,7 @@ class Xowb_json_dump_db {
this.app = bldr.App(); this.usr_dlg = app.Usr_dlg(); this.wiki = wiki; this.bldr = bldr;
this.json_parser = bldr.App().Wiki_mgr().Wdata_mgr().Jdoc_parser();
this.ns_mgr = wiki.Ns_mgr();
this.pid_cmd = new Xob_wdata_pid_sql(wiki.Data__core_mgr().Db__wbase().Conn());
}
public void Parse_all_bgn(long src_fil_len, String src_fil_name) {
// load wiki