1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2014-08-03 23:31:22 -04:00
parent 7b6e65b088
commit fb8c06c560
191 changed files with 1869 additions and 722 deletions

View File

@@ -58,7 +58,7 @@ public class Xodb_fsys_mgr {
if (max == Max_core_db) return files_ary[File_id_core];
return Make(tid).File_max_(max);
}
private void Init_by_tid_core(Xodb_file file) {core_provider = page_provider = category_provider = wikidata_provider = file.Provider();}
private void Init_by_tid_core(Xodb_file file) {core_provider = page_provider = category_provider = wikidata_provider = file.Provider();}
public void Init_by_tid_category(Xodb_file file) {category_provider = file.Provider();}
public void Init_by_tid_wikidata(Xodb_file file) {wikidata_provider = file.Provider();}
private void Init_by_ns_map(Xow_ns_mgr ns_mgr, Xodb_ns_map_mgr ns_map) {
@@ -97,7 +97,7 @@ public class Xodb_fsys_mgr {
for (int i = 0; i < files_ary_len; i++) {
Xodb_file file = files_ary[i];
if (Byte_.In(file.Tid(), tids))
Xodb_fsdb_mgr_.Index_create(usr_dlg, file, idxs);
Sqlite_engine_.Idx_create(usr_dlg, file.Provider(), Int_.XtoStr(file.Id()), idxs);
}
}
public void Overwrite(int file_idx) {Create_sqlite3(src_dir, trg_dir, trg_name, file_idx);}
@@ -130,17 +130,3 @@ public class Xodb_fsys_mgr {
public static final int Heap_max_infinite = 0;
public static final long Max_core_db = -1;
}
class Xodb_fsdb_mgr_ {
public static void Index_create(Gfo_usr_dlg usr_dlg, Xodb_file file, Db_idx_itm[] idxs) {
Db_provider provider = file.Provider();
provider.Txn_mgr().Txn_end_all(); // commit any pending transactions
int len = idxs.length;
for (int i = 0; i < len; i++) {
provider.Txn_mgr().Txn_bgn_if_none();
String index = idxs[i].Xto_sql();
usr_dlg.Prog_many("", "", "creating index: ~{0} ~{1}", file.Id(), index);
provider.Exec_sql(index);
provider.Txn_mgr().Txn_end_all();
}
}
}

View File

@@ -18,8 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
import org.junit.*; import gplx.xowa.bldrs.*; import gplx.xowa.ctgs.*; import gplx.dbs.*; import gplx.xowa.dbs.tbls.*;
public class Xodb_load_mgr_sql_tst {
@Before public void init() {fxt.Clear();} private Xodb_load_mgr_sql_fxt fxt = new Xodb_load_mgr_sql_fxt();
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xodb_load_mgr_sql_fxt fxt = new Xodb_load_mgr_sql_fxt();
@Test public void Load_ctg_ttls() {
if (Xoa_test_.Db_skip()) return;
Xodb_page[] ctgs = fxt.pages_
( fxt.ctg_(1, "Ctg_1", Bool_.Y, 10, 11, 12)
, fxt.ctg_(2, "Ctg_2", Bool_.N, 20, 21, 22)

View File

@@ -0,0 +1,101 @@
/*
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.dbs.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
class Hdump_data_mgr {
// private Xow_wiki wiki;
// public void Init_by_wiki(Xow_wiki wiki) {this.wiki = wiki;}
public void Select(int ns_id, Hdump_page_row page, int page_id) {
Hdump_db db = Get_db(ns_id, page_id);
// int reg =
db.Page_tbl().Select(null, page, page_id);
// db.Frag_tbl().Select(list, 1);
// page.Frags_(list.XtoAry());
}
public void Insert(int ns_id, Hdump_page_row page) {
byte[] page_html = page.Page_html();
int page_html_len = page_html.length;
Hdump_db db = Get_db(ns_id, page_html_len);
Hdump_frag_row[] frags = page.Frags();
int frags_len = frags.length;
db.Page_tbl().Insert(page.Page_id(), page.Page_html(), frags_len, 1);
Hdump_frag_tbl frag_tbl = db.Frag_tbl();
for (int i = 0; i < frags_len; ++i) {
Hdump_frag_row frag = frags[i];
frag_tbl.Insert(null, frag.Frag_id(), page.Page_id(), frag.Frag_tid(), frag.Frag_key(), frag.Frag_text());
}
}
public void Update() {
}
private Hdump_db Get_db(int ns_id, int len) {return null;}
}
class Hdump_db {
public Io_url Db_url() {return db_url;} private Io_url db_url = Io_url_.Null;
public void Txn_bgn() {}
public void Txn_end() {}
public void Rls() {}
public Hdump_page_tbl Page_tbl() {return page_tbl;} private Hdump_page_tbl page_tbl = new Hdump_page_tbl();
public Hdump_frag_tbl Frag_tbl() {return frag_tbl;} private Hdump_frag_tbl frag_tbl = new Hdump_frag_tbl();
}
class Hdump_bldr {
public byte[] Do_this() {
// SELECT * FROM page_id
return null;
}
}
class Hdump_rdr {
public void Read(Hdump_page page, Hdump_text_itm[] itms) {
int len = itms.length;
for (int i = 0; i < len; ++i) {
Hdump_text_itm itm = itms[i];
switch (itm.Tid()) {
case Hdump_text_tid.Tid_page: Read_page(page, itm); break;
case Hdump_text_tid.Tid_file: break;
}
}
}
public void Read_page(Hdump_page page, Hdump_text_itm itm) {
page.Version_id_(Bry_.Xto_int(itm.Args()));
page.Html_(itm.Text());
}
public void Read_file(Hdump_page page, Hdump_text_itm file) {
//byte[][] args = null;
}
}
class Hdump_page {
public int Version_id() {return version_id;} public void Version_id_(int v) {version_id = v;} private int version_id;
public byte[] Html() {return html;} public void Html_(byte[] v) {html = v;} private byte[] html;
public void Generate() {
// swap in each file
// add skin
// swap in display title, content_sub, menu
}
}
class Hdump_itm_file {
public byte[] Ttl() {return ttl;} private byte[] ttl;
public void Init(byte[][] ary) {
ttl = ary[0];
}
}
class Hdump_text_itm {
public int Tid() {return tid;} public void Tid_(int v) {tid = v;} private int tid;
public byte[] Args() {return args;} public void Args_(byte[] v) {args = v;} private byte[] args;
public byte[] Text() {return text;} public void Text_(byte[] v) {text = v;} private byte[] text;
}
class Hdump_text_tid {
public static final int Tid_page = 0, Tid_file = 1, Tid_display = 2, Tid_content_sub = 3, Tid_sidebar = 4;
}

View File

@@ -22,6 +22,7 @@ public class Hdump_page_row {
public byte[] Page_html() {return page_html;} private byte[] page_html;
public int Frags_len() {return frags_len;} private int frags_len;
public int Make_id() {return make_id;} private int make_id;
public Hdump_frag_row[] Frags() {return frags;} public void Frags_(Hdump_frag_row[] frags) {this.frags = frags;} private Hdump_frag_row[] frags;
public Hdump_page_row Ctor(int page_id, byte[] page_html, int frags_len, int make_id) {
this.page_id = page_id;
this.page_html = page_html;

View File

@@ -18,9 +18,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.dbs.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
import gplx.dbs.*; import gplx.ios.*;
public class Hdump_page_tbl {
private Db_provider provider;
private Db_stmt stmt_select, stmt_insert, stmt_update, stmt_delete;
private Io_stream_zip_mgr zip_mgr; private byte zip_tid;
public void Ctor(Io_stream_zip_mgr zip_mgr, byte zip_tid) {this.zip_mgr = zip_mgr; this.zip_tid = zip_tid;}
public void Ctor(Db_provider provider, Io_stream_zip_mgr zip_mgr, byte zip_tid) {this.provider = provider; this.zip_mgr = zip_mgr; this.zip_tid = zip_tid;}
@gplx.Virtual public void Insert(int page_id, byte[] page_html, int frags_len, int make_id) {
if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(provider, Tbl_name, Flds_all);
try {
page_html = zip_mgr.Zip(zip_tid, page_html);
stmt_insert.Val_int_(page_id).Val_str_by_bry_(page_html).Val_int_(frags_len).Val_int_(make_id).Exec_insert();
} finally {stmt_insert.Rls();}
}
@gplx.Virtual public void Insert(Db_provider provider, int page_id, byte[] page_html, int frags_len, int make_id) {
if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(provider, Tbl_name, Flds_all);
try {

View File

@@ -18,9 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
import gplx.dbs.*;
public class Xodb_search_title_page_tbl {
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main_unique);}
public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main_non_unique);}
public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);}
public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_unique);}
public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_non_unique);}
public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stp_word_id, Fld_stp_page_id);}
public static void Insert(Db_stmt stmt, int word_id, int page_id) {
stmt.Clear()
@@ -30,13 +30,13 @@ public class Xodb_search_title_page_tbl {
}
public static final String Tbl_name = "search_title_page", Fld_stp_word_id = "stp_word_id", Fld_stp_page_id = "stp_page_id";
private static final String Tbl_sql = String_.Concat_lines_nl
( "CREATE TABLE IF NOT EXISTS search_title_page"
, "( stp_word_id integer NOT NULL"
, ", stp_page_id integer NOT NULL"
, ");"
( "CREATE TABLE IF NOT EXISTS search_title_page"
, "( stp_word_id integer NOT NULL"
, ", stp_page_id integer NOT NULL"
, ");"
);
private static final Db_idx_itm
Indexes_main_unique = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);")
, Indexes_main_non_unique = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);")
Idx_main_unique = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);")
, Idx_main_non_unique = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);")
;
}