User_wiki: Simplify creation of wiki database file and tables

v3.3.4
gnosygnu 8 years ago
parent ae0fb89745
commit 8016846cd9

@ -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 <http://www.gnu.org/licenses/>.
*/
package gplx.dbs; import gplx.*;
public interface Db_tbl_owner {
Db_tbl Tbls__get_by_key(String key);
}

@ -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);}
}

@ -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();
}
}

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);
}
}

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);
}
}

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);}
}

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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() {}
}

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);

@ -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

@ -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;

@ -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();

@ -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);
}

@ -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;

@ -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) {

@ -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) {

@ -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) {

@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}
}

@ -16,42 +16,24 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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()

@ -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) {

@ -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 <http://www.gnu.org/licenses/>.
*/
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)));
}
}

@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}

@ -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 <http://www.gnu.org/licenses/>.
*/
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);
}
}

@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}

@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}
}

@ -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 <http://www.gnu.org/licenses/>.
*/
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
*/

@ -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;

@ -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());

@ -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();

@ -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;

@ -17,8 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);}
}

@ -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);}
}

@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
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);}
}

@ -17,9 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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);}
}

@ -18,14 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
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) {

Loading…
Cancel
Save