mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v3.2.1.1
This commit is contained in:
@@ -49,7 +49,7 @@ class Xob_dump_src_id {
|
||||
cur_text_db_idx = text_db_idx;
|
||||
Xowd_db_file text_db = db_mgr.Core_data_mgr().Dbs__get_at(text_db_idx);
|
||||
Db_conn conn = text_db.Conn();
|
||||
String sql = String_.Format(Sql_select, New_rdr__redirect_clause(redirect));
|
||||
String sql = String_.Format(Sql_select_itm, New_rdr__redirect_clause(redirect));
|
||||
text_stmt = conn.Stmt_new(Db_qry_sql.rdr_(sql));
|
||||
}
|
||||
return text_stmt.Clear().Val_int(prv_id).Val_int(cur_ns).Exec_select();
|
||||
@@ -75,7 +75,7 @@ class Xob_dump_src_id {
|
||||
default: throw Err_.new_unhandled(redirect);
|
||||
}
|
||||
}
|
||||
private static final String Sql_select = String_.Concat_lines_nl
|
||||
private static final String Sql_select_itm = String_.Concat_lines_nl
|
||||
( "SELECT p.page_id"
|
||||
, ", p.page_title"
|
||||
, ", t.text_data"
|
||||
|
||||
@@ -96,7 +96,7 @@ class Db_tst_qry {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Bry_bfr bfr = Bry_bfr.new_();
|
||||
try {
|
||||
rdr = conn.Exec_qry_as_rdr(qry);
|
||||
rdr = conn.Exec_qry_as_old_rdr(qry);
|
||||
int expd_row_idx = 0, expd_row_max = rows.Count();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
if (expd_row_idx == expd_row_max) break;
|
||||
@@ -127,11 +127,11 @@ class Db_tst_qry {
|
||||
}
|
||||
if (!pass) {
|
||||
bfr.Add(Lbl_row_hdr).Add_int_variable(expd_row_idx).Add_byte_nl();
|
||||
bfr.Add_str_u8(qry.Xto_sql()).Add_byte(Byte_ascii.Semic);
|
||||
bfr.Add_str_u8(qry.To_sql__exec(gplx.dbs.sqls.Sql_qry_wtr_.Sqlite)).Add_byte(Byte_ascii.Semic);
|
||||
throw Err_.new_wo_type(bfr.To_str_and_clear());
|
||||
}
|
||||
} static final byte[] Lbl_row_hdr = Bry_.new_a7("row: "), Lbl_eq_y = Bry_.new_a7(" == "), Lbl_eq_n = Bry_.new_a7(" != ");
|
||||
public static Db_tst_qry tbl_(String tbl_name, String order_by) {return new_(Db_qry_.select_tbl_(tbl_name).OrderBy_asc_(order_by));}
|
||||
public static Db_tst_qry tbl_(String tbl_name, String order_by) {return new_(Db_qry_.select_tbl_(tbl_name).Order_asc_(order_by));}
|
||||
public static Db_tst_qry new_(Db_qry qry) {
|
||||
Db_tst_qry rv = new Db_tst_qry();
|
||||
rv.qry = qry;
|
||||
|
||||
@@ -19,16 +19,19 @@ package gplx.xowa.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gp
|
||||
public class Xob_diff_build_cmd implements Xob_cmd {
|
||||
private final Xob_bldr bldr; private final Xowe_wiki wiki;
|
||||
private String prev_url, curr_url, diff_url; private int commit_interval;
|
||||
private int[] db_ids = Int_.Ary_empty; private String bld_name = "all";
|
||||
public Xob_diff_build_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki;}
|
||||
public String Cmd_key() {return Xob_cmd_keys.Key_diff_build;}
|
||||
public void Cmd_run() {
|
||||
new Xob_diff_build_wkr(bldr, wiki, prev_url, curr_url, diff_url, commit_interval).Exec();
|
||||
new Xob_diff_build_wkr(bldr, wiki, prev_url, curr_url, diff_url, commit_interval, new Xowd_tbl_mapr(bld_name, db_ids)).Exec();
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk__prev_url_)) prev_url = m.ReadStr("v");
|
||||
else if (ctx.Match(k, Invk__curr_url_)) curr_url = m.ReadStr("v");
|
||||
else if (ctx.Match(k, Invk__diff_url_)) diff_url = m.ReadStr("v");
|
||||
else if (ctx.Match(k, Invk__commit_interval_)) commit_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__db_ids_)) db_ids = Int_.Ary_parse(m.ReadStr("v"), "|");
|
||||
else if (ctx.Match(k, Invk__bld_name_)) bld_name = m.ReadStr("v");
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
@@ -36,5 +39,6 @@ public class Xob_diff_build_cmd implements Xob_cmd {
|
||||
public void Cmd_bgn(Xob_bldr bldr) {}
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_term() {}
|
||||
private static final String Invk__prev_url_ = "prev_url_", Invk__curr_url_ = "curr_url_", Invk__diff_url_ = "diff_url_", Invk__commit_interval_ = "commit_interval_";
|
||||
private static final String Invk__prev_url_ = "prev_url_", Invk__curr_url_ = "curr_url_", Invk__diff_url_ = "diff_url_"
|
||||
, Invk__commit_interval_ = "commit_interval_", Invk__db_ids_ = "db_ids_", Invk__bld_name_ = "bld_name_";
|
||||
}
|
||||
|
||||
@@ -17,33 +17,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.core.brys.*; import gplx.core.brys.fmtrs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.metas.*; import gplx.dbs.diffs.*; import gplx.dbs.diffs.builds.*;
|
||||
import gplx.dbs.*; import gplx.dbs.metas.*; import gplx.dbs.diffs.*; import gplx.dbs.diffs.builds.*; import gplx.dbs.diffs.itms.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
class Xob_diff_build_wkr {
|
||||
private final Gfdb_diff_bldr dif_bldr = new Gfdb_diff_bldr();
|
||||
private final Xowe_wiki wiki;
|
||||
private Db_conn old_conn, new_conn, dif_conn;
|
||||
public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String old_url, String new_url, String dif_url, int commit_interval) {
|
||||
private final Xowd_tbl_mapr tbl_mapr;
|
||||
public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String old_url, String new_url, String dif_url, int commit_interval, Xowd_tbl_mapr tbl_mapr) {
|
||||
this.wiki = wiki;
|
||||
wiki.Init_by_wiki();
|
||||
Bry_fmt url_fmt = Bry_fmt.New("").Args_(New_url_args(wiki));
|
||||
Bry_fmt url_fmt = Bry_fmt.New("").Args_(New_url_args(wiki, tbl_mapr.Name));
|
||||
Bry_bfr tmp_bfr = Bry_bfr.new_();
|
||||
old_conn = New_conn(Bool_.N, wiki, url_fmt, old_url, tmp_bfr);
|
||||
new_conn = New_conn(Bool_.N, wiki, url_fmt, new_url, tmp_bfr);
|
||||
dif_conn = New_conn(Bool_.Y, wiki, url_fmt, dif_url, tmp_bfr);
|
||||
old_conn = New_conn(tmp_bfr, wiki, url_fmt, Bool_.N, old_url);
|
||||
new_conn = New_conn(tmp_bfr, wiki, url_fmt, Bool_.N, new_url);
|
||||
dif_conn = New_conn(tmp_bfr, wiki, url_fmt, Bool_.Y, dif_url);
|
||||
this.tbl_mapr = tbl_mapr;
|
||||
}
|
||||
public void Exec() {
|
||||
Gfdb_diff_db dif_db = new Gfdb_diff_db(dif_conn);
|
||||
Gdif_core dif_core = new Gdif_core(dif_conn);
|
||||
String name = String_.Format("{0}|{1}|diffs|{2}", wiki.Domain_str(), tbl_mapr.Name, wiki.Props().Modified_latest().XtoStr_fmt(DateAdp_.Fmt__yyyyMMdd)); // EX: "simple.wikipedia.org|text|diffs|20160112"
|
||||
String made_by = wiki.App().User().Key();
|
||||
Gdif_job_itm job_itm = dif_core.New_job(name, made_by);
|
||||
Gdif_bldr_ctx ctx = new Gdif_bldr_ctx().Init(dif_core, job_itm);
|
||||
|
||||
Gfdb_diff_wkr__db dif_wkr = new Gfdb_diff_wkr__db();
|
||||
Gdif_db dif_db = dif_core.Db();
|
||||
dif_wkr.Init_conn(dif_db, 1000);
|
||||
dif_bldr.Init(dif_wkr);
|
||||
Dbmeta_tbl_mgr old_tbl_mgr = old_conn.Meta_tbl_load_all();
|
||||
Dbmeta_tbl_mgr new_tbl_mgr = old_conn.Meta_tbl_load_all();
|
||||
int new_tbl_len = new_tbl_mgr.Len();
|
||||
int txn = -1;
|
||||
for (int i = 0; i < new_tbl_len; ++i) {
|
||||
Dbmeta_tbl_itm new_tbl = new_tbl_mgr.Get_at(i);
|
||||
Dbmeta_tbl_itm old_tbl = old_tbl_mgr.Get_by(new_tbl.Name()); if (old_tbl == null) continue;
|
||||
Gfdb_diff_tbl dif_tbl = Gfdb_diff_tbl.New(new_tbl);
|
||||
dif_bldr.Compare(++txn, dif_tbl, old_conn, new_conn);
|
||||
// save txn
|
||||
|
||||
// wiki.Data__core_mgr().Db__core().Conn().Conn_info();
|
||||
Xowd_db_file[] db_files = wiki.Data__core_mgr().Db__core().Tbl__db().Select_all(wiki.Data__core_mgr().Props(), Io_url_.Empty);
|
||||
int db_files_len = db_files.length;
|
||||
for (int i = 0; i < db_files_len; ++i) {
|
||||
Xowd_db_file db_file = db_files[i];
|
||||
if (tbl_mapr.Db_ids__has(db_file.Tid()))
|
||||
Compare(ctx);
|
||||
}
|
||||
// int old_tbl_len = old_tbl_mgr.Len();
|
||||
// for (int i = 0; i < old_tbl_len; ++i) {
|
||||
@@ -54,20 +63,35 @@ class Xob_diff_build_wkr {
|
||||
// }
|
||||
// }
|
||||
}
|
||||
public static Db_conn New_conn(boolean autocreate, Xow_wiki wiki, Bry_fmt fmtr, String url_fmt, Bry_bfr tmp_bfr) {
|
||||
fmtr.Fmt_(url_fmt).Bld_bfr_many(tmp_bfr);
|
||||
private void Compare(Gdif_bldr_ctx ctx) {
|
||||
Dbmeta_tbl_mgr old_tbl_mgr = old_conn.Meta_tbl_load_all();
|
||||
Dbmeta_tbl_mgr new_tbl_mgr = old_conn.Meta_tbl_load_all();
|
||||
int new_tbl_len = new_tbl_mgr.Len();
|
||||
for (int i = 0; i < new_tbl_len; ++i) {
|
||||
Dbmeta_tbl_itm new_tbl = new_tbl_mgr.Get_at(i);
|
||||
Dbmeta_tbl_itm old_tbl = old_tbl_mgr.Get_by(new_tbl.Name()); if (old_tbl == null) continue;
|
||||
Gfdb_diff_tbl dif_tbl = Gfdb_diff_tbl.New(new_tbl);
|
||||
dif_bldr.Compare(ctx, dif_tbl, old_conn, new_conn);
|
||||
// save txn
|
||||
}
|
||||
}
|
||||
public static Db_conn New_conn(Bry_bfr tmp_bfr, Xow_wiki wiki, Bry_fmt fmtr, boolean autocreate, String url_fmt) {
|
||||
fmtr.Fmt_(url_fmt).Bld_many(tmp_bfr);
|
||||
return Db_conn_bldr.Instance.Get_or_autocreate(autocreate, Io_url_.new_any_(tmp_bfr.To_str_and_clear()));
|
||||
}
|
||||
private static Bfr_fmt_arg[] New_url_args(Xow_wiki wiki) {
|
||||
private static Bfr_fmt_arg[] New_url_args(Xow_wiki wiki, String db_mapr_name) {
|
||||
Bfr_fmt_arg[] rv = new Bfr_fmt_arg[]
|
||||
{ new Bfr_fmt_arg(Bry_.new_a7(".dump_dir"), new Bfr_arg__dump_dir(wiki))
|
||||
, new Bfr_fmt_arg(Bry_.new_a7(".dump_core"), new Bfr_arg__dump_core(wiki))
|
||||
, new Bfr_fmt_arg(Bry_.new_a7(".dump_domain"), new Bfr_arg__dump_domain(wiki))
|
||||
, new Bfr_fmt_arg(Bry_.new_a7(".dir_spr"), new Bfr_arg__dir_spr())
|
||||
, new Bfr_fmt_arg(Bry_.new_a7(".dif_name"), Bfr_arg_.New_bry(db_mapr_name))
|
||||
};
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
//old_url='~{.dump_dir}-prev/~{.dump_core}';
|
||||
//new_url='~{.dump_dir}/~{.dump_core}';
|
||||
//dif_url='~{.dump_dir}/~{.dump_domain}-diff.xowa';
|
||||
//dif_url='~{.dump_dir}/~{.dump_domain}-{.dif_name}-diff.xowa';
|
||||
// old_conn='data source="~{.dump_dir}/~{.dump_core}";url='
|
||||
// dif_conn='gplx_key=sqlite;url='
|
||||
}
|
||||
|
||||
@@ -15,17 +15,20 @@ 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.bldrs.cmds.randoms; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
public class Xob_rnd_cmd implements Xob_cmd {
|
||||
// private final Xob_bldr bldr; private final Xowe_wiki wiki;
|
||||
public Xob_rnd_cmd(Xob_bldr bldr, Xowe_wiki wiki) {}//this.bldr = bldr; this.wiki = wiki;}
|
||||
public String Cmd_key() {return Xob_cmd_keys.Key_util_random;}
|
||||
public void Cmd_run() {
|
||||
package gplx.xowa.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
class Xowd_tbl_mapr {
|
||||
public Xowd_tbl_mapr(String name, int[] db_ids) {
|
||||
this.Name = name;
|
||||
this.Db_ids = db_ids;
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return this;}
|
||||
|
||||
public void Cmd_init(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {}
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_term() {}
|
||||
public final String Name;
|
||||
public final int[] Db_ids;
|
||||
public boolean Db_ids__has(int id) {return true;}
|
||||
// private static List_adp Fill_tbl_names(List_adp rv, int db_tid) {
|
||||
// switch (db_tid) {
|
||||
// case Xowd_db_file_.Tid_cat:
|
||||
// return
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
@@ -48,7 +48,7 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm
|
||||
Sqlite_engine_.Idx_create(make_db_provider, Xob_diff_regy_tbl.Idx_diff_regy__load);
|
||||
}
|
||||
private void Make_delete_sql(Db_conn make_db_provider) {
|
||||
DataRdr rdr = make_db_provider.Exec_sql_as_rdr(Xob_diff_regy_tbl.Make_deletes);
|
||||
DataRdr rdr = make_db_provider.Exec_sql_as_old_rdr(Xob_diff_regy_tbl.Make_deletes);
|
||||
int cur_db_id = -1, cur_count = 0;
|
||||
Bry_bfr atr_bfr = Bry_bfr.new_(), bin_bfr = Bry_bfr.new_();
|
||||
Io_url sql_tmp_dir = wiki.App().Fsys_mgr().File_dir().GenSubDir_nest(wiki.Domain_str(), "tmp_sql");
|
||||
|
||||
@@ -49,7 +49,7 @@ public class Xob_orig_regy_update_cmd extends Xob_itm_basic_base implements Xob_
|
||||
}
|
||||
*/
|
||||
}
|
||||
public DataRdr Select(Db_conn p, byte prv_repo_id, byte[] prv_ttl) {
|
||||
public DataRdr Select(Db_conn conn, byte prv_repo_id, byte[] prv_ttl) {
|
||||
String sql = String_.Concat_lines_nl_skip_last
|
||||
( "SELECT lnki_ttl"
|
||||
, "FROM orig_regy"
|
||||
@@ -58,7 +58,7 @@ public class Xob_orig_regy_update_cmd extends Xob_itm_basic_base implements Xob_
|
||||
, "AND oimg_orig_page_id = -1;"
|
||||
);
|
||||
Db_qry select_qry = Db_qry_sql.rdr_(sql);
|
||||
return p.Exec_qry_as_rdr(select_qry);
|
||||
return conn.Exec_qry_as_old_rdr(select_qry);
|
||||
}
|
||||
public void Cmd_run() {}
|
||||
public void Cmd_end() {}
|
||||
|
||||
@@ -33,19 +33,19 @@ public class Xob_xfer_regy_tbl {
|
||||
p.Exec_sql(Sql_create_data_thumb);
|
||||
}
|
||||
public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, Xob_db_file.Name__file_make, Idx_lnki_page_id, Idx_lnki_ttl);}
|
||||
public static DataRdr Select(Db_conn p, byte repo_id, byte[] ttl, int limit) {
|
||||
public static DataRdr Select(Db_conn conn, byte repo_id, byte[] ttl, int limit) {
|
||||
Db_qry qry = Db_qry_.select_().Cols_all_()
|
||||
.From_(Tbl_name)
|
||||
.Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.mte_(Fld_orig_repo, repo_id), Db_crt_.mt_(Fld_lnki_ttl, String_.new_u8(ttl)), Db_crt_.eq_(Fld_xfer_status, 0)))
|
||||
.OrderBy_many_(Fld_xfer_status, Fld_orig_repo, Fld_lnki_ttl, Fld_file_w)
|
||||
.Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.New_mte(Fld_orig_repo, repo_id), Db_crt_.New_mt(Fld_lnki_ttl, String_.new_u8(ttl)), Db_crt_.New_eq(Fld_xfer_status, 0)))
|
||||
.Order_asc_many_(Fld_xfer_status, Fld_orig_repo, Fld_lnki_ttl, Fld_file_w)
|
||||
.Limit_(limit)
|
||||
;
|
||||
return p.Exec_qry_as_rdr(qry);
|
||||
return conn.Exec_qry_as_old_rdr(qry);
|
||||
}
|
||||
public static Db_stmt Select_by_page_id_stmt(Db_conn p) {return p.Stmt_new(Db_qry_sql.rdr_(Sql_select));}
|
||||
public static Db_stmt Select_by_page_id_stmt(Db_conn p) {return p.Stmt_new(Db_qry_sql.rdr_(Sql_select_itm));}
|
||||
public static DataRdr Select_by_page_id(Db_stmt stmt, int page_id, int limit) {return stmt.Val_int(page_id).Val_int(limit).Exec_select();}
|
||||
private static final String
|
||||
Sql_select = String_.Concat_lines_nl
|
||||
Sql_select_itm = String_.Concat_lines_nl
|
||||
( "SELECT *"
|
||||
, "FROM xfer_regy"
|
||||
, "WHERE xfer_status = 0"
|
||||
@@ -59,17 +59,17 @@ public class Xob_xfer_regy_tbl {
|
||||
, "WHERE xfer_status = 0"
|
||||
)
|
||||
;
|
||||
public static DataRdr Select_by_tier_page(Db_conn p, int tier_id, int page_id, int select_interval) {
|
||||
public static DataRdr Select_by_tier_page(Db_conn conn, int tier_id, int page_id, int select_interval) {
|
||||
Db_qry qry = Db_qry_.select_().Cols_all_()
|
||||
.From_(Tbl_name)
|
||||
.Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_xfer_status, 0), Db_crt_.eq_(Fld_lnki_tier_id, tier_id), Db_crt_.mte_(Fld_lnki_page_id, page_id)))
|
||||
.OrderBy_many_(Fld_lnki_tier_id, Fld_lnki_page_id, Fld_lnki_id)
|
||||
.Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.New_eq(Fld_xfer_status, 0), Db_crt_.New_eq(Fld_lnki_tier_id, tier_id), Db_crt_.New_mte(Fld_lnki_page_id, page_id)))
|
||||
.Order_asc_many_(Fld_lnki_tier_id, Fld_lnki_page_id, Fld_lnki_id)
|
||||
.Limit_(select_interval)
|
||||
;
|
||||
return p.Exec_qry_as_rdr(qry);
|
||||
return conn.Exec_qry_as_old_rdr(qry);
|
||||
}
|
||||
public static int Select_total_pending(Db_conn p) {
|
||||
DataRdr rdr = p.Exec_sql_as_rdr(Sql_select_total_pending);
|
||||
DataRdr rdr = p.Exec_sql_as_old_rdr(Sql_select_total_pending);
|
||||
int rv = 0;
|
||||
if (rdr.MoveNextPeer())
|
||||
rv = rdr.ReadInt("CountAll");
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
|
||||
Xob_xfer_temp_tbl.Create_table(conn);
|
||||
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(conn);
|
||||
conn.Txn_bgn("bldr__xfer_temp");
|
||||
DataRdr rdr = conn.Exec_sql_as_rdr(Sql_select);
|
||||
DataRdr rdr = conn.Exec_sql_as_old_rdr(Sql_select_itm);
|
||||
long[] ext_maxs = Calc_ext_max();
|
||||
while (rdr.MoveNextPeer()) {
|
||||
int lnki_ext = rdr.ReadByte(Xob_lnki_regy_tbl.Fld_lnki_ext);
|
||||
@@ -76,7 +76,7 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_term() {}
|
||||
private static final String
|
||||
Sql_select = String_.Concat_lines_nl
|
||||
Sql_select_itm = String_.Concat_lines_nl
|
||||
( "SELECT DISTINCT"
|
||||
, " l.lnki_id"
|
||||
// , ", lnki_ttl"
|
||||
|
||||
@@ -28,7 +28,7 @@ public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_c
|
||||
Xob_xfer_temp_tbl.Create_table(conn);
|
||||
Db_stmt trg_stmt = Xob_xfer_temp_tbl.Insert_stmt(conn);
|
||||
conn.Txn_bgn("bldr__xfer_temp_thumb");
|
||||
DataRdr rdr = conn.Exec_sql_as_rdr(Sql_select);
|
||||
DataRdr rdr = conn.Exec_sql_as_old_rdr(Sql_select_itm);
|
||||
Xob_xfer_temp_itm temp_itm = new Xob_xfer_temp_itm();
|
||||
Xof_img_size img_size = new Xof_img_size();
|
||||
byte[] cur_ttl = Bry_.Empty; byte cur_repo = Byte_.Max_value_127;
|
||||
@@ -52,7 +52,7 @@ public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_c
|
||||
public void Cmd_end() {}
|
||||
public void Cmd_term() {}
|
||||
private static final String
|
||||
Sql_select = String_.Concat_lines_nl
|
||||
Sql_select_itm = String_.Concat_lines_nl
|
||||
( "SELECT l.lnki_id"
|
||||
, ", l.lnki_tier_id"
|
||||
, ", l.lnki_page_id"
|
||||
|
||||
@@ -37,6 +37,7 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
Db_conn search_conn = search_db.Conn();
|
||||
Xowd_search_temp_tbl search_temp_tbl = new Xowd_search_temp_tbl(search_conn, db_mgr.Props().Schema_is_1());
|
||||
search_temp_tbl.Create_tbl();
|
||||
search_conn.Exec_delete_all(search_temp_tbl.Tbl_name());
|
||||
search_temp_tbl.Insert_bgn();
|
||||
Xowd_page_tbl page_tbl = db_mgr.Tbl__page();
|
||||
Db_rdr page_rdr = page_tbl.Select_all();
|
||||
|
||||
@@ -22,7 +22,7 @@ import gplx.xowa.langs.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd { // search version 2
|
||||
private Xowd_db_mgr db_mgr; private Xowd_search_link_tbl search_page_tbl; private Xowd_search_word_tbl search_word_tbl;
|
||||
private int search_id = 0; private byte[] prv_word = Bry_.Empty; private int page_count;
|
||||
private int search_id = 0; private byte[] prv_word = null; private int page_count;
|
||||
public Xob_search_sql_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
|
||||
@Override public String Wkr_key() {return Xob_cmd_keys.Key_text_search_wkr;}
|
||||
@Override public gplx.core.ios.Io_make_cmd Make_cmd_site() {return this;}
|
||||
@@ -35,20 +35,22 @@ public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd {
|
||||
this.search_word_tbl = db_mgr.Db__search().Tbl__search_word();
|
||||
search_page_tbl.Insert_bgn(); search_word_tbl.Insert_bgn();
|
||||
}
|
||||
public void Sort_do(Io_line_rdr rdr) {
|
||||
byte[] bry = rdr.Bfr();
|
||||
byte[] cur_word = Bry_.Mid(bry, rdr.Key_pos_bgn(), rdr.Key_pos_end());
|
||||
if (!Bry_.Eq(cur_word, prv_word)) {
|
||||
search_word_tbl.Insert_cmd_by_batch(++search_id, prv_word, page_count);
|
||||
public void Sort_do(Io_line_rdr rdr) {Sort_do(rdr.Bfr(), rdr.Key_pos_bgn(), rdr.Key_pos_end());}
|
||||
public void Sort_do(byte[] line, int key_bgn, int key_end) {// EX: abc|123
|
||||
byte[] cur_word = Bry_.Mid(line, key_bgn, key_end);
|
||||
if (!Bry_.Eq(cur_word, prv_word)) { // if new_word, insert old one
|
||||
if (prv_word != null) // do not insert for 1st word
|
||||
search_word_tbl.Insert_cmd_by_batch(search_id, prv_word, page_count);
|
||||
++search_id;
|
||||
prv_word = cur_word;
|
||||
page_count = 0;
|
||||
}
|
||||
search_page_tbl.Insert_cmd_by_batch(search_id, Base85_.To_int_by_bry(bry, rdr.Key_pos_end() + 1, rdr.Key_pos_end() + 5)); // -1: ignore rdr_dlm
|
||||
search_page_tbl.Insert_cmd_by_batch(search_id, Base85_.To_int_by_bry(line, key_end + 1, key_end + 5)); // -1: ignore rdr_dlm
|
||||
++page_count;
|
||||
if (search_id % 10000 == 0)
|
||||
usr_dlg.Prog_many("", "", "creating title index: count=~{0}", search_id);
|
||||
if (search_id % 10000 == 0) usr_dlg.Prog_many("", "", "creating title index: count=~{0}", search_id);
|
||||
}
|
||||
public void Sort_end() {
|
||||
search_word_tbl.Insert_cmd_by_batch(search_id, prv_word, page_count);
|
||||
search_page_tbl.Insert_end(); search_word_tbl.Insert_end();
|
||||
Xowd_db_file search_db = db_mgr.Db__search();
|
||||
Xowd_search_temp_tbl search_temp_tbl = new Xowd_search_temp_tbl(search_db.Conn(), db_mgr.Props().Schema_is_1());
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
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.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
|
||||
import org.junit.*; import gplx.dbs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
public class Xob_search_sql_wkr_tst {
|
||||
private final Xob_search_sql_wkr_fxt fxt = new Xob_search_sql_wkr_fxt();
|
||||
@Test public void Basic() {
|
||||
fxt.Exec__sort
|
||||
( "a|!!!!#"
|
||||
, "a|!!!!$"
|
||||
, "b|!!!!#"
|
||||
, "b|!!!!$"
|
||||
, "b|!!!!%"
|
||||
);
|
||||
fxt.Test__search_word
|
||||
( "1|a|2"
|
||||
, "2|b|3"
|
||||
);
|
||||
fxt.Test__search_link
|
||||
( "1|2"
|
||||
, "1|3"
|
||||
, "2|2"
|
||||
, "2|3"
|
||||
, "2|4"
|
||||
);
|
||||
}
|
||||
}
|
||||
class Xob_search_sql_wkr_fxt {
|
||||
private final Xob_search_sql_wkr wkr;
|
||||
private final Xowe_wiki wiki;
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr.new_();
|
||||
public Xob_search_sql_wkr_fxt() {
|
||||
Xoae_app app = Xoa_app_fxt.app_();
|
||||
this.wiki = Xoa_app_fxt.wiki_tst_(app);
|
||||
Xoa_test_.Db__init__mem(wiki);
|
||||
wkr = new Xob_search_sql_wkr(app.Bldr(), wiki);
|
||||
}
|
||||
public void Exec__sort(String... lines_str) {
|
||||
byte[][] lines = Bry_.Ary(lines_str);
|
||||
wkr.Sort_bgn();
|
||||
for (byte[] line : lines)
|
||||
wkr.Sort_do(line, 0, Bry_find_.Find_fwd(line, Byte_ascii.Pipe));
|
||||
wkr.Sort_end();
|
||||
}
|
||||
public void Test__search_word(String... lines) {
|
||||
Xowd_search_word_tbl tbl = wiki.Data__core_mgr().Db__search().Tbl__search_word();
|
||||
Tfds.Eq_str_lines(String_.Concat_lines_nl(lines), Xoa_test_.Db__print_tbl_as_str(tmp_bfr, tbl.conn, tbl.Tbl_name(), tbl.Fld_id(), tbl.Fld_text(), tbl.Fld_page_count()));
|
||||
}
|
||||
public void Test__search_link(String... lines) {
|
||||
Xowd_search_link_tbl tbl = wiki.Data__core_mgr().Db__search().Tbl__search_link();
|
||||
Tfds.Eq_str_lines(String_.Concat_lines_nl(lines), Xoa_test_.Db__print_tbl_as_str(tmp_bfr, tbl.conn, tbl.Tbl_name(), tbl.Fld_word_id(), tbl.Fld_page_id()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user