diff --git a/140_dbs/src/gplx/dbs/Db_tbl_owner.java b/140_dbs/src/gplx/dbs/Db_tbl_owner.java new file mode 100644 index 000000000..8f6c1ba7b --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_tbl_owner.java @@ -0,0 +1,21 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.dbs; import gplx.*; +public interface Db_tbl_owner { + Db_tbl Tbls__get_by_key(String key); +} diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java index 64b6f8e56..6c52125cb 100644 --- a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java +++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java @@ -134,4 +134,6 @@ public class Db_cfg_tbl implements Db_tbl { private DateAdp Parse_date (String grp, String key, String val) {try {return DateAdp_.parse_gplx(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, DateAdp_.Cls_ref_name);}} private Guid_adp Parse_guid (String grp, String key, String val) {try {return Guid_adp_.Parse(val) ;} catch (Exception e) {throw err_parse(e, grp, key, val, Guid_adp_.Cls_ref_name);}} private Err err_parse(Exception e, String grp, String key, String val, String type) {return Err_.new_exc(e, "db", "cfg.val is not parseable", "grp", grp, "key", key, "val", val, "type", type);} + + public static Db_cfg_tbl Get_by_key(Db_tbl_owner owner, String key) {return (Db_cfg_tbl)owner.Tbls__get_by_key(key);} } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java index 2c11dcfa1..94633699b 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr__v2_bldr.java @@ -93,7 +93,7 @@ public class Fsdb_db_mgr__v2_bldr { switch (layout.Tid()) { case Xow_db_layout.Tid__all: return Xow_db_file_.Tid__core; case Xow_db_layout.Tid__few: return Xow_db_file_.Tid__file_solo; - case Xow_db_layout.Tid__lot: return Xow_db_file_.Tid__file_core; + case Xow_db_layout.Tid__lot: return Xow_db_file_.Tid__file_core; default: throw Err_.new_unimplemented(); } } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java index 3b6e4b3e5..e00125c47 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; import gplx.dbs.*; -public class Fsd_dir_tbl implements Rls_able { - private final String tbl_name = "fsdb_dir"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Fsd_dir_tbl implements Db_tbl { + private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_id, fld_owner_id, fld_name; private final Db_conn conn; private Db_stmt stmt_select_by_name; public Fsd_dir_tbl(Db_conn conn, boolean schema_is_1) { @@ -28,9 +28,7 @@ public class Fsd_dir_tbl implements Rls_able { this.fld_name = flds.Add_str ("dir_name", 255); conn.Rls_reg(this); } - public void Rls() { - stmt_select_by_name = Db_stmt_.Rls(stmt_select_by_name); - } + public String Tbl_name() {return tbl_name;} private final String tbl_name = "fsdb_dir"; public void Create_tbl() { conn.Meta_tbl_create ( Dbmeta_tbl_itm.New(tbl_name, flds @@ -65,4 +63,7 @@ public class Fsd_dir_tbl implements Rls_able { } finally {rdr.Rls();} } + public void Rls() { + stmt_select_by_name = Db_stmt_.Rls(stmt_select_by_name); + } } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java index bf2aacbdd..0eff0f1d6 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; -public class Fsd_fil_tbl implements Rls_able { - public final String tbl_name = "fsdb_fil"; public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Fsd_fil_tbl implements Db_tbl { + public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); public final String fld_id, fld_owner_id, fld_name, fld_xtn_id, fld_ext_id, fld_size, fld_modified, fld_hash, fld_bin_db_id; private final String idx_owner; public final Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; private int mnt_id; @@ -36,6 +36,7 @@ public class Fsd_fil_tbl implements Rls_able { this.idx_owner = Dbmeta_idx_itm.Bld_idx_name(tbl_name, "owner"); conn.Rls_reg(this); } + public String Tbl_name() {return tbl_name;} private final String tbl_name = "fsdb_fil"; public void Rls() { stmt_insert = Db_stmt_.Rls(stmt_insert); stmt_update = Db_stmt_.Rls(stmt_update); diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java index 867fe32ae..c30904914 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; import gplx.dbs.*; import gplx.fsdb.meta.*; import gplx.xowa.files.*; -public class Fsd_thm_tbl implements Rls_able { - public final String tbl_name; public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Fsd_thm_tbl implements Db_tbl { + public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); public final String fld_id, fld_owner_id, fld_w, fld_h, fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash; public final Db_conn conn; private Db_stmt stmt_insert, stmt_select_by_fil_exact, stmt_select_by_fil_near; private int mnt_id; private boolean schema_thm_page; public Fsd_thm_tbl(Db_conn conn, boolean schema_is_1, int mnt_id, boolean schema_thm_page) { @@ -42,11 +42,7 @@ public class Fsd_thm_tbl implements Rls_able { this.fld_hash = flds.Add_str ("thm_hash", 40); conn.Rls_reg(this); } - public void Rls() { - stmt_insert = Db_stmt_.Rls(stmt_insert); - stmt_select_by_fil_exact = Db_stmt_.Rls(stmt_select_by_fil_exact); - stmt_select_by_fil_near = Db_stmt_.Rls(stmt_select_by_fil_near); - } + public String Tbl_name() {return tbl_name;} private final String tbl_name; public void Create_tbl() { conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds , Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "owner", fld_owner_id, fld_id, fld_w, fld_time, fld_page) @@ -155,4 +151,9 @@ public class Fsd_thm_tbl implements Rls_able { thm.Init_by_match(max); return Bool_.Y; } + public void Rls() { + stmt_insert = Db_stmt_.Rls(stmt_insert); + stmt_select_by_fil_exact = Db_stmt_.Rls(stmt_select_by_fil_exact); + stmt_select_by_fil_near = Db_stmt_.Rls(stmt_select_by_fil_near); + } } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java index 1af8c3d32..9dfe4c34e 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*; import gplx.dbs.*; import gplx.dbs.qrys.*; -public class Fsm_atr_tbl { - public final String tbl_name; public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Fsm_atr_tbl implements Db_tbl { + public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_uid, fld_url; private final Db_conn conn; public Fsm_atr_tbl(Db_conn conn, boolean schema_is_1) { @@ -29,6 +29,7 @@ public class Fsm_atr_tbl { this.fld_uid = flds.Add_int_pkey (fld_prefix + "uid"); this.fld_url = flds.Add_str (fld_prefix + "url", 255); } + public String Tbl_name() {return tbl_name;} private final String tbl_name; public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public Fsm_atr_fil Select_1st_or_fail(Fsm_mnt_itm mnt_itm, Fsdb_db_mgr core_mgr, int mnt_id, boolean schema_thm_page) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto(); @@ -52,4 +53,8 @@ public class Fsm_atr_tbl { public void Insert(int id, String url_rel) { conn.Stmt_insert(tbl_name, flds).Val_int(fld_uid, id).Val_str(fld_url, url_rel).Exec_insert(); } + public void Rls() {} + + public static final String TBL_NAME = "fsdb_dba"; + public static Fsm_atr_tbl Get_by_key(Db_tbl_owner owner) {return (Fsm_atr_tbl)owner.Tbls__get_by_key(TBL_NAME);} } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java index 77e26ed09..9657e0338 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*; import gplx.dbs.*; import gplx.dbs.qrys.*; -public class Fsm_bin_tbl { - private final String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Fsm_bin_tbl implements Db_tbl { + private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_uid, fld_url, fld_bin_len, fld_bin_max; private final Db_conn conn; private int mnt_id; public Fsm_bin_tbl(Db_conn conn, boolean schema_is_1, int mnt_id) { @@ -37,6 +37,7 @@ public class Fsm_bin_tbl { fld_bin_max = Dbmeta_fld_itm.Key_null; } } + public String Tbl_name() {return tbl_name;} private final String tbl_name; public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public void Insert(int id, String url_rel) { conn.Stmt_insert(tbl_name, flds).Crt_int(fld_uid, id).Val_str(fld_url, url_rel).Val_long(fld_bin_len, 0).Val_long(fld_bin_max, 0).Exec_insert(); @@ -55,4 +56,5 @@ public class Fsm_bin_tbl { } finally {rdr.Rls();} return (Fsm_bin_fil[])rv.To_ary(Fsm_bin_fil.class); } + public void Rls() {} } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java index a292aa4ce..7c9d756e4 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*; import gplx.dbs.*; -public class Fsm_mnt_tbl implements Rls_able { - private final String tbl_name = "fsdb_mnt"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Fsm_mnt_tbl implements Db_tbl { + private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_id, fld_name, fld_url; private final Db_conn conn; public Fsm_mnt_tbl(Db_conn conn, boolean schema_is_1) { @@ -28,6 +28,7 @@ public class Fsm_mnt_tbl implements Rls_able { fld_url = flds.Add_str ("mnt_url", 255); conn.Rls_reg(this); } + public String Tbl_name() {return tbl_name;} private final String tbl_name = "fsdb_mnt"; public void Create_tbl() { Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds); conn.Meta_tbl_create(meta); diff --git a/400_xowa/src/gplx/xowa/Xow_wiki_.java b/400_xowa/src/gplx/xowa/Xow_wiki_.java index 1ca05227f..82fc612fc 100644 --- a/400_xowa/src/gplx/xowa/Xow_wiki_.java +++ b/400_xowa/src/gplx/xowa/Xow_wiki_.java @@ -22,9 +22,9 @@ import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis. import gplx.xowa.bldrs.infos.*; import gplx.xowa.langs.*; public class Xow_wiki_ { - public static void Create(Xoa_app app, Xow_ns_mgr ns_mgr, String domain, Io_url core_url) { - Xowd_core_db_props props = new Xowd_core_db_props( 1, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Io_stream_tid_.Tid__raw, Io_stream_tid_.Tid__raw, Bool_.N, Bool_.N); - Xow_db_file core_db = Xow_db_file__core_.Make_core_db(props, Xob_info_session.new_(app.User().Key(), domain, domain), core_url, domain); + public static void Create(String user_key, Xow_ns_mgr ns_mgr, String domain, Io_url core_url) { + Xowd_core_db_props props = new Xowd_core_db_props(1, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Io_stream_tid_.Tid__raw, Io_stream_tid_.Tid__raw, Bool_.N, Bool_.N); + Xow_db_file core_db = Xow_db_file__core_.Make_core_db(props, Xob_info_session.new_(user_key, domain, domain), core_url, domain); core_db.Tbl__text().Create_tbl(); core_db.Tbl__site_stats().Update(0, 0, 0); // save page stats core_db.Tbl__ns().Insert(ns_mgr); // save ns diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/Xobc_data_db.java b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/Xobc_data_db.java index c28886946..7035b4cd6 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/Xobc_data_db.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/Xobc_data_db.java @@ -29,7 +29,7 @@ public class Xobc_data_db { this.tbl__host_regy = new Xobc_host_regy_tbl(conn); this.tbl__version_regy = new Xobc_version_regy_tbl(conn); this.tbl__lang_regy = new Xobc_lang_regy_tbl(conn); - conn.Meta_tbl_assert(tbl__task_regy, tbl__step_regy, tbl__step_map, tbl__import_step, tbl__host_regy, tbl__version_regy); + conn.Meta_tbl_assert(tbl__task_regy, tbl__step_regy, tbl__step_map, tbl__import_step, tbl__host_regy, tbl__version_regy, tbl__lang_regy); } public Db_conn Conn() {return conn;} private final Db_conn conn; public Io_url Url() {return url;} private final Io_url url; diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/datas/Xobc_lang_regy_tbl.java b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/datas/Xobc_lang_regy_tbl.java index acc143ab3..936ca9620 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/datas/Xobc_lang_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/dbs/datas/Xobc_lang_regy_tbl.java @@ -30,9 +30,7 @@ public class Xobc_lang_regy_tbl implements Db_tbl { conn.Rls_reg(this); } public String Tbl_name() {return tbl_name;} private final String tbl_name; - public void Create_tbl() { - conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds)); - } + public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public Xobc_lang_regy_itm[] Select_all() { List_adp list = List_adp_.New(); Db_rdr rdr = conn.Stmt_select(tbl_name, flds).Exec_select__rls_auto(); diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/mgrs/Xobc_filter_mgr.java b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/mgrs/Xobc_filter_mgr.java index 1f5b2c246..cc90a8d7e 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/mgrs/Xobc_filter_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/mgrs/Xobc_filter_mgr.java @@ -38,7 +38,6 @@ public class Xobc_filter_mgr { if ( Xow_domain_itm_.Match_lang(task_domain, lang_key_str) && Xow_domain_itm_.Match_type(task_domain, type_key_str) ) - tmp.Add(task); } diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/archives/Reindex_html_dbs_cmd.java b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/archives/Reindex_html_dbs_cmd.java index 1e1de3754..8ff343f2f 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/archives/Reindex_html_dbs_cmd.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/archives/Reindex_html_dbs_cmd.java @@ -146,8 +146,8 @@ class Reindex_html_dbs_cmd { // delete old dbs wiki.Data__core_mgr().Rls(); String repack_suffix = Xoh_trg_tbl_mgr.Repack_suffix; - Db_stmt delete_stmt = core_conn.Stmt_delete(Xowd_xowa_db_tbl.Tbl_name, Xowd_xowa_db_tbl.Fld_id); - Db_rdr rdr = core_conn.Stmt_select(Xowd_xowa_db_tbl.Tbl_name, String_.Ary(Xowd_xowa_db_tbl.Fld_id, Xowd_xowa_db_tbl.Fld_type, Xowd_xowa_db_tbl.Fld_url)).Exec_select__rls_auto(); + Db_stmt delete_stmt = core_conn.Stmt_delete(Xowd_xowa_db_tbl.TBL_NAME, Xowd_xowa_db_tbl.Fld_id); + Db_rdr rdr = core_conn.Stmt_select(Xowd_xowa_db_tbl.TBL_NAME, String_.Ary(Xowd_xowa_db_tbl.Fld_id, Xowd_xowa_db_tbl.Fld_type, Xowd_xowa_db_tbl.Fld_url)).Exec_select__rls_auto(); while (rdr.Move_next()) { byte file_tid = rdr.Read_byte(Xowd_xowa_db_tbl.Fld_type); if (file_tid != Xow_db_file_.Tid__html_data) continue; @@ -160,8 +160,8 @@ class Reindex_html_dbs_cmd { delete_stmt.Rls(); // update new dbs - Db_stmt update_stmt = core_conn.Stmt_update(Xowd_xowa_db_tbl.Tbl_name, String_.Ary(Xowd_xowa_db_tbl.Fld_id), Xowd_xowa_db_tbl.Fld_url); - rdr = core_conn.Stmt_select(Xowd_xowa_db_tbl.Tbl_name, String_.Ary(Xowd_xowa_db_tbl.Fld_id, Xowd_xowa_db_tbl.Fld_type, Xowd_xowa_db_tbl.Fld_url)).Exec_select__rls_auto(); + Db_stmt update_stmt = core_conn.Stmt_update(Xowd_xowa_db_tbl.TBL_NAME, String_.Ary(Xowd_xowa_db_tbl.Fld_id), Xowd_xowa_db_tbl.Fld_url); + rdr = core_conn.Stmt_select(Xowd_xowa_db_tbl.TBL_NAME, String_.Ary(Xowd_xowa_db_tbl.Fld_id, Xowd_xowa_db_tbl.Fld_type, Xowd_xowa_db_tbl.Fld_url)).Exec_select__rls_auto(); while (rdr.Move_next()) { byte file_tid = rdr.Read_byte(Xowd_xowa_db_tbl.Fld_type); if (file_tid != Xow_db_file_.Tid__html_data) continue; diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__fil.java b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__fil.java index 8ff34d1fb..d5b722aae 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__fil.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__fil.java @@ -31,7 +31,7 @@ class Split_meta_wkr__fil extends Split_meta_wkr_base { @Override public void On_nth_new(Split_ctx ctx, Db_conn trg_conn) { this.tbl = new Fsd_fil_tbl(trg_conn, Bool_.N, Fsm_mnt_mgr.Mnt_idx_main); tbl.Create_tbl(); - this.stmt = trg_conn.Stmt_insert(tbl.tbl_name, tbl.flds); + this.stmt = trg_conn.Stmt_insert(tbl.Tbl_name(), tbl.flds); } @Override public void On_nth_rls(Split_ctx ctx, Db_conn trg_conn) {this.stmt = Db_stmt_.Rls(stmt);} @Override protected String Load_sql(Db_attach_mgr attach_mgr, int ns_id, int score_bgn, int score_end) { diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__org.java b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__org.java index c672dfa96..fcb0c12cf 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__org.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__org.java @@ -31,7 +31,7 @@ class Split_meta_wkr__org extends Split_meta_wkr_base { @Override public void On_nth_new(Split_ctx ctx, Db_conn trg_conn) { this.tbl = new Xof_orig_tbl(trg_conn, Bool_.N); tbl.Create_tbl(); - this.stmt = trg_conn.Stmt_insert(tbl.tbl_name, tbl.flds); + this.stmt = trg_conn.Stmt_insert(tbl.Tbl_name(), tbl.flds); } @Override public void On_nth_rls(Split_ctx ctx, Db_conn trg_conn) {this.stmt = Db_stmt_.Rls(stmt);} @Override protected String Load_sql(Db_attach_mgr attach_mgr, int ns_id, int score_bgn, int score_end) { diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__thm.java b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__thm.java index 3f61030e5..ac0ae1110 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__thm.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/exports/splits/files/Split_meta_wkr__thm.java @@ -31,7 +31,7 @@ class Split_meta_wkr__thm extends Split_meta_wkr_base { @Override public void On_nth_new(Split_ctx ctx, Db_conn trg_conn) { this.tbl = new Fsd_thm_tbl(trg_conn, Bool_.N, Fsm_mnt_mgr.Mnt_idx_main, Bool_.Y); tbl.Create_tbl(); - this.stmt = trg_conn.Stmt_insert(tbl.tbl_name, tbl.flds); + this.stmt = trg_conn.Stmt_insert(tbl.Tbl_name(), tbl.flds); } @Override public void On_nth_rls(Split_ctx ctx, Db_conn trg_conn) {this.stmt = Db_stmt_.Rls(stmt);} @Override protected String Load_sql(Db_attach_mgr attach_mgr, int ns_id, int score_bgn, int score_end) { diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xopg_db_mgr.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xopg_db_mgr.java new file mode 100644 index 000000000..d2c58cb7f --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xopg_db_mgr.java @@ -0,0 +1,78 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; +import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; +import gplx.xowa.addons.users.wikis.regys.dbs.*; +import gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs.*; +public class Xopg_db_mgr { + private final Xodb_mgr_sql db_mgr; + public Xopg_db_mgr(Xowe_wiki wiki) { + this.db_mgr = wiki.Db_mgr_as_sql(); + } + public int Create(int ns_id, byte[] ttl_page_db, byte[] text_raw) { + Xow_db_file core_db = db_mgr.Core_data_mgr().Db__core(); + + int page_id = core_db.Tbl__cfg().Select_int_or("db", "page.id_next", -1); + + // get page_db, text_db and over variables + Xowd_page_tbl page_tbl = db_mgr.Core_data_mgr().Tbl__page(); + Xow_db_file text_db = db_mgr.Core_data_mgr().Db__text(); + if (text_db == null) text_db = db_mgr.Core_data_mgr().Db__core(); // HACK: needed for create new wiki DATE:2016-10-29 + Xowd_text_tbl text_tbl = text_db.Tbl__text(); + byte[] text_zip = text_tbl.Zip(text_raw); + boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text_raw, text_raw.length); + + // do insert + page_tbl.Insert_bgn(); + text_tbl.Insert_bgn(); + int ns_count = core_db.Tbl__ns().Select_ns_count(ns_id) + 1; + try { + db_mgr.Core_data_mgr().Create_page(page_tbl, text_tbl, page_id, ns_id, ttl_page_db, redirect, Datetime_now.Get(), text_zip, text_raw.length, ns_count, text_db.Id(), -1); + core_db.Tbl__ns().Update_ns_count(ns_id, ns_count); + } finally { + page_tbl.Insert_end(); + text_tbl.Insert_end(); + } + return page_id; + } + public static int Create(Xodb_wiki_db core_db, int ns_id, byte[] ttl_page_db, byte[] text_raw) { + Db_cfg_tbl cfg_tbl = Db_cfg_tbl.Get_by_key(core_db, Xowd_cfg_tbl_.Tbl_name); + + int page_id = cfg_tbl.Select_int_or("db", "page.id_next", -1); + Xowd_page_tbl page_tbl = Xowd_page_tbl.Get_by_key(core_db); + Xowd_text_tbl text_tbl = Xowd_text_tbl.Get_by_key(core_db); + byte[] text_zip = text_tbl.Zip(text_raw); + boolean redirect = Bool_.N; + + // do insert + page_tbl.Insert_bgn(); + text_tbl.Insert_bgn(); + Xowd_site_ns_tbl ns_tbl = Xowd_site_ns_tbl.Get_by_key(core_db); + int ns_count = ns_tbl.Select_ns_count(ns_id) + 1; + try { + page_tbl.Insert_cmd_by_batch(page_id, ns_id, ttl_page_db, redirect, Datetime_now.Get(), text_raw.length, ns_count, 0, -1); + text_tbl.Insert_cmd_by_batch(page_id, text_zip); + Xowd_site_ns_tbl.Get_by_key(core_db).Update_ns_count(ns_id, ns_count); + } finally { + page_tbl.Insert_end(); + text_tbl.Insert_end(); + } + return page_id; + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java index 62ebb4828..db89c8107 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java @@ -16,42 +16,24 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +import gplx.dbs.sys.*; import gplx.langs.jsons.*; import gplx.xowa.addons.users.wikis.regys.dbs.*; public class Xouw_itm_bridge implements gplx.xowa.htmls.bridges.Bridge_cmd_itm { - private Xoa_app app; + private Xouw_itm_mgr itm_mgr; public void Init_by_app(Xoa_app app) { - this.app = app; + this.itm_mgr = new Xouw_itm_mgr(app); } public String Exec(Json_nde data) { byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Msg__proc, null), Byte_ascii.Max_7_bit); Json_nde args = data.Get_kv(Msg__args).Val_as_nde(); switch (proc_id) { - case Proc__save: Save(args); break; + case Proc__save: itm_mgr.Save(args); break; default: throw Err_.new_unhandled_default(proc_id); } return ""; } - private void Save(Json_nde args) { - Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn()); - int id = args.Get_as_int("id"); - if (id == -1) { - id = 2; - } - String domain = args.Get_as_str("key"); - String url = args.Get_as_str("file"); - if (db_mgr.Tbl__wiki().Upsert(id, domain, args.Get_as_str("name"), url)) { - gplx.xowa.wikis.nss.Xow_ns_mgr ns_mgr = gplx.xowa.wikis.nss.Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.U8()); - Xow_wiki_.Create(app, ns_mgr, domain, Io_url_.new_fil_(url).OwnerDir()); - Xowe_wiki wiki = new Xowe_wiki((Xoae_app)app, app.Lang_mgr().Get_by_or_en(Bry_.Empty), ns_mgr, gplx.xowa.wikis.domains.Xow_domain_itm_.parse(Bry_.new_u8(domain)), Io_url_.new_fil_(url).OwnerDir()); - gplx.fsdb.Fsdb_db_mgr__v2_bldr.Make_core_file_main(wiki, Io_url_.new_fil_(url), domain, gplx.xowa.wikis.data.Xow_db_layout.Itm_all); - wiki.Init_db_mgr(); - wiki.Init_by_wiki__force_and_mark_inited(); - wiki.Data__core_mgr().Dbs__make_by_id(1, gplx.xowa.wikis.data.Xow_db_file_.Tid__core, "", 0, ".xowa"); - wiki.Data__core_mgr().Db__core().Tbl__db().Commit_all(wiki.Data__core_mgr()); - wiki.Db_mgr().Save_mgr().Data_create(Xoa_ttl.Parse(wiki, Bry_.new_a7("Main_Page")), Bry_.new_a7("Main page created")); - } - } + private static final byte[] Msg__proc = Bry_.new_a7("proc"), Msg__args = Bry_.new_a7("args"); private static final byte Proc__save = 0; private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs() diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java index a65c7e79a..704408b97 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java @@ -30,7 +30,7 @@ class Xouw_itm_html extends Xow_special_wtr__base { Xouw_db_mgr db_mgr = new Xouw_db_mgr(conn); Xou_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(key); if (itm == null) - itm = new Xou_wiki_itm(-1, 0, "", "", Io_url_.Empty, ""); + itm = new Xou_wiki_itm(-1, 0, "test4", "test4", Io_url_.new_fil_("C:\\xowa\\test\\test4.xowa"), ""); return new Xouw_itm_doc(itm.Id(), itm.Domain(), itm.Name(), itm.Url().Xto_api()); } @Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) { diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java new file mode 100644 index 000000000..aa86315d3 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java @@ -0,0 +1,46 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +import gplx.langs.jsons.*; +import gplx.dbs.sys.*; import gplx.xowa.addons.users.wikis.regys.dbs.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs.*; +import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.data.*; +import gplx.xowa.langs.cases.*; +class Xouw_itm_mgr { + private final Xoa_app app; + public Xouw_itm_mgr(Xoa_app app) { + this.app = app; + } + public void Save(Json_nde args) { + Save(args.Get_as_int("id"), args.Get_as_str("domain"), args.Get_as_str("name"), args.Get_as_str("file")); + } + public void Save(int id, String domain, String name, String url_str) { + boolean itm_is_new = false; + // get next id if new + if (id == -1) { + itm_is_new = true; + Db_sys_mgr sys_mgr = new Db_sys_mgr(app.User().User_db_mgr().Conn()); + id = sys_mgr.Autonum_next("user.wikis.id"); + } + + // insert into user_wiki + Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn()); + db_mgr.Tbl__wiki().Upsert(id, domain, name, url_str); + // if (itm_is_new) Xow_db_mkr.Create_wiki(app, domain, url_str); + if (itm_is_new) Xow_db_mkr.Create_wiki2(new Xodb_wiki_data(domain, Io_url_.new_fil_(url_str))); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_data.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_data.java new file mode 100644 index 000000000..6573f34dd --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_data.java @@ -0,0 +1,28 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +import gplx.core.ios.streams.*; +public class Xodb_wiki_data { + public Xodb_wiki_data(String domain, Io_url core_url) { + this.domain = domain; + this.core_url = core_url; + } + public String Domain() {return domain;} private final String domain; + public Io_url Core_url() {return core_url;} private final Io_url core_url; + public byte Text_zip_tid() {return text_zip_tid;} private byte text_zip_tid = Io_stream_tid_.Tid__raw; +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db.java new file mode 100644 index 000000000..fcbadf4f0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db.java @@ -0,0 +1,45 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +import gplx.dbs.*; +public class Xodb_wiki_db implements Db_tbl_owner { + private final Ordered_hash tbls = Ordered_hash_.New(); + public Xodb_wiki_db(int tid, Io_url url, Db_conn conn) { + this.tid = tid; + this.url = url; + this.conn = conn; + } + public int Tid() {return tid;} private final int tid; + public Io_url Url() {return url;} private final Io_url url; + public Db_conn Conn() {return conn;} private final Db_conn conn; + public Db_tbl Tbls__get_by_key(String key) {return (Db_tbl)tbls.Get_by(key);} + public void Tbls__add(boolean create, Db_tbl... ary) { + int len = ary.length; + for (int i = 0; i < len; ++i) { + Db_tbl tbl = ary[i]; + tbls.Add(tbl.Tbl_name(), tbl); + if (create) + tbl.Create_tbl(); + } + } + + public static Xodb_wiki_db Make(int tid, Io_url url) { + Db_conn conn = Db_conn_bldr.Instance.Get_or_new(url).Conn(); + return new Xodb_wiki_db(tid, url, conn); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db_tid.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db_tid.java new file mode 100644 index 000000000..ada0dc54d --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db_tid.java @@ -0,0 +1,21 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +public class Xodb_wiki_db_tid { + public static final int Tid__core = 0; +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_mgr.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_mgr.java new file mode 100644 index 000000000..a0931295b --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_mgr.java @@ -0,0 +1,30 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +import gplx.dbs.*; +public class Xodb_wiki_mgr { + public Xodb_wiki_mgr(String domain) { + this.domain = domain; + } + public String Domain() {return domain;} private final String domain; + public Xodb_wiki_db Dbs__get_core() {return dbs__core;} private Xodb_wiki_db dbs__core; + public void Dbs__add(Xodb_wiki_db file) { + if (file.Tid() == Xodb_wiki_db_tid.Tid__core) + dbs__core = file; + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xow_db_mkr.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xow_db_mkr.java new file mode 100644 index 000000000..2be4017d0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xow_db_mkr.java @@ -0,0 +1,119 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.sys.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; +import gplx.core.ios.streams.*; +import gplx.xowa.wikis.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.data.site_stats.*; +import gplx.xowa.langs.cases.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.origs.*; +import gplx.xowa.addons.users.wikis.regys.dbs.*; +public class Xow_db_mkr { + public static Xodb_wiki_mgr Create_wiki2(Xodb_wiki_data data) { + // create db + Xodb_wiki_mgr wiki_mgr = new Xodb_wiki_mgr(data.Domain()); + wiki_mgr.Dbs__add(Xodb_wiki_db.Make(Xodb_wiki_db_tid.Tid__core, data.Core_url())); + + // create tbls: wiki + Xodb_wiki_db core_db = wiki_mgr.Dbs__get_core(); + Db_conn core_conn = core_db.Conn(); + core_db.Tbls__add(Bool_.Y + , Xowd_cfg_tbl_.New(core_conn) + , new Xowd_xowa_db_tbl(core_conn, Bool_.N) + , new Xowd_site_ns_tbl(core_conn, Bool_.N) + , new Xow_site_stats_tbl(core_conn, Bool_.N) + , new Xowd_page_tbl(core_conn, Bool_.N) + , new Xowd_text_tbl(core_conn, Bool_.N, data.Text_zip_tid()) + // if (props.Layout_text().Tid_is_all_or_few()) { // create in advance else will fail for v2; import wiki -> wiki loads and tries to load categories; v2 category processes and builds tbl; DATE:2015-03-22 + , new Xowd_cat_core_tbl(core_conn, Bool_.N) + , new Xowd_cat_link_tbl(core_conn, Bool_.N) + ); + + // insert data: wiki + Xowd_site_ns_tbl.Get_by_key(core_db).Insert(Xow_ns_mgr_.default_(Xol_case_mgr_.U8())); + Xow_site_stats_tbl.Get_by_key(core_db).Update(0, 0, 0); + Db_cfg_tbl cfg_tbl = Db_cfg_tbl.Get_by_key(core_db, Xowd_cfg_tbl_.Tbl_name); + cfg_tbl.Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, "Main_Page"); + cfg_tbl.Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__modified_latest, Datetime_now.Get().XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time)); + Xopg_db_mgr.Create(core_db, Xow_ns_.Tid__main, Bry_.new_a7("Main_Page"), Bry_.new_a7("Main page created")); + Xowd_core_db_props props = new Xowd_core_db_props(2, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Io_stream_tid_.Tid__raw, Io_stream_tid_.Tid__raw, Bool_.N, Bool_.N); + props.Cfg_save(cfg_tbl); + Xowd_xowa_db_tbl.Get_by_key(core_db).Upsert(0, Xow_db_file_.Tid__core, core_db.Url().NameAndExt(), "", -1, Guid_adp_.New_str()); + + // create tbls: fsdb + core_db.Tbls__add(Bool_.Y + , new Fsm_mnt_tbl(core_conn, Bool_.N) + , new Fsm_atr_tbl(core_conn, Bool_.N) + , new Fsm_bin_tbl(core_conn, Bool_.N, Fsm_mnt_mgr.Mnt_idx_main) + , new Fsd_dir_tbl(core_conn, Bool_.N) + , new Fsd_fil_tbl(core_conn, Bool_.N, Fsm_mnt_mgr.Mnt_idx_main) + , new Fsd_thm_tbl(core_conn, Bool_.N, Fsm_mnt_mgr.Mnt_idx_main, Bool_.Y) + , new Xof_orig_tbl(core_conn, Bool_.N) + ); + + // insert data: fsdb + Fsm_mnt_mgr.Patch_core(cfg_tbl); + Fsm_atr_tbl.Get_by_key(core_db).Insert(Fsm_mnt_mgr.Mnt_idx_main, core_db.Url().NameAndExt()); + cfg_tbl.Insert_int("core", "mnt.insert_idx", Fsm_mnt_mgr.Mnt_idx_user); + + return wiki_mgr; + } + public static void Create_wiki(Xoa_app app, String domain, String url_str) { + // create wiki + Io_url url = Io_url_.new_any_(url_str); + Xow_ns_mgr ns_mgr = Xow_ns_mgr_.default_(Xol_case_mgr_.U8()); + Xow_wiki_.Create(app.User().Key(), ns_mgr, domain, url.OwnerDir()); + + // more create; need wiki-reference to create fsdb and create page + Xowe_wiki wiki = new Xowe_wiki((Xoae_app)app, app.Lang_mgr().Get_by_or_en(Bry_.Empty), ns_mgr, Xow_domain_itm_.parse(Bry_.new_u8(domain)), url.OwnerDir()); + gplx.fsdb.Fsdb_db_mgr__v2_bldr.Make_core_file_main(wiki, url, domain, gplx.xowa.wikis.data.Xow_db_layout.Itm_all); + wiki.Init_db_mgr(); + wiki.Init_by_wiki__force_and_mark_inited(); + wiki.Data__core_mgr().Dbs__make_by_id(1, Xow_db_file_.Tid__core, "", 0, ".xowa"); + wiki.Data__core_mgr().Db__core().Tbl__db().Commit_all(wiki.Data__core_mgr()); + + // create default Main_Page + new Xopg_db_mgr(wiki).Create(Xow_ns_.Tid__main, Bry_.new_a7("Main_Page"), Bry_.new_a7("Main page created")); + } +} +/* +xowa_cfg +xowa_db +site_ns +site_stats + +page +text + +cat_core +cat_link + +fsdb_mnt +fsdb_dba +fsdb_dbb +fsdb_dir +fsdb_fil +fsdb_thm +orig_reg + +search_link +search_link_reg +search_word + +css_core +css_file +*/ diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java index 56b424677..583a6348d 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java @@ -19,8 +19,8 @@ package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xo import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.utls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; -public class Xof_orig_tbl implements Rls_able { - public final String tbl_name; public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Xof_orig_tbl implements Db_tbl { + public final Dbmeta_fld_list flds = new Dbmeta_fld_list(); public final String fld_repo, fld_ttl, fld_status, fld_ext, fld_w, fld_h, fld_redirect; public final Db_conn conn; private final Xof_orig_tbl__in_wkr select_in_wkr = new Xof_orig_tbl__in_wkr(); public Db_conn Conn() {return conn;} @@ -39,7 +39,7 @@ public class Xof_orig_tbl implements Rls_able { select_in_wkr.Ctor(this, tbl_name, flds, fld_ttl); conn.Rls_reg(this); } - public void Rls() {} + public String Tbl_name() {return tbl_name;} private final String tbl_name; public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "main", fld_ttl)));} public void Select_by_list(Ordered_hash rv, List_adp itms) {select_in_wkr.Init(rv, itms).Select_in(Cancelable_.Never, conn, 0, itms.Count());} public Xof_orig_itm Select_itm(byte[] ttl) { @@ -88,6 +88,7 @@ public class Xof_orig_tbl implements Rls_able { return rv.W() == Xof_img_size.Null ? Xof_orig_itm.Null : rv; } private static final byte Status_found = 1; + public void Rls() {} } class Xof_orig_tbl__in_wkr extends Db_in_wkr__base { private Xof_orig_tbl tbl; private String tbl_name; private Dbmeta_fld_list flds; private String fld_ttl; diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file.java b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file.java index eb02e99c0..c2b1f1d2a 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file.java @@ -92,7 +92,7 @@ public class Xow_db_file { } public static final Xow_db_file Null = null; - public static Xow_db_file make_(Xob_info_session info_session, Xowd_core_db_props props, int id, byte tid, Io_url url, String ns_ids, int part_id, String core_file_name, Db_conn conn) { + public static Xow_db_file Make(Xob_info_session info_session, Xowd_core_db_props props, int id, byte tid, Io_url url, String ns_ids, int part_id, String core_file_name, Db_conn conn) { Guid_adp guid = Guid_adp_.New(); Xob_info_file info_file = new Xob_info_file(id, Xow_db_file_.To_key(tid), ns_ids, part_id, guid, props.Schema(), core_file_name, url.NameAndExt()); Db_cfg_tbl cfg_tbl = gplx.xowa.wikis.data.Xowd_cfg_tbl_.New(conn); @@ -100,7 +100,7 @@ public class Xow_db_file { cfg_tbl.Create_tbl(); // always create cfg in each db return rv; } - public static Xow_db_file load_(Xowd_core_db_props props, int id, byte tid, Io_url url, String ns_ids, int part_id, Guid_adp guid) { + public static Xow_db_file Load(Xowd_core_db_props props, int id, byte tid, Io_url url, String ns_ids, int part_id, Guid_adp guid) { Db_conn conn = Db_conn_bldr.Instance.Get(url); if (conn == null) { Xoa_app_.Usr_dlg().Warn_many("", "", "wiki.db:missing db; tid=~{0} url=~{1}", Xow_db_file_.To_key(tid), url.Raw()); diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file__core_.java b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file__core_.java index 57d06b964..85b30f167 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file__core_.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_file__core_.java @@ -58,7 +58,7 @@ public class Xow_db_file__core_ { Db_conn core_conn = Db_conn_bldr.Instance.Get_or_fail(itm); // if db has "xowa_db" then assume that it is the core - if (core_conn.Meta_tbl_exists(gplx.xowa.wikis.data.tbls.Xowd_xowa_db_tbl.Tbl_name)) { + if (core_conn.Meta_tbl_exists(gplx.xowa.wikis.data.tbls.Xowd_xowa_db_tbl.TBL_NAME)) { Xoa_app_.Usr_dlg().Log_many("", "", "wiki.db_core.v2.renamed: url=~{0}", itm.Raw()); return itm; } @@ -104,7 +104,7 @@ public class Xow_db_file__core_ { Db_conn core_conn = Db_conn_bldr.Instance.New(core_db_url); // make tbls - Xow_db_file rv = Xow_db_file.make_(info_session, props, Xow_db_file_.Uid__core, core_db_tid, core_db_url, Xob_info_file.Ns_ids_empty, Xob_info_file.Part_id_1st, core_file_name, core_conn); + Xow_db_file rv = Xow_db_file.Make(info_session, props, Xow_db_file_.Uid__core, core_db_tid, core_db_url, Xob_info_file.Ns_ids_empty, Xob_info_file.Part_id_1st, core_file_name, core_conn); rv.Tbl__db().Create_tbl(); rv.Tbl__ns().Create_tbl(); rv.Tbl__site_stats().Create_tbl(); diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java index 56f492cf1..8785e2381 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java @@ -44,7 +44,7 @@ public class Xow_db_mgr { // create core_conn / core_db Db_conn core_conn = Db_conn_bldr.Instance.Get(core_url); props = Xowd_core_db_props.Cfg_load(core_conn); // load props to get layout_text - Dbs__set_by_tid(Xow_db_file.load_(props, Xow_db_file_.Uid__core, Xow_db_file__core_.Core_db_tid(props.Layout_text()), core_url, Xob_info_file.Ns_ids_empty, Xob_info_file.Part_id_1st, Guid_adp_.Empty)); + Dbs__set_by_tid(Xow_db_file.Load(props, Xow_db_file_.Uid__core, Xow_db_file__core_.Core_db_tid(props.Layout_text()), core_url, Xob_info_file.Ns_ids_empty, Xob_info_file.Part_id_1st, Guid_adp_.Empty)); wiki.Props().Init_by_load(wiki.App(), Tbl__cfg()); // load Main_page // load dbs from "xowa_db" tbl @@ -108,7 +108,7 @@ public class Xow_db_mgr { } public Xow_db_file Dbs__make_by_id(int id, byte tid, String ns_ids, int part_id, String file_name_suffix) { Io_url url = wiki_root_dir.GenSubFil(domain_str + file_name_suffix); - Xow_db_file rv = Xow_db_file.make_(db__core.Info_session(), props, id, tid, url, ns_ids, part_id, db__core.Url().NameAndExt(), Db_conn_bldr.Instance.New(url)); + Xow_db_file rv = Xow_db_file.Make(db__core.Info_session(), props, id, tid, url, ns_ids, part_id, db__core.Url().NameAndExt(), Db_conn_bldr.Instance.New(url)); Dbs__add_and_save(rv); Dbs__set_by_tid(rv); return rv; diff --git a/400_xowa/src/gplx/xowa/wikis/data/site_stats/Xow_site_stats_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/site_stats/Xow_site_stats_tbl.java index f2cc0ddd6..7b9e53f47 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/site_stats/Xow_site_stats_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/site_stats/Xow_site_stats_tbl.java @@ -17,8 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.wikis.data.site_stats; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.wikis.data.site_stats.*; -public class Xow_site_stats_tbl { - private final String tbl_name = "site_stats"; +public class Xow_site_stats_tbl implements Db_tbl { private final String fld_row_id, fld_good_articles, fld_total_pages, fld_images; private final Db_conn conn; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); public Xow_site_stats_tbl(Db_conn conn, boolean schema_is_1) { @@ -28,6 +27,7 @@ public class Xow_site_stats_tbl { fld_total_pages = flds.Add_long("ss_total_pages"); fld_images = flds.Add_int("ss_images"); } + public String Tbl_name() {return tbl_name;} private final String tbl_name = TBL_NAME; public void Create_tbl() { conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds)); conn.Stmt_insert(tbl_name, flds).Val_int(fld_row_id, Site_stats_row_id).Val_long(fld_good_articles, 0).Val_long(fld_total_pages, 0).Val_int(fld_images, 0).Exec_insert(); @@ -50,5 +50,9 @@ public class Xow_site_stats_tbl { } } finally {rdr.Rls();} } + public void Rls() {} private static final int Site_stats_row_id = 1; + + public static final String TBL_NAME = "site_stats"; + public static Xow_site_stats_tbl Get_by_key(Db_tbl_owner owner) {return (Xow_site_stats_tbl)owner.Tbls__get_by_key(TBL_NAME);} } diff --git a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java index f440aa1d1..ae256a6ac 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_page_tbl.java @@ -19,9 +19,8 @@ package gplx.xowa.wikis.data.tbls; import gplx.*; import gplx.xowa.*; import gpl import gplx.core.primitives.*; import gplx.core.criterias.*; import gplx.dbs.*; import gplx.xowa.*; import gplx.xowa.wikis.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.wikis.nss.*; -public class Xowd_page_tbl implements Rls_able { - private final Object thread_lock = new Object(); - private final String tbl_name = "page"; +public class Xowd_page_tbl implements Db_tbl { + private final Object thread_lock = new Object(); public final boolean schema_is_1; private String fld_id, fld_ns, fld_title, fld_is_redirect, fld_touched, fld_len, fld_random_int, fld_score, fld_text_db_id, fld_html_db_id, fld_redirect_id, fld_cat_db_id; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); @@ -55,7 +54,7 @@ public class Xowd_page_tbl implements Rls_able { conn.Rls_reg(this); } public Db_conn Conn() {return conn;} private final Db_conn conn; - public String Tbl_name() {return tbl_name;} + public String Tbl_name() {return tbl_name;} private final String tbl_name = TBL_NAME; public Dbmeta_fld_list Flds__all() {return flds;} public String Fld_page_id() {return fld_id;} public String Fld_page_ns() {return fld_ns;} @@ -377,4 +376,6 @@ public class Xowd_page_tbl implements Rls_able { } } public static final String Page_touched_fmt = "yyyyMMddHHmmss"; + public static final String TBL_NAME = "page"; + public static Xowd_page_tbl Get_by_key(Db_tbl_owner owner) {return (Xowd_page_tbl)owner.Tbls__get_by_key(TBL_NAME);} } diff --git a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_ns_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_ns_tbl.java index 55bb932a2..92ad36580 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_ns_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_site_ns_tbl.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.wikis.data.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.wikis.nss.*; -public class Xowd_site_ns_tbl { - private final String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Xowd_site_ns_tbl implements Db_tbl { + private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_id, fld_name, fld_case, fld_count, fld_is_alias; private final Db_conn conn; public Xowd_site_ns_tbl(Db_conn conn, boolean schema_is_1) { @@ -31,6 +31,7 @@ public class Xowd_site_ns_tbl { fld_is_alias = flds.Add_bool ("ns_is_alias"); fld_count = flds.Add_int ("ns_count"); } + public String Tbl_name() {return tbl_name;} private final String tbl_name; public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public void Insert(Xow_ns_mgr ns_mgr) { Db_stmt stmt = conn.Stmt_insert(tbl_name, flds); @@ -81,4 +82,8 @@ public class Xowd_site_ns_tbl { .Crt_int(fld_id, ns_id) .Exec_update(); } + public void Rls() {} + + public static final String TBL_NAME = "site_ns"; + public static Xowd_site_ns_tbl Get_by_key(Db_tbl_owner owner) {return (Xowd_site_ns_tbl)owner.Tbls__get_by_key(TBL_NAME);} } diff --git a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_text_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_text_tbl.java index edf1eef0c..83578e988 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_text_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_text_tbl.java @@ -17,9 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.wikis.data.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.core.ios.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xowd_text_tbl implements Rls_able { +public class Xowd_text_tbl implements Db_tbl { private final Object thread_lock = new Object(); - private final String tbl_name = "text"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); + private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_page_id, fld_text_data; private final Db_conn conn; private Db_stmt stmt_select, stmt_insert; private final Io_stream_zip_mgr zip_mgr = new Io_stream_zip_mgr(); private final byte zip_tid; @@ -32,6 +32,7 @@ public class Xowd_text_tbl implements Rls_able { fld_text_data = flds.Add_bry(fld_text_data_name); conn.Rls_reg(this); } + public String Tbl_name() {return tbl_name;} private final String tbl_name = TBL_NAME; public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public void Insert_bgn() {conn.Txn_bgn("schema__text__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);} public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);} @@ -65,4 +66,7 @@ public class Xowd_text_tbl implements Rls_able { stmt_insert = Db_stmt_.Rls(stmt_insert); } } + + public static final String TBL_NAME = "text"; + public static Xowd_text_tbl Get_by_key(Db_tbl_owner owner) {return (Xowd_text_tbl)owner.Tbls__get_by_key(TBL_NAME);} } diff --git a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_xowa_db_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_xowa_db_tbl.java index 4a1b5e285..346d0fa60 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_xowa_db_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/tbls/Xowd_xowa_db_tbl.java @@ -18,14 +18,14 @@ along with this program. If not, see . package gplx.xowa.wikis.data.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.wikis.data.*; -public class Xowd_xowa_db_tbl { - public static final String Tbl_name = "xowa_db", Fld_id = "db_id", Fld_type = "db_type", Fld_url = "db_url"; - private final String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); +public class Xowd_xowa_db_tbl implements Db_tbl { + public static final String Fld_id = "db_id", Fld_type = "db_type", Fld_url = "db_url"; + private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld_id, fld_type, fld_url, fld_ns_ids, fld_part_id, fld_guid; private boolean schema_is_1; private final Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); public Xowd_xowa_db_tbl(Db_conn conn, boolean schema_is_1) { this.conn = conn; this.schema_is_1 = schema_is_1; - this.tbl_name = Tbl_name; + this.tbl_name = TBL_NAME; fld_id = flds.Add_int_pkey (Fld_id); fld_type = flds.Add_byte (Fld_type); fld_url = flds.Add_str (Fld_url, 512); @@ -39,6 +39,7 @@ public class Xowd_xowa_db_tbl { } stmt_bldr.Conn_(conn, tbl_name, flds, fld_id); } + public String Tbl_name() {return tbl_name;} private final String tbl_name; public static final String TBL_NAME = "xowa_db"; public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public Xow_db_file[] Select_all(Xowd_core_db_props props, Io_url wiki_root_dir) { List_adp list = List_adp_.New(); @@ -52,7 +53,7 @@ public class Xowd_xowa_db_tbl { guid = Guid_adp_.Parse(rdr.Read_str(fld_guid)); } int db_id = rdr.Read_int(fld_id); - Xow_db_file db_file = Xow_db_file.load_(props, db_id, rdr.Read_byte(fld_type), wiki_root_dir.GenSubFil(rdr.Read_str(fld_url)), ns_ids, part_id, guid); + Xow_db_file db_file = Xow_db_file.Load(props, db_id, rdr.Read_byte(fld_type), wiki_root_dir.GenSubFil(rdr.Read_str(fld_url)), ns_ids, part_id, guid); list.Add(db_file); } } finally {rdr.Rls();} @@ -67,6 +68,9 @@ public class Xowd_xowa_db_tbl { Commit_itm(core_data_mgr.Dbs__get_at(i)); } finally {stmt_bldr.Batch_end();} } + public void Upsert(int id, byte tid, String url, String ns_ids, int part_id, String guid) { + gplx.dbs.utls.Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld_id), id, tid, url, ns_ids, part_id, guid); + } private void Commit_itm(Xow_db_file itm) { Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); switch (itm.Cmd_mode()) { @@ -81,6 +85,9 @@ public class Xowd_xowa_db_tbl { 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()); } + public void Rls() {} + + public static Xowd_xowa_db_tbl Get_by_key(Db_tbl_owner owner) {return (Xowd_xowa_db_tbl)owner.Tbls__get_by_key(TBL_NAME);} } class Xow_db_file_sorter__id implements gplx.core.lists.ComparerAble { public int compare(Object lhsObj, Object rhsObj) {