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
2016-02-07 23:20:20 -05:00
parent 6d179ca59d
commit de67253a9c
215 changed files with 3387 additions and 2055 deletions

View File

@@ -26,7 +26,7 @@ class Xowd_cat_core_tbl__in_wkr extends Db_in_wkr__base {
public void Init(Ordered_hash hash) {this.hash = hash;}
@Override protected Db_qry Make_qry(int bgn, int end) {
Object[] part_ary = In_ary(end - bgn);
return Db_qry_.select_cols_(tbl_name, Db_crt_.in_(fld_cat_id, part_ary), flds.To_str_ary());
return Db_qry_.select_cols_(tbl_name, Db_crt_.New_in(fld_cat_id, part_ary), flds.To_str_ary());
}
@Override protected void Fill_stmt(Db_stmt stmt, int bgn, int end) {
for (int i = bgn; i < end; i++) {

View File

@@ -54,11 +54,11 @@ public class Xowd_cat_link_tbl implements Rls_able {
public int Select_by_type(List_adp list, int cat_page_id, byte arg_tid, byte[] arg_sortkey, boolean arg_is_from, int limit) {
String arg_sortkey_str = arg_sortkey == null ? "" : String_.new_u8(arg_sortkey);
gplx.core.criterias.Criteria comp_crt = !arg_is_from
? Db_crt_.mte_(fld_sortkey, arg_sortkey_str) // from: sortkey >= 'val'
: Db_crt_.lte_(fld_sortkey, arg_sortkey_str); // until: sortkey <= 'val'
? Db_crt_.New_mte(fld_sortkey, arg_sortkey_str) // from: sortkey >= 'val'
: Db_crt_.New_lte(fld_sortkey, arg_sortkey_str); // until: sortkey <= 'val'
Db_qry__select_cmd qry = Db_qry_.select_().Cols_(fld_from, fld_sortkey).From_(tbl_name)
.Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(fld_to_id, -1), Db_crt_.eq_(fld_type_id, arg_tid), comp_crt))
.OrderBy_(fld_sortkey, !arg_is_from)
.Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.New_eq(fld_to_id, -1), Db_crt_.New_eq(fld_type_id, arg_tid), comp_crt))
.Order_(fld_sortkey, !arg_is_from)
.Limit_(limit + 1); // + 1 to get last_plus_one for next page / previous page
Db_rdr rdr = conn.Stmt_new(qry).Crt_int(fld_to_id, cat_page_id).Crt_byte(fld_type_id, arg_tid).Crt_str(fld_sortkey, arg_sortkey_str).Exec_select__rls_auto();
int count = 0;

View File

@@ -31,6 +31,7 @@ public class Xowd_page_tbl implements Rls_able {
public String Fld_page_title() {return fld_title;}
public String Fld_page_len() {return fld_len;}
public String Fld_html_db_id() {return fld_html_db_id;}
public String Fld_is_redirect() {return fld_is_redirect;}
public String Fld_redirect_id() {return fld_redirect_id;}
public String[] Flds_select_idx() {return flds_select_idx;}
public String[] Flds_select_all() {return flds_select_all;}
@@ -111,7 +112,7 @@ public class Xowd_page_tbl implements Rls_able {
return false;
}
public Db_rdr Select_all() {
Db_qry__select_cmd qry = Db_qry__select_cmd.new_().From_(tbl_name).Cols_(fld_id, fld_title).OrderBy_asc_(fld_id);
Db_qry__select_cmd qry = new Db_qry__select_cmd().From_(tbl_name).Cols_(fld_id, fld_title).Order_asc_(fld_id);
return conn.Stmt_new(qry).Exec_select__rls_auto();
}
public int Select_id(int ns_id, byte[] ttl) {
@@ -167,7 +168,7 @@ public class Xowd_page_tbl implements Rls_able {
}
public void Select_by_search(Cancelable cancelable, List_adp rv, byte[] search, int results_max) {
if (Bry_.Len_eq_0(search)) return; // do not allow empty search
Criteria crt = Criteria_.And_many(Db_crt_.eq_(fld_ns, Xow_ns_.Tid__main), Db_crt_.like_(fld_title, ""));
Criteria crt = Criteria_.And_many(Db_crt_.New_eq(fld_ns, Xow_ns_.Tid__main), Db_crt_.New_like(fld_title, ""));
Db_qry__select_cmd qry = Db_qry_.select_().From_(tbl_name).Cols_(fld_id, fld_len, fld_ns, fld_title).Where_(crt); // NOTE: use fields from main index only
search = Bry_.Replace(search, Byte_ascii.Star, Byte_ascii.Percent);
Db_rdr rdr = conn.Stmt_new(qry).Clear().Crt_int(fld_ns, Xow_ns_.Tid__main).Val_bry_as_str(fld_title, search).Exec_select__rls_auto();
@@ -207,16 +208,16 @@ public class Xowd_page_tbl implements Rls_able {
}
private Db_rdr Load_ttls_starting_with_rdr(int ns_id, byte[] ttl_frag, boolean include_redirects, int max_results, int min_page_len, int browse_len, boolean fwd, boolean search_suggest) {
String ttl_frag_str = String_.new_u8(ttl_frag);
Criteria crt_ttl = fwd ? Db_crt_.mte_(fld_title, ttl_frag_str) : Db_crt_.lt_(fld_title, ttl_frag_str);
Criteria crt = Criteria_.And_many(Db_crt_.eq_(fld_ns, ns_id), crt_ttl, Db_crt_.mte_(fld_len, min_page_len));
Criteria crt_ttl = fwd ? Db_crt_.New_mte(fld_title, ttl_frag_str) : Db_crt_.New_lt(fld_title, ttl_frag_str);
Criteria crt = Criteria_.And_many(Db_crt_.New_eq(fld_ns, ns_id), crt_ttl, Db_crt_.New_mte(fld_len, min_page_len));
if (!include_redirects)
crt = Criteria_.And(crt, Db_crt_.eq_(fld_is_redirect, Byte_.Zero));
crt = Criteria_.And(crt, Db_crt_.New_eq(fld_is_redirect, Byte_.Zero));
String[] cols = search_suggest
? flds_select_idx
: flds_select_all
;
int limit = fwd ? max_results + 1 : max_results; // + 1 to get next item
Db_qry__select_cmd qry = Db_qry_.select_cols_(tbl_name, crt, cols).Limit_(limit).OrderBy_(fld_title, fwd);
Db_qry__select_cmd qry = Db_qry_.select_cols_(tbl_name, crt, cols).Limit_(limit).Order_(fld_title, fwd);
Db_stmt stmt = conn.Stmt_new(qry).Crt_int(fld_ns, ns_id).Crt_str(fld_title, ttl_frag_str).Crt_int(fld_len, min_page_len);
if (!include_redirects)
stmt.Crt_bool_as_byte(fld_is_redirect, include_redirects);

View File

@@ -28,7 +28,7 @@ class Xowd_page_tbl__ttl_ns extends Xowd_page_tbl__in_wkr__base {
Criteria[] crt_ary = new Criteria[len];
String fld_ns = tbl.Fld_page_ns(); String fld_ttl = tbl.Fld_page_title();
for (int i = 0; i < len; i++)
crt_ary[i] = Criteria_.And(Db_crt_.eq_(fld_ns, 0), Db_crt_.eq_(fld_ttl, Bry_.Empty));
crt_ary[i] = Criteria_.And(Db_crt_.New_eq(fld_ns, 0), Db_crt_.New_eq(fld_ttl, Bry_.Empty));
return Criteria_.Or_many(crt_ary);
}
@Override protected void Fill_stmt(Db_stmt stmt, int bgn, int end) {
@@ -55,7 +55,7 @@ class Xowd_page_tbl__ttl extends Xowd_page_tbl__in_wkr__base {
Criteria[] crt_ary = new Criteria[len];
String fld_ns = tbl.Fld_page_ns(); String fld_ttl = tbl.Fld_page_title();
for (int i = 0; i < len; i++)
crt_ary[i] = Criteria_.And(Db_crt_.eq_(fld_ns, in_ns), Db_crt_.eq_(fld_ttl, Bry_.Empty));
crt_ary[i] = Criteria_.And(Db_crt_.New_eq(fld_ns, in_ns), Db_crt_.New_eq(fld_ttl, Bry_.Empty));
return Criteria_.Or_many(crt_ary);
}
@Override protected void Fill_stmt(Db_stmt stmt, int bgn, int end) {
@@ -73,7 +73,7 @@ class Xowd_page_tbl__id extends Xowd_page_tbl__in_wkr__base {
public void Init(List_adp list, Ordered_hash hash) {this.list = list; this.hash = hash; this.Fill_idx_fields_only_(true);}
@Override protected boolean Show_progress() {return true;}
@Override protected Criteria In_filter(Object[] part_ary) {
return Db_crt_.in_(this.In_fld_name(), part_ary);
return Db_crt_.New_in(this.In_fld_name(), part_ary);
}
@Override protected void Fill_stmt(Db_stmt stmt, int bgn, int end) {
for (int i = bgn; i < end; i++) {

View File

@@ -21,7 +21,7 @@ import gplx.dbs.*; import gplx.dbs.utls.*;
public class Xowd_search_link_tbl {
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
private final String fld_word_id, fld_page_id;
private final Db_conn conn; private Db_stmt stmt_insert; private final Xowd_search_page_tbl__in_wkr in_wkr = new Xowd_search_page_tbl__in_wkr();
public final Db_conn conn; private Db_stmt stmt_insert; private final Xowd_search_page_tbl__in_wkr in_wkr = new Xowd_search_page_tbl__in_wkr();
public Xowd_search_link_tbl(Db_conn conn, boolean schema_is_1) {
this.conn = conn;
String fld_prefix = "";
@@ -56,7 +56,7 @@ class Xowd_search_page_tbl__in_wkr extends Db_in_wkr__base {
public void Init(List_adp words, List_adp pages) {this.words = words; this.pages = pages;}
@Override protected Db_qry Make_qry(int bgn, int end) {
Object[] part_ary = In_ary(end - bgn);
return Db_qry_.select_cols_(tbl_name, Db_crt_.in_(fld_word_id, part_ary), flds.To_str_ary());
return Db_qry_.select_cols_(tbl_name, Db_crt_.New_in(fld_word_id, part_ary), flds.To_str_ary());
}
@Override protected void Fill_stmt(Db_stmt stmt, int bgn, int end) {
for (int i = bgn; i < end; i++) {

View File

@@ -18,7 +18,7 @@ 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.engines.sqlite.*;
public class Xowd_search_temp_tbl {
private final String tbl_name = "search_temp"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
private final String fld_page_id, fld_word_text;
private final Db_conn conn; private Db_stmt stmt_insert;
private final String sql_create_word, sql_create_link;
@@ -26,10 +26,12 @@ public class Xowd_search_temp_tbl {
this.conn = conn;
if (schema_is_1) {sql_create_word = Sql_create_word_v1; sql_create_link = Sql_create_link_v1;}
else {sql_create_word = Sql_create_word_v2; sql_create_link = Sql_create_link_v2;}
// flds.Add_int_dflt("word_id", -1);
flds.Add_int_pkey_autonum("word_id");
fld_page_id = flds.Add_int("page_id");
fld_word_text = flds.Add_str("word_text", 255);
}
public String Tbl_name() {return tbl_name;} private final String tbl_name = "search_temp";
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
public void Insert_bgn() {conn.Txn_bgn("schema__search_temp__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
@@ -40,7 +42,9 @@ public class Xowd_search_temp_tbl {
}
public void Make_data(Gfo_usr_dlg usr_dlg, Xowd_search_link_tbl search_link_tbl, Xowd_search_word_tbl search_word_tbl) {
conn.Ddl_create_idx(usr_dlg, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "main", fld_word_text, fld_page_id));
conn.Exec_delete_all(search_word_tbl.Tbl_name());
conn.Exec_sql_plog_txn("search_temp.create_word", sql_create_word);
conn.Exec_delete_all(search_link_tbl.Tbl_name());
conn.Exec_sql_plog_txn("search_temp.create_link", sql_create_link);
Create_idx(usr_dlg, search_link_tbl, search_word_tbl);
conn.Env_vacuum();
@@ -55,6 +59,23 @@ public class Xowd_search_temp_tbl {
search_link_tbl.Create_idx_normal();;
}
}
public void Update_word_id(Db_conn cur_conn, Io_url prv_url) {
String sql = String_.Concat_lines_nl_skip_last
( "REPLACE INTO search_temp (word_id, page_id, word_text)"
, "SELECT Coalesce(prv.word_id, cur.word_id), cur.page_id, cur.word_text"
, "FROM search_temp cur"
, " LEFT JOIN <attach_db>search_word prv ON cur.word_text = prv.word_text"
);
Db_attach_cmd.new_(cur_conn, "prv_db", prv_url).Add_fmt("updating_word_ids", sql).Exec();
Db_stmt update_stmt = cur_conn.Stmt_update(tbl_name, String_.Ary(fld_word_text), fld_page_id);
Db_rdr rdr = cur_conn.Stmt_select(tbl_name, flds, String_.Ary(fld_page_id)).Crt_int(fld_page_id, -1).Exec_select__rls_auto();
int nxt_page_id = 1000;
try {
while (rdr.Move_next()) {
update_stmt.Crt_int(fld_page_id, ++nxt_page_id).Exec_update();
}
} finally {rdr.Rls();}
}
private static final String Sql_create_word_v1 = String_.Concat_lines_nl
( "INSERT INTO search_title_word (stw_word_id, stw_word)"
, "SELECT word_id"

View File

@@ -20,7 +20,7 @@ import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; import
public class Xowd_search_word_tbl implements Rls_able {
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
private final String fld_id, fld_text; private String fld_page_count; private boolean page_count_exists;
private final Db_conn conn; private Db_stmt stmt_insert, stmt_select_by, stmt_select_in;
public final Db_conn conn; private Db_stmt stmt_insert, stmt_select_by, stmt_select_in;
public Xowd_search_word_tbl(Db_conn conn, boolean schema_is_1, boolean page_count_exists) {
this.conn = conn; this.page_count_exists = page_count_exists;
String fld_prefix = "", fld_text_name = "word_text";
@@ -31,6 +31,11 @@ public class Xowd_search_word_tbl implements Rls_able {
this.fld_page_count = page_count_exists ? flds.Add_int_dflt("word_page_count", 0) : Dbmeta_fld_itm.Key_null;
conn.Rls_reg(this);
}
public String Tbl_name() {return tbl_name;}
public String Fld_id() {return fld_id;}
public String Fld_text() {return fld_text;}
public String Fld_page_count() {return fld_page_count;}
public String Fld_page_score_max() {return Dbmeta_fld_itm.Key_null;}
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
public void Create_idx() {conn.Ddl_create_idx(Xoa_app_.Usr_dlg(), Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "main", fld_text, fld_id, fld_page_count));}
public void Insert_bgn() {conn.Txn_bgn("schema__search_word__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
@@ -52,7 +57,7 @@ public class Xowd_search_word_tbl implements Rls_able {
}
public Xowd_search_word_row[] Select_in(Cancelable cxl, byte[] word) {
if (stmt_select_in == null) {
Db_qry__select_cmd qry = Db_qry_.select_().From_(tbl_name).OrderBy_(fld_page_count, Bool_.N).Where_(Db_crt_.like_(fld_text, "")); // order by highest page count to look at most common words
Db_qry__select_cmd qry = Db_qry_.select_().From_(tbl_name).Order_(fld_page_count, Bool_.N).Where_(Db_crt_.New_like(fld_text, "")); // order by highest page count to look at most common words
stmt_select_in = conn.Stmt_new(qry);
}
List_adp list = List_adp_.new_();
@@ -74,10 +79,10 @@ public class Xowd_search_word_tbl implements Rls_able {
gplx.core.criterias.Criteria crt = null;
if (Bry_.Has(search, Byte_ascii.Star)) {
search = Bry_.Replace(search, Byte_ascii.Star, Byte_ascii.Percent);
crt = Db_crt_.like_ (fld_text, String_.new_u8(search));
crt = Db_crt_.New_like (fld_text, String_.new_u8(search));
}
else
crt = Db_crt_.eq_ (fld_text, String_.new_u8(search));
crt = Db_crt_.New_eq (fld_text, String_.new_u8(search));
Db_qry__select_cmd qry = Db_qry_.select_().Cols_(fld_id).From_(tbl_name).Where_(crt);
List_adp words = List_adp_.new_();