public class Split_wkr__rndm implements Split_wkr { private final Split_rslt_wkr__rndm rslt_wkr = new Split_rslt_wkr__rndm(); private final Bry_bfr tmp_bfr = Bry_bfr_.New(); private final Db_attach_mgr attach_mgr = new Db_attach_mgr(); private Rndm_bldr_wkr bldr; private int cur_ns_id = -1; public void Split__init(Split_ctx ctx, Xow_wiki wiki, Db_conn wkr_conn) { this.bldr = Rndm_addon.Get(wiki).Mgr().New_bldr(); ctx.Rslt_mgr().Reg_wkr(rslt_wkr); } public void Split__term(Split_ctx ctx) { bldr.Exec_qry_end(); } public void Split__trg__1st__new(Split_ctx ctx, Db_conn trg_conn) { Rndm_qry_tbl mgr_tbl = new Rndm_qry_tbl(trg_conn); mgr_tbl.Create_tbl(); } public void Split__trg__nth__new(Split_ctx ctx, Db_conn trg_conn) { if (cur_ns_id != ctx.Trg_ns()) { if (cur_ns_id != -1) bldr.Exec_qry_end(); cur_ns_id = ctx.Trg_ns(); bldr.Exec_qry_bgn(Rndm_qry_itm.New_by_ns(ctx.Wiki(), cur_ns_id)); } bldr.Exec_rng_bgn(); bldr.Conn().Txn_bgn("rndm"); } public void Split__trg__nth__rls(Split_ctx ctx, Db_conn trg_conn) { // make rndm_rng and add Rndm_rng_itm rng_itm = bldr.Exec_rng_end_or_null(); if (rng_itm == null) return; Rndm_rng_tbl rng_tbl = new Rndm_rng_tbl(trg_conn); rng_tbl.Create_tbl(); Db_stmt rng_stmt = rng_tbl.Insert_stmt(); rng_tbl.Insert( rng_stmt, rng_itm.Mgr_idx(), rng_itm.Rng_idx(), rng_itm.Seq_bgn(), rng_itm.Seq_end()); rng_stmt.Rls(); bldr.Conn().Txn_end(); // make rndm_seq and bulk copy Rndm_seq_tbl seq_tbl = new Rndm_seq_tbl(trg_conn); seq_tbl.Create_tbl(); Split_tbl_.Bld_insert_by_select(tmp_bfr, seq_tbl.Tbl_name(), seq_tbl.Flds()); tmp_bfr.Add_str_u8_fmt( "WHERE {0} = {1} AND {2} = {3}", seq_tbl.Fld__qry_idx(), bldr.Qry_idx(), seq_tbl.Fld__rng_idx(), bldr.Rng_idx()); attach_mgr.Conn_main_(trg_conn).Conn_links_(new Db_attach_itm("src_db", bldr.Conn())); attach_mgr.Exec_sql(tmp_bfr.To_str_and_clear()); // bldr.Conn().Txn_bgn("rndm"); } public void Split__exec(Split_ctx ctx, Split_rslt_mgr rslt_mgr, Xowd_page_itm page, int page_id) { if (page.Ns_id() == gplx.xowa.wikis.nss.Xow_ns_.Tid__main && !page.Redirected()) { bldr.Exec_seq_itm(page.Id()); rslt_wkr.On__nth__itm( Rndm_seq_tbl.Db_row_size_fixed, bldr.Qry_idx(), bldr.Rng_idx(), bldr.Seq_in_qry()); } } public void Split__pages_loaded( Split_ctx ctx, int ns_id, int score_bgn, int score_end) {} // rndm_wkr has no caching }
public void Xtn_write( Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xoae_page wpg, Xop_xnde_tkn xnde, byte[] src) { Xowe_wiki wiki = ctx.Wiki(); Dpl_html_data html_mode = Dpl_html_data.new_(Dpl_itm_keys.Key_unordered); int itms_len = pages.Count(); if (itms_len == 0) { if (!itm.Suppress_errors()) bfr.Add_str_a7("No pages meet these criteria."); return; } int itms_bgn = 0; if (itm.Offset() != Int_.Min_value) { itms_bgn = itm.Offset(); } if (itm.Count() != Int_.Min_value && itms_bgn + itm.Count() < itms_len) { itms_len = itms_bgn + itm.Count(); } boolean show_ns = itm.Show_ns(); Bry_bfr tmp_bfr = Bry_bfr_.Get(); Xop_amp_mgr amp_mgr = wiki.Appe().Parser_amp_mgr(); try { bfr.Add(html_mode.Grp_bgn()).Add_byte_nl(); for (int i = itms_bgn; i < itms_len; i++) { Xowd_page_itm page = (Xowd_page_itm) pages.Get_at(i); Xoa_ttl ttl = Xoa_ttl.Parse(wiki, page.Ns_id(), page.Ttl_page_db()); byte[] ttl_page_txt = show_ns ? ttl.Full_txt_w_ttl_case() : ttl.Page_txt(); if (ttl_page_txt == null) continue; // NOTE: apparently DynamicPageList allows null pages; DATE:2013-07-22 switch (html_mode.Tid()) { case Dpl_html_data.Tid_list_ul: case Dpl_html_data.Tid_list_ol: bfr.Add(Xoh_consts.Space_2).Add(html_mode.Itm_bgn()).Add(Gfh_bldr_.Bry__a_lhs_w_href); bfr.Add_str_a7("/wiki/") .Add(Gfo_url_encoder_.Href.Encode(ttl.Full_db())) .Add_byte_quote(); // NOTE: Full_db to encode spaces as underscores; // PAGE:en.q:Wikiquote:Speedy_deletions DATE:2016-01-19 Gfh_atr_.Add( bfr, Gfh_atr_.Bry__title, Xoh_html_wtr_escaper.Escape( amp_mgr, tmp_bfr, ttl .Full_txt_w_ttl_case())); // NOTE: Full_txt b/c title always includes ns, // even if show_ns is off; // PAGE:en.b:Wikibooks:WikiProject DATE:2016-01-20 if (itm.No_follow()) bfr.Add(Bry_nofollow); bfr.Add_byte(Byte_ascii.Gt); Xoh_html_wtr_escaper.Escape( amp_mgr, bfr, ttl_page_txt, 0, ttl_page_txt.length, false, false); bfr.Add(Gfh_bldr_.Bry__a_rhs).Add(html_mode.Itm_end()).Add_byte_nl(); // TODO_OLD: // lnki_wtr.Clear().Href_wiki_(ttl).Title_(ttl).Nofollow_().Write_head(bfr).Write_text(bfr).Write_tail(bfr) break; default: break; } } bfr.Add(html_mode.Grp_end()).Add_byte_nl(); } finally { tmp_bfr.Mkr_rls(); } }