mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v3.1.3.1
This commit is contained in:
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
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.core.brys; import gplx.*; import gplx.core.*;
|
||||
import gplx.core.errs.*;
|
||||
public class Bry_err_wkr {
|
||||
private String sect; private int sect_bgn;
|
||||
public byte[] Src() {return src;} private byte[] src;
|
||||
public String Page() {return page;} private String page;
|
||||
public void Fail_throws_err_(boolean v) {this.fail_throws_err = v;} private boolean fail_throws_err = true;
|
||||
public void Init_by_page(String page, byte[] src) {this.page = page; this.src = src;}
|
||||
public void Init_by_sect(String sect, int sect_bgn) {this.sect = sect; this.sect_bgn = sect_bgn;}
|
||||
public int Fail(String msg, Object... args) {return Fail(msg, sect_bgn, sect_bgn + 255, args);}
|
||||
private int Fail(String msg, int excerpt_bgn, int excerpt_end, Object[] args) {
|
||||
String err_msg = Make_msg(msg, excerpt_bgn, excerpt_end, args);
|
||||
Gfo_usr_dlg_.Instance.Warn_many("", "", err_msg);
|
||||
if (fail_throws_err) throw Err_.new_("Bry_err_wkr", err_msg).Logged_y_();
|
||||
return Bry_find_.Not_found;
|
||||
}
|
||||
private String Make_msg(String msg, int excerpt_bgn, int excerpt_end, Object[] args) {
|
||||
int args_len = args.length;
|
||||
args_len += 6;
|
||||
args = (Object[])Array_.Resize(args, args_len);
|
||||
args[args_len - 6] = "page"; args[args_len - 5] = Quote(page);
|
||||
args[args_len - 4] = "sect"; args[args_len - 3] = Quote(sect);
|
||||
args[args_len - 2] = "text"; args[args_len - 1] = Bry_.Escape_ws(Bry_.Mid_safe(src, excerpt_bgn, excerpt_end));
|
||||
for (int i = 0; i < args_len - 6; i += 2) {
|
||||
args[i + 1] = Quote(Object_.Xto_str_strict_or_null_mark(args[i + 1]));
|
||||
}
|
||||
return Err_msg.To_str(msg, args);
|
||||
}
|
||||
private static String Quote(String v) {return "'" + v + "'";}
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
/*
|
||||
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.core.brys; import gplx.*; import gplx.core.*;
|
||||
import gplx.core.errs.*;
|
||||
public class Bry_rdr {
|
||||
private final gplx.core.primitives.Int_obj_ref pos_ref = gplx.core.primitives.Int_obj_ref.neg1_();
|
||||
public byte[] Src() {return src;} private byte[] src;
|
||||
public int Src_end() {return src_end;} private int src_end;
|
||||
public int Pos() {return pos;} private int pos;
|
||||
public Bry_rdr Dflt_dlm_(byte b) {this.dflt_dlm = b; return this;} private byte dflt_dlm;
|
||||
public Bry_rdr Fail_throws_err_(boolean v) {err_wkr.Fail_throws_err_(v); return this;}
|
||||
public Bry_rdr Init_by_page(byte[] page, byte[] src, int src_len) {err_wkr.Init_by_page(String_.new_u8(page), src); this.pos = 0; this.src = src; this.src_end = src_len; return this;}
|
||||
public Bry_rdr Init_by_sect(String sect, int sect_bgn, int pos) {err_wkr.Init_by_sect(sect, sect_bgn); this.pos = pos; return this;}
|
||||
public Bry_rdr Init_by_wkr (Bry_err_wkr wkr, String sect, int pos, int src_end) {
|
||||
this.pos = pos; this.src = wkr.Src(); this.src_end = src_end;
|
||||
err_wkr.Init_by_page(wkr.Page(), src);
|
||||
err_wkr.Init_by_sect(sect, pos);
|
||||
return this;
|
||||
}
|
||||
public Bry_err_wkr Err_wkr() {return err_wkr;} private Bry_err_wkr err_wkr = new Bry_err_wkr();
|
||||
public int Move_to(int v) {this.pos = v; return pos;}
|
||||
public int Move_by_one() {return Move_by(1);}
|
||||
public int Move_by(int v) {this.pos += v; return pos;}
|
||||
public int Find_fwd_lr() {return Find_fwd(dflt_dlm , Bool_.Y, Bool_.N);}
|
||||
public int Find_fwd_lr(byte find) {return Find_fwd(find , Bool_.Y, Bool_.N);}
|
||||
public int Find_fwd_lr(byte[] find) {return Find_fwd(find , Bool_.Y, Bool_.N);}
|
||||
public int Find_fwd_rr() {return Find_fwd(dflt_dlm , Bool_.N, Bool_.N);}
|
||||
public int Find_fwd_rr(byte find) {return Find_fwd(find , Bool_.N, Bool_.N);}
|
||||
public int Find_fwd_rr(byte[] find) {return Find_fwd(find , Bool_.N, Bool_.N);}
|
||||
private int Find_fwd(byte find, boolean ret_lhs, boolean pos_lhs) {
|
||||
int find_pos = Bry_find_.Find_fwd(src, find, pos, src_end); if (find_pos == Bry_find_.Not_found) {err_wkr.Fail("find failed", "find", Byte_ascii.To_str(find)); return Bry_find_.Not_found;}
|
||||
pos = find_pos + (pos_lhs ? 0 : 1);
|
||||
return ret_lhs ? find_pos : pos;
|
||||
}
|
||||
private int Find_fwd(byte[] find, boolean ret_lhs, boolean pos_lhs) {
|
||||
int find_pos = Bry_find_.Find_fwd(src, find, pos, src_end); if (find_pos == Bry_find_.Not_found) {err_wkr.Fail("find failed", "find", String_.new_u8(find)); return Bry_find_.Not_found;}
|
||||
pos = find_pos + (pos_lhs ? 0 : find.length);
|
||||
return ret_lhs ? find_pos : pos;
|
||||
}
|
||||
public byte Read_byte() {
|
||||
byte rv = src[pos];
|
||||
++pos;
|
||||
return rv;
|
||||
}
|
||||
public byte Read_byte_to() {return Read_byte_to(dflt_dlm);}
|
||||
public byte Read_byte_to(byte to_char) {
|
||||
byte rv = src[pos];
|
||||
++pos;
|
||||
if (pos < src_end) {
|
||||
if (src[pos] != to_char) {err_wkr.Fail("read byte to failed", "to", Byte_ascii.To_str(to_char)); return Byte_.Max_value_127;}
|
||||
++pos;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public double Read_double_to() {return Read_double_to(dflt_dlm);}
|
||||
public double Read_double_to(byte to_char) {
|
||||
byte[] bry = Read_bry_to(to_char);
|
||||
return Double_.parse(String_.new_a7(bry));
|
||||
}
|
||||
public int Read_int_to() {return Read_int_to(dflt_dlm);}
|
||||
public int Read_int_to(byte to_char) {
|
||||
int bgn = pos;
|
||||
int rv = 0;
|
||||
int negative = 1;
|
||||
while (pos < src_end) {
|
||||
byte b = src[pos++];
|
||||
switch (b) {
|
||||
case Byte_ascii.Num_0: case Byte_ascii.Num_1: case Byte_ascii.Num_2: case Byte_ascii.Num_3: case Byte_ascii.Num_4:
|
||||
case Byte_ascii.Num_5: case Byte_ascii.Num_6: case Byte_ascii.Num_7: case Byte_ascii.Num_8: case Byte_ascii.Num_9:
|
||||
rv = (rv * 10) + (b - Byte_ascii.Num_0);
|
||||
break;
|
||||
case Byte_ascii.Dash:
|
||||
if (negative == -1) { // 2nd negative
|
||||
err_wkr.Fail("invalid int", "mid", String_.new_u8(src, bgn, pos));
|
||||
return Int_.Min_value;
|
||||
}
|
||||
else // 1st negative
|
||||
negative = -1; // flag negative
|
||||
break;
|
||||
default: {
|
||||
boolean match = b == to_char;
|
||||
if (to_char == Byte_ascii.Null) {// hack for Read_int_to_non_num
|
||||
--pos;
|
||||
match = true;
|
||||
}
|
||||
if (!match) {
|
||||
err_wkr.Fail("invalid int", "mid", String_.new_u8(src, bgn, pos));
|
||||
return Int_.Min_value;
|
||||
}
|
||||
return rv * negative;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bgn == pos) {err_wkr.Fail("int is empty"); return Int_.Min_value;}
|
||||
return rv * negative;
|
||||
}
|
||||
public int Read_hzip_int(int reqd) {
|
||||
int rv = gplx.xowa.htmls.core.hzips.Xoh_hzip_int_.Decode(reqd, src, src_end, pos, pos_ref);
|
||||
pos = pos_ref.Val();
|
||||
return rv;
|
||||
}
|
||||
public byte[] Read_bry_to() {return Read_bry_to(dflt_dlm);}
|
||||
public byte[] Read_bry_to(byte b) {
|
||||
int bgn = pos;
|
||||
return Bry_.Mid(src, bgn, Find_fwd_lr(b));
|
||||
}
|
||||
public boolean Is(byte find) {
|
||||
boolean rv = src[pos] == find;
|
||||
if (rv) ++pos; // only advance if match;
|
||||
return rv;
|
||||
}
|
||||
public boolean Is(byte[] find) {
|
||||
int find_len = find.length;
|
||||
int find_end = pos + find_len;
|
||||
boolean rv = Bry_.Match(src, pos, find_end, find, 0, find_len);
|
||||
if (rv) pos = find_end; // only advance if match;
|
||||
return rv;
|
||||
}
|
||||
public int Chk(byte find) {
|
||||
if (src[pos] != find) {err_wkr.Fail("failed check", "chk", Byte_.To_str(find)); return Bry_find_.Not_found;}
|
||||
++pos;
|
||||
return pos;
|
||||
}
|
||||
public int Chk(byte[] find) {
|
||||
int find_end = pos + find.length;
|
||||
if (!Bry_.Match(src, pos, find_end, find)) {err_wkr.Fail("failed check", "chk", String_.new_u8(find)); return Bry_find_.Not_found;}
|
||||
pos = find_end;
|
||||
return pos;
|
||||
}
|
||||
public byte Chk(gplx.core.btries.Btrie_slim_mgr trie) {return Chk(trie, pos, src_end);}
|
||||
public byte Chk_or(gplx.core.btries.Btrie_slim_mgr trie, byte or) {return Chk_or(trie, pos, src_end, or);}
|
||||
public byte Chk(gplx.core.btries.Btrie_slim_mgr trie, int itm_bgn, int itm_end) {
|
||||
byte rv = Chk_or(trie, itm_bgn, itm_end, Byte_.Max_value_127);
|
||||
if (rv == Byte_.Max_value_127) {err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16))); return Byte_.Max_value_127;}
|
||||
return rv;
|
||||
}
|
||||
public byte Chk_or(gplx.core.btries.Btrie_slim_mgr trie, int itm_bgn, int itm_end, byte or) {
|
||||
Object rv_obj = trie.Match_bgn(src, itm_bgn, itm_end);
|
||||
if (rv_obj == null) return or;
|
||||
pos = trie.Match_pos();
|
||||
return ((gplx.core.primitives.Byte_obj_val)rv_obj).Val();
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
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.core.brys; import gplx.*; import gplx.core.*;
|
||||
import org.junit.*;
|
||||
public class Bry_rdr_tst {
|
||||
@Before public void init() {fxt.Clear();} private Bry_rdr_fxt fxt = new Bry_rdr_fxt();
|
||||
@Test public void Int() {
|
||||
fxt.Init_src("12|3456|789");
|
||||
fxt.Test_read_int(12);
|
||||
fxt.Test_read_int(3456);
|
||||
fxt.Test_read_int(789);
|
||||
fxt.Test_read_int(Int_.Min_value);
|
||||
}
|
||||
@Test public void Int_negative() {
|
||||
fxt.Init_src("-1|-2");
|
||||
fxt.Test_read_int(-1);
|
||||
fxt.Test_read_int(-2);
|
||||
}
|
||||
@Test public void Bry() {
|
||||
fxt.Init_src("abc|d||ef");
|
||||
fxt.Test_read_bry("abc");
|
||||
fxt.Test_read_bry("d");
|
||||
fxt.Test_read_bry("");
|
||||
fxt.Test_read_bry("ef");
|
||||
fxt.Test_read_bry(null);
|
||||
}
|
||||
}
|
||||
class Bry_rdr_fxt {
|
||||
private Bry_rdr_old rdr;
|
||||
public void Clear() {rdr = new Bry_rdr_old();}
|
||||
public Bry_rdr_fxt Init_src(String v) {rdr.Init(Bry_.new_u8(v)); return this;}
|
||||
public Bry_rdr_fxt Init_pos(int v) {rdr.Pos_(v); return this;}
|
||||
public void Test_read_int(int expd_val) {
|
||||
Tfds.Eq(expd_val, rdr.Read_int_to_pipe());
|
||||
}
|
||||
public void Test_read_bry(String expd_str) {
|
||||
byte[] actl_bry = rdr.Read_bry_to_pipe();
|
||||
String actl_str = actl_bry == null ? null : String_.new_u8(actl_bry);
|
||||
Tfds.Eq(expd_str, actl_str);
|
||||
}
|
||||
}
|
||||
@@ -26,29 +26,29 @@ class Db_diff_bldr {
|
||||
// Io_url trg_url = Io_url_.new_fil_(trg_str);
|
||||
// Db_conn src_conn = Db_conn_bldr.Instance.Get_or_new(src_url).Conn();
|
||||
// Db_conn trg_conn = Db_conn_bldr.Instance.Get_or_new(trg_url).Conn();
|
||||
Meta_tbl_mgr src_tbls = new Meta_tbl_mgr();
|
||||
Meta_tbl_mgr trg_tbls = new Meta_tbl_mgr();
|
||||
Dbmeta_tbl_mgr src_tbls = new Dbmeta_tbl_mgr();
|
||||
Dbmeta_tbl_mgr trg_tbls = new Dbmeta_tbl_mgr();
|
||||
return Compare_tbls(src_tbls, trg_tbls);
|
||||
}
|
||||
public String Compare_tbls(Meta_tbl_mgr src_tbls, Meta_tbl_mgr trg_tbls) {
|
||||
public String Compare_tbls(Dbmeta_tbl_mgr src_tbls, Dbmeta_tbl_mgr trg_tbls) {
|
||||
int src_len = src_tbls.Len();
|
||||
for (int i = 0; i < src_len; ++i) {
|
||||
Meta_tbl_itm src_tbl = src_tbls.Get_at(i);
|
||||
Meta_tbl_itm trg_tbl = trg_tbls.Get_by(src_tbl.Name());
|
||||
Dbmeta_tbl_itm src_tbl = src_tbls.Get_at(i);
|
||||
Dbmeta_tbl_itm trg_tbl = trg_tbls.Get_by(src_tbl.Name());
|
||||
if (trg_tbl == null) Tbl_delete(src_tbl);
|
||||
}
|
||||
int trg_len = trg_tbls.Len();
|
||||
for (int i = 0; i < trg_len; ++i) {
|
||||
Meta_tbl_itm trg_tbl = src_tbls.Get_at(i);
|
||||
Meta_tbl_itm src_tbl = trg_tbls.Get_by(trg_tbl.Name());
|
||||
Dbmeta_tbl_itm trg_tbl = src_tbls.Get_at(i);
|
||||
Dbmeta_tbl_itm src_tbl = trg_tbls.Get_by(trg_tbl.Name());
|
||||
if (src_tbl == null) Tbl_create(trg_tbl);
|
||||
}
|
||||
return bfr.To_str_and_clear();
|
||||
}
|
||||
private void Tbl_delete(Meta_tbl_itm tbl) {
|
||||
private void Tbl_delete(Dbmeta_tbl_itm tbl) {
|
||||
bfr.Add_str_a7("DROP TABLE ").Add_str_u8(tbl.Name()).Add_byte_nl();
|
||||
}
|
||||
private void Tbl_create(Meta_tbl_itm tbl) {
|
||||
private void Tbl_create(Dbmeta_tbl_itm tbl) {
|
||||
// sql_bldr.Bld_create_tbl(tbl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs.cfgs; import gplx.*; import gplx.dbs.*;
|
||||
import gplx.core.primitives.*;
|
||||
public class Db_cfg_tbl implements Rls_able {
|
||||
private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_grp, fld_key, fld_val;
|
||||
private Db_stmt stmt_insert, stmt_update, stmt_select;
|
||||
public Db_conn Conn() {return conn;} private final Db_conn conn;
|
||||
@@ -34,10 +34,10 @@ public class Db_cfg_tbl implements Rls_able {
|
||||
stmt_update = Db_stmt_.Rls(stmt_update);
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_grp, fld_key, fld_val)));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "main", fld_grp, fld_key, fld_val)));}
|
||||
public void Delete_val(String grp, String key) {conn.Stmt_delete(tbl_name, fld_grp, fld_key).Crt_str(fld_grp, grp).Crt_str(fld_key, key).Exec_delete();}
|
||||
public void Delete_grp(String grp) {conn.Stmt_delete(tbl_name, fld_grp).Crt_str(fld_grp, grp).Exec_delete();}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Insert_yn (String grp, String key, boolean val) {Insert_str(grp, key, val ? "y" : "n");}
|
||||
public void Insert_byte (String grp, String key, byte val) {Insert_str(grp, key, Byte_.To_str(val));}
|
||||
public void Insert_int (String grp, String key, int val) {Insert_str(grp, key, Int_.To_str(val));}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs; import gplx.*; import gplx.dbs.*;
|
||||
public class Gfdb_diff_db_ {
|
||||
public static final String
|
||||
Fld__diff_site = "diff_site" // -1 for single-site merge; 0+ for multiple-site merges where 0+ is defined in a registry
|
||||
, Fld__diff_time = "diff_time" // -1 for single-time merge; 0+ for multiple-time merges where 0+ is defined in a registry
|
||||
, Fld__diff_db_trg = "diff_db_trg" // -1 for single-db tables; 0+ for multiple-db tables
|
||||
, Fld__diff_db_src = "diff_db_src" // -1 for I,U,D; 0+ for M
|
||||
, Fld__diff_type = "diff_type" // I,U,D,M
|
||||
, Fld__diff_uid = "diff_uid" // 0+
|
||||
;
|
||||
public static final byte
|
||||
Tid__insert = 0
|
||||
, Tid__update = 1
|
||||
, Tid__delete = 2
|
||||
, Tid__move = 3
|
||||
;
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs; import gplx.*; import gplx.dbs.*;
|
||||
public class Gfdb_diff_tbl {
|
||||
public Gfdb_diff_tbl(String name, Db_meta_fld[] keys, Db_meta_fld[] vals, Db_rdr rdr) {
|
||||
this.name = name; this.keys = keys; this.vals = vals; this.rdr = rdr;
|
||||
int keys_len = keys.length; int vals_len = vals.length;
|
||||
this.flds = new Db_meta_fld[keys_len + vals_len];
|
||||
for (int i = 0; i < keys_len; ++i)
|
||||
flds[i] = keys[i];
|
||||
for (int i = 0; i < vals_len; ++i)
|
||||
flds[i + keys_len] = vals[i];
|
||||
}
|
||||
public String Name() {return name;} private final String name;
|
||||
public Db_meta_fld[] Flds() {return flds;} private final Db_meta_fld[] flds;
|
||||
public Db_meta_fld[] Keys() {return keys;} private final Db_meta_fld[] keys;
|
||||
public Db_meta_fld[] Vals() {return vals;} private final Db_meta_fld[] vals;
|
||||
public Db_rdr Rdr() {return rdr;} private final Db_rdr rdr;
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs; import gplx.*; import gplx.dbs.*;
|
||||
public class Gfdb_rdr_utl_ {
|
||||
public static int Compare(Db_meta_fld[] flds, int len, Db_rdr lhs_rdr, Db_rdr rhs_rdr) {
|
||||
int comp = CompareAble_.Same;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Db_meta_fld fld = flds[i];
|
||||
String fld_name = fld.Name();
|
||||
switch (fld.Tid()) {
|
||||
case Db_meta_fld.Tid_bool: comp = Bool_.Compare (lhs_rdr.Read_bool_by_byte(fld_name), rhs_rdr.Read_bool_by_byte(fld_name)); break;
|
||||
case Db_meta_fld.Tid_int: comp = Int_.Compare (lhs_rdr.Read_int(fld_name) , rhs_rdr.Read_int(fld_name)); break;
|
||||
case Db_meta_fld.Tid_long: comp = Long_.Compare (lhs_rdr.Read_long(fld_name) , rhs_rdr.Read_long(fld_name)); break;
|
||||
case Db_meta_fld.Tid_float: comp = Float_.Compare (lhs_rdr.Read_float(fld_name) , rhs_rdr.Read_float(fld_name)); break;
|
||||
case Db_meta_fld.Tid_double: comp = Double_.Compare (lhs_rdr.Read_double(fld_name) , rhs_rdr.Read_double(fld_name)); break;
|
||||
case Db_meta_fld.Tid_str: comp = String_.Compare (lhs_rdr.Read_str(fld_name) , rhs_rdr.Read_str(fld_name)); break;
|
||||
case Db_meta_fld.Tid_bry: comp = Bry_.Compare (lhs_rdr.Read_bry(fld_name) , rhs_rdr.Read_bry(fld_name)); break;
|
||||
default: throw Err_.new_unhandled(fld.Tid());
|
||||
}
|
||||
if (comp != CompareAble_.Same) return comp;
|
||||
}
|
||||
return CompareAble_.Same;
|
||||
}
|
||||
public static void Stmt_args(Db_stmt stmt, Db_meta_fld[] flds, int len, Db_rdr rdr) {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Db_meta_fld fld = flds[i];
|
||||
String fld_name = fld.Name();
|
||||
switch (fld.Tid()) {
|
||||
case Db_meta_fld.Tid_bool: stmt.Val_bool_as_byte (fld_name, rdr.Read_bool_by_byte(fld_name)); break;
|
||||
case Db_meta_fld.Tid_byte: stmt.Val_byte (fld_name, rdr.Read_byte(fld_name)); break;
|
||||
case Db_meta_fld.Tid_int: stmt.Val_int (fld_name, rdr.Read_int(fld_name)); break;
|
||||
case Db_meta_fld.Tid_long: stmt.Val_long (fld_name, rdr.Read_long(fld_name)); break;
|
||||
case Db_meta_fld.Tid_float: stmt.Val_float (fld_name, rdr.Read_float(fld_name)); break;
|
||||
case Db_meta_fld.Tid_double: stmt.Val_double (fld_name, rdr.Read_double(fld_name)); break;
|
||||
case Db_meta_fld.Tid_str: stmt.Val_str (fld_name, rdr.Read_str(fld_name)); break;
|
||||
case Db_meta_fld.Tid_bry: stmt.Val_bry (fld_name, rdr.Read_bry(fld_name)); break;
|
||||
default: throw Err_.new_unhandled(fld.Tid());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Gfdb_diff_bldr {
|
||||
private Gfdb_diff_rdr_comparer rdr_comparer = new Gfdb_diff_rdr_comparer();
|
||||
private Gfdb_diff_wkr diff_wkr;
|
||||
public void Init(Gfdb_diff_wkr diff_wkr) {this.diff_wkr = diff_wkr;}
|
||||
public void Compare(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) {
|
||||
rdr_comparer.Init(lhs_tbl, rhs_tbl);
|
||||
diff_wkr.Init_tbls(lhs_tbl, rhs_tbl);
|
||||
boolean loop = true;
|
||||
while (loop) {
|
||||
int rslt = rdr_comparer.Compare();
|
||||
switch (rslt) {
|
||||
case Gfdb_diff_rdr_comparer.Rslt__same: diff_wkr.Handle_same(); break;
|
||||
case Gfdb_diff_rdr_comparer.Rslt__lhs_missing: diff_wkr.Handle_lhs_missing(); break;
|
||||
case Gfdb_diff_rdr_comparer.Rslt__rhs_missing: diff_wkr.Handle_rhs_missing(); break;
|
||||
case Gfdb_diff_rdr_comparer.Rslt__done: loop = false; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,123 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
import org.junit.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.mems.*;
|
||||
public class Gfdb_diff_bldr_tst {
|
||||
private final Gfdb_diff_bldr_fxt fxt = new Gfdb_diff_bldr_fxt();
|
||||
@Test public void Same() {
|
||||
fxt.Init__tbl__lhs(Object_.Ary(1, "A") , Object_.Ary(2, "B"));
|
||||
fxt.Init__tbl__rhs(Object_.Ary(1, "A") , Object_.Ary(2, "B"));
|
||||
fxt.Test__bld();
|
||||
}
|
||||
@Test public void Update() {
|
||||
fxt.Init__tbl__lhs(Object_.Ary(1, "A") , Object_.Ary(2, "B"));
|
||||
fxt.Init__tbl__rhs(Object_.Ary(1, "A1") , Object_.Ary(2, "B1"));
|
||||
fxt.Test__bld("U|1|A1", "U|2|B1");
|
||||
}
|
||||
@Test public void Insert() {
|
||||
fxt.Init__tbl__lhs(Object_.Ary(1, "A"));
|
||||
fxt.Init__tbl__rhs(Object_.Ary(1, "A") , Object_.Ary(2, "B"));
|
||||
fxt.Test__bld("I|2|B");
|
||||
}
|
||||
@Test public void Delete() {
|
||||
fxt.Init__tbl__lhs(Object_.Ary(1, "A") , Object_.Ary(2, "B"));
|
||||
fxt.Init__tbl__rhs(Object_.Ary(1, "A"));
|
||||
fxt.Test__bld("D|2");
|
||||
}
|
||||
@Test public void Basic() {
|
||||
fxt.Init__tbl__lhs
|
||||
( Object_.Ary(1, "A")
|
||||
, Object_.Ary(2, "B")
|
||||
, Object_.Ary(3, "C")
|
||||
);
|
||||
fxt.Init__tbl__rhs
|
||||
( Object_.Ary(1, "A")
|
||||
, Object_.Ary(2, "B1")
|
||||
, Object_.Ary(4, "D")
|
||||
);
|
||||
fxt.Test__bld("U|2|B1", "D|3", "I|4|D");
|
||||
}
|
||||
}
|
||||
class Gfdb_diff_bldr_fxt {
|
||||
private final Gfdb_diff_bldr bldr = new Gfdb_diff_bldr();
|
||||
private final Gfdb_diff_wkr__test wkr = new Gfdb_diff_wkr__test();
|
||||
private final Db_meta_fld[] key_flds, val_flds;
|
||||
private Gfdb_diff_tbl lhs_tbl, rhs_tbl;
|
||||
public Gfdb_diff_bldr_fxt() {
|
||||
Db_meta_fld_list fld_list = new Db_meta_fld_list();
|
||||
fld_list.Add_int("id");
|
||||
key_flds = fld_list.To_fld_ary();
|
||||
fld_list.Clear();
|
||||
fld_list.Add_str("val", 255);
|
||||
val_flds = fld_list.To_fld_ary();
|
||||
bldr.Init(wkr);
|
||||
}
|
||||
public void Init__tbl__lhs(Object[]... rows) {this.lhs_tbl = Make__tbl(key_flds, val_flds, rows);}
|
||||
public void Init__tbl__rhs(Object[]... rows) {this.rhs_tbl = Make__tbl(key_flds, val_flds, rows);}
|
||||
public void Test__bld(String... expd) {
|
||||
bldr.Compare(lhs_tbl, rhs_tbl);
|
||||
Tfds.Eq_ary_str(expd, wkr.To_str_ary());
|
||||
}
|
||||
private static Gfdb_diff_tbl Make__tbl(Db_meta_fld[] keys, Db_meta_fld[] vals, Object[][] rows) {
|
||||
int keys_len = keys.length; int vals_len = vals.length;
|
||||
int cols_len = keys_len + vals_len;
|
||||
String[] cols = new String[cols_len];
|
||||
for (int i = 0; i < keys_len; ++i)
|
||||
cols[i] = keys[i].Name();
|
||||
for (int i = 0; i < vals_len; ++i)
|
||||
cols[i + keys_len] = vals[i].Name();
|
||||
|
||||
int rows_len = rows.length;
|
||||
Mem_row[] mem_rows = new Mem_row[rows_len];
|
||||
for (int i = 0; i < rows_len; ++i) {
|
||||
Object[] row = rows[i];
|
||||
Mem_row mem_row = new Mem_row();
|
||||
mem_rows[i] = mem_row;
|
||||
for (int j = 0; j < cols_len; ++j) {
|
||||
Object cell = row[j];
|
||||
mem_row.Add(cols[j], cell);
|
||||
}
|
||||
}
|
||||
Db_rdr rdr = new Db_rdr__mem(cols, mem_rows);
|
||||
return new Gfdb_diff_tbl("tbl1", keys, vals, rdr);
|
||||
}
|
||||
}
|
||||
class Gfdb_diff_wkr__test implements Gfdb_diff_wkr {
|
||||
private final List_adp list = List_adp_.new_();
|
||||
private final Bry_bfr bfr = Bry_bfr.new_();
|
||||
private Db_rdr lhs_rdr, rhs_rdr;
|
||||
public void Init_tbls(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) {
|
||||
this.lhs_rdr = lhs_tbl.Rdr(); this.rhs_rdr = rhs_tbl.Rdr();
|
||||
}
|
||||
public void Term_tbls() {}
|
||||
public void Handle_same() {
|
||||
String lhs_val = lhs_rdr.Read_str("val");
|
||||
String rhs_val = rhs_rdr.Read_str("val");
|
||||
if (!String_.Eq(lhs_val, rhs_val))
|
||||
list.Add(bfr.Add_str_a7("U").Add_byte_pipe().Add_obj(lhs_rdr.Read_obj("id")).Add_byte_pipe().Add_str_a7(rhs_val).To_str_and_clear());
|
||||
}
|
||||
public void Handle_lhs_missing() {
|
||||
String rhs_val = rhs_rdr.Read_str("val");
|
||||
list.Add(bfr.Add_str_a7("I").Add_byte_pipe().Add_obj(rhs_rdr.Read_obj("id")).Add_byte_pipe().Add_str_a7(rhs_val).To_str_and_clear());
|
||||
}
|
||||
public void Handle_rhs_missing() {
|
||||
list.Add(bfr.Add_str_a7("D").Add_byte_pipe().Add_obj(lhs_rdr.Read_obj("id")).To_str_and_clear());
|
||||
}
|
||||
public String[] To_str_ary() {return list.To_str_ary_and_clear();}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
class Gfdb_diff_rdr_comparer {
|
||||
private Db_rdr lhs_rdr, rhs_rdr;
|
||||
private boolean lhs_rdr_move, rhs_rdr_move;
|
||||
private boolean lhs_rdr_done, rhs_rdr_done;
|
||||
private Db_meta_fld[] key_flds; private int key_flds_len;
|
||||
public void Init(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) {
|
||||
this.lhs_rdr = lhs_tbl.Rdr(); this.rhs_rdr = rhs_tbl.Rdr();
|
||||
this.lhs_rdr_move = rhs_rdr_move = Bool_.Y;
|
||||
this.lhs_rdr_done = rhs_rdr_done = Bool_.N;
|
||||
this.key_flds = rhs_tbl.Keys(); key_flds_len = key_flds.length;
|
||||
}
|
||||
public int Compare() {
|
||||
if (lhs_rdr_move) {
|
||||
lhs_rdr_move = lhs_rdr.Move_next();
|
||||
if (!lhs_rdr_move) lhs_rdr_done = true;
|
||||
}
|
||||
if (rhs_rdr_move) {
|
||||
rhs_rdr_move = rhs_rdr.Move_next();
|
||||
if (!rhs_rdr_move) rhs_rdr_done = true;
|
||||
}
|
||||
if (lhs_rdr_done && rhs_rdr_done) return Gfdb_diff_rdr_comparer.Rslt__done;
|
||||
else if (lhs_rdr_done) {rhs_rdr_move = true; return Gfdb_diff_rdr_comparer.Rslt__lhs_missing;}
|
||||
else if (rhs_rdr_done) {lhs_rdr_move = true; return Gfdb_diff_rdr_comparer.Rslt__rhs_missing;}
|
||||
else {
|
||||
int comp = Gfdb_rdr_utl_.Compare(key_flds, key_flds_len, lhs_rdr, rhs_rdr);
|
||||
switch (comp) {
|
||||
case CompareAble_.Same: // lhs == rhs; move both
|
||||
lhs_rdr_move = rhs_rdr_move = true;
|
||||
return Gfdb_diff_rdr_comparer.Rslt__same;
|
||||
case CompareAble_.Less: // lhs < rhs; EX: lhs == 2; rhs == 3
|
||||
lhs_rdr_move = true;
|
||||
rhs_rdr_move = false;
|
||||
return Gfdb_diff_rdr_comparer.Rslt__rhs_missing;
|
||||
case CompareAble_.More: // lhs > rhs; EX: lhs == 4; rhs == 3
|
||||
lhs_rdr_move = false;
|
||||
rhs_rdr_move = true;
|
||||
return Gfdb_diff_rdr_comparer.Rslt__lhs_missing;
|
||||
default: throw Err_.new_unhandled(comp);
|
||||
}
|
||||
}
|
||||
}
|
||||
public static final int
|
||||
Rslt__same = 0
|
||||
, Rslt__lhs_missing = 1
|
||||
, Rslt__rhs_missing = 2
|
||||
, Rslt__done = 3
|
||||
;
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
class Gfdb_diff_wkr__db implements Gfdb_diff_wkr {
|
||||
private Gfdb_diff_tbl lhs_tbl, rhs_tbl;
|
||||
private Db_meta_fld[] val_flds; private int val_flds_len;
|
||||
private Db_conn diff_conn; private Db_stmt stmt;
|
||||
private int uid__upsert, uid__delete; private int prog_interval, prog_count;
|
||||
public void Init_conn(Gfdb_diff_db diff_db, int prog_interval) {this.diff_conn = diff_db.Conn(); this.prog_interval = prog_interval;}
|
||||
public void Init_tbls(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) {
|
||||
this.lhs_tbl = lhs_tbl; this.rhs_tbl = rhs_tbl;
|
||||
this.val_flds = lhs_tbl.Vals(); val_flds_len = val_flds.length;
|
||||
this.uid__upsert = 0; uid__delete = 0; this.prog_count = 0;
|
||||
String tbl_name = rhs_tbl.Name();
|
||||
Db_meta_fld[] diff_flds = Gfdb_diff_wkr__db_.New_diff_flds(rhs_tbl.Flds());
|
||||
if (!diff_conn.Meta_tbl_exists(tbl_name)) diff_conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, diff_flds));
|
||||
this.stmt = diff_conn.Stmt_insert(tbl_name, Gfdb_diff_wkr__db_.To_str_ary(diff_flds));
|
||||
diff_conn.Txn_bgn("diff_db");
|
||||
}
|
||||
public void Term_tbls() {
|
||||
diff_conn.Txn_end();
|
||||
}
|
||||
public void Handle_same() {
|
||||
if (Gfdb_rdr_utl_.Compare(val_flds, val_flds_len, lhs_tbl.Rdr(), rhs_tbl.Rdr()) != CompareAble_.Same)
|
||||
Insert(Gfdb_diff_db_.Tid__update, uid__upsert++, rhs_tbl.Flds(), rhs_tbl.Rdr());
|
||||
}
|
||||
public void Handle_lhs_missing() {Insert(Gfdb_diff_db_.Tid__insert, uid__upsert++, rhs_tbl.Flds(), rhs_tbl.Rdr());}
|
||||
public void Handle_rhs_missing() {Insert(Gfdb_diff_db_.Tid__delete, uid__delete++, lhs_tbl.Keys(), lhs_tbl.Rdr());}
|
||||
private void Insert(byte diff_type, int uid, Db_meta_fld[] flds, Db_rdr rdr) {
|
||||
stmt.Val_int (Gfdb_diff_db_.Fld__diff_site , -1)
|
||||
.Val_int (Gfdb_diff_db_.Fld__diff_time , -1)
|
||||
.Val_int (Gfdb_diff_db_.Fld__diff_db_trg , -1)
|
||||
.Val_int (Gfdb_diff_db_.Fld__diff_db_src , -1)
|
||||
.Val_byte (Gfdb_diff_db_.Fld__diff_type , diff_type)
|
||||
.Val_int (Gfdb_diff_db_.Fld__diff_type , uid)
|
||||
;
|
||||
Gfdb_rdr_utl_.Stmt_args(stmt, flds, flds.length, rdr);
|
||||
stmt.Exec_insert();
|
||||
if ((++prog_count % prog_interval) == 0) diff_conn.Txn_sav();
|
||||
}
|
||||
}
|
||||
class Gfdb_diff_wkr__db_ {
|
||||
public static Db_meta_fld[] New_diff_flds(Db_meta_fld[] all_flds) {
|
||||
int len = all_flds.length;
|
||||
int system_flds = 6;
|
||||
Db_meta_fld[] rv = new Db_meta_fld[len + system_flds];
|
||||
rv[0] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_site);
|
||||
rv[1] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_time);
|
||||
rv[2] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_db_trg);
|
||||
rv[3] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_db_src);
|
||||
rv[4] = Db_meta_fld.new_byte(Gfdb_diff_db_.Fld__diff_type);
|
||||
rv[5] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_uid);
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Db_meta_fld orig_fld = all_flds[i];
|
||||
Db_meta_fld diff_fld = new Db_meta_fld(orig_fld.Name(), orig_fld.Tid(), orig_fld.Len()).Nullable_y_(); // keep same name and type, but make nullable
|
||||
all_flds[i + system_flds] = diff_fld;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public static String[] To_str_ary(Db_meta_fld[] ary) {
|
||||
int len = ary.length;
|
||||
String[] rv = new String[len];
|
||||
for (int i = 0; i < len; ++i)
|
||||
rv[i] = ary[i].Name();
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
@@ -1,123 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs.merges; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
import gplx.core.brys.fmtrs.*;
|
||||
interface Gfdb_diff_cmd {
|
||||
void Merge_undo();
|
||||
void Merge_exec();
|
||||
}
|
||||
class Gfdb_diff_cmd__insert {
|
||||
// else if I
|
||||
// // txn_bgn
|
||||
// // audit
|
||||
// INSERT INTO db_temp.page (diff_type, diff, *)
|
||||
// SELECT 'D', d.page_id, *
|
||||
// FROM db_diff.page d
|
||||
// JOIN db_main.page m ON d.page_id = m.page_id
|
||||
// WHERE d.diff_type = 0
|
||||
// AND d.diff_idx BETWEEN lo and hi
|
||||
//
|
||||
// // update
|
||||
// INSERT INTO db_main.page
|
||||
// SELECT d.page_title
|
||||
// FROM db_diff.page d
|
||||
// JOIN db_main.page m
|
||||
// // txn_end
|
||||
private Db_conn conn;
|
||||
private String exec_sql;
|
||||
public void Init(Db_conn main_conn, Db_conn diff_conn, Db_conn temp_conn, Gfdb_diff_tbl tbl) {
|
||||
this.conn = temp_conn;
|
||||
this.exec_sql = "";
|
||||
// this.exec_sql = String_.Format(String_.Concat_lines_nl_skip_last
|
||||
// ( "INSERT INTO db_curr.{tbl}"
|
||||
// ), Gfdb_diff_cmd_ctx.Alias__curr);
|
||||
}
|
||||
public void Merge_exec() {
|
||||
conn.Exec_sql(exec_sql);
|
||||
}
|
||||
}
|
||||
class Gfdb_diff_cmd_sql_bldr {
|
||||
private final Bry_fmtr fmtr = Bry_fmtr.new_();
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr.new_();
|
||||
public void Bld_insert(Bry_bfr bfr, String tbl_name, String[] keys, String[] vals, int rng_bgn, int rng_end) {
|
||||
fmtr.Fmt_(Insert__fmt).Keys_(Insert__keys);
|
||||
fmtr.Bld_bfr_many(bfr, tbl_name, Bld_flds(tmp_bfr, ", ", "d.", keys, vals), Bld_join(keys), rng_bgn, rng_end);
|
||||
}
|
||||
public void Bld_update(Bry_bfr bfr, String tbl_name, String[] keys, String[] vals, int rng_bgn, int rng_end) {
|
||||
fmtr.Fmt_(Update__fmt).Keys_(Update__keys);
|
||||
fmtr.Bld_bfr_many(bfr, tbl_name, Bld_flds(tmp_bfr, ", ", "d.", keys, vals), Bld_join(keys), rng_bgn, rng_end);
|
||||
}
|
||||
public void Bld_delete(Bry_bfr bfr, String tbl_name, String[] keys, int rng_bgn, int rng_end) {
|
||||
fmtr.Fmt_(Delete__fmt).Keys_(Delete__keys);
|
||||
fmtr.Bld_bfr_many(bfr, tbl_name, Bld_flds(tmp_bfr, " || '|' || ", "", keys, String_.Ary_empty), Bld_flds(tmp_bfr, " || '|' || ", "k.", keys, String_.Ary_empty), Bld_join(keys), rng_bgn, rng_end);
|
||||
}
|
||||
private static String Bld_flds(Bry_bfr tmp_bfr, String dlm, String alias, String[] keys, String[] vals) {
|
||||
int keys_len = keys.length;
|
||||
for (int i = 0; i < keys_len; ++i) {
|
||||
String key = keys[i];
|
||||
if (i != 0) tmp_bfr.Add_str_a7(dlm);
|
||||
tmp_bfr.Add_str_a7(alias).Add_str_a7(key);
|
||||
}
|
||||
int flds_len = vals.length;
|
||||
for (int i = 0; i < flds_len; ++i) {
|
||||
String val = vals[i];
|
||||
tmp_bfr.Add_str_a7(dlm);
|
||||
tmp_bfr.Add_str_a7(alias).Add_str_a7(val);
|
||||
}
|
||||
return tmp_bfr.To_str_and_clear();
|
||||
}
|
||||
private String Bld_join(String[] keys) {
|
||||
int len = keys.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
String key = keys[i];
|
||||
tmp_bfr.Add_str_a7(i == 0 ? " ON " : " AND ");
|
||||
tmp_bfr.Add_str_a7("k.").Add_str_a7(key).Add_str_a7(" = ");
|
||||
tmp_bfr.Add_str_a7("d.").Add_str_a7(key);
|
||||
}
|
||||
return tmp_bfr.To_str_and_clear();
|
||||
}
|
||||
private static final String[] Insert__keys = String_.Ary("tbl", "flds", "join", "rng_bgn", "rng_end");
|
||||
private static final String Insert__fmt = String_.Concat_lines_nl_skip_last
|
||||
( "INSERT INTO db_curr.~{tbl}"
|
||||
, "SELECT ~{flds}"
|
||||
, "FROM db_temp.~{tbl}_pkey k"
|
||||
, " JOIN db_diff.~{tbl} d~{join}"
|
||||
, "WHERE k.diff_type = 1"
|
||||
, "AND k.diff_uid BETWEEN ~{rng_bgn} AND ~{rng_end};"
|
||||
);
|
||||
private static final String[] Update__keys = String_.Ary("tbl", "flds", "join", "rng_bgn", "rng_end");
|
||||
private static final String Update__fmt = String_.Concat_lines_nl_skip_last
|
||||
( "REPLACE INTO db_curr.~{tbl}"
|
||||
, "SELECT ~{flds}"
|
||||
, "FROM db_temp.~{tbl}_pkey k"
|
||||
, " JOIN db_diff.~{tbl} d~{join}"
|
||||
, "WHERE k.diff_type = 2"
|
||||
, "AND k.diff_uid BETWEEN ~{rng_bgn} AND ~{rng_end};"
|
||||
);
|
||||
private static final String[] Delete__keys = String_.Ary("tbl", "pkey_where", "pkey_select", "join", "rng_bgn", "rng_end");
|
||||
private static final String Delete__fmt = String_.Concat_lines_nl_skip_last
|
||||
( "DELETE db_curr.~{tbl}"
|
||||
, "WHERE ~{pkey_where} IN"
|
||||
, "( SELECT ~{pkey_select}"
|
||||
, " FROM db_temp.~{tbl}_pkey k"
|
||||
, " JOIN db_diff.~{tbl} d~{join}"
|
||||
, " WHERE k.diff_type = 0"
|
||||
, " AND k.diff_uid BETWEEN ~{rng_bgn} AND ~{rng_end}"
|
||||
, ");"
|
||||
);
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
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.dbs.diffs.merges; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
import org.junit.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.mems.*;
|
||||
public class Gfdb_diff_cmd_sql_bldr_tst {
|
||||
private final Gfdb_diff_cmd_sql_bldr_fxt fxt = new Gfdb_diff_cmd_sql_bldr_fxt();
|
||||
@Test public void Insert() {
|
||||
fxt.Test__insert("tbl1", String_.Ary("key1", "key2"), String_.Ary("fld1", "fld2"), 0, 99, String_.Concat_lines_nl_skip_last
|
||||
( "INSERT INTO db_curr.tbl1"
|
||||
, "SELECT d.key1, d.key2, d.fld1, d.fld2"
|
||||
, "FROM db_temp.tbl1_pkey k"
|
||||
, " JOIN db_diff.tbl1 d ON k.key1 = d.key1 AND k.key2 = d.key2"
|
||||
, "WHERE k.diff_type = 1"
|
||||
, "AND k.diff_uid BETWEEN 0 AND 99;"
|
||||
));
|
||||
}
|
||||
@Test public void Update() {
|
||||
fxt.Test__update("tbl1", String_.Ary("key1", "key2"), String_.Ary("fld1", "fld2"), 0, 99, String_.Concat_lines_nl_skip_last
|
||||
( "REPLACE INTO db_curr.tbl1"
|
||||
, "SELECT d.key1, d.key2, d.fld1, d.fld2"
|
||||
, "FROM db_temp.tbl1_pkey k"
|
||||
, " JOIN db_diff.tbl1 d ON k.key1 = d.key1 AND k.key2 = d.key2"
|
||||
, "WHERE k.diff_type = 2"
|
||||
, "AND k.diff_uid BETWEEN 0 AND 99;"
|
||||
));
|
||||
}
|
||||
@Test public void Delete() {
|
||||
fxt.Test__delete("tbl1", String_.Ary("key1", "key2"), 0, 99, String_.Concat_lines_nl_skip_last
|
||||
( "DELETE db_curr.tbl1"
|
||||
, "WHERE key1 || '|' || key2 IN"
|
||||
, "( SELECT k.key1 || '|' || k.key2"
|
||||
, " FROM db_temp.tbl1_pkey k"
|
||||
, " JOIN db_diff.tbl1 d ON k.key1 = d.key1 AND k.key2 = d.key2"
|
||||
, " WHERE k.diff_type = 0"
|
||||
, " AND k.diff_uid BETWEEN 0 AND 99"
|
||||
, ");"
|
||||
));
|
||||
}
|
||||
}
|
||||
class Gfdb_diff_cmd_sql_bldr_fxt {
|
||||
private Gfdb_diff_cmd_sql_bldr bldr = new Gfdb_diff_cmd_sql_bldr();
|
||||
private final Bry_bfr bfr = Bry_bfr.new_();
|
||||
public void Test__insert(String tbl_name, String[] keys, String[] flds, int rng_bgn, int rng_end, String expd) {
|
||||
bldr.Bld_insert(bfr, tbl_name, keys, flds, 0, 99);
|
||||
Tfds.Eq_str_lines(expd, bfr.To_str_and_clear());
|
||||
}
|
||||
public void Test__update(String tbl_name, String[] keys, String[] flds, int rng_bgn, int rng_end, String expd) {
|
||||
bldr.Bld_update(bfr, tbl_name, keys, flds, 0, 99);
|
||||
Tfds.Eq_str_lines(expd, bfr.To_str_and_clear());
|
||||
}
|
||||
public void Test__delete(String tbl_name, String[] keys, int rng_bgn, int rng_end, String expd) {
|
||||
bldr.Bld_delete(bfr, tbl_name, keys, 0, 99);
|
||||
Tfds.Eq_str_lines(expd, bfr.To_str_and_clear());
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ import gplx.dbs.metas.updates.*;
|
||||
public class Schema_db_mgr {
|
||||
public Schema_loader_mgr Loader() {return loader;} public void Loader_(Schema_loader_mgr v) {loader = v;} private Schema_loader_mgr loader;
|
||||
public Schema_update_mgr Updater() {return updater;} private final Schema_update_mgr updater = new Schema_update_mgr();
|
||||
public Meta_tbl_mgr Tbl_mgr() {return tbl_mgr;} private final Meta_tbl_mgr tbl_mgr = new Meta_tbl_mgr();
|
||||
public Dbmeta_tbl_mgr Tbl_mgr() {return tbl_mgr;} private final Dbmeta_tbl_mgr tbl_mgr = new Dbmeta_tbl_mgr();
|
||||
public void Init(Db_conn conn) {
|
||||
loader.Load(this, conn);
|
||||
updater.Update(this, conn);
|
||||
|
||||
@@ -27,21 +27,20 @@ class Schema_loader_mgr__null implements Schema_loader_mgr {
|
||||
class Schema_loader_mgr__sqlite implements Schema_loader_mgr {
|
||||
public void Load(Schema_db_mgr db_mgr, Db_conn conn) {
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.schema.load.bgn: conn=~{0}", conn.Conn_info().Xto_api());
|
||||
Meta_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr();
|
||||
Dbmeta_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr();
|
||||
Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", String_.Ary_empty, String_.Ary("type", "name", "sql"), Db_qry__select_in_tbl.Order_by_null);
|
||||
Db_rdr rdr = conn.Stmt_new(qry).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
String type_str = rdr.Read_str("type");
|
||||
String name = rdr.Read_str("name");
|
||||
String sql = rdr.Read_str("sql");
|
||||
int type_int = Meta_itm_tid.Xto_int(type_str);
|
||||
int type_int = Dbmeta_itm_tid.Xto_int(type_str);
|
||||
switch (type_int) {
|
||||
case Meta_itm_tid.Tid_table:
|
||||
Meta_tbl_itm tbl_itm = new Meta_tbl_itm(name, sql);
|
||||
case Dbmeta_itm_tid.Tid_table:
|
||||
Dbmeta_tbl_itm tbl_itm = Dbmeta_tbl_itm.New(name);
|
||||
tbl_mgr.Add(tbl_itm);
|
||||
break;
|
||||
case Meta_itm_tid.Tid_index: break; // noop for now
|
||||
case Dbmeta_itm_tid.Tid_index: break; // noop for now
|
||||
default: throw Err_.new_unhandled(type_str);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public class Schema_update_mgr_tst {
|
||||
fxt.Test_exec_y(new Schema_update_cmd__mock());
|
||||
}
|
||||
@Test public void Delete() {
|
||||
fxt.Init_itm(Meta_itm_tid.Tid_table, Schema_update_cmd__mock.Tbl_name);
|
||||
fxt.Init_itm(Dbmeta_itm_tid.Tid_table, Schema_update_cmd__mock.Tbl_name);
|
||||
fxt.Test_exec_n(new Schema_update_cmd__mock());
|
||||
}
|
||||
}
|
||||
@@ -34,7 +34,7 @@ class Schema_update_mgr_fxt {
|
||||
db_mgr = new Schema_db_mgr();
|
||||
}
|
||||
public void Init_itm(int tid, String name) {
|
||||
db_mgr.Tbl_mgr().Add(new Meta_tbl_itm(name, "sql"));
|
||||
db_mgr.Tbl_mgr().Add(Dbmeta_tbl_itm.New(name));
|
||||
}
|
||||
public void Test_exec_y(Schema_update_cmd cmd) {Test_exec(cmd, Bool_.Y);}
|
||||
public void Test_exec_n(Schema_update_cmd cmd) {Test_exec(cmd, Bool_.N);}
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.core.primitives.*; import gplx.core.envs.*;
|
||||
import gplx.dbs.*; import gplx.core.ios.*;
|
||||
import gplx.dbs.engines.sqlite.*;
|
||||
public class Fsd_bin_tbl implements Rls_able {
|
||||
private final String tbl_name = "fsdb_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name = "fsdb_bin"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_owner_id, fld_owner_tid, fld_part_id, fld_data_url, fld_data;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_select; private Bry_bfr tmp_bfr;
|
||||
private final Bool_obj_ref saved_in_parts = Bool_obj_ref.n_();
|
||||
@@ -37,7 +37,7 @@ public class Fsd_bin_tbl implements Rls_able {
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public void Insert_bgn() {conn.Txn_bgn("fsdb_bin__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
|
||||
public void Insert_commit() {conn.Txn_sav();}
|
||||
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsd_dir_tbl implements Rls_able {
|
||||
private final String tbl_name = "fsdb_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name = "fsdb_dir"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_id, fld_owner_id, fld_name;
|
||||
private final Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name;
|
||||
public Fsd_dir_tbl(Db_conn conn, boolean schema_is_1) {
|
||||
@@ -35,8 +35,8 @@ public class Fsd_dir_tbl implements Rls_able {
|
||||
}
|
||||
public void Create_tbl() {
|
||||
conn.Ddl_create_tbl
|
||||
( Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name, fld_owner_id, fld_id)));
|
||||
( Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "name", fld_name, fld_owner_id, fld_id)));
|
||||
}
|
||||
public void Insert(int id, byte[] name, int owner_id) {
|
||||
if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
|
||||
import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
|
||||
public class Fsd_fil_tbl implements Rls_able {
|
||||
private final String tbl_name = "fsdb_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name = "fsdb_fil"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_id, fld_owner_id, fld_name, fld_xtn_id, fld_ext_id, fld_size, fld_modified, fld_hash, fld_bin_db_id;
|
||||
private final String idx_owner;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; private int mnt_id;
|
||||
@@ -33,7 +33,7 @@ public class Fsd_fil_tbl implements Rls_able {
|
||||
this.fld_size = flds.Add_long ("fil_size");
|
||||
this.fld_modified = flds.Add_str ("fil_modified", 14); // stored as yyyyMMddHHmmss
|
||||
this.fld_hash = flds.Add_str ("fil_hash", 40);
|
||||
this.idx_owner = Db_meta_idx.Bld_idx_name(tbl_name, "owner");
|
||||
this.idx_owner = Dbmeta_idx_itm.Bld_idx_name(tbl_name, "owner");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Rls() {
|
||||
@@ -42,8 +42,8 @@ public class Fsd_fil_tbl implements Rls_able {
|
||||
stmt_select_by_name = Db_stmt_.Rls(stmt_select_by_name);
|
||||
}
|
||||
public void Create_tbl() {
|
||||
conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_name(tbl_name, idx_owner, fld_owner_id, fld_name, fld_id)
|
||||
conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_name(tbl_name, idx_owner, fld_owner_id, fld_name, fld_id)
|
||||
));
|
||||
}
|
||||
public void Insert(int id, int owner_id, byte[] name, int xtn_id, int ext_id, long size, int bin_db_id) {
|
||||
@@ -89,7 +89,7 @@ public class Fsd_fil_tbl implements Rls_able {
|
||||
finally {rdr.Rls();}
|
||||
}
|
||||
public void Select_all(Bry_bfr key_bfr, gplx.core.caches.Gfo_cache_mgr_bry cache) {
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
Fsd_fil_itm fil = new_(mnt_id, rdr);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*;
|
||||
import gplx.dbs.*; import gplx.fsdb.meta.*; import gplx.xowa.files.*;
|
||||
public class Fsd_thm_tbl implements Rls_able {
|
||||
private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_id, fld_owner_id, fld_w, fld_h, fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash;
|
||||
private final Db_conn conn; private Db_stmt stmt_insert, stmt_select_by_fil_exact, stmt_select_by_fil_near; private int mnt_id; private boolean schema_thm_page;
|
||||
public Fsd_thm_tbl(Db_conn conn, boolean schema_is_1, int mnt_id, boolean schema_thm_page) {
|
||||
@@ -34,7 +34,7 @@ public class Fsd_thm_tbl implements Rls_able {
|
||||
}
|
||||
else {
|
||||
this.fld_time = flds.Add_int ("thm_thumbtime");
|
||||
this.fld_page = Db_meta_fld.Key_null;
|
||||
this.fld_page = Dbmeta_fld_itm.Key_null;
|
||||
}
|
||||
this.fld_bin_db_id = flds.Add_int ("thm_bin_db_id");
|
||||
this.fld_size = flds.Add_long ("thm_size");
|
||||
@@ -48,8 +48,8 @@ public class Fsd_thm_tbl implements Rls_able {
|
||||
stmt_select_by_fil_near = Db_stmt_.Rls(stmt_select_by_fil_near);
|
||||
}
|
||||
public void Create_tbl() {
|
||||
conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "owner", fld_owner_id, fld_id, fld_w, fld_time, fld_page)
|
||||
conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "owner", fld_owner_id, fld_id, fld_w, fld_time, fld_page)
|
||||
));
|
||||
}
|
||||
public void Insert(int id, int thm_owner_id, int width, int height, double thumbtime, int page, int bin_db_id, long size) {
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
|
||||
import gplx.dbs.*; import gplx.dbs.qrys.*;
|
||||
public class Fsm_atr_tbl {
|
||||
private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_uid, fld_url;
|
||||
private final Db_conn conn;
|
||||
public Fsm_atr_tbl(Db_conn conn, boolean schema_is_1) {
|
||||
@@ -29,9 +29,9 @@ public class Fsm_atr_tbl {
|
||||
this.fld_uid = flds.Add_int_pkey (fld_prefix + "uid");
|
||||
this.fld_url = flds.Add_str (fld_prefix + "url", 255);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public Fsm_atr_fil Select_1st_or_fail(Fsm_mnt_itm mnt_itm, Fsdb_db_mgr core_mgr, int mnt_id, boolean schema_thm_page) {
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
boolean schema_is_1 = core_mgr.File__schema_is_1();
|
||||
try {
|
||||
if (rdr.Move_next()) {
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
|
||||
import gplx.dbs.*; import gplx.dbs.qrys.*;
|
||||
public class Fsm_bin_tbl {
|
||||
private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_uid, fld_url, fld_bin_len, fld_bin_max;
|
||||
private final Db_conn conn; private int mnt_id;
|
||||
public Fsm_bin_tbl(Db_conn conn, boolean schema_is_1, int mnt_id) {
|
||||
@@ -33,17 +33,17 @@ public class Fsm_bin_tbl {
|
||||
fld_bin_max = flds.Add_long("bin_max");
|
||||
}
|
||||
else {
|
||||
fld_bin_len = Db_meta_fld.Key_null;
|
||||
fld_bin_max = Db_meta_fld.Key_null;
|
||||
fld_bin_len = Dbmeta_fld_itm.Key_null;
|
||||
fld_bin_max = Dbmeta_fld_itm.Key_null;
|
||||
}
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public void Insert(int id, String url_rel) {
|
||||
conn.Stmt_insert(tbl_name, flds).Crt_int(fld_uid, id).Val_str(fld_url, url_rel).Val_long(fld_bin_len, 0).Val_long(fld_bin_max, 0).Exec_insert();
|
||||
}
|
||||
public Fsm_bin_fil[] Select_all(Fsdb_db_mgr db_conn_mgr) {
|
||||
List_adp rv = List_adp_.new_();
|
||||
Db_rdr rdr = conn.Stmt_select_order(tbl_name, flds, Db_meta_fld.Ary_empty, fld_uid).Clear().Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select_order(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty, fld_uid).Clear().Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
int bin_id = rdr.Read_int(fld_uid);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*;
|
||||
import gplx.dbs.*;
|
||||
public class Fsm_mnt_tbl implements Rls_able {
|
||||
private final String tbl_name = "fsdb_mnt"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name = "fsdb_mnt"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_id, fld_name, fld_url;
|
||||
private final Db_conn conn;
|
||||
public Fsm_mnt_tbl(Db_conn conn, boolean schema_is_1) {
|
||||
@@ -29,7 +29,7 @@ public class Fsm_mnt_tbl implements Rls_able {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds);
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
this.Insert(Fsm_mnt_mgr.Mnt_idx_main, Mnt_name_main, Mnt_name_main);
|
||||
this.Insert(Fsm_mnt_mgr.Mnt_idx_user, Mnt_name_user, Mnt_name_user);
|
||||
@@ -45,7 +45,7 @@ public class Fsm_mnt_tbl implements Rls_able {
|
||||
}
|
||||
public Fsm_mnt_itm[] Select_all() {
|
||||
List_adp list = List_adp_.new_();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Clear().Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Clear().Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
Fsm_mnt_itm itm = new Fsm_mnt_itm(rdr.Read_int(fld_id), rdr.Read_str(fld_name), rdr.Read_str(fld_url));
|
||||
|
||||
@@ -85,6 +85,10 @@ public class Gfh_tag implements Mwh_atr_wkr {
|
||||
byte[] rv_val = rv.Val();
|
||||
return style_wkr.Parse(rv_val, 0, rv_val.length, key);
|
||||
}
|
||||
public boolean Atrs__has(byte[] key) {
|
||||
if (atrs_null) Atrs__make();
|
||||
return atrs_hash.Get_by(key) != null;
|
||||
}
|
||||
public byte[] Atrs__get_as_bry(byte[] key) {
|
||||
if (atrs_null) Atrs__make();
|
||||
Gfh_atr rv = (Gfh_atr)atrs_hash.Get_by(key);
|
||||
|
||||
@@ -34,14 +34,14 @@ public class Gfh_tag_rdr {
|
||||
public int Pos() {return pos;} private int pos;
|
||||
public void Pos_(int v) {this.pos = v;}
|
||||
public void Atrs__make(Mwh_atr_wkr atr_wkr, int head_bgn, int head_end) {atr_parser.Parse(atr_wkr, -1, -1, src, head_bgn, head_end);}
|
||||
public Gfh_tag Tag__move_fwd_head() {return Tag__find(Bool_.Y, Bool_.N, Bool_.N, pos, src_end, Gfh_tag_.Id__any);}
|
||||
public Gfh_tag Tag__move_fwd_head() {return Tag__find(Bool_.Y, Bool_.N, Bool_.N, pos, src_end, Gfh_tag_.Id__any);}
|
||||
public Gfh_tag Tag__move_fwd_head(int match_name_id) {return Tag__find(Bool_.Y, Bool_.N, Bool_.N, pos, src_end, match_name_id);}
|
||||
public Gfh_tag Tag__move_fwd_tail(int match_name_id) {return Tag__find(Bool_.Y, Bool_.N, Bool_.Y, pos, src_end, match_name_id);}
|
||||
public Gfh_tag Tag__peek_fwd_head() {return Tag__find(Bool_.N, Bool_.N, Bool_.N, pos, src_end, Gfh_tag_.Id__any);}
|
||||
public Gfh_tag Tag__peek_fwd_head() {return Tag__find(Bool_.N, Bool_.N, Bool_.N, pos, src_end, Gfh_tag_.Id__any);}
|
||||
public Gfh_tag Tag__peek_fwd_head(int match_name_id) {return Tag__find(Bool_.N, Bool_.N, Bool_.N, pos, src_end, match_name_id);}
|
||||
public Gfh_tag Tag__peek_fwd_tail(int match_name_id) {return Tag__find(Bool_.N, Bool_.N, Bool_.Y, pos, src_end, match_name_id);}
|
||||
public Gfh_tag Tag__peek_bwd_tail(int match_name_id) {return Tag__find(Bool_.N, Bool_.Y, Bool_.Y, pos, src_end, match_name_id);}
|
||||
public Gfh_tag Tag__peek_bwd_head() {return Tag__find(Bool_.N, Bool_.Y, Bool_.Y, pos, src_end, Gfh_tag_.Id__any);}
|
||||
public Gfh_tag Tag__peek_bwd_head() {return Tag__find(Bool_.N, Bool_.Y, Bool_.Y, pos, src_end, Gfh_tag_.Id__any);}
|
||||
public Gfh_tag Tag__find_fwd_head(int bgn, int end, int match_name_id) {return Tag__find(Bool_.N, Bool_.N, Bool_.N, bgn, end, match_name_id);}
|
||||
private Gfh_tag Tag__find(boolean move, boolean bwd, boolean tail, int rng_bgn, int rng_end, int match_name_id) {
|
||||
int tmp = rng_bgn;
|
||||
|
||||
@@ -58,8 +58,7 @@ public class Gfo_url_encoder_ {
|
||||
( Byte_ascii.Semic, Byte_ascii.Colon, Byte_ascii.At, Byte_ascii.Dollar, Byte_ascii.Bang, Byte_ascii.Star
|
||||
, Byte_ascii.Paren_bgn, Byte_ascii.Paren_end, Byte_ascii.Comma, Byte_ascii.Slash
|
||||
, Byte_ascii.Question, Byte_ascii.Eq, Byte_ascii.Hash, Byte_ascii.Plus// NOTE: not part of wfUrlEncode; not sure where this is specified; needed for A#b
|
||||
)
|
||||
;
|
||||
);
|
||||
}
|
||||
public static Gfo_url_encoder_mkr New__http_url() {
|
||||
return new Gfo_url_encoder_mkr().Init(Byte_ascii.Percent).Init_common(Bool_.N)
|
||||
|
||||
@@ -24,32 +24,45 @@ public class Gfh_style_parser_ {
|
||||
Parse(tag.Src(), atr.Val_bgn(), atr.Val_end(), wkr);
|
||||
}
|
||||
public static void Parse(byte[] src, int src_bgn, int src_end, Gfh_style_wkr wkr) {
|
||||
int atr_idx = 0, key_bgn = -1, key_end = -1, tmp_bgn = -1, tmp_end = -1;
|
||||
int atr_idx = 0, itm_bgn = -1, itm_end = -1, key_bgn = -1, key_end = -1, tmp_bgn = -1, tmp_end = -1;
|
||||
int pos = src_bgn;
|
||||
while (true) {
|
||||
boolean pos_is_last = pos == src_end;
|
||||
byte b = pos_is_last ? Byte_ascii.Semic : src[pos];
|
||||
switch (b) {
|
||||
case Byte_ascii.Semic:
|
||||
if (key_bgn != -1) { // ignore empty atrs
|
||||
if (!wkr.On_atr(src, atr_idx, src_bgn, src_end, key_bgn, key_end, tmp_bgn, tmp_end))
|
||||
if (tmp_bgn != -1) { // tmp_bgn == -1 if all ws
|
||||
if (key_bgn == -1) { // handle malformed key-only pairs; EX: "style='center'"
|
||||
key_bgn = tmp_bgn;
|
||||
key_end = tmp_end;
|
||||
tmp_bgn = tmp_end = -1;
|
||||
}
|
||||
if (!wkr.On_atr(src, atr_idx, src_bgn, src_end, itm_bgn, itm_end, key_bgn, key_end, tmp_bgn, tmp_end))
|
||||
pos_is_last = true;
|
||||
}
|
||||
++atr_idx; key_bgn = -1; key_end = -1; tmp_bgn = -1; tmp_end = -1;
|
||||
++atr_idx; itm_bgn = itm_end = key_bgn = key_end = tmp_bgn = tmp_end = -1;
|
||||
break;
|
||||
case Byte_ascii.Colon:
|
||||
key_bgn = tmp_bgn;
|
||||
key_end = tmp_end;
|
||||
tmp_bgn = -1; tmp_end = -1;
|
||||
if (key_bgn == -1) {
|
||||
key_bgn = tmp_bgn;
|
||||
key_end = tmp_end;
|
||||
tmp_bgn = -1; tmp_end = -1;
|
||||
}
|
||||
break;
|
||||
case Byte_ascii.Tab: case Byte_ascii.Nl: case Byte_ascii.Cr: case Byte_ascii.Space:
|
||||
case Byte_ascii.Tab: case Byte_ascii.Nl: case Byte_ascii.Cr: case Byte_ascii.Space:
|
||||
if (itm_bgn == -1) itm_bgn = pos;
|
||||
break;
|
||||
default:
|
||||
if (itm_bgn == -1) itm_bgn = pos;
|
||||
if (tmp_bgn == -1) tmp_bgn = pos;
|
||||
tmp_end = pos + 1;
|
||||
break;
|
||||
}
|
||||
if (pos_is_last) break;
|
||||
if (pos_is_last) {
|
||||
if (key_bgn != -1) // handle "k"
|
||||
wkr.On_atr(src, atr_idx, src_bgn, src_end, itm_bgn, itm_end, key_bgn, key_end, tmp_bgn, tmp_end);
|
||||
break;
|
||||
}
|
||||
++pos;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,12 @@ public class Gfh_style_parser__tst {
|
||||
fxt.Test__parse("k_0:v_0;;" , fxt.Make("k_0", "v_0"));
|
||||
fxt.Test__parse("k_0:v_0; ; " , fxt.Make("k_0", "v_0"));
|
||||
}
|
||||
@Test public void Invalid__no_semic() {
|
||||
fxt.Test__parse("k_0" , fxt.Make("k_0", ""));
|
||||
}
|
||||
@Test public void Invalid__dupe_colon() {
|
||||
fxt.Test__parse("a:b:c:d;" , fxt.Make("a", "b:c:d"));
|
||||
}
|
||||
}
|
||||
class Gfh_style_parser__fxt {
|
||||
private final Gfh_style_wkr__ary wkr = Gfh_style_wkr__ary.Instance;
|
||||
|
||||
@@ -17,5 +17,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*;
|
||||
public interface Gfh_style_wkr {
|
||||
boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end);
|
||||
boolean On_atr(byte[] src, int atr_idx, int atr_val_bgn, int atr_val_end, int itm_bgn, int itm_End, int key_bgn, int key_end, int val_bgn, int val_end);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*;
|
||||
public class Gfh_style_wkr__ary implements Gfh_style_wkr {
|
||||
private final List_adp list = List_adp_.new_();
|
||||
public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) {
|
||||
public boolean On_atr(byte[] src, int atr_idx, int atr_val_bgn, int atr_val_end, int itm_bgn, int itm_End, int key_bgn, int key_end, int val_bgn, int val_end) {
|
||||
byte[] key = Bry_.Mid(src, key_bgn, key_end);
|
||||
byte[] val = Bry_.Mid(src, val_bgn, val_end);
|
||||
list.Add(new Gfh_style_itm(list.Count(), key, val));
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx
|
||||
public class Gfh_style_wkr__val_as_int implements Gfh_style_wkr {
|
||||
private byte[] find_key;
|
||||
private int val_bgn, val_end;
|
||||
public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) {
|
||||
public boolean On_atr(byte[] src, int atr_idx, int atr_val_bgn, int atr_val_end, int itm_bgn, int itm_End, int key_bgn, int key_end, int val_bgn, int val_end) {
|
||||
boolean rv = Bry_.Match(src, key_bgn, key_end, find_key);
|
||||
if (rv) {
|
||||
this.val_bgn = val_bgn;
|
||||
|
||||
71
400_xowa/src/gplx/langs/mustaches/Mustache_dom_itm.java
Normal file
71
400_xowa/src/gplx/langs/mustaches/Mustache_dom_itm.java
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
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.langs.mustaches; import gplx.*; import gplx.langs.*;
|
||||
/*
|
||||
root
|
||||
txt
|
||||
key
|
||||
txt
|
||||
section
|
||||
txt
|
||||
key
|
||||
txt
|
||||
txt
|
||||
*/
|
||||
interface Mustache_elem_itm {
|
||||
int Tid();
|
||||
byte[] Key();
|
||||
Mustache_elem_itm[] Subs();
|
||||
}
|
||||
class Mustache_elem_itm_ {// for types, see http://mustache.github.io/mustache.5.html
|
||||
public static final int Tid__root = 0, Tid__text = 1, Tid__variable = 2, Tid__escape = 3, Tid__section = 4, Tid__inverted = 5, Tid__comment = 6, Tid__partial = 7, Tid__delimiter = 8;
|
||||
public static final Mustache_elem_itm[] Ary_empty = new Mustache_elem_itm[0];
|
||||
}
|
||||
abstract class Mustache_elem_base implements Mustache_elem_itm {
|
||||
public Mustache_elem_base(int tid, byte[] key) {this.tid = tid; this.key = key;}
|
||||
public int Tid() {return tid;} private final int tid;
|
||||
public byte[] Key() {return key;} private final byte[] key;
|
||||
@gplx.Virtual public Mustache_elem_itm[] Subs() {return Mustache_elem_itm_.Ary_empty;}
|
||||
}
|
||||
class Mustache_elem_text extends Mustache_elem_base { // EX: text -> text
|
||||
public Mustache_elem_text(byte[] val) {super(Mustache_elem_itm_.Tid__text, Bry_.Empty);
|
||||
this.val = val;
|
||||
}
|
||||
public byte[] Val() {return val;} private final byte[] val;
|
||||
}
|
||||
class Mustache_elem_val extends Mustache_elem_base { // EX: {{variable}} -> <a>
|
||||
public Mustache_elem_val(byte[] key) {super(Mustache_elem_itm_.Tid__variable, key);}
|
||||
}
|
||||
class Mustache_elem_escape extends Mustache_elem_base { // EX: {{{variable}}} -> <a>
|
||||
public Mustache_elem_escape(byte[] key) {super(Mustache_elem_itm_.Tid__escape, key);}
|
||||
}
|
||||
class Mustache_elem_section extends Mustache_elem_base { // EX: {{#section}}val{{/section}} -> val (if boolean) or valvalval (if list)
|
||||
public Mustache_elem_section(byte[] key) {super(Mustache_elem_itm_.Tid__section, key);}
|
||||
}
|
||||
class Mustache_elem_inverted extends Mustache_elem_base { // EX: {{^section}}missing{{/section}} -> missing
|
||||
public Mustache_elem_inverted(byte[] key) {super(Mustache_elem_itm_.Tid__inverted, key);}
|
||||
}
|
||||
class Mustache_elem_comment extends Mustache_elem_base { // EX: {{!section}}commentent{{/section}} ->
|
||||
public Mustache_elem_comment(byte[] key) {super(Mustache_elem_itm_.Tid__inverted, key);}
|
||||
}
|
||||
class Mustache_elem_partial extends Mustache_elem_base { // EX: {{>a}} -> abc (deferred eval)
|
||||
public Mustache_elem_partial(byte[] key) {super(Mustache_elem_itm_.Tid__partial, key);}
|
||||
}
|
||||
class Mustache_elem_delimiter extends Mustache_elem_base {// EX: {{=<% %>=}} -> <% variable %>
|
||||
public Mustache_elem_delimiter(byte[] key) {super(Mustache_elem_itm_.Tid__delimiter, key);}
|
||||
}
|
||||
@@ -53,6 +53,6 @@ public interface Xoa_app extends GfoInvkAble {
|
||||
Bry_bfr_mkr Utl__bfr_mkr();
|
||||
Json_parser Utl__json_parser();
|
||||
Gfo_inet_conn Utl__inet_conn();
|
||||
Xoa_meta_mgr Meta_mgr();
|
||||
Xoa_meta_mgr Dbmeta_mgr();
|
||||
Xoa_site_cfg_mgr Site_cfg_mgr();
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class Xoa_app_ {
|
||||
}
|
||||
}
|
||||
public static final String Name = "xowa";
|
||||
public static final String Version = "3.1.1.1";
|
||||
public static final String Version = "3.1.3.1";
|
||||
public static String Build_date = "2012-12-30 00:00:00";
|
||||
public static String Op_sys_str;
|
||||
public static String User_agent = "";
|
||||
|
||||
@@ -71,7 +71,7 @@ public class Xoa_app_fxt {
|
||||
public static Xowe_wiki wiki_(Xoae_app app, String key, Xol_lang_itm lang) {
|
||||
Io_url wiki_dir = app.Fsys_mgr().Wiki_dir().GenSubDir(key);
|
||||
Xowe_wiki rv = new Xowe_wiki(app, lang, Xow_ns_mgr_.default_(lang.Case_mgr()), Xow_domain_itm_.parse(Bry_.new_u8(key)), wiki_dir);
|
||||
rv.File_mgr().Meta_mgr().Depth_(2); // TEST: written for 2 depth
|
||||
rv.File_mgr().Dbmeta_mgr().Depth_(2); // TEST: written for 2 depth
|
||||
rv.Props().Main_page_(Xoa_page_.Main_page_bry); // TEST: default to Main Page (nothing tests loading Main Page from wiki.gfs)
|
||||
rv.Ns_mgr().Ids_get_or_null(Xow_ns_.Tid__main).Subpages_enabled_(true);
|
||||
app.Wiki_mgr().Add(rv);
|
||||
|
||||
@@ -36,6 +36,11 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF.
|
||||
return Bry_.Mid(full_txt, bgn, end);
|
||||
}
|
||||
public byte[] Full_txt_raw() {return full_txt;} private byte[] full_txt = Bry_.Empty;
|
||||
public byte[] Full_db_wo_xwiki() {
|
||||
byte[] rv = Bry_.Mid(full_txt, wik_bgn == -1 ? 0 : ns_bgn == -1 ? page_bgn - 1 : ns_bgn - 1, full_txt.length);
|
||||
Bry_.Replace_reuse(rv, Byte_ascii.Space, Byte_ascii.Underline);
|
||||
return rv;
|
||||
}
|
||||
public byte[] Page_txt_w_anchor() {return Bry_.Mid(full_txt, page_bgn, qarg_bgn == -1 ? full_txt.length : qarg_bgn - 1);}
|
||||
public byte[] Page_txt() {return Bry_.Mid(full_txt, page_bgn, anch_bgn == -1 ? full_txt.length : anch_bgn - 1);}
|
||||
public byte[] Page_db() {
|
||||
@@ -372,7 +377,8 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF.
|
||||
return true;
|
||||
}
|
||||
public static byte[] Replace_spaces(byte[] raw) {return Bry_.Replace(raw, Byte_ascii.Space, Byte_ascii.Underline);}
|
||||
public static byte[] Replace_unders(byte[] raw) {return Bry_.Replace(raw, Byte_ascii.Underline, Byte_ascii.Space);}
|
||||
public static byte[] Replace_unders(byte[] raw) {return Replace_unders(raw, 0, raw.length);}
|
||||
public static byte[] Replace_unders(byte[] raw, int bgn, int end) {return Bry_.Replace(raw, bgn, end, Byte_ascii.Underline, Byte_ascii.Space);}
|
||||
private int wik_bgn = -1, ns_bgn = -1, page_bgn = 0, leaf_bgn = -1, anch_bgn = -1, root_bgn = -1;
|
||||
private byte[] tors_txt;
|
||||
public static final int Wik_bgn_int = -1;
|
||||
@@ -392,7 +398,7 @@ class Xoa_ttl_trie {
|
||||
rv.Add(Byte_ascii.Underline , Byte_obj_val.new_(Id_underline));
|
||||
rv.Add(Byte_ascii.Amp , Byte_obj_val.new_(Id_amp));
|
||||
rv.Add(Xop_comm_lxr.Bgn_ary , Byte_obj_val.new_(Id_comment_bgn));
|
||||
rv.Add(Byte_ascii.Nl , Byte_obj_val.new_(Id_newLine));
|
||||
rv.Add(Byte_ascii.Nl , Byte_obj_val.new_(Id_newLine));
|
||||
rv.Add(Byte_ascii.Brack_bgn , Byte_obj_val.new_(Id_invalid));
|
||||
rv.Add(Byte_ascii.Curly_bgn , Byte_obj_val.new_(Id_invalid));
|
||||
return rv;
|
||||
|
||||
@@ -81,7 +81,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
public Bry_bfr_mkr Utl__bfr_mkr() {return Xoa_app_.Utl__bfr_mkr();}
|
||||
public Json_parser Utl__json_parser() {return utl__json_parser;} private final Json_parser utl__json_parser = new Json_parser();
|
||||
public Gfo_inet_conn Utl__inet_conn() {return inet_conn;} private final Gfo_inet_conn inet_conn = Gfo_inet_conn_.new_();
|
||||
public Xoa_meta_mgr Meta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public Xoa_meta_mgr Dbmeta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public boolean Bldr__running() {return bldr__running;} public void Bldr__running_(boolean v) {this.bldr__running = v;} private boolean bldr__running;
|
||||
public Xoa_parser_mgr Parser_mgr() {return parser_mgr;} private final Xoa_parser_mgr parser_mgr = new Xoa_parser_mgr();
|
||||
public Xoa_site_cfg_mgr Site_cfg_mgr() {return site_cfg_mgr;} private final Xoa_site_cfg_mgr site_cfg_mgr;
|
||||
|
||||
@@ -148,7 +148,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble, GfoEvObj {
|
||||
public Xoi_dump_mgr Import_mgr() {return import_mgr;} private Xoi_dump_mgr import_mgr = new Xoi_dump_mgr();
|
||||
public Xow_maint_mgr Maint_mgr() {return maint_mgr;} private Xow_maint_mgr maint_mgr;
|
||||
public void Clear_for_tests() { // NOTE: these are structures that cache items for PERF; need to be cleared out for multiple test runs
|
||||
file_mgr.Meta_mgr().Clear();
|
||||
file_mgr.Dbmeta_mgr().Clear();
|
||||
db_mgr.Load_mgr().Clear();
|
||||
}
|
||||
public Xodb_mgr_sql Db_mgr_create_as_sql() {Xodb_mgr_sql rv = new Xodb_mgr_sql(this); db_mgr = rv; return rv;}
|
||||
|
||||
@@ -62,10 +62,10 @@ public class Xoav_app implements Xoa_app, GfoInvkAble {
|
||||
public Xoh_lnki_bldr Html__lnki_bldr() {return html__lnki_bldr;} private final Xoh_lnki_bldr html__lnki_bldr;
|
||||
public Xoa_css_extractor Html__css_installer() {return html__css_installer;} private final Xoa_css_extractor html__css_installer = new Xoa_css_extractor();
|
||||
public Xoh_bridge_mgr Html__bridge_mgr() {return html__bridge_mgr;} private final Xoh_bridge_mgr html__bridge_mgr;
|
||||
public Xoa_meta_mgr Meta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public Xoa_meta_mgr Dbmeta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public Gfo_inet_conn Utl__inet_conn() {return inet_conn;} private final Gfo_inet_conn inet_conn = Gfo_inet_conn_.new_();
|
||||
public Xoa_site_cfg_mgr Site_cfg_mgr() {return site_cfg_mgr;} private final Xoa_site_cfg_mgr site_cfg_mgr;
|
||||
public boolean Xwiki_mgr__missing(byte[] domain) {return wiki_mgr.Get_by_domain(domain) == null;}
|
||||
public boolean Xwiki_mgr__missing(byte[] domain) {return wiki_mgr.Get_by_or_null(domain) == null;}
|
||||
public Xoa_sitelink_mgr Xwiki_mgr__sitelink_mgr() {return xwiki_mgr__sitelink_mgr;} private final Xoa_sitelink_mgr xwiki_mgr__sitelink_mgr = new Xoa_sitelink_mgr();
|
||||
public Xow_xwiki_itm_parser Xwiki_mgr__itm_parser() {return xwiki_mgr__itm_parser;} private final Xow_xwiki_itm_parser xwiki_mgr__itm_parser = new Xow_xwiki_itm_parser();
|
||||
|
||||
|
||||
@@ -21,16 +21,24 @@ import gplx.xowa.wikis.*;
|
||||
public class Xoav_wiki_mgr implements Xoa_wiki_mgr, GfoInvkAble {
|
||||
private final Xoav_app app; private final Ordered_hash hash = Ordered_hash_.New_bry();
|
||||
public Xoav_wiki_mgr(Xoav_app app, Xol_case_mgr case_mgr) {this.app = app;}
|
||||
public int Count() {return hash.Count();}
|
||||
public Xow_wiki Get_at_i(int i) {return (Xow_wiki)hash.Get_at(i);}
|
||||
public Xowv_wiki Get_by_domain(byte[] domain) {return (Xowv_wiki)hash.Get_by(domain);}
|
||||
public Xowv_wiki Import_by_fil(Io_url fil) {
|
||||
public int Count() {return hash.Count();}
|
||||
public boolean Has(byte[] key) {return hash.Has(key);}
|
||||
public Xow_wiki Get_at(int idx) {return (Xow_wiki)hash.Get_at(idx);}
|
||||
public Xow_wiki Get_by_or_null(byte[] key) {return (Xow_wiki)hash.Get_by(key);}
|
||||
public Xow_wiki Get_by_or_make_init_y(byte[] key) {
|
||||
Xow_wiki rv = this.Get_by_or_null(key);
|
||||
// if (rv == null) rv = New_wiki(key); // TODO: must init wiki, but need wiki_url; DATE:2015-05-23
|
||||
return rv;
|
||||
}
|
||||
public Xow_wiki Get_by_or_make_init_n(byte[] key) {return Get_by_or_make_init_y(key);}
|
||||
public void Add(Xow_wiki wiki) {hash.Add_if_dupe_use_nth(wiki.Domain_bry(), wiki);}
|
||||
public Xow_wiki Load_by_fil(Io_url fil) {
|
||||
Io_url wiki_dir = fil.OwnerDir();
|
||||
Xowv_wiki rv = Load(Gen_domain_str(fil.NameOnly()), wiki_dir);
|
||||
Xow_wiki rv = Load(Gen_domain_str(fil.NameOnly()), wiki_dir);
|
||||
app.User().User_db_mgr().Site_mgr().Import(rv.Domain_str(), rv.Domain_str(), wiki_dir.Raw(), "");
|
||||
return rv;
|
||||
}
|
||||
public void Load_by_user_data() {
|
||||
public void Load_by_user_data() {
|
||||
Xoud_site_row[] ary = app.User().User_db_mgr().Site_mgr().Get_all();
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
@@ -38,34 +46,14 @@ public class Xoav_wiki_mgr implements Xoa_wiki_mgr, GfoInvkAble {
|
||||
Load(itm.Domain(), Io_url_.new_dir_(itm.Path()));
|
||||
}
|
||||
}
|
||||
public Xowv_wiki Load_by_fil(Io_url fil) {
|
||||
return Load(Gen_domain_str(fil.NameOnly()), fil.OwnerDir());
|
||||
}
|
||||
public boolean Has(byte[] key) {return hash.Has(key);}
|
||||
public Xow_wiki Get_by_key_or_null_i(byte[] key) {return (Xowv_wiki)hash.Get_by(key);}
|
||||
public Xow_wiki Get_by_key_or_make_init_y(byte[] key) {
|
||||
Xow_wiki rv = this.Get_by_domain(key);
|
||||
// if (rv == null) rv = New_wiki(key); // TODO: must init wiki, but need wiki_url; DATE:2015-05-23
|
||||
return rv;
|
||||
}
|
||||
public Xow_wiki Get_by_key_or_make_init_n(byte[] key) {return Get_by_key_or_make_init_y(key);}
|
||||
public void Load_by_dir(Io_url wiki_root_dir) {
|
||||
Io_url[] wiki_dirs = Io_mgr.Instance.QueryDir_args(wiki_root_dir).DirOnly_().ExecAsUrlAry();
|
||||
for (Io_url wiki_dir : wiki_dirs) {
|
||||
String wiki_dir_url = wiki_dir.Raw();
|
||||
if (String_.Has_at_bgn(wiki_dir_url, "#")) continue;
|
||||
Load(wiki_dir.NameOnly(), wiki_dir);
|
||||
}
|
||||
}
|
||||
private Xowv_wiki Load(String domain_str, Io_url wiki_dir) {
|
||||
private Xow_wiki Load(String domain_str, Io_url wiki_dir) {
|
||||
byte[] domain_bry = Bry_.new_u8(domain_str);
|
||||
Xowv_wiki rv = new Xowv_wiki(app, domain_bry, wiki_dir);
|
||||
Xow_wiki rv = new Xowv_wiki(app, domain_bry, wiki_dir);
|
||||
hash.Add_if_dupe_use_nth(domain_bry, rv);
|
||||
return rv;
|
||||
}
|
||||
public void Add(Xow_wiki wiki) {hash.Add_if_dupe_use_nth(wiki.Domain_bry(), wiki);}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_import_by_fil)) return Import_by_fil(Io_url_.new_fil_(m.ReadStr("v")));
|
||||
if (ctx.Match(k, Invk_import_by_fil)) return Load_by_fil(Io_url_.new_fil_(m.ReadStr("v")));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
}
|
||||
public static final String Invk_import_by_fil = "import_by_fil";
|
||||
|
||||
@@ -63,7 +63,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
int wiki_count = app.Wiki_mgri().Count();
|
||||
boolean rv = true;
|
||||
for (int i = 0; i < wiki_count; i++) {
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_at_i(i);
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_at(i);
|
||||
if (all || wiki.Domain_tid() == grp_tid.Wiki_tid()) {
|
||||
if (!Eval_set(wiki, grp.Key_str(), itm.Val()))
|
||||
rv = false;
|
||||
@@ -71,7 +71,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
}
|
||||
return rv;
|
||||
case Xoa_cfg_grp_tid.Tid_wiki: {
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_by_key_or_null_i(itm.Key());
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_by_or_null(itm.Key());
|
||||
if (wiki == null) return true; // wiki not installed; return true (no error)
|
||||
return Eval_set(wiki, grp.Key_str(), itm.Val());
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ class Xoa_cfg_mgr_fxt {
|
||||
itm.Val_(val);
|
||||
}
|
||||
public Xowe_wiki Exec_make_wiki(String wiki_key_str) {return Exec_make_wiki(Bry_.new_a7(wiki_key_str));}
|
||||
public Xowe_wiki Exec_make_wiki(byte[] wiki_key_bry) {return app.Wiki_mgr().Get_by_key_or_make(wiki_key_bry);}
|
||||
public Xowe_wiki Exec_make_wiki(byte[] wiki_key_bry) {return app.Wiki_mgr().Get_by_or_make(wiki_key_bry);}
|
||||
public void Test_init_wiki(String wiki_key_str, String itm_key_str, String expd_val) {
|
||||
byte[] wiki_key_bry = Bry_.new_a7(wiki_key_str);
|
||||
Xowe_wiki wiki = Exec_make_wiki(wiki_key_bry);
|
||||
|
||||
@@ -92,7 +92,7 @@ public class Http_server_mgr implements GfoInvkAble {
|
||||
public String Parse_page_to_html(Http_data__client data__client, byte[] wiki_domain, byte[] page_ttl) {
|
||||
synchronized (thread_lock) {
|
||||
Init_gui();
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_key_or_make_init_y(wiki_domain); // get the wiki; assert init for Main_Page; EX:click zh.w on wiki sidebar; DATE:2015-07-19
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_make_init_y(wiki_domain); // get the wiki; assert init for Main_Page; EX:click zh.w on wiki sidebar; DATE:2015-07-19
|
||||
if (Env_.System_memory_total() > Io_mgr.Len_gb) Xow_wiki_.Rls_mem(wiki, true); // release memory at 1 GB; DATE:2015-09-11
|
||||
if (Bry_.Len_eq_0(page_ttl)) page_ttl = wiki.Props().Main_page();
|
||||
Xoa_url page_url = wiki.Utl__url_parser().Parse(page_ttl); // get the url (needed for query args)
|
||||
|
||||
@@ -29,7 +29,7 @@ class Http_server_wkr_ {
|
||||
byte[] wiki_domain = Bry_.new_u8(req_array[1]);
|
||||
Xow_domain_itm domain_itm = Xow_domain_itm_.parse(wiki_domain);
|
||||
if (domain_itm.Domain_type_id() == Xow_domain_tid_.Int__other && domain_itm.Lang_actl_itm().Id() == Xol_lang_stub_.Id__intl) return req;
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(wiki_domain);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(wiki_domain);
|
||||
wiki.Init_assert();
|
||||
String main_page = String_.new_u8(wiki.Props().Main_page());
|
||||
if (mode == 1) main_page = "/" + main_page;
|
||||
|
||||
@@ -33,7 +33,7 @@ class Http_server_wkr__fxt {
|
||||
this.app = Xoa_app_fxt.app_();
|
||||
}
|
||||
public void Init_wiki_main_page(String domain, String main_page) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(domain));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(domain));
|
||||
wiki.Props().Main_page_(Bry_.new_u8(main_page));
|
||||
}
|
||||
public void Test_assert_main_page(String url, String expd) {
|
||||
|
||||
@@ -50,7 +50,7 @@ public class Xoa_url_parser {
|
||||
Xow_xwiki_itm xwiki_itm = app.User().Wikii().Xwiki_mgr().Get_by_key(wiki_bry);
|
||||
if (xwiki_itm == null) {Xoa_url_.Invalid_warn(str); return null;} // if wiki doesn't exist, warn and return nothing; DATE:2015-08-25
|
||||
if (rv.Page_is_main()) { // Main_Page requested; EX: "zh.wikipedia.org"; "zh.wikipedia.org/wiki/"; DATE:2014-02-16
|
||||
Xow_wiki wiki_itm = app.Wiki_mgri().Get_by_key_or_make_init_y(wiki_bry); // NOTE: must call Init to load Main_Page; only call if from url_bar, else all sister wikis will be loaded when parsing Sister_wikis panel
|
||||
Xow_wiki wiki_itm = app.Wiki_mgri().Get_by_or_make_init_y(wiki_bry); // NOTE: must call Init to load Main_Page; only call if from url_bar, else all sister wikis will be loaded when parsing Sister_wikis panel
|
||||
rv.Page_bry_(wiki_itm.Props().Main_page());
|
||||
}
|
||||
return rv;
|
||||
@@ -241,10 +241,10 @@ public class Xoa_url_parser {
|
||||
if (colon_pos == Bry_find_.Not_found) return null; // no colon
|
||||
Xow_wiki alias_wiki = wiki; // default alias_wiki to cur_wiki
|
||||
if (!tmp_wiki_is_missing) // tmp_wiki exists; use it for alias wikis; DATE:2015-09-17
|
||||
alias_wiki = wiki.App().Wiki_mgri().Get_by_key_or_make_init_n(tmp_wiki);
|
||||
alias_wiki = wiki.App().Wiki_mgri().Get_by_or_make_init_n(tmp_wiki);
|
||||
Xow_xwiki_itm alias_itm = alias_wiki.Xwiki_mgr().Get_by_mid(bry, 0, colon_pos); // check for alias;
|
||||
if (alias_itm == null) return null; // colon-word is not alias; EX:A:B
|
||||
Xow_ns_mgr ns_mgr = tmp_wiki_is_missing ? wiki.Ns_mgr() : wiki.App().Meta_mgr().Ns__get_or_load(tmp_wiki);
|
||||
Xow_ns_mgr ns_mgr = tmp_wiki_is_missing ? wiki.Ns_mgr() : wiki.App().Dbmeta_mgr().Ns__get_or_load(tmp_wiki);
|
||||
if (ns_mgr.Names_get_or_null(alias_itm.Key_bry()) != null) // special case to handle collision between "wikipedia" alias and "Wikipedia" namespace; if alias exists as ns, ignore it; EX:sv.wikipedia.org/wiki/Wikipedia:Main_Page DATE:2015-07-31
|
||||
return null;
|
||||
byte[] rv = Bry_.Mid(bry, colon_pos + 1);
|
||||
|
||||
@@ -44,7 +44,7 @@ public class Xoa_url_parser_fxt {
|
||||
return this;
|
||||
}
|
||||
public Xow_ns_mgr Prep_get_ns_mgr_from_meta(String wiki) {
|
||||
return app.Meta_mgr().Ns__get_or_load(Bry_.new_u8(wiki));
|
||||
return app.Dbmeta_mgr().Ns__get_or_load(Bry_.new_u8(wiki));
|
||||
}
|
||||
public Xoa_url_parser_fxt Run_parse(String actl_str) {return Run_parse(cur_wiki, actl_str);}
|
||||
public Xoa_url_parser_fxt Run_parse(Xow_wiki wiki, String actl_str) {
|
||||
|
||||
@@ -15,11 +15,13 @@ 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.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*;
|
||||
public interface Gfdb_diff_wkr {
|
||||
void Init_tbls(Gfdb_diff_tbl lhs, Gfdb_diff_tbl rhs);
|
||||
void Term_tbls();
|
||||
void Handle_same();
|
||||
void Handle_lhs_missing();
|
||||
void Handle_rhs_missing();
|
||||
package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*;
|
||||
public abstract class Xob_cmd_base implements Xob_cmd {
|
||||
public abstract String Cmd_key();
|
||||
@gplx.Virtual public void Cmd_init(Xob_bldr bldr) {}
|
||||
@gplx.Virtual public void Cmd_bgn(Xob_bldr bldr) {}
|
||||
@gplx.Virtual public void Cmd_run() {}
|
||||
@gplx.Virtual public void Cmd_end() {}
|
||||
@gplx.Virtual public void Cmd_term() {}
|
||||
@gplx.Virtual public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return GfoInvkAble_.Rv_unhandled;}
|
||||
}
|
||||
@@ -56,6 +56,7 @@ public class Xob_cmd_keys {
|
||||
, Key_site_meta = "util.site_meta"
|
||||
, Key_diff_build = "diff.build"
|
||||
, Key_diff_merge = "diff.merge"
|
||||
, Key_text_delete_page = "text.delete_page"
|
||||
|
||||
, Key_tdb_text_init = "tdb.text.init" // "core.init"
|
||||
, Key_tdb_make_page = "tdb.text.page" // "core.make_page"
|
||||
|
||||
@@ -37,6 +37,7 @@ public class Xob_cmd_mgr implements GfoInvkAble {
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_link)) return Add(new Xob_categorylinks_sql(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_hidden)) return Add(new Xoctg_hiddencat_parser_sql(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_term)) return Add(new Xob_term_cmd(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_delete_page)) return Add(new Xob_page_delete_cmd(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_page_dump_make)) return Add(new Xob_page_dump_cmd_make(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_page_dump_drop)) return Add(new Xob_page_dump_cmd_drop(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_redirect)) return Add(new Xob_redirect_cmd(bldr, wiki));
|
||||
@@ -142,7 +143,7 @@ public class Xob_cmd_mgr implements GfoInvkAble {
|
||||
private Xowe_wiki Wiki_get_or_make(GfoMsg m) {
|
||||
byte[] wiki_key = m.ReadBry("v");
|
||||
Xoae_wiki_mgr wiki_mgr = bldr.App().Wiki_mgr();
|
||||
Xowe_wiki rv = wiki_mgr.Get_by_key_or_make(wiki_key);
|
||||
Xowe_wiki rv = wiki_mgr.Get_by_or_make(wiki_key);
|
||||
rv.Lang().Init_by_load();
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
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.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.core.brys.*; import gplx.xowa.wikis.*;
|
||||
class Bfr_arg__dump_dir implements Bfr_arg { // .dump_dir = "C:\xowa\wiki\en.wikipedia.org"
|
||||
private final Xow_wiki wiki;
|
||||
public Bfr_arg__dump_dir(Xow_wiki wiki) {this.wiki = wiki;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
bfr.Add(wiki.Fsys_mgr().Root_dir().RawBry());
|
||||
}
|
||||
}
|
||||
class Bfr_arg__dump_core implements Bfr_arg {// .dump_core = "en.wikipedia.org-core.xowa"
|
||||
private final Xow_wiki wiki;
|
||||
public Bfr_arg__dump_core(Xow_wiki wiki) {this.wiki = wiki;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
bfr.Add(wiki.Data__core_mgr().Db__core().Url().RawBry());
|
||||
}
|
||||
}
|
||||
class Bfr_arg__dump_domain implements Bfr_arg {// .dump_domain = en.wikipedia.org
|
||||
private final Xow_wiki wiki;
|
||||
public Bfr_arg__dump_domain(Xow_wiki wiki) {this.wiki = wiki;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
bfr.Add(wiki.Domain_bry());
|
||||
}
|
||||
}
|
||||
@@ -17,39 +17,54 @@ 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.diffs.*; import gplx.dbs.diffs.builds.*;
|
||||
import gplx.dbs.*; import gplx.dbs.metas.*; import gplx.dbs.diffs.*; import gplx.dbs.diffs.builds.*;
|
||||
class Xob_diff_build_wkr {
|
||||
private final Gfdb_diff_bldr diff_bldr = new Gfdb_diff_bldr();
|
||||
private Db_conn prev_conn, curr_conn, diff_conn;
|
||||
public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String prev_url, String curr_url, String diff_url, int commit_interval) {
|
||||
private final Gfdb_diff_bldr dif_bldr = new Gfdb_diff_bldr();
|
||||
private Db_conn prv_conn, cur_conn, dif_conn;
|
||||
public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String prv_url, String cur_url, String dif_url, int commit_interval) {
|
||||
Bry_fmt url_fmt = Bry_fmt.New("").Args_(New_url_args(wiki));
|
||||
Bry_bfr tmp_bfr = Bry_bfr.new_();
|
||||
prev_conn = New_conn(wiki, url_fmt, prev_url, tmp_bfr);
|
||||
curr_conn = New_conn(wiki, url_fmt, curr_url, tmp_bfr);
|
||||
diff_conn = New_conn(wiki, url_fmt, diff_url, tmp_bfr);
|
||||
// get Gfdb_diff_tbl; format urls
|
||||
Tfds.Write(prev_conn, curr_conn, diff_conn);
|
||||
prv_conn = New_conn(Bool_.N, wiki, url_fmt, prv_url, tmp_bfr);
|
||||
cur_conn = New_conn(Bool_.N, wiki, url_fmt, cur_url, tmp_bfr);
|
||||
dif_conn = New_conn(Bool_.Y, wiki, url_fmt, dif_url, tmp_bfr);
|
||||
Tfds.Dbg(prv_conn, cur_conn, dif_conn);
|
||||
}
|
||||
public void Exec() {
|
||||
diff_bldr.Init(null); // diff_db_wkr
|
||||
diff_bldr.Compare(null, null); // lhs_tbl, rhs_tbl
|
||||
Gfdb_diff_db dif_db = new Gfdb_diff_db(dif_conn);
|
||||
Gfdb_diff_wkr__db dif_wkr = new Gfdb_diff_wkr__db();
|
||||
dif_wkr.Init_conn(dif_db, 1000);
|
||||
dif_bldr.Init(dif_wkr);
|
||||
Dbmeta_tbl_mgr prv_tbl_mgr = prv_conn.Meta_tbl_load_all();
|
||||
Dbmeta_tbl_mgr cur_tbl_mgr = prv_conn.Meta_tbl_load_all();
|
||||
int cur_tbl_len = cur_tbl_mgr.Len();
|
||||
for (int i = 0; i < cur_tbl_len; ++i) {
|
||||
Dbmeta_tbl_itm cur_tbl = cur_tbl_mgr.Get_at(i);
|
||||
Dbmeta_tbl_itm prv_tbl = prv_tbl_mgr.Get_by(cur_tbl.Name()); if (prv_tbl == null) continue;
|
||||
Gfdb_diff_tbl dif_tbl = Gfdb_diff_tbl.New(cur_tbl);
|
||||
dif_bldr.Compare(dif_tbl, prv_conn, cur_conn);
|
||||
}
|
||||
int prv_tbl_len = prv_tbl_mgr.Len();
|
||||
for (int i = 0; i < prv_tbl_len; ++i) {
|
||||
Dbmeta_tbl_itm prv_tbl = prv_tbl_mgr.Get_at(i);
|
||||
Dbmeta_tbl_itm cur_tbl = cur_tbl_mgr.Get_by(prv_tbl.Name());
|
||||
if (cur_tbl == null) {
|
||||
// delete all
|
||||
}
|
||||
}
|
||||
}
|
||||
public static Db_conn New_conn(Xow_wiki wiki, Bry_fmt fmtr, String url_fmt, Bry_bfr tmp_bfr) {
|
||||
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);
|
||||
Db_conn conn = Db_conn_pool.Instance.Get_or_new(tmp_bfr.To_str_and_clear());
|
||||
return conn;
|
||||
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) {
|
||||
return null;
|
||||
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))
|
||||
};
|
||||
return rv;
|
||||
}
|
||||
//prev_url='~{.dump_dir}-prev/~{.dump_core}';
|
||||
//curr_url='~{.dump_dir}/~{.dump_core}';
|
||||
//diff_url='~{.dump_dir}/~{.dump_domain}-diff.xowa';
|
||||
//prv_url='~{.dump_dir}-prev/~{.dump_core}';
|
||||
//cur_url='~{.dump_dir}/~{.dump_core}';
|
||||
//dif_url='~{.dump_dir}/~{.dump_domain}-diff.xowa';
|
||||
}
|
||||
// class Bfr_arg__dump_dir : Bfr_arg {
|
||||
// public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
// // dump_dir = bfr.Add("C:\xowa\wiki\en.wikipedia.org");
|
||||
// // dump_core = en.wikipedia.org-core.xowa
|
||||
// // dump_domain = en.wikipedia.org
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
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.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.dbs.*; import gplx.dbs.metas.*; import gplx.dbs.diffs.*;
|
||||
class Xob_diff_manifest {
|
||||
// page|page_id|*
|
||||
public static Gfdb_diff_tbl[] Parse(Db_conn conn, String src_str) {
|
||||
// byte[][] rows_ary = Bry_split_.Split_lines(Bry_.new_u8(src_str));
|
||||
// int rows_len = rows_ary.length;
|
||||
// for (int i = 0; i < rows_len; ++i) {
|
||||
// byte[] row = rows_ary[i];
|
||||
// byte[][] itms_ary = Bry_split_.Split(row, Byte_ascii.Pipe);
|
||||
// byte[] tbl_name = itms_ary[0];
|
||||
// conn.Meta_tbl_exists
|
||||
// int itms_len = itms_ary.length;
|
||||
// for (int j = 0; j < itms_len; ++j) {
|
||||
// byte[] itm = itms_ary[j];
|
||||
// Tfds.Dbg(itm);
|
||||
// }
|
||||
// Gfdb_diff_tbl tbl = new Gfdb_diff_tbl(String_.new_u8(itms_ary[0]),keys, vals, Db_rdr_.Empty);
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/*
|
||||
class Wkr {
|
||||
public void Make() {
|
||||
sdif_db_mgr sdif_db = new Sdif_db_mgr(conn);
|
||||
for (int i = 0; i < rhs_tbl_len; ++i) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -60,7 +60,7 @@ class Xob_diff_regy_sql_runner {
|
||||
fsdb_db_tid = Fsdb_db_tid_.Xto_tid(parts[2]);
|
||||
}
|
||||
public void Run_sql(Xoae_app app) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(Bry_.new_u8(wiki_domain));
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_null(Bry_.new_u8(wiki_domain));
|
||||
app.Usr_dlg().Prog_many("", "", "running sql: url=~{0}", url.NameAndExt());
|
||||
Db_conn conn = Get_conn(wiki, fsdb_db_id, fsdb_db_tid);
|
||||
conn.Exec_sql(Io_mgr.Instance.LoadFilStr(url));
|
||||
|
||||
@@ -35,8 +35,8 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm
|
||||
}
|
||||
private void Make_join_indexes(Db_conn make_db_provider) {
|
||||
try {
|
||||
make_db_provider.Ddl_create_idx(Db_meta_idx.new_normal_by_name("fsdb_regy", "fsdb_regy__join", "fsdb_name", "fsdb_is_orig", "fsdb_repo", "fsdb_w", "fsdb_time", "fsdb_page"));
|
||||
make_db_provider.Ddl_create_idx(Db_meta_idx.new_normal_by_name("xfer_regy", "xfer_regy__join", "lnki_ttl", "file_is_orig", "orig_repo", "file_w", "lnki_time", "lnki_page"));
|
||||
make_db_provider.Ddl_create_idx(Dbmeta_idx_itm.new_normal_by_name("fsdb_regy", "fsdb_regy__join", "fsdb_name", "fsdb_is_orig", "fsdb_repo", "fsdb_w", "fsdb_time", "fsdb_page"));
|
||||
make_db_provider.Ddl_create_idx(Dbmeta_idx_itm.new_normal_by_name("xfer_regy", "xfer_regy__join", "lnki_ttl", "file_is_orig", "orig_repo", "file_w", "lnki_time", "lnki_page"));
|
||||
}
|
||||
catch (Exception exc) {
|
||||
app.Usr_dlg().Warn_many("", "", "error while making indexes: err=~{0}", Err_.Message_gplx_full(exc));
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.dbs.*; import gplx.xowa.files.*;
|
||||
class Xob_lnki_temp_tbl {
|
||||
private static final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private static final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private static final String Tbl_name = "lnki_temp";
|
||||
public static final String
|
||||
Fld_lnki_id = flds.Add_int_pkey_autonum("lnki_id"); // NOTE: insertion order index; public b/c not used and want to bypass warning
|
||||
@@ -39,7 +39,7 @@ class Xob_lnki_temp_tbl {
|
||||
private Db_stmt stmt_insert;
|
||||
public Xob_lnki_temp_tbl(Db_conn conn) {this.conn = conn;}
|
||||
public Db_conn Conn() {return conn;} private final Db_conn conn;
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(Tbl_name, flds));}
|
||||
public void Insert_bgn() {conn.Txn_bgn("bldr__lnki_temp"); stmt_insert = conn.Stmt_insert(Tbl_name, flds);}
|
||||
public void Insert_commit() {conn.Txn_sav();}
|
||||
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
|
||||
wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_page_.Tid_read).Ctgs_enabled_(false); // disable categories else progress messages written (also for PERF)
|
||||
if (wiki.File__bin_mgr() != null)
|
||||
wiki.File__bin_mgr().Wkrs__del(gplx.xowa.files.bins.Xof_bin_wkr_.Key_http_wmf); // remove wmf wkr, else will try to download images during parsing
|
||||
commons_wiki = app.Wiki_mgr().Get_by_key_or_make(Xow_domain_itm_.Bry__commons);
|
||||
commons_wiki = app.Wiki_mgr().Get_by_or_make(Xow_domain_itm_.Bry__commons);
|
||||
Xop_log_mgr log_mgr = ctx.App().Log_mgr();
|
||||
log_mgr.Log_dir_(wiki.Fsys_mgr().Root_dir()); // put log in wiki dir, instead of user.temp
|
||||
invoke_wkr = this.Invoke_wkr(); // set member reference
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_orig_regy_tbl.Create_table(conn);
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Xowe_wiki repo_0 = wiki, repo_1 = commons_wiki;
|
||||
if (repo_0_is_remote) { // NOTE: default is false; local_wiki will be preferred over commons_wiki
|
||||
repo_0 = commons_wiki;
|
||||
|
||||
@@ -25,7 +25,7 @@ public class Xob_page_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public String Cmd_key() {return Xob_cmd_keys.Key_file_page_regy;}
|
||||
public void Cmd_init(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Db_conn page_regy_provider = Xob_db_file.new__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
commons_wiki.Init_assert();
|
||||
if (build_commons) {
|
||||
|
||||
@@ -37,11 +37,12 @@ public class Xob_page_cmd extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
this.page_core_tbl = db_mgr.Tbl__page();
|
||||
this.text_zip_mgr = Xoa_app_.Utl__zip_mgr(); text_zip_tid = import_cfg.Zip_tid_text();
|
||||
this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__text(), db_mgr, import_cfg.Text_db_max());
|
||||
this.dg_match_mgr = app.Api_root().Bldr().Wiki().Filter().Dansguardian().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir());
|
||||
if (dg_match_mgr != null) redirect_id_enabled = true; // always enable redirect_id if dg_match_mgr enabled; DATE:2016-01-04
|
||||
if (redirect_id_enabled) {
|
||||
this.redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), gplx.langs.htmls.encoders.Gfo_url_encoder_.Http_url_ttl).Create_table();
|
||||
redirect_tbl.Conn().Txn_bgn("bldr__page__redirect");
|
||||
}
|
||||
this.dg_match_mgr = app.Api_root().Bldr().Wiki().Filter().Dansguardian().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir());
|
||||
app.Bldr().Dump_parser().Trie_tab_del_(); // disable swapping 	 for \t
|
||||
byte[] ns_file_map = import_cfg.New_ns_file_map(wiki.Import_cfg().Src_rdr_len());
|
||||
Xob_ns_file_itm.Init_ns_bldr_data(Xowd_db_file_.Tid_text, wiki.Ns_mgr(), ns_file_map);
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
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 gplx.dbs.*; import gplx.xowa.wikis.data.*;
|
||||
public class Xob_page_delete_cmd extends Xob_cmd_base {
|
||||
private final Xow_wiki wiki;
|
||||
public Xob_page_delete_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.wiki = wiki;}
|
||||
@Override public String Cmd_key() {return Xob_cmd_keys.Key_text_delete_page;}
|
||||
@Override public void Cmd_run() {
|
||||
wiki.Init_by_wiki();
|
||||
Xowd_db_file core_db = wiki.Data__core_mgr().Db__core();
|
||||
Db_conn core_db_conn = core_db.Conn();
|
||||
Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Instance;
|
||||
|
||||
usr_dlg.Plog_many("", "", "creating page_filter");
|
||||
if (!core_db_conn.Meta_tbl_exists("page_filter")) {
|
||||
core_db_conn.Ddl_create_tbl
|
||||
( Dbmeta_tbl_itm.New("page_filter", new Dbmeta_fld_itm[]
|
||||
{ Dbmeta_fld_itm.new_int("page_id").Primary_y_()
|
||||
, Dbmeta_fld_itm.new_int("page_text_db_id")
|
||||
}
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl("page_filter", "db_id", "page_text_db_id", "page_id")
|
||||
));
|
||||
}
|
||||
|
||||
core_db_conn.Exec_sql_plog_ntx("finding missing redirects", String_.Concat_lines_nl_skip_last
|
||||
( "INSERT INTO page_filter (page_id, page_text_db_id)"
|
||||
, "SELECT ptr.page_id, ptr.page_text_db_id"
|
||||
, "FROM page ptr"
|
||||
, " LEFT JOIN page orig ON ptr.page_redirect_id = orig.page_id"
|
||||
, "WHERE ptr.page_is_redirect = 1"
|
||||
, "AND orig.page_id IS NULL"
|
||||
, "UNION"
|
||||
, "SELECT ptr.page_id, ptr.page_text_db_id"
|
||||
, "FROM page ptr"
|
||||
, "WHERE ptr.page_is_redirect = 1"
|
||||
, "AND ptr.page_redirect_id = -1"
|
||||
, ";"
|
||||
));
|
||||
|
||||
Xowd_db_file[] db_files = core_db.Tbl__db().Select_all(wiki.Data__core_mgr().Props(), wiki.Fsys_mgr().Root_dir());
|
||||
int len = db_files.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
boolean db_file_is_text = Bool_.N, db_file_is_cat = Bool_.N, db_file_is_search = Bool_.N;
|
||||
Xowd_db_file db_file = db_files[i];
|
||||
switch (db_file.Tid()) {
|
||||
case Xowd_db_file_.Tid_core: case Xowd_db_file_.Tid_wiki_solo: case Xowd_db_file_.Tid_text_solo:
|
||||
db_file_is_text = db_file_is_cat = db_file_is_search = Bool_.Y; break;
|
||||
case Xowd_db_file_.Tid_text: db_file_is_text = Bool_.Y; break;
|
||||
case Xowd_db_file_.Tid_cat: db_file_is_cat = Bool_.Y; break;
|
||||
case Xowd_db_file_.Tid_search_core: db_file_is_search = Bool_.Y; break;
|
||||
}
|
||||
int db_id = db_file.Id();
|
||||
if (db_file_is_text) Run_sql(core_db_conn, db_file.Url(), db_id, "deleting text: " + db_id, "DELETE FROM <attach_db>text WHERE page_id IN (SELECT page_id FROM page_filter WHERE page_text_db_id = {0});");
|
||||
if (db_file_is_cat) Run_sql(core_db_conn, db_file.Url(), db_id, "deleting cat: " + db_id, "DELETE FROM <attach_db>cat_link WHERE cl_from IN (SELECT page_id FROM page_filter);");
|
||||
if (db_file_is_cat) Run_sql(core_db_conn, db_file.Url(), db_id, "deleting search:" + db_id, "DELETE FROM <attach_db>search_link WHERE page_id IN (SELECT page_id FROM page_filter);");
|
||||
if (db_file_is_text || db_file_is_cat || db_file_is_search)
|
||||
db_file.Conn().Env_vacuum();
|
||||
}
|
||||
core_db_conn.Exec_sql_plog_ntx("deleting from table: page", "DELETE FROM page WHERE page_id IN (SELECT page_id FROM page_filter);");
|
||||
// core_db_conn.Ddl_delete_tbl("page_filter");
|
||||
core_db_conn.Env_vacuum();
|
||||
usr_dlg.Plog_many("", "", "");
|
||||
}
|
||||
private void Run_sql(Db_conn core_db_conn, Io_url db_url, int db_id, String prog_msg, String sql) {
|
||||
Db_attach_cmd.new_(core_db_conn, "data_db", db_url)
|
||||
.Add_fmt(prog_msg , sql, db_id)
|
||||
.Exec();
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,8 @@ public class Xob_term_cmd extends Xob_term_base {
|
||||
cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc());
|
||||
cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage());
|
||||
gplx.fsdb.Fsdb_db_mgr__v2_bldr.Instance.Get_or_make(wiki, false);// always build file.user db; DATE:2015-05-12
|
||||
if (wiki.Appe().Api_root().Bldr().Wiki().Filter().Dansguardian().Enabled()) // if dansguardian, delete missing pages; DATE:2016-01-06
|
||||
new Xob_page_delete_cmd(wiki.Appe().Bldr(), wiki).Cmd_run();
|
||||
wiki.Data__core_mgr().Rls();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.dbs.*;
|
||||
class Xobd_page_dump_tbl {
|
||||
public final static String Tbl_name = "page_dump";
|
||||
private final String fld_id, fld_title, fld_namespace, fld_is_redirect;
|
||||
private final Db_conn conn; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final Db_conn conn; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
public Xobd_page_dump_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
this.fld_id = flds.Add_int_pkey("page_id");
|
||||
@@ -29,12 +29,12 @@ class Xobd_page_dump_tbl {
|
||||
this.fld_is_redirect = flds.Add_int("page_is_redirect");
|
||||
}
|
||||
public void Create_data(Io_url page_db_url, int text_db_id) {
|
||||
conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));
|
||||
conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(Tbl_name, flds));
|
||||
conn.Stmt_delete(Tbl_name).Exec_delete(); // always clear tables again; allows commands to be rerun; DATE:2015-08-04
|
||||
Db_attach_cmd.new_(conn, "page_db", page_db_url)
|
||||
.Add_fmt("text_db_prep.clone_page", Sql_insert_data, text_db_id)
|
||||
.Exec();
|
||||
conn.Ddl_create_idx(Db_meta_idx.new_unique_by_tbl(Tbl_name, "main", fld_id, fld_namespace, fld_is_redirect, fld_title));
|
||||
conn.Ddl_create_idx(Dbmeta_idx_itm.new_unique_by_tbl(Tbl_name, "main", fld_id, fld_namespace, fld_is_redirect, fld_title));
|
||||
}
|
||||
private static final String Sql_insert_data = String_.Concat_lines_nl
|
||||
( "INSERT INTO page_dump (page_id, page_title, page_namespace, page_is_redirect)"
|
||||
|
||||
@@ -43,7 +43,7 @@ class Dg_log_mgr {
|
||||
public void Rls() {conn.Txn_end();}
|
||||
}
|
||||
class Dg_file_tbl {
|
||||
private String tbl_name = "dg_file"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_file"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_file_id, fld_file_path, fld_rule_count;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -52,8 +52,8 @@ class Dg_file_tbl {
|
||||
fld_file_path = flds.Add_str("file_path", 512);
|
||||
fld_rule_count = flds.Add_int("rule_count");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "file_id", fld_file_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "file_id", fld_file_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -69,7 +69,7 @@ class Dg_file_tbl {
|
||||
}
|
||||
}
|
||||
class Dg_rule_tbl implements Rls_able {
|
||||
private String tbl_name = "dg_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_rule"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_file_id, fld_rule_id, fld_rule_idx, fld_rule_score, fld_rule_text;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -80,8 +80,8 @@ class Dg_rule_tbl implements Rls_able {
|
||||
fld_rule_score = flds.Add_int("rule_score");
|
||||
fld_rule_text = flds.Add_str("rule_text", 1024);
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_rule_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_rule_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -102,7 +102,7 @@ class Dg_rule_tbl implements Rls_able {
|
||||
}
|
||||
}
|
||||
class Dg_page_score_tbl implements Rls_able {
|
||||
private String tbl_name = "dg_page_score"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_page_score"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_log_tid, fld_page_id, fld_page_ns, fld_page_ttl, fld_page_len, fld_page_score, fld_page_rule_count, fld_clude_type;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -116,8 +116,8 @@ class Dg_page_score_tbl implements Rls_able {
|
||||
fld_page_rule_count = flds.Add_int("page_rule_count");
|
||||
fld_clude_type = flds.Add_int("page_clude_type");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -142,7 +142,7 @@ class Dg_page_score_tbl implements Rls_able {
|
||||
}
|
||||
}
|
||||
class Dg_page_rule_tbl implements Rls_able {
|
||||
private String tbl_name = "dg_page_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_page_rule"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_log_tid, fld_page_id, fld_rule_id, fld_rule_score_total;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -152,8 +152,8 @@ class Dg_page_rule_tbl implements Rls_able {
|
||||
fld_rule_id = flds.Add_int("rule_id");
|
||||
fld_rule_score_total = flds.Add_int("rule_score_total");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id, fld_rule_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id, fld_rule_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ abstract class Xoi_cmd_base implements Gfo_thread_cmd {
|
||||
public void Process_async() {
|
||||
Xoae_app app = install_mgr.App();
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_a7(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki.Init_assert();
|
||||
bldr.Cmd_mgr().Clear();
|
||||
Process_async_init(app, wiki, bldr);
|
||||
@@ -81,7 +81,7 @@ class Xoi_cmd_category2_categorylinks extends Xoi_cmd_wiki_download { public Xoi
|
||||
class Xoi_cmd_category2_build extends Xoi_cmd_base {
|
||||
public Xoi_cmd_category2_build(Xoi_setup_mgr install_mgr, String wiki_key) {this.Ctor(install_mgr, wiki_key); this.app = install_mgr.App(); this.wiki_key = wiki_key;} private Xoae_app app; private String wiki_key;
|
||||
@Override public void Cmd_ctor() {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(wiki_key));
|
||||
wiki.Import_cfg().Category_version_(gplx.xowa.wikis.ctgs.Xoa_ctg_mgr.Version_2);
|
||||
}
|
||||
@Override public String Async_key() {return KEY;} public static final String KEY = "wiki.category2.build";
|
||||
|
||||
@@ -45,7 +45,7 @@ class Xoi_cmd_dumpfile {
|
||||
return this;
|
||||
}
|
||||
public Gfo_thread_cmd Exec(Xoi_cmd_mgr cmd_mgr) {
|
||||
Xowe_wiki wiki = cmd_mgr.App().Wiki_mgr().Get_by_key_or_make(domain);
|
||||
Xowe_wiki wiki = cmd_mgr.App().Wiki_mgr().Get_by_or_make(domain);
|
||||
if (bz2_unzip) { // unzip requested; add unzip cmd
|
||||
GfoMsg unzip_msg = GfoMsg_.new_parse_(Gfo_thread_cmd_unzip.KEY).Add("v", Gfo_thread_cmd_unzip.KEY).Add("src", bz2_url.Raw()).Add("trg", xml_url.Raw());
|
||||
Gfo_thread_cmd_unzip unzip_cmd = (Gfo_thread_cmd_unzip)cmd_mgr.Cmd_add(unzip_msg);
|
||||
|
||||
@@ -95,7 +95,7 @@ public class Xoi_cmd_mgr implements GfoInvkAble {
|
||||
if (dumpfile_cmd) {
|
||||
if (String_.Eq(cmd.Async_key(), Xoi_cmd_wiki_download.Key_wiki_download)) continue; // skip download if wiki.dump_file
|
||||
else if (String_.Eq(cmd.Async_key(), Xoi_cmd_wiki_unzip.KEY_dump)) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(wiki_key));
|
||||
if (wiki.Import_cfg().Src_fil_xml() != null) continue; // skip unzip if xml exists
|
||||
}
|
||||
else if (String_.Eq(cmd.Async_key(), Xoi_cmd_wiki_import.KEY)) {
|
||||
|
||||
@@ -42,7 +42,7 @@ class Xoi_cmd_wiki_download extends Gfo_thread_cmd_download implements Gfo_threa
|
||||
Dump_servers_offline_msg_shown = true;
|
||||
}
|
||||
}
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(dump_file.Domain_itm().Domain_bry());
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(dump_file.Domain_itm().Domain_bry());
|
||||
Io_url root_dir = wiki.Fsys_mgr().Root_dir();
|
||||
Io_url[] trg_fil_ary = Io_mgr.Instance.QueryDir_args(root_dir).FilPath_("*." + dump_type + Download_file_ext() + "*").ExecAsUrlAry();
|
||||
Io_url trg = trg_fil_ary.length == 0 ? root_dir.GenSubFil(dump_file.File_name()) : trg_fil_ary[0];
|
||||
|
||||
@@ -72,7 +72,7 @@ class Xoi_cmd_wiki_import implements Gfo_thread_cmd {
|
||||
Xoae_app app = install_mgr.App();
|
||||
app.Usr_dlg().Prog_one("", "", "preparing import: ~{0}", wiki_key);
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki.Init_assert();
|
||||
bldr.Cmd_mgr().Clear();
|
||||
bldr.Pause_at_end_(false);
|
||||
|
||||
@@ -23,7 +23,7 @@ class Xoi_cmd_wiki_unzip extends Gfo_thread_cmd_unzip implements Gfo_thread_cmd
|
||||
@Override public String Async_key() {return KEY_dump;}
|
||||
@Override public byte Async_init() {
|
||||
Xoae_app app = install_mgr.App(); Gfui_kit kit = app.Gui_mgr().Kit();
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(wiki_key));
|
||||
Io_url wiki_dir = wiki.Import_cfg().Src_dir();
|
||||
Io_url[] urls = Io_mgr.Instance.QueryDir_args(wiki_dir).Recur_(false).FilPath_("*.xml.bz2").ExecAsUrlAry();
|
||||
if (urls.length == 0) {
|
||||
|
||||
@@ -47,7 +47,7 @@ class Xoi_cmd_wiki_zip implements Gfo_thread_cmd {
|
||||
private void Process_async() {
|
||||
Xoae_app app = install_mgr.App();
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki.Init_assert();
|
||||
bldr.Cmd_mgr().Clear();
|
||||
bldr.Pause_at_end_(false);
|
||||
|
||||
@@ -66,7 +66,7 @@ public class Xoa_maint_mgr implements GfoInvkAble {
|
||||
len = app.Wiki_mgr().Count();
|
||||
Xoa_app_.Usr_dlg().Log_many("", "", "maint.wiki_count; count=~{0}", len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_at(i);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_at_or_null(i);
|
||||
Xoa_app_.Usr_dlg().Log_many("", "", "maint.wiki_itm; wiki=~{0}", wiki.Domain_str());
|
||||
Wmf_dump_itm itm = (Wmf_dump_itm)itms_hash.Get_by_bry(wiki.Domain_bry()); if (itm == null) continue;
|
||||
wiki.Maint_mgr().Wmf_dump_date_(itm.Dump_date()).Wmf_dump_done_(itm.Status_tid() == Wmf_dump_itm.Status_tid_complete).Wmf_dump_status_(itm.Status_msg());
|
||||
|
||||
@@ -23,7 +23,7 @@ public class Xoa_maint_wikis_mgr implements GfoInvkAble {
|
||||
public Xowe_wiki Get_at(int i) {
|
||||
if (init) Init();
|
||||
byte[] domain = (byte[])hash.Get_at(i);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(domain);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(domain);
|
||||
wiki.Init_assert();
|
||||
return wiki;
|
||||
}
|
||||
@@ -32,7 +32,7 @@ public class Xoa_maint_wikis_mgr implements GfoInvkAble {
|
||||
int len = this.Len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
byte[] domain = (byte[])hash.Get_at(i);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(domain);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(domain);
|
||||
wiki.Init_assert();
|
||||
}
|
||||
init = false;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Xoa_wmf_mgr implements GfoInvkAble {
|
||||
enabled = v;
|
||||
int len = wiki_mgr.Count();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowe_wiki wiki = wiki_mgr.Get_at(i);
|
||||
Xowe_wiki wiki = wiki_mgr.Get_at_or_null(i);
|
||||
wiki.File_mgr().Cfg_download().Enabled_(v);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
public class Site_core_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_core"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_core"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_site_domain, fld_json_completed, fld_json_date, fld_json_text;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete, stmt_update;
|
||||
@@ -32,7 +32,7 @@ public class Site_core_tbl implements Db_tbl {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public Db_conn Conn() {return conn;}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_extension_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_extension"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_extension"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_type, fld_name, fld_namemsg, fld_description, fld_descriptionmsg, fld_author, fld_url, fld_version
|
||||
, fld_vcs_system, fld_vcs_version, fld_vcs_url, fld_vcs_date, fld_license_name, fld_license, fld_credits;
|
||||
private final Db_conn conn;
|
||||
@@ -43,8 +43,8 @@ class Site_extension_tbl implements Db_tbl {
|
||||
this.fld_credits = flds.Add_str("credits", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_type, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_type, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_interwikimap_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_interwikimap"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_interwikimap"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_prefix, fld_local, fld_language, fld_localinterwiki, fld_url, fld_protorel;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -33,8 +33,8 @@ class Site_interwikimap_tbl implements Db_tbl {
|
||||
this.fld_protorel = flds.Add_bool("protorel");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_prefix)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_prefix)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_kv_tbl implements Db_tbl {
|
||||
private String tbl_name; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_key, fld_val;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_kv_tbl implements Db_tbl {
|
||||
this.fld_val = flds.Add_str("val", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_key)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_key)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_language_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_language"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_language"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_code, fld_name;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_language_tbl implements Db_tbl {
|
||||
this.fld_name = flds.Add_str("name", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_library_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_library"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_library"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_name, fld_version;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_library_tbl implements Db_tbl {
|
||||
this.fld_version = flds.Add_str("version", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_magicword_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_magicword"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_magicword"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_name, fld_case_match, fld_aliases;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -30,8 +30,8 @@ class Site_magicword_tbl implements Db_tbl {
|
||||
this.fld_aliases = flds.Add_str("aliases", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
public class Site_namespace_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_namespace"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_namespace"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_id, fld_case_tid, fld_canonical, fld_localized, fld_subpages, fld_content, fld_defaultcontentmodel;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -34,8 +34,8 @@ public class Site_namespace_tbl implements Db_tbl {
|
||||
this.fld_defaultcontentmodel = flds.Add_str("defaultcontentmodel", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_namespacealias_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_namespacealias"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_namespacealias"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_id, fld_alias;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_namespacealias_tbl implements Db_tbl {
|
||||
this.fld_alias = flds.Add_str("alias", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_normal_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id, fld_alias)));} // NOTE: kk.w has duplicate entries in json
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_normal_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id, fld_alias)));} // NOTE: kk.w has duplicate entries in json
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_showhook_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_showhook"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_showhook"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_name, fld_scribunto, fld_subscribers;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -30,8 +30,8 @@ class Site_showhook_tbl implements Db_tbl {
|
||||
this.fld_subscribers = flds.Add_str("subscribers", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_skin_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_skin"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_skin"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_code, fld_dflt, fld_name, fld_unusable;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -31,8 +31,8 @@ class Site_skin_tbl implements Db_tbl {
|
||||
this.fld_unusable = flds.Add_bool("unusable");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_specialpagealias_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_specialpagealias"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_specialpagealias"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_realname, fld_aliases;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_specialpagealias_tbl implements Db_tbl {
|
||||
this.fld_aliases = flds.Add_str("aliases", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main")), fld_site_abrv, fld_realname)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main")), fld_site_abrv, fld_realname)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_statistic_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_statistic"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_statistic"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_pages, fld_articles, fld_edits, fld_images, fld_users, fld_activeusers, fld_admins, fld_jobs, fld_queued_massmessages;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -36,8 +36,8 @@ class Site_statistic_tbl implements Db_tbl {
|
||||
this.fld_queued_massmessages = flds.Add_long("queued_massmessages");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_val_tbl implements Db_tbl {
|
||||
private String tbl_name; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_val;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_val_tbl implements Db_tbl {
|
||||
this.fld_val = flds.Add_str("val", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_val)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_val)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.drds; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.xowa.drds.pages.*; import gplx.xowa.drds.files.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.files.gui.*;
|
||||
import gplx.xowa.specials.search.*;
|
||||
import gplx.xowa.wikis.nss.*; import gplx.xowa.files.gui.*;
|
||||
import gplx.xowa.specials.search.*; import gplx.xowa.specials.randoms.*;
|
||||
public class Xod_app {
|
||||
private final Xoav_app app;
|
||||
private final Xod_page_mgr page_mgr = new Xod_page_mgr();
|
||||
@@ -27,22 +27,24 @@ public class Xod_app {
|
||||
public Xod_app(Xoav_app app) {
|
||||
this.app = app;
|
||||
}
|
||||
public int Get_wiki_count() {
|
||||
public int Wikis__count() {
|
||||
int rv = app.Wiki_mgri().Count();
|
||||
return rv - 1; // ignore home wiki
|
||||
}
|
||||
public Xow_wiki Get_wiki(String wiki_domain) {
|
||||
Xow_wiki rv = app.Wiki_mgri().Get_by_key_or_make_init_y(Bry_.new_u8(wiki_domain));
|
||||
if (rv.Data__core_mgr() == null) rv.Init_by_wiki();
|
||||
public Xow_wiki Wikis__get_by_domain(String wiki_domain) {
|
||||
Xow_wiki rv = app.Wiki_mgri().Get_by_or_make_init_y(Bry_.new_u8(wiki_domain));
|
||||
if (rv != null && rv.Data__core_mgr() == null) rv.Init_by_wiki();
|
||||
return rv;
|
||||
}
|
||||
public Xod_page_itm Get_page(Xow_wiki wiki, Xoa_url page_url) {
|
||||
public Xod_page_itm Wiki__get_by_url(Xow_wiki wiki, Xoa_url page_url) {
|
||||
return page_mgr.Get_page(wiki, page_url);
|
||||
}
|
||||
public void Load_files(Xow_wiki wiki, Xod_page_itm pg, Xog_js_wkr js_wkr) {
|
||||
file_mgr.Load_files(wiki, pg, js_wkr);
|
||||
public Xod_page_itm Wiki__get_random(Xow_wiki wiki, Xow_ns ns) {
|
||||
byte[] random_ttl_bry = wiki.Data__core_mgr().Tbl__page().Select_random(ns);
|
||||
Xoa_url url = wiki.Utl__url_parser().Parse(random_ttl_bry);
|
||||
return Wiki__get_by_url(wiki, url);
|
||||
}
|
||||
public String[] Search_titles(Cancelable cancelable, Xow_wiki wiki, Xows_ui_async ui_async, String search) {
|
||||
public String[] Wiki__search(Cancelable cancelable, Xow_wiki wiki, Xows_ui_async ui_async, String search) {
|
||||
Xows_db_wkr search_wkr = new Xows_db_wkr();
|
||||
Xows_db_row[] rows = search_wkr.Search_by_drd(cancelable, wiki, ui_async, Bry_.new_u8(search), 50);
|
||||
int len = rows.length;
|
||||
@@ -52,4 +54,7 @@ public class Xod_app {
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public void Page__load_files(Xow_wiki wiki, Xod_page_itm pg, Xog_js_wkr js_wkr) {
|
||||
file_mgr.Load_files(wiki, pg, js_wkr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,9 +41,9 @@ class Xod_app_tstr {
|
||||
Io_mgr.Instance.InitEngine_mem();
|
||||
}
|
||||
public void Test__get(String ttl, Xod_page_itm expd) {
|
||||
Xow_wiki wiki = drd_provider.Get_wiki("en.wikipedia.org");
|
||||
Xow_wiki wiki = drd_provider.Wikis__get_by_domain("en.wikipedia.org");
|
||||
Xoa_url page_url = wiki.Utl__url_parser().Parse(Bry_.new_u8(ttl));
|
||||
Xod_page_itm itm = drd_provider.Get_page(wiki, page_url);
|
||||
Xod_page_itm itm = drd_provider.Wiki__get_by_url(wiki, page_url);
|
||||
Tfds.Eq(expd.To_str(), itm.To_str());
|
||||
}
|
||||
public Xod_page_itm Make_page(int page_id, String ttl, String modified_on, Xoh_section_itm... section_ary) {
|
||||
|
||||
@@ -15,14 +15,24 @@ 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.files; import gplx.*; import gplx.xowa.*;
|
||||
public class Xoa_file_mgr {
|
||||
private final List_adp list = List_adp_.new_();
|
||||
public void Clear() {list.Clear();}
|
||||
public boolean Check_cache(Xof_fsdb_itm itm) {
|
||||
return false;
|
||||
}
|
||||
public void Queue_for_viewing(Xof_fsdb_itm itm) {
|
||||
list.Add(itm);
|
||||
}
|
||||
}
|
||||
//namespace gplx.xowa.files {
|
||||
// using gplx.xowa.files.caches;
|
||||
// public class Xoa_file_mgr {
|
||||
// private final List_adp list = List_adp_.new_();
|
||||
// public void Clear() {list.Clear();}
|
||||
// public boolean Check_cache(Xow_wiki wiki, byte[] page_url, Xof_fsdb_itm fsdb_itm) {
|
||||
// fsdb_itm.Init_at_cache(0, 0, null);
|
||||
//// Xou_cache_mgr cache_mgr = new Xou_cache_mgr(null, null, null);
|
||||
//// Xou_cache_itm cache_itm = cache_mgr.Get_or_null(fsdb_itm);
|
||||
//// if (cache_itm == null) {
|
||||
//// fsdb_itm.Init_at_cache(Bool_.N_byte, 0, 0, null);
|
||||
//// return false;
|
||||
//// }
|
||||
//// else {
|
||||
//// fsdb_itm.Init_at_cache(Bool_.Y_byte, cache_itm.Html_w(), cache_itm.Html_h(), cache_itm.File_url());
|
||||
//// return true;
|
||||
//// }
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
@@ -38,6 +38,7 @@ public interface Xof_file_itm {
|
||||
boolean File_is_orig();
|
||||
int File_w();
|
||||
boolean File_exists();
|
||||
boolean File_exists_in_cache();
|
||||
int Html_uid();
|
||||
byte Html_elem_tid();
|
||||
int Html_w();
|
||||
@@ -60,5 +61,5 @@ public interface Xof_file_itm {
|
||||
void Init_at_gallery_bgn(int html_w, int html_h, int file_w);
|
||||
void Init_at_gallery_end(int html_w, int html_h, Io_url html_view_url, Io_url html_orig_url);
|
||||
|
||||
boolean Meta_is_new();
|
||||
boolean Dbmeta_is_new();
|
||||
}
|
||||
|
||||
@@ -51,10 +51,15 @@ public class Xof_file_wkr implements Gfo_thread_wkr {
|
||||
Exec_by_fsdb(fsdb);
|
||||
}
|
||||
private void Exec_by_fsdb(Xof_fsdb_itm fsdb) {
|
||||
fsdb.Orig_exists_n_();
|
||||
Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return;
|
||||
Eval_orig(orig, fsdb, url_bldr, repo_mgr, img_size);
|
||||
Show_img(fsdb, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, hpg);
|
||||
try {
|
||||
if (fsdb.File_exists_in_cache()) return;
|
||||
fsdb.Orig_exists_n_();
|
||||
Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return;
|
||||
Eval_orig(orig, fsdb, url_bldr, repo_mgr, img_size);
|
||||
Show_img(fsdb, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, hpg);
|
||||
} catch (Exception e) {
|
||||
usr_dlg.Warn_many("", "", "file.unknown: err=~{0}", Err_.Message_gplx_full(e));
|
||||
}
|
||||
}
|
||||
public static boolean Show_img(Xof_fsdb_itm fsdb, Gfo_usr_dlg usr_dlg, Xof_bin_mgr bin_mgr, Fsm_mnt_mgr mnt_mgr, Xou_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xog_js_wkr js_wkr, Xof_img_size img_size, Xof_url_bldr url_bldr, Xoa_page page) {
|
||||
try {
|
||||
|
||||
@@ -50,9 +50,10 @@ public class Xof_fsdb_itm implements Xof_file_itm {
|
||||
public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig;
|
||||
public int File_w() {return file_w;} private int file_w;
|
||||
public long File_size() {return file_size;} private long file_size;
|
||||
public boolean Meta_is_new() {return false;}
|
||||
public boolean Dbmeta_is_new() {return false;}
|
||||
public boolean Orig_exists() {return orig_exists;} public void Orig_exists_y_() {orig_exists = Bool_.Y;} public void Orig_exists_n_() {orig_exists = Bool_.N;} private boolean orig_exists;
|
||||
public boolean File_exists() {return file_exists;} public void File_exists_y_() {file_exists = Bool_.Y;} public void File_exists_n_() {file_exists = Bool_.N;} public void File_exists_(boolean v) {file_exists = v;} private boolean file_exists;
|
||||
public boolean File_exists_in_cache() {return file_exists_in_cache;} private boolean file_exists_in_cache;
|
||||
public boolean File_resized() {return file_resized;} public void File_resized_y_() {file_resized = Bool_.Y;} private boolean file_resized;
|
||||
public boolean Fsdb_insert() {return fsdb_insert;} public void Fsdb_insert_y_() {fsdb_insert = true;} private boolean fsdb_insert;
|
||||
public int Xfer_idx() {return xfer_idx;} private int xfer_idx;
|
||||
@@ -117,6 +118,10 @@ public class Xof_fsdb_itm implements Xof_file_itm {
|
||||
public void Init_at_xfer(int idx, int len) {
|
||||
this.xfer_idx = idx; this.xfer_len = len;
|
||||
}
|
||||
public void Init_at_cache(boolean file_exists_in_cache, int w, int h, Io_url view_url) {
|
||||
this.file_exists_in_cache = file_exists_in_cache;
|
||||
this.html_w = w; this.html_h = h; this.html_view_url = view_url;
|
||||
}
|
||||
public void Change_repo(byte orig_repo_id, byte[] orig_repo_name) {
|
||||
this.orig_repo_id = orig_repo_id; this.orig_repo_name = orig_repo_name;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,8 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
public int Html_gallery_mgr_h() {return html_gallery_mgr_h;} private int html_gallery_mgr_h;
|
||||
public Js_img_wkr Html_img_wkr() {return html_img_wkr;} private Js_img_wkr html_img_wkr;
|
||||
public boolean File_exists() {return file_exists;} private boolean file_exists;
|
||||
public boolean Meta_is_new() {return meta_itm.State_new();}
|
||||
public boolean File_exists_in_cache() {return false;}
|
||||
public boolean Dbmeta_is_new() {return meta_itm.State_new();}
|
||||
public void Html_elem_tid_(byte v) {html_elem_tid = v;}
|
||||
public void Html_size_(int w, int h) {this.html_w = w; this.html_h = h;}
|
||||
public void Html_gallery_mgr_h_(int v) {html_gallery_mgr_h = v;}
|
||||
@@ -120,7 +121,7 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
this.orig_ttl_md5 = Xof_file_wkr_.Md5_fast(v);
|
||||
}
|
||||
|
||||
public Xof_meta_itm Meta_itm() {return meta_itm;} private Xof_meta_itm meta_itm;
|
||||
public Xof_meta_itm Dbmeta_itm() {return meta_itm;} private Xof_meta_itm meta_itm;
|
||||
public void Trg_repo_itm_(Xof_repo_itm v) {
|
||||
trg_repo_itm = v;
|
||||
trg_repo_root = trg_repo_itm == null ? Bry_.Empty : trg_repo_itm.Root_http();
|
||||
|
||||
@@ -68,7 +68,7 @@ public class Xow_file_mgr implements GfoInvkAble {
|
||||
}
|
||||
public static final byte Version_null = Byte_.Max_value_127, Version_1 = 1, Version_2 = 2;
|
||||
public Xowe_repo_mgr Repo_mgr() {return repo_mgr;} private Xowe_repo_mgr repo_mgr;
|
||||
public Xof_meta_mgr Meta_mgr() {return meta_mgr;} private Xof_meta_mgr meta_mgr;
|
||||
public Xof_meta_mgr Dbmeta_mgr() {return meta_mgr;} private Xof_meta_mgr meta_mgr;
|
||||
public Xof_cfg_download Cfg_download() {return cfg_download;} private Xof_cfg_download cfg_download = new Xof_cfg_download();
|
||||
public void Cfg_set(String grp, String key, String val) { // TEST: should only be called by tests
|
||||
if (test_grps == null) test_grps = Hash_adp_.new_();
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
|
||||
class Xofc_dir_tbl implements Rls_able {
|
||||
private String tbl_name = "file_cache_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "file_cache_dir"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_id, fld_name;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
@@ -31,8 +31,8 @@ class Xofc_dir_tbl implements Rls_able {
|
||||
fld_id = flds.Add_int_pkey(fld_prefix + "id");
|
||||
fld_name = flds.Add_str(fld_prefix + "name", 255);
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "name", fld_name)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ class Xofc_dir_tbl implements Rls_able {
|
||||
}
|
||||
public void Select_all(List_adp list) {
|
||||
list.Clear();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next())
|
||||
list.Add(new_itm(rdr));
|
||||
|
||||
@@ -120,7 +120,7 @@ class Xofc_fil_mgr {
|
||||
private void Fsys_delete(Xof_url_bldr url_bldr, Xoae_wiki_mgr wiki_mgr, Xoa_repo_mgr repo_mgr, Xofc_dir_mgr dir_mgr, Xofc_fil_itm itm) {
|
||||
byte mode_id = itm.Is_orig() ? Xof_repo_itm_.Mode_orig : Xof_repo_itm_.Mode_thumb;
|
||||
byte[] wiki_domain = dir_mgr.Get_by_id(itm.Dir_id()).Name();
|
||||
Xowe_wiki wiki = wiki_mgr.Get_by_key_or_make(wiki_domain);
|
||||
Xowe_wiki wiki = wiki_mgr.Get_by_or_make(wiki_domain);
|
||||
wiki.Init_assert();
|
||||
Xof_repo_itm trg_repo = repo_mgr.Get_by_primary(wiki_domain);
|
||||
byte[] ttl = itm.Name();
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
|
||||
class Xofc_fil_tbl implements Rls_able {
|
||||
private String tbl_name = "file_cache_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "file_cache_fil"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_uid, fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_page, fld_ext, fld_size, fld_cache_time;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_itm_stmt, select_itm_v2_stmt;
|
||||
public Db_conn Conn() {return conn;}
|
||||
@@ -37,7 +37,7 @@ class Xofc_fil_tbl implements Rls_able {
|
||||
fld_h = flds.Add_int(fld_prefix + "h");
|
||||
fld_time = flds.Add_int(fld_prefix + "thumbtime");
|
||||
if (schema_is_1) {
|
||||
fld_page = Db_meta_fld.Key_null;
|
||||
fld_page = Dbmeta_fld_itm.Key_null;
|
||||
}
|
||||
else {
|
||||
fld_page = flds.Add_int(fld_prefix + "page");
|
||||
@@ -46,8 +46,8 @@ class Xofc_fil_tbl implements Rls_able {
|
||||
fld_size = flds.Add_long(fld_prefix + "size");
|
||||
fld_cache_time = flds.Add_long("cache_time");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "fil", fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_cache_time, fld_uid)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "fil", fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_cache_time, fld_uid)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -122,7 +122,7 @@ class Xofc_fil_tbl implements Rls_able {
|
||||
}
|
||||
public void Select_all(Bry_bfr fil_key_bldr, Ordered_hash hash) {
|
||||
hash.Clear();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
Xofc_fil_itm fil_itm = new_itm(rdr);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user