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:
@@ -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++) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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_();
|
||||
|
||||
Reference in New Issue
Block a user