mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
v2.3.1.1
This commit is contained in:
parent
f495595da4
commit
d279c70606
@ -26,6 +26,12 @@ public class Byte_ {
|
||||
;
|
||||
public static byte cast_(Object o) {try {return (Byte)o;} catch (Exception e) {throw Err_.type_mismatch_exc_(e, byte.class, o);}}
|
||||
public static byte parse_(String raw) {return Byte.parseByte(raw);}
|
||||
public static byte parse_or_(String raw, byte or) {
|
||||
if (raw == null) return or;
|
||||
try {
|
||||
return parse_(raw);
|
||||
} catch (Exception e) {Err_.Noop(e); return or;}
|
||||
}
|
||||
public static byte By_int(int v) {return v > 127 ? (byte)(v - 256) : (byte)v;} // PERF?: (byte)(v & 0xff)
|
||||
public static int Xto_int(byte v) {return v < 0 ? (int)v + 256 : v;}
|
||||
public static String Xto_str(byte v) {return new Byte(v).toString();}
|
||||
|
@ -47,7 +47,8 @@ public class IoEngine_system extends IoEngine_base {
|
||||
DeleteFil_lang(fil, url);
|
||||
}
|
||||
@Override public boolean ExistsFil_api(Io_url url) {
|
||||
return new File(url.Xto_api()).exists();
|
||||
File f = new File(url.Xto_api());
|
||||
return f.exists();
|
||||
}
|
||||
@Override public void SaveFilText_api(IoEngine_xrg_saveFilStr mpo) {
|
||||
Io_url url = mpo.Url();
|
||||
@ -85,7 +86,11 @@ public class IoEngine_system extends IoEngine_base {
|
||||
@SuppressWarnings("resource")
|
||||
@Override public String LoadFilStr(IoEngine_xrg_loadFilStr args) {
|
||||
Io_url url = args.Url();
|
||||
|
||||
boolean file_exists = ExistsFil_api(url); // check if file exists first to avoid throwing exception; note that most callers pass Missing_ignored; DATE:2015-02-24
|
||||
if (!file_exists) {
|
||||
if (args.MissingIgnored()) return "";
|
||||
else throw Err_Fil_NotFound(url);
|
||||
}
|
||||
// get reader for file
|
||||
InputStream stream = null;
|
||||
try {stream = new FileInputStream(url.Xto_api());}
|
||||
@ -600,7 +605,8 @@ class Io_stream_rdr_http implements Io_stream_rdr {
|
||||
if (read_failed) {
|
||||
}
|
||||
else {
|
||||
prog_dlg.Log_wtr().Log_msg_to_url_fmt(session_fil, "download pass: src='~{0}' trg='~{1}'", src_str, xrg.Trg().Raw());
|
||||
if (prog_dlg != null)
|
||||
prog_dlg.Log_wtr().Log_msg_to_url_fmt(session_fil, "download pass: src='~{0}' trg='~{1}'", src_str, xrg.Trg().Raw());
|
||||
xrg.Rslt_(IoEngine_xrg_downloadFil.Rslt_pass);
|
||||
}
|
||||
xrg.Prog_running_(false);
|
||||
|
@ -34,10 +34,11 @@ public class Db_conn {
|
||||
public Db_stmt Stmt_select(String tbl, String[] cols, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, cols));}
|
||||
public Db_stmt Stmt_select(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary()));}
|
||||
public void Exec_create_tbl_and_idx(Db_meta_tbl meta) {
|
||||
engine.Exec_create_tbl(meta);
|
||||
engine.Exec_create_idx(Gfo_usr_dlg_.Null, meta.Idxs());
|
||||
engine.Exec_ddl_create_tbl(meta);
|
||||
engine.Exec_ddl_create_idx(Gfo_usr_dlg_.Null, meta.Idxs());
|
||||
}
|
||||
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_create_idx(usr_dlg, idxs);}
|
||||
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_ddl_create_idx(usr_dlg, idxs);}
|
||||
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {engine.Exec_ddl_append_fld(tbl, fld);}
|
||||
public Db_stmt Rls_reg(Db_stmt stmt) {rls_list.Add(stmt); return stmt;}
|
||||
public void Conn_term() {
|
||||
int len = rls_list.Count();
|
||||
|
@ -17,9 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.dbs; import gplx.*;
|
||||
public class Db_meta_fld {
|
||||
public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement) {
|
||||
public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement, Object default_value) {
|
||||
this.name = name; this.tid = tid; this.len = len;
|
||||
this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement;
|
||||
this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement; this.default_value = default_value;
|
||||
}
|
||||
public int Tid() {return tid;} private final int tid;
|
||||
public String Name() {return name;} private final String name;
|
||||
@ -27,7 +27,9 @@ public class Db_meta_fld {
|
||||
public boolean Nullable() {return nullable;} private final boolean nullable;
|
||||
public boolean Primary() {return primary;} private final boolean primary;
|
||||
public boolean Autoincrement() {return autoincrement;} private final boolean autoincrement;
|
||||
public Object Default_value() {return default_value;} private final Object default_value;
|
||||
public static final int Tid_bool = 0, Tid_byte = 1, Tid_short = 2, Tid_int = 3, Tid_long = 4, Tid_float = 5, Tid_double = 6, Tid_str = 7, Tid_text = 8, Tid_bry = 9;
|
||||
public static final String[] Ary_empy = String_.Ary_empty;
|
||||
public static final String Key_null = null;
|
||||
public static final String[] Ary_empy = String_.Ary_empty;
|
||||
public static final Object Default_value_null = null;
|
||||
}
|
||||
|
@ -40,20 +40,23 @@ public class Db_meta_fld_list {
|
||||
}
|
||||
return rv.XtoStrAry();
|
||||
}
|
||||
public String Add_bool(String name) {return Add(name, Db_meta_fld.Tid_bool, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_byte(String name) {return Add(name, Db_meta_fld.Tid_byte, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_short(String name) {return Add(name, Db_meta_fld.Tid_short, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_int(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_int_pkey(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.N);}
|
||||
public String Add_int_pkey_autonum(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.Y);}
|
||||
public String Add_long(String name) {return Add(name, Db_meta_fld.Tid_long, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_float(String name) {return Add(name, Db_meta_fld.Tid_float, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_double(String name) {return Add(name, Db_meta_fld.Tid_double, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_str(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_text(String name) {return Add(name, Db_meta_fld.Tid_text, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add_bry(String name) {return Add(name, Db_meta_fld.Tid_bry, Len_null, Bool_.N, Bool_.N, Bool_.N);}
|
||||
public String Add(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement) {
|
||||
Db_meta_fld fld = new Db_meta_fld(name, tid, len, nullable, primary, autoincrement);
|
||||
public String Add_bool(String name) {return Add(name, Db_meta_fld.Tid_bool, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_byte(String name) {return Add(name, Db_meta_fld.Tid_byte, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_short(String name) {return Add(name, Db_meta_fld.Tid_short, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_int(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_int_pkey(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_int_pkey_autonum(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.Y, Db_meta_fld.Default_value_null);}
|
||||
public String Add_int_dflt(String name, int dflt) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N, dflt);}
|
||||
public String Add_long(String name) {return Add(name, Db_meta_fld.Tid_long, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_float(String name) {return Add(name, Db_meta_fld.Tid_float, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_double(String name) {return Add(name, Db_meta_fld.Tid_double, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_str(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_str_dflt(String name, int len, String dflt)
|
||||
{return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N, dflt);}
|
||||
public String Add_text(String name) {return Add(name, Db_meta_fld.Tid_text, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add_bry(String name) {return Add(name, Db_meta_fld.Tid_bry, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);}
|
||||
public String Add(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement, Object default_value) {
|
||||
Db_meta_fld fld = new Db_meta_fld(name, tid, len, nullable, primary, autoincrement, default_value);
|
||||
flds.Add(name, fld);
|
||||
keys.Add(name);
|
||||
return name;
|
||||
|
@ -29,6 +29,7 @@ public interface Db_engine {
|
||||
void Conn_open();
|
||||
void Conn_term();
|
||||
Object Exec_as_obj(Db_qry qry);
|
||||
void Exec_create_tbl(Db_meta_tbl meta);
|
||||
void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary);
|
||||
void Exec_ddl_create_tbl(Db_meta_tbl meta);
|
||||
void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary);
|
||||
void Exec_ddl_append_fld(String tbl, Db_meta_fld fld);
|
||||
}
|
||||
|
@ -53,8 +53,8 @@ public abstract class Db_engine_sql_base implements Db_engine {
|
||||
}
|
||||
catch (Exception exc) {throw Err_.err_(exc, "exec reader failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));}
|
||||
}
|
||||
public void Exec_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());}
|
||||
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {
|
||||
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());}
|
||||
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Db_meta_idx idx = ary[i];
|
||||
@ -62,6 +62,9 @@ public abstract class Db_engine_sql_base implements Db_engine {
|
||||
Exec_as_int(idx.To_sql_create());
|
||||
}
|
||||
}
|
||||
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {
|
||||
Exec_as_int(Db_sqlbldr__sqlite.I.Bld_alter_tbl_add(tbl, fld));
|
||||
}
|
||||
@gplx.Virtual public DataRdr New_rdr(ResultSet rdr, String sql) {return gplx.stores.Db_data_rdr_.new_(rdr, sql);}
|
||||
@gplx.Virtual public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_ansi();}
|
||||
@gplx.Internal protected abstract Connection Conn_new();
|
||||
|
@ -34,10 +34,11 @@ public class Db_engine__mem implements Db_engine {
|
||||
public Db_rdr New_rdr_by_obj(Object rdr, String sql) {throw Err_.not_implemented_();}
|
||||
public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {throw Err_.not_implemented_();}
|
||||
public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();}
|
||||
public void Exec_create_tbl(Db_meta_tbl meta) {
|
||||
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {
|
||||
Mem_tbl mem_tbl = new Mem_tbl();
|
||||
tbl_hash.AddReplace(meta.Name(), mem_tbl);
|
||||
}
|
||||
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index
|
||||
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index
|
||||
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {}
|
||||
public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {}
|
||||
}
|
||||
|
@ -29,7 +29,8 @@ public class Null_engine implements Db_engine {
|
||||
public void Txn_bgn() {}
|
||||
public void Txn_end() {}
|
||||
public Object Exec_as_obj(Db_qry cmd) {return cmd.Exec_is_rdr() ? (Object)DataRdr_.Null : -1;}
|
||||
public void Exec_create_tbl(Db_meta_tbl meta) {}
|
||||
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {}
|
||||
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {}
|
||||
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {}
|
||||
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {}
|
||||
public static final Null_engine _ = new Null_engine(); Null_engine() {}
|
||||
}
|
||||
|
@ -54,8 +54,10 @@ public class TdbEngine implements Db_engine {
|
||||
public void FlushTbl(TdbTable tbl) {
|
||||
saveMgr.SaveFile(db, tbl.File());
|
||||
}
|
||||
public void Exec_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();}
|
||||
public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();}
|
||||
public void Exec_ddl_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();}
|
||||
public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();}
|
||||
public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {throw Err_.not_implemented_();}
|
||||
|
||||
|
||||
HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_();
|
||||
public static final TdbEngine _ = new TdbEngine();
|
||||
|
@ -40,24 +40,44 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr {
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
}
|
||||
public String Bld_create_tbl(Db_meta_tbl tbl) {
|
||||
tmp_bfr.Add_str_ascii("CREATE TABLE ").Add_str_ascii(tbl.Name()).Add_byte_nl();
|
||||
tmp_bfr.Add_str_ascii("CREATE TABLE IF NOT EXISTS ").Add_str_ascii(tbl.Name()).Add_byte_nl();
|
||||
Db_meta_fld[] flds = tbl.Flds();
|
||||
int flds_len = flds.length;
|
||||
for (int i = 0; i < flds_len; ++i) {
|
||||
Db_meta_fld fld = flds[i];
|
||||
tmp_bfr.Add_byte(i == 0 ? Byte_ascii.Paren_bgn : Byte_ascii.Comma).Add_byte_space();
|
||||
tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space();
|
||||
Tid_to_sql(tmp_bfr, fld.Tid(), fld.Len()); tmp_bfr.Add_byte_space();
|
||||
tmp_bfr.Add_str_ascii(fld.Nullable() ? "NULL " : "NOT NULL ");
|
||||
if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY ");
|
||||
if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT ");
|
||||
tmp_bfr.Del_by_1(); // remove trailing space
|
||||
Bld_fld(tmp_bfr, fld);
|
||||
tmp_bfr.Add_byte_nl();
|
||||
}
|
||||
tmp_bfr.Add_str_ascii(");");
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
}
|
||||
public void Tid_to_sql(Bry_bfr tmp_bfr, int tid, int len) {// REF: https://www.sqlite.org/datatype3.html
|
||||
public String Bld_alter_tbl_add(String tbl, Db_meta_fld fld) {
|
||||
tmp_bfr.Add_str_ascii("ALTER TABLE ").Add_str_ascii(tbl).Add_str_ascii(" ADD ");
|
||||
Bld_fld(tmp_bfr, fld);
|
||||
tmp_bfr.Add_byte_semic();
|
||||
return tmp_bfr.Xto_str_and_clear();
|
||||
}
|
||||
private void Bld_fld(Bry_bfr tmp_bfr, Db_meta_fld fld) {
|
||||
tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space();
|
||||
Tid_to_sql(tmp_bfr, fld.Tid(), fld.Len()); tmp_bfr.Add_byte_space();
|
||||
tmp_bfr.Add_str_ascii(fld.Nullable() ? "NULL " : "NOT NULL ");
|
||||
if (fld.Default_value() != Db_meta_fld.Default_value_null) {
|
||||
tmp_bfr.Add_str_ascii("DEFAULT ");
|
||||
boolean quote = Bool_.N;
|
||||
switch (fld.Tid()) {
|
||||
case Db_meta_fld.Tid_str: case Db_meta_fld.Tid_text: quote = Bool_.Y; break;
|
||||
}
|
||||
if (quote) tmp_bfr.Add_byte_apos();
|
||||
tmp_bfr.Add_str_utf8(Object_.Xto_str_strict_or_null(fld.Default_value()));
|
||||
if (quote) tmp_bfr.Add_byte_apos();
|
||||
tmp_bfr.Add_byte_space();
|
||||
}
|
||||
if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY ");
|
||||
if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT ");
|
||||
tmp_bfr.Del_by_1(); // remove trailing space
|
||||
}
|
||||
public static void Tid_to_sql(Bry_bfr tmp_bfr, int tid, int len) {// REF: https://www.sqlite.org/datatype3.html
|
||||
switch (tid) {
|
||||
case Db_meta_fld.Tid_bool: tmp_bfr.Add_str_ascii("boolean"); break;
|
||||
case Db_meta_fld.Tid_byte: tmp_bfr.Add_str_ascii("tinyint"); break;
|
||||
|
@ -38,7 +38,7 @@ public class Db_sqlbldr_tst {
|
||||
flds.Add_bry("fld_bry");
|
||||
fxt.Test_create_tbl(Db_meta_tbl.new_("tbl_name", flds.To_fld_ary())
|
||||
, String_.Concat_lines_nl_skip_last
|
||||
( "CREATE TABLE tbl_name"
|
||||
( "CREATE TABLE IF NOT EXISTS tbl_name"
|
||||
, "( fld_int_pkey integer NOT NULL PRIMARY KEY"
|
||||
, ", fld_bool boolean NOT NULL"
|
||||
, ", fld_short smallint NOT NULL"
|
||||
@ -52,13 +52,17 @@ public class Db_sqlbldr_tst {
|
||||
, ");"
|
||||
));
|
||||
}
|
||||
@Test public void Tbl_alter_tbl_add() {
|
||||
Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
flds.Add_int_dflt("fld_int", -1);
|
||||
flds.Add_str_dflt("fld_str", 255, "a");
|
||||
fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_int"), "ALTER TABLE tbl_name ADD fld_int integer NOT NULL DEFAULT -1;");
|
||||
fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_str"), "ALTER TABLE tbl_name ADD fld_str varchar(255) NOT NULL DEFAULT 'a';");
|
||||
}
|
||||
}
|
||||
class Db_sqlbldr_fxt {
|
||||
private Db_sqlbldr__sqlite sqlbldr = Db_sqlbldr__sqlite.I;
|
||||
public void Test_create_idx(Db_meta_idx idx, String expd) {
|
||||
Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));
|
||||
}
|
||||
public void Test_create_tbl(Db_meta_tbl tbl, String expd) {
|
||||
Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));
|
||||
}
|
||||
public void Test_create_idx(Db_meta_idx idx, String expd) {Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));}
|
||||
public void Test_create_tbl(Db_meta_tbl tbl, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));}
|
||||
public void Test_alter_tbl_add(String tbl, Db_meta_fld fld, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_alter_tbl_add(tbl, fld));}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ import gplx.core.strings.*; import gplx.core.criterias.*;
|
||||
import gplx.dbs.qrys.*;
|
||||
public class Sql_qry_wtr_ansi implements Sql_qry_wtr {
|
||||
private final String_bldr sb = String_bldr_.new_();
|
||||
private boolean prepare = false;
|
||||
public boolean prepare = false;
|
||||
public String Xto_str(Db_qry cmd, boolean prepare) {
|
||||
synchronized (sb) {
|
||||
this.prepare = prepare;
|
||||
|
@ -18,6 +18,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
|
||||
class Db_sys_regy_tbl {
|
||||
private final String tbl_name;
|
||||
private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_();
|
||||
private static final String
|
||||
Fld_regy_grp = Flds.Add_str("regy_grp", 1024)
|
||||
, Fld_regy_key = Flds.Add_str("regy_key", 1024)
|
||||
, Fld_regy_val = Flds.Add_str("regy_val", 4096)
|
||||
;
|
||||
public static Db_meta_tbl new_meta(String tbl) {
|
||||
return Db_meta_tbl.new_(tbl, Flds.To_fld_ary()
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary())
|
||||
);
|
||||
}
|
||||
private Db_meta_tbl meta;
|
||||
private Db_conn conn;
|
||||
public Db_sys_regy_tbl(Db_url url, String tbl_name) {
|
||||
@ -46,15 +57,4 @@ class Db_sys_regy_tbl {
|
||||
return rdr.Move_next() ? rdr.Read_str(Fld_regy_val) : or;
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_();
|
||||
private static final String
|
||||
Fld_regy_grp = Flds.Add_str("regy_grp", 1024)
|
||||
, Fld_regy_key = Flds.Add_str("regy_key", 1024)
|
||||
, Fld_regy_val = Flds.Add_str("regy_val", 4096)
|
||||
;
|
||||
public static Db_meta_tbl new_meta(String tbl) {
|
||||
return Db_meta_tbl.new_(tbl, Flds.To_fld_ary()
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -75,9 +75,10 @@ public class Bry_rdr {
|
||||
}
|
||||
return bgn == pos ? or_bry : Bry_.Mid(src, bgn, src_len);
|
||||
}
|
||||
public boolean Read_yn_to_pipe() {
|
||||
boolean rv = src[pos] == Byte_ascii.Ltr_y;
|
||||
pos += 2; // 1 for y/n; 1 for pipe
|
||||
public boolean Read_yn_to_pipe() {return Read_byte_to_pipe() == Byte_ascii.Ltr_y;}
|
||||
public byte Read_byte_to_pipe() {
|
||||
byte rv = src[pos];
|
||||
pos += 2; // 1 for byte; 1 for pipe;
|
||||
return rv;
|
||||
}
|
||||
public double Read_double_to_pipe() {return Read_double_to(Byte_ascii.Pipe);}
|
||||
|
@ -42,6 +42,7 @@ public class Btrie_slim_mgr implements Btrie_mgr {
|
||||
}
|
||||
public Btrie_slim_mgr Add_bry_tid(byte[] bry, byte tid) {return (Btrie_slim_mgr)Add_obj(bry, Byte_obj_val.new_(tid));}
|
||||
public Btrie_slim_mgr Add_str_byte(String key, byte val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), Byte_obj_val.new_(val));}
|
||||
public Btrie_slim_mgr Add_str_int(String key, int val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), Int_obj_val.new_(val));}
|
||||
public Btrie_slim_mgr Add_bry(String key, String val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), Bry_.new_utf8_(val));}
|
||||
public Btrie_slim_mgr Add_bry(String key, byte[] val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), val);}
|
||||
public Btrie_slim_mgr Add_bry(byte[] v) {return (Btrie_slim_mgr)Add_obj(v, v);}
|
||||
|
@ -21,10 +21,11 @@ public class Db_cfg_tbl {
|
||||
private String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_grp, fld_key, fld_val;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1, String tbl_v1, String tbl_v2) {
|
||||
public Db_conn Conn() {return conn;}
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, String tbl_v1, String tbl_v2) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = tbl_v1;
|
||||
fld_prefix = "cfg_";
|
||||
}
|
||||
@ -54,6 +55,8 @@ public class Db_cfg_tbl {
|
||||
if (rv == Int_.MinValue) throw Err_.new_fmt_("dbs.cfg_tbl.Select_as_int_or_fail: tbl={0} grp={1} key={2}", tbl_name, grp, key);
|
||||
return rv;
|
||||
}
|
||||
public long Select_as_long_or(String grp, String key, long or) {return Long_.parse_or_(Select_as_str_or(grp, key, null), or);}
|
||||
public byte Select_as_byte_or(String grp, String key, byte or) {return Byte_.parse_or_(Select_as_str_or(grp, key, null), or);}
|
||||
public int Select_as_int_or(String grp, String key, int or) {return Int_.parse_or_(Select_as_str_or(grp, key, null), or);}
|
||||
public String Select_as_str_or(String grp, String key, String or) {
|
||||
if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, String_.Ary(fld_val), fld_grp, fld_key));
|
||||
|
@ -23,10 +23,10 @@ public class Fsd_bin_tbl {
|
||||
private String fld_owner_id, fld_owner_tid, fld_part_id, fld_data_url, fld_data;
|
||||
private Db_conn conn;
|
||||
private Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_kb);
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_bin";
|
||||
fld_prefix = "bin_";
|
||||
}
|
||||
|
@ -21,10 +21,10 @@ public class Fsd_dir_tbl {
|
||||
private String tbl_name = "file_data_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_id, fld_owner_id, fld_name;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_dir";
|
||||
fld_prefix = "dir_";
|
||||
}
|
||||
|
@ -22,10 +22,10 @@ public class Fsd_fil_tbl {
|
||||
private 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 String Idx_owner;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_fil";
|
||||
fld_prefix = "fil_";
|
||||
}
|
||||
|
@ -23,10 +23,10 @@ public class Fsd_thm_tbl {
|
||||
private String fld_id, fld_owner_id, fld_w, fld_h, fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash, fld_thumbtime;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_select_by_fil_w;
|
||||
private Fsm_atr_fil atr_fil;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1, Fsm_atr_fil atr_fil) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, Fsm_atr_fil atr_fil) {
|
||||
this.conn = new_conn; flds.Clear(); this.atr_fil = atr_fil;
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_xtn_thm";
|
||||
fld_prefix = "thm_";
|
||||
}
|
||||
|
@ -25,14 +25,14 @@ public class Fsm_abc_mgr implements RlsAble {
|
||||
public Fsm_cfg_mgr Cfg_mgr() {return cfg_mgr;} private final Fsm_cfg_mgr cfg_mgr = new Fsm_cfg_mgr();
|
||||
public int Next_id() {return cfg_mgr.Next_id();}
|
||||
private static final String Db_conn_bldr_type = "gplx.fsdb.abc";
|
||||
public void Init_for_db(boolean version_is_1, Io_url dir) {
|
||||
public void Init_for_db(boolean schema_is_1, Io_url dir) {
|
||||
Io_url abc_url = dir.GenSubFil("fsdb.abc.sqlite3");
|
||||
Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, abc_url);
|
||||
boolean created = conn_data.Created();
|
||||
conn = conn_data.Conn();
|
||||
atr_mgr.Init_for_db(conn, created, version_is_1, dir, this);
|
||||
bin_mgr.Init_for_db(conn, created, version_is_1, dir);
|
||||
cfg_mgr.Init_for_db(conn, created, version_is_1);
|
||||
atr_mgr.Init_for_db(conn, created, schema_is_1, dir, this);
|
||||
bin_mgr.Init_for_db(conn, created, schema_is_1, dir);
|
||||
cfg_mgr.Init_for_db(conn, created, schema_is_1);
|
||||
if (created) {
|
||||
this.Txn_save(); // immediately save new entries in atr,cfg
|
||||
}
|
||||
|
@ -27,10 +27,10 @@ public class Fsm_atr_fil implements RlsAble {
|
||||
this.abc_mgr = abc_mgr;
|
||||
Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, io_url);
|
||||
boolean created = conn_data.Created(); conn = conn_data.Conn();
|
||||
boolean version_is_1 = Bool_.Y;
|
||||
tbl_dir.Conn_(conn, created, version_is_1);
|
||||
tbl_fil.Conn_(conn, created, version_is_1);
|
||||
tbl_thm.Conn_(conn, created, version_is_1, this);
|
||||
boolean schema_is_1 = Bool_.Y;
|
||||
tbl_dir.Conn_(conn, created, schema_is_1);
|
||||
tbl_fil.Conn_(conn, created, schema_is_1);
|
||||
tbl_thm.Conn_(conn, created, schema_is_1, this);
|
||||
}
|
||||
public Fsm_abc_mgr Abc_mgr() {return abc_mgr;} private Fsm_abc_mgr abc_mgr;
|
||||
public Db_conn Conn() {return conn;} private Db_conn conn;
|
||||
|
@ -56,8 +56,8 @@ public class Fsm_atr_mgr implements RlsAble {
|
||||
itm.Rls();
|
||||
}
|
||||
}
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1, Io_url dir, Fsm_abc_mgr abc_mgr) {
|
||||
tbl.Conn_(conn, created, version_is_1);
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1, Io_url dir, Fsm_abc_mgr abc_mgr) {
|
||||
tbl.Conn_(conn, created, schema_is_1);
|
||||
if (created) {
|
||||
Fsm_atr_fil itm = Fsm_atr_fil.make_(abc_mgr, Id_0, url_(dir, Id_0), Path_bgn_0);
|
||||
this.itms = new Fsm_atr_fil[] {itm};
|
||||
|
@ -21,9 +21,9 @@ public class Fsm_atr_tbl {
|
||||
private String tbl_name = "file_meta_atr"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_uid, fld_url, fld_path_bgn;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr();
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_db_atr";
|
||||
}
|
||||
fld_uid = flds.Add_int("uid");
|
||||
|
@ -61,9 +61,9 @@ public class Fsm_bin_mgr implements RlsAble {
|
||||
Fsm_bin_fil bin_fil = fil_ary[db_id];
|
||||
return bin_fil.Insert(bin_id, owner_tid, bin_len, bin_rdr);
|
||||
}
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1, Io_url dir) {
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1, Io_url dir) {
|
||||
this.dir = dir;
|
||||
tbl.Conn_(conn, created, version_is_1);
|
||||
tbl.Conn_(conn, created, schema_is_1);
|
||||
if (created)
|
||||
this.Itms_add(0);
|
||||
else {
|
||||
|
@ -21,9 +21,9 @@ public class Fsm_bin_tbl {
|
||||
private String tbl_name = "file_meta_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_uid, fld_url, fld_bin_len, fld_bin_max;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr();
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_db_bin";
|
||||
}
|
||||
fld_uid = flds.Add_int("uid");
|
||||
|
@ -59,8 +59,8 @@ public class Fsm_cfg_mgr {
|
||||
return grp;
|
||||
}
|
||||
public static Fsm_cfg_mgr new_() {return new Fsm_cfg_mgr();}
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1) {
|
||||
cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2);
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1) {
|
||||
cfg_tbl.Conn_(conn, created, schema_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2);
|
||||
if (created) {
|
||||
cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_next_id , "1"); // start next_id at 1
|
||||
cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_schema_thm_page , "y"); // new dbs automatically have page and time in fsdb_xtn_tm
|
||||
|
@ -22,24 +22,27 @@ import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
|
||||
public class Fsm_mnt_mgr implements GfoInvkAble {
|
||||
private final Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(); private final Fsm_mnt_tbl mnt_tbl = new Fsm_mnt_tbl();
|
||||
private Fsm_abc_mgr[] ary; private int ary_len = 0;
|
||||
private static final String Db_conn_bldr_type_mnt = "gplx.fsdb.mnt";
|
||||
public void Init_by_wiki(Io_url db_dir, boolean version_is_1) {
|
||||
Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type_mnt, db_dir.GenSubFil("wiki.mnt.sqlite3"));
|
||||
Fsm_mnt_itm[] mnts = Mnts__load_or_make(conn_data, version_is_1);
|
||||
public static final String Mnt_name = "wiki.mnt.sqlite3";
|
||||
public void Init_by_wiki(Io_url db_dir, boolean schema_is_1) {
|
||||
Io_url mnt_dir = db_dir.GenSubFil(Mnt_name);
|
||||
Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", mnt_dir);
|
||||
Db_conn conn = conn_data.Conn();
|
||||
boolean created = conn_data.Created();
|
||||
Fsm_mnt_itm[] mnts = Mnts__load_or_make(conn, created, schema_is_1);
|
||||
ary_len = mnts.length;
|
||||
ary = new Fsm_abc_mgr[ary_len];
|
||||
for (int i = 0; i < ary_len; i++) {
|
||||
Fsm_mnt_itm itm = mnts[i];
|
||||
Fsm_abc_mgr abc_mgr = new Fsm_abc_mgr();
|
||||
ary[i] = abc_mgr;
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
Io_url abc_url = db_dir.GenSubFil_nest(itm.Url(), "fsdb.abc.sqlite3");
|
||||
abc_mgr.Init_for_db(version_is_1, abc_url.OwnerDir());
|
||||
abc_mgr.Init_for_db(schema_is_1, abc_url.OwnerDir());
|
||||
}
|
||||
else
|
||||
throw Err_.not_implemented_();
|
||||
}
|
||||
if (conn_data.Created()) Fsm_mnt_mgr.Patch(this);
|
||||
if (created) Fsm_mnt_mgr.Patch(this);
|
||||
insert_to_mnt = cfg_tbl.Select_as_int_or_fail("core", "mnt.insert_idx");
|
||||
if (ary_len > 0) {
|
||||
Db_cfg_grp cfg_grp = this.Mnts__at(0).Cfg_mgr().Grps_get_or_load(Xof_fsdb_mgr_cfg.Grp_xowa);
|
||||
@ -120,10 +123,9 @@ public class Fsm_mnt_mgr implements GfoInvkAble {
|
||||
.Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_fix_default , "y")
|
||||
;
|
||||
}
|
||||
private Fsm_mnt_itm[] Mnts__load_or_make(Db_conn_bldr_data conn_data, boolean version_is_1) {
|
||||
Db_conn conn = conn_data.Conn(); boolean created = conn_data.Created();
|
||||
cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2);
|
||||
mnt_tbl.Conn_(conn, created, version_is_1);
|
||||
private Fsm_mnt_itm[] Mnts__load_or_make(Db_conn conn, boolean created, boolean schema_is_1) {
|
||||
cfg_tbl.Conn_(conn, created, schema_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2);
|
||||
mnt_tbl.Conn_(conn, created, schema_is_1);
|
||||
if (created) cfg_tbl.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user));
|
||||
return mnt_tbl.Select_all();
|
||||
}
|
||||
|
@ -21,10 +21,10 @@ public class Fsm_mnt_tbl {
|
||||
private String tbl_name = "file_meta_mnt"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_id, fld_name, fld_url;
|
||||
private Db_conn conn;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "fsdb_mnt";
|
||||
fld_prefix = "mnt_";
|
||||
}
|
||||
|
@ -18,10 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa; import gplx.*;
|
||||
import gplx.xowa.apps.fsys.*;
|
||||
import gplx.xowa.files.caches.*; import gplx.xowa.files.imgs.*;
|
||||
import gplx.xowa.urls.encoders.*;
|
||||
import gplx.xowa.wmfs.*;
|
||||
public interface Xoa_app {
|
||||
Xoa_fsys_mgr Fsys_mgr();
|
||||
Xof_cache_mgr File_mgr__cache_mgr();
|
||||
Xof_img_mgr File_mgr__img_mgr();
|
||||
Xowmf_mgr Wmf_mgr();
|
||||
Gfo_usr_dlg Usr_dlg();
|
||||
Bry_bfr_mkr Utl__bfr_mkr();
|
||||
Url_encoder_mgr Utl__encoder_mgr();
|
||||
}
|
||||
|
@ -16,9 +16,9 @@ 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; import gplx.*;
|
||||
import gplx.dbs.*; import gplx.gfui.*;
|
||||
import gplx.dbs.*; import gplx.ios.*; import gplx.gfui.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.langs.*; import gplx.xowa.users.*;
|
||||
import gplx.xowa.hdumps.*; import gplx.xowa.hdumps.core.*;
|
||||
import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.core.*;
|
||||
import gplx.xowa.urls.encoders.*;
|
||||
public class Xoa_app_ {
|
||||
public static void Run(String... args) {
|
||||
@ -26,7 +26,7 @@ public class Xoa_app_ {
|
||||
boot_mgr.Run(args);
|
||||
}
|
||||
public static final String Name = "xowa";
|
||||
public static final String Version = "2.2.4.1";
|
||||
public static final String Version = "2.3.1.1";
|
||||
public static String Build_date = "2012-12-30 00:00:00";
|
||||
public static String Op_sys;
|
||||
public static String User_agent = "";
|
||||
@ -41,8 +41,9 @@ public class Xoa_app_ {
|
||||
|
||||
public static byte Mode = Xoa_app_.Mode_console;
|
||||
public static Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public static void Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v;} private static Gfo_usr_dlg usr_dlg;
|
||||
public static Bry_bfr_mkr Utl_bry_bfr_mkr() {return utl_bry_bfr_mkr;} private static final Bry_bfr_mkr utl_bry_bfr_mkr = new Bry_bfr_mkr();
|
||||
public static Url_encoder_mgr Utl_encoder_mgr() {return encoder_mgr;} private static final Url_encoder_mgr encoder_mgr = new Url_encoder_mgr();
|
||||
public static Bry_bfr_mkr Utl__bfr_mkr() {return utl__bry_bfr_mkr;} private static final Bry_bfr_mkr utl__bry_bfr_mkr = new Bry_bfr_mkr();
|
||||
public static Url_encoder_mgr Utl__encoder_mgr() {return utl__encoder_mgr;} private static final Url_encoder_mgr utl__encoder_mgr = new Url_encoder_mgr();
|
||||
public static Io_stream_zip_mgr Utl__zip_mgr() {return utl__zip_mgr;} private static final Io_stream_zip_mgr utl__zip_mgr = new Io_stream_zip_mgr();
|
||||
|
||||
public static Xoa_gfs_mgr Gfs_mgr() {return gfs_mgr;} public static void Gfs_mgr_(Xoa_gfs_mgr v) {gfs_mgr = v;} private static Xoa_gfs_mgr gfs_mgr;
|
||||
// public static Xoa_lang_mgr Lang_mgr() {return lang_mgr;} public static void Lang_mgr_(Xoa_lang_mgr v) {lang_mgr = v;} private static Xoa_lang_mgr lang_mgr;
|
||||
|
@ -28,7 +28,7 @@ import gplx.xowa.wmfs.*;
|
||||
public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
public Xoae_app(Gfo_usr_dlg usr_dlg, Io_url root_dir, Io_url user_dir, String bin_dir_name) {
|
||||
Xoa_app_.Usr_dlg_(usr_dlg);
|
||||
Io_url.Http_file_str_encoder = Xoa_app_.Utl_encoder_mgr().Fsys();
|
||||
Io_url.Http_file_str_encoder = Xoa_app_.Utl__encoder_mgr().Fsys();
|
||||
fsys_mgr = new Xoa_fsys_mgr(bin_dir_name, root_dir);
|
||||
log_wtr = usr_dlg.Log_wtr();
|
||||
cfg_mgr = new Xoa_cfg_mgr(this);
|
||||
@ -42,7 +42,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
gui_mgr = new Xoa_gui_mgr(this);
|
||||
bldr = new Xob_bldr(this);
|
||||
file_mgr.Ctor_by_app(this);
|
||||
href_parser = new Xoh_href_parser(Xoa_app_.Utl_encoder_mgr().Href(), url_parser.Url_parser());
|
||||
href_parser = new Xoh_href_parser(Xoa_app_.Utl__encoder_mgr().Href(), url_parser.Url_parser());
|
||||
sanitizer = new Xop_sanitizer(parser_amp_mgr, msg_log);
|
||||
user_mgr = new Xou_user_mgr(this, user);
|
||||
sys_cfg = new Xoa_sys_cfg(this);
|
||||
@ -65,6 +65,8 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
public Xof_cache_mgr File_mgr__cache_mgr() {return file_mgr.Cache_mgr();}
|
||||
public Xof_img_mgr File_mgr__img_mgr() {return file_mgr.Img_mgr();}
|
||||
public Xowmf_mgr Wmf_mgr() {return wmf_mgr;} private final Xowmf_mgr wmf_mgr = new Xowmf_mgr();
|
||||
public Bry_bfr_mkr Utl__bfr_mkr() {return Xoa_app_.Utl__bfr_mkr();}
|
||||
public Url_encoder_mgr Utl__encoder_mgr() {return Xoa_app_.Utl__encoder_mgr();}
|
||||
|
||||
|
||||
public Xoa_wiki_mgr Wiki_mgr() {return wiki_mgr;} private Xoa_wiki_mgr wiki_mgr;
|
||||
@ -101,7 +103,6 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
|
||||
public Xoh_file_main_wkr File_main_wkr() {return file_main_wkr;} private Xoh_file_main_wkr file_main_wkr = new Xoh_file_main_wkr();
|
||||
public Btrie_slim_mgr Utl_trie_tblw_ws() {return utl_trie_tblw_ws;} private Btrie_slim_mgr utl_trie_tblw_ws = Xop_tblw_ws_itm.trie_();
|
||||
public Bry_bfr_mkr Utl_bry_bfr_mkr() {return Xoa_app_.Utl_bry_bfr_mkr();}
|
||||
public Gfo_fld_rdr Utl_fld_rdr() {return utl_fld_rdr;} Gfo_fld_rdr utl_fld_rdr = Gfo_fld_rdr.xowa_();
|
||||
public Gfo_log_bfr Log_bfr() {return log_bfr;} private Gfo_log_bfr log_bfr = new Gfo_log_bfr();
|
||||
public Xoa_sys_cfg Sys_cfg() {return sys_cfg;} private Xoa_sys_cfg sys_cfg;
|
||||
@ -167,7 +168,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
Env_.GarbageCollect();
|
||||
}
|
||||
public void Free_mem(boolean clear_ctx) {
|
||||
this.Utl_bry_bfr_mkr().Clear();
|
||||
this.Utl__bfr_mkr().Clear();
|
||||
msg_log.Clear();
|
||||
wiki_mgr.Free_mem(clear_ctx);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ public class Xoapi_view implements GfoInvkAble {
|
||||
public void Save_as() {
|
||||
if (this.Active_tab_is_null()) return;
|
||||
Xog_tab_itm tab = win.Tab_mgr().Active_tab();
|
||||
String file_name = Xoa_app_.Utl_encoder_mgr().Fsys_safe().Encode_str(String_.new_utf8_(tab.Page().Ttl().Full_url())) + ".html";
|
||||
String file_name = Xoa_app_.Utl__encoder_mgr().Fsys_safe().Encode_str(String_.new_utf8_(tab.Page().Ttl().Full_url())) + ".html";
|
||||
String file_url = app.Gui_mgr().Kit().New_dlg_file(Gfui_kit_.File_dlg_type_save, "Select file to save to:").Init_file_(file_name).Ask();
|
||||
if (String_.Len_eq_0(file_url)) return;
|
||||
Io_mgr._.SaveFilStr(file_url, tab.Html_box().Text());
|
||||
|
@ -16,7 +16,7 @@ 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.apps.progs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
import gplx.xowa.apps.fsys.*;
|
||||
import gplx.xowa.apps.fsys.*; import gplx.xowa.files.*;
|
||||
public class Xoa_prog_mgr implements GfoInvkAble {
|
||||
public void Init_by_app(Xoa_fsys_eval cmd_eval) {
|
||||
Gfo_usr_dlg usr_dlg = Xoa_app_.Usr_dlg();
|
||||
|
@ -38,7 +38,7 @@ public class Db_mgr_fxt {
|
||||
Xodb_page_tbl tbl_page = wiki.Db_mgr_as_sql().Tbl_page();
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = tbl_page.Insert_stmt(wiki.Db_mgr_as_sql().Fsys_mgr().Conn_page());
|
||||
stmt = tbl_page.Insert_stmt(wiki.Db_mgr_as_sql().Core_data_mgr().Conn_page());
|
||||
int len = ttls.length;
|
||||
DateAdp modified_on = Tfds.Now_time0_add_min(0);
|
||||
for (int i = 0; i < len; i++) {
|
||||
@ -132,7 +132,7 @@ public class Db_mgr_fxt {
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_create_as_sql();
|
||||
db_mgr.Data_storage_format_(gplx.ios.Io_stream_.Tid_file);
|
||||
db_mgr.Init_by_ns_map("");
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Conn_core();
|
||||
Db_conn conn = db_mgr.Core_data_mgr().Conn_core();
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("xowa_cfg"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("xowa_db"));
|
||||
conn.Exec_qry(Db_qry_delete.new_all_("xowa_ns"));
|
||||
|
@ -41,6 +41,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd {
|
||||
private Xof_fsdb_mgr__sql src_fsdb_mgr;
|
||||
public Xob_fsdb_make(Xob_bldr bldr, Xowe_wiki wiki) {
|
||||
this.Cmd_ctor(bldr, wiki);
|
||||
wiki.File_mgr__fsdb_mode().Tid_make_y_();
|
||||
trg_fsdb_mgr = new Xof_fsdb_mgr__sql();
|
||||
trg_fsdb_mgr.Init_by_wiki(wiki);
|
||||
src_fsdb_mgr = new Xof_fsdb_mgr__sql();
|
||||
|
@ -19,7 +19,7 @@ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xo
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.pages.*;
|
||||
import gplx.xowa.wikis.*;
|
||||
import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.*; import gplx.xowa.gui.*;
|
||||
import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.hdumps.*;
|
||||
import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.html.hdumps.bldrs.*;
|
||||
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wdatas.*;
|
||||
import gplx.xowa.files.fsdb.*; import gplx.fsdb.meta.*;
|
||||
public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink_logger {
|
||||
@ -65,6 +65,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
|
||||
gplx.xowa.xtns.scores.Score_xnde.Log_wkr = log_mgr.Make_wkr();
|
||||
gplx.xowa.xtns.hieros.Hiero_xnde.Log_wkr = log_mgr.Make_wkr();
|
||||
Xof_fsdb_mgr__sql trg_fsdb_mgr = new Xof_fsdb_mgr__sql();
|
||||
wiki.File_mgr__fsdb_mode().Tid_make_y_();
|
||||
trg_fsdb_mgr.Init_by_wiki(wiki);
|
||||
Fsm_mnt_mgr trg_mnt_mgr = trg_fsdb_mgr.Mnt_mgr();
|
||||
trg_mnt_mgr.Insert_to_mnt_(Fsm_mnt_mgr.Mnt_idx_main);
|
||||
|
@ -17,11 +17,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
import gplx.xowa.files.repos.*;
|
||||
class Xob_page_regy_tbl {
|
||||
public static void Reset_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);}
|
||||
public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, byte repo_tid, Xowe_wiki wiki) {
|
||||
Create_data__insert_page(usr_dlg, p, repo_tid, wiki.Db_mgr_as_sql().Fsys_mgr().Get_url(Xodb_file_tid.Tid_core));
|
||||
Create_data__insert_page(usr_dlg, p, repo_tid, wiki.Db_mgr_as_sql().Core_data_mgr().Get_url(Xowd_db_file_.Tid_core));
|
||||
Create_data__insert_redirect(usr_dlg, p, repo_tid, wiki.Fsys_mgr().Root_dir().GenSubFil(Xodb_db_file.Name__wiki_redirect));
|
||||
}
|
||||
public static void Delete_local(Db_conn p) {
|
||||
|
@ -128,7 +128,6 @@ class Xob_xfer_temp_itm_fxt {
|
||||
;
|
||||
public Xob_xfer_temp_itm_fxt Reset() {
|
||||
itm.Clear();
|
||||
img_size.Clear();
|
||||
return this;
|
||||
}
|
||||
public Xob_xfer_temp_itm_fxt Init_rdr_image() {
|
||||
|
@ -16,7 +16,7 @@ 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.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.xowa.dbs.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*;
|
||||
public class Xob_cmd_exec_sql implements Xob_cmd {
|
||||
private Xowe_wiki wiki; private int file_idx = -1; private String sql;
|
||||
public Xob_cmd_exec_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki;}
|
||||
@ -26,8 +26,8 @@ public class Xob_cmd_exec_sql implements Xob_cmd {
|
||||
Xoae_app app = wiki.Appe();
|
||||
wiki.Init_assert(); // force load; needed to pick up MediaWiki ns for MediaWiki:mainpage
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Xodb_file file = fsys_mgr.Get_by_idx(file_idx);
|
||||
Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr();
|
||||
Xowd_db_file file = fsys_mgr.Dbs__get_at(file_idx);
|
||||
app.Usr_dlg().Plog_many("", "", "exec_sql: running sql; file_idx=~{0} sql=~{1}", file_idx, sql);
|
||||
file.Conn().Exec_sql(sql);
|
||||
}
|
||||
|
@ -16,12 +16,13 @@ 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.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.ios.*; import gplx.xowa.bldrs.wikis.redirects.*;
|
||||
import gplx.dbs.*; import gplx.ios.*; import gplx.xowa.bldrs.wikis.redirects.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
import gplx.xowa.bldrs.filters.dansguardians.*;
|
||||
public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInvkAble {
|
||||
private Db_idx_mode idx_mode = Db_idx_mode.Itm_end;
|
||||
private Io_stream_zip_mgr zip_mgr; private byte data_storage_format; private boolean redirect_id_enabled;
|
||||
private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_conn page_conn; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr;
|
||||
private Xodb_mgr_sql db_mgr; private Xowe_core_data_mgr fsys_mgr; private Db_conn page_conn; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr;
|
||||
private int page_count_all, page_count_main = 0; private int txn_commit_interval = 100000; // 100 k
|
||||
private DateAdp modified_latest = DateAdp_.MinValue;
|
||||
private Xop_redirect_mgr redirect_mgr; private Xob_redirect_tbl redirect_tbl;
|
||||
@ -39,7 +40,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
// init db
|
||||
db_mgr = wiki.Db_mgr_as_sql();
|
||||
db_mgr.Data_storage_format_(data_storage_format);
|
||||
fsys_mgr = db_mgr.Fsys_mgr();
|
||||
fsys_mgr = db_mgr.Core_data_mgr();
|
||||
page_conn = fsys_mgr.Conn_page();
|
||||
page_stmt = db_mgr.Tbl_page().Insert_stmt(page_conn);
|
||||
page_conn.Txn_mgr().Txn_bgn_if_none();
|
||||
@ -47,7 +48,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
if (idx_mode.Tid_is_bgn()) Idx_create();
|
||||
|
||||
if (redirect_id_enabled) {
|
||||
redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl_encoder_mgr().Url_ttl()).Create_table();
|
||||
redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl__encoder_mgr().Url_ttl()).Create_table();
|
||||
redirect_tbl.Conn().Txn_mgr().Txn_bgn_if_none();
|
||||
}
|
||||
|
||||
@ -102,18 +103,18 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
Xow_ns_mgr ns_mgr = wiki.Ns_mgr();
|
||||
db_mgr.Tbl_site_stats().Update(page_count_main, page_count_all, ns_mgr.Ns_file().Count()); // save page stats
|
||||
db_mgr.Tbl_xowa_ns().Insert(ns_mgr); // save ns
|
||||
db_mgr.Tbl_xowa_db().Commit_all(db_mgr.Fsys_mgr().Files_ary()); // save dbs; note that dbs can be saved again later
|
||||
db_mgr.Core_data_mgr().Dbs__save(); // save dbs; note that dbs can be saved again later
|
||||
db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "props.modified_latest", modified_latest.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time));
|
||||
if (idx_mode.Tid_is_end()) Idx_create();
|
||||
if (redirect_id_enabled) {
|
||||
redirect_tbl.Conn().Txn_mgr().Txn_end_all();
|
||||
Xodb_file core_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core);
|
||||
Xowd_db_file core_file = fsys_mgr.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core);
|
||||
redirect_tbl.Update_trg_redirect_id(core_file.Url(), 1);
|
||||
redirect_tbl.Update_src_redirect_id(core_file.Url(), page_conn);
|
||||
}
|
||||
}
|
||||
private void Idx_create() {
|
||||
fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid.Tid_core, Xodb_file_tid.Tid_text), Idx_page_title, Idx_page_random);
|
||||
fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xowd_db_file_.Tid_core, Xowd_db_file_.Tid_text), Idx_page_title, Idx_page_random);
|
||||
}
|
||||
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_txn_commit_interval_)) txn_commit_interval = m.ReadInt("v");
|
||||
@ -131,11 +132,11 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
;
|
||||
}
|
||||
class Xob_text_stmts_mgr {
|
||||
public Xob_text_stmts_mgr(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xodb_fsys_mgr fsys_mgr;
|
||||
public Xob_text_stmts_mgr(Xodb_mgr_sql db_mgr, Xowe_core_data_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xowe_core_data_mgr fsys_mgr;
|
||||
public Db_stmt Stmt_at(int i) {return text_stmts[i];}
|
||||
public Db_conn Conn_at(int i) {return text_providers[i];}
|
||||
public int Stmt_by_ns(int ns_file_idx, int text_len) {
|
||||
Xodb_file file = File_get(ns_file_idx, text_len);
|
||||
Xowd_db_file file = File_get(ns_file_idx, text_len);
|
||||
int stmt_idx = file.Id();
|
||||
Db_stmt stmt = null;
|
||||
if (stmt_idx < text_stmts_len) {
|
||||
@ -160,15 +161,15 @@ class Xob_text_stmts_mgr {
|
||||
}
|
||||
text_stmts = null;
|
||||
}
|
||||
Xodb_file File_get(int file_idx, int text_len) {
|
||||
Xowd_db_file File_get(int file_idx, int text_len) {
|
||||
if (file_idx == Xow_ns.Bldr_file_idx_heap) {
|
||||
file_idx = fsys_mgr.Tid_text_idx();
|
||||
Xodb_file file = fsys_mgr.Get_or_make(Xodb_file_tid.Tid_text, file_idx);
|
||||
Xowd_db_file file = Dbs__get_or_make(fsys_mgr, Xowd_db_file_.Tid_text, file_idx);
|
||||
long file_len = file.File_len();
|
||||
long file_max = fsys_mgr.Tid_text_max();
|
||||
if (file_max != Xodb_fsys_mgr.Heap_max_infinite && (file_len + text_len > file_max)) { // file is "full"
|
||||
if (file_max != Xowe_core_data_mgr.Heap_max_infinite && (file_len + text_len > file_max)) { // file is "full"
|
||||
file.Conn().Txn_mgr().Txn_end_all(); // close txn
|
||||
file = fsys_mgr.Make(Xodb_file_tid.Tid_text);
|
||||
file = fsys_mgr.Dbs__add_new(Xowd_db_file_.Tid_text);
|
||||
file_idx = file.Id();
|
||||
fsys_mgr.Tid_text_idx_(file_idx);
|
||||
}
|
||||
@ -176,7 +177,11 @@ class Xob_text_stmts_mgr {
|
||||
return file;
|
||||
}
|
||||
else
|
||||
return fsys_mgr.Get_or_make(Xodb_file_tid.Tid_text, file_idx);
|
||||
return Dbs__get_or_make(fsys_mgr, Xowd_db_file_.Tid_text, file_idx);
|
||||
}
|
||||
private static Xowd_db_file Dbs__get_or_make(Xowe_core_data_mgr core_data_mgr, byte file_tid, int file_idx) {
|
||||
int len = core_data_mgr.Dbs__len();
|
||||
return file_idx < len ? core_data_mgr.Dbs__get_at(file_idx) : core_data_mgr.Dbs__add_new(file_tid);
|
||||
}
|
||||
private void Add(Db_conn conn, Db_stmt stmt, int stmt_idx) {
|
||||
int new_len = stmt_idx + 1;
|
||||
|
@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.core.primitives.*;
|
||||
import gplx.ios.*;
|
||||
import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*;
|
||||
public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble {
|
||||
public abstract String Wkr_key();
|
||||
public abstract Io_make_cmd Make_cmd_site();
|
||||
@ -59,8 +59,8 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_
|
||||
tmp_wtr_mgr.Rls_all();
|
||||
if (delete_temp) Io_mgr._.DeleteDirDeep(temp_dir);
|
||||
if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) {
|
||||
Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr();
|
||||
wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Files_ary()); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07
|
||||
Xowe_core_data_mgr core_data_mgr = (Xowe_core_data_mgr)wiki.Data_mgr__core_mgr();
|
||||
core_data_mgr.Dbs__save(); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07
|
||||
}
|
||||
}
|
||||
public void Wkr_print() {}
|
||||
|
@ -16,7 +16,7 @@ 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.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public Xob_search_sql_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
|
||||
public String Cmd_key() {return KEY_search_sql;} public static final String KEY_search_sql = "import.sql.search_title.cmd";
|
||||
@ -28,14 +28,14 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Exec(Xowe_wiki wiki) {
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: initing wiki");
|
||||
if (!Env_.Mode_testing()) wiki.Init_assert();
|
||||
Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr();
|
||||
Xowe_core_data_mgr db_fs = wiki.Db_mgr_as_sql().Core_data_mgr();
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: getting core db");
|
||||
Xodb_file page_db = db_fs.Get_tid_root(Xodb_file_tid.Tid_core);
|
||||
Xowd_db_file page_db = db_fs.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core);
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: getting existing searchdb");
|
||||
Xodb_file search_db = db_fs.Get_tid_root(Xodb_file_tid.Tid_search);
|
||||
Xowd_db_file search_db = db_fs.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search);
|
||||
if (search_db == null) {
|
||||
usr_dlg.Log_many("", "", "search_title.cmd: making new searchdb");
|
||||
search_db = db_fs.Make(Xodb_file_tid.Tid_search);
|
||||
search_db = db_fs.Dbs__add_new(Xowd_db_file_.Tid_search);
|
||||
}
|
||||
DataRdr page_rdr = DataRdr_.Null;
|
||||
Db_conn search_provider = search_db.Conn();
|
||||
@ -76,7 +76,7 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
search_provider.Txn_mgr().Txn_end_all_bgn_if_none();
|
||||
search_temp_tbl.Make_data(usr_dlg, search_provider);
|
||||
search_provider.Txn_mgr().Txn_bgn_if_none();
|
||||
wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Files_ary());
|
||||
wiki.Db_mgr_as_sql().Core_data_mgr().Dbs__save();
|
||||
search_provider.Txn_mgr().Txn_end_all();
|
||||
} private int commit_interval = 100000, progress_interval = 10000;
|
||||
private void Commit(Db_conn search_provider) {
|
||||
|
@ -16,7 +16,8 @@ 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.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
import gplx.ios.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd {
|
||||
public Xob_search_sql_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} private Xodb_mgr_sql db_mgr = null;
|
||||
@Override public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.search_title.wkr";
|
||||
@ -25,9 +26,9 @@ public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd {
|
||||
public void Sort_bgn() {
|
||||
db_mgr = wiki.Db_mgr_as_sql();
|
||||
boolean created = false;
|
||||
Xodb_file search_db = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search);
|
||||
Xowd_db_file search_db = db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search);
|
||||
if (search_db == null) {
|
||||
search_db = db_mgr.Fsys_mgr().Make(Xodb_file_tid.Tid_search);
|
||||
search_db = db_mgr.Core_data_mgr().Dbs__add_new(Xowd_db_file_.Tid_search);
|
||||
created = true;
|
||||
}
|
||||
conn = search_db.Conn();
|
||||
|
@ -27,6 +27,6 @@ public class Xob_term_sql extends Xob_term_base {
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.main_page", wiki.Props().Main_page());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc());
|
||||
db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage());
|
||||
wiki.Db_mgr_as_sql().Fsys_mgr().Rls();
|
||||
wiki.Db_mgr_as_sql().Core_data_mgr().Rls();
|
||||
}
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public static void Delete_wiki_sql(Xowe_wiki wiki) {
|
||||
Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); Io_url wiki_root_dir = wiki.Fsys_mgr().Root_dir();
|
||||
if (wiki.Db_mgr().Tid() == gplx.xowa.dbs.Xodb_mgr_sql.Tid_sql) // NOTE: must check; if empty dir (or text db) than db_mgr will be txt
|
||||
wiki.Db_mgr_as_sql().Fsys_mgr().Rls(); // NOTE: if sqlite files, must rls;
|
||||
wiki.Db_mgr_as_sql().Core_data_mgr().Rls(); // NOTE: if sqlite files, must rls;
|
||||
Io_url[] sqlite3_files = Io_mgr._.QueryDir_args(wiki_root_dir).FilPath_("*.sqlite3").ExecAsUrlAry();
|
||||
int sqlite3_files_len = sqlite3_files.length;
|
||||
usr_dlg.Note_many("", "delete_wiki", "deleting sqlite3 files: ~{0} ~{1}", sqlite3_files_len, wiki_root_dir.Raw());
|
||||
|
@ -30,7 +30,7 @@ public class Xob_category_registry_sql implements Xob_cmd {
|
||||
Xob_tmp_wtr rslt_wtr = Xob_tmp_wtr.new_wo_ns_(Io_url_gen_.dir_(rslt_dir), Io_mgr.Len_mb);
|
||||
|
||||
Xodb_mgr_sql db_mgr = Xodb_mgr_sql.Get_or_load(wiki);
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Conn_core();
|
||||
Db_conn conn = db_mgr.Core_data_mgr().Conn_core();
|
||||
Db_qry_select qry = Db_qry_select.new_()
|
||||
.Cols_(Xodb_page_tbl.Fld_page_title, Xodb_page_tbl.Fld_page_id)
|
||||
.From_(Xodb_page_tbl.Tbl_name)
|
||||
|
@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
|
||||
import gplx.core.flds.*; import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.ctgs.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
public class Xob_categorylinks_sql_make implements Io_make_cmd {
|
||||
private Xowe_wiki wiki; private Sql_file_parser sql_parser; private Db_idx_mode idx_mode;
|
||||
private Xodb_mgr_sql db_mgr;
|
||||
@ -30,15 +31,15 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd {
|
||||
name_id_rdr = New_registry_rdr(wiki, usr_dlg);
|
||||
cur_cat_file_max = wiki.Appe().Setup_mgr().Dump_mgr().Db_categorylinks_max();
|
||||
|
||||
db_mgr.Delete_by_tid(Xodb_file_tid.Tid_category);
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Xodb_file category_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core);
|
||||
db_mgr.Delete_by_tid(Xowd_db_file_.Tid_category);
|
||||
Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr();
|
||||
Xowd_db_file category_file = fsys_mgr.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core);
|
||||
if (cur_cat_file_max > 0) {
|
||||
category_file = fsys_mgr.Make(Xodb_file_tid.Tid_category);
|
||||
category_file = fsys_mgr.Dbs__add_new(Xowd_db_file_.Tid_category);
|
||||
fsys_mgr.Conn_ctg_(category_file);
|
||||
}
|
||||
|
||||
cat_provider = db_mgr.Fsys_mgr().Conn_ctg();
|
||||
cat_provider = db_mgr.Core_data_mgr().Conn_ctg();
|
||||
ctg_stmt = db_mgr.Tbl_category().Insert_stmt(cat_provider);
|
||||
File_open(category_file);
|
||||
first_provider = true;
|
||||
@ -67,35 +68,35 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd {
|
||||
} catch (Exception e) {usr_dlg.Warn_many("", "", "ctg_links.insert failed: name=~{0} err=~{1}", String_.new_utf8_(ctg_name), Err_.Message_gplx_brief(e));}
|
||||
}
|
||||
public void Sort_end() {
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Xowe_core_data_mgr core_data_mgr = db_mgr.Core_data_mgr();
|
||||
Ctg_grp_end(Ttl_last);
|
||||
File_close();
|
||||
db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Files_ary());
|
||||
core_data_mgr.Dbs__save();
|
||||
if (db_mgr.Category_version() == Xoa_ctg_mgr.Version_null) // NOTE: ctg_v1 wkr will set this to v1; only set to v2 if null
|
||||
db_mgr.Category_version_update(false);
|
||||
usr_dlg.Log_many("", "", "import.category.v2: insert done; committing; rows=~{0}", row_count);
|
||||
cat_provider.Txn_mgr().Txn_end_all();
|
||||
ctg_stmt.Rls();
|
||||
if (idx_mode.Tid_is_end()) Idx_create(fsys_mgr);
|
||||
if (idx_mode.Tid_is_end()) Idx_create(core_data_mgr);
|
||||
name_id_rdr.Rls();
|
||||
if (String_.Eq(sql_parser.Src_fil().NameAndExt(), Xob_ctg_v1_sql_make.Url_sql)) // delete temp xowa_categorylinks.sql file created by cat_v1
|
||||
Io_mgr._.DeleteFil(sql_parser.Src_fil());
|
||||
}
|
||||
private void Idx_create(Xodb_fsys_mgr fsys_mgr) {
|
||||
fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid.Tid_core, Xodb_file_tid.Tid_category), Idx_categorylinks_from, Idx_categorylinks_main);
|
||||
private void Idx_create(Xowe_core_data_mgr fsys_mgr) {
|
||||
fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xowd_db_file_.Tid_core, Xowd_db_file_.Tid_category), Idx_categorylinks_from, Idx_categorylinks_main);
|
||||
}
|
||||
int Ctg_grp_end(byte[] new_ctg_ttl) {
|
||||
if (cur_cat_ttl != Bry_.Empty && cur_cat_id != -1)
|
||||
db_mgr.Tbl_category().Insert(ctg_stmt, cur_cat_id, cur_cat_counts[Xoa_ctg_mgr.Tid_page], cur_cat_counts[Xoa_ctg_mgr.Tid_subc], cur_cat_counts[Xoa_ctg_mgr.Tid_file], Xoa_ctg_mgr.Hidden_n, cur_cat_file_idx);
|
||||
if (new_ctg_ttl == Ttl_last) return Cur_cat_id_null; // last ttl; called by this.End(); exit early else will fail in Cur_cat_id_find()
|
||||
if (cur_cat_file_max > 0 && cur_cat_file_size > cur_cat_file_max) {File_close(); File_open(db_mgr.Fsys_mgr().Make(Xodb_file_tid.Tid_category));}
|
||||
if (cur_cat_file_max > 0 && cur_cat_file_size > cur_cat_file_max) {File_close(); File_open(db_mgr.Core_data_mgr().Dbs__add_new(Xowd_db_file_.Tid_category));}
|
||||
cur_cat_id = Cur_cat_id_find(new_ctg_ttl);
|
||||
for (int i = 0; i < Xoa_ctg_mgr.Tid__max; i++)
|
||||
cur_cat_counts[i] = 0;
|
||||
cur_cat_ttl = new_ctg_ttl;
|
||||
return cur_cat_id;
|
||||
}
|
||||
private void File_open(Xodb_file file) {
|
||||
private void File_open(Xowd_db_file file) {
|
||||
cl_provider = file.Conn();
|
||||
cl_stmt = db_mgr.Tbl_categorylinks().Insert_stmt(cl_provider);
|
||||
cl_provider.Txn_mgr().Txn_bgn_if_none();
|
||||
|
@ -34,7 +34,7 @@ public class Xob_categorylinks_sql_tst {
|
||||
));
|
||||
fxt.Exec_run(new Xob_category_registry_sql(fxt.Bldr(), fxt.Wiki()));
|
||||
fxt.Exec_run(new Xob_categorylinks_sql(fxt.Bldr(), fxt.Wiki()));
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Conn_ctg();
|
||||
Db_tst_qry.tbl_(Xodb_category_tbl.Tbl_name, Xodb_category_tbl.Fld_cat_id)
|
||||
.Cols_(Xodb_category_tbl.Fld_cat_id, Xodb_category_tbl.Fld_cat_subcats, Xodb_category_tbl.Fld_cat_files, Xodb_category_tbl.Fld_cat_pages)
|
||||
.Rows_add_vals(1, 0, 0, 2)
|
||||
|
@ -25,7 +25,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_
|
||||
public OrderedHash Wkr_hooks() {return wkr_hooks;} private OrderedHash wkr_hooks = OrderedHash_.new_bry_();
|
||||
public void Wkr_bgn(Xob_bldr bldr) {
|
||||
this.Init_dump(this.Wkr_key(), wiki.Tdb_fsys_mgr().Site_dir().GenSubDir(Xotdb_dir_info_.Name_category));
|
||||
Bry_bfr tmp_bfr = bldr.App().Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr tmp_bfr = bldr.App().Utl__bfr_mkr().Get_b512();
|
||||
Xol_lang lang = wiki.Lang();
|
||||
wkr_hooks_add(tmp_bfr, lang.Ns_names());
|
||||
wkr_hooks_add(tmp_bfr, lang.Ns_aliases());
|
||||
|
@ -57,7 +57,7 @@ class Xob_ctg_v1_sql_make implements Io_make_cmd {
|
||||
Bry_fmtr fmtr = Bry_fmtr.new_("(~{page_id},'~{cat_name}','','','','','~{cat_type}')\n", "page_id", "cat_name", "cat_type");
|
||||
public static final String Url_sql = "xowa_categorylinks.sql";
|
||||
private static byte[] Escape_for_sql(Xowe_wiki wiki, byte[] bry) {
|
||||
Bry_bfr bfr = wiki.Appe().Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr bfr = wiki.Appe().Utl__bfr_mkr().Get_b512();
|
||||
int len = bry.length;
|
||||
boolean dirty = false;
|
||||
for (int i = 0; i < len; i++) {
|
||||
|
@ -17,14 +17,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
public class Xoctg_hiddencat_parser_sql extends Xoctg_hiddencat_parser_base {
|
||||
public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);} private Db_conn conn;
|
||||
@Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.hiddencat";
|
||||
@Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) {
|
||||
super.Cmd_bgn_hook(bldr, parser);
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
conn = fsys_mgr.Conn_ctg();
|
||||
Xowe_core_data_mgr core_data_mgr = db_mgr.Core_data_mgr();
|
||||
conn = core_data_mgr.Conn_ctg();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
tbl = db_mgr.Tbl_category();
|
||||
stmt = tbl.Update_stmt(conn);
|
||||
|
@ -40,7 +40,7 @@ public class Xoctg_hiddencat_parser_sql_tst {
|
||||
private void Init_ctgs(int... ctgs) {
|
||||
int len = ctgs.length;
|
||||
Xodb_category_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Tbl_category();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Conn_ctg();
|
||||
Db_stmt stmt = tbl.Insert_stmt(conn);
|
||||
try {
|
||||
for (int i = 0; i < len; i++) {
|
||||
@ -52,7 +52,7 @@ public class Xoctg_hiddencat_parser_sql_tst {
|
||||
private void Tst_ctg_hidden(boolean expd_hidden, int... ctgs) {
|
||||
int len = ctgs.length;
|
||||
Xodb_category_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Tbl_category();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg();
|
||||
Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Conn_ctg();
|
||||
for (int i = 0; i < len; i++) {
|
||||
int ctg_id = ctgs[i];
|
||||
Xodb_category_itm ctg_itm = tbl.Select(conn, ctg_id);
|
||||
|
@ -16,11 +16,12 @@ 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.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.files.*;
|
||||
import gplx.dbs.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.files.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*;
|
||||
public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xob_cmd, GfoInvkAble {
|
||||
private Xob_dump_src_id page_src;
|
||||
private Xodb_fsys_mgr db_fsys_mgr; protected Xop_parser parser; protected Xop_ctx ctx; protected Xop_root_tkn root;
|
||||
private int[] ns_ary; private Xodb_file[] db_ary;
|
||||
private Xowe_core_data_mgr db_fsys_mgr; protected Xop_parser parser; protected Xop_ctx ctx; protected Xop_root_tkn root;
|
||||
private int[] ns_ary; private Xowd_db_file[] db_ary;
|
||||
private int ns_bgn = -1, db_bgn = -1, pg_bgn = -1;
|
||||
private int ns_end = -1, db_end = -1, pg_end = Int_.MaxValue;
|
||||
private int commit_interval = 1000, progress_interval = 250, cleanup_interval = 2500, select_size = 10 * Io_mgr.Len_mb;
|
||||
@ -40,7 +41,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
|
||||
root = ctx.Tkn_mkr().Root(Bry_.Empty);
|
||||
wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql
|
||||
wiki.Db_mgr_as_sql().Init_load(Db_url_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable conn which is closed)
|
||||
db_fsys_mgr = wiki.Db_mgr_as_sql().Fsys_mgr();
|
||||
db_fsys_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
|
||||
db_ary = Xob_dump_src_ttl.Init_text_files_ary(db_fsys_mgr);
|
||||
poll_interval = poll_mgr.Poll_interval();
|
||||
|
||||
@ -136,7 +137,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
|
||||
, Env_.TickCount_elapsed_in_sec(time_bgn), rate_mgr.Rate_as_str(), String_.new_utf8_(page.Ttl_wo_ns()));
|
||||
ctx.Clear();
|
||||
Exec_pg_itm_hook(ns, page, page.Text());
|
||||
ctx.App().Utl_bry_bfr_mkr().Clear_fail_check(); // make sure all bfrs are released
|
||||
ctx.App().Utl__bfr_mkr().Clear_fail_check(); // make sure all bfrs are released
|
||||
if (ctx.Wiki().Cache_mgr().Tmpl_result_cache().Count() > 50000)
|
||||
ctx.Wiki().Cache_mgr().Tmpl_result_cache().Clear();
|
||||
++exec_count;
|
||||
@ -150,7 +151,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo
|
||||
}
|
||||
catch (Exception exc) {
|
||||
bldr.Usr_dlg().Warn_many(GRP_KEY, "parse", "failed to parse ~{0} error ~{1}", String_.new_utf8_(page.Ttl_wo_ns()), Err_.Message_lang(exc));
|
||||
ctx.App().Utl_bry_bfr_mkr().Clear();
|
||||
ctx.App().Utl__bfr_mkr().Clear();
|
||||
this.Free();
|
||||
}
|
||||
}
|
||||
|
@ -16,13 +16,13 @@ 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.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*;
|
||||
class Xob_dump_src_ttl implements Xob_parse_all_db {
|
||||
private Xodb_mgr_sql db_mgr; private Db_stmt page_stmt; private Xodb_file[] text_files_ary; private int text_files_len; private byte redirect;
|
||||
private Xodb_mgr_sql db_mgr; private Db_stmt page_stmt; private Xowd_db_file[] text_files_ary; private int text_files_len; private byte redirect;
|
||||
public Xob_dump_src_ttl Init(Xowe_wiki wiki, int limit, byte redirect) {
|
||||
this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect;
|
||||
page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Fsys_mgr().Conn_core(), limit, redirect);
|
||||
text_files_ary = Init_text_files_ary(db_mgr.Fsys_mgr());
|
||||
page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Core_data_mgr().Conn_core(), limit, redirect);
|
||||
text_files_ary = Init_text_files_ary(db_mgr.Core_data_mgr());
|
||||
text_files_len = text_files_ary.length;
|
||||
return this;
|
||||
}
|
||||
@ -30,21 +30,20 @@ class Xob_dump_src_ttl implements Xob_parse_all_db {
|
||||
Cancelable cancelable = Cancelable_.Never;
|
||||
db_mgr.Tbl_page().Select_for_parse_all(cancelable, hash, page_stmt, ns_id, ttl, redirect);
|
||||
for (int i = 0; i < text_files_len; i++) {
|
||||
Xodb_file text_file = text_files_ary[i];
|
||||
Xowd_db_file text_file = text_files_ary[i];
|
||||
db_mgr.Tbl_text().Select_in(cancelable, text_file, hash);
|
||||
}
|
||||
}
|
||||
public static Xodb_file[] Init_text_files_ary(Xodb_fsys_mgr fsys_mgr) {
|
||||
public static Xowd_db_file[] Init_text_files_ary(Xowe_core_data_mgr core_data_mgr) {
|
||||
ListAdp text_files_list = ListAdp_.new_();
|
||||
Xodb_file[] file_ary = fsys_mgr.Files_ary();
|
||||
int len = file_ary.length;
|
||||
if (len == 1) return new Xodb_file[] {file_ary[0]}; // single file: return core; note that there are no Tid = Text
|
||||
int len = core_data_mgr.Dbs__len();
|
||||
if (len == 1) return new Xowd_db_file[] {core_data_mgr.Dbs__get_at(0)}; // single file: return core; note that there are no Tid = Text
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xodb_file file = file_ary[i];
|
||||
if (file.Tid() == Xodb_file_tid.Tid_text)
|
||||
Xowd_db_file file = core_data_mgr.Dbs__get_at(i);
|
||||
if (file.Tid() == Xowd_db_file_.Tid_text)
|
||||
text_files_list.Add(file);
|
||||
}
|
||||
return (Xodb_file[])text_files_list.Xto_ary_and_clear(Xodb_file.class);
|
||||
return (Xowd_db_file[])text_files_list.Xto_ary_and_clear(Xowd_db_file.class);
|
||||
}
|
||||
}
|
||||
class Xob_dump_src_id {
|
||||
@ -54,7 +53,7 @@ class Xob_dump_src_id {
|
||||
public Xob_dump_src_id Init(Xowe_wiki wiki, byte redirect, int size_max) {
|
||||
this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect;
|
||||
this.size_max = size_max;
|
||||
page_db_url = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_core).Url().Raw();
|
||||
page_db_url = db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core).Url().Raw();
|
||||
return this;
|
||||
}
|
||||
public void Get_pages(ListAdp list, int text_db_idx, int cur_ns, int prv_id) {
|
||||
@ -76,7 +75,7 @@ class Xob_dump_src_id {
|
||||
private DataRdr New_rdr(Xodb_mgr_sql db_mgr, String page_db_url, int text_db_idx, int cur_ns, int prv_id, byte redirect) {
|
||||
if (cur_text_db_idx != text_db_idx) {
|
||||
cur_text_db_idx = text_db_idx;
|
||||
Xodb_file text_db = db_mgr.Fsys_mgr().Get_by_idx(text_db_idx);
|
||||
Xowd_db_file text_db = db_mgr.Core_data_mgr().Dbs__get_at(text_db_idx);
|
||||
Db_conn conn = text_db.Conn();
|
||||
String sql = String_.Format(Sql_select, New_rdr__redirect_clause(redirect));
|
||||
text_stmt = conn.Stmt_new(Db_qry_sql.rdr_(sql));
|
||||
|
@ -16,9 +16,8 @@ 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.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*;
|
||||
public class Xob_text_db_prep extends Xob_itm_basic_base implements Xob_cmd {
|
||||
private Xodb_file[] db_files;
|
||||
public Xob_text_db_prep(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);}
|
||||
public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "wiki.text_db_prep";
|
||||
public void Cmd_ini(Xob_bldr bldr) {}
|
||||
@ -26,27 +25,26 @@ public class Xob_text_db_prep extends Xob_itm_basic_base implements Xob_cmd {
|
||||
wiki.Init_assert();
|
||||
}
|
||||
public void Cmd_run() {
|
||||
Xodb_fsys_mgr db_fsys_mgr = wiki.Db_mgr_as_sql().Fsys_mgr();
|
||||
String page_db_url = db_fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core).Url().Raw();
|
||||
db_files = db_fsys_mgr.Files_ary();
|
||||
int len = db_files.length;
|
||||
Xowe_core_data_mgr core_data_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
|
||||
String page_db_url = core_data_mgr.Dbs__get_db_core().Url().Raw();
|
||||
int len = core_data_mgr.Dbs__len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xodb_file db_file = db_files[i];
|
||||
if (db_file.Tid() == Xodb_file_tid.Tid_text)
|
||||
Xowd_db_file db_file = core_data_mgr.Dbs__get_at(i);
|
||||
if (db_file.Tid() == Xowd_db_file_.Tid_text)
|
||||
Prep_db(page_db_url, db_file);
|
||||
}
|
||||
}
|
||||
public void Cmd_end() {
|
||||
int len = db_files.length;
|
||||
Xowe_core_data_mgr core_data_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
|
||||
int len = core_data_mgr.Dbs__len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xodb_file db_file = db_files[i];
|
||||
if (db_file.Tid() == Xodb_file_tid.Tid_text)
|
||||
Xowd_db_file db_file = core_data_mgr.Dbs__get_at(i);
|
||||
if (db_file.Tid() == Xowd_db_file_.Tid_text)
|
||||
db_file.Rls();
|
||||
}
|
||||
db_files = null;
|
||||
}
|
||||
public void Cmd_print() {}
|
||||
private void Prep_db(String page_db_url, Xodb_file text_db) {
|
||||
private void Prep_db(String page_db_url, Xowd_db_file text_db) {
|
||||
usr_dlg.Note_many("", "", "copying page_rows to text_db: ~{0}", text_db.Url().NameOnly());
|
||||
Db_conn conn = text_db.Conn();
|
||||
Sqlite_engine_.Tbl_create_and_delete(conn, "page_dump", Sql_create_tbl);
|
||||
|
@ -16,8 +16,7 @@ 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.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
|
||||
import org.junit.*;
|
||||
import gplx.ios.*;
|
||||
import org.junit.*; import gplx.ios.*; import gplx.xowa.files.*;
|
||||
public class Xob_image_ext_calc_tst {
|
||||
private Xob_image_ext_calc_fxt fxt = new Xob_image_ext_calc_fxt();
|
||||
@Test public void Basic() {fxt.Init_("A.png" , Xof_media_type.Name_bitmap , Xof_ext_.Bry_png, 220, 110) .Test(Xof_ext_.Id_png);} // A.png -> png
|
||||
|
@ -16,7 +16,7 @@ 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.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
|
||||
import gplx.ios.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
import gplx.ios.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.*;
|
||||
public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, GfoInvkAble, Sql_file_parser_cmd {
|
||||
private Db_conn conn = null; private Db_stmt stmt = null;
|
||||
private Xob_wiki_image_tbl tbl_image = new Xob_wiki_image_tbl();
|
||||
|
@ -16,7 +16,7 @@ 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.wikis.redirects; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*;
|
||||
import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*;
|
||||
public class Xob_redirect_cmd extends Xob_dump_mgr_base {
|
||||
private Db_conn conn; private Xob_redirect_tbl redirect_tbl;
|
||||
private Xodb_mgr_sql db_mgr; private Xop_redirect_mgr redirect_mgr; private Url_encoder encoder;
|
||||
@ -31,8 +31,8 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base {
|
||||
@Override protected Db_conn Init_db_file() {
|
||||
this.db_mgr = wiki.Db_mgr_as_sql();
|
||||
redirect_mgr = wiki.Redirect_mgr();
|
||||
encoder = Xoa_app_.Utl_encoder_mgr().Url_ttl();
|
||||
redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl_encoder_mgr().Url_ttl()).Create_table();
|
||||
encoder = Xoa_app_.Utl__encoder_mgr().Url_ttl();
|
||||
redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl__encoder_mgr().Url_ttl()).Create_table();
|
||||
conn = redirect_tbl.Conn();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
return conn;
|
||||
@ -51,6 +51,6 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base {
|
||||
@Override public void Exec_end_hook() {
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
redirect_tbl.Create_indexes(usr_dlg);
|
||||
redirect_tbl.Update_trg_redirect_id(db_mgr.Fsys_mgr().Get_url(Xodb_file_tid.Tid_core), 4);
|
||||
redirect_tbl.Update_trg_redirect_id(db_mgr.Core_data_mgr().Get_url(Xowd_db_file_.Tid_core), 4);
|
||||
}
|
||||
}
|
||||
|
@ -108,13 +108,13 @@ class Xoctg_fmtr_all {
|
||||
}
|
||||
public byte[] Bld_bwd_fwd(Xowe_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp) {
|
||||
if (view_grp.Total() < grp_max) return Bry_.Empty;
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004();
|
||||
Html_nav_bry(bfr, wiki, ttl, view_grp, Bool_.N);
|
||||
Html_nav_bry(bfr, wiki, ttl, view_grp, Bool_.Y);
|
||||
return bfr.Mkr_rls().Xto_bry_and_clear();
|
||||
}
|
||||
private void Html_nav_bry(Bry_bfr bfr, Xowe_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp, boolean fill_at_bgn) {
|
||||
Bry_bfr href_bfr = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr href_bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
wiki.Appe().Href_parser().Build_to_bfr(href_bfr, wiki, ttl);
|
||||
byte[] arg_idx_lbl = null; byte[] arg_sortkey = null;
|
||||
if (fill_at_bgn) {
|
||||
|
@ -104,7 +104,7 @@ class Xoctg_fmtr_itm_subc extends Xoctg_fmtr_itm_base {
|
||||
}
|
||||
byte[] Bld_contains_text(int sub_ctgs, int sub_pages, int sub_files) {
|
||||
if (sub_ctgs == 0 && sub_pages == 0 && sub_files == 0) return Bry_.Empty;
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b128();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b128();
|
||||
bfr.Add_byte(Byte_ascii.Paren_bgn);
|
||||
Bld_contains_text_itm(bfr, Xol_msg_itm_.Id_ctgtree_subc_counts_ctg, sub_ctgs);
|
||||
Bld_contains_text_itm(bfr, Xol_msg_itm_.Id_ctgtree_subc_counts_page, sub_pages);
|
||||
|
@ -24,7 +24,7 @@ public class Xoctg_html_mgr implements GfoInvkAble {
|
||||
private final Xoctg_fmtr_all mgr_files = new Xoctg_fmtr_all(Xoa_ctg_mgr.Tid_file);
|
||||
public Xoctg_data_cache Data_cache() {return data_cache;} private Xoctg_data_cache data_cache = new Xoctg_data_cache();
|
||||
public void Bld_html(Xowe_wiki wiki, Xoae_page page, Bry_bfr bfr) {
|
||||
Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001();
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001();
|
||||
try {
|
||||
if (wiki.Db_mgr().Category_version() == Xoa_ctg_mgr.Version_2)
|
||||
Bld_html_v2(wiki, page, tmp_bfr);
|
||||
|
@ -250,7 +250,7 @@ class Xoh_ctg_page_fxt {
|
||||
fmtr_itm.Init_from_all(wiki, wiki.Lang(), ctg, list_mgr, list, list.Len());
|
||||
fmtr_itm.Init_from_grp(new byte[] {grp_char_0}, 0);
|
||||
fmtr_itm.Col_idx_(0, 0);
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
fmtr_itm.XferAry(bfr, 0);
|
||||
Tfds.Eq_str_lines(expd, bfr.Mkr_rls().Xto_str_and_clear());
|
||||
}
|
||||
@ -258,12 +258,12 @@ class Xoh_ctg_page_fxt {
|
||||
Xoctg_fmtr_all list_mgr = ctg_html.Fmtr(tid);
|
||||
Xoctg_fmtr_grp fmtr_grp = ctg_html.Fmtr_grp();
|
||||
fmtr_grp.Init_from_all(wiki, wiki.Lang(), ctg, list_mgr, ctg.Grp_by_tid(tid));
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
fmtr_grp.XferAry(bfr, 0);
|
||||
Tfds.Eq_str_lines(expd, bfr.Mkr_rls().Xto_str_and_clear());
|
||||
}
|
||||
public void Test_html_all(byte tid, String expd) {
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
ctg_html.Bld_all(bfr, wiki, wiki.Lang(), ctg, tid);
|
||||
Tfds.Eq_str_lines(expd, bfr.Mkr_rls().Xto_str_and_clear());
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ class Xoctg_idx_mgr_fxt {
|
||||
return this;
|
||||
} private Xoae_app app; Xowe_wiki wiki; Xoctg_idx_mgr idx_mgr; static final byte[] Ctg_name = Bry_.new_ascii_("Ctg_test");
|
||||
public byte[] Make_src(int len) {
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004().Mkr_rls();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004().Mkr_rls();
|
||||
bfr.Add_byte_pipe(); // always have leading pipe
|
||||
for (int i = 0; i < len; i++) {
|
||||
bfr.Add_base85_len_5(i).Add_byte(Byte_ascii.Semic); // idx.Id() = i
|
||||
|
@ -1,44 +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.xowa.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xodb_file {
|
||||
public Xodb_file(int id, byte tid) {this.id = id; this.tid = tid;}
|
||||
public int Id() {return id;} private final int id; // unique id in xowa_db
|
||||
public byte Tid() {return tid;} private final byte tid; // db type id
|
||||
public Io_url Url() {return url;} public Xodb_file Url_(Io_url v) {url = v; return this;} private Io_url url;
|
||||
public String Url_rel() {return url_rel;} public Xodb_file Url_rel_(String v) {url_rel = v; return this;} private String url_rel;
|
||||
public long File_len() {return file_len;} public Xodb_file File_len_add(int v) {file_len += v; return this;} private long file_len;
|
||||
public long File_max() {return file_max;} public Xodb_file File_max_(long v) {file_max = v; return this;} private long file_max;
|
||||
public byte Cmd_mode() {return cmd_mode;} public Xodb_file Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode;
|
||||
public Db_url Connect() {return connect;} public Xodb_file Connect_(Db_url v) {connect = v; return this;} private Db_url connect;
|
||||
public Db_conn Conn() {
|
||||
if (conn == null) conn = Db_conn_pool.I.Get_or_new(connect);
|
||||
return conn;
|
||||
} private Db_conn conn;
|
||||
public void Conn_(Db_conn p) {conn = p;}
|
||||
public void Rls() {
|
||||
if (conn == null) return;
|
||||
try {
|
||||
conn.Txn_mgr().Txn_end_all(); // close any open transactions
|
||||
conn.Conn_term();
|
||||
} finally {conn = null;}
|
||||
}
|
||||
public static Xodb_file load_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_ignore);}
|
||||
public static Xodb_file make_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_create);}
|
||||
}
|
@ -1,109 +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.xowa.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.tbls.*;
|
||||
public class Xodb_fsys_mgr {
|
||||
private final Io_url src_dir; private final Io_url trg_dir; private final String wiki_name;
|
||||
public Xodb_fsys_mgr(Io_url src_dir, Io_url trg_dir, String wiki_name) {this.src_dir = src_dir; this.trg_dir = trg_dir; this.wiki_name = wiki_name;}
|
||||
public Xodb_file[] Files_ary() {return files_ary;}
|
||||
public Db_conn Conn_core() {return provider_core;} private Db_conn provider_core;
|
||||
public Db_conn Conn_page() {return provider_page;} private Db_conn provider_page;
|
||||
public Db_conn Conn_ctg() {return provider_ctg;} public void Conn_ctg_(Xodb_file file) {provider_ctg = file.Conn();} private Db_conn provider_ctg;
|
||||
public Db_conn Conn_wdata() {return provider_wdata;}public void Conn_wdata_(Xodb_file file) {provider_wdata = file.Conn();} private Db_conn provider_wdata;
|
||||
public int Tid_text_idx() {return tid_text_idx;} public Xodb_fsys_mgr Tid_text_idx_(int v) {tid_text_idx = v; return this;} private int tid_text_idx = File_id_core;
|
||||
public long Tid_text_max() {return tid_text_max;} private long tid_text_max = Heap_max_infinite;
|
||||
public void Init_by_files(Db_conn p, Xodb_file[] v) {
|
||||
files_ary = v; files_ary_len = v.length;
|
||||
boolean category_provider_core_null = true;
|
||||
for (int i = 0; i < files_ary_len; i++) {
|
||||
Xodb_file file = files_ary[i];
|
||||
Io_url url = trg_dir.GenSubFil(file.Url_rel()); // relative name only
|
||||
file.Connect_(Db_url_.sqlite_(url)).Url_(url);
|
||||
switch (file.Tid()) {
|
||||
case Xodb_file_tid.Tid_core : file.Conn_(p); Set_file_core(file); break;
|
||||
case Xodb_file_tid.Tid_category : if (category_provider_core_null) {Conn_ctg_(file); category_provider_core_null = false;} break;
|
||||
case Xodb_file_tid.Tid_wikidata : Conn_wdata_(file); break;
|
||||
case Xodb_file_tid.Tid_text : Set_file_text(file); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Init_by_ns_map(Xow_ns_mgr ns_mgr, String ns_map_str, long text_max) {
|
||||
Set_file_core(Make(Xodb_file_tid.Tid_core));
|
||||
Xodb_ns_map_mgr ns_map = Xodb_ns_map_mgr.Parse(Bry_.new_ascii_(ns_map_str));
|
||||
Xodb_ns_map_itm[] ns_map_itms = ns_map.Itms();
|
||||
int ns_map_itms_len = ns_map_itms.length;
|
||||
for (int i = 0; i < ns_map_itms_len; i++) {
|
||||
Xodb_ns_map_itm itm = ns_map_itms[i];
|
||||
int[] ns_ids = itm.Ns_ids();
|
||||
int ns_ids_len = ns_ids.length;
|
||||
Xodb_file file = Make(Xodb_file_tid.Tid_text);
|
||||
for (int j = 0; j < ns_ids_len; j++) {
|
||||
int ns_id = ns_ids[j];
|
||||
Xow_ns ns = ns_mgr.Ids_get_or_null(ns_id); if (ns == null) continue; // some dumps may not have ns; for example, pre-2013 dumps won't have Module (828)
|
||||
ns.Bldr_file_idx_(file.Id());
|
||||
}
|
||||
}
|
||||
if (text_max > 0)
|
||||
Set_file_text(Make(Xodb_file_tid.Tid_text).File_max_(text_max));
|
||||
}
|
||||
private void Set_file_core(Xodb_file file) {provider_core = provider_page = provider_ctg = provider_wdata = file.Conn();}
|
||||
private void Set_file_text(Xodb_file file) {tid_text_idx = file.Id(); tid_text_max = file.File_max();}
|
||||
public Io_url Get_url(byte file_tid) {
|
||||
Xodb_file file = Get_tid_root(file_tid);
|
||||
return trg_dir.GenSubFil(file.Url_rel());
|
||||
}
|
||||
public Xodb_file Get_by_idx(int idx) {return files_ary[idx];}
|
||||
public Xodb_file Get_or_make(byte file_tid, int file_idx) {return file_idx < files_ary_len ? files_ary[file_idx] : Make(file_tid);}
|
||||
public Xodb_file Get_tid_root(byte file_tid) {
|
||||
for (int i = 0; i < files_ary_len; i++) {
|
||||
Xodb_file file = files_ary[i];
|
||||
if (file.Tid() == file_tid) return file; // assume 1st found file is root
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public void Index_create(Gfo_usr_dlg usr_dlg, byte[] tids, Db_idx_itm... idxs) {
|
||||
for (int i = 0; i < files_ary_len; i++) {
|
||||
Xodb_file file = files_ary[i];
|
||||
if (Byte_.In(file.Tid(), tids))
|
||||
Sqlite_engine_.Idx_create(usr_dlg, file.Conn(), Int_.Xto_str(file.Id()), idxs);
|
||||
}
|
||||
}
|
||||
public Xodb_file Make(byte file_tid) {
|
||||
int file_idx = files_ary_len;
|
||||
Io_url url = Create_sqlite3(src_dir, trg_dir, wiki_name, file_idx);
|
||||
Xodb_file rv = Xodb_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_url_.sqlite_(url));
|
||||
rv.Url_(url);
|
||||
Xodb_xowa_cfg_tbl.Insert_str(rv.Conn(), Cfg_grp_db_meta, "type_name", Xodb_file_tid.Xto_key(file_tid));
|
||||
files_ary = (Xodb_file[])Array_.Resize(files_ary, files_ary_len + 1);
|
||||
files_ary[files_ary_len++] = rv;
|
||||
return rv;
|
||||
} private Xodb_file[] files_ary = new Xodb_file[0]; private int files_ary_len = 0;
|
||||
public void Rls() {
|
||||
for (int i = 0; i < files_ary_len; i++)
|
||||
files_ary[i].Rls();
|
||||
}
|
||||
private static Io_url Create_sqlite3(Io_url src_dir, Io_url trg_dir, String wiki_name, int file_idx) {
|
||||
Io_url src_fil = src_dir.GenSubFil("xowa.sqlite3"); // /bin/any/sql/xowa/xowa.sqlite3
|
||||
Io_url trg_fil = trg_dir.GenSubFil_ary(wiki_name, ".", Int_.Xto_str_pad_bgn(file_idx, 3), ".sqlite3"); // /wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3
|
||||
Io_mgr._.CopyFil(src_fil, trg_fil, true);
|
||||
return trg_fil;
|
||||
}
|
||||
private static final int File_id_core = 0;
|
||||
public static final int Heap_max_infinite = 0;
|
||||
public static final String Cfg_grp_db_meta = "db.meta";
|
||||
}
|
@ -18,8 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.core.primitives.*; import gplx.dbs.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.specials.search.*; import gplx.xowa.dbs.tbls.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
public Xodb_load_mgr_sql(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xodb_fsys_mgr fsys_mgr;
|
||||
public Xodb_load_mgr_sql(Xodb_mgr_sql db_mgr, Xowe_core_data_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xowe_core_data_mgr fsys_mgr;
|
||||
public byte Search_version() {
|
||||
if (search_provider == null) Search_version_init();
|
||||
return search_version;
|
||||
@ -38,7 +39,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
String version_key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_props, Xow_wiki_props.Invk_bldr_version);
|
||||
KeyVal[] kv_ary = db_mgr.Tbl_xowa_cfg().Select_kvs(Xodb_mgr_sql.Grp_wiki_init, version_key, version_val);
|
||||
Xodb_upgrade_mgr.Upgrade(db_mgr, kv_ary, version_key, version_val.Val());
|
||||
Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004();
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004();
|
||||
Xoa_gfs_mgr gfs_mgr = wiki.Appe().Gfs_mgr();
|
||||
try {
|
||||
int len = kv_ary.length;
|
||||
@ -57,14 +58,14 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
public boolean Load_ctg_v1(Xoctg_view_ctg rv, byte[] ctg_bry) {
|
||||
int cat_page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ctg_bry); if (cat_page_id == Xodb_mgr_sql.Page_id_null) return false;
|
||||
Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return false;
|
||||
Db_conn p = fsys_mgr.Get_by_idx(ctg.File_idx()).Conn();
|
||||
Db_conn p = fsys_mgr.Dbs__get_at(ctg.File_idx()).Conn();
|
||||
return db_mgr.Ctg_select_v1(rv, p, ctg);
|
||||
}
|
||||
public boolean Load_ctg_v2(Xoctg_data_ctg rv, byte[] ctg_bry) {throw Err_.not_implemented_();}
|
||||
public void Load_ctg_v2a(Xoctg_view_ctg rv, Xoctg_url ctg_url, byte[] ctg_ttl, int load_max) {
|
||||
int cat_page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ctg_ttl); if (cat_page_id == Xodb_mgr_sql.Page_id_null) return;
|
||||
Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return;
|
||||
Db_conn p = fsys_mgr.Get_by_idx(ctg.File_idx()).Conn();
|
||||
Db_conn p = fsys_mgr.Dbs__get_at(ctg.File_idx()).Conn();
|
||||
ListAdp list = ListAdp_.new_();
|
||||
Load_ctg_v2a_db_retrieve(rv, ctg_url, cat_page_id, load_max, p, list);
|
||||
Load_ctg_v2a_ui_sift(rv, ctg, list);
|
||||
@ -112,8 +113,8 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
private Db_conn search_provider = null;
|
||||
private void Search_version_init() {
|
||||
if (search_provider == null) {
|
||||
Xodb_file search_file = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search);
|
||||
if (search_file == null) {
|
||||
Xowd_db_file search_file = db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search);
|
||||
if (search_file == Xowd_db_file.Null) {
|
||||
search_provider = Db_conn_.Null;
|
||||
search_version = gplx.xowa.specials.search.Xosrh_core.Version_1;
|
||||
}
|
||||
@ -128,7 +129,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
if (search_version == gplx.xowa.specials.search.Xosrh_core.Version_1)
|
||||
db_mgr.Tbl_page().Select_by_search(cancelable, rv, search, results_max);
|
||||
else {
|
||||
Xodb_search_title_word_tbl.Select_by_word(cancelable, rv, db_mgr.Db_ctx(), search, results_max, db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search).Conn());
|
||||
Xodb_search_title_word_tbl.Select_by_word(cancelable, rv, db_mgr.Db_ctx(), search, results_max, db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search).Conn());
|
||||
db_mgr.Tbl_page().Select_by_id_list(cancelable, true, rv);
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ class Xodb_load_mgr_sql_fxt {
|
||||
public void Init_save_ctgs(Xodb_page[] ary) {
|
||||
int len = ary.length;
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
Db_conn p = db_mgr.Fsys_mgr().Conn_core();
|
||||
Db_conn p = db_mgr.Core_data_mgr().Conn_core();
|
||||
p.Txn_mgr().Txn_bgn_if_none();
|
||||
Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(p);
|
||||
Db_stmt category_stmt = db_mgr.Tbl_category().Insert_stmt(p);
|
||||
|
@ -211,7 +211,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
public boolean Load_xdat_file(Cancelable cancelable, Xob_xdat_file xdat_file, Io_url url) {
|
||||
boolean rv = false;
|
||||
if (cancelable.Canceled()) return false;
|
||||
Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001();
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001();
|
||||
byte[] tmp_bry = tmp_bfr.Bfr();
|
||||
if (cancelable.Canceled()) return false;
|
||||
tmp_bry = Io_mgr._.LoadFilBry_reuse(url, tmp_bry, tmp_len);
|
||||
|
@ -16,7 +16,7 @@ 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.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*; import gplx.xowa.hdumps.*;
|
||||
import gplx.dbs.*; import gplx.xowa.html.hdumps.*;
|
||||
public interface Xodb_mgr extends GfoInvkAble, RlsAble {
|
||||
byte Tid();
|
||||
String Tid_name();
|
||||
@ -27,5 +27,4 @@ public interface Xodb_mgr extends GfoInvkAble, RlsAble {
|
||||
DateAdp Dump_date_query();
|
||||
Xodb_load_mgr Load_mgr();
|
||||
Xodb_save_mgr Save_mgr();
|
||||
Xodb_hdump_mgr Hdump_mgr();
|
||||
}
|
||||
|
@ -17,19 +17,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*;
|
||||
import gplx.xowa2.wikis.data.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.hdumps.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
private boolean html_db_enabled;
|
||||
public Xodb_mgr_sql(Xowe_wiki wiki) {
|
||||
this.wiki = wiki;
|
||||
Io_url bin_db_dir = wiki.Appe().Fsys_mgr().Bin_any_dir().GenSubDir_nest("sql", "xowa");
|
||||
fsys_mgr = new Xodb_fsys_mgr(bin_db_dir, wiki.Fsys_mgr().Root_dir(), wiki.Domain_str());
|
||||
load_mgr = new Xodb_load_mgr_sql(this, fsys_mgr);
|
||||
core_data_mgr = new Xowe_core_data_mgr(bin_db_dir, wiki.Fsys_mgr().Root_dir(), wiki.Domain_str());
|
||||
load_mgr = new Xodb_load_mgr_sql(this, core_data_mgr);
|
||||
save_mgr = new Xodb_save_mgr_sql(this);
|
||||
tbl_text = new Xodb_text_tbl(this);
|
||||
tbl_page = new Xodb_page_tbl(wiki);
|
||||
hdump_mgr = new Xodb_hdump_mgr(wiki);
|
||||
}
|
||||
public byte Tid() {return Tid_sql;} public static final byte Tid_sql = 1;
|
||||
public String Tid_name() {return "sqlite3";}
|
||||
@ -40,18 +39,15 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
public void Search_version_refresh() {load_mgr.Search_version_refresh();}
|
||||
public void Html_db_enabled_(boolean v) {
|
||||
html_db_enabled = v; db_ctx.Html_db_enabled_(v);
|
||||
hdump_mgr.Enabled_(v);
|
||||
tbl_page.Html_db_enabled_(v);
|
||||
if (v) Xodb_hdump_mgr_setup.Hdump_db_file_init(hdump_mgr);
|
||||
core_data_mgr.Tbl__pg().Conn_(core_data_mgr.Conn_core(), Bool_.N, core_data_mgr.Cfg__schema_is_1(), core_data_mgr.Cfg__db_id(), v);
|
||||
}
|
||||
public Xodb_ctx Db_ctx() {return db_ctx;} private Xodb_ctx db_ctx = new Xodb_ctx();
|
||||
public Xodb_fsys_mgr Fsys_mgr() {return fsys_mgr;} private Xodb_fsys_mgr fsys_mgr;
|
||||
public Xowe_core_data_mgr Core_data_mgr() {return core_data_mgr;} private Xowe_core_data_mgr core_data_mgr;
|
||||
public Xodb_load_mgr Load_mgr() {return load_mgr;} private Xodb_load_mgr_sql load_mgr;
|
||||
public Xodb_save_mgr Save_mgr() {return save_mgr;} private Xodb_save_mgr_sql save_mgr;
|
||||
public Xodb_hdump_mgr Hdump_mgr() {return hdump_mgr;} private Xodb_hdump_mgr hdump_mgr;
|
||||
public Xodb_xowa_cfg_tbl Tbl_xowa_cfg() {return tbl_cfg;} private Xodb_xowa_cfg_tbl tbl_cfg = new Xodb_xowa_cfg_tbl();
|
||||
public Xodb_xowa_ns_tbl Tbl_xowa_ns() {return tbl_ns;} private Xodb_xowa_ns_tbl tbl_ns = new Xodb_xowa_ns_tbl();
|
||||
public Xodb_xowa_db_tbl Tbl_xowa_db() {return tbl_db;} private Xodb_xowa_db_tbl tbl_db = new Xodb_xowa_db_tbl();
|
||||
public Xodb_page_tbl Tbl_page() {return tbl_page;} private Xodb_page_tbl tbl_page;
|
||||
public Xodb_text_tbl Tbl_text() {return tbl_text;} private Xodb_text_tbl tbl_text;
|
||||
public Xodb_site_stats_tbl Tbl_site_stats() {return tbl_site_stats;} private Xodb_site_stats_tbl tbl_site_stats = new Xodb_site_stats_tbl();
|
||||
@ -65,33 +61,34 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
public DateAdp Dump_date_query() {
|
||||
DateAdp rv = wiki.Props().Modified_latest();
|
||||
if (rv != null) return rv;
|
||||
Io_url url = fsys_mgr.Get_url(Xodb_file_tid.Tid_core);
|
||||
Io_url url = core_data_mgr.Get_url(Xowd_db_file_.Tid_core);
|
||||
return Io_mgr._.QueryFil(url).ModifiedTime();
|
||||
}
|
||||
public void Init_by_ns_map(String ns_map) {
|
||||
Xoi_dump_mgr dump_mgr = wiki.Appe().Setup_mgr().Dump_mgr();
|
||||
data_storage_format = dump_mgr.Data_storage_format();
|
||||
fsys_mgr.Init_by_ns_map(wiki.Ns_mgr(), ns_map, dump_mgr.Db_text_max());
|
||||
Core_provider_(fsys_mgr.Conn_core());
|
||||
core_data_mgr.Init_by_ns_map(wiki.Ns_mgr(), ns_map, dump_mgr.Db_text_max());
|
||||
Core_conn_(core_data_mgr.Conn_core());
|
||||
state = State_make;
|
||||
}
|
||||
public void Init_load(Db_url url) {
|
||||
Db_conn conn = Db_conn_pool.I.Get_or_new(url);
|
||||
Core_provider_(conn);
|
||||
Xodb_file[] files = tbl_db.Select_all();
|
||||
fsys_mgr.Init_by_files(conn, files);
|
||||
public void Init_load(Db_url core_db_url) {
|
||||
Db_conn core_conn = Db_conn_pool.I.Get_or_new(core_db_url);
|
||||
Core_conn_(core_conn);
|
||||
Xowd_db_file[] files = core_data_mgr.Tbl__db().Select_all(wiki.Fsys_mgr().Root_dir());
|
||||
core_data_mgr.Init_by_files(core_conn, files);
|
||||
state = State_load;
|
||||
}
|
||||
private void Core_provider_(Db_conn conn) {
|
||||
private void Core_conn_(Db_conn conn) {
|
||||
boolean created = Bool_.N; boolean schema_is_1 = core_data_mgr.Cfg__schema_is_1(); int db_id = core_data_mgr.Cfg__db_id(); // schema_is_1 always has pre-created xowa_db tbl
|
||||
tbl_cfg.Conn_(conn);
|
||||
tbl_ns.Conn_(conn);
|
||||
tbl_db.Conn_(conn, Bool_.N, Bool_.Y); // version_is_1 always has pre-created xowa_db tbl
|
||||
tbl_ns.Conn_(conn, created, schema_is_1, db_id);
|
||||
tbl_page.Conn_(conn);
|
||||
tbl_site_stats.Conn_(conn);
|
||||
core_data_mgr.Core_conn_(conn, created, schema_is_1, db_id, Bool_.N);
|
||||
}
|
||||
public void Page_create(Db_stmt page_stmt, Db_stmt text_stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, byte[] text, int random_int, int file_idx) {
|
||||
int text_len = text.length;
|
||||
int html_db_id = (html_db_enabled) ? -1 : hdump_mgr.Html_db_id_default(text_len);
|
||||
int html_db_id = (html_db_enabled) ? -1 : -1; //hdump_mgr.Html_db_id_default(text_len);
|
||||
tbl_page.Insert(page_stmt, page_id, ns_id, ttl_wo_ns, redirect, modified_on, text_len, random_int, file_idx, html_db_id);
|
||||
tbl_text.Insert(text_stmt, page_id, text, data_storage_format);
|
||||
}
|
||||
@ -135,7 +132,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
return rv;
|
||||
}
|
||||
public void Rls() {
|
||||
fsys_mgr.Rls();
|
||||
core_data_mgr.Rls();
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_data_storage_format)) return Xoi_dump_mgr.Wtr_tid_to_str(data_storage_format);
|
||||
@ -144,14 +141,13 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
else if (ctx.Match(k, Invk_category_version_)) category_version = m.ReadByte("v");
|
||||
else if (ctx.Match(k, Invk_search_version)) return this.Search_version();
|
||||
else if (ctx.Match(k, Invk_tid_name)) return this.Tid_name();
|
||||
else if (ctx.Match(k, Invk_html_mgr)) return hdump_mgr;
|
||||
return this;
|
||||
}
|
||||
public static final String
|
||||
Invk_data_storage_format = "data_storage_format", Invk_data_storage_format_ = "data_storage_format_"
|
||||
, Invk_category_version = "category_version", Invk_category_version_ = "category_version_"
|
||||
, Invk_search_version = "search_version"
|
||||
, Invk_tid_name = "tid_name", Invk_html_mgr = "hdump_mgr"
|
||||
, Invk_tid_name = "tid_name"
|
||||
;
|
||||
public void Category_version_update(boolean version_is_1) {
|
||||
String grp = Xodb_mgr_sql.Grp_wiki_init;
|
||||
@ -162,18 +158,17 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble {
|
||||
tbl_cfg.Insert_str(grp, key, Byte_.Xto_str(category_version));
|
||||
}
|
||||
public void Delete_by_tid(byte tid) {
|
||||
Xodb_file[] ary = fsys_mgr.Files_ary();
|
||||
int len = ary.length;
|
||||
int len = core_data_mgr.Dbs__len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xodb_file file = ary[i] ;
|
||||
Xowd_db_file file = core_data_mgr.Dbs__get_at(i) ;
|
||||
if (file.Tid() != tid) continue;
|
||||
file.Rls();
|
||||
Sqlite_url sqlite = (Sqlite_url)file.Connect();
|
||||
Io_mgr._.DeleteFil_args(sqlite.Url()).MissingFails_off().Exec();
|
||||
file.Cmd_mode_(Db_cmd_mode.Tid_delete);
|
||||
}
|
||||
tbl_db.Commit_all(ary);
|
||||
this.Init_load(fsys_mgr.Conn_core().Url());
|
||||
core_data_mgr.Dbs__save();
|
||||
this.Init_load(core_data_mgr.Conn_core().Url());
|
||||
}
|
||||
|
||||
public static final String Grp_wiki_init = "wiki.init";
|
||||
|
@ -16,20 +16,18 @@ 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.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*; import gplx.xowa.tdbs.*;
|
||||
import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.tdbs.*;
|
||||
public class Xodb_mgr_txt implements Xodb_mgr {
|
||||
public Xodb_mgr_txt(Xowe_wiki wiki, Xow_data_mgr data_mgr) {
|
||||
this.wiki = wiki;
|
||||
load_mgr = new Xodb_load_mgr_txt(wiki);
|
||||
save_mgr = new Xodb_save_mgr_txt(wiki, load_mgr);
|
||||
hdump_mgr = new Xodb_hdump_mgr(wiki);
|
||||
} private Xowe_wiki wiki;
|
||||
public byte Tid() {return Tid_txt;} public static final byte Tid_txt = 0;
|
||||
public String Tid_name() {return "xdat";}
|
||||
public byte Data_storage_format() {return data_storage_format;} public void Data_storage_format_(byte v) {data_storage_format = v;} private byte data_storage_format = gplx.ios.Io_stream_.Tid_file;
|
||||
public Xodb_load_mgr Load_mgr() {return load_mgr;} private Xodb_load_mgr_txt load_mgr;
|
||||
public Xodb_save_mgr Save_mgr() {return save_mgr;} private Xodb_save_mgr_txt save_mgr;
|
||||
public Xodb_hdump_mgr Hdump_mgr() {return hdump_mgr;} private Xodb_hdump_mgr hdump_mgr;
|
||||
public Xodb_ctx Db_ctx() {return db_ctx;} private Xodb_ctx db_ctx = new Xodb_ctx();
|
||||
public DateAdp Dump_date_query() {
|
||||
Io_url url = wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_page, Xow_ns_.Id_main, 0);
|
||||
|
@ -16,7 +16,7 @@ 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.dbs; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*; import gplx.ios.*;
|
||||
import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.wikis.data.*;
|
||||
public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
public Xodb_save_mgr_sql(Xodb_mgr_sql db_mgr) {
|
||||
this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().Appe().Zip_mgr();
|
||||
@ -41,11 +41,11 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
else
|
||||
page_id_int = Int_.parse_(page_id);
|
||||
|
||||
Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr();
|
||||
Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr();
|
||||
int file_idx = fsys_mgr.Tid_text_idx();
|
||||
boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text, text.length);
|
||||
Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(fsys_mgr.Conn_page());
|
||||
Db_conn text_provider = db_mgr.Fsys_mgr().Get_by_idx(file_idx).Conn();
|
||||
Db_conn text_provider = db_mgr.Core_data_mgr().Dbs__get_at(file_idx).Conn();
|
||||
Db_stmt text_stmt = db_mgr.Tbl_text().Insert_stmt(text_provider);
|
||||
text = zip_mgr.Zip(db_mgr.Data_storage_format(), text);
|
||||
try {
|
||||
@ -72,7 +72,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
if (redirect_changed) kv_ary[kv_idx++] = KeyVal_.new_("page_is_redirect", redirect_changed);
|
||||
if (modified_changed) kv_ary[kv_idx++] = KeyVal_.new_("page_touched", Xto_touched_str(modified));
|
||||
qry = Db_qry_.update_common_("page", Db_crt_.eq_("page_id", page.Revision_data().Id()), kv_ary);
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Conn_core();
|
||||
Db_conn conn = db_mgr.Core_data_mgr().Conn_core();
|
||||
conn.Txn_mgr().Txn_bgn_if_none();
|
||||
conn.Exec_qry(qry);
|
||||
conn.Txn_mgr().Txn_end_all();
|
||||
@ -88,12 +88,12 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
|
||||
, KeyVal_.new_("page_title", String_.new_utf8_(trg_ttl))
|
||||
);
|
||||
try {
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_qry(qry);
|
||||
db_mgr.Core_data_mgr().Conn_core().Exec_qry(qry);
|
||||
} catch (Exception exc) {
|
||||
if (String_.Has(Err_.Message_gplx_brief(exc), "columns page_namespace, page_random_int are not unique")) { // HACK: terrible hack, but moving pages across ns will break UNIQUE index
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_sql("DROP INDEX page__name_random;"); // is UNIQUE by default
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_sql("CREATE INDEX page__name_random ON page (page_namespace, page_random_int);");
|
||||
db_mgr.Fsys_mgr().Conn_core().Exec_qry(qry);
|
||||
db_mgr.Core_data_mgr().Conn_core().Exec_sql("DROP INDEX page__name_random;"); // is UNIQUE by default
|
||||
db_mgr.Core_data_mgr().Conn_core().Exec_sql("CREATE INDEX page__name_random ON page (page_namespace, page_random_int);");
|
||||
db_mgr.Core_data_mgr().Conn_core().Exec_qry(qry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
|
||||
boolean found = load_mgr.Load_by_ttl(db_page, ns_itm, ttl_bry);
|
||||
if (found) throw Err_mgr._.fmt_(GRP_KEY, "title_exists", "create requested but title already exists: ~{0}", String_.new_utf8_(ttl_bry));
|
||||
int text_len = text.length;
|
||||
Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_m001();
|
||||
Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_m001();
|
||||
int page_id = page_id_next++;
|
||||
int fil_idx = 0;
|
||||
int ns_id = ttl.Ns().Id();
|
||||
@ -44,7 +44,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
|
||||
Xob_xdat_file page_rdr = new Xob_xdat_file();
|
||||
if (Bry_.Len_gt_0(page_rdr_bry)) page_rdr.Parse(page_rdr_bry, page_rdr_bry.length, page_rdr_url);
|
||||
int row_idx = page_rdr.Count();
|
||||
Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
page_rdr.Insert(tmp_bfr, tmp.Xto_bry_and_clear());
|
||||
this.Data_save(Xotdb_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr);
|
||||
tmp_bfr.Mkr_rls();
|
||||
@ -78,7 +78,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
|
||||
// update page
|
||||
Xob_xdat_file page_rdr = new Xob_xdat_file(); Xob_xdat_itm page_itm = new Xob_xdat_itm();
|
||||
load_mgr.Load_page(tmp_page, db_page.Text_db_id(), db_page.Db_row_idx(), ns, true, page_rdr, page_itm);
|
||||
Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
if (text == null) text = tmp_page.Text();
|
||||
int text_len = text.length;
|
||||
DateAdp modified_on = tmp_page.Modified_on();
|
||||
@ -95,7 +95,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
|
||||
Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len);
|
||||
db_page.Text_len_(text_len);
|
||||
db_page.Type_redirect_(redirect_ttl != null);
|
||||
Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_b512();
|
||||
Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_b512();
|
||||
Xodb_page_.Txt_ttl_save(tmp, db_page);
|
||||
byte[] ttl_row_bry = tmp.Xto_bry_and_clear();
|
||||
tmp.Mkr_rls();
|
||||
|
@ -62,7 +62,7 @@ class Xodb_upgrade_mgr {
|
||||
// ++types;
|
||||
// }
|
||||
// } finally {rdr.Rls(); stmt.Rls();}
|
||||
// boolean version_is_1 = types <= 1; // if 0 or 1 types assume version_1 (1=page only; 0=not set up)
|
||||
// boolean schema_is_1 = types <= 1; // if 0 or 1 types assume version_1 (1=page only; 0=not set up)
|
||||
// db_mgr.Category_version_update(true); // assume version_1; will be wrong if user actually did version_2, but currently version_1 vs version_2 has no
|
||||
// }
|
||||
// }
|
||||
|
@ -45,16 +45,16 @@ public class Xodb_page_tbl {
|
||||
return false;
|
||||
}
|
||||
public static void Read_page__all2(Xodb_page page, Db_rdr rdr, boolean html_db_enabled) {
|
||||
page.Id_ (rdr.Read_int(0));
|
||||
page.Ns_id_ (rdr.Read_int(1));
|
||||
page.Ttl_wo_ns_ (rdr.Read_bry_by_str(2));
|
||||
page.Modified_on_ (DateAdp_.parse_fmt(rdr.Read_str(3), Page_touched_fmt));
|
||||
page.Type_redirect_ (rdr.Read_byte(4) == 1);
|
||||
page.Text_len_ (rdr.Read_int(5));
|
||||
page.Text_db_id_ (rdr.Read_int(6));
|
||||
page.Id_ (rdr.Read_int(Fld_page_id));
|
||||
page.Ns_id_ (rdr.Read_int(Fld_page_ns));
|
||||
page.Ttl_wo_ns_ (rdr.Read_bry_by_str(Fld_page_title));
|
||||
page.Modified_on_ (DateAdp_.parse_fmt(rdr.Read_str(Fld_page_touched), Page_touched_fmt));
|
||||
page.Type_redirect_ (rdr.Read_byte(Fld_page_is_redirect) == 1);
|
||||
page.Text_len_ (rdr.Read_int(Fld_page_len));
|
||||
page.Text_db_id_ (rdr.Read_int(Fld_page_file_idx));
|
||||
if (html_db_enabled) {
|
||||
page.Html_db_id_(rdr.Read_int(7));
|
||||
page.Redirect_id_(rdr.Read_int(8));
|
||||
page.Html_db_id_(rdr.Read_int(Fld_page_html_db_id));
|
||||
page.Redirect_id_(rdr.Read_int(Fld_page_is_redirect));
|
||||
}
|
||||
}
|
||||
public boolean Select_by_id(Xodb_page rv, int page_id) {
|
||||
|
@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.core.primitives.*; import gplx.dbs.*; import gplx.ios.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
public class Xodb_text_tbl {
|
||||
public Xodb_text_tbl(Xodb_mgr_sql db_mgr) {this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().Appe().Zip_mgr();} private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr;
|
||||
public void Delete_all(Db_conn conn) {conn.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));}
|
||||
@ -27,7 +28,7 @@ public class Xodb_text_tbl {
|
||||
public void Update(int file_id, int page_id, byte[] text) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Get_by_idx(file_id).Conn();
|
||||
Db_conn conn = db_mgr.Core_data_mgr().Dbs__get_at(file_id).Conn();
|
||||
stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text);
|
||||
stmt.Val_bry(text).Val_int(page_id).Exec_update();
|
||||
} finally {stmt.Rls();}
|
||||
@ -35,14 +36,14 @@ public class Xodb_text_tbl {
|
||||
public byte[] Select(int file_id, int page_id) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
Db_conn conn = db_mgr.Fsys_mgr().Get_by_idx(file_id).Conn();
|
||||
Db_conn conn = db_mgr.Core_data_mgr().Dbs__get_at(file_id).Conn();
|
||||
stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text);
|
||||
byte[] rv = (byte[])stmt.Val_int(page_id).Exec_select_val();
|
||||
rv = zip_mgr.Unzip(db_mgr.Data_storage_format(), rv);
|
||||
return rv;
|
||||
} finally {stmt.Rls();}
|
||||
}
|
||||
public void Select_in(Cancelable cancelable, Xodb_file file, OrderedHash hash) {
|
||||
public void Select_in(Cancelable cancelable, Xowd_db_file file, OrderedHash hash) {
|
||||
DataRdr rdr = DataRdr_.Null;
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
|
@ -17,40 +17,50 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.qrys.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
public class Xodb_xowa_db_tbl {
|
||||
private String tbl_name = "wiki_db_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_id, fld_type, fld_url;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr();
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "xowa_db";
|
||||
fld_prefix = "db_";
|
||||
}
|
||||
fld_id = flds.Add_int_pkey(fld_prefix + "id");
|
||||
fld_type = flds.Add_byte(fld_prefix + "type"); // 1=core;2=wikidata;3=data
|
||||
fld_url = flds.Add_str(fld_prefix + "url", 512);
|
||||
fld_id = flds.Add_int_pkey (fld_prefix + "id");
|
||||
fld_type = flds.Add_byte (fld_prefix + "type"); // 1=core;2=wikidata;3=data
|
||||
fld_url = flds.Add_str (fld_prefix + "url", 512);
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds);
|
||||
conn.Exec_create_tbl_and_idx(meta);
|
||||
}
|
||||
stmt_bldr.Conn_(conn, tbl_name, flds, fld_id);
|
||||
}
|
||||
public void Update_url(int id, String url) {
|
||||
Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(fld_id), fld_url);
|
||||
stmt.Clear().Val_str(fld_url, url).Crt_int(fld_id, id).Exec_update();
|
||||
public Xowd_db_file[] Select_all(Io_url wiki_root_dir) {
|
||||
Db_rdr rdr = Db_rdr_.Null;
|
||||
ListAdp list = ListAdp_.new_();
|
||||
try {
|
||||
rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select_as_rdr();
|
||||
while (rdr.Move_next()) {
|
||||
Xowd_db_file db = Xowd_db_file.load_(rdr.Read_int(fld_id), rdr.Read_byte(fld_type), rdr.Read_str(fld_url));
|
||||
db.Url_(wiki_root_dir.GenSubFil(db.Url_rel()));
|
||||
list.Add(db);
|
||||
}
|
||||
} finally {rdr.Rls();}
|
||||
list.SortBy(Xodb_file_sorter__id.I);
|
||||
return (Xowd_db_file[])list.Xto_ary(Xowd_db_file.class);
|
||||
}
|
||||
public void Commit_all(Xodb_fsys_mgr db_fs) {this.Commit_all(db_fs.Files_ary());}
|
||||
public void Commit_all(Xodb_file[] ary) {
|
||||
public void Commit_all(Xowe_core_data_mgr core_data_mgr) {
|
||||
stmt_bldr.Batch_bgn();
|
||||
try {
|
||||
int len = ary.length;
|
||||
int len = core_data_mgr.Dbs__len();
|
||||
for (int i = 0; i < len; i++)
|
||||
Commit_itm(ary[i]);
|
||||
Commit_itm(core_data_mgr.Dbs__get_at(i));
|
||||
} finally {stmt_bldr.Batch_end();}
|
||||
}
|
||||
private void Commit_itm(Xodb_file itm) {
|
||||
private void Commit_itm(Xowd_db_file itm) {
|
||||
Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode());
|
||||
switch (itm.Cmd_mode()) {
|
||||
case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_id, itm.Id()) .Val_byte(fld_type, itm.Tid()).Val_str(fld_url, itm.Url_rel()).Exec_insert(); break;
|
||||
@ -61,37 +71,12 @@ public class Xodb_xowa_db_tbl {
|
||||
}
|
||||
itm.Cmd_mode_(Db_cmd_mode.Tid_ignore);
|
||||
}
|
||||
public Xodb_file[] Select_all() {
|
||||
Db_rdr rdr = Db_rdr_.Null;
|
||||
ListAdp list = ListAdp_.new_();
|
||||
try {
|
||||
Db_qry qry = Db_qry_.select_tbl_(tbl_name).OrderBy_asc_(fld_id);
|
||||
rdr = conn.Stmt_new(qry).Exec_select_as_rdr();
|
||||
while (rdr.Move_next()) {
|
||||
Xodb_file itm = Xodb_file.load_(rdr.Read_int(fld_id), rdr.Read_byte(fld_type), rdr.Read_str(fld_url));
|
||||
list.Add(itm);
|
||||
}
|
||||
} finally {rdr.Rls();}
|
||||
Xodb_file[] rv = (Xodb_file[])list.Xto_ary(Xodb_file.class);
|
||||
Chk_sequential(rv);
|
||||
return rv;
|
||||
}
|
||||
private void Chk_sequential(Xodb_file[] ary) {
|
||||
int len = ary.length;
|
||||
int expd_id = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
Xodb_file itm = ary[i];
|
||||
int actl_id = itm.Id();
|
||||
if (expd_id != actl_id) throw Err_.new_fmt_("database ids are not sequential; expd={0} actl={1}", expd_id, actl_id);
|
||||
++expd_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
class Xodb_db_sorter implements gplx.lists.ComparerAble {
|
||||
class Xodb_file_sorter__id implements gplx.lists.ComparerAble {
|
||||
public int compare(Object lhsObj, Object rhsObj) {
|
||||
Xodb_file lhs = (Xodb_file)lhsObj;
|
||||
Xodb_file rhs = (Xodb_file)rhsObj;
|
||||
Xowd_db_file lhs = (Xowd_db_file)lhsObj;
|
||||
Xowd_db_file rhs = (Xowd_db_file)rhsObj;
|
||||
return Int_.Compare(lhs.Id(), rhs.Id());
|
||||
}
|
||||
public static final Xodb_db_sorter _ = new Xodb_db_sorter();
|
||||
public static final Xodb_file_sorter__id I = new Xodb_file_sorter__id(); Xodb_file_sorter__id() {}
|
||||
}
|
||||
|
@ -18,37 +18,57 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.qrys.*;
|
||||
public class Xodb_xowa_ns_tbl {
|
||||
public void Conn_(Db_conn conn) {this.conn = conn;} private Db_conn conn;
|
||||
private String tbl_name = "wiki_ns_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String fld_db_id, fld_ns_id, fld_ns_name, fld_ns_case, fld_ns_count, fld_ns_is_alias;
|
||||
private Db_conn conn; private int db_id;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, int db_id) {
|
||||
this.conn = new_conn; flds.Clear(); this.db_id = db_id;
|
||||
if (schema_is_1) {
|
||||
tbl_name = "xowa_ns";
|
||||
fld_db_id = Db_meta_fld.Key_null;
|
||||
}
|
||||
else {
|
||||
fld_db_id = flds.Add_int("db_id");
|
||||
}
|
||||
fld_ns_id = flds.Add_int("ns_id");
|
||||
fld_ns_name = flds.Add_str("ns_name", 255);
|
||||
fld_ns_case = flds.Add_byte("ns_case");
|
||||
fld_ns_is_alias = flds.Add_bool("ns_is_alias");
|
||||
fld_ns_count = flds.Add_int("ns_count");
|
||||
if (created) {
|
||||
Db_meta_tbl meta_tbl = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl_wo_null(tbl_name, "pkey" , fld_db_id, fld_ns_id)
|
||||
);
|
||||
conn.Exec_create_tbl_and_idx(meta_tbl);
|
||||
}
|
||||
}
|
||||
public void Insert(Xow_ns_mgr ns_mgr) {
|
||||
Db_stmt stmt = Db_stmt_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_insert_(conn, Tbl_name, Fld_ns_id, Fld_ns_name, Fld_ns_case, Fld_ns_is_alias, Fld_ns_count);
|
||||
int len = ns_mgr.Ids_len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xow_ns ns = ns_mgr.Ids_get_at(i);
|
||||
stmt.Clear()
|
||||
.Val_int(ns.Id())
|
||||
.Val_str(ns.Name_str())
|
||||
.Val_byte(ns.Case_match())
|
||||
.Val_bool_as_byte(ns.Is_alias())
|
||||
.Val_int(ns.Count())
|
||||
.Exec_insert();
|
||||
;
|
||||
}
|
||||
} finally {stmt.Rls();}
|
||||
Db_stmt stmt = conn.Stmt_insert(tbl_name, flds);
|
||||
int len = ns_mgr.Ids_len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xow_ns ns = ns_mgr.Ids_get_at(i);
|
||||
stmt.Clear()
|
||||
.Val_int(fld_db_id, db_id)
|
||||
.Val_int(fld_ns_id, ns.Id())
|
||||
.Val_str(fld_ns_name, ns.Name_str())
|
||||
.Val_byte(fld_ns_case, ns.Case_match())
|
||||
.Val_bool_as_byte(fld_ns_is_alias, ns.Is_alias())
|
||||
.Val_int(fld_ns_count, ns.Count())
|
||||
.Exec_insert();
|
||||
;
|
||||
}
|
||||
}
|
||||
public void Select_all(Xow_ns_mgr ns_mgr) {
|
||||
Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null;
|
||||
Db_rdr rdr = Db_rdr_.Null;
|
||||
try {
|
||||
stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, Db_qry__select_in_tbl.Where_flds__all, Flds__all));
|
||||
rdr = stmt.Exec_select_as_rdr();
|
||||
rdr = conn.Stmt_select(tbl_name, flds, String_.Ary_wo_null(fld_db_id)).Crt_int(fld_db_id, db_id).Exec_select_as_rdr();
|
||||
ns_mgr.Clear();
|
||||
while (rdr.Move_next()) {
|
||||
int ns_id = rdr.Read_int(0);
|
||||
byte[] ns_name = rdr.Read_bry_by_str(1);
|
||||
byte ns_case_match = rdr.Read_byte(2);
|
||||
int ns_count = rdr.Read_int(3);
|
||||
boolean ns_is_alias = rdr.Read_byte(4) == Bool_.Y_byte;
|
||||
int ns_id = rdr.Read_int(fld_ns_id);
|
||||
byte[] ns_name = rdr.Read_bry_by_str(fld_ns_name);
|
||||
byte ns_case_match = rdr.Read_byte(fld_ns_case);
|
||||
int ns_count = rdr.Read_int(fld_ns_count);
|
||||
boolean ns_is_alias = rdr.Read_byte(fld_ns_is_alias) == Bool_.Y_byte;
|
||||
ns_mgr.Add_new(ns_id, ns_name, ns_case_match, ns_is_alias);
|
||||
if (ns_id < 0) continue; // don't load counts for Special / Media
|
||||
Xow_ns ns = ns_mgr.Ids_get_or_null(ns_id);
|
||||
@ -56,21 +76,24 @@ public class Xodb_xowa_ns_tbl {
|
||||
if (ns_count > 0) ns.Exists_(true); // ns has article; mark it as exists, else Talk tab won't show; DATE:2013-12-04
|
||||
}
|
||||
ns_mgr.Init();
|
||||
} finally {rdr.Rls(); stmt.Rls();}
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
public int Select_ns_count(int ns_id) {
|
||||
Db_qry_select qry = Db_qry_.select_val_(Tbl_name, Fld_ns_count, Db_crt_.eq_(Fld_ns_id, ns_id));
|
||||
return Int_.cast_(qry.ExecRdr_val(conn));
|
||||
Db_rdr rdr = Db_rdr_.Null;
|
||||
try {
|
||||
rdr = conn.Stmt_select(tbl_name, flds, String_.Ary_wo_null(fld_db_id, fld_ns_id))
|
||||
.Crt_int(fld_db_id, db_id)
|
||||
.Crt_int(fld_ns_id, ns_id)
|
||||
.Exec_select_as_rdr();
|
||||
return rdr.Move_next() ? Int_.cast_(rdr.Read_int(fld_ns_count)) : 0;
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
public void Update_ns_count(int ns_id, int ns_count) {
|
||||
conn.Exec_qry(Db_qry_.update_common_(Tbl_name
|
||||
, Db_crt_.eq_(Fld_ns_id, ns_id)
|
||||
, KeyVal_.Ary
|
||||
( KeyVal_.new_(Fld_ns_count, ns_count)
|
||||
)));
|
||||
Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary_wo_null(fld_db_id, fld_ns_id), fld_ns_count);
|
||||
stmt.Clear()
|
||||
.Val_int(fld_ns_count, ns_count)
|
||||
.Crt_int(fld_db_id, db_id)
|
||||
.Crt_int(fld_ns_id, ns_id)
|
||||
.Exec_update();
|
||||
}
|
||||
public static final String Tbl_name = "xowa_ns"
|
||||
, Fld_ns_id = "ns_id", Fld_ns_name = "ns_name", Fld_ns_case = "ns_case", Fld_ns_count = "ns_count", Fld_ns_is_alias = "ns_is_alias"
|
||||
;
|
||||
private static final String[] Flds__all = new String[] {Fld_ns_id, Fld_ns_name, Fld_ns_case, Fld_ns_count, Fld_ns_is_alias};
|
||||
}
|
||||
|
@ -32,11 +32,11 @@ public class Xof_doc_thumb {
|
||||
public static boolean Null_n(double v) {return v != Null;}
|
||||
public static final int Null_as_int = -1;
|
||||
|
||||
public static double Convert_to_xowa_thumbtime (int ext, double val) {return gplx.xowa.Xof_ext_.Id_supports_thumbtime(ext) ? val : Null;}
|
||||
public static int Convert_to_xowa_page (int ext, double val) {return gplx.xowa.Xof_ext_.Id_supports_page(ext) ? (int)val : Xof_doc_page.Null;}
|
||||
public static double Convert_to_xowa_thumbtime (int ext, double val) {return Xof_ext_.Id_supports_thumbtime(ext) ? val : Null;}
|
||||
public static int Convert_to_xowa_page (int ext, double val) {return Xof_ext_.Id_supports_page(ext) ? (int)val : Xof_doc_page.Null;}
|
||||
public static double Convert_to_fsdb_thumbtime (int ext, double thumbtime, int page) {
|
||||
return page != Xof_doc_page.Null
|
||||
&& gplx.xowa.Xof_ext_.Id_supports_page(ext) // redefine thumbtime to page if pdf
|
||||
&& Xof_ext_.Id_supports_page(ext) // redefine thumbtime to page if pdf
|
||||
? page
|
||||
: thumbtime
|
||||
;
|
||||
|
@ -15,7 +15,7 @@ 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; import gplx.*;
|
||||
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
|
||||
public class Xof_ext {
|
||||
public Xof_ext(int id, byte[] ext) {this.id = id; this.ext = ext;}
|
||||
public int Id() {return id;} private int id;
|
||||
@ -38,4 +38,10 @@ public class Xof_ext {
|
||||
public boolean Id_supports_page() {return Xof_ext_.Id_supports_page(id);}
|
||||
public boolean Id_needs_convert() {return Xof_ext_.Id_needs_convert(id);}
|
||||
public int Id_view() {return Xof_ext_.Id_view(id);}
|
||||
public boolean Is_not_viewable(byte exec_tid) {
|
||||
return exec_tid != Xof_exec_tid.Tid_viewer_app // only apply logic if !Tid_viewer_app; note that if Tid_viewer_app, then user clicked on file, so return true;
|
||||
&& ( this.Id_is_audio() // NOTE: was audio_strict, but v2 always redefines .ogg as .ogv; DATE:2014-02-02
|
||||
|| id == Xof_ext_.Id_unknown // ignore unknown exts, else will download needlessly when viewing page; EX: .wav before .wav was registered; PAGE:pl.s:Spiaca_kr<EFBFBD>lewna_(Oppman); DATE:2014-08-17
|
||||
);
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@ 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; import gplx.*;
|
||||
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.core.primitives.*;
|
||||
public class Xof_ext_ {
|
||||
public static final int Id_unknown = 0 // SERIALIZED; ids are saved to fsdb;
|
@ -25,7 +25,7 @@ public interface Xof_file_itm {
|
||||
int Lnki_w();
|
||||
int Lnki_h();
|
||||
double Lnki_upright();
|
||||
double Lnki_thumbtime();
|
||||
double Lnki_time();
|
||||
int Orig_w();
|
||||
int Orig_h();
|
||||
// byte Orig_repo();
|
||||
|
37
400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java
Normal file
37
400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
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.files; import gplx.*; import gplx.xowa.*;
|
||||
public class Xof_fsdb_mode {
|
||||
private int tid;
|
||||
Xof_fsdb_mode(int tid) {this.tid = tid;}
|
||||
public boolean Tid_unknown() {return tid == Tid_int_unknown;}
|
||||
public boolean Tid_wmf() {return tid == Tid_int_wmf;}
|
||||
public boolean Tid_view() {return tid == Tid_int_view;}
|
||||
public boolean Tid_make() {return tid == Tid_int_make;}
|
||||
public void Tid_view_y_() {tid = Tid_int_view;}
|
||||
public void Tid_make_y_() {tid = Tid_int_make;}
|
||||
private static final int
|
||||
Tid_int_unknown = 0
|
||||
, Tid_int_wmf = 1
|
||||
, Tid_int_view = 2
|
||||
, Tid_int_make = 3
|
||||
;
|
||||
// public static Xof_fsdb_mode new_unknown() {return new Xof_fsdb_mode(Tid_int_unknown);}
|
||||
public static Xof_fsdb_mode new_wmf() {return new Xof_fsdb_mode(Tid_int_wmf);}
|
||||
public static Xof_fsdb_mode new_view() {return new Xof_fsdb_mode(Tid_int_view);}
|
||||
}
|
@ -16,14 +16,13 @@ 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.*;
|
||||
import gplx.gfui.*;
|
||||
public class Xof_img_size {
|
||||
public int Html_w() {return html_w;} private int html_w;
|
||||
public int Html_h() {return html_h;} private int html_h;
|
||||
public int File_w() {return file_w;} private int file_w; // NOTE: file_w will always equal html_w, unless rounding is implemented; EX: html_w=150,151,152 -> file_w=150
|
||||
public int File_h() {return file_h;} private int file_h;
|
||||
public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig;
|
||||
public void Clear() {
|
||||
private void Clear() {
|
||||
html_w = html_h = file_w = file_h = 0;
|
||||
file_is_orig = false;
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ public class Xof_lnki_file_mgr {
|
||||
fsdb_itm.Lnki_size_(xfer_itm.Lnki_w(), xfer_itm.Lnki_h()); // NOTE: must overwrite fsdb_itm.size with xfer_itm.size when the same image shows up in multiple sizes on a page; (only one item in wiki_orig); EX: w:Portal:Canada; [[File:Flag of Canada.svg|300x150px]]; [[File:Flag of Canada.svg|23px]]; DATE:2014-02-14
|
||||
fsdb_itm.Lnki_type_(xfer_itm.Lnki_type()); // NOTE: must overwrite lnki_type, else multiple images on same page with different type wont show; PAGE:en.w:History_of_painting; DATE:2014-03-06
|
||||
fsdb_itm.Lnki_page_(xfer_itm.Lnki_page());
|
||||
fsdb_itm.Lnki_time_(xfer_itm.Lnki_thumbtime());
|
||||
fsdb_itm.Lnki_time_(xfer_itm.Lnki_time());
|
||||
// byte[] lnki_ttl = xfer_itm.Lnki_ttl();
|
||||
// Xof_ext lnki_ext = xfer_itm.Lnki_ext();
|
||||
// byte[] lnki_md5 = Xof_xfer_itm_.Md5_(lnki_ttl);
|
||||
|
@ -15,7 +15,7 @@ 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; import gplx.*;
|
||||
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
|
||||
public class Xof_media_type {
|
||||
public static final byte Tid_null = 0, Tid_audio = 1, Tid_bitmap = 2, Tid_drawing = 2, Tid_office = 3, Tid_video = 4;
|
||||
public static final String Name_null = "", Name_audio = "AUDIO", Name_bitmap = "BITMAP", Name_drawing = "DRAWING", Name_office = "OFFICE", Name_video = "VIDEO";
|
@ -15,7 +15,7 @@ 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; import gplx.*;
|
||||
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.core.primitives.*;
|
||||
public class Xof_mime_minor_ {
|
||||
public static Xof_ext ext_(byte[] minor_mime) {
|
@ -16,7 +16,7 @@ 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.*;
|
||||
import gplx.xowa.files.repos.*;
|
||||
import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*;
|
||||
public class Xof_url_bldr {
|
||||
private final Bry_bfr bfr = Bry_bfr.reset_(400);
|
||||
private byte[] ttl; private byte[] md5; private Xof_ext ext; private boolean file_is_thumb; private int file_w;
|
||||
@ -63,6 +63,14 @@ public class Xof_url_bldr {
|
||||
public byte[] Xto_bry() {Bld(); byte[] rv = bfr.Xto_bry_and_clear(); Clear(); return rv;}
|
||||
public String Xto_str() {Bld(); String rv = bfr.Xto_str(); Clear(); return rv;}
|
||||
public Io_url Xto_url() {Bld(); Io_url rv = Io_url_.new_fil_(bfr.Xto_str()); Clear(); return rv;}
|
||||
public Io_url To_url(Xow_repo_mgr repo_mgr, Xof_fsdb_itm itm, boolean orig) {return To_url(repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()), itm, orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb, Bool_.N);}
|
||||
public Io_url To_url(Xof_repo_pair repo_pair, Xof_fsdb_itm itm, boolean orig) {return To_url(repo_pair, itm, orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb, Bool_.N);}
|
||||
public Io_url To_url(Xof_repo_pair repo_pair, Xof_fsdb_itm itm, byte mode, boolean src) {
|
||||
return src
|
||||
? this.Init_for_src_file(mode, repo_pair.Src(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url()
|
||||
: this.Init_for_trg_file(mode, repo_pair.Trg(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url()
|
||||
;
|
||||
}
|
||||
private void Bld() {
|
||||
Add_core();
|
||||
if (file_is_thumb) {
|
||||
|
@ -26,7 +26,7 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
public int Lnki_w() {return lnki_w;} private int lnki_w;
|
||||
public int Lnki_h() {return lnki_h;} private int lnki_h;
|
||||
public double Lnki_upright() {return lnki_upright;} private double lnki_upright;
|
||||
public double Lnki_thumbtime() {return lnki_thumbtime;} private double lnki_thumbtime = Xof_doc_thumb.Null;
|
||||
public double Lnki_time() {return lnki_time;} private double lnki_time = Xof_doc_thumb.Null;
|
||||
public int Lnki_page() {return lnki_page;} private int lnki_page = Xof_doc_page.Null;
|
||||
public int Orig_w() {return orig_w;} private int orig_w;
|
||||
public int Orig_h() {return orig_h;} private int orig_h;
|
||||
@ -53,15 +53,15 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
} private Xof_repo_itm trg_repo;
|
||||
public int Trg_repo_idx() {return trg_repo_idx;} public Xof_xfer_itm Trg_repo_idx_(int trg_repo_idx) {this.trg_repo_idx = trg_repo_idx; return this;} private int trg_repo_idx = Xof_meta_itm.Repo_unknown;
|
||||
public byte[] Trg_repo_root() {return trg_repo_root;} private byte[] trg_repo_root = Bry_.Empty; // HACK: needed for hdump
|
||||
private byte[] Trg_html(byte mode_id, int width) {return url_bldr.Init_for_trg_html(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_thumbtime, lnki_page).Xto_bry();}
|
||||
public Io_url Trg_file(byte mode_id, int width) {return url_bldr.Init_for_trg_file(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_thumbtime, lnki_page).Xto_url();}
|
||||
private byte[] Trg_html(byte mode_id, int width) {return url_bldr.Init_for_trg_html(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_time, lnki_page).Xto_bry();}
|
||||
public Io_url Trg_file(byte mode_id, int width) {return url_bldr.Init_for_trg_file(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_time, lnki_page).Xto_url();}
|
||||
public byte Lnki_exec_tid() {return lnki_exec_tid;} public void Lnki_exec_tid_(byte v) {lnki_exec_tid = v;} private byte lnki_exec_tid = Xof_exec_tid.Tid_wiki_page;
|
||||
public Xof_url_bldr Url_bldr(){ return url_bldr;}
|
||||
public Xof_xfer_itm Url_bldr_(Xof_url_bldr v) {url_bldr = v; return this;} private Xof_url_bldr url_bldr = Xof_url_bldr.Temp;
|
||||
public Xof_xfer_itm Clear() {
|
||||
lnki_type = Byte_.Max_value_127;
|
||||
lnki_w = lnki_h = file_w = orig_w = orig_h = html_w = html_h = gallery_mgr_h = Int_.Neg1;
|
||||
lnki_upright = Int_.Neg1; lnki_thumbtime = Xof_doc_thumb.Null; lnki_page = Xof_doc_page.Null;
|
||||
lnki_upright = Int_.Neg1; lnki_time = Xof_doc_thumb.Null; lnki_page = Xof_doc_page.Null;
|
||||
img_is_thumbable = false;
|
||||
orig_file_len = 0; // NOTE: cannot be -1, or else will always download orig; see ext rule chk and (orig_file_len < 0)
|
||||
lnki_redirect = null; lnki_ttl = null; lnki_md5 = null; lnki_ext = null;
|
||||
@ -72,7 +72,7 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
}
|
||||
public Xof_xfer_itm Clone() {
|
||||
Xof_xfer_itm rv = new Xof_xfer_itm();
|
||||
rv.lnki_type = lnki_type; rv.lnki_w = lnki_w; rv.lnki_h = lnki_h; rv.lnki_upright = lnki_upright; rv.lnki_thumbtime = lnki_thumbtime; rv.lnki_page = lnki_page;
|
||||
rv.lnki_type = lnki_type; rv.lnki_w = lnki_w; rv.lnki_h = lnki_h; rv.lnki_upright = lnki_upright; rv.lnki_time = lnki_time; rv.lnki_page = lnki_page;
|
||||
rv.img_is_thumbable = img_is_thumbable;
|
||||
rv.orig_w = orig_w; rv.orig_h = orig_h; rv.orig_file_len = orig_file_len;
|
||||
rv.lnki_redirect = lnki_redirect; rv.lnki_ttl = lnki_ttl; rv.lnki_md5 = lnki_md5; rv.lnki_ext = lnki_ext;
|
||||
@ -87,10 +87,10 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
}
|
||||
public Xof_xfer_itm Init_by_lnki(byte[] ttl, byte[] redirect, byte lnki_type, int w, int h, double upright, double thumbtime, int lnki_page) {
|
||||
this.Set__ttl(ttl, redirect);
|
||||
this.lnki_type = lnki_type; this.lnki_w = w; this.lnki_h = h; this.lnki_upright = upright; this.lnki_thumbtime = thumbtime; this.lnki_page = lnki_page;
|
||||
this.lnki_type = lnki_type; this.lnki_w = w; this.lnki_h = h; this.lnki_upright = upright; this.lnki_time = thumbtime; this.lnki_page = lnki_page;
|
||||
img_is_thumbable = Xof_xfer_itm_.Lnki_thumbable_calc(lnki_type, lnki_w, lnki_h);
|
||||
if (lnki_thumbtime != Xof_doc_thumb.Null && !lnki_ext.Id_is_media()) // thumbtime is set, but ext is not media; PAGE:en.w:Moon; EX:[[File:A.png|thumbtime=0:02]] DATE:2014-07-22
|
||||
lnki_thumbtime = Xof_doc_thumb.Null; // disable thumbtime
|
||||
if (lnki_time != Xof_doc_thumb.Null && !lnki_ext.Id_is_media()) // thumbtime is set, but ext is not media; PAGE:en.w:Moon; EX:[[File:A.png|thumbtime=0:02]] DATE:2014-07-22
|
||||
lnki_time = Xof_doc_thumb.Null; // disable thumbtime
|
||||
return this;
|
||||
}
|
||||
public void Init_for_gallery(int html_w, int html_h, int file_w) {
|
||||
@ -145,7 +145,7 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
if (lnki_ext.Id_is_video()) { // video is a special case; src is thumb_w but html_w / html_h is based on calc
|
||||
html_orig_src = Trg_html(Xof_repo_itm.Mode_orig, Xof_img_size.Size_null_deprecated);
|
||||
if (meta_itm.Thumbs_indicates_oga() && lnki_ext.Id_is_ogv()) {lnki_ext = Xof_ext_.new_by_ext_(Xof_ext_.Bry_oga); return true;} // if audio, do not thumb; NOTE: must happen after html_orig_src, b/c html must still be generated to auto-download files; NOTE: must change ext to oga b/c ogg may trigger video code elsewhere
|
||||
Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_thumbtime));
|
||||
Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_time));
|
||||
if (thumb != null) {
|
||||
Xof_xfer_itm_.Calc_xfer_size(calc_size, lnki_type, thumb_w_img, thumb.Width(), thumb.Height(), html_w, html_h, img_is_thumbable, lnki_upright);
|
||||
html_w = calc_size.Val_0(); html_h = calc_size.Val_1();
|
||||
@ -205,7 +205,7 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
if (meta_itm.Thumbs_indicates_oga() && lnki_ext.Id_is_ogv()) {lnki_ext = Xof_ext_.new_by_ext_(Xof_ext_.Bry_oga); return true;} // if audio, do not thumb; NOTE: must happen after html_orig_src, b/c html must still be generated to auto-download files; NOTE: must change ext to oga b/c ogg may trigger video code elsewhere
|
||||
if (lnki_ext.Id_is_audio()) return true; // if audio, return true; SEE:NOTE_2
|
||||
else if (lnki_ext.Id_is_video()) {
|
||||
Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_thumbtime)); // get thumb at lnki_thumbtime; NOTE: in most cases this will just be the 1st thumb; note that orig video files don't have an official thumb
|
||||
Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_time)); // get thumb at lnki_time; NOTE: in most cases this will just be the 1st thumb; note that orig video files don't have an official thumb
|
||||
if (thumb != null) {
|
||||
html_w = thumb.Width(); html_h = thumb.Height(); // NOTE: take thumb_size; do not rescale to html_w, html_h b/c html_w will default to 220; native width of thumbnail should be used; DATE:2013-04-11
|
||||
html_view_src = Trg_html(Xof_repo_itm.Mode_thumb, thumb.Width()); // NOTE: must pass thumb.Width() not html_w b/c only one thumb generated for a video file
|
||||
|
@ -27,15 +27,24 @@ public class Xow_file_mgr implements GfoInvkAble {
|
||||
fsdb_mgr = new Xof_fsdb_mgr__sql();
|
||||
wkr_mgr = new Xof_wkr_mgr(this);
|
||||
}
|
||||
public Xof_fsdb_mode Fsdb_mode() {
|
||||
if (fsdb_mode == null) {
|
||||
Version();
|
||||
}
|
||||
return fsdb_mode;
|
||||
} private Xof_fsdb_mode fsdb_mode = null;
|
||||
public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki;
|
||||
public byte Version() {
|
||||
if (version == Bool_.__byte) {
|
||||
Io_url file_dir = wiki.Fsys_mgr().File_dir();
|
||||
Io_url[] sqlite_fils = Io_mgr._.QueryDir_args(file_dir).FilPath_("*.sqlite3").ExecAsUrlAry();
|
||||
if (sqlite_fils.length == 0)
|
||||
if (!Io_mgr._.ExistsFil(file_dir.GenSubFil(Fsm_mnt_mgr.Mnt_name))) {
|
||||
version = Version_1;
|
||||
else
|
||||
fsdb_mode = Xof_fsdb_mode.new_wmf();
|
||||
}
|
||||
else {
|
||||
version = Version_2;
|
||||
fsdb_mode = Xof_fsdb_mode.new_view();
|
||||
}
|
||||
}
|
||||
return version;
|
||||
} private byte version = Version_null;
|
||||
|
@ -52,7 +52,7 @@ public class Xof_bin_mgr implements GfoInvkAble {
|
||||
Io_stream_rdr rv = Io_stream_rdr_.Null;
|
||||
boolean file_is_orig = itm.File_is_orig();
|
||||
if (file_is_orig || exec_tid == Xof_exec_tid.Tid_viewer_app) { // orig or viewer_app; note that viewer_app always return orig
|
||||
Io_url trg = Bld_url(itm, Xof_repo_itm.Mode_orig, Bool_.N);
|
||||
Io_url trg = url_bldr.To_url(repo_mgr, itm, Bool_.Y);
|
||||
itm.Html_view_url_(trg);
|
||||
for (int i = 0; i < wkrs_len; i++) {
|
||||
Xof_bin_wkr wkr = wkrs[i];
|
||||
@ -63,7 +63,7 @@ public class Xof_bin_mgr implements GfoInvkAble {
|
||||
}
|
||||
}
|
||||
else { // thumb
|
||||
Io_url trg = Bld_url(itm, Xof_repo_itm.Mode_thumb, Bool_.N);
|
||||
Io_url trg = url_bldr.To_url(repo_mgr, itm, Bool_.N);
|
||||
itm.Html_view_url_(trg);
|
||||
for (int i = 0; i < wkrs_len; i++) {
|
||||
Xof_bin_wkr wkr = wkrs[i];
|
||||
@ -79,7 +79,7 @@ public class Xof_bin_mgr implements GfoInvkAble {
|
||||
continue; // nothing found; continue;
|
||||
}
|
||||
if (!wkr.Resize_allowed()) continue;
|
||||
Io_url orig = Bld_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); // get orig url
|
||||
Io_url orig = url_bldr.To_url(repo_mgr, itm, Bool_.Y); // get orig url
|
||||
Io_stream_wtr_.Save_rdr(orig, rv);
|
||||
boolean resized = Resize(exec_tid, itm, file_is_orig, orig, trg);
|
||||
if (!resized) continue;
|
||||
@ -98,13 +98,6 @@ public class Xof_bin_mgr implements GfoInvkAble {
|
||||
itm.Rslt_cnv_(rv ? Xof_cnv_wkr_.Tid_y : Xof_cnv_wkr_.Tid_n);
|
||||
return rv;
|
||||
}
|
||||
private Io_url Bld_url(Xof_fsdb_itm itm, byte mode, boolean src) {
|
||||
Xof_repo_pair repo = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name());
|
||||
return src
|
||||
? url_bldr.Init_for_src_file(mode, repo.Src(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url()
|
||||
: url_bldr.Init_for_trg_file(mode, repo.Trg(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url()
|
||||
;
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_add)) return Wkrs__get_or_new(m.ReadStr("type"), m.ReadStrOr("key", null));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
|
@ -28,10 +28,10 @@ public class Xof_cache_mgr implements GfoInvkAble {
|
||||
this.fil_mgr = new Xofc_fil_mgr(this);
|
||||
}
|
||||
public int Next_id() {return cfg_mgr.Next_id();} public void Next_id_(int v) {cfg_mgr.Next_id_(v);}
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1) {
|
||||
cfg_mgr.Conn_(conn, created, version_is_1);
|
||||
dir_mgr.Conn_(conn, created, version_is_1);
|
||||
fil_mgr.Conn_(conn, created, version_is_1);
|
||||
public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1) {
|
||||
cfg_mgr.Conn_(conn, created, schema_is_1);
|
||||
dir_mgr.Conn_(conn, created, schema_is_1);
|
||||
fil_mgr.Conn_(conn, created, schema_is_1);
|
||||
}
|
||||
public void Db_save() {
|
||||
try {
|
||||
|
@ -24,8 +24,8 @@ class Xofc_cfg_mgr {
|
||||
public void Cache_len_add(long v) {cache_len += v;}
|
||||
public long Cache_min() {return cache_min;} public void Cache_min_(long v) {cache_min = v;} private long cache_min = Io_mgr.Len_mb * 75;
|
||||
public long Cache_max() {return cache_max;} public void Cache_max_(long v) {cache_max = v;} private long cache_max = Io_mgr.Len_mb * 100;
|
||||
public void Conn_(Db_conn v, boolean created, boolean version_is_1) {
|
||||
tbl.Conn_(v, created, version_is_1, "xowa_cfg", "file_cache_cfg");
|
||||
public void Conn_(Db_conn v, boolean created, boolean schema_is_1) {
|
||||
tbl.Conn_(v, created, schema_is_1, "xowa_cfg", "file_cache_cfg");
|
||||
if (created) {
|
||||
tbl.Insert(Cfg_grp, Cfg_key__next_id, Int_.Xto_str(1));
|
||||
tbl.Insert(Cfg_grp, Cfg_key__cache_len, Long_.Xto_str(0));
|
||||
|
@ -22,7 +22,7 @@ class Xofc_dir_mgr {
|
||||
private final OrderedHash hash_by_names = OrderedHash_.new_bry_(); private final HashAdp hash_by_ids = HashAdp_.new_();
|
||||
private Xof_cache_mgr cache_mgr;
|
||||
public Xofc_dir_mgr(Xof_cache_mgr v) {this.cache_mgr = v;}
|
||||
public void Conn_(Db_conn v, boolean created, boolean version_is_1) {tbl.Conn_(v, created, version_is_1);}
|
||||
public void Conn_(Db_conn v, boolean created, boolean schema_is_1) {tbl.Conn_(v, created, schema_is_1);}
|
||||
public Xofc_dir_itm Get_by_id(int id) {return (Xofc_dir_itm)hash_by_ids.Fetch(id);}
|
||||
public Xofc_dir_itm Get_by_name_or_make(byte[] name) {
|
||||
Xofc_dir_itm itm = Get_by_name_or_null(name);
|
||||
|
@ -21,10 +21,10 @@ class Xofc_dir_tbl {
|
||||
private String tbl_name = "file_cache_dir"; private final Db_meta_fld_list flds = Db_meta_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 version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "cache_dir";
|
||||
fld_prefix = "dir_";
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ class Xofc_fil_mgr {
|
||||
private Xof_cache_mgr cache_mgr;
|
||||
private final Xofc_fil_tbl tbl = new Xofc_fil_tbl(); private final OrderedHash hash = OrderedHash_.new_bry_(); private final Bry_bfr key_bldr = Bry_bfr.reset_(255);
|
||||
public Xofc_fil_mgr(Xof_cache_mgr v) {this.cache_mgr = v;}
|
||||
public void Conn_(Db_conn v, boolean created, boolean version_is_1) {tbl.Conn_(v, created, version_is_1);}
|
||||
public void Conn_(Db_conn v, boolean created, boolean schema_is_1) {tbl.Conn_(v, created, schema_is_1);}
|
||||
public void Save_all() {
|
||||
int len = hash.Count();
|
||||
boolean err_seen = false;
|
||||
@ -68,10 +68,10 @@ class Xofc_fil_mgr {
|
||||
}
|
||||
private Xofc_fil_itm Make_v1(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {return Make(Bool_.Y, dir_id, name, is_orig, w, h, time, page, ext, size);}
|
||||
public Xofc_fil_itm Make_v2(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {return Make(Bool_.N, dir_id, name, is_orig, w, h, time, page, ext, size);}
|
||||
private Xofc_fil_itm Make(boolean version_is_1, int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {
|
||||
private Xofc_fil_itm Make(boolean schema_is_1, int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {
|
||||
int id = cache_mgr.Next_id();
|
||||
Xofc_fil_itm rv = new Xofc_fil_itm(id, dir_id, name, is_orig, w, h, time, page, ext, size, 0, Db_cmd_mode.Tid_create).Cache_time_now_();
|
||||
byte[] key = version_is_1 ? rv.Gen_hash_key_v1(key_bldr) : rv.Gen_hash_key_v2(key_bldr);
|
||||
byte[] key = schema_is_1 ? rv.Gen_hash_key_v1(key_bldr) : rv.Gen_hash_key_v2(key_bldr);
|
||||
hash.Add(key, rv);
|
||||
return rv;
|
||||
}
|
||||
|
@ -22,10 +22,10 @@ class Xofc_fil_tbl {
|
||||
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;}
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) {
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
this.conn = new_conn; flds.Clear();
|
||||
String fld_prefix = "";
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
tbl_name = "cache_fil";
|
||||
fld_prefix = "fil_";
|
||||
}
|
||||
@ -36,7 +36,7 @@ class Xofc_fil_tbl {
|
||||
fld_w = flds.Add_int(fld_prefix + "w");
|
||||
fld_h = flds.Add_int(fld_prefix + "h");
|
||||
fld_time = flds.Add_int(fld_prefix + "thumbtime");
|
||||
if (version_is_1) {
|
||||
if (schema_is_1) {
|
||||
fld_page = Db_meta_fld.Key_null;
|
||||
}
|
||||
else {
|
||||
|
@ -17,11 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
|
||||
import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*;
|
||||
import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*;
|
||||
public interface Xof_fsdb_mgr extends RlsAble {
|
||||
Xof_orig_mgr Orig_mgr();
|
||||
Xof_bin_mgr Bin_mgr();
|
||||
Fsm_mnt_mgr Mnt_mgr();
|
||||
void Init_by_wiki(Xow_wiki wiki);
|
||||
void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page);
|
||||
void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoa_page page, Xog_js_wkr js_wkr);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user